c语言课本习题及解答.docx
- 文档编号:29864073
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:308
- 大小:187.55KB
c语言课本习题及解答.docx
《c语言课本习题及解答.docx》由会员分享,可在线阅读,更多相关《c语言课本习题及解答.docx(308页珍藏版)》请在冰豆网上搜索。
c语言课本习题及解答
第一篇习题及解答
本篇按教材上的章目,先对各章所附的习题进行解答,给出参考答案;然后按各章内容给出各类课外习题,并对习题进行了解答,给出参考答案;接着编写了假期作业并进行了解答,供大家参考选用;最后还有4套综合性的模拟试卷及解答,供我们在学习中检测自己的学习效果。
本篇所有内容中,涉及到编程、设计、算法等问题时,可能不会有唯一解,给出的解也不一定是最好的解法。
所以对这些答案只能用于参考,启发我们的思维。
第一章概论
教材上习题一解答
1.什么是结构化程序设计方法?
参考答案:
结构化程序设计强调程序设计风格和程序结构的规范化。
结构化程序设计方法的基本思路是,把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。
其具体做法是:
自顶向下,逐步求精,模块化设计和结构化编码。
2.什么是面向对象程序设计方法?
参考答案:
面向对象的设计方法,是在近年来、软件工程研究领域中有益成果的基础上发展起来的一种软件设计方法。
它集抽象性、封闭性、继承性、多态性于一体,将传统软件中的数据和操作,组合成易于赋予语义的对象,使软件设计中人们普遍遵循的模块化、信息隐藏、抽象、代码共享等思想,在面向对象语言机制的帮助下,得以充分实现。
3.C语言是在什么语言的基础上发展起来的?
当初设计它的目的是什么?
参考答案:
1971年,KenThompson在PDP-11/20计算机上实现了B语言,并用该语言书写了系统软件─UNIX操作系统和一些应用程序。
为了很好地适应系统程序设计的要求,在1972─1973年间,贝尔实验室的DennisM.Ritchie在B语言的基础上再发展,重新设计了一种新的、通用程序设计语言,取BCPL的第二个字母C,称为C语言。
现在人们一般都认为C语言是美国贝尔实验室的D.M.Ritchie在1972年设计实现的。
UNIX操作系统提供一种高级语言工具,但C语言本身并没有被束缚在任何特定的操作系统和特定的硬件之上,它具有良好的可移植性。
4.与汇编语言相比,C语言有那些特点?
参考答案:
C语言是高级程序设计语言中的一种“低级”语言,它与系统和机器的紧密程度使其几乎可以替代汇编语言。
通常,只有像汇编语言才具备的能力,C语言中都有,如位操作、直接访问物理地址等等,使得C语言在进行系统操作程序设计时,显得非常有效。
C语言简洁、灵活。
就IBM-PC机上的C语言系统C-86而言,其代码效率只比汇编语言低10%-20%,但C语言在描述问题的编程迅速、表达能力强等优点,又是汇编语言所无法比拟的。
另一方面,C语言优秀的控制流和数据结构、丰富的数据类型和运算符,又使它在数值计算方面也显示出相当的优势。
还有,C语言书写风格独特,表达形式也比较精练,它可以直接处理字符、数字、地址等,可以完成通常要用硬件才能实现的、普通的算术及逻辑运算,且可以表达数值处理、字处理功能。
对语法限制也比较宽松,例如,C语言对数组下标越界不做检查,不专门设置逻辑型数据而以整型代替,整型和字符型数据可以通用等等。
可见,C语言较好地处理了简洁性与实用性、可移植性与高效益之间的矛盾。
如果说FORTRAN语言是面向工程师、COBOL语言是面向商务管理、PASCAL语言是面向学生、BASIC语言是面向非程序员的,那么,C语言则是面向专业程序设计的语言。
5.C++对C语言作了那些修改?
参考答案:
C++对C在作改进时,主要是扩充,C++保留了传统的和有效的结构化语言的特征,即C的简洁、高效性,同时融合了面向对象的能力。
C++对C语言主要扩充功能为:
支持数据抽象;
支持面向对象的设计及编程;
改进了C语言中的若干不足之处。
6.什么是可视化(Visual)程序设计方法?
参考答案:
所谓可视化(Visual)程序设计,是指一种开发图形界面(GUI)方法。
用这种方法,编程人员不必编写大量代码去描述界面元素的外观和位置,只要把预先建立的界面元素如按钮、列表框、对话框等Windows风格的部件,用Mouse拖放到屏幕上适当的位置即可。
这种快速创建用户界面的方法技巧,如同在Windows中使用诸如画笔之类的绘图程序那样轻松。
课外习题及解答
1.C++对C语言作了那些功能扩充?
参考答案:
C++对C语言主要扩充功能为:
支持数据抽象;
支持面向对象的设计及编程;
改进了C语言中的若干不足之处。
在作扩充和改进时,C++保留了传统的和有效的结构化语言的特征,即C的简洁、高效性,同时融合了面向对象的能力。
2.世界上第一个结构化语言是什么语言?
它有什么特点?
参考答案:
世界上第一个结构化语言是PASCAL语言,因而大量用于教学之中。
但PASCAL语言难以推广到各种实际应用领域,到目前为止基本上只是一种教学语言。
3.C语言也存在哪些缺点和不足?
这些对我们有什么警示?
参考答案:
C语言也存在一些缺点和不足。
例如,它的某些运算符的优先顺序不符合人们的日常习惯;复合语句在多层嵌套时,语句括号匹配情况不够醒目;C语言的弱类型转换具有潜在的不安全因素等等。
这些都警示我们:
用C语言编写程序,切忌粗枝大叶,必须要有严谨的态度,不然会受到系统的惩罚。
4.把数据和数据的操作码封装在一个对象中,这种情况下的程序设计者有哪两方面的任务?
参考答案:
这种情况下的程序设计者的两方面的任务是:
1。
设计对象,即决定把哪些数据和操作封装在一起;2。
如何通知有关对象完成所需的任务。
程序员这时就象一个总调度,不断向各个对象发出命令。
让各个对象完成各自的操作。
各个对象的操作完成了,整个任务也就完成了。
第二章VisualC++6.0
教材上习题二解答
1.基于Windows的面向对象的程序设计的对向是什么?
参考答案:
客观世界中任何一个事物都可以看成一个对象。
这样,我们可以说,客观世界是由千千万万个对象组成的,它们之间用一定的方法相互联系。
比如说一个系是一个对象,一个班级也是一个对象。
实际生活中,人们往往在一个对象中进行活动,比如,学生在某个班中。
从这点上说,对象是进行活动的基本单位。
理论上讲,一个对象应该包括两个要素:
数据和需要进行的操作。
例如一个窗口是一组数据的集合和处理这些数据的方法和窗口函数。
从面向对象的角度来看,窗口本身就是一个对象。
2.MicrosoftVisualStudio软件包包含哪些工具软件?
参考答案:
VisualStudio包含七个软件:
VF-即大名鼎鼎的VisualFoxpro,我们比较了解它,其应用非常广泛;
VB-VisualBasic,使用也很广泛;
VP-VisualPascal;
VJ-VisualJ++;
VI-VisualInterDev;
VC-VisualC++6.0,是VisualStudio中功能最为强大、代码效率最高的一种开发工具。
微软说这是综合性最高、最复杂的软件开发产品。
它支持Windows编程,支持Windows应用程序,支持Internet网络编程,支持网络应用程序,是.NET开发平台。
VT-VisualTool,Visual工具。
3.实习VisualC++6.0的安装过程。
参考答案:
请结合讲义第二章第二节的内容,在机器上实现。
最好每位同学使用一张系统光盘实现。
4.MicrosoftVisualStudio 的安装程序ACMBOOT和SETUP有什么区别?
参考答案:
当机器上已有本系统,再重新安装或覆盖时,在我的电脑→光驱→右键打开系统光盘后,如果选择ACMBOOT再双击,则系统安装从头开始。
如果选择SETUP,则系统会提示已有一个系统,然后询问用户是覆盖还是重新安装。
5.某。
CPP程序编译后在信息框中显示:
1 error(s)0warning(s)
这表示什么?
能不能连接生成.exe文件?
参考答案:
前者指致命性错误,必须为0!
这里不为0而为1,则表示不能生成或不正确地生成.Obj文件;后者指警告性错误,最好为0,如果不为0,它不影响后面连接生成.exe文件。
只有两种错误都为0时,编译完成后回答Y,信息框中显示:
Compiling...接着生成运行文件.exe。
6.在VC++6.0之下完成本章中例2.1、例2.2、例2.3、例2.4和例2.5的编辑、编译、连接和执行,并对结果进行分析。
参考答案:
请结合讲义第二章的内容,在机器上实现。
进入VC之后,先建立源文件,然后再“构建”即编译和连接同时进行,生成了正确的.exe文件后,再执行。
7.在VC++6.0下建立工程gaohf,执行时在鼠标点击处随机显示“Hello,MFC”。
参考答案:
请结合讲义第二章第五节的内容,在机器上实现。
先设定工程环境,再打开工程,添加所需的代码,然后再构建(Build),完成之后再执行。
课外习题及解答
1.VisualStudio包含哪些软件:
参考答案:
VF-即大名鼎鼎的VisualFoxpro,我们比较了解它,其应用非常广泛;
VB-VisualBasic,使用也很广泛;
VP-VisualPascal;
VJ-VisualJ++;
VI-VisualInterDev;
VC-VisualC++6.0,是VisualStudio中功能最为强大、代码效率最高的一种开发工具。
微软说这是综合性最高、最复杂的软件开发产品。
它支持Windows编程,支持Windows应用程序,支持Internet网络编程,支持网络应用程序,是.NET开发平台。
VT-VisualTool,Visual工具。
2.在VC++6.0系统下,作工程环境设定时,要作哪些操作?
参考答案:
打开VC++6.0集成开发环境(IDE),选择“文件File”菜单中的“新建New”选项,弹出新建New对话框。
新建New对话框上有四个标签,单击第二个工程project标签,接着就显示出一个可供选择的工程类型列表,这里我们要作三件事:
1.选择存放路径
2.为工程命名
3.选择工程类型
3.如果机器上装有DOS-TC和VC两套系统,这时打开存在的.C或.CPP文件,将是如何工作?
参考答案:
如果机器上装有DOS-TC和VC两套系统,则VC优先。
这时双击任何盘上的.C文件图标,都会自动进入VC,而不会进入TC。
如果要在TC之下打开.C文件,则只能手动完成,进入TC系统之后,再在File下由Load完成。
4.安装VC++6.0系统,硬盘最好要有多少剩余年空间?
参考答案:
安装本系统,硬盘最好要有300-400MB自由空间。
5.在有程序正在运行的情况下安装VC++6.0系统要注意什么?
参考答案:
安装前要退出所有正在运行的程序。
第三章程序设计基础
教材上习题三解答
一.简答题
1.与C相比,C++有哪些优点?
参考答案:
与C相比,C++的主要优点表现在封装性、继承性和多态性。
封装性(Encapsulatipn),即把数据与操作结合成一体,避免了数据絮乱带来的调试与维护的困难,使程序结构更加紧凑。
继承性(Inheritance),增强了软件的可扩充性并为代码应用提供了强有力的手段。
多态性(Polymorphism),使程序员在程序设计时可以对问题进行更好的
抽象,从而设计出重用性和维护性二方面俱佳的程序。
这些使C++能显示出强大的优越性。
2.简述基于功能的程序设计和基于面向对象的程序设计的区别。
参考答案:
我们知道,无论通过什么方式实现的软件,总是由被加工的对象及有关的功能构成。
在开发一个软件的过程中,有两种选择:
一种是把侧重点放在对象上,另一种则是把侧重点放在功能上。
以前的软件开发中,人们一直把注意力放在功能上,这是有道理的,因为一种软件开发出来,总是应能正确提供所需的功能,后来,人们渐渐发现了它的许多不足之处。
主要是由于功能太具体,而且太易变!
而对象是稳定的!
无论功能怎样千变万化,对象一般总能保持其稳定不变。
显然,围绕对象构造的软件系统,自然也会有较好的稳定性。
为了评价一个软件结构的好坏,我们不能只看这个软件结构是否可以经得住各种变化。
从这个角度讲,面向对象优于面向功能。
事实证明,传统的、基于功能的结构化的开发方法,已远远不能满足时代的要求,人们就不断地进行面向对象技术的研究。
而面向对象技术的领域,有面向对象的语言、面向对象的程序设计、面向对象的分析、面向对象的设计、面向对象的数据管理系统及面向对象的基本理论。
C++语言,就是面向对象的程序设计语言。
3.return语句有哪些格式?
举例说明。
参考答案:
有四种格式:
①.return;人为地终止当前函数─称为被调函数─的运行,并把控制权转回调用当前函数的函数─叫主调函数。
如:
main()
{inta,b,c;
printf(“a,b=”):
scanf(“%d,%d,&a,&b);
c=max(a,b);
printf(“max=%d\n”,c);
}
intmax(a,b)
intx,y;
{intz;
if(x>y)
z=x;
else
z=y;
return;
}
②.return(x);其中,x是变量。
即中止函数的执行后,返回一个变量的值(x的值)到主调函数。
上例中,如果将函数max的函数体中的最后一句return改为“return(z);”更好,表示被调函数max将“z”作为函数值返回给主调函数main。
③.return<表达式>;本格式表示,给出函数的返回值是一个任意表达式的结果,例如returnx+y;即返回表达式X+Y的结果为函数的返回值。
④.return<数值>;是终止函数的运行,并以<数值>作为函数的返回值。
如return0;则用“0”作为被调函数对主调函数的返回值,这样作可能是检查被调函数是否正常调用,如果返回0,则表示被调函数已正常调用。
4.使用注释定义符有哪些注意事项?
参考答案:
一种注释是注释符对“/*...*/”它在C和C++中都可以使用。
一个注释符对可放在程序的任何位置,其中可以是包括汉字、空格、制表或换行符等合法字符作为注释内容。
注释对可以分多行书写,但不可以嵌套。
另一种是双斜线“∥”开头的注释,其右边是注释内容,它只能用于C++源程序中,C不用。
系统处理源程序时,遇“/*”就找右边的“*/”,中间的内容都看成注释;遇“//”则认为此后直到行尾全是注释。
很明显,“//”开头的注释可以不单独占一行而出现在被注释的语句之后,它不能跨行,如果有两行及以上的注释,每行的开头都要冠以“//”。
而/*……*/注释对是可以跨行的。
5.预处理命令有哪两种格式?
各有什么功能?
参考答案:
格式一:
#include<包含文件名>
其中,尖括号“<>”是格式的要求。
尖括号中指定的文件名表示#include在由系统设定的子目录中寻找头文件,这类头文件已经过编译,由系统给出,系统仅按规定的路径搜索包含文件。
格式二:
#include“包含文件名”
其中,双引号是格式的要求。
双引号中指定的文件名表示#include先在当前目录中寻找头文件,找不到时再按系统规定的路径搜索包含文件。
这类头文件通常由用户自己给出,跟在主程序之后,尚未被编译。
二.填空
1.在C语言源程序中,与PASCAL中的Begin-end类似的,代表程序体的符号是:
___。
答案:
{}。
2.当程序只由一个函数组成时,这个函数是____函数。
答案:
main()。
3.每一条语句结束时,必须以____结尾。
答案:
“;”。
三.指出以下程序中的错误并改正
1.#include“stdio.h”
voidmain()
{x=1;
y=2;
printf("%d\n",x+y);
}
答案:
在main函数体前没有定义变量,要加说明:
intx,y;
2.#include“stdio.h”
voidmain()
{intx,y,z;
Z=x+y;
printf("%d\n",z);
}
答案:
intx,y,z;←──对x,y未赋值。
3.#include“stdio.h”
voidmain()
{inti,j,k;
i=j=100;
k=10*i*j;
printf("%d\n",k);
}
参考答案:
本题无语法错误,但在pc机上运行可能会超出取值范围而输出随机(莫名其妙)的错误结果。
常规int变量只能取值于-32768~32767之间,而10*i*j=100000超出了这个范围。
要计算出较大的整数,可以把变量定义为long型,输出时用%ld。
本程序可写成:
main()
{inti,j;
longk;
i=j=100;
k=10*i*j;
printf(“%ld\n”,k);
}
这样会正确地输出结果100000。
四.判断改错
1.数学式
的C++表达式是a+b/c*d
参考答案:
×,C++表达式应是(a+b)/(c*d)
2.把0送X的赋值语句是0=X;
参考答案:
×,把0送X的赋值语句应是X=0;
3.inta,b;
Scanf("%d%d",a,b);
参考答案:
×,输出参数应是变量的地址值,所以输入应写成:
Scanf(“%d%d”,&a,&b);
五.程序设计:
设x,y,z为整型数(int),当x=10,y=20,z=30时,编写程序求x,y,z三个数的和sum。
参考答案:
main()
{intx,y,z,sum;
x=10;y=20;z=30;
sum=x+y+z;
printf(“thesumofx,yandzis%d”,sum);
}
课外习题及解答
一.单项选择题:
1.下列四个叙述中,错误的是__。
答案:
C
A.一个C源程序必须有且只能有一个主函数
B.一个C源程序可以含一个或多个子函数
C.在C源程序中注释说明必须位于语句之后
D.C源程序的基本结构是函数
2.以下标识符中,不能作为合法的C用户定义标识符__。
答案:
D
A.For B.Printf C.WORD D.sizeof
3.C语言变量名的第一个字符__。
答案:
C
A.必须为字母
B.必须为下划线
C.必须为字母或下划线
D.可以是字母、数字和下划线中的任意一种
4.C语言程序的基本结构单位是__。
答案:
A
A.函数 B.语句 C.字符 D.程序行
5.一个C程序的执行是__。
答案:
A
A.从本程序的main函数开始,到本程序的main函数结束
B.从本程序的main函数开始,到本程序的最后一个函数结束
C.从本程序的第一个函数开始,到本程序的最后一个函数结束
D.从本程序的第一个函数开始,到本程序的main函数结束
6.下列四个叙述中,正确的是__。
答案:
D
A.在C程序中,main函数必须位于其他函数的最前面
B.在C程序中,一行只能写一条语句
C.程序中的基本结构是程序行
D.语句是完成程序功能的最小单位
7.C语言规定,在一个C程序中,main()函数的位置__。
答案:
C
A.必须在开始 B.必须在最后
C.可以任意 D.必须在系统调用的库函数
8.C语言可执行程序的开始执行点是__。
答案:
C
A.程序中第一条可执行语言 B.程序中第一个函数
C.程序中的main函数 D.包含文件中的第一个函数
9.以下说法中正确的是__。
答案:
C
A.C语言程序总是从第一个定义的函数开始执行
B.在C语言程序中,要调用的函数必须在main()函数中定义
C.C语言程序总是从main()函数开始执行
D.C语言程序中的main()函数必须放在程序的开始部分
10.下列四个叙述中,正确的是__。
答案:
C
A.C语言规定只有主函数可以调用其他函数
B.在一个C函数中,只允许有一对花括号
C.C语言中的标识符可以用大写字母
D.在对程序进行编译的过程中,可发现注释中的拼写错误
11.下面属于C语言保留字的是__。
答案:
B
A.Int B.typedef
C.ENUM D.union
12.下面不属于C语言保留字的是__。
答案:
B
A.Short B.ELSE C.Extern D.for
13.下列四组C语言标识符中,正确的一组是__。
答案:
A
A.nameChar_abcA23
B.abC?
c5bytes-USA_54321
C.printconsttypedefine
D.ncludeintegerDoubleshort_int
14.请选出可用作C语言用户标识符的一组标识符__。
答案:
B
A.voiddefineWORD
B.a3_b3_789IF
C.For-gifCASE
D.dUNDOsizeof
15.下列属于C语句的是__。
答案:
C
A.printf(“%d\n”,d)
B.#include
C.{a=b;b=c;c=a}
D./*thisisaprogram*/
16.能直接让计算机识别的语言是__。
答案:
D
A.C
B.BASIC
C.汇编语言
D.机器语言
17.编辑程序的功能是__。
答案:
B
A.调试程序 B.建立并修改文件
C.将C源程序编译成目标程序 D.命令计算机执行指定的操作
二.程序设计
1.编写程序:
在系统显示提示:
"pleaseenteryournameandage:
"之后,键入:
Ling_ming↙和21↙,系统接着显示yournameisLingming和yourageis21。
参考答案:
#include
voidmaim()
{
cout<<“pleaseenteryournameandage:
\n”;
charname[10];
intage;
cin>>name;
cin>>age;
cout<<“yournameis”< cout<<“yourageis”< } 第四章常量、变量与表达式 教材上习题四解答 一、多项选择 1.以下哪些是非法的变量名? SUMaverageclassM·D·John$123day 参考答案: M.D.John$123 2.以下哪些是合法的标识符? Month#333D64student—name_aboveLotus_1_2_3BASICa>b 参考答案: Monthstudent_name_abovelotus_1_2_3BASIC 二、阅读程序写结果(基于16位CPU、TC)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课本 习题 解答