《C语言基础知识综合练习题(20页).doc》由会员分享,可在线阅读,更多相关《C语言基础知识综合练习题(20页).doc(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-一、二、三、 C语言基础知识综合练习题-第 19 页四、 C语言基本知识和基本语句 (一)选择题1设a,b和c都是int型变量,且a=3,b=4,c=5则下面的表达式中,值为零的表达式是( )。A) a&b B) a=bC) a | b+c&b-c D) ! (a= A & ch =y)& (y=z ) B) (x=y) AND (y=z ) C) (x=y=z) D) (x=y) & (y=z )7 以下说法中正确的是( )。 A)C语言程序总是从第一个定义的函数开始执行 B) 在C语言程序中,要调用的函数必须在main()函数中定义 C) C语言程序总是从main()函数开始执行 D)
2、C语言程序中的main()函数必须放在程序的开始部分8 设int x=10,y=3,z;则语句printf (“%dn”,z=(x%y,x/y);的输出结果是( )。 A) 1 B) 0 C) 4 D) 39C语言表达式10 != 9 的值是( )。 A)true B) 非零值 C) 0 D) 110合法的C语言字符常量是( )。 A)t B) “A” C) 65 D) A11若int类型数据占两个字节,则下列语句的输出为( )。 int k = -1 ; printf (“%d,%un ”,k,k); A)- 1,- 1 B) 1,32767 C) 1,32768 D) 1,6553512组
3、成C语言程序的是( )。A)子程序 B) 过程 C) 函数 D) 主程序和子程序13以下的选项中,正确的赋值语句是( )。 A)i+; B)a=1,b=2; C) a=b=5 D) y=int(x);14. 以下不符合C语言语法的语句是( )。 A)i+; B)i=j=5; C)k=2*4,k*4; D) y=float(i)15. 下列程序的输出结果是( )。 main() int a=9; a+=a-=a+a; printf(“%dn”,a); A) 18 B) 9 C) 18 D) 916. 下列语句的输出结果是( )。 printf(“%dn”,(int)(2.5+3.0)/3); A
4、)有语法错误不能通过编译 B) 2 C) 1 D) 017下列程序的输出是( )。 main() int a = 7,b=5; printf(“%dn”,b=b/a); A)有语法错误不能通过编译 B) 2 C) 1 D) 018请阅读程序( )。 main() int a;float b,c; scanf(“%2d%3f%4f”,&a,&b,&c); printf(“na=%d,b=%f,c=%fn”,a,b,c); 若运行时从键盘上输入9876543210(CR表示回车),则上面程序的输出结果是( )。A)a=98,b=765,c=4321 B) a=10,b=432,c=8765C) a
5、=98,b=765.000000,c=4321.000000 D) a=98,b=765.0,c=4321.019以下程序的输出结果是( )。 main() int a=-1,b=4,k; k=(+a0)&! (b - -b?“* * * a=%d”:“# # # b=%d”,b); A)没有正确的输出格式控制 B) * * * a=2C) # # # b=3 D) * * * a= 2# # # # b=35以下程序段的输出结果为( )。 int a=1;b=2,c=2,t=0; while(ay) z=x;x=y;y=z; A) x=10,y=20,z=30 B) x=20,y=30,z=
6、30 C) x=20,y=30,z=10 D) x=20,y=30,z=207以下程序的运行结果是( )。 main( ) int m=5; if (m+5) printf (“%dn”,m); else printf (“%dn”,m-); A)4 B) 5 C) 6 D) 78. 以下不正确的语句是( )。A) if (xy); B) if (x=y)&(x!=0) x+=y; C) if (x!=y) scanf(“%d”,&x);else scanf(“%d”,&y); D) if (xy) x+;y+;9. 若w、x、y、z、m均为int型变量,则执行下面语句后的m 值是( )。 w
7、=1;x=2;y=3;z=4; m=(wx)?w:x;m=(my)?m:y;m=(mz)?m:z; A)1 B) 2 C) 3 D) 410.下面有关for循环的正确描述是( )。A) for 循环只能用于循环次数已经确定的情况B) for 循环是先执行循环体语句,后判断表达式 C) 在for 循环中,不能用break语句跳出循环体D) for 循环的循环体中,可包含多条语句,但必须用花括号括起来11.若i为整数变量,则以下循环执行的次数是( )。 for(i=2;i=0;) printf(“%d”,i-); A)无限次 B) 0次 C) 1次 D) 2次12.执行语句for(i=1;i+ 4
8、;);后变量i的值是( )。 A) 3 B) 4 C) 5 D) 不定13以下正确的说法是( )。A) continue 语句的作用是结束整个循环的执行B) 只能在循环体内和switch语句体内使用break语句 C) 在循环体内使用break语句或continue语句的作用相同D) 在多层循环嵌套中退出时,只能使用goto语句14. 以下程序的功能是判断输入的年份是否是闰年。请在 填入正确内容 main ( ) int y,f; scanf (“%d”,&y); if (y%400 = = 0) f=1; else if ( ) f=1; else ; if (f) printf(“%d i
9、s ”,y); else printf(“%d is not ”,y); printf (“a leap year n”); 15有四个数a,b,c,d 要求按从大到小的顺序输出请在 内填入正确内容 main( ) int a,b,c,d,t; scanf(“%d %d %d %d”,&a,&b,&c,&d); if (ab) t=a;a=b;b=t; if ( ) t=a;a=d;d=t;if (ac) t=a;a=c;c=t;if ( ) t=b;b=c;c=t;if (bd) t=b;b=d;d=t;if (camax) amax = x; if ( ) amin = x; scanf
10、(“%f”,&x);printf (“namax = %fnamin = %fn”,amax,amin);17以下程序的功能是计算1-3+5-7+-99+101的值,请填空。 main ( ) int i,t =1,s = 0; for (i= 1; i =101;i+=2) ; s = s+t; ; printf (“%dn”,s);或:main ( ) int i,t =1,s = 0; for (i= 1; i =101;i+=2) s = s+t*i; ; printf (“%dn”,s);18若用0至9之间不同的三个数构成一个三位数,下面程序统计出共有多少种方法。请填空。 main
11、( ) int i,j,k,count = 0; for (i =1; i =9; i+) for (j =0; j=9; j+) if ( ) continue; else for (k =0; k =9; k +) if ( ) count +; printf(“%d”,count);19下面的程序功能是打印100以内个位数为6,且能被3整除的所有数。请填空。 main ( ) int i,j; for ( i = 0 ; ; i+) j = i*10 + 6; if ( ) continue; printf (“%d”,j);三、C语言数组练习(一)选择题1以下对C语言字符数组的描述错误
12、的是( )。 A) 字符数组可以存放字符串B) 字符数组中的字符串可以整体输入、输出C) 可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值字符串D) 不可以用关系运算符对字符数组中的字符串进行比较2不能把字符串Hell0!赋给数组b的语句是( )。 A) char b10 = H,e,l,l,o,!;B) char b10 ; b=”Hello!”;C) char b10 = H,e,l,l,o,!,0;D) char b10 = “Hello!”;3合法数组定义是( )。A) int a =”string” ; B) int a5 = 0,1,2,3,4,5;C) char a=”st
13、ring”; D) char a = 0,1,2,3,4,5;4以下能对二维数组a进行正确初始化的语句是( )。 A) int a2 = 1,0,1,5,2,3;B) int a 3 = 1,2,3,4,5,6;C) int a24 = 1,2,3,4,5,6;D) int a 3 = 1,0,1 ,1,1;5若有说明int a34 =0;则下面正确的叙述是( )。 A) 只有元素a00可得到初值0B) 此说明语句不正确C) 数组a中各元素都可得到初值,但其不一定为0D) 数组a中各元素都可得到初值06在C语言中,引用数组元素时,其数组下标的数据类型允许是( )。A) 整型常量 B) 整型表达
14、式C) 整型常量和整型表达式 D) 任何类型的表达式7以下对一维整型数组a的正确说明是( )。A) int a (10); B) int n=10,an;C) int n; D) #define SIZE 10 scanf (“%d”,&n); int aSIZE; int an;8若有说明int a10;则对a数组元素的正确引用是( )。A) a 10 B) a 3.5 C) a (5) D) a10-109以下对二维数组a的正确说明是( )。A) int a3 ; B) float a (3,4);C) double a 14; D) float a (3) (4);10若有说明int a
15、 34; 则对a数组元素的正确引用是( )。A) a24 B) a1,3 C) a1+10 D) a(2)(1) 11若有说明int a 34; 则对a数组元素的非法引用是( )。A) a02*1 B) a13 C) a4-20 D) a0412对int a10=6,7,8,9,10;说明语句的正确理解是( )。A) 将5个初值依次赋给a1至a5,其余元素赋0值; B) 将5个初值依次赋给a0至a4,其余元素赋0值;C) 将5个初值依次赋给a6至a10,其余元素赋0值;D) 因为数组长度与初值的个数不相同,所以此语句不正确;13定义如下变量和数组int k; int a33=1,2,3,4,5
16、,6,7,8,9; 则执行for ( k=0;ks2) B) if (strcmp (s1,s2) C) if (strcmp (s2,s1)0) D) if (strcmp (s1,s2)0)16下面程序段的功能是将字符串s中所有的字符c删除。请选择填空。 #include main() char s80; int i,j; gets(s); for(i=j=0;si!=0;i+) if (si!=c) ; sj=0; puts(s); A) sj+=si B) s+j=si C) sj=si ;j+ D) sj=si17有两个字符型数组a,b,则以下正确的输入格式是( )。A) gets
17、(a,b); B) scanf (“%s%s”,a,b); C) scanf (“%s%s”,&a,&b); D) gets(“a”),gets(“b”);18对两个数组a和b进行如下初始化, char a =A,B,C,D,E,F; char b =”ABCDEF”; 则以下叙述正确的是( )。 A) a与b数组完全相同 B) a与b数组长度相同C) a与b中都存放字符串 D)b数组比a数组长度长(二)填空题1 下面程序的功能是将字符串a下标值为偶数的元素由小到大排序,其它元素不变。请填空。 #include main ( ) char a = “labchmfye”,t; int i,j;
18、 for( i=0; i7; i+=2) for (j = i+2;j9; ) if ( ) t = ai; ai = aj;aj = t; j+; puts(a);printf(“n”);2下面程序以每行4个数据的形式输出a数组,请填空。 #define N 20 main() int aN,i; for (i=0;iN;i+) scanf(“%d”, ); for(i=0;iN;i+) if( ) printf(“%3d”,ai); printf(“n”); 3下面程序是分别求出矩阵a的两条对角线上的元素之和。请填空。 main() int a33=1,3,6,7,9,11,14,15,1
19、7,sum1=0,sum2=0,i,j; for (i=0;i3;i+) for(j=0;j3;j+) if(i=j) sum1=sum1+aij; for(i=0;i3;i+) for( ; ;j-) if (i+j) =2) sum2=sum2+aij;printf(“sum1=%d,sum2=%dn”,sum1,sum2); 4下面程序功能是检查一个二维数组是否对称(即对所有i j 都有aij=aji)。请填空。main() int a44=1,2,3,4,2,2,5,6,3,5,3,7,4,6,7,4;int i,j,found=0;for(j=0;j4;j+) for ( ;i4;i
20、+) if(aji)! =aij ;break; if (found) printf(“no”);else printf(“yes”); 5 下面的程序段将输出computer,请填空。char c = “Its a computer”;for ( i=0; ; i+) ; printf(“%c”,cj);6下面的程序功能是在三个字符串中找出最小的。请填空。 #include #include main() char s20,str320; int i; for(i=0;i3;i+) gets(stri); strcpy(s, ); if(strcmp(str2,s)0) strcpy(s,s
21、tr2); printf(“%sn”, ); 7若有定义int a 34 = 1,2,0,4,6,8,10;则初始化后,a12 得到的初值是 ,a21 得到的初值是 。8设数组a中的元素均为正整数,以下程序是求a中偶数的个数和偶数的平均值。请填空。main() int a10=1,2,3,4,5,6,7,8,9,10; int k,s,i; float ave;for ( k=s=i=0;i10;i+ ) if (ai%2!=0) ; s+= ; k+; if (k!=0) ave=(float)s/k;printf(“%d,%fn”,k,ave); 9 下面程序段的运行结果是( )。char
22、 x =”the teacher”; i=0;while (x+i!=0) if (xi-1=t) printf(“%c”,xi);10下面程序段是输出两个字符串中对应字符相等的字符。请填空。char x =”programming”;char y =”Fortran”;int i = 0;while (xi!=0&yi!=0) if (xi= =yi) printf(“%c”, ); else i+;四、C语言函数与编译预处理练习(一)选择题 1. 有以下函数调用语句,其实参数的个数是( )。fun(a+b,(x,y),fun(n+k,d,(a,b); A)3 B) 4 C) 5 D) 62
23、. C语言规定,程序中各函数之间( )。A)既允许直接递归调用又允许间接递归调用 B)不允许直接递归调用也不允许间接递归调用C)允许直接递归调用但不允许间接递归调用D)不允许直接递归调用但允许间接递归调用3. C语言中,函数的隐含存储类别是( )。A) auto B)static C) extern D) 无存储类别4在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是( )。A) extern B) register C) auto D) static5. C语言规定,简单变量做实参时,它和对应的形参之间的数据传递方式是( )。A)地址传递
24、B) 单向值传递 C)由实参传递给形参,再由形参传回给实参 D) 由用户指定传递方式6C语言允许函数类型缺省定义,此时该函数返回值隐含的类型是( )。A) float型 B) int型 C) long型 D) double型7. C语言规定,函数返回值的类型是由( )。A)return语句中的表达式类型所决定B)调用该函数时的主调函数类型所决定C)调用该函数时系统临时决定 D)在定义该函数时所指定的函数类型所决定8以下符合C语言规定的正确描述是( )。A)函数的定义可以嵌套,但函数的调用不可以嵌套B)函数的定义不可以嵌套,但函数的调用可以嵌套 C)函数的定义和函数的调用均不可以嵌套 D)函数的
25、定义和函数的调用均可以嵌套9如用数组名作为函数调用的实参,传递给形参的是( )。A)数组的首地址 B) 数组第一个元素的值 C)数组中全部元素的值 D) 数组元素的个数10以下不正确的说法是( )。 A)在不同函数中可以使用相同名的变量 B)形式参数是局部变量 C)在函数内部定义的变量只在本函数范围内有效 D)在函数内的复合语句中定义的变量在本函数范围内有效11C语言函数进行值传递时的正确说法是( )。A)实参和与其对应的形参各占用独立的存储单元B) 实参和与其对应的形参占用一个存储单元C) 只有当实参和与其对应的形参同名时才占用存储单元D) 形参是虚拟的,不占用存储单元12以下程序是选出能被
26、3整除且至少有一位是5的两位数,打印出所有这样的数及其个数。请选择填空。 sub(int k,int n) int a1,a2; a2= ;a1=k- ; if (k%3= =0&a2= =5)|(k%3= =0&a1= =5) printf (“%d,”,k);n+; return n; else return-1; main( ) int n=0,k,m; for(k=10;k=99;k+) m=sub(k,n); if (m!=-1) n=m; printf(“nn=%d”,n); A)k*10 B)k%10 C)k/10 D)k*10%10 A)a2*10 B)a2 C)a2/10 D
27、)a2%1013若使用一维数组名作函数实参,则以下正确的说法是( )。 A)必须在主调函数中说明实参数组的大小B)实参数组类型与形参数组类型可以不匹配C)在被调函数中,不需要考虑形参数组的大小D)实参数组名与形参数名必须相同14如果在一个函数的复合语句中定义了一个变量,则该变量( )。A)只在该复合语句中有效 B)在该函数中有效 C)在本程序范围内有效 D)为非法变量15. 以下叙述中不正确的是( )。 A)预处理命令行都必须以#号开始B)在程序中凡是以#号开始的语句行都是预处理命令行C)C程序在执行过程中对预处理命令行进行处理D)以下是正确的宏定义 #define IBM_PC16. 以下叙述中正确的是( )。A)在程序的一行上可以出现多个有效的预处理命令行B)使用带参数的宏时,参数的类型应与宏定义时的一致C)宏替换不占用运行时间,只占编译时间D)在以下定义中C R是称为“宏名”的标识符 #define C R 04517.以下有关宏替换的叙述不正确的是( )。 A)宏替换不占用运行时间 B)宏名无类型C)宏替换只是字符替换 D)宏名必须