二级C语言教程课后习题详解.docx

上传人:b****8 文档编号:9331511 上传时间:2023-02-04 格式:DOCX 页数:64 大小:57.18KB
下载 相关 举报
二级C语言教程课后习题详解.docx_第1页
第1页 / 共64页
二级C语言教程课后习题详解.docx_第2页
第2页 / 共64页
二级C语言教程课后习题详解.docx_第3页
第3页 / 共64页
二级C语言教程课后习题详解.docx_第4页
第4页 / 共64页
二级C语言教程课后习题详解.docx_第5页
第5页 / 共64页
点击查看更多>>
下载资源
资源描述

二级C语言教程课后习题详解.docx

《二级C语言教程课后习题详解.docx》由会员分享,可在线阅读,更多相关《二级C语言教程课后习题详解.docx(64页珍藏版)》请在冰豆网上搜索。

二级C语言教程课后习题详解.docx

二级C语言教程课后习题详解

新视野教育二级C语言教程课后习题详解

(以修订版教材为准)

第一章C语言的基础知识

第二节熟悉VisualC++

1.C语言源程序名的后缀是B

A).exeB).cC).objD).cp

*C语言源程序的拓展名为.C

2.下列叙述中错误的是D

A)计算机不能直接执行用C语言编写的源程序

B)C程序经C编译后,生成后缀为.obj的文件是一个二进制文件

C)后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一个二进制文件

D)后缀为.obj和.exe的二进制文件都可以直接运行

*后缀为.obj的目标文件不能直接运行

3.用C语言编写的代码程序B

A)可立即执行B)是一个源程序

C)经过编译即可执行D)经过编译解释才能执行

第三节标识符

1.按照C语言规定的用户标识符命名规则,不能出现在标识符中的是B

A)大写字母B)连接符C)数字字符D)下划线

*标识符的命名中不能出现连接符

2.以下选项中不合法的标识符是C

A)printB)FORC)&aD)_00

*标识符中不能出现“&”

3.以下叙述中错误的是A

A)用户所定义的标识符允许使用关键字

B)用户所定义的标识符应尽量做到“见名知意”

C)用户所定义的标识符必须以字母或下划线开头

D)用户定义的标识符中,大、小写字母代表不同标识

*用户自定义标识符不允许使用关键字

4.可在C程序中用作用户标识符的一组标识符是A

A)andB)DateC)HiD)case

_2007y-m-dDr.TomBigl

*B答案出现了连接符、C答案出现小数点、D答案出现关键字

5.以下不合法的用户标识符是C

A)j2_KEYB)DoubleC)4dD)_8_

*开头第一个字符不能为数字

6.以下不能定义为用户标识符的是D

A)MainB)_0C)_intD)sizeof

*sizeof为关键字

7.下列选项中,不能用作标识符的是D

A)_1234_B)_1_2C)int_2_D)2_int_

*开头第一个字符不能为数字

8.以下4组用户定义标识符中,全部合法的一组是A

A)_mainB)IfC)txtD)int

enclude-maxREALk_2

sinturbo3COM_001

*B答案出现连接符、C答案出现数字开头、D答案出现关键字

第五节整数和实数

1.以下选项中正确的整型常量是C

A)10110BB)0386C)0XffaD)x2a2

2.以下关于long、int和short类型数据占用内存大小的叙述中正确的是D

A)均占4个字节B)根据数据的大小来决定所占内存的字节数

C)由用户自己定义D)由C语言编译系统决定

3.以下选项中不属于C语言的类型的是D

A)signedshortintB)unsignedlongint

C)unsignedintD)longshort

4.以下选项中合法的实型常数是C

A)5E2.0B)E-3C).2E0D)1.3E

5.以下选项中,不能作为合法常量的是B

A)1.234e04B)1.234e0.4C)1.234e+4D)1.234e0

6.以下选项中可作为C语言合法常量的是A

A)-80.B)-080C)-8e1.0D)-80.0e

7.以下符合C语言语法的实型常量是C

A)1.2E0.5B)3.14.159EC).5E-3D)E15

8.以下不合法的数值常量是C

A)011B)lelC)8.0E0.5D)0xabcd

9.以下选项中,合法的一组C语言数值常量是B

A)028B)12.C).177D)0x8A

5e-3OXa234c1.510,000

-0xf4.5e0Oabc3.e5

10.下列定义变量的语句错误的是D

A)int_int;B)doubleint_;C)longFor;D)floatUS$;

第六节算术表达式与赋值表达式

习题

1.表达式3.6-5/2+1.2+5%2的值是D

A)4.3B)4.8C)3.3D)3.8

*3.6-2+1.2+1=3.8

2.设有定义:

floatx=123.4567;,则执行以下语句后输出的结果是_____。

123.460000

printf("%f\n",(int)(x*100+0.5)/100.0);

