C语言编程新思路(山东理工大学)智慧树知到章节测试答案

第一章测试

1、关于一个C语言程序执行的起点和终点,以下选项正确的是 ( )。
A、main main
B、第一个 最后一个
C、main 任意
D、main 最后一个
我的答案:A

2、C语句的程序一行写不下时,可以 ( )。
A、用逗号换行
B、用分号换行
C、用任意空格换行
D、用回车换行
我的答案:D

3、以下叙述不正确的是 ( )。
A、C程序中,语句之间必须用分号分隔
B、C程序中,多行语句可以写在一行上
C、C程序中,可以不必包含主函数
D、一个C程序,可以由多个函数组成
我的答案:C

4、C语言规定,在一个源程序中,main函数的位置 ( )。
A、必须在最开始
B、必须在系统调用库函数的后面
C、可以任意
D、必须在最后
我的答案:C

5、以下叙述正确的是 ( )。
A、在C程序中,注释说明只能位于一条语句的后面。
B、C程序的每行中只能写一个语句
C、C语言本身没有输入输出语句
D、在对C语言进行编译的过程中,不能发现注释中的错误
我的答案:D

6、函数的主体部分需要用一对 ( )括起来。
A、{ }
B、[ ]
C、( )
D、< >
我的答案:A

7、以下叙述错误的是 ( )。
A、一个C程序只有在编译、连接成.exe程序之后才能执行
B、C程序编译后生成.obj文件
C、C程序的每一条语句都必须用分号结束
D、只有一个分号的语句不是合法的C语句
我的答案:D

8、计算机能够直接识别和执行的计算机语言 ( )。
A、汇编语言
B、机器语言
C、C语言
D、高级语言
我的答案:B

9、以下叙述错误的是 ( )。
A、对于计算机而言,程序是指完成某一特定任务的一组指令序列
B、一个C程序编译成功后在连接时发现错误,需要编辑修改,然后不必重新编译和连接即可直接运行。
C、机器语言和汇编语言都是低级语言
D、C语言是一种函数型语言,每个C语言程序都是由若干个函数组成
我的答案:B

10、对C程序的注释说明信息必须写在 ( )之间。
A、’和’
B、<和>
C、/*和*/
D、{ 和 }
我的答案:C

11、用C语言编写的源程序,必须翻译成用二进制指令表示的目标程序,才能被计算机识别,这个过程称为 ( )。
A、编辑
B、编译
C、汇编
D、解释
我的答案:B

12、关于C语言的特点,以下叙述错误的是 ( )。
A、C语言一共只有32个关键字,9种控制语句,程序书写自由
B、C语言共有34种运算符,表达式类型多样化
C、C语言不能直接对硬件进行操作
D、C语言程序可以方便的在不同的计算机间和各种操作系统中实现程序的移植
我的答案:C

13、C语言程序的基本构成单位是 ( )。
A、语句
B、表达式
C、函数
D、运算符
我的答案:C

14、能够在编译过程中被检查出来,并给出提示信息的是 ( )。
A、语法错误
B、逻辑错误
C、运行错误
D、注释错误
我的答案:A

15、以下叙述错误的是 ( )。
A、计算机语言大致可以分为三大类:机器语言、汇编语言和高级语言
B、高级语言比低级语言更贴近人类使用的语言,易于理解和使用
C、C语言是一种通用的、过程式编程语言,具有高效、灵活、可移植等优点
D、C语言属于汇编语言
我的答案:D

16、C语言源程序文件的后缀名是 ( )。
A、.obj
B、.exe
C、.c
D、.vbp
我的答案:C

17、C语言编译程序是 ( )。
A、C程序的机器语言版本
B、一组机器语言指令
C、将C源程序编译成目标程序
D、厂家提供的应用软件
我的答案:C

18、以下叙述错误的是 ( )。
A、C语言的注释有两种类型:单行注释和多行注释
B、C程序的单行注释语句以“//”开始
C、C语言的注释语句不影响编译结果
D、C语言程序中只要出现在“/*”和“*/”之间的就一定是注释内容
我的答案:D

19、C语言源程序文件经过编译后的目标文件后缀名是 ( )。
A、.exe
B、.obj
C、.c
D、.vbp
我的答案:B

20、C语言源程序编译、连接后的可执行文件后缀名是 ( )。
A、.exe
B、.obj
C、.c
D、.bak
我的答案:A

第二章测试

1、下面4个选项中,均是不合法的用户标识符的选项的是( )。
A、Date sum do
B、char pao _123
C、b+a if float
D、_abc Temp Int
我的答案:C

2、下面4个选项中均是合法常量的选项是( )。
A、058 12e−3 3.6 'd'
B、−12.8 0x98 43.56e2 '\n'
C、"w" 034 0xa3 '\m'
D、4.45 076 5.33E1.5 "how"
我的答案:B

3、以下叙述不正确的是( )。
A、在C语言中,%运算符的优先级高于/ 运算符
B、在C语言中,area和AREA是两个不同的变量名
C、在C语言中,可以使用二进制整数
D、若a和b类型相同,在计算了赋值表达式a=b后,a得到b的值,而b的值不变
我的答案:C

4、在C语言中,要求运算对象必须是整型的运算符是 ( )。
A、/
B、*
C、+
D、%
我的答案:D

5、若有说明语句:char ch='\0x41'; 则变量ch包含( )个字符。
A、1
B、2
C、3
D、说明不合法,ch的值不确定
我的答案:A

6、若有定义:int a=7; float x=2.5,y=4.5; 则表达式x+a%3*(x+y)/2的值是 ( )。
A、2.500000
B、6.000000
C、5.500000
D、0.000000
我的答案:B

7、设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的数据类型为( )。
A、int
B、float
C、double
D、不确定
我的答案:C

8、以下叙述正确的是 ( )。
A、在C语言中,一行只能写一条语句
B、若a是实型变量,则在C语言中不允许用其他类型的数据对其赋值
C、在C语言中,无论是整数还是实数,都能被准确无误地表示
D、在C语言中,%是只能用于整数运算的运算符
我的答案:D

9、在C语言中,int型数据在内存中的存储形式是( )。
A、原码
B、反码
C、补码
D、ASCII码
我的答案:C

10、下列选项中可作为C语言的合法整数的是 ( )。
A、a2
B、101011B
C、03845
D、0x4b5
我的答案:D

11、字符型数据在内存中是以 ( )形式存储的。
A、ASCII码
B、补码
C、原码
D、BCD码
我的答案:A

12、下列叙述正确的是( )。
A、C语言不允许混合类型数据间进行运算
B、在C语言中,'b'和"b"的含义是不同的
C、C语言中,任何类型的数据都可进行%运算
D、在C语言中,整型常量有二进制、八进制、十六进制和十进制4种表示形式
我的答案:B

13、#include <stdio.h> int main() { char ch; int i; i=65; ch="a"; printf("%c,%c,%d,%d \n",i,ch,i,ch); return 0; } 这段程序的运行结果是( )。
A、A,a,65,97
B、a,A, 97,65
C、a,A, 65,97
D、编译错误,无法运行
我的答案:D

14、设整型变量a=2,则执行下列语句后,实型变量b的值不是0.5的是( )。
A、b=1.0/a
B、b=1/(float)a
C、b=1/(a*1.0)
D、b=(float)(1/a)
我的答案:D

15、下列叙述正确的是( )。
A、不同类型的变量所占内存单元是相同的
B、C语言中,变量可以不经定义而直接使用
C、赋值表达式的左边只能是变量名
D、字符串常量"China!"在存储时,系统为其分配6个字节的空间
我的答案:C

16、#include <stdio.h> int main() { int a=b=5,c; c=a+b; printf("c=%d\n",c); } 这段程序的运行结果是( )。
A、0
B、10
C、不确定
D、编译错误,无法运行
我的答案:D

17、C语言的标识符只能由字母、数字和下划线三种字符组成,且第一个字符( )。
A、必须是下划线
B、可以是这三种字符中的任一种
C、必须为字母或者下划线
D、必须是字母
我的答案:C

18、如果在一个C语言表达式中有多个运算符,则运算时应该( )。
A、只考虑优先级
B、先考虑优先级,然后考虑结合性
C、只考虑结合性
D、先考虑结合性,然后考虑优先级
我的答案:B

19、已知字符A的ASCII值是65,若定义int i; 则执行语句i=’A’+3; 后,正确的叙述是 ( )。
A、i的值是字符A的ASCII值加上3,即68
B、语句不合法
C、语句可以执行,但没有计算结果
D、i的值是字符E
我的答案:A

