《C语言复习资料.docx》由会员分享,可在线阅读,更多相关《C语言复习资料.docx(43页珍藏版)》请在课桌文档上搜索。
1、第一章数据类型与表达式一.知识点1 .C语言的特点:语言简洁、紧凑,使用方便、灵活;运算符丰富:数据结构丰富;具有结构化控制语句;语法限制不太严格,程序设计自由度大;可以进行位操作,能实现汇编语言的大部分功能,能直接对硬件进行操作:生成的目标代码质量高,程序执行效率高;程序的移植性好。2 .C程序的组成:(DC程序是由函数构成的;一个函数包括函数的首部(即函数的第一行)和函数体(即花括号部分);函数体一般包括声明部分和执行部分;一个C程序总是从main函数开始执行,从main函数结束;(5)C程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上;每个语句和数据定义的最后必须有一个分
2、号;(7)C语言本身没有输入输出语句,是通过函数实现输入输出的;可以用/*/对C程序的任何部分作注释。3 .C语言程序的运行:源程序文件的扩展名为.a目标程序文件的扩展名为.obj,可执行程序文件的扩展名为exe4 .C的数据类型:基本、构造、指针和空类型,charint、ShOrt、IOng、UnSigned、float、double、enumstructunion、typedef三5 .常量与变量的概念,注意符号常量的定义与使用;6 .整型、实型、字符型常量的表示,注意整型常量的十进制、八进制、十六进制的书写。7 .变量的定义,C的标识符包括关键字、预定义标识符、用户定义标识符;用户定义标
3、识符的可用字符为字母、数字、下划线,第一个字符为字母或下划线。8 .常见数据类型的取值范围,int为32768+32767,UnSignedint为06553509 .转义字符:n、t、b、r、V、W、ddd、xhh10 .不同数值型数据的混合运算,低级类型转换为高级类型运算11 .C的运算符:注意结合方向和运算的优先级12 .算术运算符:+、*、/、+、,注意自加、减运算符分前缀和后缀两种方式。其中前缀方式为先自加、减,后引用;后缀方式为先引用,后自加、减;运算符要求运算量为整数,运算结果也为整数。注意除运算时,若运算量为整型时,其运算结果也是整型的规则。13 .赋值类运算符:=、+=、=、
4、*=、/=、%=,注意含义和数据类型的转换。14 .逗号运算符的使用,注意逗号运算符的运算规则。二.练习.填空题:1 .在TURBOC环境中用RUN命令运行一个C程序时,所运行的程序的后缀是.exe。2 .C语言源程序文件的后缀是-J,经过编译后,生成文件的后缀是一2feL,经过连接后,生成文件的后缀是exe。3 .结构化程序由顺序、选择(分支)、遁生三种基本结构组成。4 .若k为整型变量且赋值11。请写出运算k+后表达式的值.11和变量的值1205 .若X为double型变量,运算x=3.2,+X后表达式的值4.2和变量的值4.2。6 .函数体由符号开始,用符号结束。函数体的前面是一定义部分
5、,其后是执行部分。7 .C语言中的标识符可分为学蚯、用户标识符和预定义标识符三类。8 .在C语言程序中,用关键字DL-定义基本整型变量,用关键字2定义单精度实型变量,用关键字double定义双精度实型变量。9 .把a1、a2定义成单精度实型变量,并赋初值1的定义语句是JIoatal=IOa2=1.0;。10 .C程序中定义的变量,代表内存中的一个存储空间。11 .表达式3.5+1/2的计算结果是3.5。ab12 .写出数学表达式三个等价的C语言表达式a*b(c*dka(c*db,b(c*d)*a,cd13 .通常一个字节包含小一个二进制位。14 .当计算机用两个字节存放一个整数时,能存放的最大
6、(十进制)整数是221(65535)、最小(十进制)整数是j25(32768)。15 .在C语言中整数可用进制数、进制数和进制数三种数制表示。16 .C语言中,int型数据占2个字节,IOncI型数据占4个字节,UnSignedint型数据占2个字节,ShOrt型数据占,个字节,float型数据占工个字节,double型数据占&个字节,Char型数据占_L个字节。.选择题:1 .组成C语言程序的是()(C)。A.子程序B.过程C.函数D.主程序和子程序2 .以下叙述中正确的是()(C)。A.在C程序中无论是整数还是实数,只要在允许的范围内都能准确无误的表示。B. C程序由主函数组成。C. C程
7、序由函数组成。D. C程序由函数和过程组成。3 .以下选项中正确的整型常量是()(B)。A.12.B.-20C.1,000D.4564 .以下选项中正确的实型常量是()(D)。A.0B.3.1415C.0.329102D.8715 .以下选项中不合法的用户标识符是()(C)。A._123B.printfC.A$D.Dim6 .C语言中运算对象必须是整型的运算符是()(八)。A.%B./C.!D.*7 .可在C程序中用作用户标识符的一组标识符是()(B)。A.voidB.as_b3C.ForD.2cdefine_123-abcDOWORDIfcaseSIG8 .若变量已正确定义并赋值,符合C语言
8、语法的表达式是()(B)。A.a=a+7:B.a=7+b+c,a+C.int(12.3%4)D.a=a+7=c+b9 .不合法的八进制数是()(B)。D. 01A.0B.028C.077)(A)(零 X)。C. 0x11D. 0x1910 .不合法的十六进制数是(A.oxffB.OXabc.程序设计题:1.编写一个C程序,输入a、b、C三个数,输出其中最大者。#includevoidmain()inta,b,c,max;printf(uinput3num:n);scanf(H%d%d%d,&a,&b,&c);max=a;if(bmax)max=b;if(cmax)max=c;Printf(%d
9、,max);)第二章算法与顺序结构一.知识点1 .算法:为解决一个问题而采取的方法和步骤。2 .算法的分类:数值算法、非数值算法。3 .算法的特点:有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性。4 .算法描述方法:自然语言、流程图、改进流程图、NS流程图、伪代码、计算机语言。5 .C语句的类型:控制语句、函数调用语句、表达式语句、空语句、复合语句。6 .输入输出的概念:输入输出是相对主机而言,C语言是由函数来实现输入输出的。7 .字符数据的输入/输出:getchar()putchar()8 .格式输入/输出:scanf()、printf()9 .Printf的格式符:d、i,o,
10、x、X,u,c,s,f,e、E,、G;Lm,n,10 .SCanf的格式符:d、i,o,x、X,u,c,s,f,e、E,qG;I,m,*;&。注意输入数据时数据流的分隔符,系统默认的分隔符为空格、tab键和回车。11 .顺序结构的设计思想:声明变量、输入数据、处理、输出结果。二.练习.填空题:i=-2001 .以下程序段执行后的输出结果是:2002500i=200j=2500MOO。inti=-200,j=2500:printf(“d%d,i,j);printf(i=%d,j=%dn,i,j);printf(w(3)i=%dnj=%dnw,i,j);2 .复合语句在语法上被认为是二Ia包。空语
11、句的形式是二O3 .C语句的最后用L结束。4 .以下程序段的输出结果是一X=127.x=177,X=7f,x=127。intx=0177:printf(x=%6d,x=%6o,x=%6x,x=%6un”,x,x,x,x);5 .以下程序段的输出结果是a=513.789215,a=513.79,a=513.7892150Oa=531.78921500。doublea=513.789215;printf(a=%8.6f,a=%8.2f,a=%14.8f,a=%14.8lfn,a,a,a,a);6 .以下程序段的输出结果是区2a=3+5,a*4;x=113;printf(d,%dr,a,x);7 .
12、以下程序输入三个整数值给a、b、c,程序把b中的值给a,把C中的值给b,把a中的值给c,交换后输出a、b、C的值。请填空:includemain()inta,b,c,m;printf(Entera,b,c:”);scant(d,%d,%d”,&a,&b,&c);m=a;a=b;b=c:c=m;printf(a=%d,b=%d,c=%dnw,a,b,c);8 .以下程序不借助任何变量把a、b中的值进行交换。请填空:includemain()inta,b;printf(aInputa,b:”);scant(d,%dw,&a,&b);a+=b;b=a-b;a=a-b;printf(a=%d,b=%d
13、r,a,b);选择题:1.若a、b、c、d都是int型变量且初始值为O,下列不正确的赋值语句是()(C)。A. a=b=c=100;B. d+:C. c+b;D. d= (c=22) - (b+);2 .以下选项中不是C语句的是()(C)。A. inti; i+; printf A%dn”, i); B.:3 .以下合法的C语言赋值语句是()(D)。A. a=b=58 B. k=int (a+b);C. a=5, c=10C. a=58, b=58D. : D. -i;4 .以下程序的输出结果是()(C)。A.0B.1C.3D.不确定的值main()intx=10,y=3;printf(%dr
14、,y=x/y);5 .若变量已正确说明为int类型,要给a、b、C输入数据,正确的输入语句是()D。A.read(a,b,c);B.scant(d%d%d,a,b,c);C.scant(“D%D%D”,&a,&b,&c);D.scanf(d%d%d,&a,&b,&c);6.若变量已正确定义,要将a和b中的数进行交换,下面不正确的语句组是()CoA.a=a+b,b=a-b,a=a-b;B.t=a,a=b,b=t;C.a=t;t=b;b=a:D.t=b;b=a;a=t:7 .若变量已正确定义,以下程序段的输出结果是()DoA.输出格式说明与输出项不匹配,输出无定值8 .5.1700C.5.1680
15、0D.5.16900x=5.16894;printf(int)(x*1000+0.5)/(float)1000);8 .执行以下程序段后,c3中的值是()AoA.0B.1/2C.0.5D.1intd=1,c2=2,c3;c3=dc2;9 .执行以下程序段后,其输出结果是()BoA. 0, 0, -10B. 0, 0, 3C. -10, 3, -10D. 3, 3, -10inta=0,b=0,c=0;C=(a-=a-5),(a=b,b+3);printf(“d,%d,%dn”,a,b,c);10 .以下程序的输出结果是()D0D. a=%d, b=%dA.a=%2,b=%5B.a=2,b=5C
16、.a=%d,b=%dmain()inta=2,b=5:printf(a=%d,b=%dnw,a,b);11 .若int型占两个字节,以下程序段的输出是()DoA.-1,-1B.-1,32767C.-1,32768D.-1,65535inta=-1:Printf(“d,%ur,a,a);12 .以下程序段的输出结果是()CoA.3.1415B.3.0C.3D.|3,|floata=3.1415;printf(“|%6.0f|n”,a);13 .以下程序段的输出结果是()BoC. 6 6D.以上三个都不对A.98B.89includemain()doublea=-3.0,b=2;printf(u%
17、3.0f%3.0fn,pow(b,tabs(a),pow(tabs(a),b);14 .若a为整型变量,则以下语句()BoA.赋值不合法B.输出值为-2C.输出为不确定值D.输出值为2a=-2L;printf(w%dnw,a);15 .若有定义CharS=092;则该语句()B。A.使S的值包含1个字符B.定义不合法,S的值不确定C.使S的值包含4个字符D.使S的值包含3个字符16 .若k、g均为int型变量,则下列语句的输出为()DCA.15B.16C.15D.166f70716fk=017;g=111;printf(%dnw,+k);printf(rt%xn,g+);17.已知字母a的AS
18、CH十进制代码为97,执行下列语句后的输出为()C。A.b,cB.a运算不合法,故有语法错误C.98,cD.格式描述和输出项不匹配,输出无定值chara=a;a-:printf(d,%cnw,a+20,a+30);18.下列程序的输出为()AoA.27.000000B.27.500000C.28.000000D.28.500000includemain()intm=7,n=4;floata=38.4,b=6.4,x;x=m2+n*ab+12;printfx);19.下列程序的输出结果是()CoA.18B.9C.-18D.-9main()inta=9;a+=a-=a+a:printf(dn,a)
19、;20.下列程序的输出结果是()A0A.0B.5C.1D.不确定值main()inta=7,b=5;printf(dn,b=ba);21.下列程序的输出结果是()CoA.12B.11C.10D.9main()inta=011;printf(%dr,+a);.程序设计题:用NS图表示下列问题:1 .有两个瓶子A和B,分别盛放醋和酱油,要求将它们互换。编写程序2 .依次将10个数输入,要求将其中最大的数打印出来。#includemain()(inti,a,max;scanf(%d,&max);for(i=1;jmax)max=a;)Printf(%d”,max);3 .有3个数a、b、c,要求按从
20、大到小的顺序把它们打印出来。main()(floata1b,c,t;SCanf(f,%f,%f”,&a,&b,&c);if(ab)t=a;a=b;b=t;/*实现a和b的互换*/if(ac)t=a;a=c;C=t;/*实现a和C的互唤*/if(bc)t=b;b=c;c=t;/*实现b和C的互换*/printf(%5.2f,%5.2f,%5.2n,a,b1c);)4 .求1+2+3+100o#includeintmain()(inti,sum=0;i=1;while(i=100)sum=sum+i;i=i+1;)Printf(%c,sum);)5 .判断一个数n能否同时被3和5除。#includ
21、emain(void)(intn;scanf(,%d);if(n%3=0&%5=0)printf(%d能否同时被3和5整除W,n);elseprintf(%d不能否同时被3和5整除r,n);return0;)6 .将100200之间的素数打印出来。includeintisPrime(intn)(inti;for(i=2;i*i=n;i+)jf(n%j=O)return0;return1;)intmain()(inti;for(i=100;i=200;i+)(if(isPrime(i)pritfC,%dn,i);)7 .求两个整数m和n的最大公约数和最小公倍数。main()inta,b,num1
22、,num2,temp;printf(pleaseinputtwonumbers:nH);scanf(,%d,%dum1,&num2);if(num1temp=nur1;num1=num2;num2=temp;a=num1;b=num2;WhiIe(b!=0)/*利用辗除法,直到b为0为止*/(temp=a%b;a=b;b=temp;Printf(gongyuesh%dr,a);printf(,gongbeishudn,numnum2a);)8 .求方程ax2+bx+c=0的根#include#include用到平方根函数voidmain()(floata1b,c,x1,x2,p,q1m;SCa
23、nf(”f%f%f,&a,&b,&c);if(a=0.0)&(b=0.0)&(c!=0.0)printf(unovalue!1);elseif(a=0.0)&(b=0.0)&(c=0.0)printf(,anyvalue!);elseif(a=0.0)&(b!=0.0)printf(,x1=x2=%f,-cb);elsem=b*b-4.0*a*c;if(m=0)x1=(-b+sqrt(m)(2.0*a);x2=(-b-sqrt(m)(2.0*a);printf(,x1=%n,x1);printf(x2=%n,x2);elsep=-b(2.0*a);q=sqrt(-m)(2.0*a);print
24、f(x1=%f+%fin,p,q);printf(x2=%f-%fin,p,q);)9 .编写程序,输入两个整数1500和350,求出它们的商和余数并进行输出。#include#incluedvoidmain()inta;intb;intc,d;a=1500,b=350;c=ab;商数d=a%b;余数Pritf(”商数为:%dn,c);Printf(余数为:%dn,d);return0;)10 .编写程序,读入三个双精度数,求它们的平均值并保留此平均值小数点后一位数,对小数点后第二位数进行四舍五入,最后输出结果。#includemain()doublea,b,c,d;Printf(输入三个双精
25、度数r);scanf(%lf%lf%lf&a,&b,&c);d=(a+b+c)3;printf(%.1n,d);)11 .求三角形的面积:a,b,C是边长,p是半边长,s是面积,则s=p(p-a)(p-b)(p-c)1/2#include#includemai()floata,b,c,p,s;printf(iput3num:);scanf(%f%f%C.&a.&b.&c);p=(a+b+c)2;s=p(p-a)(p-b)(p-c);s=pow(s,0.5):printf(s=%f,s):12 .输入一个华氏温度,要求输出摄氏温度。公式为:C=5(f-32)9o#includemain()dou
26、bletem_c,tem_f;PUtS(=华氏温度至摄氏温度转换程序=);Printf(请输入华氏温度:”);scanf(,%lf,&tem_f);tem_c=(tem_f-12)*5.0/9.0;printf(%f对应的摄氏温度为.2f,tem_c);renturn0;)第三章选择结构程序设计一.知识点1 .关系运算符、逻辑运算符、逻辑值的表示与含义;注意&、Il的运算规则。2 .三种if语句3 .选择结构的嵌套,注意if与else的配对:4 .条件运算符:?:5 .SWitCh语句,注意其执行过程;6 .选择结构程序设计思想。二.练习(一).填空题:1. C语言中用0表示逻辑值“真,用表示
27、逻辑值“假”。2. C语言中的关系运算符按优先级别是、答案:、V、=、v=、=、!=3. C语言中的逻辑运算符按优先级别是、o答案:!、&、Il4. C语言中的关系运算符和逻辑运算符的优先级别是、!、=、!=、&、Il5. C语言中逻辑运算符的_!优先级高于算术运算符。6. 将下列数学式改写成C语言的关系表达式或逻辑表达式:a=b或a4x4llxv-47. 下列程序的输出结果L。main()inta=100:if(a100)printf(dn”,a100);elseprintf(*%dn,a1Oa+bvOJ(3)e0(4)c=be_J_!ae0(6)a+&e+&c+0e&e=b=+c(8)(0
28、a)&(a(d=c+b)19 .当a=1、b=2c=3时,执行以下if语句后,a=3b=1C=J。if(ac);b=a;a=c;c=b:10 .当a=1、b=2、c=3时,执行以下if语句后,a=3、b=2、c=20if(ac)b=a:a=c:c=b;11 .当a=1、b=2、c=3时,执行以下if语句后,a=1、b=2、c=2。if(ac)b=a,a=c:c=b:12 .将以下两条if语句合并为一条if语句:oif(ab)scant(d,&x);elsescant(C,&y);if(ab)scant(“d”,&x):j+;elsescant(d,&y);i+;13 .将以下嵌套的if语句改写
29、成不嵌套的if语句:。if(w0)k=0:elseif(w=0&w=100)k=1:Isk=0;14 .以下程序判断输入的一个整数是否能被3或7整除,若能整除,输出“YES”,若不能整除,输出“NO”。请填空:#includemain()intk;printfCiEnteraintnumber:w);scant(%d,&k);if(k%3=0lk%7=0)printf(YESn);elseprintf(“NOn”);15 .在SWi忙h语句中,当执行到break语句时,使流程跳出开关语句。.选择题:1 .若给定条件表达式(M)?(a+):(a-),则和表达式M等价的表达式为()C。A.M=OB
30、.M=1C.M!=0D.M!=12 .为表示关系x2yNz,应使用的C语言表达式是()AoA.(x=y)&(y=z)B.(x=y)AND(y=z)C.(x=y=z)D.(x=y)&(y=z)3.以下程序的输出结果是()DoA.0B.1C.2D.3main()inta=2,b=-1,c=2;if(ab)if(b0)c=0:elsec+=1;printf(“dn”,c);4.以下程序的输出结果是()AoA.1B.2C.3D.4main()intw=4,x=3,y=2,z=1;Printf(“dn”,(wx?w:zy?z:x);5.若执行以下程序时,从键盘上输入3和4,则输出结果是()BoA.14B
31、.16C.18D.20main()inta,b,s;SCanf(d%d,&a,&b);s=a:if(a=C.(类型)D.,A.HB.%C.!D.=(4)A.=B.!=C.*(乘)D.()10 .若a为整型变量,b为字符型变量,则以下正确的SW计Ch语句是()A。A.switch(int)x10)B.switch(b)case1:a+;break;case4042,:x=a/b;break;case 2: b+; break: case 3: c+; break;)C. switch (int) x/10); case 0: a+; break: default: b+; break; case
32、 3+1 : c+; break; case 3: d+; break;case6;x=a*b;break;caseO1O:x=a+c:break;)D.switch(a1OO+1O)case2:x=ab;break;case6:x=a*b;break;case8:x=a+c?break;case10:x=a-c;break;).程序设计题:1 .从键盘输入一个字母,若是大写字母,要求改用小写字母输出。#includevoidmain()charvar;var=getchar();if(var=65&var=0.#include#includevoidmain()floata1b,c,p,x1
33、,2;printf(input3numbersn);scanf(%f%f%fM,&a,&b,&c);if(b*b-4*a*c=0)(p=pow(b*b-4*a*c,0.5);x1=(-b+p)2;2=(-b-p)2;printf(x1=%f,x2=%f,x1,2);)elsep=pow(-b*b+4*a*c,0.5);printf(,x1=%f+%fi,x2=%f-%fi,-b2,p2,-b2,p2);第四章循环结构程序设计一.知识点1. 循环的概念,C实现循环的方法;2. goto语句,注意标号的书写;3. Whiie语句,注意条件表达式的设计;4. doWhiIe语句,注意条件表达式的设计
34、,及WhiIe之后的分号;5. for语句,注意for中三个表达式的一般含义;6. 循环的嵌套;7. break与COntinUe语句,注意二者之间的区别;8. 循环结构程序设计思想二.练习.填空题:1 .以下程序段的输出结果oy=7,x=21x=y=0;while(xb;+b)i+;while(a+c)j+;dok+;while(ad+);3 .以下程序段的输出结果o死循环没有输出结果intk,m,n:n=10:m=1:k=1;while(k=n)m*=2;printf(%dr,m);4 .以下程序的输出结果。main()intx=2:while(x-);printf(%dnw,x);5 .
35、以下程序段的输出结果11。inti=0,sum=1;dosum+=i+;while(i5);printf(“dn,sum);6 .有以下程序段:s=1.0:for(k=1;k=n;k+)s=s+1.0/(k*(k+1);printf(“fn,s);要使下面的程序段的功能与上面程序段的功能相同,请填空:s=0.0;k=0;d=1.0;dos=s+d;k+;d=1.0/(k*(k+1);while(k=0)if(xamax)amax=x:if(XVarnin)amin=x;scant(“f,&x);printf(4namax=%fnamin=%fn,amax,amin):8 .以下程序段的输出结果
36、oa=12,y=12/a=16,y=28a=16,y=44a=161y=60a=10;y=0;doa+=2;y+=a;printf(a=%d,y=%dnw,a,y):if(y50)break;while(a=14);9 .下列程序段中,for循环的循环次数为o109876a=2;b=10;for(i=b;i=a;i-,a+)printf(3d”,i);10 .以下程序段的输出结果o8*6*4*2*0/8*6*4*2*0for(i=0;i0:j-)if(j+i)%2)j-;printf(*%d”,j);continue:-j;-j:printf(d”,j);printf(“n);.选择题:1 .
37、以下程序段的输出结果是()DoA.9B.1C.11D.10intk,j,s;for(k=2;k6;k+,k+)s=1;for(j=k;j6;j+)s+=j;2 .以下程序段的输出结果是()oCA.12B.15C.20D.25inti,j,m=0;for(i=1;i=15;i+=4)for(j=3;j7)n-;printf(dn,n);4 .以下程序段的输出结果是()。CA.1B.30C.1-2D.死循环intx=3;doprintf(3d”,x-=2);while(!(-x);5 .以下程序的输出结果是()。CA.15B.14C.不确定D.0main()inti,sum:for(i=1;i0;
38、y-)if(y%3=0)printf(%cI,-y);continue:7 .若X是int型变量,以下程序段的输出结果是()。DA.*3B.#3C.#3D.*3#4#4*4*4#5*5*5#5for(x=3;x6;X+)printf(x%2)?(“*%d”):(“#%dn),x);8 .以下程序的输出结果是()。AA.*#*#*#$B.#*#*#*$C.*#*#$D.#*#*$main()inti:for(i=1;j=5;i+)if(i%2)printf(“*”);elsecontinue:printf(#);printf($n);9 .以下叙述正确的是()。DA. do_while语句构成的
39、循环不能用其它语句构成的循环来代替。B. do_while语句构成的循环只能用break语句退出。C.用do_while语句构成循环时,只有在WhiIe后的表达式为非零时结束循环。D.用do_while语句构成循环时,只有在While后的表达式为零时结束循环。10 .以下程序的输出结果是()oDA.3981B.4284C.2668D.2870main()intx,i;for(i=1;i=100;i+)x=i:if(+x%2=0)if(+x%3=0)if(+x%7=0)printf(%d”,x);printf(“n);11 .对下面程序段描述正确的是()oCA. WhiIe循环执行了 10次C.循环体语句一次