(一)概述
1.( )为正确变量名
A)pro_5 B)case C)5_pro D)else
2.( )为正确的用户标识符。
A)min-5 B)3_row C)max_at D)union
3.下面叙述正确的是( ) A)程序中必需包含自定义函数
B)main( )函数必须位于源程序文件的开头 C)所有语句都必须以分号“;”结束 D)每行最多只能写两个语句
4.下面叙述错误的是( )
A)注释说明部分只能位于C源程序的最前面 B)C源程序必须包含一个main()函数 C)C源程序可由一个或多个函数组成
D)一个C源程序的执行是从main( )函数开始,直到main( )函数结束
(二)语法基础
5.下面叙述错误的是( )
A)算术运算符中不包含“=”运算符
B)模运算符“%”是C语言基本的算术运算符
C)算术运算符只有“*”,“/”优先级高于关系运算符 D)自增和自减运算符只能用于变量,而不能用于常量或表达式
6.下面叙述中正确的是( ) A)(3+9)++是正确的表达式
B)C语言中的整型与字符型变量混合运算的结果是整型
C)模运算符“%”两边运算数的数据类型是任意的 D)“abc”+“xxx”是正确的表达式
7.若有定义:int i=3, j=6; 则表达式(- -i)*(j++)的值为()。
A)12 B)10 C)18 D)15
8.若有定义:float x=3.5, y=5.5; 则表达式( )的值为2.
A)(x+y)%7 B)(int)(x+y)%7 C)(int)x+y%7 D)int(x+y)%7
9 若有定义 int x=1, y=2, n=3; 则( )为正确表达式
A)x=ny B)x=y*3, y=(x+n)/y C)(x+y)(y+n) D)float(y/n)
10若有定义: int a, 且表达式!a的值为0,则表达式( )的值为1
A)!(a<0||a>0) B)a!=0 C)a=0 D)a= =0
11若有定义:int a=3, b=5, c=8; 则表达式!(a-b)||(c-b)的值为( )。
A)0 B)2 C)3 D)1 12.若有定义: int x, char c=‟A‟;则正确的赋值表达式是( )。(说明:‟A‟的ASCII码的十进制值为65,‟a‟的ASCII码的十进制值为97) A) x=c+‟ABC‟ B)x=c+‟CBA‟ C)x=‟ABC ‟ D)X=c+32 13.( )为非法的字符串常量
A)‟123‟ B)”056” C)” ” D)”case” 14.( )为正确的字符常量
A)‟165 ‟ B)‟\\084‟ C)‟@‟ D)‟bcd‟ 15.()为合法的常量
A)‟b_k‟ B)1.23E+8 C)3.21E-6.5 D)5,326
16.若有定义:int b= -15,则( )为正确的赋值表达式
A)b=*5 B)b+=b*3 C) *b=6 D)b+10= -5
17.若有定义: int x=1, y=2,z=3,则表达式( )的值为0.
A)x D)int a=b=2, c=5; 20.下面叙述正确的是( ) A)++2与3等价 B)++2与- -3等价 C)2/3与2%3等价 D)5/ (int)4.0与5/4等价 21.若有定义float x=3.5, y=3.6; 则表达式( )的值为6 A)x+y B)(int)(x+y) C)(int)x+(int)y D)int(x+y) 22.以下程序段运行后x的值为( ) int a=3, b=6, x; x=(a= =b)?a++:- -b; A)3 B)4 C)6 D)5 23.若有定义: int a, b=5; 语句a=(b/2)+(b%2); 运行后, a的值为( ) A)0 B)2 C)4 D)3 24.若有定义:int a=1, b=2, c=3, d=4, t=2, k=2; 语句(t=aA)1.666667 B)1.0 C)2.0 D)0 26.下面运算符中优先级最低的是( )。 A)! B)= C)* D)> 27. 若有定义:int a=3; 语句a+=a-=a*a; 运行后, a的值为( ) A)-12 B)-3 C)0 D)-6 28. x的值在-20至-5之间为“真”,否则为“假”的正确逻辑表达式为( ) A)-20 29.若有定义:int x, y, z; 语句x=(y=z=3,++y, z+=y); 运行后,x的值为( )。 A)7 B)3 C)6 D)8 30.若有定义float x; 要从键盘输入数据6.02赋给x, 则应选用( )语句。 A)scanf(“%8.2f”, &x); B) scanf(“%1.2f”, &x); C) scanf(“%4.2f”, &x); D) scanf(“%f”, &x); 31.若有语句int a, charc; scanf(“%3d%c”,&a,&b); 为将整数135赋给a,字符‟6‟赋给c,正确的数据输入方式是( )(说明 32.若有定义:char c1=‟A‟, c2=‟B‟; 语句printf(“%d+%d=%d”, c1, c2, c1+c2); 运行的结果为( )。(说明‟A‟的ASCII码的十进制值为65) A)A+B=131 B)65+66=131 C)65+66=AB D)A+B=AB 33. 若有定义: int a=8, b=5; 要实现输出形式为:8*5=40,正确的printf( )函数调用语句是( )。 A)printf(“%d*%d=a*b\\n”, a, b); B)printf(“%d*%d=%d\\n”, a, b, a*b); C)printf(“a*b=%d\\n”, a*b); D)printf(“a*b=a*b\\n”); (三)控制结构 34.以下程序段运行的结果是( ) int s=15; switch(s/4) { case 1: printf(“One”); case 2: printf(“Two”); case 3: printf(“Three”); default : printf(“Over”); } A) Two Over B) One Over C) Three Over D) Three 35.以下程序段运行结果是( )。 int s=15; switch(s/4) { default : printf(“Over”); case 1: printf(“One”); 2 break; case 2: printf(“Two”); } A)Over One B)Two C)One D)Over two 36.以下程序段运行后,若从键盘输入5,则运行结果是( ) int a, y=10; scanf(“%d”, &a); if(a>10) y=a+6; printf(“%d\\n”, y+a); } A) 15 B)16 C)10 D)11 37.以下程序运行结果是( ) void main( ) { int a, b=2, c=6; a=3; if(a>6) a=a+6; else if(a==6) b=a+c; else a=b+c; printf(“%d\\n”, a); } A)6 B)9 C)5 D)8 38. 以下程序段运行后,x的值为( ) int i, j, x=0; for(i=3; i>=1; i- -) for(j=1; j<=i; j++) x=x+2; A)10 B)14 C)8 D)12 39.若有定义int i, x; ( )不是死循环 A)for(x=5; x>0; x--) ; B)while(x=1) ; C) for( ; ; i+=2); D)for(i=10; ; i--); 40.以下程序段运行后, x的值为( ) int i=0, x=0; for( ; i<=5; i++,i++) { x+=3;} A)9 B)6 C)12 D)15 41.以下程序段运行后x的值为( )。 int i=0, x=2; while (i++<=5) {x+=2; } A)14 B)8 C)12 D)10 42.下面叙述正确的是( ) A)for循环的循环体可包含多条语句,但必须用花括号{}括起来 B)在for循环中,不能用break语句跳出循环体 C)for循环是先执行循环体语句,后判断表达式 D)for循环只能用于循环次数已经确定的循环 43. 若有定义:int i, x=0; 语句for(i=1; i<=3; i++) x+=2; 与下列( )程序段不等价。 A) i=1; for( ; i<=3; ) {x+=2; i++; } B)for(i=1; i<=3; ) {x+=2; i++; } C)i=1; for( ; ; i++) x+=2; D)i=1; for( ; i<=3; i++) x+=2; (四)数组 44.下面叙述错误的是( ) A)数组中每一个元素都属于同一个数据类型 B)C语言规定可逐个引用数组元素,但不能一次引用整个数组 C)C语言数组长度在定义数组时可不确定 D)C语言数组名称是数组的首地址 45.若有定义: int a[10], i=2; 则能正确引用数组元素的是( ) A)a[10] B)a(7) C) a[9+i] D)a[10-i] 46.若有定义:int arr[15], n=5; 无法正确引用arr数组元素的是( )。 A)arr[0] B)arr[n] C)arr[15-n] D)arr[10+n] 47.以下程序段运行后,x的值为( ) int a[8]={1,2,3,4,5,6,7,8}, i, x=0; for(i=0; i<8; i++, i++) 3 x=x+a[i]; A)18 B)16 C)20 D)36 48.C语言中,二维数组元素在内存中的存放顺序是( ) A)按列存放 B)随机存放 C)由用户自己定义 D)按行存放 49.. 以下( )对二维数组arr的初始化是错误的。 A)int arr[2][3]={{1,2},{3,4}}; B)int arr[2][3]={{1,2},{3,4},{5,6}}; C)int arr[ ][3]={1,2,3,4,5}; D)int arr[2][3]={{1},{3,4,5}}; 50.以下程序段的运行结果是( ) int t[ ][3]={1,2,3,4,5,6,7,8,9,10,11,12}; printf(“%d\\n”, t[1][1])} A)3 B)1 C)5 D)4 51.以下程序段运行后,x的值为( ) int i=0, x=0; int a[3][3]={1,2,3,4,5,6,7,8,9}; for( ; i<3; i++) x+=a[i][i]; A)12 B)18 C)0 D)15 52.以下程序运行的结果是( ) int fun(int array[3][3]) { int j; for(j=0; j<3; j++) array[1][j]++; printf(“\\n”); } main( ) { int j, a[3][3]={0,1,2,1,0,4,2,4,5}; fun(a); for(j=0; j<3; j++) printf(“%2d”,a[1][j]); printf(“\\n”); } A)2 1 5 B)1 0 4 C)0 1 2 D)1 2 3 53.以下程序段的运行结果是( )。 char str[3][2]={„a‟,‟b‟,‟c‟,‟\\0‟,‟e‟,‟f‟}; printf(“%s”, str[0]); A)abc\\0ef B)a C)abc D)abcef (五)函数 54.只能向终端输出一个字符的是( ) A)putchar( )函数 B)printf( ) 函数 C)scanf( ) 函数 D)getchar( ) 函数 55.getchar( )函数的功能是获取终端输入的( )。 A)多个字符 B)一个整形变量表达式 C)一个字符 D)一个实型变量值 56.下面叙述正确的是( ) A)预处理命令也是C语句,必须以分号结束 B)宏展开不占用运行时间,只占用编译时间 C)一个源程序只能有一个预处理命令行 D)宏名必须用大写字母表示 57.下面叙述错误的是( )。 A)C源程序中加入一些预处理命令是为了改进程序设计环境,提高编程效率 B)“#define PRICE 30”命令的作用是定义一个与30等价的符号常量PRICE C)预处理命令行都必须以“#”开头 D)预处理命令行必须以分号结束 58.下面叙述错误的是( ) A)”#include C) C源程序中加入一些预处理命令是为了改进程序设计环境,提高编程效率 D)宏定义也是C语句,必须在行末加分号 59.以下程序运行结果是( ) #define X a+b main( ) { int a=3, b=4, s1; s1=2*X; printf(“%d\\n”, s1); } A)10 B)8 C)6 D)14 60.若有定义:#define PI 3,则表达式PI*2*2的值为( ) A)4 B)12 C)不确定 D)322 61.若有定义: #define F 2+3 ,则表达式F*F的值为( ) 4 A)17 B)13 C)25 D)11 62..以下程序段运行结果是( ) char str[ ]={“Fujian”}; printf(“%d”, strlen(str)); A)6 B)8 C)9 D)7 63.以下程序段运行后,a的值为( ) int a=2; a=strcmp(“miss”, “miss”); A)true B)-1 C)0 D)1 64. 以下程序段的运行结果是( ) char a[ ]=”abcdef”; char b[ ]=”xyz” strcpy(a,b); printf(“%c”, a[2]); A) b B)z C)y D)c 65.若有定义:char str1[10],str2[10]=”Fujian”; 能将字符串“Fujian”赋给数组str1的正确语句是() A)strcpy(str1, str2); B)str1=”Fujian”; C)strcpy(str2, str1); D)strcopy(str1, str2); 66.以下程序段的运行结果是( ) char a[ ]=”abc ”; char b[ ]=”xyz”; char c[10]; strcpy(c,a); strcat(c,b); printf(“%s”,c); A)xyzabc B)abc xyz C)abc D)xyz 67.以下程序的运行结果是( ) int f(int c) { c+=2; return c; } main( ) { int a=2, c=5; a=f(a); printf(“%d %d\\n”, a, c); } A)4 4 B)2 5 C)4 5 D)2 4 68.以下程序段运行结果是( ) fun( ) {static int a=0; a++; printf(“%d “, a); } main( ) {int i; for(i=1; i<=2; i++) fun( ); } A)1 2 B)1 1 C)0 0 D)0 1 69.以下程序段的运行结果是( )。 int a=2, b=3; int min(int a, int b) { int c; c=amain( ) { int a=4; printf(“%d”, min(a,b)); } A)3 B)2 C)4 D)2, 3 (六)指针 70.下面叙述错误的是( ) A)可以将一个整数值赋给指针变量 B)一个变量的地址称为该变量的指针 C)一个指针变量只能指向同一类型的变量 D)任何指针变量都可以与空类型NULL进行比较 71.以下程序段运行结果是( ) int x[3]={1, 2,3}; int *p; p=x; for(p++; p<&x[2]; p++) printf(“%d “, *p); A)3 B)2 C)2 3 D)1 2 72. 以下程序运行的结果是( ) main( ) { char a[ ]=”137”, *p; for(p=a; pA) 7 B)137 C)137377 D)13737 5 73.以下程序段运行后,*(p+1)的值为( ) char a[ ]=”good”; char *p; p=a; A)a[1]的地址 B)‟o‟ C)不确定 D)‟g‟ 74.( )能正确定义一个指向函数的指针。 A) (int *)p( ) B)int *p( ) C) int (*p( )) D)int (*p)( ) 75.以下程序段的运行结果是( ) int x[ ]={2, 3, 4, 5, 6, 7},*p=x; int i, s=0; for(i=1; i<5; i++) s+=p[i++]; printf(“%d”, s); A)6 B)8 C)20 D)14 76.以下程序段运行后, x的值为( ) int a[ ]={1,2,3,4,5, 6, 7,8}; int i, x, *p; x=1; p=&a[1]; for(i=0; i<3; i++) x*=*(p+i); A)120 B)6 C)1 D)24 77.若有定义:int a[10]={0,1,2,3,4,5,6,7,8,9}, *p=a; 则( )表达式是错误的。 A)a++ B)a[2] C)p++ D)p[2] 78.若有定义 int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}, (*p)[4]; p=a; ( )对数组a元素的引用是正确的 A) *(p[2]+3) B)**(p+4) C)(**p)[4] D)*(p[4]) 79.下面程序段运行后,( )对数组a元素的引用是错误的。(其中0≤i<4,0≤j<3) int i, j, (*p)[3]; int a[ ][3]={1,2,3,4,5,6,7,8,9,10,11,12}; p=a; A)*(*(a+i)+j) B)p[i][j] C)*(*(p+i)[j] D)*(p[i]+j) 80.以下程序运行的结果是( ) main( ) { int x, y; int *p, *q, *t; x=23; y=45; p=&x; q=&y; t=p; p=q; q=t; printf(“%d, %d\\n”, x, y); } A)23,45 B)45, 23 C)23, 23 D)45, 45 81. 以下程序的运行结果是( )。 main( ) {int a[3]={1,2,3}; int *num[3]; int **p, i; for(i=0; i<3; i++) num[i]=&a[i]; p=num; printf(“%d”, **p); } A)1 B)3 C)num D)&a[0] 82.若有定义:int a[3][2]; 则表达式&a[2][1]-a的值为( ) A)2 B)3 C)5 D)4 (七)结构体与共用体 83.以下程序段的运行结果是( ) union { int num1; int num2; } s; s.num1=20; s.num2=30; printf(“%d”, s.num1); A)2030 B)50 C)30 D)20 84. 若有定义: union u_type { int x; float y[3]; char z; } a; 则变量a的长度是( ) 6 A)4 B)15 C)1 D)12 85.若有定义: struct teacher { int num; char sex; int age; } teacher1; 则下面叙述错误的是( ) A)teacher1是结构类型名 B)struct是结构类型的关键字 C)struct teacher是用户定义的结构类型 D)num、sex、age都是结构变量teacher1的成员 86.若有定义: struct data {char a; float b[3]; long c; }d1; 则变量d1的长度是( ) A)15 B)12 C)17 D)4 87.若有定义: struct teacher { int num; char name[10]; char sex; int age; } t1={2001, “Li Ming”,‟M‟, 35}; 则下列( )对结构体变量引用是正确的 A) t1.name[0] B) t1->name[0] C) t1.name D)t1->name 88下列程序段运行后,表达式( )的值为3。 struct point {int x; int y; }*p; struct point a[3]={1,2,3,4,5,6}; p=a; A)*(p+2) B)p[3].x C)p[1].x D)p[2].x (八)枚举、自定义类型和位运算 89有定义:enum num{a1,a2=3, a3, a4=10}; 则枚举常量a2, a3的值分别为( ) A)1 2 B)3 3 C)2 3 D)3 4 90若有定义:enum day{sun, mon, tue, wed, thu, fri,sat}; 则枚举常量sun、mon的值分别为( ) A)7 0 B)0 1 C)7 1 D)1 2 91若有定义: typedef int *INTEGER; INTEGER p; 则下面叙述正确的是() A)p是一个整型变量 B)程序中可用INTEGER定义int类型指针变量 C)程序中可用INTEGER定义int类型变量 D)p是与INTEGER相同的类型 (九)文件 92下面程序运行后,文件d_f.dat的内容是( )。 main( ) { FILE *fp; int i=10, j=20; fp=fopen(“d_f.dat”,”w”); fprintf(fp, “%d ”,i); fclose(fp); fp=fopen(“d_f.dat”,”a”); fprintf(“%d “,j); fclose(fp); } A)20 10 B)10 C)10 20 D)20 93 若当前工作目录下有一文本文件test.txt,其内容为“cprogram”(不包含引号),则以下程序段的运行结果是( ) FILE *fp; char *str; if((fp=fopen(“test.dat”,”r”)!=NULL) str=fgets(str, 5, fp); printf(“%s”, str); fcolse(fp); A)cpro B)cprog C)gram D)ogram 94()不是文件读库函数 A)fputs( ) B)fgetc( ) C)fread( ) D)fscanf( ) 95下面程序运行后,屏幕显示write ok!, 则下面叙述正确的是( )。 main( ) 7 { FILE *fp; fp=fopen(“data.txt”,”w+”); if(fp!=NULL) { fprintf(fp, “%s\\n”, “File write successed!\\n”); fclose(fp); NUM n; 则( )语句是正确的 A)NUM=2 B)n=2 C)n[0]=2 D)NUM=n 99.若有定义:int a[3][4]={{1,2}{3,4}{5, 6,7}; 则printf(“write ok!\\n”); } } A)当前工作目录下存在tata.txt文件,其中的内容是”write ok!” B) 当前工作目录下的tata.txt文件已经打开 C) 当前工作目录下的tata.txt文件已经关闭 D) 当前工作目录下找不到tata.txt文件 96下面程序运行后,屏幕显示File open error!则可能的原因是( ) #include fp=fopen{“test.txt”,”r+”}; if(fp= =NULL) { printf(“File open error!”); return ; } fscanf(fp, “%s”, str); fcolse(fp); } A)当前工作目录下的test.txt文件是空文件 B)fopen( )的参数是错误的 C)test.txt文件已经打开 D)当前工作目录下没有test.txt文件 补充 97.以下程序段运行后, x的值为( )。 int a[ ]={1, 2, 3}, b[ ]={4, 3, 3}; int *p, *q; int i, x; p=a; q=b; for(i=0; i<3; i++) if(*(p+i)==*(q+i)) x=*(p+i)*2; A)6 B)不确定 C)2 D)4 98.若有定义 typedef int NUM[100]; a[1][1]的值为( )。 A)3 B)1 C)4 D)2 100.以下程序段运行后,s的值为( )。 int a[3][3]={1,2,3,1,2,3,1,2,3}; int i, j, s=0; for(i=0; i<3; i++) for(j=i; j<3; j++) s+=a[i][j]; A)13 B)12 C)15 D)14 101.( )是正确的数组定义 A)int n; n=5; int arr[n]; B)int N=5, arr[N]; C)int n=5; int arr[n]; D)int arr[10]; 8 二、改错题 Cmody131.c 程序cmody131.c的功能是:输入两个整数,输出它们的商和商的第一位小数。例如: 输入: 19 7 输出:2.714286 7 #include int a,b,c; /**/ int f; /**/ clrscr(); printf(\"Please input a b :\"); scanf(\"%d%d\ f=/**/ a/b; /**/ c=(int)((f-(int)f)*10); printf(\"\\n%f %d\\n\ getch(); } Cmody132.c 程序cmody132.c,实现打印10到99数中能被3整除且至少有1位是4的数 #include int a1,a2; a1=m%10; a2=m/10; if(m%3==0 &&(/**/ a1==4 && a2==4 /**/)) printf(\"%d\\n\} void main() { int k; for(k=10;k<=99;k++) /**/ fun( k ) /**/; getch(); } Cmody141.c 程序cmody141.c的功能是:输入若干个整数,以零结束。分别统计其中比第一个数小的数的个数以及比第一个数大的数的个数,并输出。例如: 输入:4 11 7 5 8 6 4 30 3 0 输出:3 5 #include /**/ int a,Tag; /**/ int num1=0,num2=0; clrscr(); printf(\"please input numbers :\"); scanf(\"%d\ tag=a; while(a) { scanf(\"%d\ /**/ if(a) /**/ continue; else if(a printf(\"\\n%d %d\\n\ getch(); } Cmody142.c 程序cmody142.c,用递归算法求1!+3!+5!+7!+9! #include long int k; if(n==1) /**/ k=0 /**/; else k=n*fsum(n-1); return (/**/ 1 /**/); } void main() { int i; long int sum; sum=0; for(i=1;i<=9;/**/ i++;i++ /**/) sum+=fsum(i); printf(\"sum=%ld\\n\ getch(); } Cmody151.c 程序cmody151.c的功能是输入一个原码表示的8位二进制(最高位为符号位,0表示正数,1表示负数,其余位为无符号数),将其转换成十进制数 9 并输出。例如: 输入:10100101 输出:-37 #include /**/ c1,c2; /**/ clrscr(); printf(\"Enter an 8 bit binary number :\"); c2=getchar(); /**/ for(i=1,i<=7;i++) /**/ { c1=getchar(); a=a*2+c1-'0'; } /**/ If (c2) /**/ a=(-1)*a; printf(\"\\n%d \\n\ getch(); } Cmody152.c 程序cmody152.c以每行最多9个数的方式打印10~1000之间所有满足各位数字左右相互对称的数,如66、181,202等 #include int i,n; /**/ n = 1; /**/ for(i=10;i<=100;i++) if(i/10==i%10) {printf(\"%5d\ n++; if(/**/ n%9=0 /**/) printf(\"\\n\"); } for(i=100;i<=999;i++) if(/**/ i/100==i/10 /**/) {printf(\"%5d\ n++; if(n%9==0) printf(\"\\n\"); } getch(); } Cmody161.c 程序cmody161.c的功能是:用插入排序法对输入的10个整数按从小到大排序,输出排序结果。例 如: 输入: 3 5 4 6 8 1 2 1 7 4 输出: 1 1 2 3 4 4 5 6 7 8 #include /**/ int a(10); /**/ int i,j,k,x; printf(\"Enter 10 numbers:\"); scanf(\"%d\ a[0]=x; for(k=1;k<=9;k++) { scanf(\"%d\ for(i=0;i /**/ for(i=1;i<=10;i++) /**/ printf(\"%d \ printf(\"\\n\"); getch(); } Cmody162.c 程序cmody162.c中的fun( )函数功能是:运用勾股定理近似地判定一个三角形是否为直角三角形,即给定三角形的边长a,b,c,若能构成直角三角形则返回1,否则返回0. #include int fun( /**/ float a, b, c /**/) {