20、在C语言中常量’\n’和常量”ABC”在内存中占用的字节数分别是( )。
A、1 3
B、1 4
C、2 3
D、2 4
我的答案:B

第三章测试

1、若a、b、c、d都是int类型变量且初值为0,以下选项中不正确的赋值语句是 ( )。
A、a=b=c=d=100;
B、d=d-1;
C、a*b;
D、d=(c=30)+b;
我的答案:C

2、以下选项中不是C语句的是 ( )。
A、{int i;printf("%d\n",i);}
B、;
C、a=5,c=10
D、{ ; }
我的答案:C

3、以下程序的输出结果是 ( )。 #include "stdio.h" int main() { int x=100, y=30; printf("%d\n",y=x/y); return(0); }
A、0
B、1
C、3
D、不确定的值
我的答案:C

4、若变量已正确说明为int类型,要给a、b、c输入数据,以下正确的输入语句是 ( )。
A、read(a,b,c);
B、get("%d%d%d",a,b,c);
C、scanf("%d%d%d",a,b,c);
D、scanf("%d%d%d",&a,&b,&c);
我的答案:D

5、以下程序段的输出结果是( ) #include <stdio.h> int main(void) { int i; float x; double y; y=x=i=10/4; printf("y=%.2f,x=%.2f,i=%d\n",y,x,i); return(0); }
A、y=2.00, x=2.50, i=2
B、y=2.50,x=2.50,i=2
C、y=2.50, x=2.00, i=2
D、y=2.00,x=2.00,i=2
我的答案:D

6、若变量已正确定义,要将a和b中的数进行交换,下面不正确的语句组是 ( )。
A、a=a+b, b=a-b, a=a-b;
B、t=a, a=b, b=t;
C、a=t; t=b; b=a;
D、t=b; b=a; a=t;
我的答案:C

7、以下程序的输出结果是 ( )。 #include <stdio.h> int main(void) { int a=4,b=8; printf("a=%%d,b=%%d\n",a,b); /* 注意转义字符的作用 */ return(0); }
A、a=%2,b=%5
B、a=2,b=5
C、a=%%d,b=%%d
D、a=%d,b=%d
我的答案:D

8、已知字母A的ASCII值为十进制数65,下面程序的输出是 ( )。 #include "stdio.h" int main(void) { char ch1,ch2; ch1='A'+'5'−'3'; ch2='A'+'6'−'3'; printf("%d,%c\n",ch1,ch2); return(0); }
A、67,D
B、67,C
C、B,C
D、C,D
我的答案:A

9、若从终端输入以下数据,要给变量c赋以340.25,则正确的输入语句是( )。
A、scanf(%f”,&c)
B、scanf(%.2f”, &c);
C、scanf(%6.2f”, &c);
D、scanf(%4f”, &c);
我的答案:A

10、以下程序运行时输入:25<回车>,执行后输出的结果是 ( )。 #include <stdio.h> int main(void) { char ch1,ch2; int n1; ch1=getchar(); ch2=getchar(); n1=ch2-ch1; printf("%d",n1); return(0); }
A、3
B、-3
C、25
D、编译错误
我的答案:A

11、有以下程序 #include<stdio.h> int main(void) { char c1,c2,c3,c4,c5,c6; scanf("%c%c%c%c",&c1,&c2,&c3,&c4); c5=getchar(); c6=getchar(); putchar(c1); putchar(c2); printf("%c%c\n",c5,c6); return(0); } 程序运行后,若从键盘输入(从第一列开始) abc<回车> def<回车> 则输出结果是( )。
A、cdef
B、abef
C、abcd
D、abde
我的答案:D

12、以下程序段的输出结果是( )。 #include <stdio.h> int main(void) { char c1='a',c2='c'; printf("%d,%c\n",c2-c1,c2-c1+'B'); return(0); }
A、2,b
B、3,B
C、2,D
D、类型不一致,出错
我的答案:C

13、若变量已正确定义为float类型,要通过语句scanf(“%f%f%f”,&a,&b,&c);给a赋值10.0,b赋值20.0,c赋值30.0,不正确的输入形式是( )。
A、10 20 30
B、10,20,30
C、10.0 20.0 30.0
D、10,20 30
我的答案:B

14、以下程序的输出结果是( )。 #include <stdio.h> int main(void) { int a,b; a=10; b=20; printf("a=%d\nb=%d\n",a,b); return(0); }
A、10,20
B、a=10,b=20
C、a=10 b=20
D、10 20
我的答案:C

15、若变量已正确说明,要求用以下语句给a赋值2.0,给c1赋值字符#,给b赋值4.0,则不正确的输入形式是( )。scanf(“%f%c%f”, &a, &c1, &b);
A、2.0 # 4.0 ’
B、2.0#4.0 ‘
C、2# 4
D、2.0# 4.0 ,
我的答案:A

16、以下说法错误的是 ( )。
A、赋值表达式的功能是将赋值运算符右侧的值赋给其左侧的变量。
B、若float x=5;可以对变量x进行%操作,如x%2的值是1。
C、复合语句是用一对花括号括起来的若干条语句,从语法作用上讲一条复合语句视为一条语句。
D、长整型(long int)变量,使用scanf函数输入时,需使用%ld格式符。
我的答案:B

17、结构化程序设计由三种基本结构组成,下面哪个选项不属于三种基本结构 ( )。
A、顺序
B、选择
C、循环
D、回溯
我的答案:D

18、下面程序段功能是先输入一个整数,然后将输入的整数输出,请指出哪部分有错( )。 #include <stdio.h> // 1 int main(void) { int i; // 2 scanf("%d", i); // 3 printf("i=%d\n ",i); // 4 return(0); }
A、1
B、2
C、3
D、4
我的答案:C

19、设int a=10,b; ,执行下列语句后,b的值不是2的是( )。
A、b=a/4
B、b=a-8
C、b=a/4.0
D、b=a%4
我的答案:C

20、putchar() 函数可以向终端输出一个( )。
A、整型
B、实数
C、字符串
D、字符
我的答案:D

第四章测试

1、表示关系x≤y≤z的c语言表达式为( )。
A、(x<=y)&&(y<=z)
B、(x<=y)AND(y<=z)
C、(x<=y<=z)
D、(x<=y)&(y<=z)
我的答案:A

2、若a=5;b=6;c=7;d=8;m=2;n=2;则执行 (m=a>b)&&(n=c>d)后,m和n的值分别为( )。
A、2 ,2
B、0,2
C、0,0
D、2.0
我的答案:B

3、在以下一组运算符中,优先级最高的运算符是( )。
A、<=
B、=
C、%
D、&&
我的答案:C

4、若有int x,a,b;则下面if语句中,( )是错误的。
A、if (a=b) x=x+1;
B、if (a<>b) x=x+1;
C、if (a-b) x=x+1;
D、if ( x ) x=x+1;
我的答案:B

5、下列表达式中,( )不满足“当x的值为偶数时值为真,为奇数时值为假”的要求。
A、x%2==0
B、!x%2!=0
C、(x/2*2-x)==0
D、!(x%2)
我的答案:B

6、关于以下程序,正确的说法是( )。 #include <stdio.h> int main(void) {int x=0,y=0,z=0; if(x=y+z) printf("***"); else printf("###"); return(0); }
A、有语法错误,不能通过编译
B、输出:***
C、可以编译,但不能通过连接,所以不能运行
D、输出:###
我的答案:D

7、下列程序的输出结果是( )。 #include <stdio.h> int main(void) { float x=4,y=1; if(x<0) y=0; else if(x<10) y=1/x; else y=10; printf("%f\n",y); return(0); }
A、0.000000
B、10.000000
C、0.250000
D、1.000000
我的答案:C

8、执行以下程序时,若输入3和4,则输出结果是( )。 #include <stdio.h> int main(void) { int a,b,s; scanf("%d%d",&a,&b); s=a; if(a<b) s=b; s=s*s; printf("%d\n",s); return(0); }
A、14
B、16
C、18
D、20
我的答案:B

9、下列程序的输出结果是( )。 #include <stdio.h> int main(void) { int x=1,a=0,b=0; switch(x) { case 0: b=b+1; case 1: a=a+1; case 2: a=a+1;b=b+1; } printf("a=%d,b=%d\n",a,b); return(0); }
A、a=2,b=1
B、a=1,b=1
C、a=1,b=0
D、a=2,b=2
我的答案:A

10、若有定义:int a=3,b=2,c=1; 并有表达式:①a%b、②a>b>c、③b&&c+1、④c+=1,则表达式值相等的是( )。
A、①和②
B、②和③
C、①和③
D、③和④
我的答案:C

