版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、国家计算机二级考试c语言辅导课件一、c语言程序的结构1.程序的构成,main函数和其他函数。2.头文件,数据说明,函数的开始和结束标志以及程序中的注释。3.源程序的书写格式。4.c语言的风格。5.相关题目1) c语言程序是由函数构成,即函数是c程序的基本组成单位.2) 每一个c语言源程序可以包含多个程序文件,但必须而且只能具有一个main函数作为程序的主控函数,称为主函数.位置虽然不确定,但程序的运行都是从主函数开始到主函数结束.3) 一个源程序的不同程序文件之间通过调用来使用,但main函数不能被调用,只有一个程序文件中具有main函数,其它程序文件没有.4) 一个函数中不能定义另一个函数,
2、函数不能嵌套定义. int f1(int k)int w; w=k*k; return(w);void main() int i,j; long s1,s2; for(i=1;i=10;i+) s1=s1+f1(i);for(j=1;j=10;j+) s2=s2+f2(j);printf(“%ld,%ld”,s1,s2); int f2(int m) int z; z=m*m*m; return(z);1)头文件的作用,使用方法,扩展名.h2)注释部分的格式/* */,位置,作用3)大括号 表示函数体的开始和结束#include#include”math.h”main() float x; s
3、canf(“%f”,x);/*输入一个实数*/ printf(“%f”,sin(x);1)分号是语句的结束符2)一行可以容纳多条语句,而一条语句可以在多行3)源程序(.c)-目标程序(.obj)-可执行程序(.exe) 编译 连接main() int a,b; a=10;b=20; printf(“a=%d,b=%d”, a,b);1)标识符语法规则: c语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。 区分大小写,变量习惯上用小写,符号常量用大写。 对长度无统一规定。一般为8位,turbo c则允许32个字符。 标识符不能跨行书写,不能与关键字同名。_12
4、 a1 1s s%2 2)32个关键字总结:主要在第一章,涉及选择题11121)以下叙述中正确的是(07 9)a)c语言程序将从源程序中第一个函数开始执行b)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行c)c语言规定必须用main作为主函数名,程序将从此开始执行,在此结束d)main可作为用户标识符,用以命名任意一个函数作为主函数2)以下叙述中正确的是(08.4) a)c程序中的注释只能出现在程序的开始位置和语句的后面 b)c程序书写格式严格,要求一行内只能写一个语句 c)c程序格式自由,一个语句可以写在多行 d)用c语言编写的程序只能放在一个程序文件中3)以下选项中合法的
5、标志符是(09.3) a)1_1 b)1-1 c)_1 d)1_ _ccc4)以下叙述中正确的是(08.9) a)c程序的基本组成单位是语句 b)c程序中的每一行只能写一条语句 c)简单c语句必须以分号结束 d)c语句必须在一行内写完5)计算机能直接执行的程序是(08.9) a)源程序 b)目标程序 c)汇编程序 d)可执行程序6)以下叙述正确的是(10.3)a)c语言程序是由过程和函数组成的b)c语言函数可以嵌套调用,例如:fun(fun(x)c)c语言函数不可以单独编译d)c语言中除了main函数,其他函数不可作为单独文件形式存在cdb二、数据类型及其运算1.c的数据类型(基本类型,构造类
6、型,指针类型,无值类型void)及其定义方法。2.c运算符的种类、运算优先级和结合性。3.不同类型数据间的转换与运算。4.c表达式类型(赋值表达式,算术表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式)和求值规则。5.相关习题1)常量各自类型的表现形式 (1)整型常量 :十进制(123),八进制(0123),十六进制(0x123),57l (2)实型常量:十进制(12.3, 12. , .3),指数形式 (2.0e+5) (2.0e+1.5,e+2) (3)字符常量(a,1, 023,xa7,n,t) (4)字符串常量(“a”,”ab123”)注意:字符常量与字符串常量的不同(定界符字符
7、个数占据内存长度)2)各种数据类型 整型(short int 2 ,int 2 ,long int 4, unsinged ) 实型(float 4 7,double 8 15) 字符型 (char 1)3)变量的定义 掌握格式,含义,特点(一次只能对应一个值 新值覆盖旧值) int a; float b=4.5; (1)同种类型变量用一个类型标志符定义之间用逗号隔开 int a=20;b=10; (2)不同种类型变量定义之间用分号隔开 int a=20,float b=2.0; (3)变量定义时不允许出现连续赋值 int a=b=20;1)除法:当被除数和除数均为整数,则商一定为整数( 3/
8、2 , 3.0/2)2)求余:被除数和除数必须均为整数( 3.2%2)方法: (1)被除数和除数取绝对值,求余(2)余数的符号与被除数相同3)自增自减运算(1)操作数只能是变量(3+)(2)x+,+x的区别(先做再变,先变再做) (设x的原值等于3) y=x+; y=+x; printf(“%d”,x+); printf(“%d”,x+); 6+(x+) 6+(+x) x+3 +x34)赋值运算符: (1)赋值号左边只能出现变量名(y=x+1=0,x=9=10) (2)复合赋值运算符的写法及含义( a-=a+=a*a a为2) (3)结合性5)逗号运算符优先级最低:掌握运算顺序,注意一个逗号表
9、达式只有一个结果 printf(“%d”,x+,x+6,x+=7);6)条件运算符: (1)唯一的一个三目运算符(2)结合性(3)规则( (w)?x+:y+ 找等价 表达式1的值非0或0)1)赋值转换:以变量类型为准 int a ; a = 2.3; float b; b=7;2)计算时自动转换:低精度向高精度转换,特别的是单精度数运算一定转为双精度数,以提高运算速度(25页) 表达式:a+b-a+203)强制类型能够转换:格式 (类型名)表达式 (int)3.7/2 (int)x+2 (int) (x+2)注意:强制类型转换不改变变量自身的类型,变量类型一旦定义在程序运行阶段是无法改变的 1
10、)关系表达式: (1)优先级:所有相同,比算术运算符低 3+29=!4 (2)不同类型数据之间也可以用关系运算符比较大小 a=30 12.31 (3)关系表达式结果0或1 (4)注意=和=的区别 x=3 x=3 x+1=3; x+1=3; (5)数学中的式子2x2 & x92)逻辑表达式: (1)优先级:!、&、| (2)参加运算的操作数可以是各种类型数据,但只分为0和非0两类处理 !2+6 & 7|a (3)运算规则 (4)结果0或1 (5)&和|特性,当前面就能获得结果,那么后面的式子将不再做 int i=3,j=3; i+ | j+; int i=0,j=3; i+ & j+3)条件表达
11、式4)逗号表达式:(1)优先级最低 (2)运算从左至右,各表达式的值 (3)表达式的值只有一个,一组表达式中最后一个表达式的值5)代数式如何正确转为c中的表达式 (1)乘号不能省略 2x - 2*x (2)函数的括号不能省 sinx- sin(x) (3) 优先级的问题 2ab - 2*a*b/(2*c) 2c (4)标准函数名 总结:主要涉及到第二章和第四章一部分 ,试题为131617或181)若有表达式(w)?(-x): (+y), 则其中与w等价的表达式是(08.9)a)w =1 b)w=0 c)w!=1 d)w!=02)若函数中有定义语句:int k;则(09.3)a)系统将自动给k赋
12、初值0 b)这时k中值无定义c)系统将自动给k赋初值-1d)这时k中无任何值3)以下选项中能做数据常量的是(09.3)a)o115 b)0118 c)1.5e1.5 d)115l dbd4)有以下程序#include main()char c1,c2;c1=a+8-4;c2=a+8-5;printf(“%c,%dn”,c1,c2);已知字母a的ascii码为65,程序运行后的输出结果是(09.9)a) e,68 b) d,68 c) e,d d)输出无定值5)若有定义:double a=22;int i=0,k=18;,则不符合c语言规定的赋值语句是(10.3) a)a=a+,i+;b)i=(
13、a+k) y ) ;else max = y;4)复合语句:用 把多个语句括起来称为复合语句,又称分程序(1)while ( x y ) t =x ; x = y; y = t;1)字符输入函数: putchar( ) (功能,参数及其类型,返回值及其类型) putchar(a); putchar(023);putchar(x1a);putchar(30+35); char x; int y; float z; putchar(x); putchar(y); putchar(z);2)字符输入函数:getchar()(功能,返回值及其类型) x=getchar(); putchar(getch
14、ar();3)格式输出函数printf()(1)输出类型(在格式控制字符串中加入类型说明符): %d,%ld,%o,%x,%u,%f,%e,%c,%s说明:(1)输出项与格式描述符个数相等,类型匹配 (2) 输出时,格式限制符中的普通字符按原样输 出 printf(“x=%d,%f”,x); printf(“x=%d”,x,y); printf(“x=%d,y=%f”,x,y); (3)输出时,注意数值的符号(负号)和小数点占据的位 数 printf(“%3d,%3d,%3.2f”,-456,456,3.27); printf(“%+3d,%_3d,%3.2f”,456,456,3.27);(
15、2)输出长度(在类型限定前加上数字) %3d,%8d,%-8d,%5.3f,%.3f,%5c,%5.3s说明:1)实数输出时,默认是6位小数 2)截取小数时需四舍五入(3)输出表达式时,先按从右到左运算,在从左至右输出 n = 1; printf(“%d,%d,%d”,n,n+,+n);基本原则:不能使输出数据失真,当限制长度比实际长度短,按实际长度输出 printf(“%3s,%2d,%2.3”,”abcd”,123,23.5678);4)格式输入函数scanf()(1) “格式控制”后面应当是变量地址,而不应是变量名。int n; scanf(“%d”,&n); scanf(“%d”,n)
16、;(2)如果在“格式控制”字符串中除了格式说明符以外还有其他普通字符,则在输入数据时应输入与这些字符相同的字符。 scanf(“n1=%d,n2=%d”,&n1,&n2) (3) 格式字符和输入列表的变量类型匹配,个数相等 int i; float j,k; double l; scanf(“%d%d”,&i, &j); scanf(“%d%f”,&i, &j,&k); scanf(“%d%f%f”,&i, &j); scanf(“%f”,l);(3)在输入数值数据时,遇以下情况时该认为结束。 a.遇空格,或按“回车”或“跳格”(tab)键。 b.按指定的宽度结束。 c.遇非法输入。scanf
17、(“%d%d”,&a,&b); 12x3 scanf(“%d%f”,&x1,&x2); 123.4 scanf(“%d%d”,&x1,&x2); scanf(“%c”,&c); 12_3 12 3a a scanf(“%2d%*3d %2d”,&a,&b); 输入:12345678 (4)对于“%c” ,空格字符和转义字符都是有效字符。 scanf(“%c%c”,&c1,&c2); 12 1_2 (5)scanf()函数格式限制中只有”域宽”,而没有小数位数的限制 scanf(“%5.1f”,&x);(6) double a; scanf(“%lf”,&a);总结:基本内容在第三章,重点是sc
18、anf()函数和printf()函数的应用,选择题一般各占一题1819,还有后面的综合应用1)若变量已正确定义为int型,要通过语句scanf(“%d,%d,%d”,&a,&b,&c);给a赋值1,给b赋值2,给c赋值3,以下输入形式中错误的是(_代表一个空格)(08.9)a)_ _ _ 1,2,3 b)1_2_ 3 c)1,_ _ _2,_ _ _3 d)1,2,3 2)程序段:int x=12; double y=3.141593; printf(“%d%8.6f”,x,y);的输出结果是(09.3)a)123.141593 b)12 3.141593 c)12,3.141593 d)12
19、3.1415930 ba3) 若整型变量a和b中的值分别为7和9,要求按以下格式输出a和b的值: (08.4) a=7 b=9请完成输出语句:printf(“_”,a,b); 4)有以下程序 main() int a =0,b=0; a=10;/*给a赋值 b=20; 给b赋值*/ printf(“a+b=%dn”,a+b) /*输出结果*/程序运行后的输出结果是(06.9)a)a+b=10 b)a+b=30 c)30 d)出错 a=%dnb=%db5) 有以下程序includemain() char a,b,c,d;scanf(“%c%c”,&a,&b);c=getchar(); d=get
20、char();printf(“%c%c%c%cn”,a,b,c,d);当执行程序时,按下列方式输入数据(从第1列开始,代表回车,注意:回车也是一个字符)1234则输出结果是(10.3)a)1234 b)12c)12 d)12 3 34c四、选择结构程序设计1.用if语句实现选择结构。2.用switch语句实现多分支选择结构。3.选择结构的嵌套。4.相关习题1)关系表达式( = = 2 3=2 aa aa (1)优先级:前四个比后两个高,比算术运算符低 3+29=!4 (2)不同类型数据之间也可以用关系运算符比较大小 a=30 12.31 (3)关系表达式结果0或1 (4)注意=和=的区别 x=
21、3 x=3 x+1=3; x+1=3; (5)数学中的式子2x2 & x5 & 7|a (4)结果0或1 (5)&和|特性,当前面就能获得结果,那么后面的式子将不再做 int i=3,j=3; i+ | j+; int i=0,j=3; i+ & j+1)if分类: (1)单分支(if.): if(x2) printf(“ok”); 表达式语句真真(非非)条件成立,执行语句条件成立,执行语句(2)双分支(ifelse): if (x2) printf(“ok”); else printf(“no”); 假假(0)表达式语句1语句2真假(3)多分支(ifelse if else if. else
22、)表达式1表达式2表达式3表达式4语句1语句2语句3语句4语句5假假假假假假假假真真真真真真真真if(x10) printf(“1”);else if(x=9) printf(“2”);else if(x=8) printf(“3”);else printf(“4”);隐含条件 x=9 & xx2) printf(%d,1); printf(%d,2);else printf(%d,3);(3)if中的条件表达式可以是各种类型的,只需通过判断表达式结果为0或非0,决定执行什么语句 char x; int y; float k; if(x).else if(y+)else if(k+10)els
23、e if(yx)else if(y&k)排序:排序:1.输入两个实数,按代数值由小到大的次序输出这两个输入两个实数,按代数值由小到大的次序输出这两个数数算法分析:1、输入两个实数,分别赋给 两个实型变量a,b2、两个数的比较 2.1如果ab 则进行交换if(ab) t=a;a=b;b=t; 2.2如果a不大于b,则不能交换3、输出a,b 源程序:源程序: main() float a,b,t; scanf(“%f,%f”,&a,&b); if(ab) t=a;a=b;b=t; printf(“%5.2f,%5.2f”,a,b); 2.输入3个数a,b,c,要求按由小到大的顺序输出算法:(1)i
24、f ab 将a和b对换 (a是a,b中的小者)(2)if ac 将a和c对换 (a是a,c中的小者,因此a是三者中最小者)(3)if bc 将b和c对换 (b是b,c中的小者,也是三者中次小者)(4)顺序输出a,b,c源程序源程序:main() float a,b,c,t;scanf(“%f ,%f,%f”,&a,&b,&c);if (ab) t=a;a=b;b=t;if (ac) t=a;a=c;c=t;if (bc) t=b;b=c;c=t;printf(“%5.2f,%5.2f,%5.2f”,a,b,c);将上将上if语句改为:语句改为: main() float a,b,c,t; sc
25、anf(“%f ,%f,%f”,&a,&b,&c); if (ab) t=a;a=b;b=t; else if (ac) t=a;a=c;c=t; else if (bc) t=b;b=c;c=t; printf(“%5.2f,%5.2f,%5.2f”,a,b,c); switch结构与if多分支结构的区别: 1)switch结构只能表示等于关系,即 switch后的表达式是否与case 后的常量相等,而if可表示大于小于等于 switch(a/b) case 0: ; case 1: ; break; default: ;(可省) 2)当前面条件均不成立时,switch执行default后的
26、语句而if执行else后的语句,两个关键字均可省;但default的位置可调整,放到case之前运行结果不会不同;而else则不可.int a=6;switch(a)case 1:printf(“1”);break; default :printf(“2”);break; case 6:printf(“3”);main()int a=6;if (a=1)printf(1);else printf(2);else if(a=6)printf(3);3)if结构中至多只能执行一条语句,执行完即结束,而对于switch结构,找到符合条件的位置即找到入口,如不遇break语句则从入口处按从上至下的顺序
27、,执行到该结构结束int a=6;switch(a)case 1:printf(“1”);break; case 6:printf(“3”);default :printf(“2”);break;4)break语句在if结构中不能使用1)if与else的匹配原则(就近,else之上,没有其它if与之匹配):由上至下,从第一个else找匹配的2)if嵌套的读题顺序:匹配、从外向内执行 #include void main() unsigned int year,leap; printf(“enter year:”); if(year%400=0) leap =1; else if(year%4=
28、0&year%100!=0) leap=1; else leap = 0; if(leap=1) printf(“%d:is a leap year.”,year); else printf(“%d is not a leap year.”,year );程序程序1:main() float x; int y; scanf(“%f”,&x); if (x0) y=1;else y=0;总结:第四章,选择题20-25中1-2题,填空题1-2题1)有以下程序 #include main() int a=1,b=2,c=3,d=0; if (a=1&b+=2) if (b!=2|c-!=3) pri
29、ntf(”%d,%d,%dn,a,b, c); else printf(%d, %d, %dn.,a,b, c); else printf(%d, ad,%dn,a,b,c); 程序运行后的输出结果是(09.3)a) 1,2,3 b) 1,3,2 c) 1,3,3 d ) 3,2,1c2)以下程序段中,与语句:k=ab?(bc?1:0):0;功能相同的是(09.9)a)if(ab)&(bc)k=1; b) if(ab)|(bc)k=1; else k=0; else k=0; c) if(ab) k=1; else if(bc) k=1; else k=0;a3)以下选项中与if(a=1)a=
30、b; else a+;语句功能不同的switch语句是(10.3)a)switch(a) case 1:a=b;break;default:a+;b)switch(a=1) case 0:a=b;break;case 1:a+;c)switch(a) default:a+;break;case 1:a=b;d)switch(a=1) case 1:a=b;break;case 0:a+;b4)没有定义:int a=1,b=2,c=3;以下语句中执行结果与其它三个不同的是(09.9)a)if(ab) c=a,a=b,b=c; b)if(ab) c=a,a=b,b=c;c)if(ab) c=a;a
31、=b;b=c; d)if(ab) c=a;a=b;b=c;c5)有如下嵌套的if语句if (ab)if(ac)k=a;else k=c;elseif(b0)6x+1(6x0)x(x=6)五、循环结构程序设计1.for循环结构。2.while和do-while循环结构。3.continue语句和break语句。4.循环的嵌套。5.相关习题1)while 格式 表达式语句0非0实例: main() int x=1; s=0; while(x5) s=s+x; x+; printf(“%dn”,s); 流程图:流程图:2)dowhiledowhile的先执行与while的先判断结果可能会有所不同注意
32、区别 main() int x=1; s=0; while(x5) do s=s+x; s=s+x; x+; x+; printf(“%dn”,s); while(x5); printf(“%dn”,s);区别: (1)格式 ,特别是分号 (2)判断条件的先后,有时会影响程序的结果 (若上题中x的值被赋为6,结果是否有不同)语 句表达式0(假)非0(假)流程图:流程图:2)for(赋初值;循环结束的条件;控制变量的变 化)求解表达式1表达式2语 句求解表达式3for 语句的下一语句假真(2)三个表达式可省,但分号不能省 for ( ; i = 100 ; i + +) for ( i = 1;
33、 ; i + +) for ( i = 1; i = 100 ; ) for ( ; i = 100 ; ) for ( ; ; ; ) for(k=0,m=1;i=1;i+,j+ )main() int x=1; s=0; while(x5) for(x=1,s=0;x5;x+) s=s+x; s=s+x; x+; printf(“%d”,s); printf(“%dn”,s); (1)注意for循环执行顺序实例:main() float x=1,s=0; for(;x6) for(y=1;y=2;y+) s=s+x; x-; printf(“%d”,s); 3)continue结束本次循环
34、,break结束个循环,但注意在循环嵌套中只结束本层循环. for(i=1;i=3;i+) for(j=1;j=2;j+) if(i=1) break; printf(“%dn”,j);for(i=1;i=3;i+) for(j=1;j=2;j+) if(j =2) continue; printf(“%dn”,j);for(i=1;i=3;i+) if(i=3) break; printf(“%dn”,i);for(i=1;i=3;i+) if(i=3) continue; printf(“%dn”,i);5)常用算法:(1)累加求和题(2)图形输出题(3)查找题 (4)取某个数或某组数的每
35、位数字累加求和题基本思路:找规律,找加数变化规律1)找出相邻加数之间值的变化规律 2)或者加数与项数之间值的变化规律经典例题:1+3+5+7+9+.+101 (s = 0) for(i=1;i=101;i+=2) for(i=1;i=51;i+) s=s+i; s=s+2*i-1; 2/1-3/2+5/3-8/5+13/8-. flag = 1;a=2;b=1; for(i=1;i=20;i+) s = s+flag*a/b t=a; a=a+b;b=t; flag=-flag;main() double f,k;int m,i,j; scanf(%d,&n); for (i=1,f=0;i=
36、n;i+) k=1; for (j=2;j=i;j+) k=k+j; f=f+1.0/k; printf(%f,f);main() double f,k;int m,i,j; scanf(%d,&n); for (k=1,i=2,f=1;i=n;i+) k=k+i; f=f+1.0/k; printf(%f,f);s=1+1/(1+2)+1/(1+2+3)+.+1/(1+2+3+4+.+n)若把f的初值改为0main() double f,k;int m,i,j; scanf(%d,&m); k=1; for (i=1,f=1;i=m;i+) k=k*i; f=f+1.0/k; printf(
37、%f,f);fn=1+1/1!+1/2!+1/3!+.+1/m!#includedouble fun(int m)main() int m;double f; file *out; printf(“input m:”); scanf(“%d”,&m) f = fun(m);printf(“f=%fn”,f);out =fopen(“outfile.dat”,”w”);for(m=10;m10;m+) fprintf(out,”%fn”,fun(m);fclose(out);请编写程序,它的功能是计算下列级数和,和值等于 s=x/1+x2/2!+x3/3!+xn/n!当n=10、x=0.3时,函
38、数值为1.349859下列给定程序中,函数fun()的功能是:根据整型形参m的值,计算如下公式的值: 1-1/4-1/9-1/16.-1/(n*n) 请改正函数fun()中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include #include double fun(int m) double y=1.0; int i; /*found*/ for(i=2;im;i+) /*found*/ y-=1/(i*i); return(y); void main() int n=5; system(cls);
39、printf(nthe result is %1fn, fun(n);图形输出题 * * *main()int i,j; for(i=1;i=3;i+) for(j=1;j=3-i;j+) printf( ); for (j=1;j=2*i-1;j+) printf(*); printf(n);基本思路:1)确定行数,从而确定外层循环的次数; 2)找出每行列数与行号之间的规律,从而写出内层循环;3)找出每行空格数与行号之间的规律,从而确定每行起始位置。输出九九乘法表1*1=1 1*2=2 2*2=41*3=3 2*3=6 3*3=91*4=4 2*4=8 3*4=12 4*4=161*5=5
40、2*5=10 3*5=15 4*5=20 5*5=251*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=361*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=491*8=8 2*8=16 3*8=24 4*8=24 5*8=40 6*8=48 7*8=56 8*8=641*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81for(i=1;i=9;i+) for(j=1;j=i;j+) printf(“%d*%d=%d ”,j,i,i*j); printf(“n”
41、);查找题基本思路:穷举法,通常外层循环表示查找范围,而内层用选择结构表示查找条件,但有时,测试时也需要使用循环.输入所有的1100之间的偶数,并求出它们的平均数main() int x,ave=0,num=0;for(x=1;x=100;x+) if(x%2!=0) continue; printf(“%d ”,x); ave = ave+x; num+;printf(“ave=%d”,ave/num);编程:输出1到m(含m)之内能被7或11整除的所有整数,并计算个数。 例如,若赋值给m的值为50,则程序输出: 7 11 14 21 22 28 33 35 42 44 49 判断一个数是否
42、是素数计算并输出3到n(包括3和n)之间的素数的平方根之和 main() int i,j; float s;scanf(“%d”,&n); for(i=3;i=n;i+) for(j=2;ji;j+) if(i%j=0) break; if(j=i) s=s+sqrt(i); main() int i,j; float s;scanf(“%d”,&n); for(i=3;i=n;i+) for(j=2;jsqrt(i);j+) if(i%j=0) break; if(j=i) s=s+sqrt(i); main() int i,j,flag; float s;scanf(“%d”,&n); f
43、or(i=3;i=n;i+) flag=0; for(j=2;jsqrt(i);j+) if(i%j=0) flag=1; break; if(flag=0) s=s+sqrt(i);实现求1000以内的自然数中的完数及其个数(所谓完数,指它恰好等于除它本身之外的因子之和,如:6=1+2+3,28=1+2+4+7+14),并显示结果 main()int i,k,s,num=0; for(i=2;i=1000;i+) s=0; for(k=1;k=i/2;k+) if(i%k=0) s=s+k; if(s=i) printf(%d,i);num+; printf(nnum=%d,num);取数字
44、任意输入一个数,请把它的每位数字逆序输出例如:356 输出 6 5 3main() int x,m; scanf(“%d”,&x); while (x!=0) m = x%10; x=x/10;printf(“%dt”,m); 基本思路:通过与10相除,逐次降低每位的位权找出三位数中所有的”水仙花数”,输出并统计个数;水仙花数是指3位数的各位数字的立方和等于这个数本身.例如,153=1*1*1+5*5*5+3*3*3main()int i,m,k,s,num=0; for(i=100;i=999;i+) s=0;m=i; while(m!=0) k=m%10; m=m/10; s=s+k*k*
45、k; if(i=s) printf(%d,i);num+; printf(nnum=%d,num); 编程:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如当原来的数为87653142时,新的数为7531。 下列给定程序中函数fun的功能是:计算正整数num各位上的数字之积。例如,若输入252,则输出应该是20。若输入202,则输出应该是0。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include long fun(long num) /*fou
46、nd*/ long k; do k *=num%10; /*found*/ num =10; while(num); return(k); main() int n; printf(please enter a number: ); scanf(%ld,&n); printf(n%ldn,fun(n);(1)有以下程序#include main( ) char c1,c2; scanf(“%c”,&c1);while(c190) scanf(“%c”,&c1); c2=c1+32;printf(“%c, %cn”,c1,c2);程序运行输入65回车后,能否输出结果、结束运行(请回答能或不能)【
47、 】(09.3)不能2)有以下程序include(stdio.hmain()int al;b2;for(;a8;a+) b+=a;a+=2;printf(%d,%dn,a,b);程序运行后的输出结果是(10.3)a)9,18 b)8,11 c)7,11d)10,14d3)有以下程序#includemain()int i,j; for(i=3;i=1;i-) for(j=1;j=2;j+) printf(“%d”,i+j); printf(“n”);程序运行结果是(08.9)a)2 3 4 b)4 3 2 c) 2 3 d)4 5 3 4 5 5 4 3 3 4 3 4 4 5 2 3d4)有以
48、下程序includestdio.h main()in i,j,m=1;for(i=1;i3;i+)for(j=3;j0;j-) if(i*j)3)break; m=i*j;printf(m=%dn,m);程序运行后的输出结果是(10.3)a)m=6 b)m=2 c)m=4d)m=5a5)以下程序的功能是:将值为三位正整数的变量x中的数值按照个位、十位、百位的顺序拆分并输出。请填空。(10.3)#include main() int x=256; printf(%d-%d-%dn, 【 】 x/10%10,x/100);x%10结束七、函数 1.库函数的正确调用。2.函数的定义方法。3.函数的类
49、型和返回值。4.形式参数与实在参数,参数值传递。5.函数的正确调用,嵌套调用,递归调用。6.局部变量和全局变量。7.变量的存储类别(自动,静态,寄存器,外部),变量的作用域和生存期。调用格式1)函数语句函数语句:把函数调用作为一个语句。把函数调用作为一个语句。 printf( );2) 函数表达式函数表达式 函数出现在一个表达式中,这种表达式称为函数出现在一个表达式中,这种表达式称为函数函数表达式表达式。 这时要求函数带回一个确定的值以参加表达式的这时要求函数带回一个确定的值以参加表达式的运算。运算。 例如:例如: c=2*sin(a);3) 函数参数函数参数 函数调用作为一个函数的实参。函数
50、调用作为一个函数的实参。 printf(“%d”,fabs(-1);注意:头文件 定义格式 函数类型函数类型 函数名函数名(参数类型参数类型 参数参数 名名, , 参数参数类型类型 参数名参数名)1 1、 无参无参函数的定义形式函数的定义形式 类型标识符类型标识符 函数名()函数名() 声明部分声明部分 语句语句 2 2、 有参有参函数的定义形式函数的定义形式类型标识符类型标识符 函数名(形式参数表列)函数名(形式参数表列) 声明部分声明部分 语句语句 print_message( )printf( “how do you do ! n” );int max( int x,int y ) in
51、t z ; z = x y ? x : y ; return( z ) ;main() int x,y; scanf(“%d”,&x); y=x*x;printf(“%d”,y) ;int fun(int a) int b; b=a*a; return(b);main() int x,y; scanf(“%d”,&x); y=fun(x);printf(“%d”,y) ; 编写一个函数,由参数传入一个整数,计算该数的各位数字之积。main() int x,y,z=1; scanf(“%d”,&x); for( ;x!=0; ) y=x%10; z=z*y; x=x/10; printf(“%d
52、”,z);说明:1)定义时部分可省,请注意省略后默认的含义 2)自定义函数定义的位置(任意位置) 3)不能嵌套定义(可以嵌套调用)int max(int x,int y) int min(int x,int y) return (xy?x:y) 一.函数类型 函数类型主要指的是函数返回值的类型,定义时确定1)如果在定义函数时不指定函数类型,系统会如果在定义函数时不指定函数类型,系统会隐含指定函数类型为隐含指定函数类型为int型型 2)在定义函数时对函数说明的类型一般应该和在定义函数时对函数说明的类型一般应该和return语句中的表达式类语句中的表达式类型一致。如果不一致,则以函数类型为准。对数
53、值数据,可以自动进行型一致。如果不一致,则以函数类型为准。对数值数据,可以自动进行转换。即函数类型决定返回值的类型。转换。即函数类型决定返回值的类型。 float f() int f() . return 1; return 1.5; 二二.函数的返回值函数的返回值 1)函数的返回值是通过函数中的return语句获得的。return 语句将被调用函数中的一个确定的值带回主调函数中去 格式: return (表达式);或 return 表达式; 例: max(int x,int y) return(xy?x:y); 2)如果不需要从被调用函数带回函数值可以不要return语句或者return;
54、语 句。此时函数并不是不带回值,而只是不带回有用的值,带回的是一个不确定的值。3)为了明确表示“不带回值”,可以用void(空类型或无类型)void printstar( ) void print_message( ) 则下面的用法就是错误的: a=printstar(); b=print_message();注意:如果出现多个 return 语句,且不是出现在选择结构的各个分支中,则系统会自动执行第一个return语句,其它的不被执行main() main() . return 3; if (xy) return 1; return 6; else return 2;1) 以下关于retur
55、n语句的叙述中正确的是(10.3) a)一个自定义函数中必须有一条return语句b)一个自定义函数中可以根据不同情况设置多条return语句c)定义成void类型的函数中可以有带返回值的return语句d)没有return语句的自定义函数在执行结束时不能返回到调用处b2)以下叙述中错误的是(08.9) a) 用户定义的函数中可以没有return语句 b)用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值 c)用户定义的函数中若没有return语句,则应当定义函数为void类型d)函数的return语句中可以没有表达式b3.参数1)类型:形参:各种基本类型变量、数组、指
56、针变量实参:各种基本类型变量、常量、数组、数组元素、指针变量2)形参和实参必须个数相同、类型一致3)方式(1)值传递:形参变化不影响实参 int f(int a,int b) a=a*a; b=b*b; printf(“%d,%d”,a,b); main( ) int x=2,y=3; f(x,y); printf(“%d,%d”,x,y);(2)地址传递2323xyab491).有以下程序#include void fun(int p) int d=2 ;p=d+; printf(“%d”,p);main()int a=1;fun (a); printf(“%dn”,a);程序运行后的输出结
57、果是(09.9) a) 32 b) 12 c) 21 d) 22 c2)有以下程序 fun(int x,int y)return(x+y); main()int a=1,b=2,c=3,sum; sum=fun(a+,b+,a+b),c+); printf(“%dn”,sum);执行后的输出结果是(06 9)a) 6 b) 7 c) 8 d) 9c3)若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是(07.9)a)函数的实参和其对应的形参共占同一存储单元b)形参只是形式上的存在,不占用具体存储单元c)同名的实参和形参占同一存储单元d)函数的形参和实参分别占用不同的存储单元d4
58、)下面的函数调用语句中func函数的实参个数是 (08 9) func(f2(v1,v2),(v3,v4,v5),(v6,max(v7,v8);a)3 b) 4 c) 5 d) 8a一.函数调用函数调用的一般形式为函数调用的一般形式为 函数名(函数名(实参表列实参表列)1)如果是调用无参函数,则如果是调用无参函数,则“实参表列实参表列”可可以没有,但以没有,但括弧不能省略,括弧不能省略, 如果实参表列包含多个实参,则各参数间用如果实参表列包含多个实参,则各参数间用逗号隔开。逗号隔开。 实参与形参的个数应相等,类型应一致。实参与形参的个数应相等,类型应一致。 实参与形参按顺序对应,一实参与形参按
59、顺序对应,一 一传递数据。一传递数据。int f( int x,int y) .main()int a=5,b=4; f(a,b);2)函数语句函数语句:把函数调用作为一个语句。把函数调用作为一个语句。 print_star( );3) 函数表达式函数表达式 函数出现在一个表达式中,这种表达式称函数出现在一个表达式中,这种表达式称为为函数表达式函数表达式。 这时要求函数带回一个确定的值以参加表这时要求函数带回一个确定的值以参加表达式的运算。达式的运算。 例如:例如: c=2*max(a,b);4) 函数参数函数参数 函数调用作为一个函数的实参。函数调用作为一个函数的实参。 m=max(a,ma
60、x(b,c);又如:又如: printf(“%d”,max(a,b);5)被调函数的特点被调函数的特点 (1) 必须是已经存在的函数(是库函数或用必须是已经存在的函数(是库函数或用户自己定义的函数)。户自己定义的函数)。 (2)如果使用库函数,一般还应该在本文件开如果使用库函数,一般还应该在本文件开头用头用#include命令命令 将调用有关库函数时所将调用有关库函数时所需用到的信息需用到的信息“包含包含”到本文件中来。到本文件中来。(3)如果使用用户自己定义的函数,而且该函如果使用用户自己定义的函数,而且该函数与调用它的函数与调用它的函 数(即主调函数)在同一数(即主调函数)在同一个文件中个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新城吾悦广场活动策划
- 江苏省南京市鼓楼区2024-2025学年八年级上学期期中英语试卷(含答案解析)
- 职业学院旅游专业人才培养方案
- 催产药产业深度调研及未来发展现状趋势
- 儿童安全座运载工具用市场需求与消费特点分析
- 医用糖果产业规划专项研究报告
- Unit 9 课时练习 人教版英语八年级上册
- 偏振保持光纤产业运行及前景预测报告
- 指挥棒产业运行及前景预测报告
- 5G远程控制行业经营分析报告
- 泵盖铸造工艺课程设计
- 爆破片日常检查及定期更换记录
- 无损检测Ⅱ级人员超声(UT)锻件门类专业知识试题及详解
- 销售大户监管办法
- 小型装配式冷库设计(全套图纸)
- 电动汽车无线充电技术
- 八六版高中英语课文全集
- 审计工作手册
- 防蛇安全教育培训
- 胰腺癌一病一品知识分享
- 【原创】《基于地理实践力培养的校本课程开发研究》中期报告
评论
0/150
提交评论