C 面向对象程序设计教程[第3版]--陈维兴,林小茶课后习题答案解析
- 格式:doc
- 大小:105.01 KB
- 文档页数:46
C语言程序设计(第三版)习题答案习题一一、名词解释(1)程序P1 (2)程序设计P1 (3)机器语言P1 (4)高级语言P2(5)汇编程序P3 (6)编译程序P4 (7)算法P5 (8)结构化程序设计方法P10二、简答题1. 设计程序时应遵循哪些基本原则?P4答:正确性、可靠性、简明性、有效性、可维护性、可移植性。
2. 算法具有哪些特点?答:有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出。
3. 算法的表示形式有哪几种?答:自然语言、伪代码、传统流程图、N-S流程图、计算机语言。
4. 结构化程序设计方法的三种基本结构是什么?答:顺序结构、选择结构和循环结构。
5. 传统流程图与N-S流程图最大的区别是什么?答:N-S流程图去掉了在传统流程图中常用的流程线,使得程序的结构显得更加清晰、简单。
三、用传统流程图或N-S流程图表示求解以下问题的算法。
1. 从键盘输入10个整数,求出其中的最小数并输出。
2. 求1+2+3+…+100的值。
3. 求10~50的所有素数之和。
4. 求下列分段函数的值。
四、请参照本章例题,编写一个简单的C 程序,输出以下三行信息。
**************************Yangtze University**************************#include <stdio.h>void main(){printf("**************************\n");printf(" Yangtze University\n");printf("**************************\n");}4X-1 (X ≤1) 5(X-1)+6 (1<X<5) 6-3X (X ≥5)习题二一、选择题1~10: B C D C D D B C A A11~20: D A C D B D B A C D二、填空题1.字母 L 或字母 l2. %c(或字符) 、 %d(或整数)3.在程序运行过程中,其值可以在一定的范围内变化的量4.'\0'5.小数形式、指数形式6.关键字、预定义标识符、用户标识符7.字母、数字、下划线、数字8. 189. 2 、 1 、 3010.双精度实数或double11.赋值、逗号、 20 、 20 、 20 、 412. 4 、 4习题三一、选择题1~10: B C C B C C C D C C注:第4题答案D为: 10 22↙33↙二、填空题1. printf 、 scanf2. h3."%5d"4.'\0'5. e 、 E6. 67. s 、 c8. *9. - 、 +10. i三、编程题1. 编写程序,从键盘输入一个以秒为单位的时间数,将其换算成几小时几分几秒,然后进行输出。
1.3 课后习题1.3.1 项目练习一.练习目的1.进行简单程序的编写;2.进一步熟悉C语言的编程环境;3.进一步巩固C语言程序的建立、编译、执行过程。
二.练习内容1.编程输出一行汉字“我坚信:我一定能学好C语言!”。
#include "stdio.h"main(){printf("我坚信:我一定能学好C语言!");getchar();}2.用自然语言描述、画N-S图、画传统流程图三种方法来描述求1+2+3+…n和值的算法。
自然语言描述:先输入n 的值定义一个变量i,定义一个变量sum,用于存放每次累计的和值I 从0开始,累加到sum中累加到n的值,结束输出sum的值N-S图传统流程图:开始sum=0i=0输入n的值i=i+1sum=sum*ii<=n是输出sum的值结束1.3.2 练习题一.选择题1.下列有关C语言的说法正确的是( C )。
(A)机器语言(B)只适合于编写应用软件(C)高级语言(D)只适合于编写系统软件2.下列说法中,不属于良好程序设计风格要求的是( C )。
(A)程序中要有必要的注释(B)程序应简单、可读性好(C)程序的效率第一,清晰第二(D)输入数据前要有提示信息3.用C语言编写的代码是( A )。
(A)经过编译解释才能执行(B)可以立即执行(C)是一个源程序(D)经过编译立刻执行4.下列语句说法正确的是( C )。
(A)语句必须从第一行开始书写(B)一个语句只能写在同一行上(C)一个语句可以书写在多行上(D)一个语句不得多于80个字符5.一个程序总是从( B )位置开始执行。
(A)第一个函数(B)main()(C)程序的第一行(D)第一条执行语句6.下面对C语言的特点,说法不正确的是( B )。
(A)C语言是一种结构化模块化的程序设计语言(B)C语言程序的可移植性较差(C)C语言兼有高级语言和低级语言的双重特点(D)C语言既可以用来编写应用程序,又可以用来编写系统软件7.下列不是C语言特点的是( D )。
C 语言程序设计(第三版)习题库1、设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。
用scanf 输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。
请编程序。
#include <stdio.h>main(){float r,h,C1,Sa,Sb,Va,Vb;scanf(__”%f ”__,&r);scanf(”%d ”,__&h _);;C1=2*3.14*r;Sa=3.14*r*r;Sb=4*Sa;Va=4*3.14*r*r*r/3;Vb=Sa*h;printf(___”Cl=%.2fSa=%.2fSb=%.2fVa=%.2fVb=%.2f ”,Cl,Sa,Sb,Va,Vb );}2、输入一个华氏温度,要求输出摄氏温度。
公式为 c=5(F-32)/9输出要求有文字说明,取位2小数。
#include <stdio.h>main(){float F,c;scanf("%f",&F);____c=5*(F-32)/9______;printf("c=%.2f",c);}3、有一函数:⎪⎩⎪⎨⎧≥-<≤-<=10113101121x x x x x x y 写一程序,输入x 值,输出y 值。
#include <stdio.h>main(){int x,y;printf("输入x :");scanf("%d",&x);if(x<1) { /* x<1 */y=x;printf("x=%3d, y=x=%d\n",x,y);} else if (____x<10_______){ /* 1≤x -10 */_____y=2*x-1_______;printf("x=%3d, y=2*x-1=%d\n",x,y);} else{ /* x≥10 */y=3*x-11;printf("x=%3d, y=3*x-11=%d\n",x# include "stdio.h"main(){int x,y;scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10){ y=2*x-1;}else{ y=3*x-11;}printf("%d",y);}# include "stdio.h"main(){int x,y;scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10){ y=2*x-1;}else{ y=3*x-11;}printf("%d\n",y);}# include "stdio.h"main(){int x,y;scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10){ y=2*x-1;}else{ y=3*x-11;}printf("%d",y);}scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10){ y=2*x-1;}else{ y=3*x-11;}# include "stdio.h" main(){int x,y;scanf("%d",&x);if(x<1)y=x;else if(x>=1 && x<10)y=2*x-1;elsey=3*x-11;printf("%d",y);},y);}}4、给定一个不多于5位的正整数,要求:①求它是几位数;②按逆序打印出各位数字。
C 语言程序设计(第三版)习题库1、设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。
用scanf 输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。
请编程序。
#include <stdio.h>main(){float r,h,C1,Sa,Sb,Va,Vb;scanf(__”%f ”__,&r);scanf(”%d ”,__&h _);;C1=2*3.14*r;Sa=3.14*r*r;Sb=4*Sa;Va=4*3.14*r*r*r/3;Vb=Sa*h;printf(___”Cl=%.2fSa=%.2fSb=%.2fVa=%.2fVb=%.2f ”,Cl,Sa,Sb,Va,Vb );}2、输入一个华氏温度,要求输出摄氏温度。
公式为 c=5(F-32)/9输出要求有文字说明,取位2小数。
#include <stdio.h>main(){float F,c;scanf("%f",&F);____c=5*(F-32)/9______;printf("c=%.2f",c);}3、有一函数:⎪⎩⎪⎨⎧≥-<≤-<=10113101121x x x x x x y 写一程序,输入x 值,输出y 值。
#include <stdio.h>main(){int x,y;printf("输入x :");scanf("%d",&x);if(x<1) { /* x<1 */y=x;printf("x=%3d, y=x=%d\n",x,y);} else if (____x<10_______){ /* 1≤x -10 */_____y=2*x-1_______;printf("x=%3d, y=2*x-1=%d\n",x,y);} else{ /* x≥10 */y=3*x-11;printf("x=%3d, y=3*x-11=%d\n",x# include "stdio.h"main(){int x,y;scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10){ y=2*x-1;}else{ y=3*x-11;}printf("%d",y);}# include "stdio.h"main(){int x,y;scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10){ y=2*x-1;}else{ y=3*x-11;}printf("%d\n",y);}# include "stdio.h"main(){int x,y;scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10){ y=2*x-1;}else{ y=3*x-11;}printf("%d",y);}scanf("%d",&x);if(x<1){ y=x;}else if(x>=1 && x<10){ y=2*x-1;}else{ y=3*x-11;}# include "stdio.h" main(){int x,y;scanf("%d",&x);if(x<1)y=x;else if(x>=1 && x<10)y=2*x-1;elsey=3*x-11;printf("%d",y);},y);}}4、给定一个不多于5位的正整数,要求:①求它是几位数;②按逆序打印出各位数字。
《C语言程序设计》第三版课后答案第一章:C语言基础知识1.1 C语言的历史和特点C语言是由贝尔实验室的Dennis Ritchie在20世纪70年代初开发的一种高级计算机编程语言。
C语言具有简洁、高效、可移植性强等特点,成为了编写系统软件和应用软件的首选语言。
1.2 C语言的开发环境为了编写和运行C语言程序,我们需要安装并配置相应的开发环境。
常用的开发环境包括Code::Blocks、Dev-C++和Eclipse等。
这些开发环境提供了编辑器、编译器和调试器等工具,方便我们进行程序开发和调试。
1.3 C语言的基本语法C语言的基本语法包括关键字、标识符、数据类型、变量、常量、运算符和控制语句等。
关键字是C语言预先定义的词汇,如int、if、for等。
标识符是程序中自定义的名称,用于标识变量、函数等。
数据类型包括整型、浮点型、字符型和指针型等。
变量是存储数据的位置,常量是不可修改的数据。
运算符用于进行数学和逻辑运算。
控制语句包括条件语句和循环语句,用于控制程序的执行流程。
第二章:C语言基本程序设计2.1 程序的结构C语言程序由多个函数组成,其中main函数是程序的入口,是程序执行的起点。
在main函数中,我们可以调用其他函数来完成具体的任务。
一个基本的C语言程序结构包括包含头文件、定义变量、执行语句和返回值等部分。
2.2 输入和输出输入和输出是C语言程序中常见的操作。
标准库提供了一系列函数,如printf和scanf,用于输出和输入数据。
其中printf函数用于格式化输出数据,scanf函数用于接收用户的输入。
2.3 运算和赋值C语言支持多种运算符,如算术运算符、关系运算符、逻辑运算符和位运算符等。
这些运算符可以用于数值计算和条件判断。
赋值运算符用于给变量赋值。
2.4 条件语句条件语句根据条件的成立与否来决定程序的执行路径。
C语言提供了if语句和switch语句来实现条件控制。
if语句根据条件的真假来执行不同的代码块。
参考答案第 9 章编译预处理一、选择题二、编程题略。
习题一、选择题(1)编译预处理的工作是在( A )完成的。
A)编译前B)编译时C)编译后D)执行时(2)以下选项汇总,( D )不属于编译预处理。
A)宏定义B)文件包含C)条件编译D)连接(3)以下选项中,( C )是C语句。
A)#include<stdio.h> B)#define PI 3.1415926C)j++; D)a=3(4)以下叙述中错误的是( D )。
A)在程序中凡是以“#”开始的语句行都是预处理命令行B)预处理命令行的最后不能以分号结束C)“#define MAX 3 ”是合法的预处理命令行D)C程序对预处理命令行的处理是在程序执行的过程中进行的(5)以下关于宏的叙述中正确的是( C )。
A)宏名必须用大写字母表示 B)宏定义必须位于源程序中所有语句之前C)宏展开没有数据类型限制D)宏调用比函数调用耗费时间(6)在宏定义#define PI 3.1415926中,用宏名代替一个( D )。
A)单精度数B)双精度数C)常量D)字符串(7)设有宏定义#define A B abcd,则宏展开时( A )。
A)宏名A用B abcd替换B)宏名A B用abcd替换C)宏名A和宏名B都用abcd替换D)语法错误,无法替换(8)若程序中有宏定义行#define N 100,则以下叙述中正确的是( B )。
A)宏定义行中定义了标识符N的值为整数100B)对C源程序进行预处理时,用100替换标识符NC)对C源程序进行编译时,用100替换标识符ND)在运行时,用100替换标识符N(9)以下程序的运行结果是( B )。
#include <stdio.h>#define M 5#define N M+Mvoid main( ){ int k;k=N*N*5;printf("%d\n",k);}A)500 B)55C)125 D)程序有错无输出结果(10)以下程序的运行结果是( D )。
C语言程序设计课后习题参考答案习题一一、单项选择题1、C2、B3、B4、C5、D6、A7、C8、A二、填空题1、判断条件2、面向过程编程3、结构化4、程序5、面向对象方法6、基本功能操作、控制结构7、有穷性8、直到型循环结构9、算法10、可读性11、模块化12、对问题的分解和模块的划分习题二一、单项选择题1、B2、D3、C4、B5、A6、A7、B8、C二、填空题1、主2、C编译系统3、结构化4、程序5、面向对象方法6、.OBJ7、库函数8、直到型循环结构习题三一、单项选择题1、D2、B3、A4、C5、A6、D7、B8、D9、B 10、C 11、A 12、D 13、C 14、B 15、C 16、A17、B 18、C 19、C 20、D 21、A 22、D 23、D 24、D、A25、D 26、A二、填空题1、补码2、10^-138~10^138、15~163、实4、单目运算符、自右向左----------------------------精品word文档值得下载值得拥有----------------------------------------------5、函数调用6、65,89习题四一、单项选择题1、D2、C3、D4、A5、D6、B7、A8、C9、B 10、B二、填空题1、两, ;2、5.1690003、-200 2500、i=-200,j=2500回车、i=-200回车j=2500回车4、a=98,b=765.000000,c=4321.0000005、100 25.81 1.89234、100,25.81,1.89234、100回车25.81回车1.89234回车6、0,0,37、38、scanf(“%lf %lf %lf”,&a,&b,&c);9、13 13.000000 13.00000010、c=b-a;a=b+c;习题五一、单项选择题1、B2、D3、C4、B5、B6、D7、A8、B9、D二、填空题1、1 、02、k!=03、if(x>4||x<-4) printf(“%d”,x);else printf(“error!”);4、if(((x>=1&&x<=10)||(x>=200&&x<=210))&&(x%2!=0))Printf(“%d”,x);5、16、17、10!Right!8、a=09、2,110、0<a<b习题六一、单项选择题1、B2、C3、C4、B5、C6、B7、C8、A二、填空题1、无穷次2、83、20----------------------------精品word文档值得下载值得拥有----------------------------------------------4、115、3.66、*#*#*#$7、8 5 28、d=1.0 、k++、k<=n9、!(x<0)、x<amin习题七一、单项选择题1、B2、D3、C4、C5、A6、A7、D8、A二、填空题1、1 2 4 8 16 32 64 128 256 5122、a[age]++、i=18;i<263、break、i==84、a[i]>b[i]、i<3、j<55、b[j]=0、b[j]=a[j][k]习题八一、单项选择题1、B2、C3、C4、A5、A6、A7、C8、D9、D 10、B 11、A 12、C 13、A 14、C 15、B二、填空题1、return 1、return n+sum(n-1)2、return 1、n*facto(n-1)习题九一、单项选择题1、D2、C3、D4、A5、C6、C7、C8、C9、B 10、C 11、A 12、C 13、B 14、A 15、D 16、B17、C 18、A 19、B 20、C二、填空题1、int 、return z2、*p++3、’\0’、++4、p、max<*q、min>*q习题十一、单项选择题1、D2、D3、A4、5、B6、A7、C8、B9、D 10、 11、C 12、D 13、D 14、C二、填空题1、34 122、ARRAY a[10],b[10],c[10];3、2 3----------------------------精品word文档值得下载值得拥有----------------------------------------------4、ab、cd5、(*b).day、b->day6、adabc defghi mnohi no7、(struct node *)、!=’\n’、p=top;8、p1=p1->next9、(struct list *)、(struct list *)、return (n)习题十一一、单项选择题1、A2、A3、B4、A5、B6、D7、B8、A9、A 10、B 11、B 12、B 13、C 14、C 15、D 16、A17、D二、填空题1、ASCII(文本)、二进制2、pf=fopen(“A:\\zk04\\data\\txfile.dat”,”w”);3、fputc()、fputs()、fscanf()、fread()4、(后两个空)文件结束符、非0值她含着笑,切着冰屑悉索的萝卜,她含着笑,用手掏着猪吃的麦糟,她含着笑,扇着炖肉的炉子的火,她含着笑,背了团箕到广场上去晒好那些大豆和小麦,大堰河,为了生活,在她流尽了她的乳液之后,她就用抱过我的两臂,劳动了。
WORD格式.分享 精品.资料 C++面向对象程序设计教程课后题答案
1.1 什么是面向对象程序设计? 面向对象程序设计是一种新的程序设计范型.这种范型的主要特征是: 程序=对象+消息 面向对象程序的基本元素是对象。 主要结构特点是: 第一, 程序一般由类的定义和类的使用两部分组成; 第二, 程序中的一切操作都是通过向对象发送消息来实现的。
1.2 什么是对象?什么是类?对象与类之间的关系是什么? 对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。
类就是具有相同的数据和相同的操作的一组对象的集合,也就是说,类是对具有相同数据结构和相同操作的一类对象的描述。
类和对象之间的关系是抽象和具体的关系。类是多个对象进行综合抽象的结果,一个对象是类的一个实例。
1.3 现实世界中的对象有哪些特征?请举例说明。 现实世界中的对象具有以下特征: 1) 每一个对象必须有一个名字以区别于其他对象; 2) 用属性来描述对象的某些特征; 3) 有一组操作,每组操作决定对象的一种行为; WORD格式.分享 精品.资料 4) 对象的行为可以分为两类:一类是作用于自身的行为,另一类是作用于其他对象的行为。
例如一个教师是一个对象。每个教师对象有自己的名字来和别的教师区别。教师具有编号,姓名,年龄,职称,专业等属性。教师拥有走路,吃饭,授课等行为操作。走路,吃饭是作用于自身的行为,授课是作用于其他对象的行为。
1.4 什么是消息?消息具有什么性质? 一个对象向另一个对象发出的请求成为“消息”。 消息具有以下3个性质: 1) 同一个对象可以接收不同形式的多个消息,做出不同的相应;
2) 相同形式的消息可以传递给不同的对象,所做出的响应可以是不同的;
3) 对消息的响应并不是必须的,对象可以响应消息,也可以不响应。
1.5 什么是抽象和封装?请举例说明。 抽象是将有关事物的共性归纳、集中的过程。 例如:把所有具有大学生学籍的人归为一类,成为“大学生”,这就是一个抽象。 封装是指把数据和实现操作的代码集中起来放在对象内部,并尽可能隐藏对象的内部细节。
例如:每一台洗衣机都有出厂日期、机器编号等属性,也有启动、暂停、选择等操作。人们在使用洗衣机的时候只需要按下对应的按钮,而不用关心具体的内部实现。这就是封装。
1.6 什么是继承?请举例说明。 继承就是允许派生类使用基类的数据和操作,同时,派生类还可以增加新的操作和数据。 WORD格式.分享 精品.资料 例如:哺乳动物是一种热血、有毛发、用奶哺育幼崽的动物; 狗是有犬牙、食肉、特定的骨骼结构、群居的哺乳动物。 狗就继承了哺乳动物。
1.7 若类之间具有继承关系,则他们之间具有什么特征? 若类之间具有继承关系,则他们之间具有下列几个特征: 1) 类间具有共享特征(包括数据和操作代码的共享); 2) 类间具有差别或新增部分(包括非共享的数据和操作代码); 3) 类具有层次结构。
1.8 什么是单继承、多继承?请举例说明。 单继承是指每个派生类只直接继承了一个基类的特征。例如狗继承自哺乳动物。 多继承是指多个基类派生出一个派生类的继承关系。比如玩具车同时继承自玩具和车。
1.9 什么是多态?请举例说明。 多态是指不同的对象收到相同的消息时执行不同的操作。 例如,有一个窗口类对象,还有一个棋子类对象。当我们发出“移动”消息时,两个对象的行为不同。
1.10 面向对象程序设计的主要优点是什么? 1. 可提高程序的重用性; 2. 可控制程序的复杂性; 3. 可改善程序的可维护性; 4. 能够更好地支持大型程序设计; 5. 增强了计算机处理信息的范围;
能够很好地适应新的硬件环境。 2.1 简述C++的主要特点。 WORD格式.分享 精品.资料 1) C++是C的超集,保持与C的兼容。 2) 保持了C的简洁、高效和接近汇编语言等特点,并对C的功能作了不少扩充。用C++编写的程序比C更安全,可读性更好,代码结构更为合理。
3) 程序质量高。 4) 增加了面向对象机制。
2.2 #include using namespace std;
int main() { int a, b, d, min; cout << "Enter two numbers:"; cin >> a >> b; min = a > b ? b : a; for(d = 2; d < min; d++) { if(((a % d) == 0) && ((b % d ) == 0)) break; } if (d == min) { cout << "No common denominators" << endl; return 0; } cout << "The lowest common denominator is" << d << endl; return 0; }
2.3 有效 2.4 没有函数声明; WORD格式.分享 精品.资料 函数定义没有写返回值类型。
2.5 (1)等价,函数声明可以省略参数的名字。 (2)不等价,第二个的函数定义不能省略参数的名字。
2.6-2.10 CDAAB 2.11-2.15 ACBDC 2.16-2.17 DC 2.18 101
2.19 10 10
2.20 10 20
2.21 举例说明可以使用const替代#define以消除#define的不安全性。 #include WORD格式.分享 精品.资料 using namespace std; int main() { int a = 1; #define T1 a+a #define T2 T1-T1 cout << "T2 is " << T2 < return 0; }
上面这个程序,初看应该输出 T2 is 0 但是实际上,得出T2 is 2
如果把#define换成const, 则可以输出想要的结果。 2.22 用动态分配空间的方法,计算Fibonacci数列的前20项,并存储到动态分配的空间中。
#include using namespace std;
int main() { int *pi = new int[20]; *pi = 1; pi[1] = 1; for(int i = 2; i < 20; i++) { pi[i] = pi[i - 2] + pi[i - 1]; } return 0; }
2.23 重载sroot函数,输出一个数的二次方根。 WORD格式.分享 精品.资料 #include using namespace std;
double sroot(int num) { return (double)sqrt((double)num); }
double sroot(long num) { return (double)sqrt((double)num); }
double sroot (double num) { return (double)sqrt(num); } int main() { return 0; }
2.24 解决百钱问题。将一元人民币换成1、2、5分的硬币,有多少种换法? #include using namespace std;
int main() { int num = 0; //总共换法的总数。初始化为0。 for(int i = 0; i <= 100; i++) { for(int j = 0; j <= 50; j++) { if((i + 2*j) > 100) { break; } for(int k = 0; k <= 20; k++) { if((i + 2*j + 5*k) == 100) WORD格式.分享 精品.资料 { num++; cout << "1分" << i << "个;" << "2分" << j << "个;" << "5分" << k << "个;" << endl; } if ((i + 2*j + 5*k) > 100) { break; } } } } cout << num << endl; return 0; }
2.25 输入两个整数,按由小到大的顺序输出。要求使用变量的引用。 #include using namespace std;
void swap(int &a, int &b) { a = a + b; b = a - b; a = a - b; }
int main() { int a, b; cin >> a >>b; if(a > b) { swap(a, b); } cout << a << "," << b << endl; return 0; }
2.26 用二分法求解 f(x)=0的根。