11、当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是( )。 if(a<b) if(c<d) x=1; else if(a<c) if(b<d) x=2; else x=3; else x=6; else x=7;
A、1
B、2
C、3
D、4
我的答案:B

12、在下面的条件语句中(其中S1和S2表示C语言语句),只有一个在功能上与其他3个语句不等价( )。
A、if(a) S1; else S2;
B、if(a==0) S2; else S1;
C、if(a!=0) S1; else S2;
D、if(a==0) S1; else S2;
我的答案:D

13、若有int a=3,b; 则执行下面程序段后b的值是( ) if(a>0) b=1; else b=-1; b=b+1;
A、1
B、2
C、-1
D、0
我的答案:B

14、假定所有变量均已正确定义,下面程序段执行后的x的值是( )。 a=b=0; x=35; if(!a) x=x-1; if(b) x=3; else x=4;
A、34
B、4
C、35
D、3
我的答案:B

15、若有说明语句int i=4, j=5, k=6; float f; 则执行f=( i>k)?i:(j<k)?j:k;语句后,f的值为( )。
A、4.0
B、5.0
C、6.0
D、7.0
我的答案:B

16、下述程序的输出结果是( ) #include <stdio.h> int main (void) { int a=0,b=0,c=0; if((a+1)>0 ||(b>0)) c=c+1; printf("%d,%d,%d",a,b,c); return(0); }
A、0,0,0
B、1,1,1
C、1,0,1
D、0,0,1
我的答案:D

17、若x=0,则执行下面程序段后,屏幕上会显示( )。 if(x=0) printf("***"); else printf("&&&");
A、*** ***
B、&&&
C、***&&&
D、&&&***
我的答案:B

18、若有int a=10,b=20,c=30; ,执行下面程序段后a、b、c的值分别是()。 if(a>b) c=a; a=b; b=c;
A、10、20、30
B、20、10、10
C、20、30、30
D、20、10、30
我的答案:C

19、下列程序的输出结果是( )。 #include <stdio.h> int main(void) { int k=8; switch(k) { case 7:k+=1; case 8:k+=1; case 9:k+=1;break; default:k+=1; } printf("%d\n",k); return(0); }
A、8
B、9
C、10
D、11
我的答案:C

20、若有float x; int a,b; ,下面四条switch语句中正确的有( )条。 switch(x) { case x=1.0: printf(“Y”); case x=2.0: printf(“N”); } switch(a) { case a=1: printf(“Y”); case a=2: printf(“N”); } switch(b) { case b==1: printf(“Y”); case b==2: printf(“N”); } switch(x) { case 1.0: printf(“Y”); case 2.0: printf(“N”); }
A、1
B、2
C、3
D、4
我的答案:A

第五章测试

1、以下程序段中while循环执行的次数是( )。 int k=0; while(k=1) k++;
A、无限次
B、有语法错不能执行
C、一次也不执行
D、执行一次
我的答案:A

2、以下描述中正确的是( )。
A、由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句
B、do-while循环中由do开始,用while 结束,在while (表达式)后面不能写分号
C、在do-while循环中,循环体至少执行一次
D、do-while循环中,根据情况可以省略while
我的答案:C

3、在C语言中有关for循环,以下正确的说法是( )。
A、for循环只能用于循环次数已经确定的情况
B、for循环是先执行循环体语句,后判断表达式
C、在 for循环不能break跳出循环体
D、for循环的循环体语句中,可以包含多条语句,但必须用大括号括起来
我的答案:D

4、以下下面程序的运行结果是( )。 #include <stdio.h> int main() { int a=1,b=2,c=2,t; while(a<b<c) {t=a;a=b;b=t; c--; } printf(“%d,%d,%d”,a,b,c); }
A、1,2,0
B、2,1,0
C、1,2,1
D、2,1,1
我的答案:A

5、若i,j已定义为int类型,则以下程序段中内循环体的总的执行次数是( )。 for (i=5;i;i--) for (j=0;j<4;j++){...}
A、20
B、25
C、24
D、30
我的答案:A

6、下面程序的输出结果是( )。 #include <stdio.h> int main() { int i,j; for(i=0,j=10;i<j;i+=2,j--) ; printf("%d %d",i,j); }
A、4 8
B、6 7
C、8 6
D、10 5
我的答案:C

7、下面关于switch语句和break语句的结论中,说法正确的是( )。
A、break语句是switch语句的一部分
B、在switch语句中,可以根据需要使用或者不使用break语句
C、在switch语句中,必须使用break语句
D、break语句是for语句的一部分
我的答案:B

8、以下不是死循环的语句是( )。
A、for(;;x+=i)
B、while(1) {x++;}
C、for(i=10;;i--) sum+=i;
D、for( ;(c=getchar())!=’\n’;) printf(“%c”,c);
我的答案:D

9、与语句头while(!x)等价的语句头是( )。
A、while(x==0)
B、while(x!=0)
C、while(x!=1)
D、while(~x)
我的答案:A

10、在while(x)语句中的x与下列条件表达式等价的是( )。
A、x==0
B、x!=0
C、x!=1
D、x=1
我的答案:B

11、下面程序的功能是:在输入的一批正数中求最大者,输入0结束循环,选择( )填空。 #include <stdio.h> int main ( ) { int a,max=0; scanf("%d",&a); while ( ) { if (max<a) max=a ; scanf ("%d",&a); } printf("%d",max); }
A、a==0
B、a
C、!a==1
D、!a
我的答案:B

12、下面程序的功能是从键盘输入一行字符,从中统计大写字母和小写字母的个数,选择( ) 填空。 #include <stdio.h> int main ( ) { int m=0,n=0; char c; while (( ) != '\n') { if (c>='A' && c<='Z') m++; if (c>='a' && c<='z') n++; } printf("m=%d,n=%d\n",m,n); }
A、c=getchar( )
B、getchar( )
C、c==getchar( )
D、scanf("%c",&c)
我的答案:A

13、下面程序的输出结果是 ( )。 #include <stdio.h> int main ( ) { int k=0,m=0,i,j; for (i=0; i<2; i++) { for (j=0; j<3; j++) k++ ; k-=j ; } m = i+j ; printf("k=%d,m=%d",k,m) ; }
A、k=0,m=3
B、k=0,m=5
C、k=1,m=3
D、k=1,m=5
我的答案:B

14、下面程序的输出结果是( )。 #include <stdio.h> int main ( ) { char c='A'; int k=0; do { switch (c++) {case 'A': k++; break; case 'B': k--; case 'C': k+=2; break; case 'D': k%=2; continue; case 'E': k*=10; break; default: k/=3; } k++; } while (c<'G'); printf ("k=%d",k); }
A、k=3
B、k=4
C、k=2
D、k=0
我的答案:B

15、下面程序的运行结果是( )。 #include <stdio.h> int main() { int i; for(i=1;i<=5;i++) { if(i%2) printf(“*”); else continue; printf(“#”); } printf(“$\n”); }
A、*#*#*$
B、***$
C、*#*#*#$
D、*#*#$
我的答案:C

16、下面程序段的运行结果是 ( )。 int x=3; do { printf(" %d\n",x -=2);} while(!(--x));
A、输出的是 1
B、输出的是1和-2
C、输出的是3和0
D、是死循环
我的答案:B

17、下面程序段的运行结果是( )。 x=y=0; while(x<15) y++,x+=++y; printf("%d,%d",y,x);
A、20,7
B、6,12
C、20,8
D、8,20
我的答案:C

18、下面程序的功能是将从键盘输入的一对数,由小到大排序输出。当输入一对相等数时结束循环,请选择( )填空: #indude <Stdio.h> int main() {int a,b,t; scanf("%d%d",&a,&b); while( 【1】 ) {if(a>b) {t=a;a=b;b=t;} printf("%d,%d",a,b); scahf("%d%d",&a,&b);人 }
A、!a=b
B、a!=b
C、a= =b
D、a=b
我的答案:B

19、对for(表达式1;;表达式3)可理解为( )。
A、for(表达式1; 0;表达式3)
B、for(表达式1;1;表达式3)
C、for(表达式1;表达式1;表达式3)
D、for(表达式1;表达式3;表达式3)
我的答案:B

20、若i为整型变量,则以下循环执行次数是( )。 for (i=2;i==0;) printf("%d",i-- );
A、无限次
B、0次
C、1 次
D、2次
我的答案:B

第六章测试

1、在C语言中,引用数组元素时,其数组下标的数据类型允许是( )。
A、整型常量
B、整型表达式
C、整型常量或整型表达式
D、任何类型的表达式
我的答案:C