*(int)12346.17/100.0=12346/100.0=123.46格式控制为“%f”

3.设有定义:

floata=2,b=4,h=3;,以下C语言表达式与代数式×h计算结果不相符的是B

A)(a+b)*h/2B)(1/2)*(a+b)*h

C)(a+b)*h*1/2D)h/2*(a+b)

*因为1/2=0,故B答案结果不相符

第七节自加自减运算符、逗号表达式

习题

1.设变量已正确定义为整型,则表达式n=i=2,++i,i++的值为______。

3

*表达式3的值为整个表达式的值

2.设有定义:

intk=0;,以下选项的4个表达式中与其他3个表达式的值不相同的是A

A)k++B)k+=1C)++kD)k+1

*执行k++,表达式的值为k自加之前的值0

3.有以下程序B

main()

{

chara1='M',a2='m';

printf("%c\n",(a1,a2));

}

以下叙述中正确的是

A)程序输出大写字母MB)程序输出小写字母m

C)格式说明符不足,编译出错D)程序运行时产生出错信息

*逗号表达式的值为最后一个表达式的值

4.有以下程序:

B

main()

{inta=0,b=0;

a=10;/*给a赋值

b=20;给b赋值*/

printf("a+b=%d\n",a+b);/*输出计算结果*/

}

程序运行后的结果是

A)a+b=30B)a+b=10C)30D)程序出错

*本题要注意的是注释部分应该包括:

/*给a赋值b=20;给b赋值*/,也就是说“b=20;”也被系统作为注释处理

第八节字符

1.以下选项中不属于字符常量的是()。

B

A)'C'B)"C"C)'0'D)'\072'

2.已知字母A的ASCⅡ代码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是()。

B

A)kk>='A'&&kk<='Z'B)!

(kk>='A'‖kk<='Z')

C)(kk+32)>='a'&&(kk+32)<='z'D)kk>=65&&kk<91

3.已知字符'A'的ASCⅡ代码值是65,字符变量c1的值是'A',c2的值是'D'。

执行语句printf("%d,%d",c1,c2-2);后,输出结果是()。

C

A)A,BB)A,68C)65,66D)65,68

4、以下不合法的字符型常量是B

A)'\x13'B)'\018'C)'65'D)'\n'

5.已知大写字母A的ASCII码是65,小写字母a的ASCII码是97,以下不能将变量c中大写字母转换为对应小写字母的语句是()。

D

A)c=c-'Z'+'z'B)c=c+32

C)c=c-'A'+'a'D)c='A'+c-'a'

第九节位运算

1.变量a中的数据用二进制表示的形式是01011101,变量b中的数据用二进制表示的形式是11110000。

若要求将a的高4位取反,低4位不变,所要执行的运算是A

A)a^bB)a|bC)a&bD)a<<4

2.有以下程序

#include

main()

{

inta=1,b=2,c=3,x;

x=(a^b)&c;printf("%d\n",x);

}

程序的运行结果是D

A)0B)1C)2D)3

3.有以下程序

main()

{

unsignedchara=2,b=4,c=5,d;

  d=a|b;d&=c;printf("%d\n",d);

}

程序运行后的输出结果是B

A)3B)4C)5D)6

4.若变量已正确定义,则以下语句的输出结果是()。

B

s=32;s^=32;printf("%d",s);

A)-1B)0C)1D)32

*两个相同的数进行按位异或,结果为0

5.设有以下语句

inta=1,b=2,c;

c=a^(b<<2);

执行后,c的值为D

A)6B)7C)8D)9

第二章数据输出与输入

第二节数据输出

1.有以下程序段

charch;

intk;

ch='a';

k=12;

printf("%c,%d,",ch,ch,k);

printf("k=%d\n",k);

已知字符a的ASCII十进制代码为97,则执行上述程序段后输出结果是D

A)因变量类型与格式描述符的类型不匹配输出无定值

B)输出项与格式描述符个数不符,输出为零值或不定值

C)a,97,12k=12

D)a,97,k=12

2、有以下程序段:

main()

{intx,y,z;

x=y=1;

z=x++,y++,++y;

printf(“%d,%d,%d\n”,x,y,z);

}

程序运行后的输出结果是C

A)2,3,3B)2,3,2C)2,3,1D)2,2,1

*分析过程见教材25页例3

3.有以下程序,其中%u表示按无符号整数输出

main()

{

unsignedshortx=0xFFFF;/*x的初值为十六进制数*/

printf("%u\n",x);

}

程序运行后的输出结果是B

A)-1B)65535C)32767D)0XFFFF

4.以下叙述中不正确的是A

A)调用printf函数时,必须要有输出项

B)使用putchar函数时,必须在之前包含头文件stdio.h

C)在C语言中,整数可以以十进制、八进制或十六进制的形式输出

