C语言习题(详细解答) 下载本文

内容发布更新时间 : 2024/5/3 10:29:15星期一 下面是文章的全部内容请认真阅读。

程序设计基础(C语言版)习题

第01章 一.选择题

1.以下叙述中正确的是________。

A)程序设计的任务就是编写程序代码并上机调试 B)程序设计的任务就是确定所用数据结构 C)程序设计的任务就是确定所用算法 D)以上三种说法都不完整

【解析】 程序设计通常分为问题建模、算法设计、编写代码和编译调试四个阶段。所以选项A)、B)、C)说法都不完整。 2.以下关于简单程序设计的步骤和顺序的说法中正确的是。 A)确定算法后,整理并写出文档,最后进行编码和上机调试

B)首先确定数据结构,然后确定算法,再编码,并上机调试,最后整理文档 C)先编码和上机调试,在编码过程中确定算法和数据结构,最后整理文档 D)先写好文档,再根据文档进行编码和上机调试,最后确定算法和数据结构

【解析】设计一个能解决实际问题的计算机程序需要经过以下几个过程:① 建立模型。② 算法设计:给出解决问题的步骤,即算法。③ 算法表达:选择一种表达算法的工具,对算法进行清晰的表达。④ 编写程序:选择一种程序设计语言,把以上算法程序化,这称为编写程序。⑤ 程序调试:对编写好的程序进行调试,修改程序中的错误。⑥ 程序文档编写与程序维护。综上所述,B)选项是符合上述描述的,其他选项不恰当。 3,叙述中正确的是________。 A)C程序的基本组成单位是语句 B)C程序中的每一行只能写一条语句 C)简单C语句必须以分号结束 D)C语句必须在一行内写完

【解析】函数是C程序的基本组成单位;C语言书写风格很自由,不但一行可以写多个语句,还可以将一个语句写在多行中。故本题答案为C)。 4.以下叙述中正确的是。

A)C程序中的注释只能出现在程序的开始位置和语句的后面 B)C程序书写格式严格,要求一行内只能写一个语句 C)C程序书写格式自由,一个语句可以写在多行上 D)用C语言编写的程序只能放在一个程序文件中

【解析】在C语言中,注释可以加在程序中的任何位置,选项A)错误。C程序可以分模块写在不同的文件中,编译时再将其组合在一起,选项D)错误。C程序的书写风格很自由,不但一行可以写多个语句,还可以将一个语句写在多行中。所以正确答案为选项C)。

5.以下关于C语言的叙述中正确的是。

A)C语言中的注释不可以夹在变量名或关键字的中间 B)C语言中的变量可以在使用之前的任何位置进行定义

C)在C语言算术表达式的书写中,运算符两侧的运算数类型必须一致 D)C语言的数值常量中夹带空格不影响常量值的正确表示

【解析】C语言中注释可以放在任何位置,但不能夹在变量名或关键字中间,选项A正确;C语言中的变量要在使用之前定义,C标准规定定义位置在相关程序块的首部,选项B错误;C语言中两侧数据类型可以不一致,系统可进行强制类型转换,选项C错误;C语言数值常量中不允许存在空格,选项D错误。 6.以下关于C语言数据类型使用的叙述中错误的是。 A)若要准确无误差地表示自然数,应使用整数类型

绪论

1

B)若要保存带有多位小数的数据,应使用双精度类型

C)若要处理如\人员信息\等含有不同类型的相关数据,应自定义结构体类型 D)若只处理\真\和\假\两种逻辑值,应使用逻辑类型

【解析】C语言中没有逻辑类型,若只处理\真\或\假\两种逻辑值,可以使用整型数\或\表示,故选D。 第02章 一.选择题

1.有以下定义:int a;long b;double x,y;则以下选项中正确的表达式是。 A)a%(int)(x-y) B)a=x!=y; C)(a*y)%b D)y=x+y=x

【解析】A)选项中如果x与y的值相等那么取余时就会有除数为0的情况。C)选项中取余的两个数据都应为整数,不能有一方为实型变量,而a*y的结果为double型。D)选项表达式本身就错误,不能给表达式赋值。所以,本题答案为B)。 2.有以下程序

#include main()

{ int s,t,A=10;double B=6; s=sizeof(A); t=sizeof(B); printf(\,%d\\n\,s,t); }

在VC6平台上编译运行,程序运行后的输出结果是 A)2,4 B)4,4 C)4,8 D)10,6

【解析】sizeof的作用就是返回一个对象或者类型所占的内存字节数。在VC6中整型占4个字节,双精度实型占8个字节,所以选C)。

3.若有定义:double a=22;int i=0,k=18;,则不符合C语言规定的赋值语句是。 A)a=a++,i++; B)i=(a+k)<=(i+k); C)i=a; D)i=!a;

【解析】C语言中取余运算符两侧的操作数只能是整型(若为char型,则会自动转换成整型)。 4.有以下程序:

#include main()

{ int a=1,b=0; printf(\,\,b=a+b); printf(\,a=2*b); }

程序运行后的输出结果是________。 A)0,0 B)1,0 C)3,2 D)1,2

【解析】 执行第一个printf语句时,b=a+b=1,所以输出1,执行第二个printf语句时,a=2*b=2,所以输出结果为2。 5.若有定义语句:int a=3,b=2,c=1;,以下选项中错误的赋值表达式是。 A)a=(b=4)=3; B)a=b=c+1;

C)a=(b=4)+c;

D)a=1+(b=c=4);

基本数据类型

【解析】在A)选项中,赋值语句b=4先把4赋值给整型变量b,之后执行(b=4)=3是把常量3赋值给常量4,但是由于C语言规定赋值运算符的左侧只能是变量,不能是常量或者表达式,因此A)选项错误。 6.有以下定义:int a;long b;double x,y;则以下选项中正确的表达式是。 A)a%(int)(x-y) B)a=x!=y; C)(a*y)%b D)y=x+y=x

