[其它考试]湖南省计算机水平考试强化培训班二级C语言.doc

上传人:音乐台 文档编号:1972350 上传时间:2019-01-27 格式:DOC 页数:52 大小:288KB
返回 下载 相关 举报
[其它考试]湖南省计算机水平考试强化培训班二级C语言.doc_第1页
第1页 / 共52页
[其它考试]湖南省计算机水平考试强化培训班二级C语言.doc_第2页
第2页 / 共52页
[其它考试]湖南省计算机水平考试强化培训班二级C语言.doc_第3页
第3页 / 共52页
亲,该文档总共52页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《[其它考试]湖南省计算机水平考试强化培训班二级C语言.doc》由会员分享,可在线阅读,更多相关《[其它考试]湖南省计算机水平考试强化培训班二级C语言.doc(52页珍藏版)》请在三一文库上搜索。

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=

31、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);6. (数列)四舍五入注意关键问题:两个整数相除,结果为整数.所以要转化为实数运算.例: 当n=100时,计算S=(1-1/2)+(1/3-1/4

32、)+(1/(2n-1)-1/(2n)的值。要求:按四舍五入的方式精确到小数点后第三位。程序为:void main() int n; float s=0; for(n=1;n=100;n+) s=s+1.0/(2*n-1)-1.0/(2*n); printf(“%.3fn”,s);例:计算Y=X/1!-X3/3!+X5/5!-X7/7!+前20项的值(已知:X=2)。要求:按四舍五入的方式精确到小数点后第二位。程序为:void main()int n; float a,s,x=2; for(a=x,s=x,n=2;n2)求f(0)到f(50)中的最大值 void main() int n; lo

33、ng int f51,max=1; f0=1; f1=1; f2=0; for(n=3;n51;n+) fn=fn-1-2*fn-2+fn-3; if(maxfn)max=fn;printf(“%ldn”,max); 8. a,b,c,d,e类分析:数字游戏,穷举法,多层循环实现例:设有十进制数字a,b,c,d和e,它们满足下列式子:abcd*e=bcde (a不等于0, e不等于0或1),求满足上述条件的所有四位数abcd的和。程序为:void main() int a,b,c,d,e,sum=0; for(a=1;a10;a+) for(b=1;b10;b+) for(c=0;c10;c+

34、) for(d=0;d10;d+) for(e=2;e10;e+)if(a*1000+b*100+c*10+d)*e=b*1000+c*100+d*10+e)sum=sum+ a*1000+b*100+c*10+d;printf(“%dn”,sum);9. 解方程的整数解例:求方程8x-5y=3,在|x|=150, |y|=200内的整数解。试问这样的整数解中|x|*|y|的最大值是多少?程序为:void main()int x,y; long int max=-1; for(x=-150;x=150;x+) for(y=-200;y=200;y+) if(8*x-5*y=3&max fabs(x)*fabs(y)max= fabs(x)*fabs(y);printf(“%ldn”,max);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1