D)使用putchar函数可以不要输出项

5.设有以下程序

main()

{

intc=35;printf("%d",c&c);

}

程序运行后的输出结果是C

A)0B)70C)35D)53

*两个相同的数进行按位与时,结果等于本身

6.以下程序运行后的输出结果是______________。

88

main()

{

intx=0210;printf("%X\n",x);

}

*将八进制数转为十六进制数输出

第三节数据输入

1.以下程序运行时若从键盘输入:

102030<回车>。

输出结果是____。

A

#include

main()

{

inti=0,j=0,k=0;

scanf("%d%*d%d",&i,&j,&k);

printf("%d,%d,%d",i,j,k);

}

A)10,30,0B)10,20,30C)0,0,0D)程序出错

*注意%*d为跳过输入的数据

2.已知字符A的ASCII代码值为65,以下程序运行时若从键盘输入:

B33<回车>。

输出结果是B

#include"stdio.h"

main()

{

chara,b;

a=getchar();scanf("%d",&b);

a=a-‘A’+’0’;

b=b*2;

printf("%c%c",a,b);

}

A)程序段有语法错B)1BC)165D)1b

*a=a-‘A’+’0’;即a=66-65+48b=b*2;即b=33*2得出结果后找到对应的字符输出

3.有以下程序

main()

{

intm=0256,n=256;

printf("%o%o\n",m,n);

}

程序运行后的输出结果是( )。

A)02560400B)0256256C)256400D)400400

*m为八进制数n为十进制数%O指输出八进制数输出是不带前导

4.有以下程序

main()

{

inta=666,b=888;

printf("%d\n",a,b);

}

程序运行后的输出结果是( )。

B

A)错误信息B)666C)888D)666,888

*%d只与输出列表中的变量a对应,注意区别printf(“%d\n”,(a,b));

5.设有以下程序

main()

{

intx=102,y=012;

printf("%2d,%d\n",x,y);

}

执行后输出结果是C

A)10,01B)02,12C)102,10D)02,10

*%d为输出十进制整数,所以要将八进制转为十进制

6.执行以下程序时输入1234567,则输出结果是________。

1234

#include

main()

{

inta=1,b;

scanf("%2d%2d",&a,&b);printf("%d%d\n",a,b);

}

第三章选择结构

第一节关系运算与逻辑运算

1.已知字母A的ASCⅡ代码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是B

A)kk>='A'&&kk<='Z'B)!

(kk>='A'‖kk<='Z')

C)(kk+32)>='a'&&(kk+32)<='z'D)isalpha(kk)&&(kk<91)

*isalpha(kk)检查kk是否为字母,是,返回1,否,返回0

2.当变量c的值不为2、4、6时,值也为“真”的表达式是B

A)(c==2)‖(c==4)‖(c==6)B)(c>=2&&c<=6)‖(c!

=3)‖(c!

=5)

C)(c>=2&&c<=6)&&!

(c%2)D)(c>=2&&c<=6)&&(c%2!

=1)

3.以下选项中,当x为大于1的奇数时,值为0的表达式D

A)x%2==1B)x/2C)x%2!

=0D)x%2==0

4.以下关于逻辑运算符两侧运算对象的叙述中正确的是()。

D

A)只能是整数0和1B)只能是整数0或非0整数

C)可以是结构体类型的数据D)可以是任意合法的表达式

5.设有定义:

intk=1,m=2;floatf=7;,则以下选项中错误的表达式是C

A)k=k>=kB)-k++C)k%int(f)D)k>=f>=m

*强制类型转换的格式必须为:

(类型名)表达式

6.设有定义:

inta=2,b=3,c=4;,则以下选项中值为0的表达式是A

A)(!

a==1)&&(!

b==0)B)(!

a==1)||(!

b==0)

C)a&&bD)a||(b+b)&&(c-a)

第二节if语句

1.若变量已正确定义,有以下程序段

inta=3,b=5,c=7;

if(a>b)a=b;c=a;

if(c!

=a)c=b;

printf("%d,%d,%d\n",a,b,c);

其输出结果是B

A)程序段有语法错B)3,5,3C)3,5,5D)3,5,7

*if表达式后的语句只能是一个语句或者一个复合语句

2.当把以下4个表达式用作if语句的控制表达式时,有一个选项与其他3个选项含义不同,这个选项是D

A)k%2B)k%2==1C)(k%2)!

=0D)!

k%2==1

*前三个是对k%2后的结果进行判断,而D答案是对k进行逻辑非后再除二取余

3.下列条件语句中,功能与其他语句不同的是D

A)if(a)printf("%d\n",x);elseprintf("%d\n",y);

B)if(a==0)printf("%d\n",y);elseprintf("%d\n",x);

C)if(a!

=0)printf("%d\n",x);elseprintf("%d\n",y);

