一、选择题
1.以下叙述正确的是():
A) 在C程序中,main函数必须位于程序的最前面
B) C程序的每行只能写一条语句
C) C语言使用库函数实现输入输出操作
D) 注释中的拼写错误会影响编译结果
2、以下说法中正确的是()
A) C语言程序总是从第一个的函数开始执行
B) C语言程序总是从main()函数开始执行
C)在C语言程序中,要调用的函数必须在main()函数中定义
D) C语言程序中的main()函数必须放在程序的开始部分
3、下列选项种说法正确的是()
A) 函数由声明部分和执行部分两部分组成
B)语言中main函数一定在程序的开始部分
C)C语言程序总是从第一个定义的函数开始执行
D)C程序的每行中只能写一条语句
4、设有说明:int a; float b; char c; double d; 则表达式1.3*a+2*b*c+d*(int)2.6 值
的类型为()。
A) double B) char C) float D) int
5、 C语言的标识符只能由字母、数字和下划线三种字符组成,且第一个字符()
A)必须为字母
B)必须为下划线
C)必须为字母或下划线
D)可以是字母、数字和下划线中任一种字符
6、以下不正确的C语言标识符是()。
A) ABC B) abc C) a_bc D) void
7、下列运算符中优先级最高的是()
A) < B)+ C)&& D)!=
8、以下选项中属于C语言中合法关键字的是()
A)Float B)abc C)int D)CASE
9、若x、i、j和k都是int型变量,计算下面表达式后,x的值为()
x=(i=4,j=16,k=32)
A)4 B)16 C)32 D)52
10、在C语言中,要求数据必须是整型的运算符是()
A)/ B)+ + C)!= D) %
11、若整型变量x的值为8,则下列表达式中值为1的表达式是
A)x+=x-=x B) x%=x-1 C) x%=x%=3 D) x/=x+x
12、若w=1,x=2,y=3,z=4,则条件表达式“w > x ? w : y < z ? y : z”的值是()
A)4 B)3 C)2 D)1
13、有以下程序,程序运行后的输出结果是。
main()
{ int i=1,j=2,k=3;
if(i++==1&&(++j==3||k++==3))
printf("%d %d %d\n",i,j,k);
}
A)1 2 3 B)2 3 4 C)2 2 3 D)2 3 3
14、下面程序的输出结果是
main()
{int x=2,y=-1,z=2;
if(x if(y<0)z=0; else z=-1+x; printf(“%d\n”z); } A) 3 B) 2 C) 1 D)0 15、执行下列语句后,a的值为() main( ) {int a=5; printf(“%d\n”,(a=3*5,a*4,a+5)); } A) 65 B)20 C) 15 D)10 16、下列程序段中,有错误的行是() 列定行号 int x=0,y=10; 2 switch(x) 3 {case 3: 4 case –1:y=y-2;break; 5 case y+1:x+=5; 6 default:printf(“%d,%d”,x,y);} A) 4 B) 3 C) 5 D)无错误 17、若i为整型变量,则以下循环执行次数是()。 #include"stdio.h" void main() { int i; for(i=2;i==0; ) printf("%d",i--); } A) 无限次 B)0次 C) 1次 D) 2 次 18、若有以下定义,double a[10];则a数组元素下标的上、下限分别为() A) 1,10 B) 0,9 C) 0,10 D)1,9 19、若已定义的函数有返回值,则以关于该函数调用的叙述中错误的是() A) 调用可以作为独立的语句存在 B) 调用可以作为一个函数的实参 C) 调用可以出现在表达式中 D) 调用可以作为一个函数的形参 20、定义如下变量和数组: int i; int x[3][3]={1,2,3,4,5,6,7,8,9}; 则下面语句 for(i=0;i<3;i++) printf("%d",x[i][2-i]); 输出结果是() A) 1 5 9 B) 1 4 7 C) 3 5 7 D) 3 6 9 21、以下不能正确定义二维数组的选项是 A) int a[2][2]={{1},{2}}; B) int a[][2]={1,2,3,4}; C) int a[2][2]={{1},2,3}; D) int a[2][]={{1,2},{3,4}}; 22、若有以下定义:int a[5]={10,20,30,40,50},*p=a;则执行++(*p)后(*p)++ 的值是 A) 10 B) 11 C) 20 D)21 23、函数的嵌套调用是指 A) 直接调用本函数 B) 在定义函数时,又定义另一个函数 C) 间接调用本函数 D) 被调用函数又调用另一个函数 24、下列说法正确的是 A) 被调用函数必须先调用,后声明 B) 用户自定义函数的类型若未指出,则系统默认为void C) 全局变量不能与局部变量同名 D) 实参可以是任意表达式 25、以下描述正确的是() A)continue语句的作用,是结束整个循环语句的执行 B)只能在循环体内和switch语句体内使用break语句 C)在循环体内使用break语句或continue语句的作用相同 D)多层循环嵌套中不可以使用break语句 26、若有说明语句:“int a[3][4];”,则对数组元素的正确引用格式是() A)a[2][4] B) a[1,3] C) a[1+1][0] D) a(2)(1) 27、若有说明:“int a[3][4]={0};”,则下面正确的叙述是() A)只有元素a[0][0]可得到初值0 B)此数组说明语句不正确 C)数组a中各元素都可得到初值,但其值不一定为0 D)数组a中每个元素均可得到初值0 28、定义数组a和b的语句是: “char a[ ]=“ABCDEF”; char b[ ]={‘A’,‘B’,‘C’,‘D’,‘E’,‘F’};” 则以下叙述正确的是() A)a和b数组完全相同 B)a与b数组元素个数相同 C)a和b中都存放字符串 D)a数组比b数组元素个数多 29、语句“int (*ptr) ( );”的含义是() A)ptr是指向一维数组的指针变量 B)ptr是指向int型数据的指针变量 C)ptr是指向函数的指针,该函数返回一个int型数据 D)ptr是一个函数名,该函数返回值是指向int型数据的指针 30、若有定义:“int *p[4];”,则标识符p 是( ) A)一个指向整型变量的指针 B)一个指针数组名 C)一个指针,它指向一个含有四个整型元素的一维数组 D)无效的数组名 31、在C语言中() A) 函数定义可以嵌套,但函数调用不可以嵌套 B) 函数定义不可以嵌套,但函数调用可以嵌套 C) 函数定义和调用都可以嵌套 D) 函数定义和条用都不能嵌套 32、下面程序的输出结果是() #include void main() { int i,j,x=0; for(i=0;i<=2;i++) { x++; for(j=0;j<=2;j++) { if(j%2)continue; x ++;} x ++; } printf("%d\n",x); } A)4 B)6 C)8 D)12 33、执行下列语句后,m的值为() int m=1,x=2,y=3,z=4; m=m m=m m=m A) 1 B) 4 C) 2 D) 3 34、下列程序段是实现给数组所有元素赋值操作,应在下划线上填入的是() int a[10]; for(i=0;i<=9;i++) scanf(“%d”, ); A) a B) &a[i] C) a[i] D) &a[0] 35、下列叙述正确的是() A) do-while语句构成的循环不能用其它语句构成的循环来代替 B) do-while语句构成的循环只能用break语句退出 C) 用do-while语句构成的循环,在while后的表达式为非零时结束循环 D) 用do-while语句构成的循环,在while后的表达式为零时结束循环 36、下列程序的输出结果为() #include “stdio.h” main() { int a,b; for(a=1,b=1;a<=100;a++) { if(b>=20) break; if(b%3==1) {b+=3;continue;} b+=5;} printf(“%d, %d”, a, b); } A) 8,20 B) 8,22 C) 7,20 D) 7,22 37、设 int a[5]={10,15,20,25,30}; int *p; p=a+2;则表达式++*p的值为() A) 20 B) 15 C) 16 D) 21 38、设w=1,x=2,y=3,z=4,a=5,b=6,则执行一下语句后A)b的值分别为() (a=w>x)&&(b=y>z); A) 0和0 B) 5和0 C) 0和6 D) 5和6 39、下列语句的输出为() int x=-1; printf(“%d,%u,%o”,x,x,x); A) –1,-1,-1 B) –1,32767,-177777 C) –1,32768,177777 D) –1,65535,177777 40、下列函数调用语句中的实参个数为() fun((a+b,x,y),fun(x,(x+z))); A) 2 B) 3 C) 4 D) 5 41、设有数组定义:char array[ ]=”china”;则数组array所占的内存空间为() A) 4个字节 B) 5个字节 C) 6个字节 D) 7个字节 42、以下程序段的运行结果是()。 char c[5]={ ‘a’ , ’b’ , ‘\0‘ , ‘c’ , ‘\0’ } ; printf( “%s” , c ); A)’a’’b’ B)ab C)ab c D)a b 43、若C程序中出现死循则违背了算法的() A)有效性 B)确定性 C)有穷性 D)有一个或多个输出 44、设 int a=20;则执行表达式:a/=a+a后,a的值是() A)0 B)1 C)20 D)40 45、int x,y,z,m=5,n=5;则执行下面语句后的z值是() x=(--m==n++)?--m:++n; y=m++; z=n; A)5 B)10 C)6 D)7 46、执行下列程序段后,i的正确结果是() int i=10; switch(i) { case 9: i+=1; case 10: i++; case 11: ++i; default:i+=i; } printf( "%d", i ); A)10 B)11 C)12 D)24 47、若有定义:int a[10];。则以下表达式中不能代表数组元素a[1]的地址的是() A)&a[0]++ B)&a[1] C)&a[0]+1 D)a+1 48、变量的指针,其含义是指该变量的() A)值 B)地址 C)变量名 D)一个标志 49、有以下函数定义: void fun(int n, double x) { …… } 若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是()A)fun(int y,double m); B)k=fun(10,12.5); C)fun(x,n); D)void fun(n,x); 50、设整型变量n=10,i=4,则赋值运算n%=i+1执行后,n的值是()。 A) 0 B) 1 C) 2 D) 3 51、若int a, b; scanf("%d%d", &a, &b); 不可以用()作为输入的分隔符。 A), B)空格 C)回车 D)TAB键 52、下面关于运算符优先顺序的描述中正确的是:() A)关系运算符< 算术运算符< 赋值运算符< 逻辑与运算符 B)逻辑运算符< 关系运算符< 算术运算符< 赋值运算符 C)赋值运算符< 逻辑与运算符< 关系运算符< 算术运算符 D)算术运算符< 关系运算符< 赋值运算符< 逻辑与运算符 53、为了判断两个字符串s1和s2是否相等,应当使用( )。 A) if(s1 == s2) B) if(s1 = s2) C) if(strcpy(s1,s2)) D)if(strcmp(s1,s2)==0) 54、以下对二维数组进行正确初始化的是()。 A)int a[2][3]={{1,2},{3,4},{5,6}}; B)int a[][3]={1,2,3,4,5,6}; C)int a[2][]={1,2,3,4,5,6}; D)int a[2][]={{1,2},{3,4}}; 55、若用数组名作为函数调用时的实参,则实际上传递给形参的是()。 A)数组的首地址B) 数组的第一个元素值 C)数组中全部元素的值D) 数组元素的个数 56、以下错误的描述是()。 A) 不同的函数中可以使用相同的变量名 B) 形式参数是局部变量 C) 一个函数内部定义的变量只能在本函数范围内有效 D) 在一个函数内部的复合语句中定义的变量可以在本函数范围内有效 57、下列程序的运行结果是() main( ) { int i=10; int *p=&i; i=8; printf(“%d”,*p); } A)10 B)8 C)程序错误,不能运行 D)结果不确定 58、C语言中,double类型的数据占字节数为() A) 1 B) 2 C) 4 D) 8 59、可在C程序中用作用户标识符的一组标识符是() A)as_b3 _123 If B) For -abc case C) 2c DO SIG D) void define WORD 60、以下字符中,不正确的C语言转义字符是() A) ‘\\’ B) ‘\018’ C) ‘\Xaa’ D) ‘\t’ 61、C语言中,数据在内存中都以()形式存放 A) 原码 B) 反码 C) ASCll码 D)补码 62、下列运算符中,优先级最高的是() A) && B) ! C) ++ D) || 63、有输入语句:scanf (“a=%d ,b=%d ,c=%d” ,&a,&b,&c) ;为使变量a 的值为11,b 为 12,c为13,则从键盘输入数据的正确形式应当是()。 A)11 12 13 B)11, 12, 13 C)a=11 b=12 c=13 D) a=11, b=12, c=13 64、为表示关系 -1≤x≤1应使用的c语言表达式是() A) -1≤x≤1 B) -1= C) -1= 65、若有以下定义: double a; int b; float c; char d; 则表达式a*b/d+(d-c)值的类型为( ) A)float B) int C) char D) double 66、下列程序输出的结果是() main() {int a=18; a+=a-=a*a; printf("%d",a); } A) -612 B) 9 C) 0 D) 36 67、break语句( ) A) 只能出现在if语句中 B) 只能出现在循环体中 C) 可用在循环体和switch语句中 D) 可用在函数中的任何语句 68、如 int k=11;则执行语句k=1/3*++k;后k取值为( ) A) 12 B) 3C) 4D) 0 69、以下程序的输出结果是( ) main() { int x=12,y=012; printf("%d %d\n",x--,--y); } A)12 9 B)11 11 C)11 12 D)12 11 70、设 int x=1, y=5; 表达式(!x||y--||++x)的值是( ) A) 0 B) 1 C) 5 D) 4 71、如果k为整数,则while循环执行次数() k=10; while(0) k=k-1; A) 一次都不执行 B) 1 C) 10 D) 无限次 72、有以下程序( ) fun(int a, int b) { if(a>b) return b; else return b; } main( ) { int x=3, y=8, z=6, r; r=fun (x, y+z); printf("%d\n", r); 程序运行后的输出结果是() A) 3 B) 6 C) 8 D) 14 73、若有说明:int n=17,*p=&n,*q=p;,则以下非法的赋值语句是() A) p=q; B) *p=*q; C) n=*q; D) p=n; 74、以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分 并输出,程序如下: main() { int n,k; float score ,sum,ave; sum=0.0; for(n=1;n<=10;n++) { for(k=1;k<=4;k++) { scanf(“%f”,&score); sum+=score;} ave=sum/4.0; printf(“NO%d:%f\n”,n,ave); } } 上述程序运行后结果不正确,调试中发现有一条语句出现在程序中的位置不正确。这条语句是() A) sum=0.0; B) sum+=score; C) ave=sun/4.0; D) printf(“NO%d:%f\n”,n,ave); 75、数组定义为char a[10]={‘a’,‘b’,‘c’};该数组包括的元素个数是() A) 3 B) 9 C) 4 D)10 76、下面程序的输出结果是() main ( ) { int x = 2, y = -1,z = 2; if ( x < y ) if ( y < 0 ) z = 0; else z = -1+x++; printf ("%d\n", z++ );} A) 3 B) 2 C) 1 D) 0 77、有以下程序 main( ) { int a[ ]={0,1,2,3,4,5,6,7,8,9}, *p ; for(p=&a[9];p>=a;p--) printf("%d,",*p); } 程序运行后的输出结果是() A)0 1 2 3 4 5 6 7 8 9 B)2,3,4,5,6,7,8,9,10,1 C)0,1,2,3,4,5,6,7,8, 9, D)9,8,7,6,5,4,3,2,1, 0, 78、执行循环语句: for(x=y=0;y!=250||x<4;x++)y+=50; 其循环体执行的次数为( ) A) 5 B) 4 C)3 D)2 79、如 int x=14; 下列求商y(需小数结果)的表达式哪一个不对( ) A) y=x/(5+.0) B) y=x/5. C) y=1.*x/5 D) y=x/5*1.0 80、设有以下程序段( ) int x=0,s=0; while(!x!=0)s+=++x; printf("%d",s); 则 :A)运行程序段后输出0 B)运行程序段后输出1 C)程序段中的控制表达式是非法 D)程序无法运行 81、有以下程序,程序运行后的输出结果是() #include"stdio.h" void main() { int i=0,j=2,m=3,n; n=i++<=1&&j>=2&&m++; printf("%d,%d,%d,%d \n",i,j,m,n); } A)2,2,4,1 B)2,2,3,1 C) 1,2,4,1 D)2,1,3,1 82、下面程序的输出结果是() #include void main() { int i,x=1,y=0,a=0,b=0; switch(x) { case 1:b++; case 2:a++;b++;break; case 3:a++;b++; } printf("%d,%d\n",a,b); } A)2,1 B)2,2 C)1,2 D)4,2 二、程序分析及填空 1.C语言的基本数据类型中,有两种实数类型变量,一种是float型,另一种是()型。 2.若程序中有语句“scanf(“a=%d,b=%d”,&a,&b);”,在执行程序时,要输入3和5两 个数,应该键入()。 3.包含数学类库函数的头文件名称是()。 4.字符串“ab\034\\\x79”的长度为()。 5.数组元素作函数参数进行的是传递,数组名作函数参数进行的是____传递。 6.设有函数调用语句f(x1,x1+x2,f1(x1,x2));则函数f()实参的数目有____个。 7.在数组int score[10]={1,2,3,4,5,6}中,元素定义的个数有个,其中score[8]的值为。 8.C语言源程序文件的后缀是经过编译后,生成文件的后缀是, 经过连接后,生成文件的后缀是。 结构化程序由、、三种基本结构组成。 9、C语言提供的三中逻辑运算符是____________ 、____________、____________。 10、若a=1,b=4,c=3, 则表达式!(a 11、在C语言中,若对函数类型未加说明,则函数的隐含类型为类型。 12、在C语言中,唯一的一个三目运算符是。 13、以下程序运行后的输出结果是____________。 #include void main( ) { int m=5; if (m++>5)printf("%d\n",m); else printf("%d\n",m--);} 14、以下程序运行后的输出结果是。 #include void main() { int x=15; while(x>10 && x<50) { x++; if(x/3){x++;break;} else continue; } printf("%d\n",x);} 15、下面程序的运行结果是:。 #include "stdio.h" void swap(int *a,int *b) { int *t; t=a; a=b; b=t; } void main() { int x=3,y=5,*p=&x,*q=&y; swap(p,q); printf("%d%d\n",*p,*q); } 16、在执行以下程序时,如果从键盘上输入:AdEf<回车>,则输出为 ____________ #include"stdio.h" void main() {char ch; while ((ch=getchar())!='\n') {if (ch>='A'&&ch<='Z')ch=ch+32; else if (ch>='a'&&ch<='z')ch=ch-32; printf("%c",ch); } printf("\n");} 17.设有以下宏定义,则执行赋值语句 a=PP*20;(a为int型变量)后,a的值是。 #define PR 100 #define PP PR+400 18、下列程序段的输出结果为 int x=10,y=1; y=y--||x++; printf(“%d,%d”,(y,x++),y); 19、有以下程序 #include "stdio.h" void main() { int a[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}}; int i,s=0; for(i=0;i<4;i++) s+=a[i][i]; printf("%d\n",s); } 程序运行后的输出结果是 程序的功能为 20、有以下程序 #include void main( ) { int p=2, t=1; while(p<=5 ) t=t*p++; printf("%d\n",t);} 该程序运行后变量p和t中的值分别为。 21、有以下程序 #include void main() { int a,b,c=221; a=c/100%3; b=a&&-1; printf(“%d,%d”,a++,b--); } 该程序运行后的输出结果是 22、以下程序的输出结果为。 #include main() { int a[ ]={1,2,3,4,5,6},*p=a; *(p+3)+=2; printf(“%d,%d”,*p,*(p+3)); } 23、以下程序的输出结果为。 #include "stdio.h" int x1=40,x2=70; void main( ) { int x3=50,x4=60; int sub(int x3,int x4); printf("%d,%d\n",x1,x2); } void sub(int x,int y) { x1=x; x2=y;} 24、下面C程序的输出是: main() { int m=6; if(m--<6) printf("%d\n",++m); else printf("%d\n",--m); } 25、下面C程序的输出是: #include "stdio.h" main() { int a=5,*p=&a; *p=a+*p; printf ("a=%d\n",a);} 26、下面C程序的输出是: #include "stdio.h" void f(int n) { printf("%3d",n%10); if(n>0) f(n/10); } void main() { f(12);} 27、以下程序的输出结果是: #include "stdio.h" void main() { int y; for(y=6; y>0; y--) if(y%3==0) { printf("%d", --y); continue;} } 28、在数组int score[10]={1,2,3,6}中,score[7]的值为_______。 29、程序运行后的输出结果是 #include "stdio.h" void main() { int a=1,b=2; printf("%d",(a++,++b,(a++)+b));} 30、以下程序运行后的输出结果是 #include void main() { int i,x[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) printf(“%d”,x[i][2-i]); } 31. 以下程序运行后的输出结果是 #include main() { int a=5,b=7,c; printf(“%d\n”,c=a>b); } 32. 以下程序运行后的输出结果是 #include "stdio.h" main( ) { int i,j,k=0,m=0; for(i=0;i<2;i++) { for(j=0;j<3;j++) k++; k-=j; } m=i+j; printf("k=%d,m=%d\n",k,m); } 33.以下程序运行后的输出结果是 #include "stdio.h" swap(int *p1, int *p2) { int p; p=*p1; *p1=*p2; *p2=p; } main() { int a=12,b=13; int *pointer_1,*pointer_2; pointer_1=&a; pointer_2=&b; if(a printf("\n%d,%d\n",a,b); } 34. 以下程序运行后的输出结果是 #include "stdio.h" main() { int i,*p,a[7]={1,2,3,4,5,6,7}; p=a+2; for(i=0;i<3;i++,p++) printf("%d",*p); } 35.以下程序运行后的输出结果是 main( ) { int n; for(n=1;n<=10;n++) if(n%2) continue; else printf(“%d\t”,n); } 36.以下程序运行后的输出结果是 main( ) { char ch[ ]=”a B12cd##78EF%@”; int j,k; j=k=0; while(ch[k]!=’\0’) {if(ch[k]>=’A’&&ch[k]<=’Z’||ch[k]>=’a’&&ch[k]<=’z’) ch[j++]=ch[k]; k++; } ch[j]=’\0’; printf(“%s”,ch); } 37、以下程序运行后的输出结果是。 #include void swap(int *a,int *b) { int *t; t=a; a=b; b=t; } void main() { int x=5,y=9,*p=&x,*q=&y; swap(p,q); printf(“%d,%d\n”,*p,*q); } 38、有以下程序, 该程序运行后的输出结果是 #include void main( ) { int a,b,c=222; a=c/100%3; b=-1&&-1; printf(“%d,%d”,a,b); } 三、补全程序题 1、输入三个整数x,y,z,把这三个数由小到大输出。 Main( ) { int x,y,z,t; scanf(“%d%d%d”,&x,&y,&z); if (x>y) { } /*交换x,y的值*/ if(x>z) { } /*交换x,z的值*/ if(y>z) { } /*交换z,y的值*/ printf(“small to big: %d %d %d\n”,x,y,z); } 2、求圆的面积和周长,请补全下面程序: #define PI 3.14159 void main( ) { float r,s,y; /* r表示半径;s表示面积;y表示周长*/ scanf(“%f”,&r); s=PI* ; y=2* ; printf(“s=%f,y=f”,s,y );} 3、函数a1的功能是求一维数组中所有元素的平均值并返回给主调函数。请补全下面程 序: float a1( ) { float b[10],sum= ,aver; int i; for(i=0;i<10;i++) scanf(“%f,&b[i]); for(i=0;i<10;i++) sum+= ; aver=sum/10; return ;} 4、从键盘上输入10个数,输出最大、最小元素的值以及它们的下标。 #include void main( ) {int i,j,k,max,min,a[5]; for( i=0;i<5;i++) ; max=min=a[0]; j=k=0; for( i=0;i<5;i++)