华佗小知识
您的当前位置:首页C语言期末复习资料

C语言期末复习资料

来源:华佗小知识


所有单选题

1、C语言中下列叙述正确的是______。 A:不能使用do-while语句构成的循环

B:do-while语句构成的循环,必须用break语句才能退出

C:do-while语句构成的循环,当while语句中的表达式值为非零时结束循环 D:do-while语句构成的循环,当while语句中的表达式值为零时结束循环 答案:D 评析:

本题的考查点是do-while语句。

选项A是错误的,C语言支持do-while语句;选项B是错误的,do-while构成的循环, 当while语句中的表达式值为零时结束循环,而不是非零;选项C也是错误的。 故本题答案为D。

知识点:知识点/循环结构程序设计/WHILE和DO WHILE循环结构 2、以下选项中属于C语言的数据类型是______。 A:复数型 B:逻辑型 C:双精度型 D:集合型 答案:C 评析:

本题的考查点是C语言的数据类型。

C语言的数据类型分为基本类型,构造类型,指针类型,空类型四大类。其中,基本类型分为整型,字符型,实型三类。实型又称浮点型,包括单精度型和双精度型两种类型。 故本题答案为C。

知识点:知识点/数据类型及其运算/C的数据类型及其定义方法 3、下列描述中不正确的是______。 A:字符型数组中可以存放字符串 B:可以对字符型数组进行整体输入、输出 C:可以对整型数组进行整体输入、输出

D:不能在赋值语句中通过赋值运算符\"=\"对字符型数组进行整体赋值 答案:C 评析:

本题的考查点是对数组的理解。

C语言规定只能逐个引用数组元素而不能一次引用整个数组。字符数组的输入、输出可以将整个字符串一次输入或输出。所以,选项C的说法是不正确的。 故本题答案为C。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 4、以下程序的输出结果是______。 main()