D)if(a==0)printf("%d\n",x);elseprintf("%d\n",y);

*前三个都是当a不等于0时输出x,a等于0时输出y,D答案相反

4.设变量x和y均已正确定义并赋值,以下if语句中,在编译时将产生错误信息的是C

A)if(x++);B)if(x>y&y!

=0);

C)if(x>y)x--D)if(y<0){;}

elsey++:

elsex++;

*无语句结束标志“;”

第三节嵌套的if语句

1.在嵌套使用if语句时,C语言规定else总是C

A)和之前与其具有相同缩进位置的if配对B)和之前与其最近的if配对

C)和之前与其最近的且不带else的if配对D)和之前的第一个if配对

2.有以下程序

main()

{inta=5,b=4,c=3,d=2;

if(a>b>c)

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

elseif((c-1>=d)==1)

printf("%d\n",d+1);

else

printf("%d\n",d+2)

}

执行后输出结果是D

A)2B)3C)4D)编译时有错,无结果

*无语句结束标志“;”

第四节条件表达式、switch语句、goto语句

1.以下程序段中与语句k=a>b?

(b>c?

1:

0):

0;功能等价的是A

A)if((a>b)&&(b>c))k=1;B)if((a>b)||(b>c))k=1;

elsek=0;elsek=0;

C)if(a<=b)k=0;D)if(a>b)k=1;

elseif(b<=c)k=1;elseif(b>c)k=1;

elsek=0;

2.下列叙述中正确的是D

A)break语句只能用于switch

B)在switch语句中必须使用default

C)break语句必须与switch语句中的case配对使用

D)在switch语句中,不一定使用break语句

*break还能用于循环体中

3.有以下程序段

intk=0,a=1,b=2,c=3;

k=a

b:

a;k=k>c?

c:

k;

执行该程序段后,k的值是B

A)3B)2C)1D)0

4.有以下程序

#include

main()

{

intx=1,y=0,a=0,b=0;

switch(x)

{

case1:

switch(y)

{

case0:

a++;break;

case1:

b++;break;

}

case2:

a++;b++;break;

case3:

a++;b++;

}

printf("a=%d,b=%d\n",a,b);

}

程序的运行结果是D

A)a=1,b=0B)a=2,b=2C)a=1,b=1D)a=2,b=1

*考点:

switch后有无break

5.以下程序的输出结果是C

main()

{inta=5,b=4,c=6,d;

printf("%d\n",d=a>b?

(a>c?

a:

c):

(b));

}

A)5B)4C)6D)不确定

第四章循环结构

第一节while语句

习题

1.有以下程序

main()

{inty=10;

while(y--);printf("y=%d\n",y);

}

程序执行后的输出结果是B

A)y=0B)y=-1 C)y=1 D)while构成无限循环

*此题考点为循环体语句为空语句,当y—表达式的值为0时结束循环,故y的值为-1

2.有以下程序

main()

{

intk=5;

while(--k)printf("%d",k-=3);

printf("\n");

}

执行后的输出结果是A

A)1B)2C)4D)死循环

*①k=5时,执行--k后,k=4,表达式的值为4,为真,执行输出语句k-=3,k=1,输出1

②再次执行--k表达式,k=0,表达式的值为0,结束循环

第二节do-while语句

1.若变量已正确定义,有以下程序段

i=0;

do

printf("%d,",i);

while(i++);

printf("%d\n",i)

其输出结果是B

A)0,0B)0,1C)1,1D)程序进入无限循环

*执行第一个输出语句时,输出i的值为0;执行while语句,循环体语句为空,i++表达式的值为0是i的值为1,执行最后一个输出语句时输出i的值为1

2.有以下程序段

intn,t=1,s=0;

scanf("%d",&n);

do{s=s+t;t=t-2;}while(t!

=n);

为使此程序段不陷入死循环,从键盘输入的数据应该是D

A)任意正奇数B)任意负偶数C)任意正偶数D)任意负奇数

3.以下程序的功能是:

将输入的正整数按逆序输出。

例如,若输入135,则输出531,请填空。

n/=10

#include

main()

{

intn,s;

printf("Enteranumber:

");scanf("%d",&n);

printf("Output:

");

do

{

s=n%10;printf("%d",s);

_____;

}while(n!

=0);

printf("\n");

}

*答案:

n=n/10

分析:

假如输入的值为135,那么n=135

(1)n=135,do:

s=n%10,那么s的值为5,输出s的值为5。

接着我们要输出3才能将n逆序输出。

在学习%和/的时候总结过:

135/10=13,135%10=5,因此我们试着将后面的空填上n=n/10,那么n的值为13,判断(n!

=0)为真。

(2)n=13,do:

s=n%10,那么s的值为3,输出s的值为3。

执行n=n/10后n的值为1,判断(n

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1