版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、湖南省计算机水平考试强化培训班二级c语言讲授内容:1. 选择结构(if、ifelse、switch语句)2. 循环结构(while、dowhile、for、break和continue语句)3. 函数的定义与调用4. 数组5. 改错和填空、程序设计常见问题分析和举例选择结构1 格式格式1:if(表达式)语句;格式2:if(表达式)语句1; else 语句2;2 功能 3 注意(1) 表达式可以是常量、变量、算术表达式、关系表达式、逻辑表达式,但表达式中的变量应该是已赋值,只判断表达式的值是否为非零。几种特殊情况:if(5)if(a) if(a!=0)if(a+b) if(a+b!=0)if(a
2、b&bc) 错误的是:if(abc),也不能是:if(ab,bc)if(a=b) 相当于:a=b; if(a!=0)if(a=b) if(ch=a&ch=a&ch=a&ch=a&chb)t=a;a=b;b=t;(3) if语句嵌套搞不清楚时,尽量使用单if语句。如:if(a0) if(b10)c=c+1;可改成:if(a0&b10)c=c+1;4 switch语句格式:switch(表达式) case 常量1:语句序列1;break;case 常量2:语句序列2;break;case 常量n:语句序列n;break;default: 语句序列n+1;注意:(1) 表达式运算的结果是整数;(2)
3、 有无break语句的执行不同。循环结构1 while语句 格式:while(表达式) 循环体2 dowhile语句 格式: do 循环体;while(表达式);3 for语句 格式: for(表达式1;表达式2;表达式3) 循环体;对于上述三种循环结构要了解下面几个问题:(1) 表达式是循环控制条件,与if语句中的表达式一样。(2) 三种循环语句的执行过程。#include stdio.hvoid main() int a,b; for(a=1;a=9;a+) printf(a=%d:,a);for(b=1;b=a;b+) printf(%8d,a*b);printf(n);下面的程序是求表
4、达式的值:s=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+.+(1*2*3*.*n)/(3*5*7*.(2*n+1)请修改程序中的错误,并运行修改后的程序。当n=30时,程序的运行结果(按四舍五入保留10位小数)。程序:#include #include #include double fun(int n) double s, t; int i; s=1.0; t=1.0; for(i=1;i=n; i+) /*下行有错*/ t=t*n/(2*n+1); /*下行有错*/ s=t; return s;main()printf(n %12.10lf, fun(30);4
5、break和continue语句函数1 函数定义的格式 一般格式: 函数类型 函数名(形参及形参类型) 函数体 注意:(1) 函数类型的定义:如果只有一个返回值,根据返回值的数据类型来定义。无返回值或2个或2个以上,函数类型定义为void. float fun (int n) float s; return s;void main() printf(“%10.2fn”,fun(20);(2) 形参及形参类型:每个形参要分别定义其数据类型;实参将值单向传递给形参。如:void fun(int x ,int y)x=x+1; y=y+1;void main()int a=10,b=20;fun(a
6、,b);printf(“a=%d,b=%dn”,a,b); (3) 函数体中的return语句只能返回一个值。2 函数调用格式:函数名(实参列表) 实参与形参应一一对应,数据类型与个数也应一一对应。tc参数传递方向从右向左。3函数调用方式:递归调用数组1 数组的定义格式:一维数组:数据类型 数组名常量二维数组:数据类型 数组名常量1常量2注意:(1) 数组元素下标从0开始到长度减1int a5;数组元素有:a0 a1 a2 a3 a4下标从0变化到4,可以使用一个循环变量来控制,如:for(i=0;i=4;i+),i的变化恰好是下标值的变化。int a34;数组元素有: a00 a01 a02
7、 a03 a10 a11 a12 a13 a20 a21 a22 a23同样以上一样,可以用一个双层循环来控制二维数组下标的变化: for(i=0;i=2;i+)for(j=0;j=3;j+)2. 数组的引用两种方式:引用数组元素名(直接方式)和引用数组名。(1) 引用数组元素名时,可把数组元素名看作是单个的变量来使用。如: scanf(“%d”,&a0); a0=10;(2) 引用数组名时,数组名只能作函数参数,且传递整个数组。在被调函数中对形参数组操作,形参数组的值能返回到实参数组。如:void fun(int b,int n) int k; for(k=0;kn;k+) bk=bk+1;
8、 void main() int a5=0,1,2,3,4,k; fun(a,5); for(k=0;k5;k+) printf(“%8d”,ak); 改错题 单击”考生文件夹”,进入下面界面首先看清题目,有几个错误提示行,则必须改正几个错误。每一个错误在提示行的下一行。运行程序,填上正确的答案。前后不要加空格,数据输出不要在汉字输入状态举例:1 输入函数变量前没有取地下址运算符下面的程序中,函数fun的功能是:根据形参m,计算下面公式的值。 t=1+1/(2*3)+1/(3*4)+.+1/(m*(m+1) 请改正程序中的错误,并运行改正后的程序。当从键盘输入56时,给出程序运行的正确结果。程
9、序:#include #include double fun(int m) double t=1.0;int i=2;for(i=2;i=m;i+) /*下行有错 */ t=1.0/(i*(i+1);return t; main() int m;printf(n 请输入一个整数: );/*下行有错 */scanf(%d,m);printf(%lf n,fun(m); 2 变量数据类型定义为整数,进行除法运算时,要转化为实数运算。下列程序的功能是:求出以下分数序列的前30项之和,2/1,3/2,5/3,8/5,13/8,21/13,请改正程序中的错误,并运行修改后程序,给出程序结果(按四舍五入保
10、留6位小数)。程序:#include #include main() long a,b,c,k; double s; clrscr(); s=0.0; a=2; b=1; for(k=1;k=30;k+) /*下行有错*/ s=s+a/b; c=a; a=a+b; b=c; printf(%lfn, s);3 变量赋初值错误。(一般的情况:求和变量初值为0,求积初始值为1)。 以下程序求1,1000之间能被5 和 7 整除的数之和。请改正程序中的错误,并运行修改后的程序,给出正确程序运行结果,填入相应窗口。#include #include #include main()int i,sum;/
11、*下行有错*/sum=1;for ( i=1;i=1000;i+) /*下行有错*/ if ( fmod(i,5)=0)|(fmod(i,7)=0) sum=sum+i; clrscr();printf(%dn,sum);4 运算出错。常见的错时:%用/,=用!=,|用&,可反过来用。以下程序求1,1000之间能被5 和 7 整除的数之和。请改正程序中的错误,并运行修改后的程序,给出正确程序运行结果,填入相应窗口。#include #include #include main()int i,sum;/*下行有错*/sum=1;for ( i=1;i=1000;i+) /*下行有错*/ if (
12、 fmod(i,5)=0)|(fmod(i,7)=0) sum=sum+i; clrscr();printf(%dn,sum);5 边缘条件出错误,应该是=时,只有.以下程序求1,500之间能被3 或5整除的数之和。请改正程序中的错误,并运行修改后的程序,给出正确程序运行结果.#include #include #include main()int i;int sum;sum=0;/*下行有错*/for ( i=1;i500;i+) if ( fmod(i,3)=0)|(fmod(i,5)=0)sum+=i; printf(%dn,sum);6. 算法出错 下面的程序是求500以内的所有的素数
13、之和。请修改程序中的错误,使它能得出正确的结果,并给出正确结果。程序:#include #include #include int prime(int n) int yes, i; if(n=1) return 1; yes=1; for(i=2; i=sqrt(n); i+) if(n%i=0) yes=0; break;/*下行有错*/ return 1;main() int sum=0, i; clrscr(); for(i=2;i=500; i+) if(prime(i) sum+=i; printf(%dn, sum); 7“+”与“+”用法出错。以下程序求1,500之间能被5 和
14、7 整除的数之和。请改正程序中的错误,并运行修改后的程序,给出正确程序运行结果,填入相应窗口。#include #include #include main()int i,sum;sum=0;for ( i=4;i=500;i+) if ( fmod(i,5)=0)&(fmod(i,7)=0) /*下行有错*/ sum=+i; printf(%dn,sum);8表达式出错(“*”导致的错误)下面的程序中,函数fun的功能是:根据形参m,计算下面公式的值。 t=1+1/(2*3)+1/(3*4)+1/(m*(m+1) 当从键盘输入70时,给出程序运行的正确结果。#include #include
15、 double fun(int m) double t=1.0;int i=2;for(i=2; i=m; i+)/*下行程序有错*/ t+=1.0/i*(i+1);/*下行程序有错*/return ;main() int m;clrscr();printf(n 请输入一个整数: );scanf(%d,&m);printf(%lf n, fun(m);9结果是求个数,不是求累加和。下面程序是求20,1000之间同时满足除4余3或除5余4条件的数的个数。请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。程序:#include #include #include main()
16、 int count; int i; count=0; for (i=20;i=1000;i+) if (fmod(i,4)=3 | fmod(i,5)=4) /*下行有错*/ count+=i; printf(%ldn,count);10for语句的三个表达式出错。下面的程序是求表达式的值: s=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+.+(1*2*3*.*n)/(3*5*7*.(2*n+1) 当n=20时,程序的运行结果(按四舍五入保留10位小数)。程序:#include #include double fun(int n) double s, t; int i
17、; /*下行有错*/ s=0.0; t=1.0; /*下行有错*/ for(i=1;i=n; i-) t=t*i/(2*i+1); s+=t; return s; main()printf(n %12.10lf, fun(20);11函数数据类型定义或变量数据类型定义出错下面的程序是计算如下公式的a30值。 a1=1, a2=1/(1+a1), a3=1/(1+a2), a4=1/(1+a3), .请改正程序中的错误,并给出程序运行的正确结果(按四舍五入保留10位小数) 程序:#include #include double fun(int n) /*下行有错*/ int a=1;int i;
18、 for(i=2; i=n; i+) a=1/(1+a); /*下行有错*/ return ;main() printf(%12.10lfn, fun(30); 12奇偶数问题下面程序是求20,160之间的所有偶数的平方和。请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。程序:#include #include #include main() long sum; int i; sum=0; /*下行有错*/ for (i=20;i160;i+) /*下行有错*/ if (fmod(i,2)!=0) sum+=i*i; clrscr(); printf(%dn,sum);
19、填空题(1)阅读题目,搞清题意;(2)阅读程序,理解算法,特别是程序中每个变量的作用.(3)根据程序运行,计算和估算,发现程序中缺什么,需要补充什么?如:已知24有8个因子,而24正好被8整除。求50,250之间有多少个整数能被其因子的个数整除,将下列程序补充完整,把程序运行的正确结果填入相应窗口。程序:#include #include #include main() int a,b,c,n,count=0; for (a=50; a=250; a+) _ for (c=1;c=a;c+) if ( _ ) b+=1; if (a%b=0) count+; printf(%d,count);
20、1.补充变量定义和赋初值如: 以下程序求1,700之间能被3 或7 整除的数之和。请将程序补充完整,把程序运行的正确结果填入相应窗口。#include #include #include main() _sum=0;for ( i=1;i=700;i+) if ( fmod(i,3)=0)|(fmod(i,7)=0) _ clrscr();printf(%ld,sum);如:下面的程序是求表达式的值: s=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+.+(1*2*3*.*n)/(3*5*7*.(2*n+1)请将程序补充完整,并给出当n=40时,将程序的运行结果填入相应窗
21、口(按四舍五入保留10位小数)程序:#include #include #include double fun(int n) double s, t; int i; _t=1.0; for(i=1;i=n; i+) t=t*i/(2*i+1); _ return s;main()printf(%12.10lf, fun(40); 2. 补充for语句的三个表达式如:已知24有8个因子,而24正好被8整除。求50,250之间所有能被其因子的个数整除的整数之和,将下列程序补充完整,把程序运行的正确结果填入相应窗口。程序:#include #include #include main() int a
22、,b,c,n,sum=0; for ( _ ) b=0; for (c=1;c=a;c+) if (a%c =0) b+=1; if (a%b=0) _ printf(%d,sum);3填写表达式,实现算法(程序实现的主要语句)下面的程序是求如下表达式的值。s=sqrt(ln(1)+ln(2)+ln(3)+ln(n)将程序补充完整, 当n=40时,把程序运行的正确结果填入相应窗口。#include #include #include double fun(int n) double s=0.0;int i; for(i=1;i=n;i+) _ s=sqrt(s); return s;main(
23、) clrscr(); printf(_);4补充if语句中的条件如:求1,100中的非素数的个数,采用函数fun( int m, int xx )实现,函数fun的功能是:将1,m中的非素数存入xx数组中,返回非素数的个数。将下列程序补充完整,把程序运行的正确结果填入相应窗口。#include stdio.hfun( int m, int xx ) int i,j,k=0; xxk+=1; for( i=2; i=m; i+) for( j=2; j10000的最小值s。请将下列程序补充完整,把程序运行的正确结果填入相应窗口。#include stdio.hmain() int k,s=0,
24、sum=0; for(k=1;k+) _; sum=sum+s; if(sum10000) _; printf(%dn,sum);6输出结果已知(1)=1,x(2)=1/(1+x(1),x(3)=1/(1+x(2),x(n)=1/(1+x(n-1),求x(1)+x(2)+x(3)+x(10)。按四舍五入的方式精确到小数点后三位。请将下列程序补充完整,把程序运行的正确结果填入相应窗口。#include stdio.hmain() int n; float x=1,s=1; for(n=2;n=10;n+) _; s=s+x; printf(_);7函数调用格式如:所谓回文数是从左至右与从右至左读
25、起来都是一样的数字,如:121。编一个程序,计算在100200的范围内回文数的累加和。请将下列程序补充完整,把程序运行的正确结果填入相应窗口。#include stdio.hint fun(int a,int b) int i,count=0,low,high; for ( i=a;i=b;i+ ) low=i%10; high=i/100; if( low=high ) _; return count;void main() printf(%dn,_ );程序设计(1) 看清题目;(2) 程序设计题主要是利用选择、循环和数组三方面的知识;(3) 主要是数学计算;1 素数方面定义:除1和它本身
26、外,不能被其它整数整除的正整数称为素数(注:1不是素数,2是素数)函数一: int fun(int x) int n,yes; for(n=2;n=x)yes=1;else yes=0;return yes; 函数二:int fun(int x) int n,yes; for(n=2;n=sqrt(x)yes=1;else yes=0;return yes; 函数三:int fun(int x) int n,yes=1; for(n=2;nx;n+)if(x%n=0)yes=0;return yes; 例1 两个素数之差为2,则称这两个素数为双胞胎数。求出200,1000之间的最大一对双胞胎数
27、的和。程序为:void main() int k,max; for(k=200;k2000;k+) if(fun(k)=1&fun(k+2)=1)max=k+k+2;printf(“%dn”,max);例:若两个连续的自然数的乘积减1后是素数,则称此两个连续自然数为友数对,该素数称为友素数。例如,由于 8*9-1=71, 因此,8与9是友数对,71是友素数。求100,200之间的第10个友素数对所对应的友素数的值(按由小到大排列)。程序为:void main()int k,ans,s=0;for(k=100;k200;k+) if(fun(k*k+k-1)=1)ans=k;s+; if(s=1
28、0)break;printf(“%dn”,ans);2分解数位分析:任意一个正整数x,分解出各个数位: 方法或表达式很多,例如:个位:x%10 百位:x/10%10千位:x/100%10 另:5位数取最高位:x/10000例:求符合下列条件的四位完全平方数(某个正整数a是另一个正整数b的平方,则称a为完全平方数),它的千位数字与十位数字之和等于百位数字与个位数字之积,例如,3136=562, 且3+3=1*6 故3136是所求的四位完全平方数. 求其中最大的一个数。程序为:void main() int a, b,c,d,e,f,answer; for(a=1000;a=9999;a+) b=
29、sqrt(k);c=a%10;d=a/10%10;e=a/100%10;f=a/1000;if(b*b=k&f+d=e*c)answer=a; printf(“%dn”,answer); 3n元一次方程求解分析:根据方程x1+x2+x3+xn=s(可能还有条件)x1、x2、x3、xn的取值范围都是1s-1,用穷举法实现,n层循环嵌套。例:马克思曾经做过这样一道趣味数学题:有30个人在一家小饭店里用餐,其中有男人、女人和小孩,每个男人花了3先令,每个女人花了2先令,每个小孩花了1先令,共花去50先令。如果要求男人、女人和小孩都有人参与,试求有多少种方案分配男人、女人和小孩的人数。程序为:void
30、 main() int x,y,z,s=0; for(x=1;x30;x+)for(y=1;y30;y+)for(z=1;zbc,求a,b,c之和小于100的倒勾股数有多少组?程序为:void main()int a,b,c,s=0; for(c=1;c100;c+)for(b=c+1;b100;b+) for(a=b+11;a100;a+) if(a+b+c100&fabs(1.0/a/a+1.0/b/b-1.0/c/c)0.000001)s+;printf(“%dn”,s); 5.完数因子问题分析:先任意正整数x求因子之和。 s=0;n=0; for(k=1;kx/2;k+)if(x%k=0)s=s+k;n+;例:已知24有8个正整数因子(即:1,2,3,4,6,8,12,24),而24正好能被其因子数8整除,求正整数10,100之间有多少个正整数能被其因子的个数整除。程序为:void main()int s,n,x,sum=0; for(x=10;x=100;x+)s=0;n=0;for(k=1;kx/2;k+)if(x%k=0)s=s+k;n+;/*s在本题中没用*/if(x%n=0)sum+;printf(“%dn”,sum)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 沪科版九年级数学上册期末复习考点 第23章 解直角三角形知识归纳与题型突破(12类题型清单)
- 2024-2030年中国型钢产业趋势预测及投资产量分析报告
- 2024-2030年中国地铁建设行业前景规划及投资经营模式分析报告
- 2024年智能软件使用与数据保密协议2篇
- 2024年特许经营合同(加盟)
- 梅河口康美职业技术学院《运动伤害事故处理与急救》2023-2024学年第一学期期末试卷
- 2024年“通办”第二批事项指导目录实施合同范本3篇
- 2024年二手手机买卖与市场推广合作协议3篇
- 满洲里俄语职业学院《云计算原理及应用》2023-2024学年第一学期期末试卷
- 影视动画资源库相关专业介绍
- 离散数学(下)智慧树知到课后章节答案2023年下桂林电子科技大学
- 咖啡因提取的综合性实验教学
- GONE理论视角下宜华生活财务舞弊案例分析
- 初中语文默写竞赛方案
- 2023电力建设工程监理月报范本
- 汽车空调检测与维修-说课课件
- 氨水浓度密度对照表
- 白雪歌送武判官归京公开课一等奖课件省课获奖课件
- 园林植物栽培与环境
- 小型双级液压举升器设计
- 9月支部委员会会议记录
评论
0/150
提交评论