计算机二级考试C语言辅导课件.ppt
国家计算机二级考试 C语言辅导课件,一、C语言程序的结构,1.程序的构成,main函数和其他函数。 2.头文件,数据说明,函数的开始和结束标志以及程序中的注释。 3.源程序的书写格式。 4.C语言的风格。 5.相关题目,C语言程序是由函数构成,即函数是C程序的基本组成单位. 每一个C语言源程序可以包含多个程序文件,但必须而且只能具有一个main函数作为程序的主控函数,称为主函数.位置虽然不确定,但程序的运行都是从主函数开始到主函数结束.一个源程序的不同程序文件之间通过调用来使用,但main函数不能被调用,只有一个程序文件中具有main函数,其它程序文件没有.一个函数中不能定义另一个函数,函数不能嵌套定义.int f1int k int w; wk*k; returnw; void main int i,j; long s1,s2;fori1;i10;is1s1f1i; forj1;j10;js2s2f2j; printf“ld,ld”,s1,s2;int f2int mint z; zm*m*m; returnz;,1头文件的作用,使用方法,扩展名.h 2注释部分的格式/* */,位置,作用 3大括号 表示函数体的开始和结束include include”math.h” main float x; scanf“f”,x;/*输入一个实数*/printf“f”,sinx; 1分号是语句的结束符 2一行可以容纳多条语句,而一条语句可以在多行 3 源程序.c-目标程序.obj-可执行程序.编译 连接 main int a,b;a10;b20;printf“ad,bd”,a,b; 1标识符语法规则C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。区分大小写,变量习惯上用小写,符号常量用大写。对长度无统一规定。一般为8位,Turbo C则允许32个字符。标识符不能跨行书写,不能与关键字同名。_12 a1 1s s2 232个关键字总结主要在第一章,涉及选择题1112 1)以下叙述中正确的是(07 9) A)C语言程序将从源程序中第一个函数开始执行 B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行 C)C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束 D)main可作为用户标识符,用以命名任意一个函数作为主函数 2以下叙述中正确的是(08.4)AC程序中的注释只能出现在程序的开始位置和语句的后面BC程序书写格式严格,要求一行内只能写一个语句CC程序格式自由,一个语句可以写在多行D用C语言编写的程序只能放在一个程序文件中 3以下选项中合法的标志符是09.3A1_1 B1-1 C_1 D1_ _,C,C,C,4以下叙述中正确的是08.9AC程序的基本组成单位是语句BC程序中的每一行只能写一条语句C简单C语句必须以分号结束DC语句必须在一行内写完 5计算机能直接执行的程序是08.9A源程序 B目标程序 C汇编程序 D可执行程序 6)以下叙述正确的是10.3 A)C语言程序是由过程和函数组成的 B)C语言函数可以嵌套调用,例如funfunx C)C语言函数不可以单独编译 D)C语言中除了main函数,其他函数不可作为单独文件形式存在,C,D,B,二、数据类型及其运算,1.C的数据类型基本类型,构造类型,指针类型,无值类型void及其定义方法。 2.C运算符的种类、运算优先级和结合性。 3.不同类型数据间的转换与运算。 4.C表达式类型赋值表达式,算术表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式和求值规则。 5.相关习题,1常量各自类型的表现形式1整型常量 十进制123,八进制0123,十六进制0X123,57L2实型常量十进制12.3, 12. , .3,指数形式 2.0e5 2.0e1.5,e23字符常量a,1, 023,xa7,n,t4字符串常量“a”,”ab123” 注意字符常量与字符串常量的不同定界符字符个数占据内存长度 2各种数据类型整型short int 2 ,int 2 ,long int 4, unsinged 实型float 4 7,double 8 15字符型 char 1,3变量的定义掌握格式,含义,特点一次只能对应一个值新值覆盖旧值int a; float b4.5;1同种类型变量用一个类型标志符定义之间用逗号隔开int a20;b10;2不同种类型变量定义之间用分号隔开int a20,float b2.0;3变量定义时不允许出现连续赋值int ab20;1除法当被除数和除数均为整数,则商一定为整数 3/2 , 3.0/2 2求余被除数和除数必须均为整数 3.22 方法 1被除数和除数取绝对值,求余2余数的符号与被除数相同 3自增自减运算1操作数只能是变量3 2x,x的区别先做再变,先变再做 设x的原值等于3yx; yx;printf“d”,x; printf“d”,x;6x 6x x3 x3 4赋值运算符 1赋值号左边只能出现变量名yx10,x910 2复合赋值运算符的写法及含义 a-aa*a a为2 3结合性 5逗号运算符优先级最低掌握运算顺序,注意一个逗号表达式只有一个结果printf“d”,x,x6,x7; 6条件运算符 1唯一的一个三目运算符2结合性3规则 wxy 找等价 表达式1的值非0或01赋值转换以变量类型为准int a ; a 2.3; float b; b7; 2计算时自动转换低精度向高精度转换,特别的是单精度数运算一定转为双精度数,以提高运算速度25页表达式ab-a20 3强制类型能够转换格式 类型名表达式int3.7/2 intx2 int x2 注意强制类型转换不改变变量自身的类型,变量类型一旦定义在程序运行阶段是无法改变的1关系表达式 1优先级所有相同,比算术运算符低 32942不同类型数据之间也可以用关系运算符比较大小a30 12.31 3关系表达式结果0或1 4注意和的区别x3 x3 x13; x13;5数学中的式子22 x9,2逻辑表达式1优先级、 i j 3条件表达式 4逗号表达式1优先级最低 2运算从左至右,各表达式的值 3表达式的值只有一个,一组表达式中最后一个表达式的值,5代数式如何正确转为C中的表达式1乘号不能省略 2x - 2*x2函数的括号不能省 sinx- sinx3 优先级的问题 2ab 2*a*b/2*c2c4标准函数名总结主要涉及到第二章和第四章一部分 ,试题为131617或18 1若有表达式wx y, 则其中与w等价的表达式是08.9 AW 1 BW0 CW1 DW02若函数中有定义语句int k;则09.3 A系统将自动给k赋初值0 B这时k中值无定义 C系统将自动给k赋初值-1 D这时k中无任何值3以下选项中能做数据常量的是09.3 Ao115 B0118 C1.5e1.5 D115L,D,B,D,4有以下程序 include main char c1,c2; c1A8-4; c2A8-5; printf“c,dn”,c1,c2; 已知字母A的ASCII码为65,程序运行后的输出结果是(09.9) A E,68 B D,68 C E,D D输出无定值5若有定义double a22;int i0,k18;,则不符合C语言规定的赋值语句是10.3A)aa,i; B)i(ak)(ik); C)ia11; D)ia; 6设x为int型变量,请写出一个关系表达式 【6】 ,用以判断x同时为3和7的倍数时,关系表达式的值为真。10.3,A,A,X30 X70,X3 X7,三、基本语句,1.表达式语句,空语句,复合语句。 2.输入输出函数的调用,正确输入数据并正确设计输出格式。 3.相关习题,1表达式语句 i ; 35,68; a3 ; 2函数调用语句 printf“This is a C statement.”; sqrt x ; 3空语句即只有一个分号的语句。 if max y ; else max y; 4复合语句用 把多个语句括起来称为复合语句,又称分程序 1while x y t x ; x y; y t;1字符输入函数 putchar 功能,参数及其类型,返回值及其类型putchara; putchar023;putcharx1a;putchar3035;char x; int y; float z;putcharx; putchary; putcharz;2字符输入函数getchar功能,返回值及其类型xgetchar; putchargetchar;3格式输出函数printf 1输出类型在格式控制字符串中加入类型说明符d,ld,o,x,u,f,e,c,s 说明1输出项与格式描述符个数相等,类型匹配 2 输出时,格式限制符中的普通字符按原样输 出printf“xd,f”,x; printf“xd”,x,y;printf“xd,yf”,x,y;3输出时,注意数值的符号负号和小数点占据的位 数 printf“3d,3d,3.2f”,-456,456,3.27;printf“3d,_3d,3.2f”,456,456,3.27;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”(2)如果在“格式控制”字符串中除了格式说明符以外还有其他普通字符,则在输入数据时应输入与这些字符相同的字符。scanf“n1d,n2d”, (3)在输入数值数据时,遇以下情况时该认为结束。a.遇空格,或按“回车”或“跳格”Tab键。b.按指定的宽度结束。c.遇非法输入。,scanf“dd”总结基本内容在第三章,重点是scanf函数和printf函数的应用,选择题一般各占一题1819,还有后面的综合应用1若变量已正确定义为int型,要通过语句scanf“d,d,d”, printf(“d8.6f”,x,y);的输出结果是09.3 A)123.141593 B)12 3.141593 C)12,3.141593 D)123.1415930,B,A,3 若整型变量a和b中的值分别为7和9,要求按以下格式输出a和b的值 08.4 a7b9 请完成输出语句printf“_”,a,b; 4有以下程序main int a 0,b0; a10;/*给a赋值b20; 给b赋值*/printf“abdn”,ab /*输出结果*/ 程序运行后的输出结果是06.9 Aab10 Bab30 C30 D出错,adnbd,B,5 有以下程序 include main() char a,b,c,d; scanf(“cc”, 当执行程序时,按下列方式输入数据(从第1列开始,代表回车,注意回车也是一个字符) 12 34 则输出结果是10.3 A)1234 B)12 C)12 D)12 3 34,C,四、选择结构程序设计,1.用if语句实现选择结构。 2.用switch语句实现多分支选择结构。 3.选择结构的嵌套。 4.相关习题,1关系表达式 2 32 aA Aa 1优先级前四个比后两个高,比算术运算符低 32942不同类型数据之间也可以用关系运算符比较大小a30 12.31 3关系表达式结果0或1 4注意和的区别x3 x3 x13; x13;5数学中的式子22 x9,2逻辑表达式连接两个或两个以上表达式1优先级、 i j,1If分类1单分支if. ifx2 printf“ok”;,2双分支ifelseif x2 printf“ok”;else printf“no”;,假0,3多分支ifelse if else if. else,ifx10 printf“1”; else ifx9 printf“2”; else ifx8 printf“3”; else printf“4”;,隐含条件 x9 x10,说明 1一个if多分支结构中至多一个else可以没有,且else后不能加 条件表达式 2一个条件表达式后的有效语句只能有一条,若有多条,则必须构成复合语句 ifx1x2printf“d“,1;printf“d“,2; else printf“d“,3; 3If中的条件表达式可以是各种类型的,只需通过判断表达式结果为0或非0,决定执行什么语句char x; int y; float k; ifx.else ifyelse ifk10else ifyxelse ifyk,排序1.输入两个实数,按代数值由小到大的次序输出这两个数,算法分析1、输入两个实数,分别赋给两个实型变量a,b 2、两个数的比较2.1如果ab 则进行交换 ifab ta;ab;bt; 2.2如果a不大于b,则不 能交换 3、输出a,b,源程序main float a,b,t;scanf“f,f”2.输入3个数a,b,c,要求按由小到大的顺序输出,算法 1if ab 将a和b对换 (a是a,b中的小者) 2if ac 将a和c对换 (a是a,c中的小者,因此a是三者中最小者) 3if bc 将b和c对换 (b是b,c中的小者,也是三者中次小者) 4顺序输出a,b,c,源程序main float a,b,c,t;scanf“f ,f,f”将上if语句改为 main float a,b,c,t;scanf“f ,f,f”,switch结构与if多分支结构的区别1switch结构只能表示等于关系,即 switch后的表达式是否与case 后的常量相等,而if可表示大于小于等于switcha/b case 0 ;case 1 ; break;default ;可省 2当前面条件均不成立时,switch执行default后的语句而if执行else后的语句,两个关键字均可省;但default的位置可调整,放到case之前运行结果不会不同;而else则不可. int a6; switcha case 1printf“1”;break;default printf“2”;break;case 6printf“3”;,main int a6; if a1printf“1“; else printf“2“; else ifa6printf“3“; 3If结构中至多只能执行一条语句,执行完即结束,而对于switch结构,找到符合条件的位置即找到入口,如不遇break语句则从入口处按从上至下的顺序,执行到该结构结束 int a6; switcha case 1printf“1”;break;case 6printf“3”; default printf“2”;break; 4break语句在if结构中不能使用1If与else的匹配原则就近,else之上,没有其它if与之匹配由上至下,从第一个else找匹配的 2If嵌套的读题顺序匹配、从外向内执行includevoid mainunsigned int year,leap;printf“enter year”;ifyear4000leap 1;elseifyear40,程序1 main float x; int y; scanf“f”, ,程序2将上if语句改为 y-1; ifx0 ifx0 y1; else y0;,总结第四章,选择题20-25中1-2题,填空题1-2题1有以下程序include mainint a1,b2,c3,d0;if a1 程序运行后的输出结果是09.3 A 1,2,3 B 1,3,2 C 1,3,3 D 3,2,1,C,2以下程序段中,与语句kabbc100;功能相同的是(09.9) Aifab,A,3)以下选项中与if(a1)ab; else a;语句功能不同的switch语句是10.3 A)switch(a) case 1ab;break; defaulta; B)switch(a1) case 0ab;break; case 1a; C)switch(a) defaulta;break; case 1ab; D)switch(a1) case 1ab;break; case 0a; ,B,4没有定义int a1,b2,c3;以下语句中执行结果与其它三个不同的是09.9) Aifab ca,ab,bc;Bifab ca,ab,bc; Cifab ca;ab;bc;Difab ca;ab;bc;,C,5)有如下嵌套的if语句 if (ab) if(ac)ka; else kc; else if(bc) kb; else kc; 以下选项中与上述if语句等价的语句是10.3 A)kabab; kbcbc; B)kabbcabbcbc; C)kabacacbcbc; D)kabab;kacac;,C,编程1)输入两个字符,若这两个字符的ASCII码之差为偶数,则输出它们的后继字符,否则输出它们的前驱字符 2)输入某个点A的平面坐标x,y, 判断输出A点是在圆内,圆外还是在圆周上,其中圆心的坐标为2,3,半径为1; 3有一函数,五、循环结构程序设计,1.for循环结构。 2.while和do-while循环结构。 3.continue语句和break语句。 4.循环的嵌套。 5.相关习题,1while 格式,实例 main int x1; s0;whilex5ssx; x;printf“dn”,s;,流程图,2dowhile,dowhile的先执行与while的先判断结果可能会有所不同注意区别 main int x1; s0; whilex5 dossx; ssx;x; x;printf“dn”,s; whilex5;printf“dn”,s; 区别 1格式 ,特别是分号 2判断条件的先后,有时会影响程序的结果若上题中x的值被赋为6,结果是否有不同,流程图,2for赋初值;循环结束的条件;控制变量的变 化,2三个表达式可省,但分号不能省 for ( ; i 100 ; i ) for ( i 1; ; i )for ( i 1; i 100 ; ) for ( ; i 100 ; )for ( ; ; ; ) fork0,m1;i1;i,j ,main int x1; s0; whilex5 forx1,s0;x5;x ssx; ssx;x; printf“d”,s;printf“dn”,s; 1注意for循环执行顺序,实例main float x1,s0;for;x3;ss1/x; x;printf“d”,s; ,4循环的嵌套注意1读程序的顺序,从外层循环进入内层循环,进入内层循环后,把内层循环执行完后,才能进入下一次的外层循环.2在内层循环中执行时要注意外层循环控制变量的值是否有变化.,main int x8,y,s0;whilex6fory1;y2;yssx;x;printf“d”,s; ,3continue结束本次循环,break结束个循环,但注意在循环嵌套中只结束本层循环.,fori1;i3;iforj1;j2;jifi1 break;printf“dn”,j;,fori1;i3;iforj1;j2;j ifj 2 continue;printf“dn”,j;,fori1;i3;i ifi3 break;printf“dn”,i;,fori1;i3;iifi3 continue;printf“dn”,i;,5常用算法 1累加求和题 2图形输出题 3查找题 4取某个数或某组数的每位数字累加求和题,基本思路找规律,找加数变化规律 1找出相邻加数之间值的变化规律 2或者加数与项数之间值的变化规律,经典例题 13579.101 s 0fori1;i2/1-3/25/3-8/513/8-flag 1;a2;b1;fori1;i20;is sflag*a/bta; aab;bt; flag-flag;,main double f,k;int m,i,j;scanf“d“main double f,k;int m,i,j;scanf“d“s11/121/123.1/1234n,若把f的初值改为0,main double f,k;int m,i,j;scanf“d“fn11/11/21/3.1/m,include double funint m main int m;double f;FILE *out;printf“ m”;scanf“d”, ,请编写程序,它的功能是计算下列级数和,和值等于 sx/1x2/2x3/3xn/n 当n10、x0.3时,函数值为1.349859,下列给定程序中,函数fun的功能是根据整型形参m的值,计算如下公式的值 1-1/4-1/9-1/16.-1/n*n 请改正函数fun中的错误,使它能得出正确的结果。 注意不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序 include include include double funint mdouble y1.0;int I;/*found/forI2;Im;I /*found/y-1/I*I;returny; void mainint n5;system“CLS“;printf“nThe result is 1fn“, funn;图形输出题, *,main int i,j;fori1;i3;i forj1;j3-i;jprintf“ “;for j1;j2*i-1;jprintf“*“;printf“n“;,基本思路1)确定行数,从而确定外层循环的次数; 2)找出每行列数与行号之间的规律,从而写出内层循环;3)找出每行空格数与行号之间的规律,从而确定每行起始位置。,输出九九乘法表 1*11 1*22 2*24 1*33 2*36 3*39 1*44 2*48 3*412 4*416 1*55 2*510 3*515 4*520 5*525 1*66 2*612 3*618 4*624 5*630 6*636 1*77 2*714 3*721 4*728 5*735 6*742 7*749 1*88 2*816 3*824 4*824 5*840 6*848 7*856 8*864 1*99 2*918 3*927 4*936 5*945 6*954 7*963 8*972 9*981,fori1;i9;iforj1;ji;jprintf“d*dd ”,j,i,i*j;printf“n”;查找题基本思路穷举法,通常外层循环表示查找范围,而内层用选择结构表示查找条件,但有时,测试时也需要使用循环.,输入所有的1100之间的偶数,并求出它们的平均数,main int x,ave0,num0; forx1;x100;x ifx20 continue;printf“d ”,x;ave avex;num; printf“aved”,ave/num;,编程输出1到m含m之内能被7或11整除的所有整数,并计算个数。 例如,若赋值给m的值为50,则程序输出 7 11 14 21 22 28 33 35 42 44 49判断一个数是否是素数,计算并输出3到n包括3和n之间的素数的平方根之和,main int i,j; float s; scanf“d”main int i,j; float s; scanf“d”main int i,j,flag; float s; scanf“d”实现求1000以内的自然数中的完数及其个数(所谓完数,指它恰好等于除它本身之外的因子之和,如6123,28124714),并显示结果,main int i,k,s,num0;fori2;i1000;i s0;fork1;ki/2;kifik0 ssk; ifsi printf“d,“,i;num;printf“nnumd“,num; 取数字,任意输入一个数,请把它的每位数字逆序输出 例如356 输出 6 5 3,main int x,m; scanf“d”, ,基本思路通过与10相除,逐次降低每位的位权,找出三位数中所有的”水仙花数”,输出并统计个数;水仙花数是指3位数的各位数字的立方和等于这个数本身.例如,1531*1*15*5*53*3*3,main int i,m,k,s,num0;fori100;i999;i s0;mi;whilem0km10;mm/10;ssk*k*k;ifis printf“d,“,i;num;printf“nnumd“,num; 编程将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如当原来的数为87653142时,新的数为7531。下列给定程序中函数fun的功能是计算正整数num各位上的数字之积。例如,若输入252,则输出应该是20。若输入202,则输出应该是0。 请改正程序中的错误,使它能得出正确的结果。 注意不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序include include long funlong num /*found/long k;dok *num10;/*found/num 10; whilenum;returnk; main int n;printf“Please enter a number “;scanf“ld“1有以下程序 include main char c1,c2;scanf“c”, 程序运行输入65回车后,能否输出结果、结束运行(请回答能或不能)【 】09.3,不能,2)有以下程序 include(stdio.h main() int al;b2; for(;a8;a) ba;a2; printf(“d,dn“,a,b); 程序运行后的输出结果是10.3 A)9,18 B)8,11 C)7,11 D)10,14D,3有以下程序 include main int i,j;fori3;i1;i forj1;j2;j printf“d”,ij;printf“n”; 程序运行结果是08.9 A2 3 4 B4 3 2 C 2 3 D4 53 4 5 5 4 3 3 4 3 4 4 5 2 3,D,4有以下程序 includestdio.h main() in i,j,m1; for(i1;i3;i) for(j3;j0;j) if(i*j)3)break; mi*j; printf(“mdn“,m); 程序运行后的输出结果是10.3 A)m6 B)m2 C)m4 D)m5,A,5)以下程序的功能是将值为三位正整数的变量x中的数值按照个位、十位、百位的顺序拆分并输出。请填空。10.3 include main() int x256;printf“d-d-dn“, 【 】 x/1010,x/100); ,X10,结束,七、函数,1.库函数的正确调用。 2.函数的定义方法。 3.函数的类型和返回值。 4.形式参数与实在参数,参数值传递。 5.函数的正确调用,嵌套调用,递归调用。 6.局部变量和全局变量。 7.变量的存储类别自动,静态,寄存器,外部,变量的作用域和生存期。,调用格式 1函数语句把函数调用作为一个语句。printf ; 2 函数表达式函数出现在一个表达式中,这种表达式称为函数表达式。这时要求函数带回一个确定的值以参加表达式的运算。例如 c2*sina; 3 函数参数函数调用作为一个函数的实参。printf“d”,fabs-1; 注意头文件定义格式函数类型 函数名参数类型 参数 名, , 参数类型 参数名,1、 无参函数的定义形式类型标识符 函数名() 声明部分语句,2、 有参函数的定义形式 类型标识符 函数名(形式参数表列) 声明部分 语句 ,print_message printf “How do you do n” ; ,int max int x,int y int z ;z x y x y ;return z ; ,main int x,y; scanf“d”, ,int funint a int b; ba*a;returnb; main int x,y; scanf“d”, ,编写一个函数,由参数传入一个整数,计算该数的各位数字之积。,main int x,y,z1;scanf“d”, ,说明1)定义时部分可省,请注意省略后默认的含义2)自定义函数定义的位置(任意位置)3)不能嵌套定义(可以嵌套调用)int maxint x,int y int minint x,int y return xyxy ,一.函数类型函数类型主要指的是函数返回值的类型,定义时确定 1如果在定义函数时不指定函数类型,系统会隐含指定函数类型为int型2在定义函数时对函数说明的类型一般应该和return语句中的表达式类型一致。如果不一致,则以函数类型为准。对数值数据,可以自动进行转换。即函数类型决定返回值的类型。float f int f. return 1; return 1.5; 二.函数的返回值1函数的返回值是通过函数中的return语句获得的。return 语句将被调用函数中的一个确定的值带回主调函数中去格式 return 表达式;或 return 表达式;例 maxint x,int y returnxyxy; ,