{ int x=10,y=10,i; for(i=0;x>8 ;y=++i) printf(\"%d %d \}

1

A:10 1 9 2 B:9 8 7 6 C:10 9 9 0 D:10 10 9 1 答案:D 评析:

本题的考查点是for循环语句。

for语句的一般格式为:for(表达式1;表达式2;表达式3)语句执行中只要表达式2为真,则执行for语句中指定的内嵌语句。所以,本题在条件为真的情况下,先执行printf函数。x--是先使用后运算。 故本题答案为D。

知识点:知识点/循环结构程序设计/FOR循环结构 5、以下程序的输出结果是______。 main()

{ char a[10]={'1','2','3','4','5','6','7','8','9',0},*p; int i ; i=8; p=a+i;

printf(\"%s\\n\} A:6 B:67 C:'6' D:7 答案:B 评析:

本题的考查点是通过指针引用数组元素。

指针p指向数组中第8个元素,即a[8]='9'。输出时,输出字符串,且指针把a[8]作为初始位置往前指3个元素,也就是共有4个字符输出。最后指向a[5]为'6',所以输出为67。 故本题答案为B。

知识点:知识点/指针/指针数组,指向指针的指针,MAIN函数的命令行参数 6、能正确表示a和b同时为正或同时为负的逻辑表达式是______。 A:(a>=0||b>=0)&&(a<0|| b<0) B:(a>=0&&b>=0)&&(a<0&&b<0) C:(a+b>0)&&(a+b<=0) D:a*b>0 答案:D 评析:

本题的考查点是对逻辑表达式的判断。

逻辑表达式是指用逻辑运算符将关系表达式或逻辑量连接起来。 选项A中,表达式表示的是a,b为异号;

选项B中,表达式表示的是0,因为没有满足条件的值; 选项C中,表达式表示的是0,因为没有满足条件的值; 选项D表示的是a和b为同号。 故本题答案为D。

2

知识点:知识点/基本语句/表达式语句,空语句,复合语句 7、以下程序的输出结果是______。 main() { int n=4;

while(n--)printf(\"%d \}

A:2 0 B:3 1 C:3 2 1 D:2 1 0 答案:A 评析:

本题的考查点是while语句的判断。

n--是先使用后运算,--n是先运算后使用。n=4时,执行n--后,n变为3,执行--n后,n变为2,所以,第一次输出时,n为2;同上过程,第二次输出时,n为0。 故本题答案为A。

知识点:知识点/循环结构程序设计/WHILE和DO WHILE循环结构 8、以下程序的输出结果是______。 main() { int k=17;

printf(\"%d,%o,%x\\n\}

A:17,021,0x11 B:17,17,17 C:17,0x11,021 D:17,21,11 答案:D 评析:

本题的考查点是不同格式的数据输出。

printf函数对不同类型的数据用不同的格式字符,\"%d\"是以带符号的十进制形式输出整数(正数不输出符号);\"%o\"以8进制无符号形式输出整数(不包括前导符0);\"%x\"以16进制无符号形式输出整数(不包括前导符0x)。 本题答案为D。

知识点:知识点/数据类型及其运算/C的数据类型及其定义方法

9、若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是______。 A:*p=&a;scanf(\"%ld\

B:p=(long *)malloc(8);scanf(\"%ld,p); C:scanf(\"%ld\ D:scanf(\"%ld\答案:A 评析:

本题的考查点是格式输入函数Scanf()的使用。 scanf函数输入形式为:scanf(格式控制,地址表列);

选项B中,p=(long*)malloc(8)是分配8个字节的long型存储单元,所以能通过scanf语句正确给输入项

3

读入数据;

选项C中,p=&a,求出变量a的内存地址并赋给p; 选项D中,能正确给输入项读入数据; 故本题答案为A。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 10、以下选项中,能定义s为合法的结构体变量的是______。 A:typedef struct abc { double a; char b[10]; } s;

B:struct { double a; char b[10]; }s;

C:struct ABC { double a; char b[10]; } ABC s;

D:typedef ABC { double a; char b[10]; } ABC s; 答案:B 评析:

本题的考查点是结构体变量的定义。

定义一个结构体类型的变量,可采用三种方法: (1)先定义结构体类型再定义变量名; (2)在定义类型的同时定义变量;

(3)直接定义结构类型变量,即不出现结构体名; 选项B符合第三种定义方法。 故本题答案为B。

知识点:知识点/结构体(即\"结构\")与共用体(即\"联合\")/结构体和共用体类型数据的定义方法和引用方法

11、请读程序: #include 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 ;

4

}

printf(\"%d\\n\ }

上面程序的输出结果是______。 A:7 B:8 C:9 D:10 答案:B 评析:

本题的考查点是break语句和continue语句。

\"%\"是求余运算符,执行第一次循环时,条件(b%3 == 1)为真,b=4,继续下一次循环,如此反复,当b=22时,条件(b >= 20)为假,跳出循环,此时共循环8次,即a=8。 故本题答案为B。

知识点:知识点/选择结构程序设计/用SWITCH语句实现多分支选择结构 12、请选出合法的C语言赋值语句______。 A:a=b=58 B:i++; C:a=58,b=58 D:k=int(a+b); 答案:B 评析:

本题的考查点是赋值语句。

选项A和C没有用分号表示语句结束,不合法; 选项D,函数名和C语言的关键字重名,不合法。 故本题答案为B。

知识点:知识点/基本语句/表达式语句,空语句,复合语句 13、请选出可用作C语言用户标识符的一组标识符______。 ① void ② a3_b3 ③ For ④ 2a define _123 _abc DO WORD IF case sizeof A:① B:② C:③ D:④ 答案:B 评析:

本题的考查点是C语言的标识符。

C语言规定标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。 ①中的void和define都和C语言的关键字重名,不合法; ③中的case和C语言的关键字重名,不合法;

④中的2a是数字打头而且sizeof和C语言的关键字重名,不合法。 故本题答案为B。

知识点:知识点/数据类型及其运算/C的数据类型及其定义方法

5

14、若x和y都是int型变量,x=100、y=200,且有下面的程序片段 printf(\"%d\

上面程序片段的输出结果是______。 A:200 B:100 C:100 200

D:输入格式符不够,输出不确定的值 答案:A 评析:

本题的考查点是逗号表达式。

在(x,y)中的\是一个特殊的运算符,叫做逗号运算符,它的一般形式为:表达式1,表达式2,求解过程为:先求解表达式1,再求解表达式2,整个表达式的值是表达式2的值,(x,y)的值为200,所以输出结果为200。

故本题答案为A。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 15、若x是int型变量,且有下面的程序片段

for(x=3;x<6;x++) printf((x%2)?(\"**%d\"):(\"##%d\\n\"),x); 上面程序片段的输出结果是______。

① **3 ② ##3 ③ ##3 ④ **3##4 ##4 **4 **4##5 **5 **5 ##5 A:① B:② C:③ D:④ 答案:D 评析:

本题的考查点是条件运算符。

这种条件表达式的一般形式为:表达式1?表达式2:表达式3,条件运算符的执行顺序为:先求解表达式1,若非0则求解表达式2,此时表达式2的值就是整个条件表达式的值,若表达式1的值为0,则求解表达式3,此时表达式3的值就是整个条件表达式的值。 故本题答案为D。

知识点:知识点/数据类型及其运算/C运算符的种类、运算优先级和结合性

16、若x是整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是______。 A:pb=&x; B:pb=x; C:*pb=&x; D:*pb=*x 答案:A 评析:

本题的考查点是赋值表达式。

选项A是将变量x的地址赋给指针变量pb,使pb指向x,故为正确的赋值表达式。 选项B是将x的值当作地址赋给指针pb,pb指向一个地址等于x值的内存单元; 选项C是将x的地址赋给指针pb指向的那个地址等于x值的内存单元;

6

选项D是不正确的语句; 本题答案为A。

知识点:知识点/基本语句/表达式语句,空语句,复合语句

17、若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元 int *p;

p= ______ malloc(sizeof(int) ); 则应填入______。

A:int C:(*int) D:(int*) 答案:D 评析:

本题的考查点是强制类型转换。

不论p是指向什么类型的指针变量,都可以通过强制类型转换的方法使之类型一致,强制类型转换的格式为(数据类型 *)。 故本题答案为D。

知识点:知识点/数据类型及其运算/不同类型数据间的转换与运算

18、若有以下说明和语句,请选出哪个是对c数组元素的正确引用______。 int c[4][5],(*cp)[5];

cp=c; A:cp+1 B:*(cp+3) D:*(*cp+2) 答案:D 评析:

本题的考查点是数组元素的引用。

cp=c这个语句是将数组c的首地址赋给了指针数组cp的第一个数组元素。 选项A,cp+1是指将数组c的首地址加1,不是对数组元素的引用;

选项B,*(cp+3)是地址等于数组c的首地址加3的那个内存单元的内容,不是对数组元素的引用; 选项C,*(cp+1)+3是地址等于数组c的首地址加1的那个内存单元中存放的值加3,不是对数组元素的引用。

故本题答案为D。

知识点:知识点/指针/指针数组,指向指针的指针,MAIN函数的命令行参数 19、若执行下面的程序时从键盘上输入3和4, main() { int a,b,s;

scanf(\"%d %d\ s=a; if(aprintf(\"%d\\n\ }

B:int *

C:*(cp+1)+3

7

则输出是______。

A:14 B:16 C:18 D:20 答案:B 评析:

本题的考查点是给变量赋值。

用户输入的3和4分别赋给了a和b,在if语句进行判断时,因为表达式的值为真,所以b的值将赋给s,s*s=16,最后的打印结果为16。 故本题答案为B。

知识点:知识点/基本语句/表达式语句,空语句,复合语句

20、设a、b和c都是int型变量,且a=3、b=4、c=5,则下面的表达式中,值为0的表达式是______。

A:'a'&&'b'

B:a<=b

C:a||+c&&b-c 答案:D 评析:

本题的考查点是几种运算符的使用。 该题需要弄清楚以下几点: 1、几种运算符的使用方法;

2、C语言中运算符的结合方向(结合性); 3、C语言中运算符的优先级。

根据以上规则进行表达式拆分,运算后即可得出正确答案。 本题答案为D。

知识点:知识点/数据类型及其运算/C运算符的种类、运算优先级和结合性 21、设a=5、b=6、c=7、d=8、m=2、n=2,执行 (m=a>b)&&(n=c>d) 后n的值为______。

A:1 B:2 C:3 D:4 答案:B 评析:

本题的考查点是逻辑与运算。

在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。本题中,(m=a>b)的值为0,求出整个表达式的值为0,不需执行(n=c>d),所以n仍为2。 故本题答案为B。

知识点:知识点/数据类型及其运算/C运算符的种类、运算优先级和结合性 22、设ch是char型变量,其值为A,且有下面的表达式 ch=(ch>='A'&&ch<='Z')?(ch+32):ch

D:!((a8

上面表达式的值是______。

A:A B:a C:Z D:z 答案:B 评析:

本题的考查点是条件运算符。

条件表达式的一般形式为:表达式1?表达式2:表达式3,条件运算符的执行顺序:先求解表达式1,若非0则求解表达式2,此时表达式2的值就作为整个表达式的值,若表达式1的值为0,则求解表达式3,此时表达式3的值就作为整个表达式的值。本题中,表达式1的值为1,所以整个表达式的值为表达式(ch+32)的值,即为a。

故本题答案为B。

知识点:知识点/数据类型及其运算/C运算符的种类、运算优先级和结合性 23、设int a=12,则执行完语句a+=a-=a*a后,a的值是______。

A:552 B:2 D:-2 答案:D 评析:

本题的考查点是赋值表达式的求解。 第一步:a*a=144 ;(此时a=12)

第二步:a-=144相当于a=a-144,a=a-144=-132; (此时a=-132) 第三步:a+=a相当于a=a+a,a=a+a=-2; 所以该表达式最后的值应当为-2。 故本题答案为D。

知识点:知识点/数据类型及其运算/C表达式类型和求值规则 24、设有如下枚举类型定义

enum language {Basic=3,Assembly=6,Ada=100,COBOL,Fortran}; 枚举量Fortran的值为______。

A:4 B:7 C:102 D:103 答案:C 评析:

本题考查的是数据类型。

这个枚举有5个元素,前三个已有明确的赋值,而COBOL和Fortran没有明确的赋值,枚举的语法规定当枚举元素没有赋值时,其值为其前一个元素的值加一,所以COBOL的值为101,故Fortran的值应为102。

故答案为C。

知识点:知识点/数据类型及其运算/C的数据类型及其定义方法

25、设有以下语句,其中不是对a数组元素的正确引用的是:______(其中0≤i<10)

C:144

9

int a[10]={0,1,2,3,4,5,6,7,8,9,},*p=a; A:a[p-a] B:*(&a[i])

C:p[i] 答案:D 评析:

本题的考查点是通过指针引用数组元素。

观察程序可知,a实际上就是数组a的首地址,所以\"*(a+i)\"表示的就是数组a中的第i个元素的值,进而,我们可以知道 *(*(a+i) ) 必然不是对a数组元素的正确引用。 故本题答案为D。

知识点:知识点/指针/指针数组,指向指针的指针,MAIN函数的命令行参数 26、设有以下语句 char a=3,b=6,c; c=a^b<<2;

则c的二进制值是______。

D:*(*(a+i) )

A:00011011

B:00010100

C:00011100 答案:A 评析:

本题的考查点是位运算。

\"<<\"是C语言中规定的左移运算符,例如,a=a<<2,这个语句即是将a的二进制数左移两位,左移一位相当于该数乘以2,左移两位相当于该数乘以2的2次方;^是异或运算符,所以,c的二进制值应为00011011。 故本题答案为A。

知识点:知识点/位运算/简单的位运算

A:3 B:0 C:9 答案:D 评析:

本题的考查点是赋值表达式的求解。 第一步:a*a=9 ;(此时a=3)

第二步:a-=9相当于a=a-9,a=a-9=-6; (此时a=-6) 第三步:a+=a相当于a=a+a,a=a+a=-12; 所以该表达式最后的值应当为-12。 故本题答案为D。

知识点:知识点/数据类型及其运算/C表达式类型和求值规则 28、下面程序 main()

{ int x=100, a=10, b=20, ok1=5, ok2=0;

D:00011000

27、设有语句int a=3; 则执行了语句a+=a-=a*a;后,变量a的值是______。

D:-12

10

if(aprintf(\"%d\\n\ }

的输出是______。

B:0 C:1 D:不确定的值 答案:A 评析:

本题的考查点是判断语句的循环嵌套。

第一个判断值为真,过渡到下一个判断,第二个判断为真,过渡到第三个判断......如此循环,在打印输出语句的前一行,程序给变量x赋了值,为-1,所以,无论前期如何变化,最后的x值依然为-1。 故本题答案为A。

知识点:知识点/循环结构程序设计/循环的嵌套 29、下面程序 main() {

int x=32;

printf(\"%d\\n\ }

的输出是______。

A:100 B:160 D: 答案:D 评析:

本题的考查点是位运算。

<<是C语言中规定的左移运算符,例如,a=a<<2,这个语句即是将a的二进制数左移两位,左移一位相当于该数乘于2,左移两位相当于该数乘以2的2次方。所以,x<<1=32*2=。 故本题答案为D。

知识点:知识点/位运算/简单的位运算 30、下面程序 main() {

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; printf(\"%d\\n\ }

A:-1

C:120

的输出是______。

11

A:3 B:4 C:1 D:2 答案:A 评析:

本题的考查点是通过指针引用数组元素。

*p=a语句是使指针p指向数组a的第一个数组元素,因此*(p+2)即是数组a的第3个元素的值,即a[2]。 故本题答案为A。

知识点:知识点/指针/指针数组,指向指针的指针,MAIN函数的命令行参数 31、下面程序 main() {

int x=10,y=3; printf(\"%d\\n\ }

的输出是______。

A:0 B:1 C:3 D:不确定的值 答案:C 评析:

本题的考查点是除法运算。

x/y的结果约为3.33333,但是由于打印要求为整型,所以自动转换为整型(相当于截取整数位),打印结果为3。

故本题答案为C。

知识点:知识点/数据类型及其运算/C的数据类型及其定义方法 32、下面程序 void prtv(int *x) { printf(\"%d\\n\ } main() { int a=25; prtv(&a); }

的输出是______。

A:23 B:24 C:25 D:26 答案:D 评析:

本题的考查点是指针变量作为函数参数。

12

观察程序,可以发现,函数prtv()的作用是将地址等于x的内存单元中值加1,因为我们在主函数中是将变量a的地址作为实参传递给了prtv()函数,所以,函数prtv()将地址等于变量a的地址的那个内存单元中值加一,打印结果自然就是25+1=26了。 故本题答案为D。

知识点:知识点/指针/指针数组,指向指针的指针,MAIN函数的命令行参数 33、下面的程序 main() { int x=3; do{

printf(\"%d\\n\ }while(!(--x) );

} ______。

A:输出的是1 C:输出的是3和0 D:是死循环 答案:B 评析:

本题的考查点是do-while 语句。

在第一次循环时,先计算表达式x-=2,所以输出1,--x为0,判断表达式的值为非零,返回重新执行该语句;

在第二次循环时,表达式x-=2,即-2,所以输出-2,--x为-3,判断表达式的值为零,循环结束。 故本题答案为B。

知识点:知识点/循环结构程序设计/WHILE和DO WHILE循环结构 34、下面的程序中______错误(每行程序前面的数字是行号)。 1 #include 2 main() 3 {

4 float a[3]={0.0}; 5 int i;

6 for(i=0;i<3;i++) scanf(\"%d\7 for(i=1;i<3;i++)a[0]=a[0]+a[i]; 8 printf(\"%f\\n\9 }

B:第4行 C:第6行 D:第8行 答案:C 评析:

本题的考查点是函数scanf()的格式输入。

根据函数scanf()的语法可知,在函数中的参数表列部分,应当是欲赋值变量的内存地址,象第六行这样,将数组元素直接放在参数表列中是无法达到给数组元素赋值的目的。

B:输出的是1和-2

A:没

13

故本题答案为C。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 35、下面函数 int fun1(char*x) { char *y=x; while(*y++); return(y-x-1); }

的功能是______。

A:求字符串的长度 C:将字符串x复制到字符串y D:将字符串x连接到字符串y后面 答案:A 评析:

本题的考查点是while()循环语句。

这个函数的功能是求字符串的长度,需要注意的是,在返回长度时一定记住要减一,否则计算出的串长度将会多一。 故本题答案是A。

知识点:知识点/循环结构程序设计/WHILE和DO WHILE循环结构 36、以下程序的输出结果是______。 #include main() {

int i=10,j=10;

printf(\"%d,%d\\n\

}

B:比较两个字符串的大小

A:11,10 C:010,9 答案:A 评析:

本题的考查点是变量的自增、自减运算。

++i是先对i进行加1运算,再使用i的值;j--是先使用j值,再对j进行减1运算。所以,程序的打印结果应当为\"11,10\"。 故本题答案为A。

知识点:知识点/数据类型及其运算/C运算符的种类、运算优先级和结合性 37、以下的for循环:

for(x=0,y=0;(y!=123)&&(x<4);x++);

B:9,10

D:10,9

A:是无限循环 C:执行4次 D:执行3次

B:循环次数不定

14

答案:C 评析:

本题的考查点是for语句循环条件的判断。

循环条件是表达式(y!=123)&&(x<4),因为y值始终为0,所以表达式左边一定恒为1,当x<4时,循环可以运行,当x=4时,循环终止,所以这个循环一共可以执行4次。 故本题答案为C。

知识点:知识点/循环结构程序设计/FOR循环结构 38、有以下程序: #include union pw

{ int i; char ch[2]; }a; main() { a.ch[0]=13; a.ch[1]=0; printf(\"%d\\n\ }

程序的输出结果是(注意:ch[0]在低字节,ch[1]在高字节)______。 A:13 B:14 C:208 D:209 答案:A 评析:

本题的考查点是共用体类型数据的特点。

根据共用体的定义可知:共用体a的成员i和成员ch[2]是共用着同一段内存空间,所以,当程序给a.ch[0]赋值后,实际上,共用体成员i的值也确定了,为13,所以打印输出的结果应当为13。 故本题答案为A。

知识点:知识点/结构体(即\"结构\")与共用体(即\"联合\")/结构体和共用体类型数据的定义方法和引用方法

39、有以下程序 main() { int c;

while((c=getchar() )!='\\n') { switch(c-'2') {

case 0: case 1: putchar(c+4); case 2:putchar(c+4);break; case 3:putchar(c+3); default:putchar(c+2);break; } } }

从第一列开始输入以下数据,↙代表一个回车符。 2473↙

程序的输出结果是______。

15

A:6677

B:6666

C:66778777 答案:A 评析:

本题的考查点是switch()语句。

getchar()函数是从键盘接受一个字符输入;当用户键入的字符不是回车符时,会进入一个多分支选择语句,根据表达式c-'2'的值进行分支选择;putchar()是在屏幕上打印一个字符,最后的结果应当为 6677。 故本题答案为A。

知识点:知识点/选择结构程序设计/用SWITCH语句实现多分支选择结构 40、执行下面程序片段的结果是______。 int x=23; do {

printf(\"%2d\ }

A:打印出321 B:打印出23 C:不打印任何内容 D:陷入死循环 答案:B 评析:

本题的考查点是do-while循环语句的判断。

x--是自减运算,先使用x的值,后进行自减运算,所以打印出来的结果应当为23。 故本题答案为B。

知识点:知识点/循环结构程序设计/WHILE和DO WHILE循环结构 41、执行下面的程序段 int x=35; char z='A'; int B;

B=((x&15)&&(z<'a') ); 后,B的值为______。

A:0 B:1 C:2 D:3 答案:B 评析:

本题的考查点是逻辑与及位与运算。

从整个表达式来看是个逻辑表达式,而与运算符\"&&\"的右边的子表达式中由于z的值为\"A\",而A的ASCII码的值小于a的ASCII码值,所以这个子表达式的值为真,即1;在与运算符\"&&\"的左边的子表达式是个基于位运算的子表达式,将x的值与15做位与运算,表达式值不为零,所以两个子表达式的与值应当为1。

D:6688766

while(!x);

16

故本题答案为B。

知识点:知识点/位运算/位运算符的含义及使用 42、表达式:10!=9的值是______。 A:true B:非零值 C:0 D:1 答案:D 评析:

本题的考查点是关系运算符!=。

在这种运算中,表达式的值只有两种:1或0,表达式10!=9的值应当是1。 故本题答案为D。

知识点:知识点/数据类型及其运算/C表达式类型和求值规则 43、若有说明:int i,j=7,*p=&i;则与i=j;等价的语句是______。 A:i=*p; B:*p=*&j; C:i=&j; D:i=**p; 答案:B 评析:

本题的考查点是指针变量的引用。

p的地址本身和i的地址一样,所以*p代表i中的数值,而&j是j的地址,*&j就是j中的数值,所以,*p=*&j和i=j是等价的。 故本题答案为B。

知识点:知识点/指针/指针与指针变量的概念,指针与地址运算符 44、以下程序的输出结果是______。 main()

{ char *s=\"12134211\"; int v[4]={0,0,0,0},k,i; for (k=0;s[k];k++) { switch(s[k]) { case '1':i=0; case '2':i=1; case '3':i=2; case '4':i=3; } v[i]++; }

for(k=0; k<4;k++) printf(\"%d \}

A:4 2 1 1 B:0 0 0 8 C:4 6 7 8 D:8 8 8 8 答案:B

17

评析:

本题的考查点是switch语句的应用。

在每次执行switch后面括号内的表达式s[k]时,要先取当前s[k]的值与case后的字符常量进行比较,找到与之匹配的分支后,即转去执行该分支中的语句。switch语句中,某分支执行完毕,若未遇到break语句,则接着执行剩余的其它分支,直到遇到break语句。此题中,因为没有break语句,所以总会执行到i=3,即总是v[3]在递加。 故本题答案为B。

知识点:知识点/选择结构程序设计/用SWITCH语句实现多分支选择结构 45、有如下程序 main() {

int n = 9; while(n>6) { n--;

printf(\"%d\ } }

该程序的输出结果是______。 A:987 B:876 C:8765 D:9876 答案:B 评析:

本题考查点是While语句循环次数的问题。

符合n>6的n只有7,8,9;所以循环次数为3。选项C、D可以排除。又因n在输出之前要执行n--,所以输出结果只能是876。 本题答案为B。

知识点:知识点/循环结构程序设计/WHILE和DO WHILE循环结构 46、设有说明语句: char a = '\\72'; 则变量a ______。 A:包含1个字符 B:包含2个字符 C:包含3个字符 D:说明不合法 答案:A 评析:

本题考查点是转义字符的应用。

转义字符常量'\\xx'可以把'\\'后面的数字转换为对应的ASCII字符,'\\72'表示的是ASCII码等于72的那个字符,即为\"H\",所以在字符变量中存储的只是\"H\"这一个字符。 故本题答案为A。

知识点:知识点/数据类型及其运算/不同类型数据间的转换与运算 47、若变量已正确定义并赋值,下面符合C语言的表达式是______。 A:a:=b+1

18

B:a=b=c+2 C:int 18.5%3 D:a=a+7=c+b 答案:B 评析:

选项A和C显然错误;对于表达式a=a+7=c+b(答案D),是先执行赋值表达式a+7=c+b,再把这个表达式的值赋给a,显然,表达式a+7=c+b非法,因为赋值表达式的左值不能为常量或表达式。 本题答案为B。

知识点:知识点/基本语句/表达式语句,空语句,复合语句

48、若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是______。 A:1 B:2 C:2.0 D:2.5 答案:C 评析:

这是一个逗号表达式,它的值应为表达式y=x+3/2的值,而前一个表达式已给x赋值1,在没有进行类型转换的情况下,3/2的值为1,所以x+3/2的值应为2.0。 本题答案为C。

知识点:知识点/基本语句/表达式语句,空语句,复合语句

49、若变量a、i已正确定义,且i已正确赋值,合法的语句是______。 A:a==1 B:++i; C:a=a++=5 D:a=int(i); 答案:B 评析:

选项D显然是错的,而选项A没有分号结束,不是C语句;a++=5违反了赋值表达式左值必须为一个变量(不能是常量或表达式)的规定. 本题答案为B。

知识点:知识点/基本语句/表达式语句,空语句,复合语句 50、有如下程序 main()

{ int y=3,x=3,z=1;

printf(\"%d %d\\n\}

运行该程序的输出结果是______。 A:3 4 B:4 2 C:4 3 D:3 3 答案:D 评析:

逗号表达式(++x,y++)的值应该是y++的值,由于y++是先引用后自增,所以y++的值是3。

19

本题答案为D。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 51、有如下程序 main()

{ int x=1,a=0,b=0; switch(x){

case 0: b++; case 1: a++; case 2: a++;b++; }

printf(\"a=%d,b=%d\\n\}

该程序的输出结果是______。 A:a=2,b=1 B:a=1,b=1 C:a=1,b=0 D:a=2,b=2 答案:A 评析:

在这个switch语句中,因为x的值为1,所以执行case 1:后面的a++,这样a = 1。但又由于其下没有break语句,所以其后面的语句(a++;b++)也将被执行,这样一来,a = 2,b = 1。 本题答案为A。

知识点:知识点/选择结构程序设计/用SWITCH语句实现多分支选择结构 52、有如下程序 main()

{ float x=2.0,y; if(x<0.0) y=0.0; else if(x<10.0)y=1.0/x; else y=1.0; printf(\"%f\\n\}

该程序输出结果是______。 A:0.000000 B:0.250000 C:0.500000 D:1.000000 答案:C 评析:

本题考查的是IF…ELSE语句的使用。x=2.0,符合第二个IF语句的条件x<10.0,所以执行y=1.0/x语句,即y=1.0/2.0=0.500000。 本题答案为C。

知识点:知识点/选择结构程序设计/用IF语句实现选择结构 53、有如下程序 main()

20

{ int a = 2,b =- 1,c = 2; if(aif(b<0) c=0; else c++; printf(\"%d\\n\}

该程序的输出结果是______。 A:0 B:1 C:2 D:3 答案:C 评析:

由于条件(a < b)并不满足,所以if(a < b)后面的语句并没有被执行,c仍然等于2。 本题答案为C。

知识点:知识点/选择结构程序设计/用IF语句实现选择结构 54、有如下程序 main()

{ int i,sum;

for(i=1;i<=3;sum++) sum +=i; printf(\"%d\\n\}

该程序的执行结果是______。 A:6 B:3 C:死循环 D:0 答案:C 评析:

在循环过程中,i的值一直没有被改变,所以这是一个死循环。 本题答案为C。

知识点:知识点/循环结构程序设计/FOR循环结构 55、有如下程序 main()

{ int n=9;

while(n>6) {n--;printf(\"%d\}

该程序段的输出结果是______。 A:987 B:876 C:8765 D:9876 答案:B 评析:

21

符合n>6的n只有7,8,9;所以循环次数为3。C,D可以排除。又:n在输出之前要执行n--,所以输出结果只能是876。 本题答案为B。

知识点:知识点/循环结构程序设计/WHILE和DO WHILE循环结构 56、设有说明语句:char a='\\72';则变量a______。 A:包含1个字符 B:包含2个字符 C:包含3个字符 D:说明不合法 答案:A 评析:

转义字符常量'\\xx'可以把'\\'后面的数字转换为对应的ASCII字符,'\\72'就是'H'。 本题答案为A。

知识点:知识点/基本语句/表达式语句,空语句,复合语句 57、有如下程序段 int *p,a=10,b=1; p=&a; a=*p+b;

执行该程序段后,a的值为______。 A:12 B:11 C:10 D:编译出错 答案:B 评析:

执行p = &a;后,p指向整数a,*p即p的目标变量,也就是a;所以a = *p + b等价于a = a+b,可知a的值最终为11。 本题答案为B。

知识点:知识点/指针/指针与指针变量的概念,指针与地址运算符 58、对于基类型相同的两个指针变量之间,不能进行的运算是______。 A:< B:= C:+ D:- 答案:C 评析:

指针之间不能进行加运算。 本题答案为C。

知识点:知识点/指针/指针与指针变量的概念,指针与地址运算符 59、有如下程序 #define N 2 #define M N+1 #define NUM 2*M+1 main() { int i;

22

for(i=1;i<=NUM;i++)printf(\"%d\\n\}

该程序中的for循环执行的次数是______。 A:5 B:6 C:7 D:8 答案:B 评析:

在C语言中,宏定义在编译时将被直接替换,所以NUM最后会被替换成2*N+1+1,即2*2+1+1,值为6。因此,for循环执行的次数为6。 本题答案为B。

知识点:知识点/循环结构程序设计/FOR循环结构 60、有如下程序段 int a=14,b=15,x; char c='A';

x=(a && b) && (c<'B');

执行该程序段后,x的值为______。 A:true B:false C:0 D:1 答案:D 评析:

a&&b的值为true,c<'B'的值也为true,所以 (a&&b) && (c<'B')的值为true。但x是int型变量,所以 (a&&b) && (c<'B')的值最后要从bool型转换为int型赋给x。这样x的值应为1。 本题答案为D。

知识点:知识点/数据类型及其运算/不同类型数据间的转换与运算 61、有如下说明

int a[10] = {1,2,3,4,5,6,7,8,9,10},*p = a; 则数值为9的表达式是______。 A:*p+9 B:*(p+8) C:*p+=9 D:p+8 答案:B 评析:

p是指针,p+8是地址值,D是错的;*p是p的目标变量,即a[0],值为1,所以*p+9的值是10,而*p += 9值是重新给a[0]赋了值(1+9);所以A和C也是错的。p+8是地址值,指向a[8],那么*(p+8)的值就是a[8]的值,即9。

本题答案为B。

知识点:知识点/指针/指针数组,指向指针的指针,MAIN函数的命令行参数 62、有如下程序 main()

23

{ }

该程序的输出结果是______。 A:不确定的值 B:2 C:1 D:0 答案:D 评析:

由代码可知,题中的for循环值执行2次(i = 0和1),所以只对a[0]和a[1]重新赋了值,而a[k]即a[2]的值并没有变,仍为0。 本题答案为D。

知识点:知识点/循环结构程序设计/FOR循环结构 63、有如下程序 main() { }

该程序的输出结果是______。 A:18 B:19 C:20 D:21 答案:A 评析:

题中的外循环只执行了2次:

第1次: a[1][0] = 3,a[1][1] = 4,所以s = 7;

第2次: a[2][0] = 5,a[2][1] = 6,a[2][2] = 0,所以s = 7 + 5 + 6 + 0 = 18。 本题答案为A。

知识点:知识点/循环结构程序设计/循环的嵌套 、有如下定义

struct person{char name[9]; int age;}; struct person class[10] = { \"John\

\"Paul\ \"Mary\ \"Adam\

int a[3][3] = {{1,2},{3,4},{5,6}}, i,j,s = 0; for(i = 1; i < 3; i++)

for(j = 0; j <= i; j++)

s += a[i][j]];

int n[5] = {0,0,0},i,k = 2; for(i = 0; i < k; i++) n[i] = n[i] + 1; printf(\"%d\\n\

printf(\"%d\\n\

根据上述定义,能输出字母M的语句是______。

24

A:printf(\"%c\\n\ B:printf(\"%c\\n\ C:printf(\"%c\\n\ D:printf(\"%c\\n\答案:D 评析:

选项A将输出A;选项B将输出d;选项C将输出a;选项D将输出M。 本题答案为D。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 65、以下对结构体类型变量的定义中,不正确的是______。 A:typedef struct aa{int n;float m;}AA; AA td1;

B:#define AA struct aa AA{int n;float m;}td1; C:struct{int n;float m;}aa; struct aa td1;

D:struct{int n;float m;}td1; 答案:C 评析:

在答案C中,aa是一个结构体变量,而不是结构体名,所以struct aa td1;是非法的。 本题答案为C。

知识点:知识点/结构体(即\"结构\")与共用体(即\"联合\")/结构体和共用体类型数据的定义方法和引用方法

66、下列叙述中正确的是______。 A:C语言编译时不检查语法 B:C语言的子程序有过程和函数两种 C:C语言的函数可以嵌套定义

D:C语言中,根据函数能否被其它源文件调用,被区分为内部函数和外部函数 答案:D 评析:

选项A的错误在于编译过程中是检查语法的,若发现源程序有语法错误,则系统会提示出错信息;选项B的错误在于C语言中,子程序的作用是由函数来完成的,无过程的概念;选项C的错误在于函数不可以嵌套定义,但可以嵌套调用。 本题答案为D。

知识点:知识点/C语言的结构/程序的构成,MAIN函数和其他函数 67、以下列出C语言常量中,错误的是______。 A:OxFF B:1.2e0.5 C:2L D:'\\72' 答案:B 评析:

C语言中的指数形式,字母E之前必须有数字,且E后面指数必须为整数。 本题答案为B。

25

知识点:知识点/数据类型及其运算/C的数据类型及其定义方法

68、以下变量x、y、z均为double类型且已正确赋值,不能正确表示数学式子x/(y*z)的C语言表达式是______。 A:x/y*z B:x*(1/(y*z)) C:x/y*1/z D:x/y/z 答案:A 评析:

按照自左向右的运算逻辑,选项A是先做x/y,然后再乘以x,显然与题意不符。 本题答案为A。

知识点:知识点/数据类型及其运算/C的数据类型及其定义方法

69、若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是______。 A:-3 B:9 C:-12 D:6 答案:C 评析:

C语言中对赋值运算的运算顺序是自右向左。本题中,计算a*a之后,a的值依然为3,表达式a*a的值为9;a-=9,a=3-9=-6;a+=-6,a=-6+-6=-12。 本题答案为C。

知识点:知识点/数据类型及其运算/C表达式类型和求值规则

70、设x、y、t均为int型变量,则执行语句:x=y=3;t=++x||++y;后,y的值为______。 A:不定值 B:4 C:3 D:1 答案:C 评析:

C语言中在做逻辑或运算时,自左向右判断各个参加或运算的表达式,一旦运到某式的值为非零时,表明整个表达式定为真,余下的语句则不再进行运算。本题中,++x的值为真,则++y并没有进行运算,所以y值不变。 本题答案为C。

知识点:知识点/基本语句/复合语句

71、若变量已正确说明为float类型,要通过语句scanf(\"%f %f %f\给 a赋予10.0,b赋予22.0,c赋予33.0,不正确的输入形式是:______。 A:10 22 33

B:10.0,22.0,33.0 C:10.0 22.0 33.0 D:10 22 33

26

答案:B 评析:

C语言中,数据输入时,必需严格按照scanf语句中的格式符来进行输入,不需要分隔符,否则作为有效字符读入。选项中B中的逗号将被做为有效字符读入。 本题答案为B。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 72、若a、b、c1、c2、x、y均是整型变量,正确的switch语句是______。 ①

switch(a+b);

{ case 1:y=a+b;break; case 0:y=a-b;break; } ②

switch(a*a+b*b) { case 3:

case 1:y=a+b;break; case 3:y=b-a;break; } ③ switch a

{ case c1:y=a-b;break; case c2:x=a*b;break; default:x=a+b; } ④

switch (a-b)

{ default:y=a*b;break;

case 3:case 4:x=a+b;break; case 10:case 11:y=a-b;break; } A:① B:② C:③ D:④ 答案:D 评析:

选项A的错误在于switch语句后面不该加分号;

选项B的错误在于switch语句要求每一个case的常量表达式的值必须互不相同;

选项C的错误在于变量a应该用括号括起来,case后面应该跟上常量表达式,而不是变量。 本题答案为D。

知识点:知识点/选择结构程序设计/用SWITCH语句实现多分支选择结构 73、有以下程序段 int k=0; while(k=1)k++;

27

while循环执行的次数是______。 A:无限次

B:有语法错,不能执行 C:一次也不执行 D:执行1次 答案:A 评析:

乍一看,还以为程序要表达的意思是当k等于1的时候做k++,但是C语言里关系表达式的等于应该是\"==\"。一个等于号表示赋值,即这里面重复的把1赋给k,自然表达式k=1的值总为1,while后面的表达式恒为真,当然会进入死循环。 本题答案为A。

知识点:知识点/循环结构程序设计/WHILE和DO WHILE循环结构 74、以下程序执行后sum的值是______。 main() { int i, sum;

for(i=1;i<6;i++)sum+=i; printf(\"%d\\n\ } A:15 B:14 C:不确定 D:0 答案:C 评析:

变量sum在使用时未赋初值,所以无法确定sum最终的值。 本题答案为C。

知识点:知识点/循环结构程序设计/FOR循环结构 75、下面程序的输出结果是______。 main()

{ int a[]={1,2,3,4,5,6,7,8,9,0},*p; p=a;

printf(\"%d\\n\ } A:0 B:1 C:10 D:9 答案:C 评析:

本题中,p=a,则表明指针p指向数组a的第一个元素,即a[0]。指针运算符\"*\"的优先级高于加法运算符\"+\",所以\"*p+9\"相当于a[0]+9,即10。 本题答案为C。

知识点:知识点/指针/指针数组,指向指针的指针,MAIN函数的命令行参数 76、设有以下说明语句

28

struct ex

{ int x; float y;char z; } example; 则下面的叙述中不正确的是______。 A:struct是结构体类型的关键字 B:example是结构体类型名 C:x,y,z都是结构体成员名 D:struct ex是结构体类型 答案:B 评析:

example是结构体变量名。 本题答案为B。

知识点:知识点/结构体(即\"结构\")与共用体(即\"联合\")/结构体和共用体类型数据的定义方法和引用方法

77、以下程序的输出结果是______。 main()

{ int i, k, a[10], p[3]; k=5;

for(i=0;i<10;i++) a[i]=i; for(i=0;i<3; i++) p[i]=a[i*(i+1)]; for(i=0;i<3; i++) k+=p[i]*2; printf(\"%d\\n\ } A:20 B:21 C:22 D:23 答案:B 评析:

按照程序的流程走一遍,我们可以得到,p[0]=0,p[1]=2,p[3]=6;做三次k+=p[i]*2,相当于k=5+0*2+2*2+6*2=21。 本题答案为B。

知识点:知识点/循环结构程序设计/循环的嵌套 78、以下程序的输出结果是______。 #define SQR(X) X*X main()

{ int a=16,k=2,m=1; a/=SQR(k+m)/SQR(k+m); printf(\"%d\\n\ } A:16 B:2 C:9 D:1 答案:B

29

评析:

本题所考查的是宏定义。C语言在预编译时遇到带实参的宏名,则按命令行中指定的字符串从左到右进行置换。在做这条题时,我们也不妨将运用置换法。得到: a/=k+m*k+m/k+m*k+m=16/7=2。

注:a为整形,所以在做除法时,自动取整。 本题答案为B。

知识点:知识点/基本语句/复合语句 79、若定义了以下函数: void f(……) {……

*p=(double*)malloc(10*sizeof(double)); …… }

p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是______。 A:double *p B:float **p C:double **p D:float *p 答案:C 评析:

通过程序中给出的语句,我们可以判断,*p是一个指向double型指针的指针。因此,要通过p把动态分配存储单元的地址传回主调函数,应该使用double **p。 本题答案为C。

知识点:知识点/指针/返回指针值的指针函数

80、假定建立了以下链表结构,指针p、q分别指向如图所示的结点,则以下可以将q所指结点从链表中删除并释放该结点的语句组是______。

A:free(q); p->next=q->next; B:(*p).next=(*q).next; free(q); C:q=(*q).next; (*p).next=q; free(q); D:q=q->next; p->next=q; p=p->next;free(p); 答案:B 评析:

选项A的错误在于,已经先把q结点给释放,无法再进行余下语句了;选项C和D的错误在于因为有了q=(*q).next做了赋值,则free(q)释放了原来q后面的一个结点。 本题答案为B。

知识点:知识点/结构体(即\"结构\")与共用体(即\"联合\")/用指针和结构体构成链表 81、以下程序的输出结果是______。 main()

{ int x=05; char z='a';

30

printf(\"%d\\n\ } A:0 B:1 C:2 D:3 答案:B 评析:

关系表达式(x&1)&&(z<'z'),(x&1)为真,(z<'z')也为真,两个相与,自然也为真,以整型输出,则输出1。

本题答案为B。

知识点:知识点/位运算/简单的位运算

82、设x,y均为int型变量,且x=10,y=3,则以下数据的输出结果是 printf(\"%d,%d\\n\。 A:10,3 B:9,3 C:9,2 D:10,2 答案:D 评析:

本题主要考查C语言的自减运算符。

C语言的自减运算符有前置与后置两种形式。当自减运算符前置时,变量先自减一后再参与表达式运算;而后置时,变量先参与表达式运算后再自身减一。 本题答案为D。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用

83、X、Y、Z被定义为int型变量,若从键盘给X、Y、Z输入数据,正确的输入语句是______。 A:INPUT X,Y,Z;

B:scanf(\"%d%d%d\ C:scanf(\"%d%d%d\ D:read(\"%d%d%d\ 答案:B 评析:

本题考查C语言的格式化输入语句。

C语言中没有INPUT与read语句,scanf()语句的格式为: scanf(\"格式字符串\变量地址1,变量地址2,...); 本题答案C中,应为变量地址。 本题答案为B。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 84、以下程序的输出结果是______。 main() { int a=3;

printf(\"%d\\n\} A:-6 B:1 C:2

31

D:-12 答案:D 评析:

本题考查C语言的赋值运算符。a+=b就等于a=a+b,a-=b就等于a=a-b。 本题答案为D。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用

85、设a、b、c、d、m、n均为int型变量,且a=5、b=6、c=7、d=8、m=2、n=2则逻辑表达式(m=a>b)&&(n=c>d)运算后,n的值为______。 A:0 B:1 C:2 D:3 答案:A 评析:

本题考查C语言的比较运算符与逻辑运算符。

C语言中比较表达式的运算结果为0或1。0代表不成立,1表示成立。 本题答案为A。

知识点:知识点/基本语句/表达式语句,空语句,复合语句 86、阅读以下程序 main() { int x;

scanf(\"%d\ if(x--<5)printf(\"%d\\n\ else printf(\"%d\\n\ }

程序运行后,如果从键盘上输入5,则输出结果是______。 A:3 B:4 C:5 D:6 答案:B 评析:

本题考查C语言中的自增(++)与自减(--)运算符。

C语言中\"++\"与\"--\"运算符有前置与后置两种形式,前置时变量先自增一或自减一后再参与表达式的运算,后置时变量先参与表达式的运算后再自增一或自减一。 本题答案为B。

知识点:知识点/选择结构程序设计/用IF语句实现选择结构 87、假定 w、x、y、z、m均为int型变量,有如下程序段: w=1;x=2;y=3;z=4

m=(w32

D:1 答案:D 评析:

本题考查C语言的条件运算符。 C语言中条件运算符的表达式为: 表达式?数1:数2

当表达式为非零时条件运算符的表达式的值为数1,否则为数2。 本题答案为D。

知识点:知识点/基本语句/复合语句

88、t为int类型,进入下面的循环之前,t的值为0, while(t=1) { ......}

则以下叙述中正确的是______。 A:循环控制表达式的值为0 B:循环控制表达式的值为1 C:循环控制表达式不合法 D:以上说法都不对 答案:B 评析:

本题考查C语言的while循环语句。

本题的t=1是一个赋值表达式,其值为变量的值,所以while语句的循环控制表达式的值为1。 本题答案为B。

知识点:知识点/循环结构程序设计/WHILE和DO WHILE循环结构 、以下程序的输出结果是______。 main()

{ int num=0; while(num<=2)

{ num++; printf(\"%d\\n\ } }

A) B) C) D) 1 1 1 1 2 2 2 3 3 4 A:A) B:B) C:C) D:D) 答案:C 评析:

本题考查C语言的while循环语句。 C语言中while语句的一般形式如下: while(表达式) {

33

语句部分; }

该语句的执行过程是:先计算表达式的值,若成立(即值为非零)则重新执行语句部分(循环体),然后再次计算表达式的值,并重复上述过程,直到表达式的值为\"假\"(值为零)时,退出循环,并转下一语句去执行。

本题答案为C。

知识点:知识点/循环结构程序设计/WHILE和DO WHILE循环结构 90、以下各选项企图说明一种新的类型名,其中正确的是______。 A:typedef v1 int; B:typedef v2=int; C:typedef int v3; D:typedef v4: int 答案:C 评析:

本题考查C语言的类型定义。

C语言中可以使用typedef来重新定义已有的数据类型,相当于为数据类型取个别名。 本题答案为C。

知识点:知识点/数据类型及其运算/C的数据类型及其定义方法 91、设有以下函数; f(int a) { int b=0; static int c=3; b++;c++; return(a+b+c); }

如果在下面的程序中调用该函数,则输出结果是______。 main() { int a=2, i;

for(i=0;i<3;i++) printf(\"%d\\n\ }

A) B) C) D) 7 7 7 7 8 9 10 7 9 11 13 7 A:A) B:B) C:C) D:D) 答案:A 评析:

本题考查的是C语言的静态数据类型。静态数据类型的变量的值在退出了函数时依然存放在内存中,且只初始化一次。 本题答案为A。

知识点:知识点/循环结构程序设计/FOR循环结构

34

92、以下选项中,非法的字符常量是______。 A:'\' B:'\\17' C:\"\\n\" D:'\\xaa' 答案:C 评析:

本题考查C语言的字符常量与转义字符。

C语言中字符常量是以单引号括起来的单个字符,或为以\"\\\"与三位八进制数值或两位十六进制数值代替单个字符。 本题答案为C。

知识点:知识点/数据类型及其运算/C的数据类型及其定义方法 93、若有说明:int i,j=2,*p=&i;,则能完成i=j赋值功能的语句是______。 A:i=*p; B:*p=*&j; C:i=&j; D:i=**p; 答案:B 评析:

本题考查C语言中指针赋值运算。指针是一种特殊的变量,它是用来存放变量地址的变量。指针定义时可以为其赋初值。只有指针被赋了值后才能对其使用。 本题答案为B。

知识点:知识点/基本语句/表达式语句,空语句,复合语句 94、以下定义语句中,错误的是______。 A:int a[]={1,2}; B:char *a[3]; C:char s[10]=\"test\"; D:int n=5,a[n]; 答案:D 评析:

本题考查C语言数组的定义与初始化。

在C语言中数组的初始化可以对部分元素,数组的定义,不能含有变量。 本题答案为D。

知识点:知识点/数据类型及其运算/C的数据类型及其定义方法 95、以下程序的输出结果是______。 main() { int i,a[10];

for(i=9;i>=0;i--) a[i]=10-i; printf(\"%d%d%d\} A:258 B:741 C:852 D:369

35

答案:C 评析:

本题使循环语句给数组元素赋值。 C语言中for循环语句的一般形式为: for(表达式1;表达式2;表达式3) {

语句部分; }

本题答案为C。

知识点:知识点/循环结构程序设计/FOR循环结构 96、以下程序的输出结果是______。 main()

{ char st[20]=\"hello\\0\\\\\\";

printf(\"%d%d\\n\ } A:99 B:520 C:1320 D:2020 答案:B 评析:

本题主要考查C语言的字符串与库函数。

C语言中字符串是以'\\0'字符结束的,且strlen()函数计算的是'\\0'字符前的所有字符的个数。本题中strlen(st)应为5。数组定义以后系统就为其分配相应大小的内存空间,而不论其中有没有内容。sizeof()函数是计算变量或数组的所分配到的内存空间的大小。所以本题的sizeof(st)为20。 本题答案为B。

知识点:知识点/数据类型及其运算/不同类型数据间的转换与运算 97、以下程序输出正确的是______。 amovep(int *p,int (*a)[3],int n) { int i,j;

for(i=0;ifor(j=0;j{ int *p,a[3][3]={{1,3,5},{2,4,6}}; p=(int*)malloc(100); amovep(p,a,3);

printf(\"%d%d\\n\ } A:56 B:25 C:34 D:程序错误 答案:A

36

评析:

本题主要考查的是指针与数组的操作。可以用malloc()函数为指针分区内存空间,用free()函数释放指针变量所用内存空间。 本题答案为A。

知识点:知识点/循环结构程序设计/FOR循环结构 98、以下程序的输出结果是______。 struct HAR

{ int x,y;struct HAR *p;} h[2]; main()

{ h[0].x=1;h[0].y=2; h[1].x=3;h[1].y=4; h[0].p=&h[1];h[1].p=h;

printf(\"%d%d\\n\} A:12 B:23 C:14 D:32 答案:D 评析:

本题考查的是C语言中结构体与链表。本题中是一个含有两个结点的循环链表。 C语言中结构体的定义为: struct 结构体类型名 {

成员表列; };

本题答案为D。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 99、以下程序的输出结果是______。 main() { int a,b;

for(a=1,b=1;a<=100;a++) { if(b>=10) break; if(b%3==1)

{ b+=3; continue; } }

printf(\"%d\\n\ }

A:101 B:6 C:5 D:4 答案:D 评析:

本题主要考查考生对C语言中的循环语句和程序的执行逻辑。本题中for循环语句共执行3次,所以a的值累加3次,结果为4。 本题答案为D。

37

知识点:知识点/循环结构程序设计/FOR循环结构 100、以下程序的输出结果是______。 union myun { struct { int x,y,z;}u; int k; }a; main(0

{ a.u.x=4;a.u.y=5;a.u.z=6; a.k=0;

printf(\"%d\\n\ } A:4 B:5 C:6 D:0 答案:D 评析:

本题主要考查C语言中构造类型,联合体与结构体。结构体中的成员使用各自的存储区,而联合体中的成员使用共同的存储区。 本题答案为D。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 101、以下程序的结果是______。 int a,b; void fun()

{ a=100; b=200; } main()

{ int a=5,b=7; fun();

printf(\"%d%d\\n\ }

A:100200 B:57 C:200100 D:75 答案:B 评析:

本题主要考查的是C语言中的变量作用域。

全程变量是可以在子函数中对其值作改变,且它也可作为函数间的值传递。但当函数或子函数中定义了与全程变量名称相同的局部变量,则全程变量将被屏蔽。所以本题主函数的局部变量a,b把同名的全程变量屏蔽了。 本题答案为B。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 102、以下选项中不属于C语言的类型和是______。

38

A:signed short int B:unsigned char C:singed long D:long short 答案:D 评析:

C语言中归纳起来,基本类型数据有以下几种: [singed] char; unsiged char; [signed] short [int]; unsigned short [int]; [signed] long [int]; unsighed long [int]; float; double.

本题答案为D。

知识点:知识点/数据类型及其运算/C的数据类型及其定义方法

103、若有说明语言:int a,b,c,*d=&c;则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是______。 A:scanf(\"%d%d%d\ B:scanf(\"%d%d%d\ C:scanf(\"%d%d%d\ D:scanf(\"%d%d%d\答案:A 评析:

在scanf语句中,要为某一变量赋值,引用的是该变量的地址,所以在这里要为a,b,c 赋值可以写成两种形式,除了采用答案B的形式外,还可以写成scanf(\"%d%d%d\。 本题答案为A。

知识点:知识点/基本语句/表达式语句,空语句,复合语句

104、在16位C编译系统上,若定义long a;,则能给a赋40000的正确语句是______。 A:a=20000+20000 B:a=4000*10 C:a=30000+10000 D:a=4000L*10L 答案:D 评析:

除D之外的选项的右边的表达式都超过了16位带符号整数的范围(32767)。 本题答案为D。

知识点:知识点/基本语句/表达式语句,空语句,复合语句 105、以下叙述正确的是______。 A:可以把define和if定义为用户标识符

B:可以把define定义为用户标识符,但不能把if定义为用户标识符 C:可以把if定义为用户标识符,但不能把define定义为用户标识符 D:define和if都不能定义为用户标识符 答案:B

39

评析:

if属于系统定义的32个标准标识符之一,所以不可以供用户定义。define不在其中。 本题答案为B。

知识点:知识点/数据类型及其运算/C的数据类型及其定义方法

106、若定义:int a=511,*b=&a:,则printf(\"%d\\n\的输出结果为______。 A:无确定值 B:a的地址 C:512 D:511 答案:D 评析:

本题,首先定义了一个整型变量a,并将它赋值为511,然后又定义了一个指针变量,将它赋值为变量a的地址,在输出语句中,输出项是*b,而*b=a,所以输出结果应该是511。 本题答案为D。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 107、以下程序的输出结果是______。 main()

{ int a=5,b=4,c=6,d;

printf(\"%d\\n\} A:5 B:4 C:6 D:不确定 答案:C 评析:

本题最重要的分析d=a>c?(a>c?a:c):(b)),首先运算括号内的式子a>c?a:c,它的值是c的值6,即式子化成d=a>c?6:4。

显然a>c,所以将6赋给d。 本题答案为C。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 108、以下程序中,while循环的循环次数是______。 main() {int i=0; while(i<10) { if(i<1) continue; if(i==5)break; i++; } ...... } A:1 B:10 C:6

40

D:死循环,不能确定次数 答案:D 评析:

题目中,进入循环后,先执行一个条件语句,如果i的值小于1,那么直接进入下一轮循环,因为i的初始值是0,小于1,故直接进入下一轮循环,又因为i的值始终没有改变,所以这个循环成了死循环。 本题答案为D。

知识点:知识点/循环结构程序设计/WHILE和DO WHILE循环结构 109、以下程序的输出结果是______。 main() {int a=0,i; for(i=1;i<5;i++) { switch(i) {case0: case3:a+=2; case1: case2:a+=3; default:a+=5; } }

printf(\"%d\\n\} A:31 B:13 C:10 D:20 答案:A 评析:

switch结构的执行过程为:进入switch结构后,对条件表达式进行计算,然后从上至下去找与条件表达式的值相匹配的case,以此作为入口,执行switch结构中后面的各语句。第一次for循环中,switch结构的条件表达式i的值是1,则从case 1 开始执行后面的语句,先执行a+=3,a的值变成3,接着执行a+=5,a的值变成了8。然后进入第二次循环,switch结构条件表达式i的值2,则从case 2开始执行后面的语句,结束第二轮循环时a的值是16,在第三轮循环中,switch结构条件表达式的值是3,则从case 3后面的语句开始执行,a+=2 语句使a的值变成了18,然后执行a+=3,和a+=5,第三轮循环结束时,a的值是26。第四轮循环中, switch结构条件表达的值是4,从default处开始执行,执行一个a+=5的操作,a的值变成了31,i 的值经修改变成了5,不再满足循环条件,退出循环。 本题答案为A。

知识点:知识点/选择结构程序设计/选择结构的嵌套 110、以下程序的输出结果是______。 main()

{ int a=4,b=5,c=0,d; d=!a&&!b||!c; printf(\"%d\\n\}

41

A:1 B:0 C:非0的数 D:-1 答案:A 评析:

!a值为0,故!a&&!b的值为0,!c的值为1,而0||1的值应该是1。所以答案是A。 本题答案为A。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 111、以下程序的输出结果是______。 #include main() { int i=0,a=0; while(i<20) { for(;;)

{ if((i%10)==0) break; else i--; }

i+=11; a+=i; }

printf(\"%d\\n\} A:21 B:32 C:33 D:11 答案:B 评析:

本题中,有两个循环语句。首先,i=0,进入while循环,for语句中对循环没有任何条件,故直接进入for循环,因为0%10结果还是0,所以跳出for循环,执行i+=11,i的值变为11,执行a+=j,a的值变为11;接着进入下一轮while循环,在for循环中,因为i的值是11,对10取余结果为1,所以执行i自减,i的值变成10,进入又一轮for循环,因为10%10==0,所以跳出for循环,执行i+=11,i的值变成21,执行a+=i,也就是将21+11的和赋给a,a=32,因为此时i的值不再小于20,所以结束循环,故输出结果是32。 本题答案为B。

知识点:知识点/选择结构程序设计/选择结构的嵌套 112、以下程序的输出结果是______。 int f( ) { static int i=0; int s=1; s+=i; i++; return s; } main() { int i,a=0;

42

for(i=0;i<5;i++) a+=f( ); printf(\"%d\\n\} A:20 B:24 C:25 D:15 答案:D 评析:

本题主要考的是对变量存储属性的理解,一个变量被指定为静态变量,在编译时就为其分配了存储空间,程序一开始执行便被建立,直到该程序执行结束都存在,而不像动态变量只存在于函数或分程序被调用期间。在函数多次被调用的过程中静态局部变量的值具有可继承性。在第一次调用函数结束时,i的值是1,返回值1,第二次调用函数时,i的值保侍为1,执行自加操作后,i的值变成了2,到了第三次调用时,i的值保持了上次调用结束时的值,再执行自加,值变成了3。到第五次调用结束时,i的值是5。而s的值不具备i的这种可继承性,每次调用时,它都先被重新赋值为1,再执行下面的操作。 本题答案为D。

知识点:知识点/循环结构程序设计/FOR循环结构 113、以下程序段的输出结果是:______。 char s[]=\"\\\\141\\141abc\\"; printf(\"%d\\n\ A:9 B:12 C:13 D:14 答案:A 评析:

本题考的是对转义字符的理解,在C语言中规定:用反斜杠开头后面跟一个字母代表一个控制字符;用\\\\代表字符\"\\\",用\\'代表撇号字符;用反斜杠后面跟1到3个八进制数代表ASCII码为该八进制数的字符;用\\x后面跟1到2个十六进制数代表ASCII码为该十六进制数的字符。 本题答案为A。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 114、若有以下程序 #include void f(int n); main() { void f(int n); f(5); }

void f(int n)

{ printf(\"%d\\n\ }

则以下叙述中不正确的是______。

A:若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f

B:若在主函数前对函数f进行说明,则在主函数和其后的其它函数中都可以正确调用函数f

43

C:对于以上函数程序,编译时系统会提示出错信息;提示对f函数重复说明 D:函数f无返回值,所以可用void将其类型定义为无值型 答案:C 评析:

一个函数在一个文件中的定义只能有一次,但对它的声明却可以有很多个。 本题答案为C。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 115、以下程序调用findmax函数返回数组中的最大值。 findmax(int *a,int n) {int *p,*s;

for(p=a,s=a; p-a{int x[5]={12,21,13,6,18}; printf(\"%d\\n\}

在下划线处应填入的是______。 A:p>s B:*p>*s C:a[p]>a[s] D:p-a>p-s 答案:B 评析:

findmax函数求的是数组元素的最大值,首先让指针p,s都指向a[0],由最后的return语句可以知道,最终s代表数组元素最大值的地址,要实现这个目的,就要让s指针指向的内容与数组元素逐个比较,把较大值的地址放在s中,而在for循环中,每做一次循环,p指针自加一次,即指针p遍历了整个数组,所以应该在循环语句中,用p指针指向的内容与s指针指向的内容作比较,并让两者间大值的地址存入s。 本题答案为B。

知识点:知识点/循环结构程序设计/FOR循环结构

116、若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是______。 A:p=2*(int*)malloc(sizeof(int)); B:p=(int*)malloc(2*sizeof(int)) C:p=(int*)malloc(2*2) D:p=(int*)calloc(2,sizeof(int)) 答案:A 评析:

malloc函数的作用是在内存开辟指定大小的存储空间,并将此存储空间的地址作为函数值带回,它的原型为void * malloc(unsigned int size) ,函数值为指针,这个指针是指向void类型,也就是不规定指向任何具体的类型。如果要将此返回地址赋给一个指向特定类型的指针变量,则应进行强制类型转换。 calloc函数的模型是:void * calloc(unsigned int num,unsigned int size)作用是分配num个大小为size字节的空间。 本题答案为A。

44

知识点:知识点/指针/指针与指针变量的概念,指针与地址运算符 117、以下不能正确进行字符串赋初值的语句为______。 A:char str[5]=\"good!\" B:char str[]=\"good!\" C:char *str=\"good!\" D:char str[5]={'g','o','o','d'} 答案:A 评析:

因为,用字符串作初值为字符数组赋值时,系统总会自动在字符串的末尾补上一个\"\\0\",作为字符串的结束标志,如果如A中定义的话,本来应该把第6个字符也就是'\\0\"赋给str数组,但此数组只含5个元素,因此最后一个字符\"\\0\"未能放入str数组,而是放到了str数组之后的存储单元中,这就可能会破坏其它数据区或程序本身。 本题答案为A。

知识点:知识点/基本语句/表达式语句,空语句,复合语句 118、以下程序的输出结果是______。 main()

{ int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1; for(i=0;i<3;i++)

for(j=i;j<=i;j++) t=t+b[i][b[j][j]]; printf(\"%d\\n\} A:3 B:4 C:1 D:9 答案:B 评析:

本程序中,有两个循环语句嵌套使用,在第一次外循环中,i=0,执行内循环时,将j赋值为i的值0,执行一次t=t+b[i][b[j][j]],得到t=1,退出内循环,接着进入第二次外循环,在第二次外循环结束时t=2,然后执行第三次外循环,得到t=4,退出循环,输出t的值。 本题答案为B。

知识点:知识点/循环结构程序设计/FOR循环结构 119、以下程序的输出结果是______。 #inclue #inclue main()

{ char b1[8]=\"goddwer\ while(--pb>=b1) strcpy(b2,pb); printf(\"%d\\n\} A:8 B:3 C:1 D:7

45

答案:D 评析:

本题中,每次执行循环,都是将pb指针指向的内容复制到b2中,第一次循环中,将b1[2]~b1[7]六个字符复制到b2中,第二次循环,将b[1]~b[7]七个字符复制到b2中,第三次循环,将b1数组的全部内容复制到b2中。而后一次复制会覆盖前面的复制,最后b2的实际长度应该是八,而strlen()函数测出的是一个字符串中\"\\0\"之前的全部字符的个数,所以最后输出的值是七。 本题答案为D。

知识点:知识点/循环结构程序设计/WHILE和DO WHILE循环结构 120、在说明语句:int *f();中,标识符f代表的是______。 A:一个用于指向整型数据的指针变量 B:一个用于指向一维数组的行指针 C:一个用于指向函数的指针变量 D:一个返回值为指针型的函数名 答案:D 评析:

int * f() 表示f是一个函数,它带回一个指针值,这个指针是指向一个整型数据的。 本题答案为D。

知识点:知识点/数据类型及其运算/C的数据类型及其定义方法 121、不合法的main函数命令行参数表示形式是______。 A:main(int a,char *c[]) B:main(int arc,char **arv) C:main(int argc,char *argv) D:main(int argv,char *arge[]) 答案:C 评析:

本题主要考查了对main函数参数的了解,main函数可以有两个形参,一般形式是:main(int argc,char * argv[]),也就是说,它的第一个形参是一个整型变量,第二个形参是一个指针数组,其元素指向字符型数据。

本题答案为C。

知识点:知识点/C语言的结构/程序的构成,MAIN函数和其他函数 122、以下程序的输出结果是______。 int x=3; main() { int i;

for(i=1;i{ static int x=1; x*=x+1; printf(\" %d\}

A:3 3 B:2 2 C:2 6

46

D:2 5 答案:C 评析:

incre()中定义一个静态局部变量x,它的作用范围仅限于本函数中,而不会影响main()函数中的x值,所以main()中执行两次for循环,第一次调用incre()函数时,函数中x的初值是1,x*=x+1语句可以写成x=x*(x+1),结果x的值变成2,随后输出值2;在第二次调用incre()函数时,x的值继承了上次调用的运行结果,变成了2,执行了x*=x+1后,x的值是6,故又输出了数字6。 本题答案为C。

知识点:知识点/循环结构程序设计/FOR循环结构 123、以下叙述中正确的是______。 A:构成C程序的基本单位是函数 B:可以在一个函数中定义另一个函数 C:main()函数必须放在其它函数之前

D:所有被调用的函数一定要在调用之前进行定义 答案:A 评析:

本题的考查点是对函数的理解。

选项B,所有函数都是平等的,即在定义函数时是互相的,一个函数并不从属于另一函数,即函数不能嵌套定义,但可以互相调用,但不能调用main函数。所以此选项不对;

选项C和D也不对,因为main()函数可以放在其它函数之前,这时要在主函数内定义子函数,如果放在其它函数之后则不需定义子函数。 故本题答案为A。

知识点:知识点/C语言的结构/程序的构成,MAIN函数和其他函数 124、以下选项中合法的用户标识符是______。 A:long B:_2Test C:3Dmax D:A.dat 答案:B 评析:

本题的考查点是用户标识符。

选项A是C语言中的关键字,不能作为标识符; 选项C中数字不能打头;

选项D中,.dat是文件名的后缀也不能作为标识符; 故本题答案为B。

知识点:知识点/数据类型及其运算/C的数据类型及其定义方法 125、以下非法的赋值语句是______。 A:n=(i=2,++i); B:j++; C:++(i+1); D:x=j>0; 答案:C 评析:

本题的考查点是赋值语句。

47

选项A是将一个逗号表达式的值赋给一个变量; 选项B是自增运算;

选项C中(i+1)是一个常量,常量不能进行自增运算; 选项D是将一个整数赋给一个变量。 故本题答案为C。

知识点:知识点/基本语句/表达式语句,空语句,复合语句

126、设a和b均为double型常量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是______。 A:6.500000 B:6 C:5.500000 D:6.000000 答案:D 评析:

本题的考查点是各类数值型数据的混合运算。

各类数值型数据在进行混合运算时,不同类型的数据要先转换成同一类型,然后进行运算。转换的规则为:字符数据必定先转换为整数,short型转为int型,float型数据在运算时一律先转换成双精度型,以提高运算精度。 故本题答案为D。

知识点:知识点/基本语句/表达式语句,空语句,复合语句

127、已知i、j、k为int型变量,若从键盘输入:1,2,3↙,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是______。

A:scanf(\"%2d%2d%2d\ B:scanf(\"\"%d %d %d\ C:scanf(\"%d,%d,%d\ D:scanf(\"i=%d,j=%d,k=%d\答案:C 评析:

本题的考查点是格式输入函数。

如果在\"格式控制\"字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。

故本题答案为C。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 128、与数学式子3乘以x的n次方/(2x-1)对应的C语言表达式是______。 A:3*x^n/(2*x-1) B:3*x**n/(2*x-1) C:3*pow(x,n)*(1/(2*x-1)) D:3*pow(n,x)/(2*x-1) 答案:C 评析:

本题的考查点是函数pow(x,y)。

函数pow(x,y)的功能是计算x的y次方的值,在C语言中没有选项A和选项B的表示方式,选项D中pow(n,x)是求n的x次方值,不合题意。 故本题答案为C。

知识点:知识点/基本语句/表达式语句,空语句,复合语句

48

129、设有定义:long x=-123456L;,则以下能够正确输出变量x值的语句是______。 A:printf(\"x=%d\\n\ B:printf(\"x=%ld\\n\ C:printf(\"x=%8dL\\n\ D:printf(\"x=%LD\\n\答案:B 评析:

本题的考查点是printf格式字符。

用printf函数输出时,应注意数据类型应与上述格式说明匹配,否则会出现错误。因为x为长整型数据,所以输出也应该为长整型,其表示方式为\"%ld\"。 故本题答案为B。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 130、若有以下程序: main()

{int k=2,i=2,m;

m=(k+=i*=k); printf(\"%d,%d\\n\ }

执行后的输出结果是______。 A:8,6 B:8,3 C:6,4 D:7,4 答案:C 评析:

本题的考查点是复合的赋值运算符。

在赋值符\"=\"之前加上其它运算符,可以构成复合的运算符。此运算为右结合性,即从右往左计算。i*=k即i=i*k=2*2=4,k=k+i=2+4=6,然后将k的值赋给m。 故本题答案为C。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 131、有一函数

┌ 1 x>0 y = ┤ 0 x=0 └ -1 x<0

以下程序段中不能根据x的值正确计算出y的值的是______。 A:if(x>0) y=1;else if(x==0) y=0;else y=-1; B:y=0;if(x>0) y=1;else if(x<0) y=-1; C:y=0;if(x>=0)if(x>0) y=1;else y=-1; D:if(x>=0) if(x>0) y=1;else y=0;else y=-1; 答案:C 评析:

本题的考查点是if语句的嵌套。

本题应当注意if与else的配对关系。从最内层开始,else总是与它上面最近的(未曾配对的)if配对。所以选项C中else应该与最近的if配对,即与第二个if配对,此处else表示x=0,也就是当x=0时y=-1,不合题意。

49

故本题答案为C。

知识点:知识点/基本语句/表达式语句,空语句,复合语句

132、以下程序的功能是:按顺序读入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\ sum+=score;} ave=sum/4.0;

printf(\"NO%d:%f\\n\ } }

上述程序运行后结果不正确,调试中发现有一条语句出现在程序的位置不正确。这条语句是______。 A:sum=0.0; B:sum+=score; C:ave=sum/4.0;

D:printf(\"NO%d:%f\\n\答案:A 评析:

本题的考查点是for循环语句的使用。

题目中要求每位学生的平均分数,所以要求每位学生的总分,也就是程序中的sum,所以sum应在for循环体内赋初值,如果在循环体外赋初值就会得到所有学生的分数总和,不合题意。 故本题答案为A。

知识点:知识点/循环结构程序设计/FOR循环结构 133、有以下程序段 int n=0,p;

do {scanf(\"%d\ while(p!=12345&&n<3); 此处do-while循环的结束条件是______。 A:p的值不等于12345并且n的值小于3 B:p的值等于12345并且n的值大于等于3 C:p的值不等于12345或者n的值小于3 D:p的值等于12345或者n的值大于等于3 答案:D 评析:

本题的考查点是do-while循环语句。

当循环条件为假时跳出循环,因为条件为逻辑与,所以只要有一个不满足条件即跳出循环。 故本题答案为D。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 134、有以下程序 main()

{int a=15,b=21,m=0;

50

switch(a%3)

{case 0:m++;break; case 1:m++; switch(b%2) {default:m++; case 0:m++;break; } }

printf(\"%d\\n\}

程序运行后的输出结果是______。 A:1 B:2 C:3 D:4 答案:A 评析:

本题的考查点是switch语句。

因为a%3是个常数,所以只执行一次就跳出switch结构。即只执行m++,此时m为1。 故本题答案为A。

知识点:知识点/选择结构程序设计/用SWITCH语句实现多分支选择结构 135、C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是______。 A:void B:int C:float D:double 答案:B 评析:

本题的考查点是函数值的类型。

C语言规定,凡不加类型说明的函数,一律自动按整型处理。 故本题答案为B。

知识点:知识点/函数/函数的定义方法

136、若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是______。 A:p=q; B:*p=*q; C:n=*q; D:p=n; 答案:D 评析:

本题的考查点是指针变量的引用。

指针变量不同于整型变量和其它类型的变量,它是用来存放地址(指针)的,不能将一个整型量(或任何其它非地址类型的数据)赋给一个指针变量,这样的赋值是不合法的。本题中的答案D就属于这种情况,所以p=n;是非法的赋值语句。 故本题答案为D。

51

知识点:知识点/基本语句/表达式语句,空语句,复合语句

137、以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序。 void sort(int a[],int n) {int i,j,t;

for(i=0;iif(a[i]{int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(&aa[3],5);

for(i=0;i<10;i++) printf(\"%d,\ printf(\"\\n\"); }

程序运行后的输出结果是______。 A:1,2,3,4,5,6,7,8,9,10, B:10,9,8,7,6,5,4,3,2,1, C:1,2,3,8,7,6,5,4,9,10, D:1,2,10,9,8,7,6,5,4,3, 答案:C 评析:

本题的考查点是对数组的操作。

本题并不是对数组的所有元素进行排序,而是对从a[3]开始往后的4个元素进行排序。 故本题答案为C。

知识点:知识点/循环结构程序设计/FOR循环结构 138、有以下程序 int f(int n)

{if (n==1) return 1; else return f(n-1)+1; } main() {int i,j=0;

for(i=1;i<3;i++) j+=f(i); printf(\"%d\\n\ }

程序运行后的输出结果是______。 A:4 B:3 C:2 D:1 答案:B 评析:

本题的考查点是函数的递归调用。 j+=f(i)即为j=j+f(i)=f(1)+f(2)=1+(f(1)+1)=3。

52

故本题答案为B。

知识点:知识点/循环结构程序设计/FOR循环结构 139、有以下程序 main()

{char a[]={'a','b','c','d','e','f','g','h','\\0'}; int i,j; i=sizeof(a); j=strlen(a); printf(\"%d,%d\\n\ }

程序运行后的输出结果是______。 A:9,9 B:8,9 C:1,8 D:9,8 答案:D 评析:

本题的考查点是计算字符数组与字符串的长度。

sizeof()函数是计算字符数组的长度,因为'\\0'也是一个字符,要计算在内。在字符数组末尾加上'\\0'作为字符串结束标志,strlen()是计算字符串长度的函数,遇到'\\0'即认为是字符串结束,不把空字符计入字符串的长度。

故本题答案为D。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 140、以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。 void reverse(int a[],int n) {int i,t;

for(i=0;i{t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;} } main()

{int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0; reverse(b,8);

for(i=6;i<10;i++) s+=b[i]; printf(\"%d\\n\}

程序运行后的输出结果是______。 A:22 B:10 C:34 D:30 答案:A 评析:

本题的考查点是对数组的操作。

本题并不是将整个数组中的内容逆置,而是逆置前8个元素。逆置后的数组为:8,7,6,5,4,3,2,1,9,10通过for循环计算b[6]+b[7]+b[8]+b[9]即2+1+9+10=22。 故本题答案为A。

53

知识点:知识点/循环结构程序设计/FOR循环结构 141、有以下程序 #include main()

{char *p=\"abcde\\0fghjik\\0\"; printf(\"%d\\n\}

程序运行后的输出结果是______。 A:12 B:15 C:6 D:5 答案:D 评析:

本题的考查点是计算字符串的长度。

\"\\0\"是字符串结束标志,当遇到此标志时字符串已结束。所以字符串的长度为5。 故本题答案为D。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 142、有以下程序 void ss(char *s,char t) {while(*s)

{if(*s==t) *s=t-'a'+'A'; s++; } } main()

{char str1[100]=\"abcddfefdbd\ ss(str1,c); printf(\"%s\\n\ }

程序运行后的输出结果是______。 A:ABCDDEFEDBD B:abcDDfefDbD C:abcAAfefAbA D:Abcddfefdbd 答案:B 评析:

本题的考查点是将字符串中指定的小写字母转换为大写字母。

在主函数中因为c被赋值为字符'd',所以函数的功能是将字符串中d字母转换为大写。 故本题答案为B。

知识点:知识点/循环结构程序设计/WHILE和DO WHILE循环结构 143、有以下程序 struct STU

{char num[10]; float score[3]; } main()

54

{struct STU s[3]={{\"20021\ {\"20022\ {\"20023\ int i; float sum=0; for(i=0;i<3;i++) sum=sum+p->score[i]; printf(\"%6.2f\\n\}

程序运行后的输出结果是______。 A:260.00 B:270.00 C:280.00 D:285.00 答案:B 评析:

本题的考查点是结构体数组。

通过for循环计算每个学生的总分,但是最后打印的只是最后一个学生的总分。因为sum定义的是实型变量,所以最后结果应为实型数据。 故本题答案为B。

知识点:知识点/循环结构程序设计/FOR循环结构 144、有以下程序 #include struct NODE

{int num; struct NODE *next; } main()

{struct NODE *p,*q,*r;

p=(struct NODE *)malloc(sizeof(struct NODE)); q=(struct NODE *)malloc(sizeof(struct NODE)); r=(struct NODE *)malloc(sizeof(struct NODE)); p->num=10;q->num=20;r->num=30; p->next=q;q->next=r;

printf(\"%d\\n\ }

程序运行后的输出结果是______。 A:10 B:20 C:30 D:40 答案:D 评析:

本题的考查点是用指针处理链表。

p->num即为10,q->next->num即为r->num,为30,所以p->num+q->next->num=10+30=40。 故本题答案为D。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用

55

145、以下程序中函数f的功能是将n个字符串,按由大到小的顺序进行排序。 #include void f(char p[][10],int n) { char t[20]; int i,j; for(i=0;i{ strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);} } main()

{char p[][10]={\"abc\ f(p,5); printf(\"%d\\n\}

程序运行后的输出结果是______。 A:6 B:4 C:5 D:3 答案:C 评析:

本题的考查点是比较字符串的大小。

比较字符串的大小是从字符串的第一个字母开始比较,如果第一个字母相同则比较第二个字母,以此类推,直至字符串结束,结合本题可知,比较后的字符串数组为: p[0]=\"dcdbe\" p[1]=\"cd\" p[2]=\"abc\" p[3]=\"abbd\" p[4]=\"aabdfg\" 所以,strlen(p[0])=5。 故本题答案为C。

知识点:知识点/循环结构程序设计/FOR循环结构 146、以下叙述正确的是______。 A:C语言比其他语言高级

B:C语言可以不用编译就能被计算机识别执行

C:C语言以接近英语国家的自然语言和数学语言作为语言的表达形式 D:C语言出现的最晚、具有其他语言的一切优点 答案:C 评析:

本题的考查点是C语言的特点。 C语言主要有如下一些特点:

1、语言简洁、紧凑,使用方便、灵活; 2、运算符丰富;

3、数据结构丰富,具有现代化语言的各种数据结构; 4、具有结构化的控制语句;

56

5、语法不太严格,程序设计自由度大;

6、C语言允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。

7、生成目标代码质量高,程序执行效率高; 8、用C语言写的程序可移植性好。

但是所有的语言都不可能没有任何缺点,C语言也不例外,C语言是高级语言,需要通过编译才能被计算机识别。

本题答案为C。

知识点:知识点/C语言的结构/程序的构成,MAIN函数和其他函数 147、C语言中用于结构化程序设计的三种基本结构是______。 A:顺序结构、选择结构、循环结构 B:if、switch、break C:for、while、do-while D:if、for、continue 答案:A 评析:

本题的考查点是程序的基本结构。

结构化程序由若干个基本结构组成。每一个基本结构可以包含一个或若干个语句。有三种基本结构: 1、顺序结构,先执行A操作,再执行B操作,两者是顺序执行的关系;

2、选择结构,P代表一个条件,当P条件成立时执行A,否则执行B。只能执行A或B之一。两条路径汇合在一起然后出口;

3、循环结构,有两种循环结构:

(1)当型循环结构,当P条件成立(\"真\")时,反复执行A操作。直到P为\"假\"时才停止特环。 (2)直到型循环结构,先执行A操作,再判断P是否为\"假\",若P为\"假\",再执行A,如此反复,直到P为\"真\"为止。 故本题答案为A。

知识点:知识点/选择结构程序设计/用IF语句实现选择结构 148、下列关于C语言用户标识符的叙述中正确的是______。 A:用户标识符中可以出现下划线和中划线(减号) B:用户标识符中不可以出现中划线,但可以出现下划线

C:用户标识符中可以出现下划线,但不可以放在用户标识符的开头

D:用户标识符中可以出现下划线和数字,它们都可以放在用户标识符的开头 答案:B 评析:

本题的考查点是C语言中的标识符。

标识符是C语言中用来表示变量名、数组名、函数名、指针名、结构名、联合名、枚举常数名、用户定义的数据类型名、语句标号等用途的字符序列。标识符可以由字母、数字和下划线组成,字母和下划线可以出现在用户标识符的开头,数字不可以。 故本题答案为B。

知识点:知识点/数据类型及其运算/C的数据类型及其定义方法 149、若有以下程序段(n所赋的是八进制数) int m=32767,n=032767; printf(\"%d,%o\\n\执行后输出结果是______。

57

A:32767,32767 B:32767,032767 C:32767,77777 D:32767,077777 答案:A 评析:

本题的考查点是不同类型数据的输入输出。 Printf()函数的一般格式如下所示: Printf(\"格式控制字符串\输出项清单) 格式控制字符串中包括:

1、格式转换说明符:以\"%\"开头后跟一个格式字符,它用于输出数据格式的转换与控制; 2、转义字符:以\"\\\"开头后跟一个字符,用于输出某些特殊意义的字符和不可显示字符; 3、其他字符:用于照原样显示的字符。 printf()格式转换说明符: '%'按实际位数输出十进制整数; '%o'按实际位数输出八进制整数。

因为m定义为整数,即默认的十进制数,n定义为八进制数,所以照原样输出。 故本题答案为A。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 150、下列关于单目运算符++、--的叙述中正确的是______。 A:它们的运算对象可以是任何变量和常量

B:它们的运算对象可以是char型变量和int型变量,但不能是float型变量 C:它们的运算对象可以是int型变量,但不能是double型变量和float型变量 D:它们的运算对象可以是char型变量、int型变量和float型变量 答案:D 评析:

本题的考查点是自增、自减运算符。

自增、自减运算符的作用是使变量的值增1或减1,只能用于变量,包括char型变量、int型变量和float型变量,而不能用于常量或表达式。 故本题答案为D。

知识点:知识点/数据类型及其运算/C运算符的种类、运算优先级和结合性 151、若有以下程序段 int m=0xabc,n=0xabc; m-=n;

printf(\"%X\\n\

执行后输出结果是______。 A:0X0 B:0x0 C:0 D:0XABC 答案:C 评析:

本题的考查点是不同类型数据的输入输出。 Printf()函数的一般格式如下所示:

58

Printf(\"格式控制字符串\输出项清单) 格式控制字符串中包括:

1、格式转换说明符:以\"%\"开头后跟一个格式字符,它用于输出数据格式的转换与控制; 2、转义字符:以\"\\\"开头后跟一个字符,用于输出某些特殊意义的字符和不可显示字符;

3、其他字符:用于照原样显示的字符。printf()格式转换说明符:'%X'按实际位数输出十六进制整数。因为m,n都定义为十六进制整数,且m=n,m-=n;的意思是将m与n的差值重新赋给m,所以m为0。 故本题答案为C。

知识点:知识点/数据类型及其运算/C运算符的种类、运算优先级和结合性 152、有以下程序段 int m=0,n=0; char c='a'; scanf(\"%d%c%d\ printf(\"%d,%c,%d\\n\

若从键盘上输入:10A10↙,则输出结果是______。 A:10,A,10 B:10,a,10 C:10,a,0 D:10,A,0 答案:A 评析:

本题主要考查格式输入输出函数scanf()和printf()。

格式控制字符%d用来输入/输出十进制整数,%c用来输入/输出单个字符,在给出的程序中,整型变量m和n初始化为0, 字符变量c初值为字符A,系统按照m、c、n所在的内存地址将输入的m、c、n的值存进去,即把10赋给m,字符A重新赋给字符变量c,10赋给n,所以打印结果是10,A,10。 故本题答案为A。

知识点:知识点/数据类型及其运算/C运算符的种类、运算优先级和结合性 153、有以下程序 main() { int i; for(i=0;i<3;i++) switch(i)

{ case 1: printf(\"%d\ case 2: printf(\"%d\ default: printf(\"%d\ } }

执行后输出的结果是______。 A:011122 B:012 C:012020 D:120 答案:A 评析:

本题的考查点是switch语句。

switch语句在执行时先计算表达式i的值,当表达式i的值与某一个case中的常量表达式的值相等时,就

59

执行该case后面的语句系列,接着再执行后面各个case中的语句序列,一直到执行完default后面的语句序列,然后结束switch。如果所有case中的常量表达式的值都没有与表达式i的值相匹配,就只执行default后面的语句序列。break语句与switch语句配合使用,可以强行控制程序流程退出switch。

由于本题没有与break语句配合使用,因此在执行完\"case 1\"以后,还要继续执行\"case2\"和\"defult\"。 当i=0时,执行defult语句,输出0;

当i=1时,执行case 1语句,输出1,因为没有break控制程序流程退出,所以继续执行下面的语句,输出11,以此类推。

故本题答案为A。

知识点:知识点/选择结构程序设计/选择结构的嵌套 154、有以下程序 main()

{ int i=1,j=1,k=2;

if((j++||k++)&&i++) printf(\"%d,%d,%d\\n\}

执行后输出的结果是______。 A:1,1,2 B:2,2,1 C:2,2,2 D:2,2,3 答案:C 评析:

本题的考查点是逻辑表达式。

形如(表达式 1)&&(表达式 2)&&...的逻辑表达式在计算时,先计算表达式1,如果其值是逻辑\"真\"或非0,就接着计算表达式2,直至计算到第一个为逻辑\"假\"的表达式时,就可判定整个逻辑表达式为逻辑\"假\",其后的表达式将不被计算。

形如(表达式 1)||(表达式 2)||...的逻辑表达式在计算时,先计算表达式1,如果其值是逻辑\"假\"或0,就接着计算表达式2,直到计算到第一个为逻辑\"真\"的表达式时,就可判定整个逻辑表达式为逻辑\"真\",其后的表达式将不被计算。

根据以上的描述可知,本题中j++值为2,为真,k++不被计算,然后计算i++为2,所以i=2,j=2,k=2。 故本题答案为C。

知识点:知识点/选择结构程序设计/用IF语句实现选择结构 155、有以下程序 main()

{ int a=5,b=4,c=3,d=2; if(a>b>c)

printf(\"%d\\n\ else if((c-1>=d)==1) printf(\"%d\\n\ else

printf(\"%d\\n\}

执行后输出的结果是______。 A:2

60

B:3 C:4

D:编译时有错,无结果 答案:B 评析:

本题的考查点是关系表达式和逻辑表达式。

关系表达式用来进行两个数据的比较,比较的结果为逻辑\"真\"或逻辑\"假\"。C语言不提供逻辑型数据,而是用整数0表示逻辑\"假\",即比较不成立;用整数1表示逻辑\"真\",即比较成立。

和关系表达式一样,逻辑表达式的值也是用整数1表示逻辑\"真\",用整数0表示逻辑\"假\"。

本题中'a>b>c'即相当于'(a>b)>c'因为a>b成立,所以其值为1,然后比较1与c的大小,1>c不成立,所以不执行printf语句,然后判断'(c-1>=d)==1'成立,此时执行printf语句,打印d+1=3。 故本题答案为B。

知识点:知识点/选择结构程序设计/用IF语句实现选择结构 156、有以下程序 main()

{ int p[7]={11,13,14,15,16,17,18},i=0,k=0; while(i<7&&p[i]%2){k=k+p[i]; i++;} printf(\"%d\\n\}

执行后输出的结果是______。 A:58 B:56 C:45 D:24 答案:D 评析:

本题的考查点是while循环语句。 while语句是先判断后执行。

i=0时,i<7为真,p[0]%2=11%2=1为真,k=k+p[0]=11; i=1时,i<7为真,p[1]%2=13%2=1为真,k=k+p[1]=11+13=24; i=2时,i<7为真,p[2]%2=14%2=0为假,结束循环。 所以打印输出24。 故本题答案为D。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 157、有以下程序 main() { int i=0,s=0; do{

if(i%2){i++;continue;} i++; s+=i; } while(i<7); printf(\"%d\\n\}

61

执行后输出的结果是______。 A:16 B:12 C:28 D:21 答案:A 评析:

本题的考查点是do-while循环语句。 do-while的一般格式如下所示: do {语句;

}while(测试表达式);

do-while语句是先执行后判断,其执行流程是: 1、 执行循环体;

2、 计算测试表达式,若为非0,转向执行1,否则执行3; 3、 执行do-while后面的语句,即退出do-while循环。

本题中,当i=0时,i%2=0,为假不执行{i++;continue;},接着往下执行i++,此时i=1,s=s+i=1,因为i=1符合条件i<7继续循环执行,i=1时以此类推,直到i>=7时结束循环。最后得出s=16。 故本题答案为A。

知识点:知识点/循环结构程序设计/WHILE和DO WHILE循环结构 158、有以下程序 int f1(int x,int y)

{ return x>y?x:y; } int f2(int x,int y)

{ return x>y?y:x; } main()

{int a=4,b=3,c=5,d,e,f; d=f1(a,b); d=f1(d,c); e=f2(a,b); e=f2(e,c); f=a+b+c-d-e;

printf(\"%d,%d,%d\\n\}

执行后输出的结果是______。 A:3,4,5 B:5,3,4 C:5,4,3 D:3,5,4 答案:C 评析:

本题的考查点是条件运算符。

条件运算符要求有三个操作对象,称三目(元)运算符,它是C语言中唯一的一个三目运算符。条件表达式的一般形式为

表达式1?表达式2:表达式3

条件运算符的执行顺序:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整

62

个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值。 弄清以上几点,本题也就不难了。 本题答案为C。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 159、若有一些定义和语句 #include int a=4,b=3,*p,*q,*w;

p=&a; q=&b; w=q; q=NULL; 则以下选项中错误的语句是______。 A:*q=0; B:w=p; C:*p=va; D:*p=*w; 答案:A 评析:

本题的考查点是指针变量的引用。

指针变量中只能存放地址(指针),不要将一个整型(或任何其它非地址类型的数据)赋给一个指针变量。所以选项A是错误的语句。 故本题答案为A。

知识点:知识点/指针/指针与指针变量的概念,指针与地址运算符 160、有以下程序 int *f(int *x,int *y) { if(*x<*y) return x; else

return y; } main()

{ int a=7,b=8,*p,*q,*r; p=&a; q=&b; r=f(p,q);

printf(\"%d,%d,%d\\n\}

执行后输出结果是______。 A:7,8,8 B:7,8,7 C:8,7,7 D:8,7,8 答案:B 评析:

本题的考查点是指针变量作为函数参数。

f是用户定义的函数,它的作用是返回变量值小的那个。f函数的两个形参x,y是指针变量。程序开始执行时,先初始化a和b的值,然后将a,b的地址分别赋给指针变量p和q,即使p指向a,q指向b。接着执行f函数,注意p和q是指针变量,在函数调用开始时,实参变量将它的值传送给形参变量。采取的依然是\"值传

63

递\"方式。因此虚实结合后形参x的值为&a,y的值为&b。这时x和p都指向变量a,y和q都指向b。接着执行f函数的函数体,输出*x和*y小的那个值。函数调用结束后,x和y不复存在,最后在main函数中输出的*r的值即为a和b小的那个值,即7,*p,*q的值未变。 故本题答案为B。

知识点:知识点/选择结构程序设计/用IF语句实现选择结构 161、有以下程序 main()

{ int m[][3]={1,4,7,2,5,8,3,6,9}; int i,j,k=2; for(i=0;i<3;i++)

{ printf(\"%d \ } }

执行后输出结果是______。 A:4 5 6 B:2 5 8 C:3 6 9 D:7 8 9 答案:C 评析:

本题的考查点是二维数组的应用。

m[][3]即为定义的一个3行3列的二维数组,因为k=2所以打印的为第二行的数组元素,即m[2][0],m[2][1],m[2][2]。为3 6 9。 故本题答案为C。

知识点:知识点/循环结构程序设计/FOR循环结构 162、有以下程序 main()

{ char s[]=\"\\n123\\\\\";

printf(\"%d,%d\\n\}

执行后输出结果是______。 A:赋初值的字符串有错 B:6,7 C:5,6 D:6,6 答案:C 评析:

本题的考查点是字符和转义字符的判断。

函数strlen()用于计算字符串的长度,所给的字符串s中,'\\n'是转义字符,代表一个\"换行\"符,'\\\\'表示一个反斜杠字符'\\',所以字符串s的长度为5;sizeof()函数是用来计算字符串所占内存的字节数,5个字符在内存中占5个字节,由于C规定,在每一个字符串末尾加一个字符结束标志'\\0'以便系统判断字符串是否结束,所以该字符串s所占内存的字节数为6,最终打印输出5,6。 故本题答案为C。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 163、阅读以下函数

fun(char *sl,char *s2) { int i=0;

while(sl[i]==s2[i]&&s2[i]!='\\0') i++; return(sl[i]=='\\0'&&s2[i]=='\\0'); }

此函数的功能是______。 A:将s2所指字符串赋给s1

B:比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0 C:比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0 D:比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0 答案:C 评析:

本题的考查点是字符串的比较。

字符串的比较规则是对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到'\\0'为止,若全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准,该函数就实现了此功能。 故本题答案为C。

知识点:知识点/循环结构程序设计/WHILE和DO WHILE循环结构 1、设有如下说明 typedef struct

{ int n; char c; double x;}STD;

则以下选项中 ,能正确定义结构体数组并赋初值的语句是______。 A:STD tt[2]={{1,'A',62},{2,'B',75}}; B:STD tt[2]={1,\"A\ C:struct tt[2]={{1,'A'},{2,'B'}};

D:struct tt[2]={{1,\"A\答案:A 评析:

本题的考查点是类型定义typedef的使用。

该题定义了一个新结构体类型STD,包含三个结构体成员:整型变量n、字符型变量c、双精度型变量x。用STD来定义变量或数组的使用方法是新结构体类型名加上变量名或数组名,因此选项C、D不正确;字符常量是由一对单引号括起来的单个字符,而字符串常量是一对双引号括起来的字符序列,所以选项B不正确。

故本题答案为A。

知识点:知识点/结构体(即\"结构\")与共用体(即\"联合\")/结构体和共用体类型数据的定义方法和引用方法

165、有以下程序 main()

{ union{ unsigned int n; unsigned char c; }ul; ul.c='A';

printf(\"%c\\n\}

65

执行后输出结果是______。 A:产生语法错 B:随机值 C:A D:65 答案:C 评析:

本题的考查点是共用体类型数据的特点。

共用体类型数据的结构特点是几个不同的变量共占同一段内存,即共用体变量的地址和它的各成员的地址都是同一地址,共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就失去作用。所以该程序中有效的赋值语句是ul.c='A';,最终打印出来的是字符A。 故本题答案为C。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 166、有以下程序 main()

{ char str[]=\"xyz\ while(*ps) ps++;

for(ps--;ps-str>=0;ps--) puts(ps);} 执行后输出结果是______。 A:yz xyz B:z yz C:z yz xyz D:x xy xyz 答案:C 评析:

本题的考查点是指向字符串的指针变量。

程序定义了一个字符指针变量ps,并把字符串的首地址赋给它,要注意的是该指针变量只能指向一个字符变量或其它字符类型数据,不能同时指向多个字符数据。程序执行while循环后,ps指向字符z,接着执行for循环,ps--;此时ps指向字符z,然后地址减1,判断出条件ps-str>=0为真,通过字符串输出函数puts输出ps,即z,继续循环,ps--;,此时ps指向字符y,然后地址减1,判断出条件为真,输出字符串yz,继续循环判断,最后输出字符串xyz。 故本题答案为C。

知识点:知识点/循环结构程序设计/WHILE和DO WHILE循环结构 167、有以下程序 main()

{int a[][3]={{1,2,3},{4,5,0}},(*pa)[3],i; pa=a; for(i=0;i<3;i++)

66

if(i<2) pa[1][i]=pa[1][i]-1; else pa[1][i]=1; printf(\"%d\\n\}

执行后输出结果是______。 A:7 B:6 C:8 D:无确定值 答案:A 评析:

本题的考查点是二维数组和指针数组的应用。

在所给的程序中,pa指向二维数组首地址a,接着执行下面的for循环,当i=0或i=1时,数组元素 pa[1][i]的值减1,当 i=2时,数组元素pa[1][i]的值为1,此时得到新的二维数组a[][3]={{1,2,3},{3,4,1}},最终打印结果就是2+4+1=7。 故本题答案为A。

知识点:知识点/循环结构程序设计/FOR循环结构 168、以下叙述中不正确的是______。

A:C语言中的文本文件以ASCII码形式存储数据 B:C语言中对二进制位的访问速度比文本文件快 C:C语言中,随机读写方式不使用于文本文件 D:C语言中,顺序读写方式不使用于二进制文件 答案:D 评析:

本题主要考查C文件的基本概念。

C语言把文件看作是一个字符(字节)的序列,根据数据组织形式可分为ASCII文件(又称文本文件)和二进制文件,即一个C文件可以看成是一个字节流或二进制流,对于流式文件,可以进行顺序读写,也可以进行随机读写,关键在于控制文件的位置指针,由于文本文件要发生字符转换,计算位置时往往会发生混乱,访问速度受到影响,所以随机读写方式不使用于文本文件。 故本题答案为D。

知识点:知识点/C语言的结构/C语言的风格 169、以下叙述中正确的是______。

A:C程序中注释部分可以出现在程序中任意合适的地方 B:花括号\"{\"和\只能作为函数体的定界符

C:构成C程序的基本单位是函数,所有函数名都可以由用户命名 D:分号是C语句之间的分隔符,不是语句的一部分 答案:A 评析:

本题的考查点是C程序设计的初步知识。

选项A,C程序中/*……*/表示注释部分,注释只是给人看的,对编译和运行不起作用,可以加在程序中任何位置,所以选项A是对的;

选项B,函数体是函数的主体,从左花括号开始,到与之匹配的右花括号结束。

选项C,一个C程序中必须有且只能有一个由\"main\"命名的主函数,其他函数由用户自行命名。 选项D,C语句是组成C程序的基本单位,具有的程序功能。所有的C语句都以分号结尾。

67

故本题答案为A。

知识点:知识点/C语言的结构/源程序的书写格式 170、以下选项中可作为C语言合法整数的是______。 A:10110B B:0386 C:0Xffa D:x2a2 答案:C 评析:

本题的考查点是C语言中的整型常数。

整型常数可以用十进制、八进制或十六进制表示,并分为有符号数、无符号数和长整数。由此可知选项A错;

选项B,用0386表示八进制错误,因为八进制数为0-7八个数字,含有8是不对的; 选项D,数字前加\"0x\"表示十六进制数,所以D也不对。 故本题答案为C。

知识点:知识点/数据类型及其运算/C的数据类型及其定义方法 171、以下不能定义为用户标识符的是______。 A:scanf B:Void C:_3com_ D:int 答案:D 评析:

本题的考查点是用户标识符的辨别。

标识符是C语言中用来表示变量名、数组名、函数名、指针名、结构名、联合名、枚举常数名、用户定义的数据类型名、语句标号等用途的字符序列。

标识符由1~32个字符组成,第一个字符必须是字母或下划线,后面的字符可以是字母、数字或下划线。标识符不能与C关键字相同,并区分大小写。

由上可知选项D是不对的,因为int是C语言中的关键字。 故本题答案为D。

知识点:知识点/数据类型及其运算/C的数据类型及其定义方法 172、有以下程序 main()

{ int a; char c=10; float f=100.0; double x; a=f/=c*=(x=6.5);

printf(\"%d %d %3.1f %3.1f\\n\}

程序运行后的输出结果是______。 A:1 65 1 6.5 B:1 65 1.5 6.5 C:1 65 1.0 6.5 D:2 65 1.5 6.5 答案:B

68

评析:

本题的考查点是复合的赋值运算符。

在赋值符\"=\"之前加上其它运算符,可以构成复合的运算符。运算方向为自右至左。 本题中先计算c的值,c=c*(x=6.5)=10*6.5=65; 接下来计算f的值,f=f/c=100.0/65=1.5;

最后计算a的值,a=f,因为a为整数,取f的整数部分即为1。 故本题答案为B。

知识点:知识点/数据类型及其运算/C运算符的种类、运算优先级和结合性 173、以下选项中非法的表达式是______。 A:0<=x<100 B:i=j==0 C:(char)(65+3) D:x+1=x+1 答案:D 评析:

本题的考查点是表达式的运用。

表达式是程序中使用最频繁、最大量出现的计算手段,程序中要求计算机进行某种计算或运算主要是通过表达式实现的。不同的表达式进行不同的运算,达到不同的目的。

选项A中,0<=x<100在C语言中是一个合法的关系表达式,但它并不代表数学式0<=x<100。在计算0<=x<100时,根据从左到右的结合性,先计算0<=x,其结果只能是0或1,然后再比较0<100或1<100。 选项B中,根据运算符的优先级,先判断j==0是否成立,其结果只能是0或1,然后再将0或1赋给i。 选项C中,(char)(65+3)为类型强制转换,将数值型数据转换为字符型。

选项D中,赋值运算符的作用是将一个数据赋给一个变量,此项中等号左半部分不合要求。 故本题答案为D。

知识点:知识点/数据类型及其运算/C表达式类型和求值规则 174、有以下程序 main()

{ int a=1,b=2,m=0,n=0,k; k=(n=b>a)||(m=a程序运行后的输出结果是______。 A:0,0 B:0,1 C:1,0 D:1,1 答案:C 评析:

本题的考查点是逻辑或运算。

a||b 若a、b之一为真,则a||b为真,但如果a为真,则b不用考虑,也就是无需计算,仍为原值。 结合本题,因为b>a为真,即n=1,所以m不用计算仍为原值,且k值为1。 故本题答案为C。

知识点:知识点/数据类型及其运算/C运算符的种类、运算优先级和结合性

69

175、设变量x为float型且已赋值,则以下语句中能将x中的数值保留到小数点后两位,并将第三位四舍五入的是______。

A:x=x*100+0.5/100.0; B:x=(x*100+0.5)/100.0 C:x=(int)(x*100+0.5)/100.0; D:x=(x/100+0.5)/100.0; 答案:C 评析:

本题的考查点是实型数据。

对于此类题目,我们可用排除法,题目要求保留到小数点后两位,选项A、B、D都不合题面要求。C答案x=(int)(x*100+0.5)/100.0中,x为float型,所以小数点后有6位小数,x*100后有4位,x*100+0.5仍为4位,且在这里已经将第三位四舍五入了,取整后再除以100.0,结果中小数点后为2位。 故本题答案为C。

知识点:知识点/基本语句/表达式语句,空语句,复合语句

176、有定义语句:int a=1,b=2,c=3,x;,则以下选项中各程序段执行后,x的值不为3的是______。 A:if (c本题的考查点是if语句。

if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的几种操作之一。 选项A,因为前面两个条件都不满足,所以执行最后一种操作,x=3; 选项B,a<3成立,执行第一种操作,x=3;

选项C,a<3成立,执行第一种操作,x=3;a<2成立,执行第二种操作,此时x=2;a<1不成立,最后的不执行,所以执行此段程序后x=2;

选项D,a知识点:知识点/选择结构程序设计/用IF语句实现选择结构 177、有以下程序 main() { int s=0,a=1,n; scanf(\"%d\ do

70

{s+=1; a=a-2;} while(a!=n); printf(\"%d\\n\}

若要使程序的输出值为2,则应该从键盘给n输入的值是______。 A:-1 B:-3 C:-5 D:0 答案:B 评析:

本题的考查点是do-while语句 此语句的一般形式为: do 语句 while (表达式)

其特点为:先执行语句,后判断表达式。

它是这样执行的:先执行一次指定的内嵌的语句,然后判别表达式,当表达式的值为非零(\"真\")时,返回重新执行该语句,如此反复,直到表达式的值等于0为止,此时循环结束。

当n=-1时,s+=1,s=1; a=a-2=-1;a!=n不成立,结束循环,此时s值为1,不符合题意;

当n=-3时,s+=1,s=1; a=a-2=-1;a!=n成立,继续循环,s=s+1=2,a=a-2=-3;a!=n不成立,此时s值为2,符合题意;

故本题答案为B。

知识点:知识点/循环结构程序设计/WHILE和DO WHILE循环结构

178、若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)。 s=a;

for(b=1;b<=c;b++) s=s+1;

则与上述程序段功能等价的赋值语句是______。 A:s=a+b; B:s=a+c; C:s=s+c; D:s=b+c; 答案:B 评析:

本题的考查点是赋值语句。

本题s的初值是a,然后b从1循环到c,每循环一次,s都加1,也就是到了c,加了1*c,所以程序所实现的功能实际上是s=a+c。 故本题答案为B。

知识点:知识点/基本语句/复合语句 179、有以下程序 main() { int k=4,n=0; for( ; nif(n%3!=0) continue;

71

k--; }

printf(\"%d,%d\\n\}

程序运行后的输出结果是______。 A:1,1 B:2,2 C:3,3 D:4,4 答案:C 评析:

本题的考查点是循环和continue语句。

continue语句是结束本次循环。n从0开始循环,判断n%3!=0是否成立,为真,跳出循环,继续判断,为假,执行 k--,并结束循环,输出k、n的值。

n等于0、1、2时,都跳出循环继续判断,当n=3时,n%3!=0为假,执行k--,k的值变为3。 故本题答案为C。

知识点:知识点/循环结构程序设计/CONTINUE语句和BREAK语句 180、以下选项中不能正确把cl定义成结构体变量的是______。 1、typedef struct {int red; int green; int blue; } COLOR; COLOR cl; 2、struct color cl { int red; int green; int blue; }; 3、struct color { int red; int green; int blue; }cl; 4、struct {int red; int green; int blue; }cl; A:1 B:2 C:3 D:4 答案:B 评析:

72

本题的考查点是结构体变量的定义。

将一个变量定义为标准类型与定义为结构体类型不同之处在于:后者不仅要求指定变量为结构体类型,而且要求指定为某一特定的结构体类型(例如,struct color),不能只指定结构体名。其一般形式为\" struct 结构体名 {

成员表列 }变量名表列;

其中可以不出现结构体名,答案D就是缺省结构体名的情况。而变量名列表必须放在成员列表后面,所以B答案不能正确将c1定义为结构体变量。 故本题答案为B。

知识点:知识点/结构体(即\"结构\")与共用体(即\"联合\")/结构体和共用体类型数据的定义方法和引用方法

181、已定义以下函数 fun(int *p) { return *p; }

该函数的返回值是______。 A:不确定的值 B:形参p中存放的值

C:形参p所指存储单元中的值 D:形参p的地址值 答案:C 评析:

本题的考查点是函数的返回值。

本题函数中形参为*p,它是一个指针变量,函数调用后,返回的是p所指向的存储单元里的值。 故本题答案为C。

知识点:知识点/指针/返回指针值的指针函数

182、若有定义:int *p[3];,则以下叙述中正确的是______。 A:定义了一个基类型为int的指针变量p,该变量具有三个指针

B:定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针 C:定义了一个名为*p的整型数组,该数组含有三个int类型元素

D:定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素 答案:B 评析:

本题的考查点是指针数组。

一个数组,其元素均为指针类型数据,称为指针数组,也就是说,指针数组中的每一个元素都是指针变量。

int *p[3]表示此数组是指针类型的,每个数组元素(指针变量)都可指向一个整型的指针变量。 故本题答案选B。

知识点:知识点/指针/指针数组,指向指针的指针,MAIN函数的命令行参数

183、以下程序中函数scmp的功能是返回形参指针s1和s2所指字符串中较小字符串的首地址。 #include #include

char *scmp(char*s1,char*s2) { if (strcmp(s1,s2)<0)

73

return(s1); else return(s2); } main()

{ int i; char string[20],str[3][20]; for(i=0;i<3;i++) gets(str[i]);

strcpy(string,scmp(str[0],str[1]));/*库函数strcpy对字符串进行复制*/ strcpy(string,scmp(string,str[2])); printf(\"%s\\n\}

若运行时依次输入:abcd、abba和abc三个字符串,则输出结果为______。 A:abcd B:abba C:abc D:baca 答案:B 评析:

本题的考查点是返回指针值的函数。

一个函数可以带回一个整型值、字符值、实型值等,也可以带回指针型的数据,即地址。在main函数中,分别定义了一个一维和二维数组,通过循环,gets(str[i])是从终端输入一个字符串到字符数组,并且得到一个函数值,该函数值是字符数组的起始地址。

strcmp(字符串1,字符串2)函数的作用是比较字符串1和字符串2。比较结果由函数值带回。如果字符串1=字符串2,函数值为0;如果字符串1>字符串2,函数值为一正整数;如果字符串1<字符串2,函数值为一负整数。

所以scmp函数的作用是比较s1和s2的大小,对函数的返回值进行判断,如果字符串1<字符串2,则返回字符串1的值,反之返回字符串2的值。所以main函数里scmp(str[0],str[1])的返回值应该是abba,strcpy(string,scmp(str[0],str[1]))再把这个返回值复制到string里,所以这时string为abba。在执行

strcpy(string,scmp(string,str[2])),同样scmp(string,str[2])时比较abba和abc的值,返回值为abba,所以再次复制到string里,所以最后string的值为abba。 故本题答案为B。

知识点:知识点/指针/返回指针值的指针函数 184、有以下程序 main()

{ int x=3, y=2, z=1; printf(\"%d\\n\}

程序运行后的输出结果是______。 A:3 B:2 C:1 D:0 答案:D 评析:

本题的考查点是位运算符的知识点。

74

&是\"按位与\"运算符,参加运算的两个运算量的相应位都为1,则该位的结果值为1,否则为0。~是\"取反\"运算符,用来对一个二进制数按位取反,即将0变1,1变0。本题x/y&~z,x/y的值为1,~z的值为0,所以进行&运算后,整个表达式的值为0。 故本题答案为D。

知识点:知识点/位运算/简单的位运算

185、有以下结构体说明和变量定义,如下图所示,指针p、q、r分别指向一个链表中的三个连续结点。 struct node { int data;

struct node *next; }*p,*q,*r;

data next data next data next ┌─┬─┐ ┌─┬─┐ ┌─┬─┐ ─→│ │ ┼→│ │ ┼→│ │ ┼→ └─┴─┘ └─┴─┘ └─┴─┘ ↑p ↑q ↑r

现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是______。 A:r->next=q;q->next=r->next;p->next=r; B:q->next=r->next;p->next=r;r->next=q; C:p->next=r;q->next=r->next;r->next=p; D:q->next=r->next;r->next=q;p->next=r; 答案:A 评析:

本题的考查点是指向结构体变量的指针以及用指针处理链表。

一个结构体变量的指针就是该变量所占据的内存字段的起始地址。可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。指针变量也可以用来指向结构体数组的元素。

在C语言中q->next相当于(*q).next。即:q所指向的是结构体变量中的next成员。

链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它根据需要开辟内存单元。链表中的各元素在内存中可以不是连续存放的。所以必须利用指针变量才能实现。即:一个结点中应包括一个指针变量,用它存放下一节点的地址。

r->next=q表示让q指向新开辟的节点,r指向链表中最后一个节点,把r所指的节点连接在q所指的节点后面。

同样,p->next=r表示让r指向新开辟的节点,p指向链表中最后一个节点,把p所指的节点连接在r所指的节点后面。那么在A中,执行r->next=q后,r->next指向了q。此时第2句相当于q->next=q;所以q的下一个结点指向了自己,而不是指向原来r的下一个结点。 故本题答案为A。

知识点:知识点/结构体(即\"结构\")与共用体(即\"联合\")/用指针和结构体构成链表 186、以下叙述中正确的是______。

A:C语言的源程序不必通过编译就可以直接运行

B:C语言中的每条可执行语句最终都将被转换成二进制的机器指令 C:C语言程序经编译形成的二进制代码可以直接运行 D:C语言中的函数不可以单独进行编译 答案:B 评析:

75

用Turbo C运行C程序的步骤先将Turbo C装入磁盘。 1、调用Turbo C程序;

2、编辑源文件。根据需要修改输入或修改源程序;

3、编译源程序,编译时先生成一个汇编语言程序,然后由编译程序再将汇编语言程序翻译成机器指令程序,即目标程序。 4、执行程序。 故本题答案为B。

知识点:知识点/C语言的结构/源程序的书写格式 187、以下符合C语言语法的实型常量是______。 A:1.2E0.5 B:3.14159E C:.5E-3 D:E15 答案:C 评析:

实数在C语言中又称浮点数。实数有两种表示形式:

1、十进制数形式。它由数字和小数点组成(注意必须有小数点)。0.123、.123、123.0、123.、0.0都是十进制数形式。

2、指数形式。如123e3或123E3都代表123*10^3。但注意字母e(或E)之前必须有数字,且e后面指数必须为整数,如e3、2.1e3.5、.e3、e等都不是合法的指数形式。 故本题答案为C。

知识点:知识点/数据类型及其运算/C的数据类型及其定义方法 188、以下4组用户定义标识符中,全部合法的一组是______。 ① ② ③ ④ _main If txt int enclude -max REAL k_2 sin turbo 3COM _001 A:① B:② C:③ D:④ 答案:A 评析:

C语言规定标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。 ②中的-max不符合要求,'-'既不是字母、数字,也不是下划线; ③中的3COM第一个字符为数字,不合法; ④中的int和C语言的关键字重名,不合法。 故本题答案为A。

知识点:知识点/C语言的结构/C语言的风格

1、若以下选项中的变量已正确定义,则正确的赋值语句是______。 A:x1=26.8%3; B:1+2=x2; C:x3=0x12; D:x4=1+2=3;

76

答案:C 评析:

正确的赋值语句中的左值不能为常量或表达式,右值不能为变量或表达式。 选项A中右值为表达式,明显是错误的; 选项B中,左值为表达式,明显是不对的。

选项D中,表达式x4=1+2=3,是先执行赋值表达式1+2=3,这本身就是错误的,1+2不是变量,不能赋值。

故本题答案为C。

知识点:知识点/基本语句/表达式语句,空语句,复合语句

190、设有定义:float a=2,b=4,h=3;,以下C语言表达式中与代数式1/2(a+b)h计算结果不相符的是______。 A:(a+b)*h/2 B:(1/2)*(a+b)*h C:(a+b)*h*1/2 D:h/2*(a+b) 答案:B 评析:

两个整数相除结果为整数,如5/3的结果为1,舍去小数部分。如果参加运算的两个数中有一个数为实数,则结果是double型,因为所有实数都按double型进行运算。根据运算符优先级,先计算括号内的,故选项B中(1/2)=0,整个表达式的值为0。 故本题答案为B。

知识点:知识点/数据类型及其运算/C表达式类型和求值规则 191、有以下程序 main()

{ int x=102,y=012; printf(\"%2d,%2d\\n\}

执行后输出结果是______。 A:10,01 B:02,12 C:102,10 D:02,10 答案:C 评析:

y=012表示将八进制数12赋给变量y。d格式符,用来输出十进制整数。%md,m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。本题是将八进制数12也输出为十进制数,八进制数12转换为十进制数为10,所以输出结果为102,10。 故本题答案为C。

知识点:知识点/基本语句/复合语句

192、以下4个选项,不能看作一条语句的是______。 A:{;}

B:a=0,b=0,c=0; C:if(a>0);

D:if(b==0)m=1;n=2; 答案:D

77

评析:

if语句是用来判定所给的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。 在if和else后面可以只含一个内嵌的操作语句,也可以有多个操作语句,此时用花括号\"{}\"将几个语句括起来成为一个复合语句。选项D中没有将两个操作语句括起来,不能看作一条语句。 故本题答案为D。

知识点:知识点/基本语句/复合语句

193、以下程序段中与语句k=a>b?(b>c?1:0):0;功能等价的是______。 A:if((a>b)&&(b>c))k=1; else k=0;

B:if((a>b)||(b>c))k=1; else k=0;

C:if(a<=b) k=0; else if(b<=c) k=1; D:if(a>b) k=1; else if(b>c) k=1; else k=0; 答案:A 评析:

条件表达式的一般形式为:表达式1?表达式2:表达式3

1、条件运算符的执行顺序为:先求解表达式1,若非0则求解表达式2,此时表达式2的值就是整个条件表达式的值,若表达式1的值为0,则求解表达式3,此时表达式3的值就是整个条件表达式的值。 2、条件运算符优先于赋值运算符。 3、条件运算符的结合方向为\"自右至左\"。

综上所述,本题是先比较a,b,如果a>b成立则执行(b>c?1:0),如果b>c成立则结果为1,其它情况则为0。也就是说只有a>b与 b>c同时成立时k值才能为1。 故本题答案为A。

知识点:知识点/数据类型及其运算/C表达式类型和求值规则 194、有以下程序 main() { char k; int i; for(i=1;i<3;i++) { scanf(\"%c\ switch(k)

{ case '0': printf(\"another\\n\"); case '1': printf(\"number\\n\"); } } }

程序运行时,从键盘输入:01↙,程序执行后的输出结果是______。 A:another number B:another number

78

another C:another number number D:number number 答案:C 评析:

switch语句的一般形式如下: switch(表达式)

{case 常量表达式1:语句1; case 常量表达式2:语句2; . . .

case 常量表达式n:语句n; default :语句n+1; }

switch语句执行完一个case后面的语句后,流程控制转移到下一个case继续执行。\"case 常量表达式\"只是起语句标号作用,并不是在该处进行条件判断。在执行switch语句时,根据switch后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断。如果想在执行一个case分支后,使流程跳出switch结构,即终止switch语句的执行。可以用一个break语句来达到此目的。本题中没有使用break终止switch语句的执行,本题当k为0时,执行完case '0'后将继续执行case '1'。 故本题答案为C。

知识点:知识点/选择结构程序设计/用SWITCH语句实现多分支选择结构 195、有以下程序 main()

{ int x=0,y=5,z=3;

while(z-->0&&++x<5) y=y-1; printf(\"%d,%d,%d\\n\}

程序执行后的输出结果是______。 A:3,2,0 B:3,2,-1 C:4,3,-1 D:5,-2,-5 答案:B 评析:

当x=0,y=5,z=3时,z-->0&&++x<5成立,执行y=y-1;此时,y=5-1=4,z=z-1=2,x=x+1=1。执行后条件仍然成立,继续执行y=y-1,此时y=y-1=3,z=1,x=2,以此类推,直至条件不成立。当z为0时条件不成立,执行后z为-1。

故本题答案为B。

知识点:知识点/循环结构程序设计/WHILE和DO WHILE循环结构 196、有以下程序

79

main() { int i,s=0;

for(i=1;i<10;i+=2) s+=i+1; printf(\"%d\\n\}

程序执行后的输出结果是______。 A:自然数1~9的累加和 B:自然数1~10的累加和 C:自然数1~9中奇数之和 D:自然数1~10中偶数之和 答案:D 评析:

通过for(i=1;i<10;i+=2)可知,i为从1开始的小于10的奇数,即1,3,5,7,9,i+1即为2,4,6,8,10。也就是自然数1到10中的偶数,s+=i+1就是累加这几个偶数。 故本题答案为D。

知识点:知识点/循环结构程序设计/FOR循环结构 197、有以下程序 main() { int i,n=0; for( i=2;i<5;i++) {do

{ if(i%3) continue; n++; }while(!i); n++; }

printf(\"n=%d\\n\}

程序执行后输出结果是______。 A:n=5 B:n=2 C:n=3 D:n=4 答案:D 评析:

当i=2时,i%3为真,继续执行n++;此时n=1,!i为假,结束while循环,执行n++,此时n为2。 当i=3时,i%3=0,跳出循环。

当i=4时,i%3=1为真,继续执行n++,此时n为3,!i为假,结束while循环,继续往下执行n++,此时n为4。

故本题答案为D。

知识点:知识点/循环结构程序设计/WHILE和DO WHILE循环结构 198、若程序中定义了以下函数 double myadd(double a,double b) {return(a+b);}

80

并将其放在调用语句之后,则在调用之前应该对函数进行说明,以下选项中错误的说明是______。 A:double myadd(double a, b); B:double myadd(double,double); C:double myadd(double b, double a); D:double myadd(double x, double y); 答案:A 评析:

对函数的\"定义\"和\"说明\"不是一回事。\"定义\"是指对函数功能的确立,包括指定函数名,函数值类型、形参及其类型、函数体等,它是一个完整的、的函数单位。而\"说明\"则是对已定义的函数的返回值进行类型说明(或称\"申明\"),它只包括函数名、函数类型、以及一个空的括弧,不包括形参和函数体。对被调函数进行说明的作用是告诉系统:在本函数中将要用到的某函数是XX类型。也就是说明该函数的返回值的类型,以便在主调函数中按此类型对函数值作相应的处理。

本题选项A中,对变量b的类型没有说明,默认的为整型,不合题意。 故本题答案为A。

知识点:知识点/函数/函数的定义方法 199、有以下程序段

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b; b=p[5];

b中的值是______。 A:5 B:6 C:8 D:9 答案:D 评析:

int *p中p为指向整型数据的指针变量,*p为指针变量p所指向的变量。指针变量中只能存放地址(指针),本题中p存放的是a[3]的地址,即p指向数组{4,5,6,7,8,9,10},b=p[5]=9。 故本题答案为D。

知识点:知识点/指针/指针数组,指向指针的指针,MAIN函数的命令行参数 200、设有以下语句 typedef struct S { int g; char h;} T;

则下面叙述中正确的是______。 A:可用S定义结构体变量 B:可以用T定义结构体变量 C:S是struct类型的变量 D:T是struct S类型的变量 答案:B 评析:

除了可以直接使用C提供的标准类型名(如int、char、float、double、long等)和自己定义的结构体、共用体、指针、枚举类型外,还可以用typedef定义新的类型名来代替已有的类型名。如果在一个程序中,一个整型变量用来计数,可以: typedef int COUNT; COUNT i,j;

81

即将变量i,j定义为COUNT类型,而COUNT等价于int,因此i,j是整型。但在程序中将i、j定为COUNT类型,可以使人更一目了然地知道它们是用于计数的。 可以定义结构体类型: typedef struct {int month; int day; int year; }DATE;

定义新类型名DATE,它代表上面定义的一个结构体类型。这时就可以用DATE定义变量: DATE birthday;(不要写成struct DATE birthday;) DATE *p;(p为指向此结构体类型数据的指针)

综上所述,结合本题可知,T是所定义的新的类型名,它代表上面定义的一个结构体类型。这时就可以用T定义变量。 故本题答案为B。

知识点:知识点/结构体(即\"结构\")与共用体(即\"联合\")/结构体和共用体类型数据的定义方法和引用方法

201、有以下程序 struct STU{ char name[10]; int num; };

void f1(struct STU c)

{struct STU b={\"LiSiGuo\ c=b; }

void f2(struct STU *c)

{struct STU b={\"SunDan\ *c=b; } main()

{struct STU a={\"YangSan\ f1(a);f2(&b);

printf(\"%d %d\\n\}

执行后输出结果是______。 A:2041 2044 B:2041 2043 C:2042 2044 D:2042 2043 答案:A 评析:

f2函数传递的是变量的地址,可以实现数据的交换,而f1函数中是传递的值,执行完f1后,c的值是变了,但main函数中的a的值并未变化。也就是说由于\"单向传送\"的\"值传递\"方式,形参值的改变无法传给实参。

82

故本题答案为A。

知识点:知识点/结构体(即\"结构\")与共用体(即\"联合\")/用指针和结构体构成链表 202、有以下程序 main()

{ unsigned char a,b; a=4|3; b=4&3;

printf(\"%d %d\\n\}

执行后输出结果是______。 A:7 0 B:0 7 C:1 1 D:43 0 答案:A 评析:

\"按位与\"运算符(&)

参加运算的两个运算量,如果两个相应的位都为1,则该位的结果值为1,否则为0。 \"按位或\"运算符(|)

两个相应位中只要有一个为1,该位的结果为1。 4转换为二进制数为0100 3转换为二进制数为0011

4|3=0111即7,4&3=0000,即0。 故本题答案为A。

知识点:知识点/位运算/位运算符的含义及使用 203、下面程序的功能是输出以下形式的金字塔图案: * *** ***** ******* main() { int i,j;

for(i=1;i<=4;i++)

{ for(j=1;j<=4-i;j++)printf(\" \"); for(j=1;j<=______;j++)printf(\"*\"); printf(\"\\n\"); } }

在下划线处应填入的是______。 A:i B:2*i-1 C:2*i+1 D:i+2 答案:B

83

评析:

本题是找出打印*号的条件,从图中我们可以找到规律,第一行一个*,第二行3个,第三行5个……也就是每行中*的个数恰好是行数的2倍减一个,由此不难得出,横线处应当填入2*i-1。 故本题答案为B。

知识点:知识点/循环结构程序设计/循环的嵌套

204、结构化程序由三种基本结构组成,三种基本结构组成的算法______。 A:可以完成任何复杂的任务 B:只能完成部分复杂的任务 C:只能完成符合结构化的任务 D:只能完成一些简单的任务 答案:C 评析:

本题考查的是结构化程序的任务。

C语言的算法是由三种基本结构(顺序结构、选择结构、循环结构)组成的,用三种基本结构组成的程序必然是结构化的程序,结构化的程序完成的是符合结构化的任务。 故本题答案为C。

知识点:知识点/C语言的结构/程序的构成,MAIN函数和其他函数 205、以下定义语句中正确的是______。 A:char a='A'b='B'; B:float a=b=10.0; C:int a=10,*b=&a; D:float *a,b=&a; 答案:C 评析:

本题考查的是变量的初始化。

选项A中,字符型变量a、b中间缺少逗号,如果对多个相同数据类型的变量赋初值,要用逗号隔开;若把选项A看成是对几个变量赋同一个初值的话,显然'A'b不是变量名,所以选项A不正确;选项B中,如果对几个变量赋以同一个初值,不能写成int a=b=c=3;这种形式,而应写成:int a=3,b=3,c=3;,所以选项B也不正确;选项D中,执行b=&a相当于将地址转换成了浮点型,在C语言下提示出错信息\"无效的类型转换\",所以选项D也不正确。 故本题答案为C。

知识点:知识点/数据类型及其运算/C的数据类型及其定义方法 206、有以下定义语句double a,b;int w; long c;

若各变量已正确赋值,则下列选项中正确的表达式是______。 A:a=a+b=b++ B:w%((int)a+b) C:(c+w)%(int)a D:w=a==b; 答案:C 评析:

本题考查的是表达式的赋值。

选项A不可以连续赋值;选项B中类型不匹配,因为\"%\"两边表达式值的类型必需为整型;选项D的后面不能加\";\",因为题目要求的是正确的表达式,而表达式后面不能有\";\",只有语句后面才带\";\"。 故本题答案为C。

84

知识点:知识点/基本语句/表达式语句,空语句,复合语句 207、有以下程序 main()

{ int m=3,n=4,x; x=-m++; x=x+8/++n; printf(\"%d\\n\}

程序运行后的输出结果是______。 A:3 B:5 C:-1 D:-2 答案:D 评析:

本题考查的是混合运算。

此题考的是++在变量前或变量后如何作用。++在变量前和变量后的唯一区别就在于在执行\"++变量\"所在的语句时,是先将变量加1再执行它所在语句还是先执行它所在的语句再使变量加1,当++在变量后时,也就是\"变量++\",那就是先将变量值代入表达式运算后再使变量加1;而\"++变量\"是先使变量加1,再把加1后的结果放入表达式进行运算。这两种情况,在执行完变量所在的语句后,它们在内存中的值都是加过1之后的值了。所以本题中x=-m++执行后x=-3,而执行x=x+8/++n时,必须先将n加1,再代入表达式运算。 所以答案为D。

知识点:知识点/数据类型及其运算/C表达式类型和求值规则 208、有以下程序 main() { char a='a',b; printf(\"%c,\ printf(\"%c\\n\}

程序运行后的输出结果是______。 A:b,b B:b,c C:a,b D:a,c 答案:A 评析:

本题考查的是++运算符。

++在变量前和变量后的唯一区别就在于在执行\"++变量\"所在的语句时,是先将变量加了再执行它所在语句还是先执行它所在的语句再使变量加1,当++在变量后时,也就是\"变量++\",那就是先将变量值代入表达式运算后再使变量加1;而\"++变量\"是先使变量加1,再把加1后的结果放入表达式进行运算。这两种情况,在执行完变量所在的语句后,它们在内存中的值都是加过1之后的值了。所以本题中printf(\"%c,\先将a加,再执行此条语句,输出b,而printf(\"%c\\n\是先输出刚才a的值(刚才的a++表示a=a+1,所以是b),然后再加。 所以答案为A。

85

知识点:知识点/数据类型及其运算/C运算符的种类、运算优先级和结合性 209、下列条件语句中,功能与其他语句不同的是______。 A:if(a) printf(\"%d\\n\ B:if(a==0) printf(\"%d\\n\ C:if (a!=0) printf(\"%d\\n\ D:if(a==0) printf(\"%d\\n\答案:D 评析:

此题考的是if语句中逻辑表达式值的判断。

if(a)表示a值为真(即不等于0都为真)的话,就输出x的值,否则输出y的值;if(a==0)表示如果a与0等值,即a不为真,就输出y的值,否则输出x的值,此与选项A等价;再看选项C,a不等于0,即为真,输出x,否则输出y,与前两个都同意;而选项D恰好与前几项的意思相反,它是a为0时,输出x,为真时输出y。 故本题答案为D。

知识点:知识点/选择结构程序设计/用IF语句实现选择结构 210、有以下程序 main() { char a,b,c,d;

scanf(\"%c,%c,%d,%d\ printf(\"c,%c,%c,%c\\n\}

若运行时从键盘上输入:6,5,65,66↙。则输出结果是______。 A:6,5,A,B B:6,5,65,66 C:6,5,6,5 D:6,5,6,6 答案:A 评析:

本题考查的是格式字符的输入和输出。

将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中,所以它的存储形式与整数的存储形式类似。C语言使字符型数据和整型数据之间可以通用。一个字符数据既可以以字符形式输出,也可以以整数形式输出。以字符形式输出时,需要先将存储单元中的ASCII码转换成相应字符,然后输出;以整数形式输出时,直接将ASCII码作为整数输出。此题变量a,b是以字符型常量输入的,在内存中存储的是字符常量6和5相对应的ASCII码;变量c,d是以整型常量输入的,在内存中存储的就是直接的整型常量65和66;在输出时,因为a,b,c,d都要求以字符形式输出,所以,将字符常量6和5所对应的内存的ASCII码翻译成字符常量为6和5输出,将内存中的整型数65和66对应的字符常量即A和B输出。 所以此题答案为A。

知识点:知识点/基本语句/数据的输入与输出,输入输出函数的调用 211、设有定义语句 int x[6]={2,4,6,8,5,7},*p=x,i;

要求依次输出x数组6个元素中的值,不能完成此操作的语句是______。 A:for(i=0;i<6;i++) printf(\"%2d\ B:for(i=0;i<6;i++) printf(\"%2d\ C:for(i=0;i<6;i++) printf(\"%2d\

86

D:for(i=0;i<6;i++) printf(\"%2d\答案:D 评析:

此题考的是指向数组元素的指针。

*p=x的作用是将x的首地址(即x[0]的地址)赋给指针变量p,那么程序段A当i=0时,*(p++)虽然是先执行括号内的表达式,但括号内表达的++是在p的后面,所以它要先执行p再加,即先取*p(x[0]),再使得p加1,为i=2时取下一个元素作准备。

选项C中因为*和++是处于同一优先级别,而结合方向为自右而左,因此*p++相当于*(p++),所以选项A和选项C都是可以输出6个元素的值的。

选项B,p表示x的首地址即x[0]的地址,p+i则表示x[i]的地址,那么*(p+i)就表示x[i]的值,所以选项C也是可以输出6个元素的值的;选项D由于(*p)++后面的++是使*p的值+1,又因为*p指的是x[0]的值,所以它不能实现地址的依次向下移动,每次循环只是x[0]的值在改变,而p的值并没有丝毫变化,所以它并不能实现6个元素的输出。 故本题答案为D。

知识点:知识点/指针/指针数组,指向指针的指针,MAIN函数的命令行参数 212、有以下程序 #include main()

{int a[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL; *q=*(p+5);

printf(\"%d %d\\n\}

程序运行后的输出结果是______。 A:运行后报错 B:6 6 C:6 11 D:5 10 答案:A 评析:

此题考查的是指针变量赋值。

本题将指针q赋值为空,即指向了空地址,而对空地址所对应的内容赋值*q=*(p+5)是会出错的,所以输出结果会提示Null pointer assignment。 所以此题答案为A。

知识点:知识点/指针/指针数组,指向指针的指针,MAIN函数的命令行参数 213、设有以下定义和语句 int a[3][2]={1,2,3,4,5,6},*p[3]; p[0]=a[1];

则*(p[0]+1)所代表的数组元素是______。 A:a[0][1] B:a[1][0] C:a[1][1] D:a[1][2] 答案:C 评析:

87

此题考的是指向数组元素的指针变量。

*p[3]定义指针p,它由3个指向整型数据的指针元素组成,p[0]=a[1]是将a数组第一行的首地址赋给第0个指针元素,那么p[0]+1就表示a[1]+1即a[1][1]的地址,所以*(p[0]+1)就表示a[1][1]。 故本题答案为C。

知识点:知识点/指针/指针数组,指向指针的指针,MAIN函数的命令行参数 214、有以下程序 main()

{char str[][10]={\"China\ printf(\"%s\\n\}

程序运行后的输出结果是______。 A:China B:Bejing C:ng D:ing 答案:B 评析:

此题考的是指向数组元素的指针变量。

本题首先要知道,C语言中二维数组元素排列的顺序是按行存放,即在内存中先顺序存放第一行的元素,再存放第二行的元素。此题二维数组str[0]前5个元素为''C','h','i','n','a','\\0',第6个元素为'\\0',后4个元素为空字符。紧接着内存单元存放的内容即从str[1][0]到str[1][9]为'B','e','i','j','i','n','g','\\0',第八个元素为'\\0',后两个元素为空字符,执行*p=str后,指针p就指向了二维数组str的首地址,所以p+10就指向了从首地址依次向后的第11个存储单元即字符B的地址,所以输出Beijing,故答案为B。如果此题将*p=str改为(*p)[10]=str;则p+10指的就是str的第10行,如果此时要想输出Beijing,则必需将p+10改为p+1,因为(*p)[10]中的p是行指针,它是指向包含10个元素的一维数组,那么p+1就是加的一行了;而本题的p+1只是移动一个位置,因为此题的p只是一个指针变量。 故本题答案为B。

知识点:知识点/指针/指针数组,指向指针的指针,MAIN函数的命令行参数 215、已有定义:int i,a[10],*p;,则合法的赋值语句是______。 A:p=100; B:p=a[5]; C:p=a[2]+2; D:p=a+2; 答案:D 评析:

本题考查的是指向数组元素的指针变量的定义与赋值。

定义了指针变量p,p存放的是指向内存单元的地址,不允许随便赋值,否则会破坏系统正常工作,故A,B,C答案都是错误的;而D答案中的a+2表示的是a[2]的地址,是可以赋给指针变量p的。 故本题答案为D。

知识点:知识点/基本语句/表达式语句,空语句,复合语句

216、设有定义语句:char c1=92,c2=92;,则以下表达式中值为零的是______。 A:c1^c2 B:c1&c2 C:~c2

88

D:c1|c2 答案:A 评析:

本题考的是位运算。

\"^\"是按位异或运算,当对应位上的二进制数值相同时,异或的结果为0,对应位上的二进制数值不同时,异或的结果为1,因为c1,c2的值相同,所以异或的结果为0,所以A为正确答案。

\"&\"是按位与运算符(只有当所有对应位上的数都不相同时结果才为0,所以c1&c2的值并不可能为0)。 \"~\"是按位取反(由于十进制92转化成二进制并不是全为1,所以即使取反也不能得到全为0的答案)。 \"|\"是按位或运算(由于十进制92转化为二进制也不是全为0,所以按位或运算后也不会全为0)。 故本题正确答案为A。

知识点:知识点/位运算/位运算符的含义及使用 217、有以下程序 main()

{ unsigned int a; int b=-1; a=b;

printf(\"%u\}

程序运行后的输出结果是______。 A:-1 B:65535 C:32767 D:-32768 答案:B 评析:

本题考的是不同类型数据间的混合运算。

当运算对象为不同类型时,数据的转换方向为int→unsigned→long→double,本题程序中的变量b为int型,先要转换为unsigned型,int型变量的数值范围为-32768~32767,最高位为符号位,而unsigned所表示的数的范围为0--65535,它的最高位为数值位。由于内存中是以补码形式存储数据的,所以整型的\"-1\"在内存中的表示为 16个1,最高位的\"1\"表示符号负,将它转换为unsigned类型,即将原符号位表示符号的\"1\"看成数值,所以就得到16个数值位1,即65535。 故本题答案为B。

知识点:知识点/基本语句/复合语句 218、有以下说明和定义语句 struct student

{ int age; char num[8];};

struct student stu[3]={{20,\"200401\struct student *p=stu;

以下选项中引用结构体变量成员的表达式错误的是______。 A:(p++)->num B:p->num C:(*p).num D:stu[3].age 答案:D

评析:

本题考的是结构体变量的引用。

引用形式有以下三种:①结构体变量. 成员名;②(*p).成员名;③p→成员名。所以A,B,C答案都是正确的。

故本题答案为D。

知识点:知识点/结构体(即\"结构\")与共用体(即\"联合\")/结构体和共用体类型数据的定义方法和引用方法

219、有以下程序 main()

{ int x[]={1,3,5,7,2,4,6,0},i,j,k; for(i=0;i<3;i++) for (j=2;j>=i;j--)

if(x[j+1]>x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k;} for (i=0;i<3;i++) for(j=4;j<7-i;j++)

if(x[j]>x[j+1]){ k=x[j];x[j]=x[j+1];x[j+1]=k;} for (i=0;i<8;i++) printf(\"%d\ printf(\"\\n\"); }

程序运行后的输出结果是______。 A:75310246 B:01234567 C:76310462 D:13570246 答案:A 评析:

本题考查的是排序算法。 for(i=0;i<3;i++) for (j=2;j>=i;j--)

if(x[j+1]>x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k;}

此段程序的作用是将数组x[0]到x[3]中的数由大到小进行排列,运行此段程序后x[]中的值变为x[]={7,5,3,1,2,4,6,0} for(i=0;i<3;i++) for(j=4;j<7-i;j++)

if(x[j]>x[j+1]){ k=x[j];x[j]=x[j+1];x[j+1]=k;}

此段程序的作用是将数组x[4]到x[7]中的数由小到大进行排列,运行此段程序后x[]中的值变为x[]={7,5,3,1,0,2,4,6}

最后通过一个循环将X[]中的数依次输出。 故本题答案为A。

知识点:知识点/循环结构程序设计/循环的嵌套

220、以下程序的功能是:建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中,请为下划线处有号码的选择出正确的选项。 #include stuct node

90

{ char data; struct node *next;}; ___(48)___ CreatList(char *s) { struct node *h,*p,*q;

h=(struct node *) malloc(sizeof(struct node)); p=q=h; while(*s!='\\0')

{ p=(struct node *) malloc(sizeof(struct node)); p->data= ______ ; q->next=p; q= ______ ; s++; }

p->next='\\0'; return h; } main()

{ char str[]=\"link list\"; struct node *head; head=CreatList(str); ... }

A:char * B:struct node C:struct node * D:char 答案:C 评析:

本题考的是建立动态链表。

本题要求建立一个struct node类型的数据链表,从main()函数中可知,head是\"头指针\"变量,它的值是由CreatList(str)带回的一个结构体类型的指针变量,指向所建立的表的第一个数据,所以第48空应该填struct node *。 故本题答案为C。

知识点:知识点/结构体(即\"结构\")与共用体(即\"联合\")/用指针和结构体构成链表

221、以下程序的功能是:建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中,请为下划线处有号码的选择出正确的选项。 #include stuct node

{ char data; struct node *next;}; ______ CreatList(char *s) { struct node *h,*p,*q);

h=(struct node *) malloc(sizeof(struct node)); p=q=h; while(*s!='\\0')

{ p=(struct node *) malloc(sizeof(struct node));

91

p->data=___(49)___ ; q->next=p; q=______ ; s++; }

p->next='\\0'; return h; } main()

{ char str[]=\"link list\"; struct node *head; head=CreatList(str); ... } A:*s B:s C:*s++ D:(*s)++ 答案:A 评析:

本题考的是建立动态链表。

从本题要求建立一个struct node类型的数据链表,从main()函数中可知,head是\"头指针\"变量,它的值是由CreatList(str)带回的一个结构体类型的指针变量,指向所建立的表的第一个数据,所以第48空应该填struct node *。再从本题的函数参数传递看,传递的是字符串link list的首地址给指针变量s,所以可以推断建立的链表一定与link list字符串有关,再看CreatList(char *s)函数中所定义的变量及其它语句,可知h,p,q 是用与建立链表的,h表示头指针,p用于记录开辟的新结点,而q是用于将新结点与已建立链表相连的中间变量,且所建立链表各个结点的data依次存放的是link list字符串的各个字符,所以49空填的是*s。 故本题答案为A。

知识点:知识点/结构体(即\"结构\")与共用体(即\"联合\")/用指针和结构体构成链表

222、以下程序的功能是:建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中,请为下划线处有号码的选择出正确的选项。 #include stuct node

{ char data; struct node *next;}; ______ CreatList(char *s) { struct node *h,*p,*q);

h=(struct node *) malloc(sizeof(struct node)); p=q=h; while(*s!='\\0')

{ p=(struct node *) malloc(sizeof(struct node)); p->data=______ ; q->next=p; q=___(50)___ ; s++;

92

}

p->next='\\0'; return h; } main()

{ char str[]=\"link list\"; struct node *head; head=CreatList(str); ... }

A:p->next B:p C:s D:s->next 答案:B 评析:

本题考的是建立动态链表。

在本题第一空应该填struct node *,第二空填*s的基础上,执行q->next=p; q=(50) ,用于将原链表中的q->next指向新结点p,再将指针q后移,所以第三空应填p。 故本题答案为B。

知识点:知识点/结构体(即\"结构\")与共用体(即\"联合\")/用指针和结构体构成链表 223、与十进制511等值的十六进制数为______。 A:1FF B:2FF C:1FE D:2FE 答案:A 评析:

知识点:知识点/第1章

224、能将高级语言编写的源程序转换成目标程序的是______。 A:编辑程序 B:编译程序 C:解释程序 D:链接程序 答案:B 评析:

知识点:知识点/第1章

225、以下叙述中正确的是______。 A:构成C程序的基本单位是函数 B:可以在一个函数中定义另一个函数 C:main()函数必须放在其它函数之前

D:所有被调用的函数一定要在调用之前进行定义 答案:A 评析:

93

知识点:知识点/第1章

226、已知大写字母A的ASCII码是65,小写字母a的ASCII码是97,则用八进制表示的字符常量'\\101'是______。 A:字符A B:字符a C:字符e D:非法的常量 答案:A 评析:

知识点:知识点/第3章

227、以下非法的赋值语句是______。 A:n=(i=2,++i); B:j++; C:++(i+1); D:x=j>0; 答案:C 评析:

知识点:知识点/第3章

228、设a和b均为double型常量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是______。 A:6.500000 B:6

C:5.500000 D:6.000000 答案:D 评析:

知识点:知识点/第3章 229、设有如下说明 typedef struct

{ int n; char c; double x;}STD;

则以下选项中 ,能正确定义结构体数组并赋初值的语句是______。 A:STD tt[2]={{1,'A',62},{2,'B',75}}; B:STD tt[2]={1,\"A\ C:struct tt[2]={{1,'A'},{2,'B'}};

D:struct tt[2]={{1,\"A\ 答案:D 评析:

知识点:知识点/第11章 230、若有以下说明和定义

typedef int *INTEGER;INTEGER p,*q;以下叙述正确的是______。 A:p是int型变量 B:p是基类型为int的指针变量 C:q是基类型为int的指针变量 D:程序中可用INTEGER代替int类型名 答案:B

94

评析:

知识点:知识点/第11章

231、正确的C语言用户自定义标识符是______。 A:ok? B:float C:a3b D:random﹪2 答案:C 评析:

知识点:知识点/第3章

232、设int a[][4]={1,2,3,4,5,6,7,8,9};则数组a的第一维的大小是 A:2 B:3 C:4 D:无确定值 答案:B 评析:

知识点:知识点/第7章

233、在函数内,定义变量时存储类型符可省略的是______。 A:auto B:static C:extern D:register 答案:A 评析:

知识点:知识点/第8章

234、设有定义语句)enum t1 {a1, a2 = 7, a3, a4 = 15}time;则枚举常量a2和a3的值分别为_____。 A:1和2 B:2和3 C:7和2 D:7和8 答案:D 评析:

知识点:知识点/第11章

235、在文件使用方式中,字符串″rb″表示______。 A:打开一个已存在的二进制文件,只能读取数据 B:打开一个文本文件,只能写入数据

C:打开一个已存在的文本文件,只能读取数据 D:打开一个二进制文件,只能写入数据 答案:A 评析:

知识点:知识点/第13章

236、将一个整数10002存到磁盘上,以ASCII码形式存储和以二进制形式存储,占用的字节数分别是 ______。

95

A:2和2 B:2和5 C:5和2 D:5和5 答案:C 评析:

知识点:知识点/第3章

237、以下选项中属于C语言的数据类型是 A:复数型 B:逻辑型 C:双精度型 D:集合型 答案:C 评析:

知识点:知识点/第3章

238、要判断char型变量m是否是数字,可以使用下列表达式 A:0<=m && m<=9 B:'0'<=m && m<='9' C:\"0\"<=m && m<=\"9\" D:前面三个答案均是错误的 答案:B 评析:

知识点:知识点/第3章

239、为了判断两个字符串s1和s2是否相等,应当使用 A:if (s1= =s2) B:if (s1=s2) C:if ( strcpy (s1,s2)) D:if ( strcmp( s1,s2)= =0 ) 答案:D 评析:

知识点:知识点/第7章 240、以下说法正确的是( )

A:C语言程序总是从第一个定义的函数开始执行

B:在C语言程序中,要调用的函数必须在main()函数中定义 C:C语言程序总是从main()函数开始执行

D:C语言程序中的main()函数必须放在程序的开始部分 答案:C 评析:

知识点:知识点/第8章 241、以下错误的描述是( )

A:不同函数中可以使用相同的变量名 B:形式参数是局部变量

C:一个函数内部定义的变量只能在本函数范围内有效

D:在一个函数内部的复合语句中定义的变量可以在本函数范围内有效

96

答案:D 评析:

知识点:知识点/第8章

242、要说明一个有10个int 元素的数组,应当选择语句 A:int a[ 10 ]; B:int a[ 2, 5 ] C:int a[ ]; D:int *a[ 10 ]; 答案:A 评析:

知识点:知识点/第7章

243、说明语句\"int ( * p ) [] ;\"的含义是 A:p是一个指向一维数组的指针变量 B:p是指针变量,指向一个整型数据

C:p是一个指向函数的指针,该函数的返回值是一个整型 D:以上都不对 答案:A 评析:

知识点:知识点/第10章

244、已知:char b[ 5 ] , *p=b; 则正确的赋值语句是 A:b=\"abcd\"; B:*b=\"abcd\"; C:p=\"abcd\" ; D:*p=\"abcd\"; 答案:C 评析:

知识点:知识点/第10章

245、下面的四个运算符中,优先级最低的是 A:( ) B:. C:-> D:++ 答案:D 评析:

知识点:知识点/第3章

246、C语言中标准输入文件stdio是指 A:键盘 B:显示器 C:鼠标 D:硬盘 答案:A 评析:

知识点:知识点/第1章 247、下面程序的输出是______

97

main() { int k=11;

printf(\"k=%d,k=%o,k=%x\\n\}

A:k=11,k=12,k=13 B:k=11,k=13,k=13 C:k=11,k=013,k=oXb D:k=11,k=13,k=b 答案:D 评析:

知识点:知识点/第4章

248、以下合法的C语言赋值语句是 A:a=b=58 B:k=int(a+b) ; C:a=58,b=58 D:--i; 答案:D 评析:

知识点:知识点/第4章 249、以下程序的输出结果是 main() { int x=10,y=3; printf(\"%d\\n\} A:0 B:1 C:3 D:不确定 答案:C 评析:

知识点:知识点/第4章

250、若变量已正确说明为int类型,要给a,b,c输入数据,以下正确的输入语句是 A:read (a,b,c);

B:scanf(\"%d%d%d\ C:scanf(\"%D%D%D\ D:scanf(\"%d%d%d\答案:D 评析:

知识点:知识点/第4章

251、执行下面程序段后,c3中的值是_____ int c1=1 , c2=2 , c3; c3=c1/c2; A:0

98

B:1/2 C:0.5 D:1 答案:A 评析:

知识点:知识点/第3章

252、若执行以下程序段,其输出结果是______ int a=0 , b=0 , c=0; c=(a-=a-5) , (a=b,b+3) ; printf(\"%d , %d , %d\\n\" , a,b,c); A:3,0,-10 B:0,0,5 C:-10,3,-10 D:3,0,3 答案:B 评析:

知识点:知识点/第4章

253、以下程序段的输出是_______ float a=57.666; printf(\"*%010.2f*\\n\ A:*0000057.66* B:* 57.66* C:*0000057.67* D:* 57.67* 答案:C 评析:

知识点:知识点/第4章 254、若有以下定义和语句: int a=5 a++;

此处表达式a++的值是____ A:7 B:6 C:5 D:4 答案:B 评析:

知识点:知识点/第3章 255、若有以下定义和语句: char c1='b',c2='e';

printf(\"%d,%c\\n\则输出结果是_______ A:2,M B:3,E

99

C:2,e

D:输出结果不确定 答案:B 评析:

知识点:知识点/第3章

256、以下程序的输出结果是______ main()

{ int x=10,y=10; printf(\"%d%d\\n\}

A:10 10 B:9 9 C:9 10 D:10 9 答案:D 评析:

知识点:知识点/第4章

257、在C语言中,如果下面的变量都是int类型,则输出结果是______ sum=pad=5;

pad=sum++,pad++,++pad; printf(\"%d\\n\ A:7 B:6 C:5 D:4 答案:A 评析:

知识点:知识点/第4章

258、以下程序的输出结果_____ #include main() {

int i=010,j=10;

printf(\"%d,%d\\n\}

A:11,10 B:9,10 C:010,9 D:10,9 答案:B 评析:

知识点:知识点/第4章 259、请读程序 int i =65536

100

printf(\"%d\\n\

上面程序的输出结果是_____ A:65535 B:0

C:有语法错误,无输出结果 D:1 答案:C 评析:

知识点:知识点/第3章

260、已知字符A的ASCII码为十进制的65,下面程序的输出是_____ main() {

char ch1,ch2; ch1='A'+'5'-'3'; ch2='A'+'6'-'3';

printf(\"%d,%c\\n\}

A:67,D B:B,C C:C,D D:不确定的值 答案:A 评析:

知识点:知识点/第3章 261、若有定义和语句:

char s[10]; s=\"abcd\"; printf(\"%d\\n\; 则结果是_____ A:输出 abcd B:输出 a

C:输出 adcb D:编译不能通过 答案:D 评析:

知识点:知识点/第7章

262、若有定义:int x,y; char a,b,c; 并有以下输入数据(此处代表换行): 1 2 A B C

则能给x赋整数1,给y赋数2,给a赋字符A,给b赋字符B,给c赋字符C的正确程序段是_______ A:scanf(\"x=%d y=%d\ B:scanf(\"%d%d\ C:scanf(\"%d%d%c%c%c\

D:scanf(\"%d%d%c%c%c%c%c%c\答案:C 评析:

101

知识点:知识点/第4章

263、两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是____ main() { int x;

scanf(\"%d\if (x++>5) printf(\"%d\else printf(\"%d\\n\}

A:7和5 B:6和3 C:7和4 D:6和4 答案:D 评析:

知识点:知识点/第5章

2、若执行下面的程序从键盘输入3和4,则输出是_______ main() { int a,b,s;

scanf(\"%d%d\s=a; if (aprintf(\"%d\\n\} A:14 B:16 C:18 D:20 答案:B 评析:

知识点:知识点/第5章

265、设i是int型变量,f是float型变量,用下面的语句给这两个变量输入值: scanf(\"i=%d,f=%f\

为了把100和765.12分别赋给i和f,则正确的输入为 A:100<空格>765.12<回车> B:i=100,f=765.12<回车> C:100<回车>765.12<回车> D:x=100<回车>,y=765.12<回车> 答案:B 评析:

知识点:知识点/第4章

266、以下程序的输出结果是____ #include

102

main() {

printf(\"%d\\n\}

A:不确定 B:0 C:-1 D:1 答案:B 评析:

知识点:知识点/第4章 267、有以下程序 main( ) { int i;

for ( i=0; i<3; i++ ) switch ( i )

{ case 1 : printf(\"%d \case 2 : printf(\"%d \default : printf(\"%d \} }

执行后输出结果是 A:011122 B:012 C:012020 D:120 答案:A 评析:

知识点:知识点/第5章 268、有以下程序 main()

{ int i=1, j=1, k=2; if ( (j++ || k++) && i++) printf(\"%d,%d,%d\\n\}

执行后输出结果是 A:1,1,2 B:2,2,1 C:2,2,2 D:2,2,3 答案:C 评析:

知识点:知识点/第5章 269、有以下程序 main()

103

{ int a=5,b=4,c=3,d=2; if (a>b>c) printf(\"%d\\n\else if ( (c-1 >= d) ==1) printf(\"%d\\n\else

printf(\"%d\\n\}

执行后输出结果是 A:2 B:3 C:4

D:编译时有错,无结果 答案:B 评析:

知识点:知识点/第5章 270、有以下程序 main()

{ int i=0,s=0; do { if (i%2) { i++; continue; } i++; s += i; } while( i<7 ); printf(\"%d\\n\}

执行后输出结果是 A:16 B:12 C:28 D:21 答案:A 评析:

知识点:知识点/第6章

271、以下程序的输出结果是 main()

{ int a=5,b=4,c=6,d;

printf(\"%d\\n\} A:5 B:4 C:6 D:不确定

104

答案:C 评析:

知识点:知识点/第4章

272、以下程序中,while循环的循环次数是 main() { int i=0; while(i<10) { if(i<1) continue; if(i= =5) break; i++; } } A:1 B:10 C:6

D:死循环,不能确定次数 答案:D 评析:

知识点:知识点/第6章

273、以下程序的输出结果是 main( ) { int a=0,i; for(i=1;i<5;i++) { switch(i) { case 0: case 3: a+=2; case 1: case 2: a+=3; default: a+=5; } }

printf(\"%d\\n\} A:31 B:13 C:10 D:20 答案:A 评析:

知识点:知识点/第5章

274、以下程序的输出结果是 main()

{ int a=4,b=5,c=0,d; d=!a&&!b||!c;

105

printf(\"%d\\n\ } A:1 B:0 C:非0的数 D:-1 答案:A 评析:

知识点:知识点/第4章

275、以下程序的输出结果是 #include main() { int i=0,a=0; while(i<20)

{ for( ; ; ) { if((i%10)==0) break; else i--; }

i+=11; a+=i; }

printf(\"%d\\n\} A:21 B:32 C:33 D:11 答案:B 评析:

知识点:知识点/第6章

276、假定w、x、y、z、m均为int型变量,有如下程序段: w=1; x=2; y=3; z=4;

m=(w知识点:知识点/第4章

277、以下程序的输出结果是 main() { int a, b;

for(a=1, b=1; a<=100; a++)

106

{ if(b>=10) break; if (b%3= =1) { b+=3; continue; } }

printf(\"%d\\n\} A:101 B:6 C:5 D:4 答案:D 评析:

知识点:知识点/第6章

278、若执行以下程序时从键盘上输入9,则输出结果是 Main() { int n;

scanf (\"%d\if(n++<10) printf (\"%d\\n\else

printf(\"%d\\n\ } A:11 B:10 C:9 D:8 答案:B 评析:

知识点:知识点/第5章 279、有以下程序段 int k=0; while(k=1) k++;

while 循环执行的次数是 A:无限次

B:有语法错,不能执行 C:一次也不执行 D:执行1次 答案:A 评析:

知识点:知识点/第6章

280、以下程序执行后sum的值是 main() { int i , sum;

107

for(i=1;i<6;i++) sum+=i; printf(\"%d\\n\} A:15 B:14 C:不确定 D:0 答案:C 评析:

知识点:知识点/第6章 281、有以下程序段 int x=3 do

{ printf (\"%d\while (!(--x)); 其输出结果是 A:1 B:3 0 C:1 -2 D:死循环 答案:C 评析:

知识点:知识点/第6章

282、若变量c为char类型,能正确判断出c为小写字母的表达式是 A:'a'<=c<= 'z' B:(c>= 'a')||(c<= 'z') C:('a'<=C)and ('z'>=c) D:(c>= 'a')&&(c<= 'z') 答案:D 评析: 空

知识点:知识点/第3章

283、以下程序的输出结果是 main()

{ int x=0.5; char z='a';

printf(\"%d\\n\ A:0 B:1 C:2 D:3 答案:A 评析:

知识点:知识点/第4章

284、以下程序的输出结果是

108

main()

{int x=10,y=10,i; for(i=0;x>8;y=i )

printf(\"%d %d \",x--,y); }

A:10 1 9 2 B:9 8 7 6 C:10 9 9 0 D:10 10 9 0 答案:D 评析: 空

知识点:知识点/第6章

285、以下程序的输出结果是 main() {int i;

for(i=1;i<6;i++) {if(i%2)

{printf(\"#\");continue;} printf(\"*\"); }

printf(\"\\n\"); }

A:#*#*# B:##### C:***** D:*#*#* 答案:A 评析:

知识点:知识点/第6章

286、以下程序的输出结果是 main() {int i;

for(i='A';i<='I';i++)printf(\"%c\",i+32);printf(\"\\n\"); }

A:编译不通过,无输出 B:aceg C:acegi D:abcdefghi 答案:D 评析:

知识点:知识点/第6章

287、以下程序输出结果是

109

main () {int m=5;

if (m>5) printf (\"%d\\n\",m); else printf (\"%d\\n\",m--); A:7 B:6 C:5 D:4 答案:C 评析:

知识点:知识点/第5章

288、运行以下程序后,如果从键盘上输入china#《回车》,则输出结果为 #include main() {int v1=0,v2=0; char ch ;

while ((ch=getchar())!='#') switch (ch ) {case 'a': case 'h': default:v1++; case '0':v2++; }

printf(\"%d,%d\\n\",v1,v2);} A:2,0 B:5,0 C:5,5 D:2,5 答案:C 评析:

知识点:知识点/第5章 2、设有如下定义: int a=1,b=2,c=3,d=4,m=2,n=2;

则执行表达式:(m=a>b)&&(n=c>d)后,n的值为 A:1 B:2 C:3 D:0 答案:D 评析:

知识点:知识点/第3章

290、以下程序的输出结果是 main() {int i,j,x=0;

110

for (i=0;i<2;i++) {x++; for(j=0;j<3;j++) { if (j%2) continue; x++;} x++; }

printf(\"x=%d\\n\",x); } A:x=4 B:x=8 C:x=6 D:x=12 答案:B 评析:

知识点:知识点/第6章

291、设x和y均为int型变量,则执行以下的循环后,y值为 for(y=1,x=1;y<=50;y++) {if(x= =10) break; if (x%2= =1) {x+=5;continue;} x-=3; } A:2 B:4 C:6 D:8 答案:C 评析:

知识点:知识点/第6章

292、假定a和b为int型变量,则执行以下语句后b的值为 a=1;b=10; do

{b-=a; a++;} while (b--<0); A:9 B:-2 C:-1 D:8 答案:D 评析:

知识点:知识点/第6章

293、设j为int型变量,则下面for循环语句的执行结果是 For (j=10;j>3;j--) {if(j%3) j--; --j;--j;

111

printf(\"%d \",j); } A:6 3 B:7 4 C:6 2 D:7 3 答案:B 评析:

知识点:知识点/第6章 294、有以下程序 main() {int x, i; for(i=1;i<=50;i++) {x=i; if(x%2= =0) { x++; if(x%3= =0) { x++; if(x%7= =0)

{ x++; printf(\"%d \ } } } } 输出结果是 A:28 B:27 C:42 D:26 答案:D 评析:

知识点:知识点/第6章

295、假定所有变量均已正确说明,下列程序段运行后x的值是 a=b=c=0;x=35; if(!a)x--; else if(b);if(c)x=3; else x=4; A:34 B:4 C:35 D:3 答案:B 评析: 空

知识点:知识点/第5章

296、以下程序段的输出结果是_______ int k, j , s ;

for(k=2;k<6;k++,k++)

112

{ s=1;

for (j=k;j<6;j++)s+=j; }

printf(\"%d\\n\ A:9 B:1 C:11 D:10 答案:D 评析:

知识点:知识点/第6章

297、以下程序段的输出是 int i,j,m=0; for (i=1;i<=15;i+=4) for (j=3;j<=19;j+=4) m++; printf(\"%d\\n\ A:12 B:15 C:20 D:25 答案:C 评析:

知识点:知识点/第6章

298、以下程序段的输出结果是 int i, sum;

for(i=1;i<6;i++) sum+=sum; printf(\"%d\\n\ A:15 B:14 C:不确定 D:0 答案:C 评析:

知识点:知识点/第6章

299、下面程序的输出是____ main()

{int x=3,y=6,a=0; while (x++!=(y-=1)) { a+=1; if (yprintf(\"x=%d,y=%d,a=%d\\n\}

113

A:x=4,y=4,a=1 B:x=5,y=5,a=1 C:x=5,y=4,a=3 D:x=5,y=4,a=1 答案:D 评析:

知识点:知识点/第6章 300、定义如下变量: int n=10

则下列循环的输出结果是______ while (n>7) { n--;

printf(\"%d\\n\} A:9 8 7 B:9 C:8 7 6 D:9 答案:A 评析:

知识点:知识点/第6章

301、以下程序段的输出结果是_____ int x=3; do

{ printf(\"%3d\while (!(--x)); A:1 B:3 0 C:1 -2 D:死循环 答案:C 评析:

知识点:知识点/第6章

302、执行下面的程序后,a的值为_____ main() { int a,b;

for (a=1,b=1;a<100;a++) {

if (b>=20) break;

114

if (b%3==1) { b+=3; continue; } b-=5; } } A:7 B:8 C:9 D:10 答案:B 评析:

知识点:知识点/第6章 303、以下循环体的执行次数是 main() { int i,j;

for(i=0,j=1; i<=j+1; i+=2, j--)printf(\"%d \\n\} A:3 B:2 C:1 D:0 答案:C 评析:

知识点:知识点/第6章

304、设j为int型变量,则下面for循环语句的执行结果是 for(j=10;j>3;j--) { if(j%3)j--; --j;--j; printf(\"%d\} A:6 3 B:7 4 C:6 2 D:7 3 答案:B 评析:

知识点:知识点/第6章

305、在C语言的循环语句for,while,do-while语句中,用于直接中断最内层循环的语句是: A:switch

B:continue C:break D:if 答案:C

115

评析:

知识点:知识点/第6章 306、若有以下说明语句:

int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char c='a',d,g;

则数值为4的表达式是__________。 A:a[g-c] B:a[4] C:a['d'-'c'] D:a['d'-c] 答案:D 评析:

知识点:知识点/第7章

307、假设int型变量占两个字节的存储单元,若有定义: int x[10]={0,2,4};

则数组x在内存中所占字节数为______。 A:3 B:6 C:10 D:20 答案:D 评析:

知识点:知识点/第7章

308、下列合法的数组定义是_________。 A:int a[]=\"string\"; B:int a[5]={0,1,2,3,4,5}; C:char a=\"string\"; D:char a[]={0,1,2,3,4,5}; 答案:D 评析:

知识点:知识点/第7章 309、若给出以下定义: char x[]=\"abcdefg\";

char y[]={'a','b','c','d','e','f','g'}; 则正确的叙述为__________。 A:数组x和数组y等价 B:数组x和数组y的长度相同 C:数组x的长度大于数组y的长度 D:数组y的长度大于数组x的长度 答案:C 评析:

知识点:知识点/第7章

310、若定义如下变量和数组_________。 int j;

116

int x[3][3]={1,2,3,4,5,6,7,8,9}; 则下面语句的输出结果是_________。 For (j=0;j<3;j++) Printf(\"%d\ A:1 5 9 B:1 4 7 C:3 5 7 D:3 6 9 答案:C 评析:

知识点:知识点/第7章

311、下列程序运行后的输出结果是______。 Main() {int n[3],t,j,k; for(t=0;t<3;t++) n[t]=0; k=2;

for(t=0;t知识点:知识点/第7章 312、有以下程序 main()

{ int p[7]={11,13,14,15,16,17,18}, i=0,k=0; while(i<7 && p[i]%2) { k =k+ p[i]; i++; } printf(\"%d\\n\ }

执行后输出结果是_______。 A:58 B:56 C:45 D:24 答案:D 评析:

知识点:知识点/第7章

313、以下能正确定义数组并正确赋初值的语句是______。 A:int N=5,b[N][N];

117

B:int a[1][2]={{1},{3}}; C:int c[2][]= {{1,2},{3,4}}; D:int d[3][2]={{1,2},{34}}; 答案:D 评析:

知识点:知识点/第7章 314、有以下程序 main()

{ int m[][3]={1,4,7,2,5,8,3,6,9}; int i,j,k=2; for(i=0; i<3; i++) { printf(\"%d \}

执行后输出结果是______。 A:4 5 6 B:2 5 8 C:3 6 9 D:7 8 9 答案:C 评析:

知识点:知识点/第7章

315、以下能正确定义一维数组的选项是________________。 A:int num[]; B:#define N 100 int num[N];

C:int num[0..100]; D:int N=100; int num[N]; 答案:B 评析:

知识点:知识点/第7章

316、下列选项中正确的语句组是______________。 A:char s[8]; s={\"Beijing\ B:char *s; s={\"Beijing\ C:char s[8]; s=\"Beijing\"; D:char *s; s=\"Beijing\"; 答案:D 评析:

知识点:知识点/第7章 317、有以下程序段

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b; b=p[5];

b中的值是__________。 A:5

118

B:6 C:8 D:9 答案:D 评析:

知识点:知识点/第7章 318、有以下程序 main( )

{ char a[]=\"abcdefg\printf(\"%d %d\\n\}

执行后输出结果是_______。 A:7 7 B:8 8 C:8 10 D:10 10 答案:C 评析:

知识点:知识点/第7章 319、有以下程序 void swap1(int c[]) { int t;

t=c[0];c[0]=c[1];c[1]=t; }

void swap2(int c0,int c1) { int t;

t=c0;c0=c1;c1=t;} main( )

{ int a[2]={3,5},b[2]={3,5}; swap1(a); swap2(b[0],b[1]);

printf(\"%d %d %d %d\\n\}

其输出结果是_______。 A:5 3 5 3 B:5 3 3 5 C:3 5 3 5 D:3 5 5 3 答案:B 评析:

知识点:知识点/第7章 320、有以下程序 int f(int b[][4]) { int i,j,s=0; for(j=0;j<4;j++)

119

{ i=j; if(i>2) i=3-j; s+=b[i][j]; } return s; } main( )

{ int a[4][4]={{1,2,3,4},{0,2,4,5},{3,6,9,12},{3,2,1,0}};

printf(\"%d\\n\}

执行后的输出结果是___________。 A:12 B:11 C:18 D:16 答案:D 评析:

知识点:知识点/第8章 321、有以下程序 void sort(int a[],int n) { int i,j,t; for(i=0;iif(a[i]{ int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(aa,10);

for(i=0;i<10;i++) printf(\"%d,\printf(\"\\n\"); }

其输出结果是_____。

A:1,2,3,4,5,6,7,8,9,10, B:10,9,8,7,6,5,4,3,2,1, C:9,2,7,4,5,6,3,8,1,10, D:1,10,3,8,5,6,7,4,9,2, 答案:C 评析:

知识点:知识点/第8章 322、有以下程序 void f(int a[],int i,int j) { int t; if(i{ t=a[i]; a[i]=a[j];a[j]=t;

120

f(a,i+1,j-1); } } main( )

{ int i,aa[5]={1,2,3,4,5}; f(aa,0,4);

for(i=0;i<5;i++) printf(\"%d,\ printf(\"\\n\"); }

执行后输出结果是_____。 A:5,4,3,2,1, B:5,2,3,4,1, C:1,2,3,4,5, D:1,2,3,4,5, 答案:A 评析:

知识点:知识点/第8章

323、以下程序的输出结果是_____ B___。main()

{ char cf[3][5]={\"AAAA\ printf(\"\\\"%s\\\"\\n\ }

A:\"AAAA\" B:\"BBB\" C:\"BBBCC\" D:\"CC\" 答案:B 评析:

知识点:知识点/第7章

324、以下程序的输出结果是_______。 main()

{ int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1; for(i=0;i<3;i++)

for(j=i;j<=i;j++) t=t+b[i][b[j][j]]; printf(\"%d\\n\ } A:3 B:4 C:1 D:9 答案:B 评析: 空

知识点:知识点/第7章 325、有以下程序

121

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\\n\ }

程序运行后的输出结果是_____。 A:11 B:19 C:13 D:20 答案:B 评析:

知识点:知识点/第7章 326、若有以下定义语句:

char s[10],s=\"abcd\";printf(\"%s\\n\则运行结果是__________。 A:输出abcd B:输出a C:输出ab cd D:编译不通过 答案:D 评析:

知识点:知识点/第7章

327、不能把字符串\"Hello!\"赋给数组b的语句是_______。 A:char b[10]={'H','e','l','l','o','!'}; B:char b[10];b=\"Hello!\";

C:char b[10]; strcpy(b,\"Hello!\"); D:char b[10]=\"Hello!\"; 答案:B 评析:

知识点:知识点/第7章 328、若有以下程序段: char str[]=\"ab\\n\\012\\\\\\\"\"; printf(\"%d\

该程序段的输出结果是_________。 A:3 B:4 C:6 D:12 答案:C 评析:

知识点:知识点/第7章

329、函数调用strcat(strcpy(str1,str2),str3)的功能是_______。

122

A:将串str1复制到串str2中后在连接到串str3之后 B:将串str1连接到串str2之后再复制到串str3之后 C:将串str2复制到串str1中后再将串str3连接到串str1之后 D:将串str2连接到串str1中后再将串str1复制到串str3中 答案:C 评析:

知识点:知识点/第7章

330、下列程序的输出结果是________。 main()

{char ch[7]={\"65ab21\int j,s=0;

for(j=0;ch[j]>='0'&&ch[j]<='9';j+=2) s=10*s+ch[j]-'0'; printf(\"%d\\n\}

A:12ba56 B:66521 C:6 D:62 答案:C 评析: 空

知识点:知识点/第7章

331、设已定义char c[8]=\"Tianjin\"和int j,则下面的输出函数调用中错误的是______。 A:printf(\"%s\

B:for(j=0;j<8;j++) printf(\"%c\ C:puts(c);

D:for(j=0;j<8;j++) puts(c[j]); 答案:D 评析:

知识点:知识点/第7章

332、设已定义char a[10]和 int j,则下面输入函数调用中错误的是_________。 A:scanf(\"%s\

B:for(j=0;j<9;j++) scanf(\"%c\ C:gets(a);

D:for(j=0;j<9;j++) scanf(\"%c\答案:B 评析:

知识点:知识点/第7章

333、设已定义char x[8]和int j,为了给该数组赋值,下面语句中正确的是_______-。 A:x[8]=\"Turbo C\"; B:x=\" Turbo C\"; C:x[]=\"Turbo C\";

D:for(j=0;j<7;j++) x[i]=getchar();

123

答案:D 评析: 空

知识点:知识点/第7章 334、有如下程序, main()

{int n[5]={0,0,0},j,k=2; for(j=0;j该程序的输出结果是_________。 A:不确定的值 B:2 C:1 D:0 答案:D 评析:

知识点:知识点/第7章 335、以下正确的说法是: 建立函数的目的之一是: A:提高程序的执行效率 B:提高程序的可读性 C:减少程序的篇幅 D:减少程序文件所占内存 答案:B 评析:

知识点:知识点/第8章 336、以下正确的说法是:

A:用户若需调用标准函数,调用前必须重新定义

B:用户可以重新定义标准库函数,若如此,该函数将失去原有含义 C:系统根本不允许用户重新定义标准函数

D:用户若需要调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动去调 答案:B 评析:

知识点:知识点/第8章

337、以下程序有语法性错误,有关错误原因的正确说法是: main() { int G=5,k; void prt_char(); ……

k=prt_char(G); …… }

124

A:语句void prt_char();有错,它是函数调用语句,不能用void说明 B:变量名不能使用大写字母

C:函数说明和函数调用语句之间有矛盾 D:函数名不能使用下划线 答案:A 评析:

知识点:知识点/第8章 338、以下错误的描述是: 函数调用可以

A:出现在执行语句中 B:出现在一个表达式中 C:作为一个函数的实参 D:作为一个函数的形参 答案:D 评析: 空

知识点:知识点/第8章 339、以下正确的说法是:

A:函数的定义可以嵌套,但函数的调用不可以嵌套 B:函数的定义不可以嵌套,但函数的调用可嵌套 C:函数的定义和调用均不可以嵌套 D:函数的定义和调用均可以嵌套 答案:B 评析:

知识点:知识点/第8章 340、以下正确的说法是:

如果在一个函数中的复合语句中定义了一个变量,则该变量 A:只在该复合语句中有效 B:在该函数中有效 C:在本程序范围中均有效 D:为非法变量 答案:A 评析:

知识点:知识点/第8章

341、宏定义#define PI 31.14159中,宏名PI代替______________。 A:单精度 B:双精度 C:常量 D:字符串 答案:C 评析:

知识点:知识点/第9章

342、设有以下宏定义:#define N 3 #define Y(n) ((N+1)*n)

125

执行语句z=2*(N+Y(5+1));后,z的值为_____________。 A:出错 B:42 C:48 D:54 答案:C 评析:

知识点:知识点/第9章

343、以下说法正确的是_____________。 A:#define和printf都是C语句 B:#define 是C语句,而printf不是 C:printf是C语句,但#define不是 D:#define 和printf都不是C语句 答案:C 评析:

知识点:知识点/第9章

344、编译预处理命令以___________结尾。 A:; B:. C:\\ D:回车 答案:D 评析:

知识点:知识点/第9章 345、有以下程序 void fun(char *a, char *b) { a=b; (*a)++; } main()

{ char c1='A',c2='a',*p1,*p2; p1=&c1; p2=&c2; fun(p1,p2); printf(\"%c%c\\n\}

程序运行后的输出结果是________ A:Ab B:aa C:Aa D:Bb 答案:A 评析:

知识点:知识点/第8章 346、有以下程序 #include main()

{ printf(\"%d\\n\

126

程序运行后的输出结果是_______ A:0 B:1 C:-1

D:NULL没定义,出错 答案:A 评析:

知识点:知识点/第8章

347、下列选项中正确的语句组是________ A:char s[8]; s={\"Beijing\ B:char *s; s={\"Beijing\ C:char s[8]; s=\"Beijing\"; D:char *s; s=\"Beijing\"; 答案:D 评析:

知识点:知识点/第10章 348、已定义以下函数 fun(int *p) { return *p; }

该函数的返回值是________ A:不确定的值 B:形参p中存放的值

C:形参p所指存储单元中的值 D:形参p的地址值 答案:C 评析:

知识点:知识点/第10章

349、若有定义:int *p[3];,则以下叙述中正确的是________ A:定义了一个基类型为int的指针变量p,该变量具有三个指针

B:定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针 C:定义了一个名为*p的整型数组,该数组含有三个int类型元素

D:定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素 答案:B 评析:

知识点:知识点/第10章

350、以下程序中函数scmp的功能是返回形参指针s1和s2所指字符串中较小字符串的首地址 #include #include

char *scmp(char *s1, char *s2) { if(strcmp(s1,s2)<0) return(s1); else return(s2); } main()

127

{ int i; char string[20], str[3][20]; for(i=0;i<3;i++) gets(str[i]);

strcpy(string,scmp(str[0],str[1])); /*库函数strcpy对字符串进行复制*/ strcpy(string,scmp(string,str[2])); printf(\"%s\\n\}

若运行时依次输入:abcd、abba和abc三个字符串,则输出结果为_____ A:abcd B:abba C:abc D:abca 答案:B 评析:

知识点:知识点/第10章 351、有以下程序段 main()

{ int a=5, *b, **c; c=&b; b=&a; …… }

程序在执行了c=&b;b=&a;语句后,表达式:**c的值是_________ A:变量a的地址 B:变量b中的值 C:变量a中的值 D:变量b的地址 答案:C 评析:

知识点:知识点/第10章 352、有以下程序 #include main()

{ char str[ ][20]={\"Hello\printf(\"%d\\n\}

程序运行后的输出结果是_______ A:0 B:5 C:7 D:20 答案:C 评析:

知识点:知识点/第10章 353、已定义以下函数 fun(char *p2, char *p1)

128

{ while((*p2=*p1)!='\\0'){ p1++;p2++; } } 函数的功能是 ___________

A:将p1所指字符串复制到p2所指内存空间 B:将p1所指字符串的地址赋给指针p2 C:对p1和p2两个指针所指字符串进行比较 D:检查p1和p2两个指针所指字符串中是否有'\\0' 答案:A 评析:

知识点:知识点/第10章 354、有以下程序 main() { int a[3][3],*p,i; p=&a[0][0];

for(i=0;i<9;i++) p[i]=i+1; printf(\"%d \\n\}

程序运行后的输出结果是___________ A:3 B:6 C:9 D:2 答案:B 评析:

知识点:知识点/第10章 355、有以下程序_______ main()

{ int p[7]={11,13,14,15,16,17,18},i=0,k=0; while(i<7&&*(p+i)%2) {k=k+*(p+i); i++;} printf(\"%d\\n\}

执行后输出的结果是 A:58 B:56 C:45 D:24 答案:D 评析:

知识点:知识点/第10章 356、有以下程序 main() { char a,b,c,*d; a='\\'; b='\\xbc'; c='\\0xab'; d=\"\\0127\";

printf(\"%c%c%c%c\\n\

129

}

编译时出现错误,以下叙述中正确的是 A:程序中只有a='\\';语句不正确 B:b='\\xbc';语句不正确 C:d=\"\\0127\";语句不正确 D:a='\\';和 c='\\0xab';语句都不正确 答案:A 评析:

知识点:知识点/第10章 357、有以下程序 int *f(int *x,int *y) { if(*x<*y) return x; else return y; } main()

{ int a=7,b=8,*p,*q,*r; p=&a; q=&b; r=f(p,q);

printf(\"%d,%d,%d\\n\}

执行后输出结果是________ A:7,8,8 B:7,8,7 C:8,7,7 D:8,7,8 答案:B 评析:

知识点:知识点/第10章 358、有以下程序 main()

{ char *s[]={\"one\p=s[1];

printf(\"%c,%s\\n\}

执行后输出结果是_______ A:n,two B:t,one C:w,one D:o,two 答案:C 评析:

知识点:知识点/第10章

130

359、有以下程序 main()

{ int x[8]={8,7,6,5,0,0}, *s; s=x+3;

printf(\"%d\\n\}

执行后输出结果是________ A:随机值 B:0 C:5 D:6 答案:B 评析:

知识点:知识点/第10章

360、以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。 #define N 10 void arrin(int x[N]) { int i=0; while(iscanf(\"%d\}

在下划线处应填入的是_________ A:x+i B:&x[i+1] C:x+(i++) D:&x[++i] 答案:D 评析:

知识点:知识点/第10章 361、有以下程序 main()

{ char str[ ]=\"xyz\while(*ps) ps++;

for(ps--;ps-str>=0;ps--) puts(ps);} 执行后输出结果是_______ A:yz<回车>xyz B:z<回车>yz

C:z<回车>yz<回车>xyz D:x<回车>xy<回车>xyz 答案:C 评析:

知识点:知识点/第10章 362、有以下程序 main()

131

{int a[][3]={{1,2,3},{4,5,0}},(*pa)[3],i; pa=a; for(i=0;i<3;i++)

if(i<2) pa[1][i]=pa[1][i]-1; else pa[1][i]=1;

printf(\"%d\\n\}

执行后输出结果是_______ A:7 B:6 C:8 D:无确定值 答案:A 评析:

知识点:知识点/第10章 363、有以下程序 void fun(int *a,int i,int j) { int t; if (i{ t=a[i];a[i]=a[j];a[j]=t; fun(a,++i,--j); } } main()

{ int a[]={1,2,3,4,5,6},i; fun(a,0,5); for(i=0;i<6;i++) printf(\"%d \}

执行后输出结果是__________ A:6 5 4 3 2 1 B:4 3 2 1 5 6 C:4 5 6 1 2 3 D:1 2 3 4 5 6 答案:A 评析:

知识点:知识点/第10章

3、下列程序的输出结果是________ main()

{ char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5; printf(\"%d\}

A:非法 B:a[4]的地址

132

C:5 D:3 答案:C 评析:

知识点:知识点/第10章

365、下列程序的运行结果是_________ void fun(int *a, int *b) { int *k; k=a; a=b; b=k; } main()

{ int a=3, b=6, *x=&a, *y=&b; fun(x,y);

printf(\"%d %d\} A:6 3 B:3 6 C:编译出错 D:0 0 答案:B 评析:

知识点:知识点/第10章

366、下面程序的输出结果是________ main()

{ int a[ ]={1,2,3,4,5,6,7,8,9,0,},*p; p=a;

printf(\"%d\\n\} A:0 B:1 C:10 D:9 答案:C 评析:

知识点:知识点/第10章

367、以下程序的输出结果是_________ main()

{ int i, x[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) printf(\"%d,\}

A:1,5,9, B:1,4,7, C:3,5,7, D:3,6,9,

133

答案:C 评析:

知识点:知识点/第10章

368、以下程序的输出结果是_________ main()

{ int a[3][3]={ {1,2},{3,4},{5,6} },i,j,s=0; for(i=1;i<3;i++) for(j=0;j<=i;j++)s+=a[i][j]; printf(\"%d\\n\} A:18 B:19 C:20 D:21 答案:A 评析:

知识点:知识点/第10章

369、以下定义语句中,错误的是___________ A:int a[]={1,2}; B:char *a[3]; C:char s[10]=\"test\"; D:int n=5,a[n]; 答案:D 评析:

知识点:知识点/第10章

370、以下程序的输出结果是________ char cchar(char ch) {

if(ch>='A'&&ch<='Z') ch=ch-'A'+'a'; return ch; } main()

{ char s[]=\"ABC+abc=defDEF\while(*p) { *p=cchar(*p); p++; }

printf(\"%s\\n\}

A:abc+ABC=DEFdef B:abc+abc=defdef C:abcaABCDEFdef D:abcabcdefdef 答案:B

134

评析:

知识点:知识点/第10章

371、以下程序段的输出结果是________ char s[]=\"\\\\141\\141abc\\"; printf (\"%d\\n\ A:9 B:12 C:13 D:14 答案:A 评析:

知识点:知识点/第7章

372、以下程序调用findmax函数返回数组中的最大值。 findmax(int *a,int n) { int *p,*s;

for(p=a,s=a; p-a{ int x[5]={12,21,13,6,18}; printf(\"%d\\n\}

在下划线处应填入的是 A:p>s B:*p>*s C:a[p]>a[s] D:p-a>p-s 答案:B 评析:

知识点:知识点/第10章

373、以下不能正确进行字符串赋初值的语句是________ A:char str[5]=\"good!\"; B:char str[]=\"good!\"; C:char *str=\"good!\"; D:char str[5]={'g','o','o','d'}; 答案:A 评析:

知识点:知识点/第10章

374、以下程序的输出结果是_________ f(int *b , int m, int n) { int i,s=0;

for(i=m;i135

} main()

{int x,a[]={1,2,3,4,5,6,7,8,9}; x=f(a,3,7); printf(\"%d\\n\} A:10 B:18 C:8 D:15 答案:A 评析:

知识点:知识点/第10章

375、以下程序的输出结果是___________ #include #include main()

{ char b1[8]=\"abcdefg\while (--pb>=b1) strcpy(b2,pb); printf(\"%d\\n\}

A:8 B:3 C:1 D:7 答案:D 评析: 空

知识点:知识点/第10章

376、若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是______。 A:p=q; B:*p=*q; C:n=*q; D:p=n; 答案:D 评析:

知识点:知识点/第10章 377、有以下程序 void fun(char *c,int d) {*c=*c+1;d=d+1; printf(\"%c,%c,\ } main()

{char a='A',b='a';

fun(&b,a); printf(\"%c,%c\\n\ }

程序运行后的输出结果是______。

136

A:B,a,B,a B:a,B,a,B C:A,b,A,b D:b,B,A,b 答案:D 评析:

知识点:知识点/第10章

378、以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序 void sort(int a[],int n) {int i,j,t;

for(i=0;iif(a[i]{int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(&aa[3],5);

for(i=0;i<10;i++) printf(\"%d,\ printf(\"\\n\"); }

程序运行后的输出结果是__C____。 A:1,2,3,4,5,6,7,8,9,10, B:10,9,8,7,6,5,4,3,2,1, C:1,2,3,8,7,6,5,4,9,10, D:1,2,10,9,8,7,6,5,4,3, 答案:C 评析:

知识点:知识点/第8章 379、有以下程序 main()

{char a[]={'a','b','c','d','e','f','g','h','\\0'}; int i,j; i=sizeof(a); j=strlen(a); printf(\"%d,%d\\n\ }

程序运行后的输出结果是______。 A:9,9 B:8,9 C:1,8 D:9,8 答案:D 评析:

知识点:知识点/第7章

380、以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。 void reverse(int a[],int n)

137

{int i,t;

for(i=0;i{t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;} } main()

{int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0; reverse(b,8);

for(i=6;i<10;i++) s+=b[i]; printf(\"%d\\n\ }

程序运行后的输出结果是_____。 A:22 B:10 C:34 D:30 答案:C 评析:

知识点:知识点/第8章 381、有以下程序 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\\n\ }

程序运行后的输出结果是______。 A:11 B:19 C:13 D:20 答案:B 评析:

知识点:知识点/第8章 382、有以下程序 #include main()

{char *p=\"abcde\\0fghjik\\0\"; printf(\"%d\\n\ }

程序运行后的输出结果是______。 A:12 B:15 C:6 D:5 答案:D 评析:

知识点:知识点/第10章 383、有以下程序 int fa(int x) {return x*x; }

138

int fb(int x) {return x*x*x; }

int f(int (*f1)(),int (*f2)(),int x) {return f2(x)-f1(x); } main() {int i;

i=f(fa,fb,2); printf(\"%d\\n\ }

程序运行后的输出结果是______。 A:-4 B:1 C:4 D:8 答案:C 评析:

知识点:知识点/第10章 384、有以下程序 void ss(char *s,char t) {while(*s)

{if(*s==t) *s=t-'a'+'A'; s++; } } main()

{char str1[100]=\"abcddfefdbd\ ss(str1,c); printf(\"%s\\n\ }

程序运行后的输出结果是______。 A:ABCDDEFEDBD B:abcDDfefDbD C:abcAAfefAbA D:Abcddfefdbd 答案:B 评析: 空

知识点:知识点/第10章 385、有以下程序 #include main() {char *p,*q;

p=(char *)malloc(sizeof(char)*20); q=p; scanf(\"%s%s\ }

若从键盘输入:abc def<回车>,则输出结果是______。 A:def def B:abc def C:abc d

139

D:d d 答案:A 评析:

知识点:知识点/第10章

386、以下程序中函数f的功能是将n个字符串,按由大到小的顺序进行排序。 #include

void f(char (*p) [10], int n) { char t[20]; int i,j; for(i=0;i{ strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);} } main()

{char p[][10]={\"abc\ f(p,5);

printf(\"%d\\n\ }

程序运行后的输出结果是 ________ A:6 B:4 C:5 D:3 答案:C 评析:

知识点:知识点/第10章 填空题

1、函数fun的功能是计算x^n。 double fun(double x,int n) {int i; double y=1; for(i=1;i<=n;i++) y=y*x; return y; }

主函数中已经正确定义m、a、b变量并赋值,并调用fun函数计算:m=a^4+b^4-(a+b)^3。实现这一计算的函数调用语句为______。

答案: 1:fun(a,4)+fun(b,4)-fun((a+b),3) 评析:

函数fun的功能是计算x的n次方,所以a的4次方的调用函数应当为fun(a,4),b的4次方的调用函数应当为fun(b,4),(a+b)的3次方的调用函数应当为fun((a+b),3),所以,实现m=a^4+b^4-(a+b)^3这一计算的函数调用语句为:fun(a,4)+fun(b,4)-fun((a+b),3);。

知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用

2、以下sstrcpy()函数实现字符串复制,即将t所指字符串复制到s所指内存空间中,形成一个新字符串s。请填空。

void sstrcpy(char *s,char *t) { while(*s++=______);} main()

{ char str1[100],str2[]=\"abcdefgh\";

140

sstrcpy(str1,str2); printf(\"%s\\n\}

答案: 1:*t++ 评析:

要使sstrcpy()函数实现字符串复制,必须将t字符串中的每个字符逐个拷到s字符串中,所以可以使用*s=*t;s++;t++。或者可以写成*s++=*t++,本题只有一个空,可以填入*t++。 知识点:知识点/指针/用指针作函数参数

3、以下程序给指针p分配三个double型动态内存单元,请填空。 #include main() { double *p;

p=(double*)malloc(______); p[0]=1.5; p[1]=2.5;p[2]=3.5; printf(\"%f%f%f\\n\}

答案: 1:3*sizeof(double) 评析:

malloc(size)在内存的动态存储区中分配一个长度为size的连续空间。此函数的值(即\"返回值\")是一个指针,它的值是该分配域的起始地址。如果此函数未能成功地执行,则返回值为0。 本题中要求分配三个double型动态内存单元,所以size处应当为3*sizeof(double)。 知识点:知识点/指针/各类型的指针及指针变量,通过指针引用各类型数据

4、以下程序运行后的输出结果是______。 main() { int a,b,c; a=25; b=025; c=0x25;

printf(\"%d %d %d\\n\}

答案: 25 21 37 评析:

本题考查的是格式字符的输出。

变量a、b、c分别为十进制、八进制、十六进制的25,格式字符d所代表的含义是,以带符号的十进制形式输出整数(正数不输出符号),所以本题a=25则输出值为25;b=025转换为10进制:b=2*8+5=16+5=21,则输出的值为21;c=0x25转换为10进制:c=2*16+5=32+5=37,则输出的值为37,而且printf中三个%d之用的是空格,所以输出的几个数字之间也必须是空格。 知识点:知识点/函数/变量的存储类别,变量的作用域和生存期 5、以下程序运行后的输出结果是______。 main ()

{ char a[]=\"Language\ char *p1,*p2; int k; p1=a; p2=b;

141

for(k=0;k<=7;k++)

if(*(p1+k)==*(p2+k)) printf(\"%c\}

答案: gae 评析:

本题考查的是字符指针变量与字符数组。 解题过程: (1) (2) (3) (4) (5) (6) (7) (8) (9)

当k=0时,*(p1+0)='L',*(p2+0)='P',L!=P,所以没有输出 当k=1时,*(p1+1)='a',*(p2+1)='r',a!=r,所以没有输出 当k=2时,*(p1+2)='n',*(p2+2)='o',n!=o,所以没有输出 当k=3时,*(p1+3)='g',*(p2+3)='g',g==g,所以输出g 当k=4时,*(p1+4)='u',*(p2+4)='r',u!=r,所以没有输出 当k=5时,*(p1+5)='a',*(p2+5)='a',a==a,所以输出a 当k=6时,*(p1+6)='g',*(p2+6)='m',g!=m,所以没有输出 当k=7时,*(p1+7)='e',*(p2+7)='e',e==e,所以输出e 当k=8时结束循环

(10) 输出结果为:gae。

知识点:知识点/数组的定义和引用/字符串与字符数组

6、以下程序通过函数SunFun和f(x),x=0到10,这里f(x)=x^2+1,由F函数实现,请填空。 main()

{ printf(\"The sun=%d\\n\SunFun(int n) { int x,s=0;

for(x=0;x<=n;x++)s+F(______); return s; } F(int x)

{ return (______);} 答案: 1:x 2:x*x+1 评析:

本题考查的是函数的调用。 解题过程:

(1)f(x)的含义为x的平方加上1 (2)所以F(int x)的返回值应该为 x*x+1

(3)SunFun(10)的作用是将0到10之间所有的整数相加求和 (4)所以F()的形式参数为x。

知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用

7、以下程序中,函数SumColumMin的功能是:求出M行N列二维数组每列元素中的最小值,并计算它们的和值。和值通过形参传回主函数输出。请填空。 #define M #define N

2 4

void SumColumMin(int a[M][N],int *sum)

142

{ int i,j,k,s=0; for(i=0;ifor(j=1;ja[j][i])k=j; s+=______ ; } ______ =s; } main()

{ int x[M][N]={3,2,5,1,4,1,8,3},s; SumColumMin(______); printf(\"%d\\n\}

答案: 1:a[k][i] 2:*sum 3:x,&s 评析:

本题考查的是函数参数的传送。 解题过程:

(1) 执行以i为变量的for语句 1)k=0

2)执行以j为变量的for语句 ①当j=1

②比较a[0][0]和a[1][0]的大小,如果a[0][0]大于a[1][0]则k=1;如果a[0][0]大于a[1][0]则k=0 ③j=2所以结束循环

3)此时a[k][i]就代表第一列中最小的值,要累计所有列中的最小值的和,应该在第一空内填写 a[k][i],用变量s累加。

(2) SumColumMin是一个无返回值的函数,其中形式参数*sum是一个指针类型,所以第二空应该填写 *sum,用来将该指针变量指向s

(3) 当主函数main调用SumColumMin时,需要两个实际参数,一个代表被操作的数组,一个为指向累计和的指针变量,所以第三个空应该为 x,&s,分别代表已经被定义的数组x,和整型变量s的地址。 知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用 8、以下程序的输出结果是 。 main() { int a=0; a+=(a=8); printf(\"%d\\n\}

答案: 16 评析:

本题的考查点是表达式。

表达式a+=8相当于a=a+8,对表达式逐步求解过程如下:

143

a+=(a+8)此时,a的值赋值为8,而不再是0; a+=8 a=a+8 a=16

故本题答案为16。

知识点:知识点/函数/形式参数与实在参数,参数值的传递

9、以下程序的输出结果是______。 #define MAX(x,y) main() { }

答案: 7 评析:

本题的考查点是宏定义。

宏替换后,表达式t = MAX(a + b, c + d)*10即变为:t = (a+b)>(c+d) ? (a+b) : (c + d)*10; 由于(a+b)>(c+d)为真, 所以t = (a+b),即为7。 故本题答案为:7。

知识点:知识点/编译预处理/宏定义:不带参数的宏定义;带参数的宏定义

10、函数mycmp(char *s,char *t)的功能是比较字符串s和t的大小,当s等于t时返回0,当s>t返回正值,当s{ if (*s=='\\0')return 0; ++s;++t; }

return(______); } 答案: *s-*t 评析:

本题的考查点是比较字符串的大小。

函数的两个形参是两个字符指针变量,字符串的首地址是指针变量的值,*s和*t表示字符串数组s和t的第一个字符,在while循环中,是通过s和t值的不断变化改变两个串的第一个字符,要返回s和t的第一个不同字符的ASCII码的差值,必须使用\"*s-*t\"得出。 故本题答案为:*s-*t。

知识点:知识点/函数/库函数的正确调用

11、若给fun函数的形参s传送字符串:\" 6354abc\则函数的返回值是______。(字符串中包括空格)

long fun(char s[ ]) { long n; int sign; for (; isspace(*s);s++);

int a = 5, b = 2,c = 3, d = 3, t; t = MAX(a + b, c + d)*10; printf(\"%d\\n\

(x)>(y)?(x):(y)

144

sign=(*s=='-')?-1:1; if (*s=='+' || *s=='-') s++; for (n=0;isdigit(*s);s++) n=10*n+(*s-'0'); return sign*n; }

答案: 6354 评析:

本题的考查点是函数的返回值。

这个函数的目的是提取出由函数的形参传送来的字符串中的数字字符,并通过相应各个字符位置计算出它们数值形式的幂,最后返回字符串中的数字字符的数值形式,所以函数的返回值应当是\"6354\"。 故本题答案为:6354。

知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用

12、以下程序段的输出结果为______。 char *p;int i,d; p=\"PDP1-0\"; for(i=0;i<7;i++) {

d=isdigit(*(p+i) ); if(d!=0)

printf(\"%c\\n\ }

答案: 1 评析:

本题的考查点是函数isdigit()。

这段程序的目的是按从左至右的顺序从字符串p中找出阿拉伯数字字符,如果找到,将其打印出来。最后的输出应当是: 1 0

知识点:知识点/函数/库函数的正确调用

13、下列程序中字符串中各单词之间有一个空格,则程序的输出结果是______。 # include main( )

{ char str1[ ]=\"How do you do\ *p1=str1; strcpy(str1+strlen(str1)/2,\"es she\"); printf(\"%s\\n\ }

答案: How does she 评析:

本题的考查点是字符串拷贝函数strcpy()。

strlen(str1)是求str1字符串的长度,为13,然后,进行除2运算,结果为6。strcpy()函数是把字符串\"es she\"拷贝到str1后的第6个字符后面,也就是说,拷贝后的结果是\"How does she\"。 故本题答案为:How does she。

145

知识点:知识点/函数/库函数的正确调用

14、下面的函数strcat(str1,str2)实现将字符串str2拼接到字符串str1后面的功能。请填空使之完整。 char *strcat(str1,str2) char *str1,*str2; { char *t=str1;

while(______)str1++; while(______); return(t);} 答案: 1:*str1!='\\0'

2:*str1++=*str2++

评析:

本题的考查点是字符串连接函数strcat()。

函数strcat(str1,str2)实现将字符串str2连接到字符串str1后面,所以首先要找到字符串str1的串尾,根据C语言的语法规定,一个串的串尾一定是一个隐含字符\"\\0\",而在程序中,对字符串中字符的访问是通过两个指针变量来完成的,因此要找到字符串str1的串尾,要判断*str1是否为\"\\0\",要找到字符串str2的串尾,要判断*str2是否为\"\\0\",程序中必须可以使字符串中字符逐一顺序体现,所以在题中我们应填写\"*str1\"和\"*str1++=*str2++ \"。

知识点:知识点/函数/库函数的正确调用 15、以下程序的输出结果是______。 void fun()

{ static int a=0; a +=2; printf(\"%d\} main() { int cc;

for(cc=1;cc<4;cc++) fun(); printf(\"\\n\"); }

答案: 246 评析:

循环for(cc=1;cc<4;cc++)被执行了3次。在函数fun中,由于a是static型变量,所以函数第1次调用后,a= 2;第2次调用后,a = 4;第3次调用后,a = 6。 知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用

16、若要使指针p指向一个double类型的动态存储单元,请填空。 p=______malloc(sizeof (double)); 答案: (double*) 评析:

函数malloc返回的是void*而不是double类型指针。所以要使指针p指向一个double类型的存储单元就必须进行强制类型转换。

知识点:知识点/函数/函数的类型和返回值

17、下列程序段的输出结果是______。

146

main()

{ char b[]=\"Hello,you\"; b[5]=0; printf(\"%s\\n\}

答案: Hello 评析:

字符串中,数值0或符号'\\0'表示字符串的结束。本题中,b[5]被赋了0值,表明字符串b的第六个字符就是结束标志。因此,只输出前五个字符,即Hello。

知识点:知识点/数组的定义和引用/一维数组和数组的定义、初始化和引用

18、下列程序的输出结果是______。 void fun(int *n) { while((*n)--); printf(\"%d\ } main()

{ int a=100; fun(&a); } 答案: 0 评析:

在函数fun()中,while((*n)--)是先引用*n的值,再做(*n)-- 运算,所以循环结束时*n的值为0,再做(*n)-- 运算后,*n的值为-1;执行++(*n)后,*n的值是0。

知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用

19、以下程序中,主函数调用了LineMax函数,实现在N行M列的二维数组中,找出每一行上的最大值。请填空:

#define N 3 #define M 4

void LineMax(int x[N][M]) { int i,j,p; for(i=0;ifor(j=1;jif(x[i][p]printf(\"The max value in line %d is %d\\n\ } } main()

{ int x[N][M]={1,.5,7,4,2,6,4,3,8,2, 3,1}; ______; }

答案: 1:p=j 2:a[i][p]

147

3:LineMax(x) 评析:

LineMax函数中运用了两个循环,外循环来控制数组的行,内循环控制列,在寻找每行最大的元素时,先把每行的第一个元素列下标即0赋给p,然后把后面的数逐一与之比较,如果大于它,则把大的数的列下标重新赋给p。

所以(1)处应该填p=j;

内循环结束后,便获得了本行中最大的数,即a[i][p],这也就是(2)处应该填写的答案;

而(3)处,很显然是要调用函数,关键就在于参数怎么写,函数中需要的是整个数组,所以应该把数组名做为实参,传递过去,(3)处的答案应该是LineMax(x)。注意大小写,C语言中大小写是不等价的。 知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用

20、若有如下结构体说明: struct STRU

{ int a,b;char c: double d; struct STRU *p1,*p2; };

请填空,以完成对t数组的定义,t数组的每个元素为该结构体类型。 ______t[20]

答案: struct STRU 评析:

本题主要考查考生对C语言中结构体的掌握。

结构体类型是构造数据类型,是用户自已定义的一种类型。 结构体类型的定义: struct 结构体类型名 {

成员项表; };

定义结构体变量的的形式为: struct 结构体类型名 变量1,变量2,...

其中变量包括:一般变量、指针变量、数组变量等。

知识点:知识点/数组的定义和引用/一维数组和数组的定义、初始化和引用 21、以下程序运行后的输出结果是______。 void fun(int x,int y) {x=x+y;y=x-y;x=x-y; printf(\"%d,%d,\main() {int x=2,y=3; fun(x,y);

printf(\"%d,%d\\n\ }

答案: 3,2,2,3 评析:

本题的考查点是交换变量的值。

被调函数fun()实现的功能是交换变量x和y的值并打印,由于该函数无返回值,所以在主函数中打印出

148

的x和y的值仍然为2,3。 故本题答案为:3,2,2,3。

知识点:知识点/函数/形式参数与实在参数,参数值的传递 22、下面程序的运行结果是:______。 #define N 10 #define s(x) x*x #define f(x) (x*x) main() {int i1,i2;

i1=1000/s(N);i2=1000/f(N); printf(\"%d %d\\n\ }

答案: 1000 10 评析:

本题的考查点是宏定义。

根据宏定义,变量i1的值为1000/10*10=1000,变量i2的值为1000/(10*10)=10。 故本题答案为:1000和10。

知识点:知识点/编译预处理/宏定义:不带参数的宏定义;带参数的宏定义 23、下面程序的运行结果是:______。 void swap(int *a,int *b) {int *t; t=a;a=b;b=t; } main()

{int x=3,y=5,*p=&x,*q=&y; swap(p,q);

printf(\"%d%d\\n\ }

答案: 35 评析:

本题的考查点是函数调用。

观察本题的程序可以看出,被调函数swap()实现的功能是交换变量的值,但由于函数不返回任何值,所以在main()函数中打印出的变量的值并没有发生交换,即仍为3和5。 故本题答案为:3和5。

知识点:知识点/函数/函数的类型和返回值

24、fun函数的功能是:首先对a所指的N行N列的矩阵,找出各行中的最大的数,再求这N个最大值中的最小的那个数作为函数值返回。请填空。 #include #define N 100 int fun(int(*a)[N]) {int row,col,max,min; for(row=0;row{for(max=a[row][0],col=1;col149

if(row==0) min=max; else if(______) min=max; } return min; }

答案: 1:max本题的考查点是求矩阵最大值的算法。

本题中的第一空要求判断出每一行中的最大数,应该填写条件max知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用 25、以下程序的输出结果是______。 #define MCRA(m) 2*m

#define MCRB(n,m) 2*MCRA(n)+m main() { int i=2,j=3;

printf(\"%d\\n\}

答案: 16 评析:

本题的考查点是带参数的宏定义。

带参数的宏定义是这样展开置换的:在程序中如果有带实参的宏,则按#define 命令行中指定的字符串从左到右进行置换。如果串中包含形参,则将程序语句中相应的实参(可以是常量、变量或表达式)代替形参,如果宏定义中的字符串中的字符不是参数字符,则保留。因此对MCRB(j,MCRA(i))进行宏展开就得到了2*MCRA(j)+MCRA(i),即:2*2*j+2*i=2*2*3+2*2=16。 故本题答案为:16。

知识点:知识点/编译预处理/宏定义:不带参数的宏定义;带参数的宏定义

26、以下程序的功能是调用函数fun计算:m=1-2+3-4+…+9-10,并输出结果。请填空。 int fun ( int n) { int m=0,f=1,i; for(i=1; i<=n; i++) { m+=i*f; f=______; } return m; } main()

{ printf(\"m=%d\\n\答案: 1:-f 2:fun(10) 评析:

150

本题的考查点是C程序设计。根据程序写出运行结果。

考察的知识点主要是函数的调用。本题利用一个fun函数来完成题目要求的计算。程序中f起的作用是控制i*f的符号,看的出,偶数位都为负值,所以f的值为(-1)^(i+1),最后要求输出m的值,在输出中调用fun函数,并把实参10传给n。

知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用 27、以下程序运行后的输出结果是______。 main()

{ int i,n[]={0,0,0,0,0}; for(i=1;i<=4;i++) { n[i]=n[i-1]*2+1; printf(\"%d \ } }

答案: 1 3 7 15 评析:

本题的考查点是C程序设计。根据程序写出运行结果。

该程序考察的是数组的知识点,n是一个有5个元素,且元素值全为0的数组。程序运行过程时先进行for循环,i=1时,n[1]=n[0]*2+1,此时n[1]=1;执行i++;i=2时,再进行循环,n[2]=n[1]*2+1,此时n[2]=3,再执行i++,此时i=3,继续循环,n[3]=n[2]*2+1,此时n[3]=7,然后i=4时,n[4]=n[3]*2+1,此时n[4]=15。循环结束。注意输出函数中%d后有空格。

知识点:知识点/数组的定义和引用/一维数组和数组的定义、初始化和引用 28、请在以下程序第一行的下划线处填写适当内容,使程序能正常运行。 ______( double,double); main()

{ double x,y;

scanf(\"%1f%1f\ printf(%1f\\n\}

double max(double a,double b) { return(a>b ? a:b);} 答案: double max 评析:

本题的考查点是C程序设计。调试程序,把不完善的程序进行修改和补充,使之能得到正确的结果。 主函数里可以看到调用了一个max函数,函数在被调用之前需要先定义,所以要求填空的内容应该是对函数进行定义的语句。由题目内容也可以看出此函数是double型的。 知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用

29、有以下程序 void f(int y,int *x) { y=y+*x; *x=*x+y;} main() { int x=2,y=4; f(y,&x);

printf(\"%d %d\\n\

151

}

执行后输出的结果______。 答案: 8 4 评析:

f函数中变量x传递的是变量的地址,可以实现值的变换,而变量y是传递的值,执行完f后,y的值是变了,但main函数中的y并未变化。也就是说由于\"单向传送\"的\"值传递\"方式,形参值的改变无法传给实参。 知识点:知识点/函数/形式参数与实在参数,参数值的传递 31、C语言程序的基本单位是______ 答案:函数

32、设有说明语句:char a= '\\72';则变量a包含______个字符、 答案:1

33、c语言是一种______(选择面向对象或面向过程)高级程序设计语言。 答案:面向过程

34、C语言中唯一的三目运算符是______ 答案:条件运算符#? :

35、C语言中结束一次循环的语句是______ 答案:continue

36、C语言中结束整个循环的语句是______ 答案:break

37、二维数组a中元素a[2][2]的值是______ a[4][5]={{1,2,3},{3,2,1,6},{1}}; 答案:0

38、写出下面个逻辑表达式的值,设a=3,b=4,则c=5 a || b+c && b-c=______ 答案:1

39、写出下面个逻辑表达式的值,设a=3,b=4,则! (a+b)+c –1 && b+ c/2 =______ 答案:1

40、在C语言中打开文件的函数名称是______ 答案:fopen#fopen()

41、在C语言中关闭文件的函数名称是______ 答案:fclose#fclose()

42、C语言中基本的数据类型有______

答案:int float char # 整型 实型 字符型 43、设y是int型变量,请写出判断y为奇数的关系表达______ 答案:y%2!=0 # y%2==1 # y%2 44、以下程序运行后的输出结果是______ main() { int i=10,j=0; do { j=j+i; i-; while(i>2); printf(\"%d\\n\ } 答案:52

45、设有以下程序: main()

152

{ int n1,n2; scanf(\"%d\ while(n2!=0) { n1=n2%10; n2=n2/10; printf(\"%d\ } }

程序运行后,如果从键盘上输入1298;则输出结果为______ 答案:21

46、以下程序输出的最后一个值是______ int ff(int n) { static int f=1; f=f*n; return f; } main() { int i;

for(i=1;i<=5;i++) printf(\"%d\\n\} 答案:120

47、设有以下程序: main()

{ int a, b, k=4, m=6, *p1=&k, *p2=&m; a=pl==&m; b=(*p1)/(*p2)+7; printf(\"a=%d\\n\ printf(\"b=%d\\n\ }

执行该程序后,a的值为______b的值为______ 答案:0 @ 7

48、 函数fun的功能是:累加数组元素中的值。n为数组中元素的个数。累加的和值放入x所指的存储单元中。

fun(int b[], int n ,int *y) {for(k=0;______;k++) r=r+b[k]; *y=______; }

答案:k51、以下程序运行后的输出结果是______ main()

153

{ char m;

m='B'+32; printf(\"%c\} 答案:b

52、以下程序运行后的输出结果是______ main()

{ int a=1,b=3,c=5; if (c=a+b) printf(\"yes\\n\"); else printf(\"no\\n\"); }

答案:yes

53、以下程序运行后的输出结果是______ main()

{ int i,m=0,n=0,k=0; for(i=9; i<=11;i++) switch(i/10)

{ case 0: m++;n++;break; case 10: n++; break; default: k++;n++; }

printf(\"%d %d %d\\n\}

答案:1 3 2

54、执行以下程序后,输出'*'号的个数是______ #include main() { int i,j;

for(i=1; i<5; i++)

for(j=2; j<=i; j++) putchar('*'); } 答案:6

55、以下程序的功能是调用函数fun计算:m=1-2+3-4+…+9-10,并输出结果,请填空. int fun( int n) { int m=0,f=1,i; for(i=1; i<=n; i++) { m+=i*f; f=______; } return m; } main()

{ printf(\"m=%d\\n\答案:-f@ fun(10)

56、假定p所指对象的值为25,p+1所指对象的值为46,则执行\"(*p)++;\"语句后, p所指对象的值为______

154

答案:26

56、空字符串的长度是______’\’所占的长度为______ 答案:0@1

57、若从键盘输入58,则以下程序输出的结果是______ main() { int a;

scanf(\"%d\if(a>50) printf(\"%d\if(a>40) printf(\"%d\if(a>30) printf(\"%d\} 答案:585858

58、以下程序的输出结果是______ main()

 { char *p=\"abcdefgh\ long *q;  q=(long*)p;  q++;  r=(char*)q;  printf(\"%s/n\} 答案:efgh

59、以下定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成员变量link是指向自身结构体的指针.请将定义补充完整。 struct node  {int info; ______ link; }

答案:struct node * 60、有以下程序 main( )

{ int n=0,m=1,x=2; if(!n) x-=1; if(m) x-=2; if(x) x-=3; printf(\"%d\\n\}

执行后输出结果是______ 答案:-4

61、#include main()

{ char ch1,ch2; int n1,n2; ch1=getchar(); ch2=getchar(); n1=ch1-'0'; n2=n1*10+(ch2-'0');

155

printf(\"%d\\n\}

程序运行时输入:12,执行后输出结果是______ 答案:12 62、有以下程序 void f( int y,int *x) {y=y+*x; *x=*x+y;} main( ) { int x=2,y=4; f(y,&x);

printf(\"%d %d\\n\}

执行后输出的结果是______ 答案:8 4

63、以下程序段打开文件后,先利用fseek函数将文件位置指针定位在文件末尾,然后调用ftell函数返回当前文件位置指针的具体位置,从而确定文件长度,请天空。 FILE *fp;long f1;

fp=fopen(“test”,”rb”); ______ F1=ftell(fp); fclose(fp);

答案:fseek(fp,0,SEEK_END)#fseek(fp,0,-2)

、以下程序功能是将数组里面的元素写入文件d2.dat中(使用fprintf函数),请填空。 #include main()

{FILE *fp; a[3]={1,2,3}; fp=fopen(\"d2.dat\______ fclose(fp); }

答案:fprintf(fp,\"%d%d%d\\n\

65、以下程序功能是从文件d2.dat中读入读出数据放到数组a中(使用fscanf函数),请填空。 #include main()

{FILE *fp; a[2]; fp=fopen(\"d2.dat\______ fclose(fp); }

答案:fscanf(fp,\"%d%d\66、以下程序的输出结果是______ main( )

{char s[ ]= \"abcdef \"; s[3]= '\\0';

156

printf(\"%s\\n\}

答案:abc

67、下列程序段的输出结果是______ main( )

{ char b[]=\"Hello,you\"; b[5]=0;

printf(\"%s\ }

答案:Hello

68、以下程序的输出结果是______ main() { } 答案:10

69、以下程序运行后的输出结果是______ main( )

{ char s[]=\"9876\ p=s; p++; ++p; puts(p); } 答案:76

70、mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回,请填空: int mystrlen(char *str) {int i;

for(i=0; str[i] != '\\0';i++) ; return ______; } 答案:i-1

71、以下程序用来统计文件中字符个数、请填空: #include\"stdio、h\" main( )

{FILE *fp; long num=0L;

if((fp=fopen(\"fname、dat\ {printf(\"Open error\\n\"); exit(0);} while(______) {fgetc(fp); num++;} printf(\"num=%ld\\n\fclose(fp);

int a[]={30,25,20,15,10,5},*p=a; p++;

printf(\"%d\

157

}

答案:!feof(fp)

72、下面程序把从终端读入的文本(用@作为文本结束标志)输出到一个名为bi.dat的新文件中,请填空. #include \"stdio.h\" FILE *fp; { char ch;

if( (fp=fopen (______) )= = NULL) exit(0); while( (ch=getchar( )) !='@') fputc (ch,fp); fclose(fp); }

答案:”bi.dat”,”r”

73、用以下语句调用库函数malloc,使字符指针st指向具有11个字节的动态存储空间,请填空。 st=(char*) ______; 答案:malloc(11)

74、若要使指针p指向一个double类型的动态存储单元,请填空. p=______malloc(sizeof(double)); 答案:(double*)

75、以下程序通过函数指针p调用函数fun,请在填空栏内,写出定义变量p的语句、 void fun(int *x,int *y) { ……} main( ) { int a=10,b=20; ______; /定义变量p */ p=fun; p(&a,&b); …… }

答案:void (*p)(int,int);

76、以下程序的输出结果是______ main( )

{ int arr[ ]={30,25,20,15,10,5}, *p=arr; p++;

printf(\"%d\\n\} 答案:30

77、若有以下定义,则不移动指针p,且通过指针p引用值为98的数组元素的表达式是______ int w[10]={23,54,10,33,47,98,72,80,61}, *p=w; 答案:*(p+5)#p[5]

78、以下定义的结构体类型拟包含两个成员,其中成员变量info用来存入整型数据;成员变量link是指向自身结构体的指针,请将定义补充完整、 struct node {int info; ______ link; }

答案:struct node *

158

79、设有如下宏定义

#define MYSWAP(z,x,y) {z=x;x=y;y=z}

以下程序段通过宏调用实现变量a,b内容交换,请填空: float a=5,b=16,c; MYSWAP(______,a,b); 答案:c

80、以下程序段用于构成一个简单的单向链表,请填空. struct STRU { int x, y ; float rate; ______p; } a, b;

a.x=0; a.y=0; a.rate=0; a.p=&b; b.x=0; b.y=0; b.rate=0; b.p=NULL; 答案:struct STRU *

81、设有以下结构类型说明和变量定义,则变量a在内存所占字节数是______ Struct stud { char num[6]; int s[4]; double ave; } a,*p; 答案:14

82、下列程序段的输出结果是______ int n='c'; switch(n++)

{ default: printf(\"error\");break;

case 'a': case 'A': case 'b': case 'B': printf(\"good\");break; case 'c': case 'C': printf(\"pass\"); case 'd': case 'D': printf(\"warn\"); }

答案:passwarn

83、以下程序的输出结果是______ main( ) {int s,i;

for(s=0,i=1;i<3;i++,s+=i) ; printf(\"%d\\n\} 答案:5

84、设有以下程序: main( ) { int n1,n2; scanf(\"%d\while(n2!=0) { n1=n2%10;

159

n2=n2/10; printf(\"%d\}

程序运行后,如果从键盘上输入1234;则输出结果为______ 答案:4321

85、要使以下程序段输出10个整数,请填入一个整数、 for(i=0;i<=______;printf(\"%d\\n\答案:18

86、若输入字符串:abcde,则以下while循环体将执行______次 While((ch=getchar( ))== 'e') printf(\"*\"); 答案:4

87、以下程序的输出结果是______ main( ) {int a=177; printf(\"%o\\n\}

答案:261

88、以下程序的输出结果是______ main( ) {int a=0; a+=(a=8); printf(\"%d\\n\} 答案:16

、以下程序的输出结果是______ main( )

{int a=5,b=4,c=3,d; d=(a>b>c); printf(\"%d\\n\} 答案:0

90、以下程序的输出结果是______ main( ) {int x=0; sub(&x,8,1); printf(\"%d\\n\}

sub(int *a,int n,int k) {if(k<=n) sub(a,n/2,2*k); *a+=k; } 答案:7

91、以下程序输出的最后一个值是______ int ff(int n)

160

{ static int f=1; f=f*n; return f; } main( ) { int i;

for(i=1;i<=5;i++ ) printf(\"%d\\n\}

答案:120

92、已知某程序中有预处理命令#include ,为使语句”zx=fopen(“c:\\\\n.txt”,r”)能正常执行,在该语句之前必须有定义______ 答案:FILE *zx

93、以下程序的输出结果为______ main() { } 答案:14

94、变量a所占的字节数是______ union {char aa[10],long bb, int cc } a; 答案:10

95、以下函数的功能是删除字符串s中的所有空格。请填空。 viod dele(char *s) { int n=0,i; for(i=0;s[i];i++)

if(a[i]!=’ ’) s[n++]=s[i]; s[n]= ______; }

答案:’\\0’ 96、有以下程序

main()

{char ch[]=“uvwxyz”,*pc; pc=ch; printf(“%c\\n”,*(pc+5)); } 程序运行后的输出结果是______ 答案:z

97、设有如下说明 typedef struct

{ int n; char c; double x;}STD;

则要定义一个变量stu是以上说明的变量则正确定义方式是______ 答案:STD stu

98、c语言运算符中优先级最低的是______运算符 答案:,#逗号

int a=10; a=(3*5,a=4);

printf(“%d”,a);

161

99、设有定义:FILE *fw;请将以下文件的语句补充完整,以便可以向文本文件readme.txt的最后续写内容。 fw=fopen();

答案:”readme.txt”,”a” 100、以下程序输出结果是______ #include #define M 5 #define N M+M main() {

int k; k=N*N*5; k=N*N*5; printf(\"%d\}_ 答案:55

162

因篇幅问题不能全部显示,请点此查看更多更全内容