【解析】A)选项中如果x与y的值相等那么取余时就会有除数为0的情况。C)选项中取余的两个数据都应为整数,不能有一方为实型变量,而a*y的结果为double型。D)选项表达式本身就错误,不能给表达式赋值。所以,本题答案为B)。

2

7.若有定义语句:int x=10;,则表达式x-=x+x的值为________。 A)-20 B)-10 C)0 D)10

【解析】 x-=x+x可化为:x=x-(x+x),由于x初始值为10,所以计算后,x=10-20=-10,因此选B)。 二.填空题

1.以下程序的功能是:将值为三位正整数的变量x中的数值按照个位、十位、百位的顺序拆分并输出。请填空。

#include main() {int x=256;

printf(\}

参考答案:x 【解析】x=256,x=6。

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

#include main() { int a;

a=(int)((double)(3/2)+0.5+(int)1.99*2); printf(\,a);

} 参考答案:3

【解析】本题中3/2=1,(double)(3/2)=1,(int)1.99*2=1*2=2,因此(int)(1+0.5+2)=(int)3.5=3。 3.若有定义语句:int a=5;,则表达式:a++的值是____。 参考答案:5

【解析】 a++的含义是在使用a值以后,使a值加1,所以a++的值为5。 4.若有语句double x=17;int y;,当执行y=(int)(x/5)%2;之后y的值为____。 参考答案:1

【解析】 y=(int)(x/5)%2=(int)(3.4)%2=3%2=1。

5.设变量a和b已正确定义并赋初值。请写出与a-=a+b等价的赋值表达式 ____。 参考答案:a=-b

【解析】a-=a+b等价于a=a-(a+b),等价于a=-b。 第03章 一.选择题 1.有以下程序

#include main() {char a,b,c,d;

scanf(\ c=getchar();d=getchar(); printf(\}

当执行程序时,按下列方式输入数据(从第1列开始,代表回车,注意,回车也是一个字符)

12 34

顺序结构

3

则输出结果是

A)1234 B)12 C)12 D)12 3 34

【解析】程序根据用户输入分别给字符型变量a、b、c、d赋值为'1'、'2'、''、'3',因此输出到屏幕得到选项C中的格式。 2.有以下程序段:

char ch; int k; ch=′a′; k=12;

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

已知字符a的ASCII码值为97,则执行上述程序段后输出结果是 A)因变量类型与格式描述符的类型不匹配输出无定值 B)输出项与格式描述符个数不符,输出为零或不定值 C)a,97,12k=12 D)a,97,k=12

【解析】输出格式控制符%c表示将变量以字符的形式输出;输出格式控制符%d表示将变量以带符号的十进制整型数输出。所以第一个输出语句输出的结果为a,97,第二个输出语句输出的结果为k=12,所以选项D)为正确答案。 3.有以下程序

#include main()

{ char a[30],b[30];

scanf(\,a); gets(b);

printf(\,a,b); }

程序运行时若输入:

how are you? I am fine <回车> 则输出结果是 A)how are you? I am fine B)how

are you? I am fine C)how are you? I am fine D)how are you?

解析】scanf函数会把空格字符作为输入的字符串之间的分隔符,因此字符串a为\。gets()函数读取字符串时,直至接受到换行符或EOF时才停止,并将读取的结果存放在指针所指向的字符数组中,因此其余输入的内容赋值给b。 二.填空题

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

#include main()

{ int a=200,b=010; printf(\,a,b); }

4

参考答案:2008

【解析】整型变量a的值为200,b的值\是用八进制表示的\即十进制的\,最后输出格式均为%d,即十进制格式,所以输出为\。

2.有以下程序(说明:字符0的ASCIl码值为48)

#include main()

{ char c1,c2;

scanf(\,&c1); c2=c1+9;

printf(\,c1,c2); }

若程序运行时从键盘输入48<回车>,则输出结果为 。 参考答案:09

【解析】本题中通过ASCII码对字符变量赋值,由于字符0的ASCII码是48,因此字符变量c1为0,c2的ASCII码比c1大9,因此c2为9。 第04章 一.选择题

1.若变量已正确定义,在if(W)printf(\,k);中,以下不可替代W的是。 A)a<>b+c B)ch=getchar() C) a==b+c D)a++

【解析】在C语言中,表示不等于不能用\,而只能使用\。其他选项均满足题目的要求。 2.当变量c的值不为2、4、6时,值也为\真\的表达式是。 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)

【解析】满足表达式(c>=2&& c<=6)的整型变量c的值是2,3,4,5,6。当变量c的值不为2,4,6时,其值只能为3或5,所以表达式c!=3和c!=5中至少有一个为真,即不论c为何值,选项B)中表达式的值都为\真\。正确答案为B)。 3.已知字母A的ASCII码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是。 A)kk>=′A′&& kk<=′Z′ B)!(kk>=′A′||kk<=′Z′)

C)(kk+32)>=′a′&&(kk+32)<=′Z′ D)isalpha(kk)&&(kk<91)

【解析】C语言的字符以其ASCII码的形式存在,所以要确定某个字符是大写字母,只要确定它的ASCII码在'A'和'Z'之间就可以了,选项A)和C)符合此要求。在选项D)中,函数isalpha用来确定一个字符是否为字母,大写字母的ASCII码值的范围为65到90,所以如果一个字母的ASCII码小于91,那么就能确定它是大写字母。本题答案选B)。 4.有以下程序:

#include < stdio.h> main()

{ int a=l,b=2,c=3,d=0; if(a==l && b++==2) if(b!=2||c--!=3)

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

选择结构

5