一、单选(共100分) 单项选项题
1. 以下叙述中错误的是()。
A、可以通过赋初值的方式确定数组元素的个数
B、数组名代表的是数组所占存储区的首地址,其值不可改变
C、当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息
D、对于double类型数组,不可以直接用数组名对数组进行整体输入或输出
答案:C
2. ()可以不进行函数类型说明。
A、以上都是
B、被调函数的定义在主调函数定义之前时
C、在所有函数定义前,已在函数外预先说明了被调函数类型
D、被调函数的返回值是整型或字符型时
3. .以下正确的说法是()。
A、用户若需要使用标准库函数,调用前不必使用预处理命令将该函数所在的头文件包含编译,系统会自动调用
B、用户可以重新定义标准库函数,如若此,该函数将失去原有定义
C、系统不允许用户重新定义标准库函数
D、用户若需要调用标准库函数,调用前必须重新定义
4. 有以下程序
#include
void main()
{
int n,*p=NULL;
*p=&n;
printf(“Input n:”); scanf(“%d”,&p); printf(“output n:”);
printf(“%d\n”,p);
}
该程序试图通过指针p为变量n读入数据并输出,但程序有多处错误,以下语句正确的是
A、printf(“%d\n”,p);
B、*p=&n;
C、scanf(“%d”,&p)
D、int n,*p=NULL;
5. 以下关于编译预处理的叙述中不正确的是()
A、预处理命令是在正式编译之前先行被处理的
B、预处理命令行必须位于源程序的开始部分
C、一条有效的预处理命令行必须单独占据一行
D、C源程序中凡是以“#”号开始的控制行都是预处理命令行
6. 设函数中有整型变量n,为保证其在未赋初值的情况下初值为0,应选择的存储类别是()。
A、auto或register
B、register
C、static
D、auto
答案:C
7. 在C语言中,switch语句后一对圆括号中表达式的类型()。
A、只能是整型或实型
B、只能为int型
C、可以是整型或字符型
B、一个自定义函数中可以根据不同情况设置多条return语句
C、定义成void类型的函数中可以有带返回值的return语句
D、一个自定义函数中必须有一条return语句
9. 若要用下面的程序片段使指针变量P指向一个存储型变量的动态存储单元:
int *p;
p=______malloc(sizeof(int));
空格应填入()。
A、(int *)
B、int *
C、(*int)
D、int
10. 下列语句组中,正确的是
A、char s[7];s={"Olympic"};
B、char s[7];s="Olympic";
C、char *s;s={"Olympic"};
D、char *s;s="Olympic";
答案:D
11. 下面说法正确的是:
A、在C程序中,注释说明只能位于一条语句的后面
B、一个C源程序必须包含一个main函数
C、C程序的基本组成单位是函数
D、一个C源程序可由一个或多个函数组成
12. 实参和形参之间的数据是()传递。
A、用户指定
B、值
C、互传
D、地址
13. 以下叙述中错误的是
A、用typedef可以为各种类型起别名,但不能为变量起别名
B、可以用typedef将已存在的类型用一个新的名字来代表
C、用typedef定义新的类型名后,原有类型名仍有效
D、可以通过typedef增加新的类型
14. 对下述程序段正确的描述是()。
#include
main()
{ int x=0,y=0,z=0;
if(x=y+z)
printf("***");
else
printf("###");
}
A、输出###
B、输出***
C、可以编译,但不能通过连接,因而不能运行
{ int i;
f or(i=0;i {_____________ printf(“%d”,w[i]); } printf(“\n”); } 下划线处应填入的语句是 A、if(i%8==0)continue; B、if(i/8==0)continue; C、if(i%8==0)printf(“\n”); D、if(i/8==0)printf(“\n”); 答案:C 16. 在C语言中,函数返回值的类型最终取决于() A、函数定义时形参的类型 B、return语句中表达式值的类型 C、调用函数时主调函数所传递的实参类型 D、函数定义时在函数首部所说明函数类型 17. 设有语句:int a=1,b=2,*p1=&a,*p2=&b;以下可使指针p1指向变量b的语句是()。 A、*p1=p2 B、*p1=*p2 C、p1=p2 D、p1=*p2 18. 若各选项中所用变量已正确定义,函数f un中通过return语句返回一个函数值,以下选项中错误的程序是() A、main() { f loat f un(int i,int j); ……x=f un(i,j );…… } f loat f un(int a,int b){……} B、f loat f un(int a,int b){……} main() {……x=f un(i,j);……} C、f loat f un(int,int); main() {……x=f un(2,10);……} f loat f un(int a,int b){…..} D、main() {……x=f un(2,10); ……} f loat f un(int a,int b){……} 19. 以下函数调用语句中含有()个实参。 f unc((exp1,exp2),(exp3,exp4,exp5)); A、5 B、2 C、4 D、1 20. void main( ) } 执行后输出结果是() A、6 B、0 C、5 D、随机值 答案:B 21. 以下程序的输出结果是: #include main() { int num=0; while(num<=2) { num++; printf("%d\n",num); } } A、1 B、1 2 3 C、12 D、1 2 3 4 答案:B 22. 若变量已正确定义,要求程序段完成求5!的计算,不能完成此操作的程序段是: A、i=1;p=1;do{p*=i;i++; }while(i<=5); B、f or(i=1;i<=5;i++){p=1;p*=i;} C、i=1;p=1;while(i<=5){p*=i; i++;} D、f or(i=1,p=1;i<=5;i++) p*=i; 23. 若变量已正确定义,有以下程序段: #include main() { int a=3,b=5,c=7; if(a>b) a=b; c=a; if(c!=a) c=b; printf("%d,%d,%d\n",a,b,c); } 其输出结果是: A、3,5,7 B、3,5,3 C、3,5,5 D、程序段有语法错误 答案:B 24. 对下述程序,()是正确的判断。 #include main() { int x,y; scanf("%d,%d",&x,&y); printf("%d,%d",x,y); } A、若输入数据4和3,则输出4和4 B、若输入数据3和4,则输出4和5 C、若输入数据4和3,则输出3和4 D、有语法错误,不能通过编译 答案:D 25. 设x和y均为int型变量,则执行下面的循环后,y的值为()。 f or(y=1,x=1;y<=50;y++) { if(x>=10) break; if(x%2==1) { x+=5; continue; } x-=3; } A、8 B、4 C、6 D、2 答案: 26. 表达式18/4*sqrt(4.0)/8值的数据类型为()。 A、不确定 B、f loat C、double D、int 答案:C 27. 有以下程序 main() { int m,n,p; scanf("m=%dn=%dp=%d",&m,&n,&p); printf("%d%d%d\n",m,n,p); } 若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是() A、123 456 789 B、m=123 n=456 p=789 C、m=123,n=456,p=789 D、m=123n=456p=789 答案:D 28. 在下列选项中,没有构成死循环的程序段是()。 A、int s=36; while(s); B、f or( ; ; ) C、int k=1000; do{++k;} while(k>=1000); D、int i=100; while(1) { i=i%100+1; if(i>100)break; { int i,t; f or(i=1;i { t=a[i]; a[i]=a[n-1-i]; a[n-1-i]=t; } } main() { int k[10]={1,2,3,4,5,6,7,8,9,10},i; f un(k,5); f or(i=2;i<8;i++)printf("%d",k[i]); printf("\n") } 程序运行的结果是( )。 A、321678 B、876543 C、1098765 D、325678 答案:D 30. 请选出以下语句的输出结果是()。printf("%d\n",strlen("\t\"\065\xff\n")); A、输出项不合法,无正常输出 B、14 C、8 D、5 答案:D 31. 下面程序的输出结果是()。 #include main() { int i,k,a[10],p[3]; k=5; f or(i=0;i<10;i++) a[i]=i; f or(i=0;i<3;i++) p[i]=a[i*(i+1)]; f or(i=0;i<3;i++) k+=p[i]*2; printf("%d\n",k) } A、23 B、21 C、22 D、20 答案:B 32. C语言中目标文件的后缀是: A、.h B、.obj C、.exe D、.c C、补码 D、原码 答案:A 34. 下面函数的功能是()。 int f unl(char *x) { char *y=x; while(*y++); return(y-x-1); } A、将字符串x连接到字符串y后面 B、比较两个字符串的大小 C、将字符串x复制到字符串y D、求字符串的长度 35. 以下程序的运行结果是() #def ine MIN(x,y) (x)<(y)?(x):(y) void main() { int i=10,j=15,k; k=10*MIN(i,j); printf(“%d\n”,k); } A、150 B、15 C、100 D、10 答案:B 36. 下面正确的字符常量是()。 A、'' B、'\\'' C、'W' D、"a" 答案:C 37. 请读下面的程序。 #include main() { int a,b; f or(a=1,b=1;a<=100;a++) { if(b>=20) break; if(b%3==1) { b+=3; continue; } b-=5; } printf("%d\n",a); C、9 D、7 答案:B 38. 在说明语句:int *f();中,标志符f代表的是()。 A、一个返回值为指针型的函数名 B、一个用于指向一维数组的行指针 C、一个用于指向函数的指针变量 D、一个用于指向整型数据的指针变量 39. 下面四个选项中,开关条件的选项是()。 A、if B、switch C、signed D、auto 40. 有以下程序 #include int f(int x, int y) { return((y-x)*x); } main() { int a=3,b=4,c=5,d; d=f(f(a,b),f(a, c)); printf("%d\n",d); } 程序运行后的输出结果是( )。 A、7 B、9 C、8 D、10 答案:B 41. 下面的程序中()有错误(每行程序前面的数字是行号)。 1 #include 2 main() 3 { 4 f loat a[3]={0,0}; 5 int i; 6 f or(i=0;i<3;i++) scanf("%d",&a[i]); 7 f or(i=1;i<3;i++) a[0]=a[0]+a[i]; 8 printf("%f\n",a[0]); 9 } A、第8行 B、第4行 C、第6行 D、没有 42. 运行以下程序后,如果从键盘上输入65 14<回车>,则输出结果为: #include while(m!=n) { while(m>n) m-=n; while(n>m) n-=m; } printf("m=%d\n",m); } A、m=-1 B、m=2 C、m=1 D、m=3 答案:C 43. 有以下程序 #include main() { int x=8; f or( ; x>0; x--) { if(x%3) {print f("%d,",x--); continue;} printf("%d,",--x); } } 程序的运行结果是: A、8,5,4,2, B、8,7,5,2, C、9,7,6,4, D、7,4,2, 答案:A 44. 以下选项中与if(a==1)a=b; else a++;语句功能不同的switch语句是: A、switch(a==1) {case 1:a=b;break; case 0:a++; } B、switch(a==1) {case 0:a=b;break; case 1:a++; } C、switch(a) {def ault:a++;break; case 1:a=b; } D、switch(a) { case 1:a=b;break; def ault:a++; } 45. 下述程序输出的结果是()。 #include printf("%d,",x); } void f un2() { static int x; x++; printf("%d,",x); } main() { int i; f or(i=0;i<3;i++) { f un1(); f un2(); } } A、1,1,2,1,3,1, B、1,1,1,1,2,3, C、1,1,1,2,1,3, D、1,1,2,2,1,3, 答案:C 46. 设有定义:f loat a=2,b=4,h=3;下面表达式与代数式子(a+b)*h/2结果不相同的是()。 A、(a+b)*h*1/2 B、(1/2)*(a+b)*h C、9 D、(a+b)*h/2 47. 设有说明int(*ptr)[m]; 其中的标志符ptr是()。 A、具有m个指针元素的一维指针数组,每个元素都只能指向整型量 B、指向m个整型变量的函数指针 C、一个指向具有m个整型元素的一维数组的指针 D、m个指向整型变量的指针 48. 以下程序段()。 int a=10; while (a); - -a; A、有语法错误. B、循环执行10次 C、循环执行一次 D、是死循环 49. 已有定义int x; f1oat y;且执行scanf("%3d%f",&x,&y);语句,若从第一列开始输入数据12345 678,则y值为 A、123.000000 B、45.000000 C、678.000000 D、无定值 答案: 50. 若有定义:int a=7;f loat x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是()。 答案:D 51.在C 语言中,一维数组的定义方式为:类型说明符数组名; A、[常量] B、[整型表达式] C、[整型常量]或[整型常量表达式] D、[整型常量表达式] 答案:C 52. #include void f un(int *a,int *b) { int *c; c=a;a=b;b=c; } void main() { int x=3, y=5,*p=&x, *q=&y; f un(p,q);print f(“%d,%d,”,*p,*q): f un(&x, &y);printf(“%d,%d\n”;*p, *q); } 程序运行后的输出结果是 A、5,3,5,3 B、3,5,3,5 C、5,3,3,5 D、3,5,5,3 答案:B 53. 在C的源程序中如果使用了开平方根函数sqrt,则在源程序中应包含下面()预编译命令 A、#include B、#include C、#include D、#include 54. 关于循环嵌套,以下哪种说法是错误的: A、循环嵌套跳转时,禁止跳入同层的另一循环中。 B、循环嵌套跳转时,禁止从外层跳入内层。 C、外层循环可以包含两个以上内循环,彼此之间可以相互交叉。 D、三种循环可以相互嵌套,层数不限。 55. 下面对函数嵌套的叙述中,正确的叙述为()。 A、函数定义和调用均可以嵌套 B、函数定义不可以嵌套,但函数调用可以嵌套 C、函数定义和调用均不能嵌套 D、函数定义可以嵌套,但函数调用不能嵌套 56. 有两个字符数组a,b,则以下能正确为a,b进行赋值的语句是()。 A、gets(a) ; gets(b) ; B、scanf("%s%s", &a, &b) ; C、getchar(a) ; getchar(b) ; D、gets(a, b) ; 57. 设函数f un的定义形式为: void f un(char ch,f loat x) {…} 则以下对函数f un的调用语句中,正确的是( ). A、f un(32,32); B、t=f un('D',16.5); A、返回一个不确定的值 B、返回若干个系统默认值 C、能返回一个用户所希望的函数值 D、没有返回值 59. 若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是()。 A、p=n; B、*p=*q; C、n=*q; D、p=q; 答案:A 60. 在宏定义#def ine PI 3.1415926中,用宏名PI代替一个() A、字符串 B、单精度数 C、双精度数 D、常量 答案:A 61. sizeof(double)是( )。 A、一个整型表达式 B、一个双精度型表达式 C、一个不合法的表达式 D、一种函数调用 答案:A 62. 以下对字符数组的描述中错误的是()。 A、不可以用关系运算符对字符数组中的字符串进行比较 B、字符数组中的字符串可以整体输入、输出 C、可以在赋值语句中通过赋值运算符"="对字符数组整体赋值 D、字符数组中可以存放字符串 答案:C 63. 若有说明语句:int y[ ][4]={0,0};则下面叙述不正确的是( )。 A、只有元素y[0][0]和y[0][1]可得到初值0,其余元素均得不到初值0 B、二维数组y的行数为1 C、该说明等价于int y[ ][4]={0}; D、数组y的每个元素都可得初值0 答案:A 64. 有以下程序 #include void f un(char *a,char *b) { while(*a==’*’) a++; while(*b=*a) {b++;a++;} } void main() { char *s=”****a*b****”,t[80]; f un(s,t); puts(t); } 程序的运行结果是 A、ab B、a*b int a,b,c; a=10; b=50; c=30; if(a>b) a=b,b=c; c=a; printf("a=%d,b=%d,c=%d",a,b,c); A、a=50,b=30,c=50 B、a=10,b=30,c=10 C、a=50,b=30,c=10 D、a=10,b=50,c=10 答案:D 66. 以下程序的运行结果是() int f1(int x) { static int z=3, y=0; y++; z++ ; return(x+y+z); } main( ) { int a=1, k; f or (k=0; k<3; k++) printf("%4d", f1(a)) } A、7911 B、666 C、789 D、6810 答案:D 67. 下列叙述中正确的是()。 A、在switch语句中,不一定使用break语句 B、在switch语句中必须使用default C、break语句必须与switch语句中的case配对使用 D、break语句只能用于switch语句 答案:A 68. 若有说明语句:int a,b,c,*d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是()。 A、scanf("%d%d%d", a, b, *d); B、scanf("%d%d%d", &a, &b, &d); C、scanf("%d%d%d", a, b, d); D、scanf("%d%d%d", &a, &b, d); 答案:D 69. 下列程序运行结果是: main() { int x=9,y=5,z=8;