一、单选 共40题 (共计40分)
第1题 (1.0分) 题号:6923 难度:较易 第1章
以下叙述中正确的是
A:C语言规定必须用main作为主函数名,程序将从此开始执行
B:可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行
C:C语言程序将从源程序中第一个函数开始执行
D:main的各种大小写拼写形式都可以作为主函数名,如:MAIN,Main等
答案:A
第2题 (1.0分) 题号:6949 难度:较易 第2章
有以下程序
#include
main()
{
int a=1, b=2, c=3, x;
x = (a^b)&c;
printf("%d\n",x);
}
程序的运行结果是
A:3
B:1
C:2
D:0
答案:A
第3题 (1.0分) 题号:6555 难度:易 第2章
设有定义:int k=3,i=2; 以下选项中,变量k的值与其他三个不同的是().
A:k-=i;
B:k=--i;
C:k=i-1;
D:k=i--;
答案:D
第4题 (1.0分) 题号:6169 难度:中 第2章
以下是正确C语言实型常量的是().
A:.8e+8.
B:e+8
C:+8e.8
D:+8.8e+8
答案:D
第5题 (1.0分) 题号:6957 难度:较易 第2章
有以下定义语句,编译时会出现编译错误的是
A:char a='\x2d';
B:char a='\n';
C:char a='a';
D:char a="aa";
答案:D
第6题 (1.0分) 题号:6232 难度:中 第3章
若有定义:double a; char d; float b;
若想把1.2输入给变量a,字符'k'输入给变量d,3.4输入给变量b,程序运行时键盘输入:
1.2 k 3.4 <回车>
则以下正确的读入语句是().
A:scanf("%lf%c%f", &a, &d, &b);
B:scanf("%lf %c %f", &a, &d, &b);
C:scanf("%f %c %f", &a, &d, &b);
D:scanf("%f%c%f", &a, &d, &b);
答案:B
第7题 (1.0分) 题号:6733 难度:中 第3章
以下能正确表述算式 sin(2πr+30°)的C语言表达式是
A:sin(2*3.14*r+3.14*30/180.0)
B:sin(2*π*r+ 30 )
C:sin(2*3.14*r+ 30 )
D:sin(2*3.14*r+30*3.14/360.0)
答案:A
第8题 (1.0分) 题号:7049 难度:较易 第3章
有以下程序段
int i, n;
for( i=0; i<8; i++ )
{ n = rand( ) % 5;
switch (n)
{ case 1:
case 3: printf("%d \n", n); break;
case 2:
case 4: printf("%d \n", n); continue;
case 0: exit(0);
}
printf("%d \n",n);
}
以下关于程序段执行情况的叙述,正确的是
A:for循环语句固定执行8次
B:当产生的随机数n为4时结束循环操作
C:当产生的随机数n为1和2时不做任何操作
D:当产生的随机数n为0时结束程序运行
答案:D
第9题 (1.0分) 题号:6348 难度:易 第4章
对于if(表达式)语句,以下叙述正确的是
A:"表达式"不能是变量
B:"表达式"的值只能是整数值
C:"表达式"可以是常量
D:"表达式"中不可以出现字符型变量的比较
答案:C
第10题 (1.0分) 题号:6743 难度:中 第4章
有以下程序段
scanf("%d%d%d",&a,&b,&c);
if(a
if(a printf("%d\n",a); 该程序段的功能是 A:输出a、b、c中值相等的数值 B:输出a、b、c中的最大值 C:输出a、b、c中的最小值 D:输出a的原始值 答案:D 第11题 (1.0分) 题号:6388 难度:中 第4章 有以下程序: #include main() {int x=1, y=0, a=0, b=0; switch (x) {case 1: switch(y) {case 0: a++; break; case 1: b++; break; } case 2: a++; b++; break; case 3: a++; b++; } printf("a=%d, b=%d\n", a, b); } 程序的运行结果是(). A:a=2,b=2 B:a=2,b=1 C:a=1,b=1 D:a=1,b=0 答案:B 第12题 (1.0分) 题号:6461 难度:易 第4章 对于 if(表达式) 语句,以下叙述正确的是( ). A:"表达式"可以是常量 B:"表达式"的值只能是整数值 C:"表达式"不能是变量 D:"表达式"中不可以出现字符 答案:A 第13题 (1.0分) 题号:7289 难度:中 第5章 有以下程序 #include main() { int a, b; for( a=1,b=1; a<=100; a++ ) { if(b>=20) break; if(b % 3==1) { b=b+3; continue; } b=b-5; } printf("%d\n",a); } 程序的输出结果是 A:10 B:9 C:8 D:7 答案:C 第14题 (1.0分) 题号:6931 难度:中 第5章 有以下程序 #include main() { int k=5; while(--k) printf("%d",k -= 3); printf("\n"); } 执行后的输出结果是 A:1 B:2 C:4 D:死循环 答案:A 第15题 (1.0分) 题号:6846 难度:较难 第5章 有以下程序: #include main() {int i,j,m=1; for(i=1;i<3;i++) {for(j=3;j>0;j-- ) { if(i*j>3) break; m*=i*j; } } printf("m=%d\n",m); } 程序运行后的输出结果是(). A:m=4 B:m=2 C:m=6 D:m=5 答案:C 第16题 (1.0分) 题号:6737 难度:中 第5章 以下程序段中,循环次数不超过10的是 A:int i=10; do{ i=i+1;} while(i<0); B:int i=5; do{ i+=1;} while(i>0); C:int i=1; do{ i+=2;} while(i!=10); D:int i=6; do{ i-=2;} while(i!=1); 答案:A 第17题 (1.0分) 题号:7224 难度:中 第5章 以下叙述中正确的是 A:continue语句使得整个循环终止 B:break语句不能用于提前结束for语句的本层循环 C:使用break语句可以使流程跳出switch语句体 D:在for语句中,continue与break的效果是一样的,可以互换 答案:C 第18题 (1.0分) 题号:7109 难度:中 第5章 若有以下程序 #include main() { int a=6, b=0, c=0; for ( ;a; ) { b += a; a -= ++c; } printf("%d,%d,%d\n", a,b,c); } 则程序的输出结果是 A:1,14,3 B:0,14,3 C:0,18,3 D:0,14,6 答案:B 第19题 (1.0分) 题号:6250 难度:中 第6章 有以下程序 #include #include main() { char s[5][8]={"red","yellow","green","blue","white"}; int i,j; char t[8]; for(i=0; i<4; i++) for(j=i+1;j<5; j++) if(strlen(s[i]) { strcpy(t,s[i]); strcpy(s[i],s[j]); strcpy(s[j],t); } printf("%s\n",s[0]); } 程序的运行结果是 A:red B:white C:yellow D:green 答案:C 第20题 (1.0分) 题号:6879 难度:较易 第6章 以下定义数组的语句中错误的是(). A:int num[][3]={ {1,2},3,4,5,6 }; B:int num[2][4]={ {1,2},{3,4},{5,6} }; C:int num[]={ 1,2,3,4,5,6 }; D:int num[][4]={1,2,3,4,5,6}; 答案:B 第21题 (1.0分) 题号:6086 难度:较难 第6章 有以下程序 #include main( ) { int a[4],p,x,i; for( i=3;i>0;i-- ) a[i-1]=i*2-1; scanf("%d",&x); i=0; while( a[i] i++; p=i; for( i=3;i>p;i-- ) a[i]=a[i-1]; a[p]=x; for( i=0;i<4;i++ ) printf("%3d",a[i]); printf("\n"); } 执行时输入:2<回车>,则输出结果是 A:1 2 3 4 B:5 4 3 1 C:1 2 3 5 D:3 2 1 4 答案:C 第22题 (1.0分) 题号:6243 难度:中 第6章 下面说法正确的是(). A:方括号数组说明符中不能使用带有运算符的表达式 B:char c1 = 'A', c2, *c3; 是合法的变量定义语句 C:数组下标的下限在定义数组时设置,可以设定为负数 D:对于数组元素是浮点值的数组float array[3],array[1.5]是合法的 答案:B 第23题 (1.0分) 题号:6089 难度:较易 第6章 语句printf("%d\n", strlen("\t\"\\\n\'\065\08AB"));的输出结果是 A:6 B:7 C:8 D:9 答案:A 第24题 (1.0分) 题号:6444 难度:较难 第6章 有以下程序 #include main() { char s[][6]={"abcd","abc","ab"}; int i; for( i=0;i<3;i++ ) puts(s[i]); } 执行后的输出结果是( ). A:abcd abc ab B:a a a C:abcd bcd cd D:a b c 答案:A 第25题 (1.0分) 题号:6539 难度:易 第7章 下面关于编译预处理的命令行中,正确的是(). A:#define int INT B:##define eps 0.001 C:##DEFINE TRUE D:#define E 2.88 答案:D 第26题 (1.0分) 题号:6992 难度:较难 第7章 设有以下函数: void fun(int n,char *s) { …… } 则下面对函数指针的定义和赋值均正确的是 A:void (*pf)(int,char); pf=&fun; B:void *pf(); pf=fun; C:void *pf(); *pf=fun; D:void (*pf)(int, char*); pf=fun; 答案:D 第27题 (1.0分) 题号:6188 难度:较难 第7章 有下列程序 #include int a = 1; int func(int a) { int b = 1; static int c = 1; a++; b++; ++c; return a + b + c; } main( ) { int k, a = 4; for (k=0; k<3; k++) printf("%d,", func(a)); } 程序执行后的输出结果是(). A:9,9,9, B:6,8,10, C:6,7,8, D:9,10,11, 答案:D 第28题 (1.0分) 题号:6220 难度:较难 第7章 有以下程序 #include int a[5]={ 7,2,9,10,3 }; void st(int *,int); void main() { int i; st(a,5); for(i=0;i<5;i++) printf("%4d",a[i]); printf("\n"); } void st(int *b,int n) { int i,m,t; if(n==1) return; m=0; for(i=1;i if(b[i]
t=b[0];b[0]=b[m];b[m]=t; b++;n--; st(b,n); } 程序的运行结果是(). A:2 3 7 9 10 B:10 9 7 3 2 C:2 10 3 9 7 D:2 7 3 9 10 答案:A 第29题 (1.0分) 题号:6441 难度:易 第7章 若有函数定义如下 int fun(int x,int y) { return x-y; } 则以下涉及上述函数的说明语句错误的( ). A:int fun( int x,y ); B:int fun( int ,int ); C:int fun( int a,int b ); D:int i,fun(int x,int y); 答案:A 第30题 (1.0分) 题号:6726 难度:中 第7章 有以下程序 #include int fun(int n) { static int t=1; int i=1; for( ; i<=n; i++) t*=i; return t; } main() { int t=1,i; for(i=2;i<4; i++) t+=fun(i); printf("%d\n",t); } 程序的运行结果是 A:8 B:11 C:15 D:4 答案:C 第31题 (1.0分) 题号:6578 难度:中 第8章 有以下程序(其中的strstr()函数头部格式为:char *strstr(char *p1, char *p2) 确定 p2字符串是否在p1中出现,并返回p2第一次出现的字符串首地址) #include #include char *a="you"; char *b="Welcome you to Beijing!"; main() { char *p; p = strstr(b, a) + strlen(a) + 1; printf("%s\n", p); } 程序的运行结果是 A:to Beijing! B:you to Beijing! C:Welcome you to Beijing! D:Beijing! 答案:A 第32题 (1.0分) 题号:5947 难度:较难 第8章 有以下程序 #include #include void fun(int **s, int x[2][3]) { **s=*(x[1]+1); } main() { int a[2][3] = {1,2,3,4,5,6}, *p; p = (int*)malloc(sizeof(int)); fun(&p,a); printf("%d\n",*p); } 程序的运行结果是 A:6 B:2 C:5 D:3 答案:C 第33题 (1.0分) 题号:6357 难度:易 第8章 以下叙述正确的是 A:char c1, *c2, *c3[10]; 是合法的变量定义语句 B:数组说明符的一对方括号中不能使用表达式 C:数组元素下标可以是非整数 D:若有定义 char array[4]; 则语句 printf("%c", array["3"]);是合法的 答案:A 第34题 (1.0分) 题号:6912 难度:较易 第8章 设有定义: char *c; 以下选项中能够使c正确指向一个字符串的是 A:char str[ ]="string"; c=str; B:scanf("%s",c); C:c=getchar( ); D:*c="string"; 答案:A 第35题 (1.0分) 题号:6019 难度:较易 第8章 以下关于指针的叙述,错误的是 A:两个基类型相同的指针变量不能指向同一个对象 B:可以通过对指针变量加上或减去一个整数来移动指针 C:在关系表达式中可以对两个指针变量进行比较 D:一个指针变量可以通过不同的方式获得一个确定的地址值 答案:A 第36题 (1.0分) 题号:6567 难度:中 第8章 对于函数声明 void fun(float array[], int *ptr); 以下叙述中正确的是(). A:调用函数时,array按值传送地址,ptr是按地址传送数值 B:函数参数 array 是数组名,不是指针变量,ptr 是指针变量 C:调用函数时,调用处的实参数组的所有值都会自动复制到array数组中 D:函数参数 array, ptr 都是指针变量 答案:D 第37题 (1.0分) 题号:6346 难度:中 第9章 有下列程序 #include #include typedef struct stu { char name[9]; char gender; int score; } STU; void f(STU *a) { STU c={"Sun", 'f', 90},*d=&c; a = d; strcpy(a->name,c.name); a->gender = c.gender; a->score = c.score; printf("%s,%c,%d,", a->name, a->gender, a->score); } main( ) { STU a={"Zhao", 'm', 85}; f(&a); printf("%s,%c,%d", a.name, a.gender, a.score); } 程序执行后的输出结果是(). A:Zhao,m,85,Sun,f,90 B:Sun,f,90,Sun,f,90 C:Sun,f,90,Zhao,m,85 D:Zhao,m,85,Zhao,m,85 答案:C 第38题 (1.0分) 题号:6093 难度:较易 第9章 设有定义: struct complex { int real,unreal;} data1={1,8},data2; 则以下赋值语句中错误的是 A:data2=(2,6); B:data2=data1; C:data2.real=data1.real; D:data2.real=data1.unreal; 答案:A 第39题 (1.0分) 题号:7033 难度:较易 第9章 以下结构体类型说明和变量定义中正确的是 A:struct REC ; { int n; char c; }; REC t1,t2; B:typedef struct { int n; char c; } REC; REC t1,t2; C:typedef struct REC; { int n=0; char c='A'; } t1,t2; D:struct { int n; char c; } REC; REC t1,t2; 答案:B 第40题 (1.0分) 题号:7272 难度:中 第10章 以下叙述中正确的是 A:函数的返回值不能是结构体类型 B:在调用函数时,可以将结构体变量作为实参传给函数 C:函数的返回值不能是结构体指针类型 D:结构体数组不能作为参数传给函数 答案:B 二、程序填空 共1题 (共计18分) 第1题 (18.0分) 题号:619 难度:中 第1章 /*------------------------------------------------------- 【程序填空】 --------------------------------------------------------- 功能: 打印以下图案: ********* ******* ***** *** * -------------------------------------------------------*/ #include void main() { int k=0 , j=0 ,i=0; /***********SPACE***********/ for( i=0 ; i<5;i【?】 ) { printf("\n"); /***********SPACE***********/ for( j=1 ; j【?】2*i ; j++ ) /***********SPACE***********/ 【?】("%c",' '); for( k=0 ; k < 9-2*i ; k++ ) /***********SPACE***********/ printf("%【?】",'*'); } printf("\n"); } 答案: =======(答案1)======= ++ =========或========= =i+1 =========或========= =1+i =========或========= +=1 =======(答案2)======= <= =======(答案3)======= printf =======(答案4)======= c 三、程序改错 共1题 (共计18分) 第1题 (18.0分) 题号:393 难度:难 第20章 /*------------------------------------------------------- 【程序改错】 --------------------------------------------------------- 题目:void add(char a[],char b[],char c[])函数将由'0','1' 组成的字符串a,b按二进制数加法规则相加,和仍以'0','1' 组成的字符串形式保存到字符串c中。 例如:字符串a为"1100",字符串b为"111",调用add函数后字符串c 为"10011"。 请改正程序中的错误,使它能得出正确的结果。 --------------------------------------------------------- 注意:不得增行或删行,也不得更改程序的结构。 --------------------------------------------------------*/ #include #include void reverse(char s[]) { int i,len; char t; /*******************FOUND*******************/ len=strlen(s)-1; for(i=0;i { t=s[i]; s[i]=s[len-i-1]; s[len-i-1]=t; } } void add(char a[],char b[],char c[]) { int i,j,k,t,flag; i=strlen(a)-1; j=strlen(b)-1; k=flag=0; while(i>=0||j>=0) { if(i<0) t=b[j]-48+flag; else if(j<0) t=a[i]-48+flag; else t=a[i]-48+b[j]-48+flag; /*******************FOUND*******************/ c[k]=t/2; k++; if(t>1) flag=1; i--; j--; } /*******************FOUND*******************/ if(flag==0) c[k++]='1'; c[k]='\0'; reverse(c); } int main() { char a[50],b[50],c[51]; printf("Input a(binary):\n"); scanf("%s",a); printf("Input b(binary):\n"); scanf("%s",b); add(a,b,c); printf("After adding a+b=%s\n",c); return 0; } 答案: =======(答案1)======= len=strlen(s); =======(答案2)======= c[k]=t%2+48; =========或========= c[k]=48+t%2; =========或========= c[k]=t%2+'0'; =========或========= c[k]='0'+t%2; =======(答案3)======= if(flag) =========或========= if(flag==1) =========或========= if(flag!=0) =========或========= if(1==flag) =========或========= if(0!=flag) 四、程序设计 共1题 (共计24分) 第1题 (24.0分) 题号:786 难度:中 第1章 /*---------------------------------------------------------------------------- 【程序设计】 ------------------------------------------------------------------------------ 题目:请编写函数fun,其功能是:找出2×M整型二维数组中最大元素的值,并将此值 返回调用函数。 注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 --------------------------------------------------------------------------*/ #include #include #define M 4 int fun (int a[][M]) { /**********Program**********/ /********** End **********/ } main( ) { int arr[2][M]={5,8,3,45,76,-4,12,43} ; printf("max =%d\n", fun(arr)) ; system("pause"); } 答案: int i,j,max=a[0][0]; for(i=0;i<2;i++) for(j=0;j if(max
max=a[i][j]; return max;