c语言程序设计第五版习题答案.docx
《c语言程序设计第五版习题答案.docx》由会员分享,可在线阅读,更多相关《c语言程序设计第五版习题答案.docx(112页珍藏版)》请在冰豆网上搜索。
c语言程序设计第五版习题答案
习题解析与答案
第1章C语言概述
一.简答题
1.概述C语言的主要特点。
【解答】
(1)语言简洁、紧凑,使用方便、灵活。
(2)数据类型丰富,表达能力强。
(3)运算符多样。
C语言中的运算符包含的范围非常广泛。
(4)具有结构化的控制语句。
如if,else语句、while语句、dowhile语句、switch
语句、for语句。
(5)允许直接访问物理地址。
C语言中含有的位和指针运算,能够直接对内存地址进行
访问操作。
(6)所生成的目标代码质量高,可移植性好。
2.构成C语言程序的基本单位是什么?
它由哪几部分组成?
【解答】函数是构成C语言程序的基本单位。
一个完整的C程序一般由文件包含、宏定
义、函数说明、变量和一个或若干个函数组成。
3.C语言程序的运行一般要经过哪几个步骤?
【解答】
(1)编辑;
(2)编译;(3)连接,生成EXE文件;(4)执行。
二.运行程序写结果
1.输入下面程序并运行。
main()
{
inta1,a2,x;
a1=100;
a2=50;
x=a1-a2;
printf(″x=%dn″,x);
}
【解答】运行结果为:
x=50
2.输入下面程序并运行。
main()
{
inta1,a2,x;
a1=10;
a2=20;
x=a1*a2;
printf(″a1=%,dn″,a1,a2);
printf(″x=%dn″,x);
}
【解答】运行结果为:
a1=10,a2=20
x=200
1
三.编程题
1.参照本章例题,编写一个C程序,用于显示如下信息:
*************************
IloveCprograms!
*************************
【分析与提示】
①要有文件包含语句#include。
C语言中没有数据的输入、输出等功能,
数据的输入、输出都是通过调用系统提供的库函数scanf和printf等来实现的。
这
些函数的说明都包括在stdio.h文件中。
②main是主函数的名称。
用{}括起来的内容是函数体,函数体由若干条语句组成,
这是计算机要执行的部分,每条语句以分号“;”结束。
③注意显示的信息有三行,所以要用到换行符“n”。
参考代码:
#include
main()
{
printf("************************\n");
printf("IloveCprograms!
\n");
printf("************************\n");
}
第2章数据类型及其运算
一.简答题
1.C语言中的数据类型主要有哪几类?
【解答】短整型(shortint)
整型整型(int)
长整型(longint)
基本类型字符型(char)单精度(float)
实型(浮点型)
双精度(double)
枚举类型(enum)
数组类型
构造类型结构体类型(struct)
共用体类型(union)
指针类型
空类型(void)
2.字符常量与字符串常量有什么区别?
2
【解答】字符常量用单括号括起,字符串常量用双括号括起;字符常量存储时占1个字
节,字符串常量存储时除了n个字符外,还有系统加上的字符串终止符\0,所以字符串常量
存储时占n+1个字节。
3.C语言中的常量包括哪几类?
各自是如何构成的?
【解答】C语言中的常量是一些其值预先定的量,并且在程序执行过程中其值不再发生
变化。
常量的分类遵循基本数据类型分类原则,C语言编译系统自动将其存放在于类型相应
的内存单元中。
其类别包含整形常量、浮点常量、字符常量、字符串常量和枚举常量。
整形
常量又分为十进制整形常量、八进制整形常量、十六进制整形常量。
浮点常量分成十进制形
式和指数形式。
C语言中的,字符常量是用单括号括起来的一个字符或是字符序列,而字符
串常量是用一对双括号括起来的零个或者多个字符组成的序列。
4.简述指针、变量的指针、变量的值、指针变量与指针变量的值的含义是什么?
【解答】C语言中将地址又称为“指针”。
一个变量所分配的内存空间首字节地址,称
为该变量的指针(地址),变量的值就被放入所分配的地址单元中。
地址一旦被分配,就不会
再改变,所以,指针是一个常量。
既然是常量就可以把它赋给一个变量。
用来存放指针的变
量,被称为指针变量。
一个指针变量的值是变量的地址,一个指针变量可以被赋予不同的指
针值。
5.下面哪些是不合法的常量?
说明不合法的理由。
123,3.1415926,0892,?
M?
,?
n?
,0xabc,0.618E-6,”Morning,”3.8e-3.14
【解答】非法常量有:
0892——含有非八进制数字8和9
3.8e-3.14——非法指数形式浮点常量:
规定e后面的指数必须为整数。
6.下面对变量定义的语句哪些不正确?
为什么?
请改正。
(1)charc1,inta2;
(2)INTa,b;FLOATx,y;(3)a,b:
char;
(4)charif;(5)inta,b(6)Inta:
b:
c;
(7)inta,x;floatx,y;
【解答】
(1)charc1,inta2;
错误。
定义不同类型的变量时,应用分号彼此分开。
改正为:
charc1;inta2;
(2)INTa,b;FLOATx,y;
错误。
C语言中表示类型名的关键字必须小写。
改正为:
inta,b;floatx,y;
(3)a,b:
char;
错误。
C语言中变量定义格式为:
类型名变量名;
改正为:
chara,b;
(4)charif;
错误。
变量名不能与C语言的关键字重名。
改正为:
charf1;
(5)inta,b
错误。
变量定义以语句形式出现,应以分号结尾。
改正为:
inta,b;
(6)Inta:
b:
c;
错误。
类型名不能有大写字母,相同类型名之间用逗号分隔。
改正为:
inta,b,c;
3
(7)inta,x;floatx,y;
错误。
在同一程序位置上,同一变量名不能重复定义充当两个不同的变量。
改正为:
inta,x;floatx1,y;
7.下述字符串常量的长度是多少?
在内存中存储时各自占用的单元数又是多少?
(1)“Hello!
”
(2)“ABC?
”(3)“765+123=?
”
【解答】
(1)“Hello!
”字符串长度为6,占用内存字节数为7。
(2)“ABC?
”字符串长度为9,占用内存字节数为10。
因为其中\n\\
\064\?
各自只占一个字符的位置。
(3)“765+123=?
”该字符串不是合法的,因为\765表示的值太大,超出合法的
ASCII字符集的范围。
二.运行程序写结果
1.以下程序的执行结果是____。
main()
{
inti,j;
i=15;
printf(“%d,%d”,-i-+)+;,i
}
【解答】14,15
2.以下程序的执行结果是。
main()
{
inta=20,b=10,c,*p1,*p2;
p1=&a;
p2=&b;
c=(-*p1)/(*p2)+6;
printf("a=%d,b=%d\n",a,b);
printf("*p1=%d,*p2=%d\n",*p1,*p2);
printf("c=%d\n",c);
}
【分析与提示】
p1a
a20
P2b`
b10
【解答】a=20,b=10
*p1=20,*p2=10
c=4
3.以下程序的执行结果是。
#include
main()
4
{
chara=?
G?
b=?
o?
c=?
o?
d=?
d?
;
a=a+32;
b=b-6;
c=c+3;
d=d+8;
printf("%c%c%c%c\n",a,b,c,d);
}
【分析与提示】从ASCII代码表可以看出,字符“G”、“o”、“o”、“d”的ASCII代码值
为71、111、101,因此,’G’+32、’o’-6、’o’+3、’d’+8的值分别是103、105、
114、108,它们所对应的字符分别是“g”、“i”、“r”、“l”。
常用结论:
(1)在C语言中,字符数据可以按其ASCII代码值参加整数运算。
由于英文字母在
ASCII代码表中是按顺序排列的,所以在计算’o’+3代表的字母时,可从字符’o’其顺序向
后取3个字母,该字母是“r”。
(2)从ASCII代码表可以看出“小写字母”-“对应大写字母”的结果是32,因此可
推算出如下等式:
大写字母的ASCII值+32=对应小写字母的ASCII值;小写字母的ASCII
值-32=对应大写字母的ASCII值。
【解答】girl
4.以下程序的执行结果是。
#include
main()
{
intx;
x=-3+4*5-6;
printf("x1=%d\n",x);
x=3+4%5-6;
printf("x2=%d\n",x);
x=-3*4%-6;
printf("x3=%d\n",x);
}
【分析与提示】x1=11(4*5是20,-3+20是17,17-6等于11)
x2=1(4%5等于4,3+4等于7,7-6等于1)
x3=0(-3*4等于-12,-12%-6等于0)
【解答】x1=11
x2=1
x3=0
5.以下程序的执行结果是。
#include
main()
{
printf("%d\n",NULL);
printf("%d,%c\n",49,49);
printf("%d,%c,%o\n",48+10,48+10,48+10);
5
}
【分析与提示】
0(NULL的ASCII码值是0)
49,1(数字1的ASCII码值是49)
58,:
72(48+10等于58,正好是“:
”的ASCII码值,八进制表示是72)
【解答】0
49,1
58,:
72
三、改错题
1.请修改下列程序,使其能够通过编译。
#include
VoidMain()
{
inta=6;b=8;
intc;
c=a*b;
printf(,%d?
c);
}
【答案】错误的地方有3处:
(1)第2行关键字应该小写;
(2)定义b时前面应该
用逗号;(3)打印语句的格式应该用双引号括起来。
正确的程序如下:
#include
voidmain()
{
inta=6,b=8;
intc;
c=a*b;
printf("%d",c);
}
2.请修改下列程序,使其能够正确运行。
#include
voidmain();
{
floatf=7.12;
charc=”c”;
printf(“n%”d,int(f%3));
printf(“%c”,c);
}
【