2、以下程序的输出结果是( )。 int main( ) { int a[5]={1,2,3}; printf(“%d\n”,a[3]); }
A、0
B、1
C、3
D、随机值
我的答案:A

3、以下程序的输出结果是( )。 int main( ){ int i, k,a[10]={1,5,3,4,2,8,9,6,7,0}; for (i=0,k=0; i<10; i++) if(a[k]<a[i]) k=i; printf("%d",k);}
A、5
B、6
C、7
D、8
我的答案:B

4、以下程序的输出结果( )。 int main( ){int i,j,s=0,a[2][3]={1,2,3,4,5,6};for (i=0; i<2; i++) for (j=0; j<3; j++) s=s+a[i][j];printf(“%d”,s);}
A、10
B、15
C、20
D、21
我的答案:D

5、有以下程序运行后的输出结果是( )。 int main( ){int aa[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+=aa[i][1];printf(“%d ”,s);}
A、11
B、19
C、13
D、20
我的答案:B

6、数组定义为 int a[3][2]={1,3,4,6,8,10},数组元素( )的值为6。
A、a[3][2]
B、a[1][1]
C、a[2][1]
D、a[2][2]
我的答案:B

7、定义 int a[10][11],则数组a有( )个元素。
A、11
B、90
C、110
D、132
我的答案:C

8、以下不能对二维数组a进行正确初始化的语句是( ) 。
A、int a[2][3]={0};
B、int a[][3]={{1,2},{0}};
C、int a[2][3]={{1,2},{3,4},{5,6}};
D、int a[][3]={1,2,3,4,5,6};
我的答案:C

9、若有定义语句:int a[3][5];,按在内存中的存放顺序,a数组的第8个元素是( )。
A、a[0][4]
B、a[1][2]
C、a[0][3]
D、a[1][4]
我的答案:B

10、若有定义 int a[10];则对a数组元素的正确应用是 ( )。
A、a[10.0]
B、a[1+2]
C、a(10)
D、a[10]
我的答案:B

11、以下能对一维数组a进行正确初始化的语句是( )。
A、int a[10]=(0,0,0,0,0)
B、int a[10]={}
C、int a[]={0};
D、int a[10]=10*1;
我的答案:C

12、以下对二维数组a的正确说明是( )。
A、int a[3][];
B、floatf a(3,4);
C、double a[1][4];
D、float a(3)(4);
我的答案:C

13、若有说明: int a[3][4]={0};则下面正确的叙述是 ( )。
A、只有元素a[0][0]可得到初值0
B、此说明语句不正确。
C、数组a中各元素都可得到初值,但其值不一定为0。
D、数组a中每个元素均可得到初值0
我的答案:D

14、若有定义:int s[3][4]={{1,2},{0},{3,4,5}};则s[2][1]的值为( )。
A、3
B、4
C、0
D、1
我的答案:B

15、若有定义int a[2][3];则合法引用数组元素的是( )。
A、a[0][1/2]
B、a[1][2]
C、a[2][3]
D、a[1][3]
我的答案:B

16、在以下数组定义中,错误的是( )。
A、int a[2][]={1,2,3,4,5};
B、int a[][2]={{0},{1}};
C、int a[2][2]={{1,2},{3}}
D、int a[][2]={1,2,3,4};
我的答案:A

17、以下程序段执行后p的值是( )。int a[3][3]={3,2,1,3,2,1,3,2,1}; int j,k,p=1;for(j=0;j<2;j++)for(k=j;k<3;k++)p*=a[j][k];
A、108
B、18
C、12
D、2
我的答案:C

18、以下程序段执行后p的值是( )。 int a[3][3]={3,2,1,3,2,1,3,2,1}; int j,k,p=1;for(j=0;j<2;j++)for(k=j;k<4;k++)p*=a[j][k];
A、108
B、18
C、12
D、2
我的答案:A

19、以下程序段运行后s的值是( )。 int a[3][3]={1,2,3,4,5,1,2,3,4};int i,j,s=1;for(i=0;i<3;i++)for(j=i+1;j<3;j++)s+=a[i][j];
A、6
B、120
C、7
D、240
我的答案:C

20、下面程序段的运行结果是( )。 int m[]={5,8,7,6,9,2},i=1;for(i=0;i<6;i++) {if(i % 2 !=0) m[i]+=10; }for(i=0;i<6;i++) printf("%d ",m[i]);
A、5 18 7 16 9 12
B、15 18 17 16 19 12
C、15 8 17 6 19 2
D、5 8 7 6 9 2
我的答案:A

第七章测试

1、变量的指针,其含义是指变量的( )。
A、值
B、名称
C、地址
D、另一个名称
我的答案:C

2、以下叙述错误的是( )。
A、指针变量可以与整数进行加、减算术运算
B、指针变量中存放的是地址值
C、指针变量不占用存储空间
D、多个同类型的指针变量可以指向同一个普通变量。
我的答案:C

3、已知指针变量P的指向如图1所示,则表达式*P++的值是( )。
A、20
B、30
C、21
D、31
我的答案:A

4、已知指针变量P的指向如图1所示,则表达式*++P的值是( )。
A、20
B、30
C、21
D、31
我的答案:B

5、已知指针变量P的指向如图1所示,则表达式++(*P)的值( )。
A、20
B、30
C、21
D、31
我的答案:C

6、假设整型变量a的值为12,变量a的地址为2000,若欲使p为指向a的指针变量,则以下赋值正确的是( )。
A、&a=p;
B、*p=12;
C、*p=2000
D、p=&a;
我的答案:D

7、若有定义:int b,*pb;则下面正确的赋值表达式是( )。
A、pb=&b
B、pb=b
C、*pb=&b
D、*pb=*b
我的答案:A

8、设int a[10],*p=a; ,则下面( )不是对a[3]的正确引用。
A、*(a+3)
B、p+3
C、p[3]
D、*(p+3)
我的答案:B

9、若有如下定义:int a[10]={10,20,30,40,50,60,70,80,90,100},*p=a; ,则执行p=p+5后,*p的值是( )。
A、10
B、50
C、60
D、100
我的答案:C

10、若int *p,i;执行i=100; p=&i; i=*p+10; 后,*p的值是( )。
A、100
B、10
C、0
D、110
我的答案:D

11、以下程序的输出结果是( )。 #include <stdio.h> int main() { int a[ ]={2,4,6,8,10},y=0,i,*p; p=a; for(i=0;i<3;i++) y+=*(p+i); printf("%d\n",y); }
A、17
B、12
C、19
D、20
我的答案:B

12、以下程序的输出结果是( )。 #include <stdio.h> int main() { int a=1,b=2,c=3,*p1,*p2,*p3; p1=&a; p2=&b; p3=&c; *p3=*p1; *p1=*p2; *p2=*p3; printf("a=%d,b=%d,c=%d\n",a,b,c); }
A、a=1,b=2,c=3
B、a=2,b=1,c=3
C、a=2,b=1,c=1
D、a=3,b=2,c=1
我的答案:B

13、以下程序的输出结果是 ( )。 #include <stdio.h> int main() { int k=2,m=4,n=6; int *pk=&k,*pm=&m,*p; *(p=&n)=*pk*(*pm); printf("%d\n",n); return 0; }
A、4
B、6
C、8
D、10
我的答案:C

14、以下程序的输出结果是 ( )。 #include <stdio.h> int main() { int **k, *a, b=100; a=&b;k=&a; printf("%d\n",**k); return 0; }
A、编译出错
B、100
C、a的地址
D、b的地址
我的答案:B

15、对于基类型相同的两个指针变量之间,不能进行的运算时( )。
A、<
B、=
C、+
D、–
我的答案:C

16、若有int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int (*p)[3]=a; ,则能正确表示数组元素a[1][2]的是( )。
A、*(*(p+1)+2)
B、*(p+1)+2
C、(p+1)[2]
D、p[1]+2
我的答案:A

17、对于语句int *p[5]; 的正确描述是( )。
A、p是一个指向数组的指针,所指向的数组含有5个int型元素。
B、p是一个指向数组中第5个元素的指针,该元素是int型。
C、定义不合法
D、p是一个具有5个元素的指针数组,每个元素都是一个指向int型对象的指针变量。
我的答案:D

18、若有int a[10],*p=a;,下列不能表示a数组首元素地址的是( )。
A、a
B、*p
C、p
D、&a[0]
我的答案:B

19、下列程序的运行结果是( )。 #include <stdio.h> int main() { int a[5]={1,2,3,4,5},*p,**pp; p=a; pp=&p; printf("%d ",*(p+3)); printf("%d",**pp); return 0; }
A、4 1
B、3 1
C、4 4
D、3 4
我的答案:A

20、若有int a[10],*p;,则下列语句中正确的是( )。
A、for(p=a; a<p+10 ; a++)
B、for(p=a; p<a+10 ; p++)
C、for(p=a; p<p+10 ; p++)
D、for(p=a; p<a+10 ; a++)
我的答案:B

第八章测试

1、函数strcmp("ABCDDCBA","ABCDE")的返回值是( )。
A、0
B、正数
C、负数
D、随机值
我的答案:C

2、以下程序运行后的输出结果是( )。 int main( ) { int i,j; char a[ ]={‘a’,‘b’,‘c’,‘d’, ‘e’, ‘f’, ‘g’,‘h’,‘\0’}; i=sizeof(a); // sizeof返回数组a在内存分配字节数 j=strlen(a); printf(“%d,%d\n”,i,j); }
A、9,9
B、8,9
C、1,8
D、9,8
我的答案:D

3、下列选项中,不正确的赋值方式是( )。
A、char str[ ]={'s','t','r','i','n','g','\0'};
B、char str[7]={'s','t','r','i','n','g'};
C、char str1[10]; str1="string";
D、char str1[ ]="string",str2[ ]="12345678";
我的答案:C

4、若有以下的说明和语句, 则它与( )中的说明是等价的。 char s[3][5]={"aaaa","bbbb","cccc"};
A、char s1[ ][ ] ={"aaaa","bbbb","cccc"};
B、char s2[3][] ={"aaaa","bbbb","cccc"};
C、char s3[ ][5]={"aaaa","bbbb","cccc"};
D、char s4[ ][4]={"aaaa","bbbb","cccc"};
我的答案:C

5、有以下程序: #include "stdio.h" #include "string.h" int main() { int i,j; char t[10],p[5][10]={"abc","aabdfg","abbd","dcdbe","cd"}; for(i=0;i<4;i++) for(j=i+1;j<5;j++) if(strcmp(p[i],p[j])>0) { strcpy(t,p[i]); strcpy(p[i],p[j]); strcpy(p[j],t); } printf("%d\n",strlen(p[0])); } 程序运行后的输出结果是( )。
A、6
B、4
C、5
D、3
我的答案:A

6、下列选项正确的语句组是 ( )。
A、char s[8]; s={"China"};
B、char *s; s={"China"};
C、char s[8]; s="China";
D、char *s; s="China";
我的答案:D

7、下面程序的运行结果是 ( )。 char c[6]={'a','b','\0','c','d','\0'}; printf("%s",c);
A、'a' 'b'
B、ab
C、ab c
D、ab cd
我的答案:B

8、有两个字符数组a、b,则以下正确的输入语句是( )。
A、gets(a,b);
B、scanf("%s%s",a,b);
C、scanf("%s%s",&a,&b);
D、gets("a"); gets("b");
我的答案:B

9、下面程序段的运行结果是( )。 char a[7]= "abcdef"; char b[4]= "ABC"; strcpy(a,b); printf("%c",a[5]);
A、空格
B、c
C、e
D、f
我的答案:D

10、下面程序段的输出结果是( )。 #include <stdio.h>int main(){ char str[]="I like swimming! ",*p=str; p=p+7; printf("%s",p);}
A、程序有错误
B、I like swimming!
C、swimming!
D、like swimming!
我的答案:C

11、下面哪个选项不能将"hello"字符串存入字符数组str中( )。
A、char str[]="hello" ;
B、char str[30]; strcpy(str, "hello");
C、char str[30];str="hello";
D、char str[30],*ps=str; strcpy(ps,"hello");
我的答案:C

12、有以下定义,不能表示字符 'C' 的表达式是( )。char str[]="ABCDEFG",*p=str;
A、*(p+2)
B、str[2]
C、*(str+2)
D、*p+2
我的答案:D

13、程序段char c[]="abcdefg "; printf("%s",c+4);的运行结果是( )。
A、abcd
B、efg
C、abcdefg
D、defg
我的答案:B

14、有如下定义,不能给数组a输入字符串的是( )。char a[20],*p=a;
A、gets(p)
B、gets(a[0])
C、gets(&a[0])
D、gets(a)
我的答案:B

15、下面说法正确的是( )。
A、若定义char s[]="well"; char t[]={'w','e','l','l'};,则数组s与数组t中内容相同。
B、当两个字符串所包含的字符个数相同时,才能比较两个字符串的大小。
C、函数strcpy(str1,str2); 的功能是将str2中字符串复制到str1中。
D、定义char a[30], b[]="China"; 后,可执行a=b; 将数组b中的字符串赋值给数组a。
我的答案:C

16、接受用户输入含有空格的字符串时,应使用( )。
A、getchar( )
B、gets( )
C、scanf( )
D、printf ( )
我的答案:B

17、列描述中错误的是 ( )。
A、可以对字符数组进行整体输入、输出。
B、字符串可以存储在字符数组中。
C、不能对字符数组存储的字符串进行更改。
D、不能使用赋值运算符“=”,直接对字符数组名进行赋值。
我的答案:C

18、执行以下程序段后,输出结果是( )。 char str[20]="door",t; int i,j; i=0; j=strlen(str)-1; t=str[i]; str[i]=str[j]; str[j]=t; puts(str);
A、door
B、dood
C、rood
D、roor
我的答案:C

19、若有如下定义char a[30],b[30],则以下正确的输入语句是( )
A、gets(a,b);
B、gets(a); gets(b);
C、scanf("%s",a,b);
D、scanf("%s%s"&a,&b);
我的答案:B

20、执行以下程序段后,输出结果是( ) 。 char s[20]= "Good",t[]="Moring!"; strcat(s,t); puts(s);
A、GoodMoring!
B、Moring!
C、Good
D、Moring!Good
我的答案:A

第九章测试

1、在c语言中以下不正确的说法是( )。
A、实参可以是常量、变量、或表达式 
B、形参可以是常量、变量或表达式
C、实参可以为任意类型
D、形参应与其对应的实参类型一致
我的答案:B

2、以下程序有语法性错误,有关错误原因的正确说法是( )。  #include <stdio.h> int main(void)     {  int G=5,k;  void  prt_char();  ……    k=prt_char(G);    …… return 0; } 
A、语句void prt_char();有错,它是函数调用语句不能用void说明
B、变量名不能使用大写字母
C、函数说明和函数调用语句之间有矛盾
D、函数名不能使用下划线
我的答案:C

3、下述函数定义形式正确的是( )。
A、int f(int x;int y)
B、int f(int x,int y)
C、int f(int x,y)
D、int f(x,y:int)
我的答案:B

4、以下所列的各函数首部中,正确的是( )。
A、void play(int a,b)
B、void play(var :Integer,var b:Integer)
C、void play(int a,int b)
D、Sub play(a as integer,b as integer)
我的答案:C

5、若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( )。
A、函数调用可以作为独立的语句存在
B、函数调用可以作为一个函数的实参
C、函数调用可以出现在表达式中
D、函数调用可以作为一个函数的形参
我的答案:D

6、在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是( )。
A、地址传递
B、单向值传递
C、由实参传给形参,再由形参传回实参
D、传递方式由用户指定
我的答案:B

7、有以下程序: #include <stdio.h> void fun(int a,int b,int c) { a=11; b=22; c=33;} int main(void) { int x=10,y=20,z=30; fun(x,y,z); printf(“%d,%d,%d\n”,x,y,z); return 0; } 该程序输出结果是( )。
A、30,20,10
B、10,20,30
C、11,22,33
D、33,22,11
我的答案:B

8、关于函数参数,说法正确的是( )。
A、实参与其对应的形参各自占用独立的内存单元
B、实参与其对应的形参共同占用一个内存单元
C、只有当实参和形参同名时才占用同一个内存单元
D、形参是虚拟的,不占用内存单元
我的答案:A

9、一个函数的返回值由( )确定。
A、return语句中的表达式
B、调用函数的类型
C、系统默认的类型
D、被调用函数的类型
我的答案:D

10、下列程序的输出结果是( )。 fun(int a,int b,int c) { c=a+b;} int main(void) { int c; fun(2,3,c); printf(“%d\n”,c); return 0; }
A、2
B、3
C、5
D、不定
我的答案:D

11、有以下程序: #include <stdio.h> int fun(int x) { printf(“x=%d\n”,++x); } int main() { fun(12+5); return 0; } 程序的输出结果是( )。
A、x=12
B、x=13
C、x=17
D、x=18
我的答案:D

12、有如下程序: #include <stdio.h> int i=1; int main() { int i=i; printf("%d\n",i); return 0; } 程序的输出结果是( )。
A、1
B、0
C、i
D、不确定
我的答案:D

13、有如下程序: #include <stdio.h> int f(int x) { return x+3;} int main(void) { int a=1; while(f(a)<10) a++; return 0; } 程序执行后,变量a的值是( )。
A、7
B、10
C、11
D、9
我的答案:A

14、以下说法中正确的是( )。
A、形参是全局变量,其作用范围仅限于函数内部
B、形参是全局变量,其作用范围从定义之处到文件结束
C、形参是局部变量,其作用范围仅限于函数内部
D、形参是局部变量,其作用范围从定义之处到文件结束
我的答案:C

15、定义为void类型的函数,其含义是( )。
A、调用函数后,被调用的函数没有返回值
B、调用函数后,被调用的函数不返回
C、调用函数后,被调用的函数的返回值为任意类型
D、其余选项都不对
我的答案:A

16、当全局变量和函数内部的局部变量同名时,在函数内部( )。
A、全局变量有效
B、局部变量有效
C、全局变量和局部变量都有效
D、全局变量和局部变量都无效
我的答案:B

17、有如下程序: #include <stdio.h> fun(int a) { auto int b=0; static int c=3; b=b+1;c=c+1; return(a+b+c); } int main(void) { int a=2,i; for(i=0;i<3;i++) printf(“%d “,fun(a)); return 0; } 它的输出结果是( )。
A、7 8 9
B、7 7 7
C、9 9 9
D、8 9 10
我的答案:A

18、有如下程序: #include <stdio.h> void fun(int x,int y) { int t; if(x>y) {t=x;x=y;y=t;} } int main(void) { int a=4,b=7,c=5; fun(a,b);fun(a,c);fun(b,c); printf(“%d,%d,%d\n”,a,b,c); return 0; } 它的输出结果是( )。
A、4,5,7
B、4,7,5
C、7,5,4
D、7,4,5
我的答案:B

19、有如下程序: #include <stdio.h> f(int a) { int b=0; static int c=3; a=c++; b++; return(a); } int main(void) { int a=2,i,k; for(i=0;i<2;i++) k=f(a++); printf(“%d\n”,k); return 0; } 该程序的输出结果是( )。
A、6
B、3
C、4
D、5
我的答案:C

20、凡是未指明存储类别的局部变量,其隐含的存储类别是( )。
A、register
B、auto
C、static
D、extern
我的答案:B

第十章测试

1、若有数组名作为函数调用的实参,传递给形参的是( )。
A、数组的首地址
B、数组第一个元素的值
C、数组中全部元素的值
D、数组元素的个数
我的答案:A

2、若使用一维数组名作为函数实参,则以下描述中正确的是 ( )。
A、必须在调用函数中说明此数组的大小
B、实参数组类型与形参数组类型可以不匹配
C、在被调用函数中,不需要考虑形参数组的大小
D、实参数组名与形参数组名必须一致
我的答案:C

3、以下叙述正确的是( )
A、C语言中各函数(除主函数外)之间既允许直接递归调用也允许间接递归调用
B、C语言中各函数(除主函数外)之间既不允许直接递归调用也不允许间接递归调用
C、C语言中各函数(除主函数外)之间允许直接递归调用不允许间接递归调用
D、C语言中各函数(除主函数外)之间不允许直接递归调用允许间接递归调用
我的答案:A

4、下列程序的输出结果是( )。 #include <stdio.h> void sub(int x,int y,int *z) { *z=y-x; } int main() { int a,b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf("%d,%d,%d\n",a,b,c); return 0; }
A、5,2,3
B、-5,-12,-7
C、-5,-12,7
D、5,-2,-7
我的答案:B

5、下列程序的输出结果是( )。 #include <stdio.h> void prtv(int *x) { printf ("%d\n",++*x); } int main() { int a=25; prtv(&a); return 0; }
A、23
B、24
C、25
D、26
我的答案:D

6、下列程序的输出结果是( )。 #include <stdio.h>void fun(int *a,int *b){int w; *a=*a+*a; w=*a; *a=*b; *b=w;}int main(){ int x=2, y=3,*px=&x,*py=&y;;fun(px,py);printf("%d,%d\n",x,y);return 0;}
A、4,3
B、2,3
C、3,4
D、3,2
我的答案:C

7、以下程序运行时,若输入5 10 3,则输出结果是( )。 #include <stdio.h> void swap(int *p1,int *p2) {int t; t=*p1; *p1=*p2; *p2=t; return; } int main() {int a,b,c; scanf("%d%d%d",&a,&b,&c); if(a>b) swap(&a,&b); if(a>c) swap(&a,&c); if(b>c) swap(&b,&c); printf("%d,%d,%d\n",a,b,c); return 0; }
A、5,10,3
B、10,5,3
C、3,5,10
D、3,10,5
我的答案:C

8、以下程序运行时,若输入5,则输出结果是( )。 #include <stdio.h> int fac(int n) {static int k=1; k=k*n; return k; } int main() {int m,i,f; scanf("%d",&m); for(i=1;i<=m;i++) {f=fac(i); printf("%d ",f); } }
A、1 2 3 4 5
B、1 2 6 24 120
C、5
D、120
我的答案:B

9、下列程序的输出结果是( )。 #include <stdio.h> int fun(int a) {int b; if(a==0||a==1) return 3; b=a*a-fun(a-2); return b; } int main() {int x,y; x=fun(3); y=fun(4); printf("%d,%d\n",x,y); return 0; }
A、3,4
B、9,16
C、6,16
D、6,15
我的答案:D

10、下列程序的输出结果是( )。 #include <stdio.h> int fun(int (*p)[3]) {int i,j,n; n=p[0][0]; for(i=0;i<2;i++) for(j=0;j<3;j++) if(p[i][j]>n) n=p[i][j]; return n; } int main() {int a[2][3]={11,32,13,44,5,6},m; m=fun(a); printf("%d\n",m); return 0; }
A、11
B、44
C、6
D、32
我的答案:B

11、下列程序的运行结果是( )。 #include <stdio.h> void fun(int x, int y, int *cp,int *dp) { *cp=x+y; *dp=x-y; } int main() { int a,b,c,d; a=4;b=3; fun(a,b,&c,&d); printf("%d,%d\n",c,d); return 0; }
A、4,3
B、3,4
C、7,1
D、1,7
我的答案:C

12、下列程序的运行结果是( )。 #include <stdio.h> void op(int (*p)[3]) {int i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) if(p[i][j]%3==0) printf("%d ",p[i][j]); } int main() {int s[3][3]={1,2,3,4,5,6,7,8,9}; op(s); return 0; }
A、3 6 9
B、1 2 3
C、1 4 7
D、7 8 9
我的答案:A

13、以下程序运行时,若输入5,则程序的输出结果是( )。 #include <stdio.h> int fun(int n) {if(n==1) return 1; else return n+fun(n-1); } int main() {int m; scanf("%d",&m); m=fun(m); printf("%d\n",m); }
A、6
B、5
C、9
D、15
我的答案:D

14、以下程序运行时,若输入ab012kd99pk8,则程序的输出结果是( )。 #include <stdio.h> void fun(char s[]) {int i,j; for(i=0,j=0;s[i]!='\0';i++) if(s[i]>='0'&&s[i]<='9') s[j++]=s[i]; s[j]='\0'; } int main() {char str[80]; gets(str); fun(str); puts(str); return 0; }
A、012
B、012998
C、99
D、8
我的答案:B

15、若有以下程序: #include <stdio.h> void f(int *q,int n) {int i; for(i=0;i<n;i++) (*q)++; return; } int main(void) {int a[5]={1,2,3,4,5},i; f(a,5); for(i=0;i<5;i++) printf("%d,",a[i]); return 0; } 则程序的输出结果是( )。
A、2,3,4,5,6,
B、2,2,3,4,5,
C、6,2,3,4,5,
D、1,2,3,4,5,
我的答案:C

16、形参数组与实参数组,在内存空间中是( )的。
A、相互独立
B、完全重叠
C、部分重叠
D、随机存储
我的答案:B

17、若有以下程序: #include <stdio.h> int *fun(int *s,int *t) {if(*s<*t) s=t; return s; } int main(void) {int a=3,b=6,*p=&a,*q=&b,*r; r=fun(p,q); printf("%d,%d,%d\n",*p,*q,*r); return 0; } 则程序的输出结果是( )。
A、3,3,6
B、3,6,6
C、6,3,3
D、6,6,3
我的答案:B

18、若有以下程序: #include <stdio.h> int fun(int x) { if(x>10) {printf("%d-",x%10); fun(x/10); } else printf("%d",x); return; } int main(void) { int z=123456; fun(z); return 0; } 则程序的输出结果是( )。
A、1-2-3-4-5-6-
B、1-2-3-4-5-6
C、6-5-4-3-2-1-
D、6-5-4-3-2-1
我的答案:D

第十一章测试

1、以下叙述不正确的是( )。
A、预处理命令行必须以#号开始
B、C程序在执行过程中对预处理命令行进行处理
C、在程序中凡是以#号开始的语句都是预处理命令行
D、以下宏定义是正确的:#define IBM_PC
我的答案:B

2、在宏定义#define PI 3.1415926 中,用宏名PI代替一个( )。
A、常量
B、单精度数
C、双精度数
D、字符串
我的答案:D

3、以下叙述正确的是( )。
A、在程序的一行上可以出现多个有效的预处理命令行
B、使用带参数的宏时,参数的类型应与宏定义时一致
C、宏替换不占用运行时间,只占编译时间
D、宏名必须用大写字母表示
我的答案:C

4、以下在任何情况下计算平方数时,都不会引起二义性的宏定义是( )。
A、#define POWER(x) x*x
B、#define POWER(x) (x)*(x)
C、#define POWER(x) (x*x)
D、#define POWER(x) ((x)*(x))
我的答案:D

5、在“文件包含”预处理语句的使用形式中,当#include后面的文件名用” ”(双引号)括起时,寻找被包含文件的方式是( )。
A、直接按系统设定的标准方式搜索目录
B、现在源程序所在目录搜索,再按系统设定的标准方式搜索
C、仅仅搜索源程序所在目录
D、仅仅搜索当前目录
我的答案:B

6、有以下程序: #define ADD(x) x+x #include "stdio.h" int main(void) { int m=1,n=2,k=3; int sum=ADD(m+n)*k; printf("sum=%d",sum); return 0; } 该程序的运行结果是( )。
A、sum=9
B、sum=10
C、sum=12
D、sum=18
我的答案:B

7、若有如下宏定义: #define X 5 #define Y X+1 #define Z Y*X/2 则执行以下printf语句后,输出结果是( )。 int a; a=Y; printf("%d ",Z); printf("%d ",- -a);
A、7 6
B、12 6
C、12 5
D、7 5
我的答案:D

8、以下程序的运行结果是( )。 #define MAX(A,B) (A)>(B)?(A): (B) #define PRINT(Y) printf(“Y=%d ”,Y) #include “stdio.h” int main(void) { int a=1,b=2,c=3,d=4,t; t=MAX(a+b,c+d) PRINT(t); return 0; }
A、Y=3
B、Y=7
C、Y=0
D、存在语法错误
我的答案:B

9、以下程序的输出结果是( )。 #include <stdio.h> #define MUL(x,y) (x)*y #include “stdio.h” int main(void) { int a=3,b=4,c; c=MUL(a++,b++); printf("%d",c); return 0; }
A、12
B、15
C、20
D、16
我的答案:A

10、用宏替代计算多项式4*x*x+3*x+2之值的函数f,正确的宏定义是( )。
A、#define f(x) 4*x*x+3*x+2
B、#define f 4*x*x+3*x+2
C、#define f(a) (4*(a)*(a)+3*(a)+2)
D、#define (4*a*a+3*a+2) f(a)
我的答案:C

第十二章测试

1、C语言规定结构体变量系统分配给它的存储空间是( )。
A、该结构体中最后一个成员所需的存储空间
B、该结构体中所有成员所需存储空间的总和
C、该结构体中第一个成员所需的存储空间
D、该结构体中占用最大存储空间的成员所需的存储空间
我的答案:B

2、以下对结构体变量s 中成员age的合法法引用是( )。 #include<string.h> struct student {int age; int num; } s,*p; p=&s;
A、student.s.age
B、student.age
C、p->age
D、s->age
我的答案:C

3、有如下定义: struct date {int y ; int m ; int d ;}; struct person { char name[20]; char sex; struct date birthday; }a; 对结构体变量a的出生年份进行赋值时,下面正确的赋值语句是( )。
A、y =1958
B、birthday.y=1958
C、a.birthday.y =1958
D、a.y =1958
我的答案:C

4、设有以下说明语句 struct stu { int a; float b; }stutype; 则以下叙述不正确的是( )。
A、struct 是结构体类型的关键字
B、struct stu 是用户定义的结构体类型名
C、stutype 是用户定义的结构体类型名
D、a 和 b 都是结构体成员名
我的答案:B

5、以下结构体类型说明和变量定义中正确的是( )。
A、typedef struct {int n; char c;} REC; REC x,y;
B、struct REC; {int n; char c;}; REC x,y;
C、typedef struct REC ; {int n=0; char c=’A’; } x,y;
D、struct {int n; char c; } REC x,y;
我的答案:A

6、下面程序的运行结果是( )。 struct st { int n; int a[20]; }; void f(int *a, int n) { int i; for(i=0;i<n;i++) a[i]+=I; } int main() { int i; struct st x={10,{2,3,1,6,8,7,5,4,10,9}}; f(x.a, x.n); for(i=0;i<s.n;i++) printf(”%d,”,x.a[i]); }
A、2,4,3,9,12,12,11,11,18,18,
B、3,4,2,7,9,8,6,5,11,10,
C、2,3,1,6,8,7,5,4,10,9,
D、1,2,3,6,8,7,5,4,10,9,
我的答案:A

7、以下关于typedef 的叙述错误的是( )。
A、typedef只是将已存在的类型用一个新的名字来代表
B、用typedef可以增加新类型
C、用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名
D、用typedef为类型说明一个新名,通常可以增加程序的可读性
我的答案:B

8、下面程序的运行结果是( )。 #include <stdio.h> #include <string.h> typedef struct{ char name[9];char sex; float score[2]; } stu; stu f(stu a) {stu b={“zhao”,’m’,85.0,90.0}; int i; strcpy(a.name,b.name); a.sex=b.sex; for(i=0;i<2;i++) a.score[i]=b.score[i]; return a; } int main() {stu c={"qian",'f',95.0,92.0},d; d=f(c); printf(“%s,%c,%2.0f,%2.0f\n”,d.name,d.sex,d.score[0],d.score[1]); }
A、qian,f,95,92
B、qian,m,85,90
C、zhao,m,85,90
D、zhao,f,95,92
我的答案:C

9、以下程序运行后的输出结果是( )。 #include <stdio.h> struct S {int n; int a[20];}; void f(struct S *p) { int i,j,t; for(i=0;i<p->n-1;i++) for(j=i+1;j<p->n;j++) if(p->a[i]>p->a[j]) { t=p->a[i]; p->a[i]=p->a[j]; p->a[j]=t; } } int main() { int i; struct S s={10,{2,3,1,6,8,7,5,4,10,9}}; f(&s); for(i=0;i<s.n;i++) printf(”%d,”,s.a[i]); }
A、10,9,8,7,6,5,4,3,2,1,
B、1,2,3,4,5,6,7,8,9,10,
C、2,3,1,6,8,7,5,4,10,9,
D、10,9,8,7,6,1,2,3,4,5,
我的答案:B

10、有以下程序段 typedef struct node { int data; struct node *next; }NODE; NODE *p; 以下叙述正确的是( )。
A、NODE *p;语句出错
B、p 是指向struct node 结构体变量的指针的指针
C、p 是struct node 结构体变量
D、p 是指向struct node 结构体变量的指针
我的答案:D

11、若定义如下结构,则能打印出字母M的语句是( )。 struct person{ char name[9]; int age;}; struct person class[10]={"Wujun",20, "Liudan",23, "Maling",21, "zhangming",22};
A、printf("%c\n",class[3].name);
B、printf("%c\n",class[2].name[0]);
C、printf("%c\n",class[2].name[1]);
D、printf("%c\n",class[3].name[1]);
我的答案:B

12、以下程序段的运行结果是( )。 union { int n; char str[2]; }t; t.n=80; t.str[0]='a'; t.str[1]=0; printf("%d\n", t.n);
A、80
B、a
C、0
D、97
我的答案:D

13、以下对C语言中共用体类型数据的叙述正确的是( )。
A、可以对共用体变量名直接赋值
B、一个共用体变量中可以同时存放其所有的成员
C、一个共用体变量中不能同时存放其所有成员
D、共用体类型定义中不能出现结构体类型的成员
我的答案:C

14、若有以下说明和定义语句,则下面引用形式中不正确的是 ( )。 struct student { int age; int num; }; struct student stu[3]={{1001,20},{1002,19},{1003,21}}; struct student *p; p=stu;
A、(p++)->num
B、p++
C、(*p).num
D、p=&stu.age
我的答案:D

15、以下scanf函数调用语句中,对结构体变量成员的不正确引用是( )。 struct pupil {char name[20 ]; int age ; int sex; }pup[5],*p; p=pup;
A、scanf(“%s“,pup[0].name);
B、scanf(“%d“,&pup[0].age);
C、scanf(“%d“,&sex);
D、scanf(“%d“,P->age);
我的答案:C

16、当说明一个共用体变量时系统分配给它的内存是( )。
A、各成员所需内存量的总和
B、结构中第一个成员所需内存量
C、成员中占内存量最大者所需的容量
D、结构中最后一个成员所需内存量
我的答案:C

17、设有以下说明,则下面不正确的叙述是( )。 union data { int i; char c; float f; }un;
A、un所占的内存长度等于成员f的长度
B、un的地址和它的各成员地址都是同一地址
C、un可以作为函数参数
D、不能对un赋值,但可以在定义un时对它初始化
我的答案:C

18、定义结构体类型变量teach1,不正确的是( )。
A、struct teacher {int num; int age; }; struct teacher teach1;
B、struct teacher {int num; int age; }teach1;
C、struct {int num; int age; }teach1;
D、struct {int num; int age; }teacher; struct teacher teach1;
我的答案:D

19、下面程序的运行结果是( )。 #include <stdio.h> union data { int i; char c; double d; }a[2]; void main() {printf("%d\n",sizeof(a)); }
A、16
B、8
C、4
D、2
我的答案:A

20、以下对结构体变量stul中成员age的非法引用是( )。 struct student {int age; int num; }stul,*p; p=&stul;
A、stul.age
B、student.age
C、p->age
D、(*p).age
我的答案:B

第十三章测试

1、运行下列程序,输出结果为( )。 #include <stdio.h> int main() { int x=040; printf("%d\n",x=x<<1); return 0;}
A、100
B、160
C、120
D、64
我的答案:D

2、如有short int a,b,若要通过a=a&b使a的低8位置0,高8位不变,则b应该是( )。
A、0xff00
B、0x0000
C、0x00ff
D、0xffff
我的答案:A

3、下列描述正确的是( )。
A、用C语言可直接进行位运算,因此C语言是一种低级语言。
B、参加位运算的数据可以是任何类型的数据。
C、在一个数左移时被溢出的高位中不包含1的情况下,左移1位相当于该数乘以2。
D、有表达式y=~5,则y的值等于-5.
我的答案:C

4、若有short int a=0x5566; 则执行a= a|0xff00 后,a的值是( )。
A、0x5500
B、0x0066
C、0x5566
D、0xff66
我的答案:D

5、a为任意整数,能将变量a清零的表达式为( )。
A、a=~a
B、a=a^a
C、a=a&a
D、a=a|a
我的答案:B

6、如有short int a,b; ,若要通过a=a|b使a的低8位置1,高8位不变,则b应该是 ( )。
A、0xff00
B、0x0000
C、0x00ff
D、0xffff
我的答案:C

7、运行下列程序,输出结果为( )。 #include <stdio.h> int main() { printf("%d\n",12>>2); return 0; }
A、0
B、1
C、3
D、4
我的答案:C

8、若有short int a=0x5566; 则执行a= a&0x00ff 后,a的值是( )
A、0x0066
B、0x5500
C、0x00ff
D、0x5566
我的答案:A

9、表达式5+3<<2的值为( )。
A、32
B、17
C、16
D、11
我的答案:A

10、若有short int a=0x7700; ,则执行a=a^0x00ff后,a的值是( )。
A、0x0000
B、0x7700
C、0x77ff
D、0xffff
我的答案:C

第十四章测试

1、关于文件,下列理解不正确的是( )。
A、C语言把文件看作是字节的序列,即由一个个字节数据顺序组成
B、所谓文件一般指存储在外部介质上数据的集合
C、系统自动在内存区为每一个正在使用的文件开辟一个缓冲区
D、每个打开的文件都和一个文件结构体变量相关联,程序通过该变量访问这个文件
我的答案:D

2、关于二进制文件和文本文件描述错误的是( )。
A、文本文件存放时每一个字符对应一个字节的ASCII码
B、二进制文件将数据按其在内存中的存储形式原样存放到文件中
C、二进制文件比文本文件读写速度慢
D、C语言处理文件时,并不区分类型,都看成是字符流,按字节处理
我的答案:C

3、利用fopen(fname,mode)函数实现的操作不正确的是( )。
A、文件顺利打开,则返回被打开文件的文件指针
B、若找不到fname指定的相应文件,则按指定的名字建立一个
C、若找不到fname指定的相应文件,且mode规定按读方式打开文件,则产生错误
D、若文件打开失败,则返回NULL
我的答案:B

4、若要用fopen函数打开一个新的二进制文件,该文件既能读也能写,则文件方式字符串应该是( )。
A、”ab+”
B、“wb+”
C、“rb+”
D、“ab”
我的答案:B

5、关于fwrite(buffer,sizeof(Student),3,fp)函数,描述不正确的是( )。
A、将3个学生的数据块按二进制形式写入文件
B、将由buffer指定的数据缓冲区内的3*sizeof(Student)个字节的数据写入指定的文件中
C、返回实际输出数据块的个数,若返回0,表示输出结束或发生错误
D、若由fp指定的文件不存在,则返回0
我的答案:D

6、关于fread(buffer,size,count,fp)函数,下列说法正确的是( )。
A、从fp指向的文件中将count个字节的数据读到由buffer指出的数据区中
B、从fp指向的文件中将size*count个字节的数据读到由buffer指出的数据区中
C、以二进制形式读取文件中的数据,返回值一定是count
D、返回值小于count,则说明发生了错误
我的答案:B

7、如果需要打开一个已经存在的非空文件“memo.txt”并向其中添加内容,则下面正确的选项是( )。
A、fp=fopen(“memo.txt”,r)
B、fp=fopen(“memo.txt”,w)
C、fp=fopen(“memo.txt”,w+)
D、fp=fopen(“memo.txt”,a)
我的答案:D

8、若fp是指向某文件的指针,且没有读到文件末尾,则函数feof(fp)的返回值是( )。
A、EOF
B、-1
C、0
D、NULL
我的答案:C

9、若顺利执行了文件关闭操作,fclose函数的返回值是( )。
A、-1
B、NULL
C、0
D、1
我的答案:C

10、以下可以作为fopen函数的第一个参数的正确格式是( )。
A、”file1.txt”
B、file1.txt
C、file1.txt,w
D、”file1.txt,w”
我的答案:A

11、若fp是指向某文件的指针,文件操作结束后,关闭文件指针应使用下列( )语句。
A、fp=fclose();
B、fp=fclose;
C、fclose;
D、fclose(fp);
我的答案:D

12、已有一个abc.txt文件,执行函数fopen(“abc.txt”,”w+”)的功能是( )。
A、新建一个文本文件abc.txt,原文件将被删除,允许读写
B、新建一个文本文件abc.txt,原文件将被删除,只允许读
C、新建一个文本文件abc.txt,原文件将被删除,只允许写
D、新建一个文本文件abc.txt,原文件不被删除,允许读写
我的答案:A

13、fread(buf,64,2,fp)函数的功能是( )。
A、从fp文件流中读出整数64,并存放在buf中
B、从fp文件流中读出整数64和2,并存放在buf中
C、从fp文件流中读出64个字节的数据,并存在在buf中
D、从fp文件流中读出2个64字节的数据,并存放在buf中
我的答案:D

14、以下程序的功能是( )。 #include <stdio.h> int main(void) { FILE *fp; char str[]=”hello”; fp=fopen(“prn.txt”,”w”); fprintf(fp,”%s”,str); fclose(fp); return 0; }
A、将字符串hello输出到显示器上
B、将字符串hello打印出来
C、将字符串hello写入文件prn.txt中
D、其余选项都不对
我的答案:C

15、下面的程序用变量count统计文件中小写字母的个数。 #include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp; char a; int count=0; if((fp=fopen("d:\\letter.txt",【 】))==NULL) { printf("can not open file\n"); exit(0);} while(!feof(fp)) { 【 】 if(【 】) count++; } fclose(fp); printf("字符个数是:%d\n",count); return 0; } 【】中应依次填入( )。
A、”r” fscanf(fp,"%c",&a); a>='a' and a<='z'
B、”w” fscanf(fp,"%c",&a); a>='a' and a<='z'
C、”r” fscanf(fp,"%c",&a); a>='z' and a<='a'
D、”r” fscanf(fp,"%c",a); a>='a' and a<='z'
我的答案:A