1、C 语言程序设计1 语言概述一、单项选择题第一章C 语言概述一、选择题:1、一个 C 程序的执行是从(A)。A 本程序的 main 函数开始,到 main 函数结束B 本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C 本程序的 main 函数开始,到本程序文件的最后一个函数结束D 本程序文件的第一个函数开始,到本程序 main 函数结束2、 在C语言中,每个语句必须以(D)结束。A.回车符B.冒号C.逗号D.分号3、C 语言规定:在一个源程序中,main 函数的位置(C)。A. 必须在最开始B.必须在系统调用的库函数的后面C. 可以任意D.必须在最后4、一个 C 语言程序是由(B)
2、。A. 一个主程序和若干子程序组成B.函数组成C. 若干过程组成D.若干子程序组成5、下列说法中错误的是(D)。A. 主函数可以分为两个部分:主函数说明部分和主函数体B. 主函数可以调用任何非主函数的其他函数C. 任何非主函数可以调用其他任何非主函数D. 程序可以从任何非主函数开始执行6、用C语言编写的源文件经过编译,若没有产生编译错误,则系统将(C)。A.生成可执行目标文件B.生成目标文件C.输出运行结果 D.自动保存源文件- 38 -二、填空题:1、C 语言只有 32个关键字和9种控制语句。2、每个源程序有且只有一个 main函数,系统总是从该函数开始执行 C 语言程序。3、C 语言程序的
3、注释可以出现在程序中的任何地方,它总是以*符号作为开始标记, 以*/符号作为结束标记。4、C 语言中,输入操作是由库函数scanf完成的,输出操作是由库函数printf完成的。5、系统默认的 C 语言源程序文件的扩展名是.c,经过编译后生成的目标文件的扩展名是.obj,经过连接后生成的可执行文件的扩展名是 .exe。6、C 语言的标识符只能由字母、数字和下划线三种字符组成。第三章 数据类型、运算符和表达式一、选择题:1、以下选项中,不正确的C语言浮点型常量是(C)。A. 160.B. 0.12C. 2e4.2D.0.02、以下选项中,(D)是不正确的C语言字符型常量。 A. aB. x41C.
4、 101D. a3、 在C语言中,字符型数据在计算机内存中,以字符的(C)形式存储。A.原码B.反码C. ASCII码D. BCD码4、若x、i、j 和 k 都是 int 型变量,则计算下面表达式后,x 的值是(C)。x=(i=4,j=16,k=32)A. 4B. 16C.32D.525、算术运算符、赋值运算符和关系运算符的运算优先级按从高到低依次为( B )。A.算术运算、赋值运算、关系运算B.算术运算、关系运算、赋值运算C.关系运算、赋值运算、算术运算D.关系运算、算术运算、赋值运算6、若有代数式 ,则不正确的 C 语言表达式是(C)。A.a/b/c*e*3B. 3*a*e/b/cC.3*
5、a*e/b*c D. a*e/c/b*3 7、表达式!x|a=b 等效于(D )。A. !(x|a)=b)B. !(x|y)=bC. !(x|(a=b)D. (!x)|(a=b)8、设整型变量m,n,a,b,c,d均为 1,执行(m=ab)&(n=cd) 后, m,n 的值是(A )。A. 0,0B. 0,1C. 1,0D. 1,19、 设有语句int a=3 ;,则执行了语句a+=a-=a*=a; 后,变量a的值是( B )。 A. 3B. 0C. 9D. -1210、在以下一组运算符中,优先级最低的运算符是(D )。A. *B. !=C. +D. =11、设整型变量i值为 2,表达式(+i
6、)+(+i)+(+i)的结果是(B )。A. 6B. 12C. 15D.表达式出错12、若已定义x和y 为 double 类型,则表达式x=1 ,y=x+3/2 的值是( C )。A. 1B. 2C. 2.0 D. 2.513、sizeof (double)的结果值是(A)。A. 8B. 4C. 2D.出错14、设 a=1,b=2,c=3,d=4,则表达式:ab? a : cd? a : d 的结果为( D )。A. 4B. 3C. 2D. 115、设 a 为整型变量,不能正确表达数学关系:10a15 的C语言表达式是( A )。A. 10a10 & a15D. !(a=15)16、设f 是实
7、型变量,下列表达式中不是逗号表达式的是(D )。A. f= 3.2, 1.0B. f0, f0D. f=(3.2, 1.0)17、 表达式 18/4*sqrt(4.0)/8 值的数据类型是(C)。A. intB. floatC. doubleD.不确定18、已知字母 A 的 ASCII 码为十进制数 65,且 c2 为字符型,则执行语句C2=A+6-3;后 c2 中的值是(A)。A. DB. 68C.不确定的值D. C 19、以下用户标识符中,合法的是(B)。A. intB. nitC. 123D. a+b20、C 语言中,要求运算对象只能为整数的运算符是(A)。A. %B. /C. D. *
8、21、若有说明语句:char c=72;则变量 c 在内存占用的字节数是(A)。A. 1B. 2C. 3D. 422、字符串ABC在内存占用的字节数是(B)。A. 3B. 4C. 6D. 823、要为字符型变量a 赋初值,下列语句中哪一个是正确的(B)。A. char a=3; B. char a=3;C. char a=%;D. char a=*; 24、下列不正确的转义字符是(C)。A. B. C. 074D. 0二、填空题:1、C 语言中的逻辑值“真”是用1表示的,逻辑值“假”是用 0表示的。2、若 x 和 n 都是 int 型变量,且 x 的初值为 12,n 的初值为 5,则计算表达式
9、 x%=(n%=2)后x 的值为0。3、设c=w,a=1,b=2,d=-5,则表达式x+1c, y!=c+2, -a-5*b=d+1, b=a=2 的值分别为 1、0、1、1。4、设float x=2.5,y=4.7; int a=7; ,表达式x+a%3*(int)(x+y)%2/4 的值为2.5。5、判断变量a 、b 的值均不为0的逻辑表达式为 a!=0&b!=0。6、求解赋值表达式a=(b=10)%(c=6) ,表达式值、a、b、c 的值依次为4,4,10,6。7、求解逗号表达式x=a=3,6*a后,表达式值、x、a 的值依次为 18,3,3。8、数学式 a/(b*c)的C语言表达式 a
10、/b/c。三、编程题:1、 设长方形的高为1.5 ,宽为2.3 ,编程求该长方形的周长和面积。2、 编写一个程序,将大写字母A 转换为小写字母a 。1 main()float x=1.5,y=2.3;printf(“area is %6.2fn”,x*y); 2.main()char c=A;printf(“%d”,c+32);4 最简单的 C 程序设计顺序程序设计一、单项选择题1、printf(f=%3.2f%,3.478);的输出结果是(A)。 A. f=3.48%B. f=3.5%C. f=3.48% %D. f=347.8%2、printf(%c,%d,a, a);的输出结果是(A)。
11、A. a,97B. a97C. 97,aD. 97a3、有以下程序段char c1,c2,c3,c4,c5,c6; scanf(cccc,&c1,&c2,&c3,&c4);c5=getchar( );c6=getchar( ) ;putchar(c1);putchar(c2);printf(ccn,c5, c6);程序运行后,若从键盘输入(从第 1 列开始):12345678。则输出结果是:(D) A1267B1256C1278D12454、若一个int类型的数据占2字节,则程序段:int x= 1;printf(%u,%d,x,x);的输出结果是(A)。A. 65535, 1 B.1,655
12、35C. 32767, 32768D.32768,327675、在TC 中 getchar、putchar、printf、scanf 四个函数,均包含在头文件(B)中。A. math.hB. stdio.hC. stbio.hD. stdlib.h 6、复合语句是用(C)括起来的语句组。A. ( )B. C. D. 7、下列格式符中,哪一个可以用于以八进制形式输出整数(C)。A. %dB. %8dC. %oD. %ld8、下列格式符中,哪一个可以用于以十六进制形式输出整数(B)。A. %16dB. %8x C. %d16D. %d9、a 是 int 类型变量,c 是字符变量,下列输入语句中哪一
13、个是错误的(B)。A. scanf(%d,%c,&a,&c);B. scanf(%d%c,a,c);C. scanf(%d%c,&a,&c);D. scanf(d=%d,c=%c,&a,&c);10、要使 double x; long a;的数据能正确的输出,输出语句应是(D)。A. printf(%d, %f,a, x);B. printf(%d, %1f,a, x);C. scanf(%1d, %1f,&a, &x);D. printf(%1d, %lf,a, x);二、程序改错题1、以下程序的功能是,从键盘输入一个字符并鸣笛输出。# include stdio.hmian( )charc
14、getchar(c);putchar(007) ;/*鸣 笛 */ c=putchar( );改为:putchar( );2、以下程序的功能是,输入长方形的两边长(边长可以取整数和实数),输出它的面积和周长。mainint a,b,s,l; scanf(%d,%d,&a,&b);s=a*b;l=a+b;改为:1=2*(a+b); printf(l=%f,s=%fn,l,s);三、写出程序运行结果1、main( )int a,b; scanf(%2d%*2s%2d,&a,&b); printf(%dn,a+b);运行时输入:12345678 ,输出结果是 68。2、main( )int a=3,
15、b=5,x,y;x=a+1,b+6;y=(a+1,b+6); printf(x=%dny=%dn,x,y);输出结果是x=4,y=11 。四、编程题1、输入3个整数,计算它们的和与平均值,平均值的结果保留2位小数。1. main( ) int a,b,c,sum; float ave;scanf( “%d%d%d”,&a,&b,&c); sum=a+b+c;ave=sum/3.0;printf( “sum=%d,ave=%.2fn”,sum,ave);2、输入两个实数 a,b,然后交换它们的值,最后输出(提示:要交换两个数得借助一个中间变量 temp。首先让 temp 存放 a 的值,然后把
16、b 存入 a,再把 temp 存入 b 就完成了)。1.void main( )float a,b,temp; printf(input a and b:); scanf(%d,%d,&a ,&b); temp = a; a = b; b = temp;printf(a=%d , b=%dn, a , b);5 选择结构程序一、单项选择题1、假定所有变量均已正确定义,下列程序段运行后 x 的值是(B)。a=b=c=0,x=35; if(!a) x-;else if(b);if(c) x=3;else x=4;A. 34B. 4 C. 35D. 32、有以下程序段,其输出结果是:(A)inta,
17、b,c;a=10;b=50;c=30;if(ab)a=b,b=c;c=a;printf(a=%db=%d c=%dn,a,b,c);A.a=10 b=50 c=10B.a=10 b=50 c=30C.a=10 b=30 c=10D.a=50 b=30 c=503、有以下程序段,其输出结果是:(D)intx=1,y=2,z=3;if(xy)if(yy)?x:y; printf(%d,max);的输出结果是(C)。A. 5B. 3C. 8D. 135、程序段int x=3,a=1;switch(x) case 4: a+;case 3: a+;case 2: a+;case 1: a+; prin
18、tf (%d,a);的输出结果是(D)。A. 1B. 2C. 3D. 46、下列语句应将小写字母转换为大写字母,其中正确的是(B)。A.if(ch=a&ch=a&ch=a&cha&chc) a=b;b=c;c=a; else a=c;c=b;b=a;执行后 a,b,c 的值为_5 ,_5 ,_4 (2) if(ac) a=c; else a=b;c=b;b=a; 执行后 a,b,c 的值为_5 ,_5 ,_4 (3) if(a!=c) ; else a=c;c=b;b=a;执行后 a,b,c 的值为_3 ,_3_,_4 2、若整数 x 分别等于 95、87、100、43、66、79,则以下程序
19、段运行后屏幕显示是什么? switch(x/10) case 6:case 7: printf(Passn); break; case 8: printf(Goodn); break; case 9:case 10: printf(VeryGoodn); break; default: printf(Failn);x等于95时,程序段运行后屏幕上显示VeryGoodx等于87时,程序段运行后屏幕上显示Goodx等于 100 时,程序段运行后屏幕上显示VeryGoodx等于43 时,程序段运行后屏幕上显示Failx等于66 时,程序段运行后屏幕上显示x 等于79 时,程序段运行后屏幕上显示Pas
20、sPass三、阅读程序,写出运行结果1、void main ( )int a=10, b=4, c=3; if(ab)a=b ; if(ac)a=c ;printf(%d, %d, %dn, a, b, c) ;10,4,32、void main ( ) int x=100, a=10, b=20, ok1=5, ok2=0 ; if(ab)if(b!=15)if(!ok1)x=1;else if(ok2) x=10; else x=-1; printf(%dn, x);-13、int k,a=1,b=2; k=(a+=b) ? 2:3;printf(%d,k);34、void main()i
21、nt s=1,k=0; switch (s)case 1: k+=1; case 2: k+=2; default: k+=3;printf(“%d”,k); 65.void main() int s=1,k=0; switch (s)case1: k+=1;break; case 2: k+=2;break; default: k+=3;printf(“%d”,k)1四、选做题1、输入3个整数,按从大到小的顺序输出。1. main() int a,b,c,t; scanf(“%d%d%d”,&a,&b,&c);if(ab)t=a;a=b;b=t;if(ac)t=a;a=c;c=t;if(b0
22、)&(s=3)&(s1)|(s8)x=3; elsex=1;elsex=0;2. switch(s0)&(s=3)&(s1)|(s8) case 1: x=3; break;case 0: x=1; break; break; case 0: x=0; break;6 循环控制一、单项选择题1、for(i=1;i9;i+=1);该循环共执行了(B)次。A. 7B. 8C. 9D. 102、int a=2;while(a=0) a-;该循环共执行了(A)次。A. 0B. 1C. 2D. 33、执行完循环for(i=1;i100;i+); 后,i 的值为(A)。A. 99B. 100C. 101D
23、. 1024、以下for 语句中,书写错误的是C。A. for(i=1;i5;i+)B. i=1;for(;i5;i+) C. for(i=1;i5;i+); D. for(i=1;i5;) i+;5、(A)语句,在循环条件初次判断为假,还会执行一次循环体。A. forB. whileC. do-whileD.以上都不是6 、 有以下程序段inti=5;do if(i%3=1)if(i%5=2)printf(*%d,i); break;i+;while(i!=0);其运行结果是(B)A.*2*6B. *7C.*5D. *3*57、i、j 已定义为int类型,则以下程序段中内循环体的执行次数是(
24、A) 。for(i=5;i;i-)for(j=0;j4;j+)A. 20 B. 24C. 25D. 308、以下不构成无限循环的语句或语句组是(C)。A.n=10;while(n);n-;B.n=0;while(1)n+; C.n=0;do+n;while(n0;y-)if(y%3=0)printf(%d,-y);其运行结果是(D)。A. 875421B.963C.852D. 74110、有以下程序段inti,j;for(i=3;i=1;i-)for(j=1;j=2;j+) printf(%d,i+j);printf(n);其运行结果是(D)。A.234B.432C.23D.453455433
25、4344523二、判断题( )1、do while(0); 程序块至少会执行一次( )2、语句 for(i=0;i=10;i+) ; 至多循环 10 次( )3、for(;)表示无限循环。( )4、下面的循环不能正常结束:for (s=0,i=1; i=10; ) s=s+i; i+; ( )5、continue 语句是终止整个循环的执行。( )6、对 for(表达式 1;表达式 3;)可理解为 for(表达式 1;1;表达式 3;)。( )7、下列程序段执行循环二次x=-1; do x=x*x;while(!x);( ) 8 、下列程序段能计算 s=10! 的值i=1;s=1;do s=s*
26、i;i+; while(i=10);( )9、下列程序段将输出 3 和 0 ,int x=3;doprintf(“%dn”,x-=2);while(!-x);三、程序填空题1. 有 1020 个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天后卖完? main( )int day,x1,x2; day=0;x1=1020;while(x1!=0) x2=x1/2+2 ;x1=x1-x2 ;day+; printf(day=%dn,day);2. 输入若干个字符,分别统计数字字符的个数、英文字母的个数,当输入换行符时输出统计结果,运行结束。#include void main( )i
27、nt s1=0,s2=0; char ch;while(ch=getchar() )!=n)if(ch=0&ch=a&ch=A&ch=Z)s2+; printf(“%d,%d”,s1,s2);3.下面程序的功能是计算 1-3+5-7+-99+101 的值,请填空。#include main( ) int i=1,t=1,s=0; for(i=1;i0; y-)if(y%3=0) printf(%d, -y);continue;程序运行后输出结果为8522. main( ) int n1,n2; scanf(%d,&n2); while(n2!=0) n1=n2%10;n2=n2/10;prin
28、tf(%d,n1); 程序运行后,如果从键盘上输入 1298;则输出结果为89213. main ( )ints,i; for(s=0,i=1;i3;i+,s+=i); printf(%dn,s);程序运行后输出结果为54. #include void main( ) int s=1,t=1,a,n;scanf(%d%d,&a,&n); for(int i=1;in;i+) t=t*10+1; s=s+t; s*=a;printf(SUM=%dn,s);程序运行后,如果从键盘上输入 2,4;则输出结果为SUM=2468五、程序改错1、以下程序是显示200,300所有能被 7 整除的数,每行显示
29、 5 个数,此程序有5 处错。1.main() int i=200,n=0; /*n 用来记录每行已打印数的个数*/ while(i=300)if(i%7=0) /break; printf(%5d,i);n=n+1;if(n=5)/*满 5 个换行*/ printf(n);n=0;i+; 2、以下程序是求1!+2!+3!+4!+5!+6!+7 !的值,其中有3处错误。2). main( ) int i,s=0,t=1; for(i=1;i=7;i+)t=t*i;s=s+t; printf(sum=%dn,s);六、选做题1.求序列 2/1,3/2,5/3,8/5,13/8,21/13,的前
30、20 项之和。1. main() float s=0,m=2.0,n=1.0,p; int i;for(i=1;i=20;i+)s=s+m/n; p=m; m=m+n; n=p; printf(s=%fn”,s);2. 请完成用一元人民币换成一分、两分、五分的所有兑换方案。2.#include main( ) int i,j,k,s=1; for(i=1;i=20;i+)for(j=1;j=0) printf(“%2d %2d %2d”,i,j,k); s=s+1;if(s%5=0)printf(“n”);7数组一、单项选择题1、int a4=5,3,8,9;其中a3 的值为( A. 5B.
31、3C. 8D)。D. 92、以下4个字符串函数中,( A)所在的头文件与其他3个不同。A. getsB. strcpyC. strlenD. strcmp 3、以下4个数组定义中,(D)是错误的。A. int a7;B. #define N 5long bN;C. char c5;D.int n,dn; 4、字符数组进行初始化,( B)形式是错误。A. char c1 =1, 2, 3;B. char c2 =123;C. char c3 = 1, 2, 3, 0;D. char c4 =123;5、在数组中,数组名表示(A)。A. 数组第1个元素的首地址B.数组第2个元素的首地址C. 数组所
32、有元素的首地址D.数组最后1个元素的首地址6、若有以下数组说明,则数值最小的和最大的元素下标分别是( B)。int a12 =1,2,3,4,5,6,7,8,9,10,11,12;A. 1,12B. 0,11 C. 1,11D. 0,127、若有以下说明,则数值为4的表达式是(D)。int a12 =1,2,3,4,5,6,7,8,9,10,11,12;char c=a, d, g ;A. ag-cB. a4C. ad-cD. ad-c8、设有定义:char s12 = string ;则 printf( %dn,strlen(s);的输出是( A)。A. 6 B. 7C. 11D. 129、
33、设有定义:char s12 = string;则 printf(%dn , sizeof(s); 的输出是( D)。A. 6B. 7C. 11D. 1210、合法的数组定义是( A)。A. char a = string ;B. int a5 =0,1,2,3,4,5;C. char a= string ; D. char a =0,1,2,3,4,511、合法的数组定义是( D)。A. int a3 =0,1,2,3,4,5;B. int a 3 =0,1,2,3,4;C. int a23=0,1,2,3,4,5,6;D. int a23=0,1,2,3,4,5,;12、下列语句中,正确的是
34、(D) 。A. char a3 =abc, 1;B. char a 3 =abc, 1;C. char a3 =a, 1;D. char a 3 = a, 1;13、下列定义的字符数组中,输出printf(%sn, str2) ; 的输出是( C)。static str320 = basic, foxpro,windows;A. basicB. foxproC. windowsD.输出语句出错14、下列各语句定义了数组,其中哪一个是不正确的( C)。A. char a310=China,American,Asia;B. int x22=1,2,3,4;C. float x2 =1,2,4,6,
35、8,10;D. int m3=1,2,3,4,5,6;15、数组定义为int a32=1,2,3,4,5,6 ,值为 6 的数组元素是(B)。A. a32B. a21C. a12D. a2316、下面的程序中哪一行有错误( D)。#include main()float array5=0.0;/第 A 行int i;for(i=0;i5;i+) scanf(%f,&arrayi); for(i=1;i5;i+)array0=array0+arrayi;/第 B 行printf(%fn,array0);/第 C 行A. 第A 行B.第 B 行C. 第C 行D.没有17、下面哪一项是不正确的字符串
36、赋值或赋初值的方式( C)。A. char *str; str=string;B. char str7=s,t,r,i,n,g;C. char str110;str1=string;D. char str1=string,str2=12345678;18、若有以下说明和语句,则输出结果是哪一项( C)。(strlen(s) 为求字符串 s 的长度的函数)char s12=a book!;printf(%d,strlen(s); A. 12B. 8C. 7D. 1119、若有以下说明和语句,则输出结果是( B)。char sp=tv0willn;printf(%d,strlen(sp);A. 1
37、4B. 3C. 9D. 字符串中有非法字符20、若有以下说明和语句,则输出结果是( C)。char str=c:abc.dat;printf(%s,str);A. 字符串中有非法字符B. c:abc.datC. c:abc.datD. c:abc.dat二、填空题1、C 语言中,数组的各元素必须具有相同的 数据类型,元素的下标下限为 0,下标必须是正整数、0、或者整型变量。但在程序执行过程中,不检查元素下标是否越界。2、C 语言中,数组在内存中占一片连续 的存储区,由 数组名 代表它的首地址。数组名是一个地址常量,不能对它进行赋值运算。3、执行static int b5, a 3 =1,2,3
38、,4,5,6;后,b4 =0,a12 = 6。4、设有定义语句static int a34 =1,2,3; 则a10 值为 2,a11值为0,a21的值为0。5、如定义语句为char a = windows,b = 95; ,语句printf(%s,strcat(a,b); 的输出结果为windows95。6、根据以下说明,写出正确的说明语句:men 是一个有 10 个整型元素的数组。int men10 ; step 是一个有 4 个实型元素的数组,元素值分别为 1.9, -2.33, 0, 20.6。float step4 = 1.9,-2.33, 0, 20.6;grid 是一个二维数组,共有 4 行,10 列整型元素。int grid410;7、array 是一个一维整形数组,有 10 个元素,前 6 个元素的初值是 9,4,7,49,32,-5,正确的说明语句为:int array10 = 9,4,7,49,32,-5;。该数组下标的取值范围是从0 到 9(从小到大)。用 scanf 函数输入数组的第二个元素表示为:scanf(%d,