《C语言程序设计课后答案郑莉第4版.docx》由会员分享,可在线阅读,更多相关《C语言程序设计课后答案郑莉第4版.docx(242页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第 一 章 概述1-1 简述计算机程序设计语言的开展历程。解: 迄今为止计算机程序设计语言的开展阅历了机器语言、汇编语言、高级语言等阶段,C+语言是一种面对对象的编程语言,也属于高级语言。1-2 面对对象的编程语言有哪些特点?解: 面对对象的编程语言与以往各种编程语言有根本的不同,它设计的动身点就是为了能更干脆的描绘客观世界中存在的事物以及它们之间的关系。面对对象的编程语言将客观事物看作具有属性与行为的对象,通过抽象找出同一类对象的共同属性(静态特征)与行为(动态特征),形成类。通过类的继承与多态可以很便利地实现代码重用,大大缩短了软件开发周期,并使得软件风格统一。因此,面对对象的编程语言使程
2、序可以比拟干脆地反问题域的原来面目,软件开发人员可以利用人类相识事物所承受的一般思维方法来进展软件开发。C+语言是目前应用最广的面对对象的编程语言。1-3 什么是构造化程序设计方法?这种方法有哪些优点与缺点?解: 构造化程序设计的思路是:自顶向下、逐步求精;其程序构造是按功能划分为若干个根本模块;各模块之间的关系尽可能简洁,在功能上相对独立;每一模块内部均是由依次、选择与循环三种根本构造组成;其模块化实现的详细方法是运用子程序。构造化程序设计由于承受了模块分解与功能抽象,自顶向下、分而治之的方法,从而有效地将一个较困难的程序系统设计任务分解成很多易于限制与处理的子任务,便于开发与维护。 虽然构
3、造化程序设计方法具有很多的优点,但它仍是一种面对过程的程序设计方法,它把数据与处理数据的过程分别为互相独立的实体。当数据构造变更时,全部相关的处理过程都要进展相应的修改,每一种相对于老问题的新方法都要带来额外的开销,程序的可重用性差。由于图形用户界面的应用,程序运行由依次运行演化为事务驱动,使得软件运用起来越来越便利,但开发起来却越来越困难,对这种软件的功能很难用过程来描绘与实现,运用面对过程的方法来开发与维护都将特别困难。 1-4 什么是对象?什么是面对对象方法?这种方法有哪些特点?解: 从一般意义上讲,对象是现实世界中一个实际存在的事物,它可以是有形的,也可以是无形的。对象是构成世界的一个
4、独立单位,它具有自己的静态特征与动态特征。面对对象方法中的对象,是系统中用来描绘客观事物的一个实体,它是用来构成系统的一个根本单位,由一组属性与一组行为构成。面对对象的方法将数据及对数据的操作方法放在一起,作为一个互相依存、不行分别的整体-对象。对同类型对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进展处理。类通过一个简洁的外部接口,与外界发生关系,对象与对象之间通过消息进展通讯。这样,程序模块间的关系更为简洁,程序模块的独立性、数据的平安性就有了良好的保障。通过实现继承与多态性,还可以大大进步程序的可重用性,使得软件的开发与维护都更为便利。面对对象方法所强调的根本原则,就是干脆
5、面对客观存在的事物来进展软件开发,将人们在日常生活中习惯的思维方式与表达方式应用在软件开发中,使软件开发从过分专业化的方法、规则与技巧中回到客观世界,回到人们通常的思维。1-5 什么叫做封装?解: 封装是面对对象方法的一个重要原则,就是把对象的属性与效劳结合成一个独立的系统单位,并尽可能隐藏对象的内部微小环节。1-6 面对对象的软件工程包括哪些主要内容?解: 面对对象的软件工程是面对对象方法在软件工程领域的全面应用,它包括面对对象的分析(OOA)、面对对象的设计(OOD)、面对对象的编程(OOP)、面对对象的测试(OOT)与面对对象的软件维护(OOSM)等主要内容。1-7 简述计算机内部的信息
6、可分为几类?解: 计算机内部的信息可以分成限制信息与数据信息二大类;限制信息可分为指令与限制字两类;数据信息可分为数值信息与非数值信息两类。 1-8 什么叫二进制?运用二进制有何优点与缺点?解: 二进制是基数为2,每位的权是以2 为底的幂的进制,遵循逢二进一原则,根本符号为0与1。承受二进制码表示信息,有如下几个优点:1.易于物理实现;2.二进制数运算简洁;3.机器牢靠性高;4.通用性强。其缺点是它表示数的容量较小,表示同一个数,二进制较其他进制须要更多的位数。1-9 请将以下十进制数值转换为二进制与十六进制补码:(1)2 (2)9 (3)93 (4)-32 (5)65535 (6)-1 解:
7、 (1) (2)10 = (10)2 = (2)16(2) (9)10 = (1001)2 = (9)16(3) (93)10 = (1011101)2 = (5D)16(4) (-32)10 = (11100000)2 = (E0)16(5) (65535)10 = (11111111 11111111)2 = (FFFF)16(6) (-1)10 = (11111111 11111111)2 = (FFFF)161-10 请将以下数值转换为十进制:(1)(1010)2 (2)(10001111)2 (3)(01011111 11000011)2 (4)(7F)16 (5)(2D3E)16
8、(6)(F10E)16解: (1)(1010)2 = (10)10(2)(10001111)2 = (143)10(3)(01011111 11000011)2 = (24515)10(4)(7F)16 = (127)10(5)(2D3E)16 = (11582)10(6)(F10E)16 = (61710)101-11 简要比拟原码、反码、补码等几种编码方法。解: 原码:将符号位数字化为 0 或 1,数确实定值与符号一起编码,即所谓符号确定值表示的编码。正数的反码与补码与原码表示一样。负数的反码与原码有如下关系:符号位一样(仍用1表示),其余各位取反(0变1,1变0)。补码由该数反码的最末位
9、加1求得。 第 二 章 C+简洁程序设计2-1 C+语言有那些主要特点与优点?解: C+语言的主要特点表如今两个方面,一是全面兼容C,二是支持面对对象的方法。C+是一个更好的C,它保持了C的简洁、高效、接近汇编语言、具有良好的可读性与可移植性等特点,对C的类型系统进展了改革与扩大,因此C+比C更平安,C+的编译系统能检查出更多的类型错误。 C+语言最重要的特点是支持面对对象。2-2 下列标识符哪些是合法的Program, -page, _lock, test2, 3in1, mail, A_B_C_D解: Program, _lock, test2, A_B_C_D是合法的标识符,其它的不是。
10、2-3 例2.1中每条语句的作用是什么?#include void main(void)coutHello!n;coutWelcome to c+!n;解: #include /指示编译器将文件iostream.h中的代码/嵌入到该程序中该指令所在的地方void main() /主函数名,void 表示函数没有返回值 /函数体标记coutHello!n; /输出字符串Hello!到标准输出设备(显示器)上。coutWelcome to c+!n; /输出字符串Welcome to c+!在屏幕输出如下:Hello!Welcome to c+!2-4 运用关键字const而不是#define语句
11、的好处有哪些?解: const定义的常量是有类型的,所以在运用它们时编译器可以查错;而且,这些变量在调试时照旧是可见的。2-5 请写出C+语句声明一个常量PI,值为3.1416;再声明一个浮点型变量a,把PI的值赋给a。解: const float PI = 3.1416;float a = PI;2-6 在下面的枚举类型中,Blue的值是多少?enum COLOR WHITE, BLACK = 100, RED, BLUE, GREEN = 300 ;解: Blue = 1022-7 注释有什么作用?C+中有哪几种注释的方法?他们之间有什么区分解: 注释在程序中的作用是对程序进展注解与说明,
12、以便于阅读。编译系统在对源程序进展编译时无视注释部分,因此注释对于程序的功能实现不起任何作用。而且由于编译时无视注释部分,所以注释内容不会增加最终产生的可执行程序的大小。适当地运用注释,可以进步程序的可读性。在C+中,有两种给出注释的方法:一种是延用C语言方法,运用/*与*/括起注释文字。另一种方法是运用/,从/开场,直到它所在行的行尾,全部字符都被作为注释处理。2-8 什么叫做表达式?x = 5 + 7是一个表达式吗?它的值是多少?解: 任何一个用于计算值的公式都可称为表达式。x = 5 + 7是一个表达式,它的值为12。2-9 下列表达式的值是多少?1. 201 / 42. 201 % 4
13、3. 201 / 4.0解: 1 502 13 50.252-10 执行完下列语句后,a、b、c三个变量的值为多少?a = 30;b = a+;c = +a;解: a:32 ; b:30 ; c:32;2-11 在一个for循环中,可以初始化多个变量吗?如何实现?解: 在for循环设置条件的第一个;前,用,分隔不同的赋值表达式。例如:for (x = 0, y = 10; x 100; x+, y+)2-12 执行完下列语句后,n的值为多少?int n;for (n = 0; n 100; n+)解: n的值为1002-13 写一条for语句,计数条件为n从100到200,步长为2;然后用wh
14、ile与dowhile语句完成同样的循环。解: for循环:for (int n = 100; n = 200; n += 2); while循环:int x = 100;while (n = 200)n += 2; dowhile循环:int n = 100;don += 2; while(n y)x = y;else / y x | y = xy = x;2-17 修改下面这个程序中的错误,改正后它的运行结果是什么?#include void main()int iint j;i = 10; /* 给i赋值j = 20; /* 给j赋值 */cout i + j = i + j; /* 输
15、出结果 */return 0;解: 改正:#include int main()int i;int j;i = 10; / 给i赋值j = 20; /* 给j赋值 */cout i + j = i + j; /* 输出结果 */return 0;程序运行输出:i + j = 302-18 编写一个程序,运行时提示输入一个数字,再把这个数字显示出来。解: 源程序:#include int main()int i;cout i;cout 您输入一个数字是 i endl;return 0;程序运行输出:请输入一个数字:5您输入一个数字是52-19 C+有哪几种数据类型?简述其值域。编程显示你运用的计
16、算机中的各种数据类型的字节数。解: 源程序:#include int main()cout The size of an int is:tt sizeof(int) bytes.n;cout The size of a short int is:t sizeof(short) bytes.n;cout The size of a long int is:t sizeof(long) bytes.n;cout The size of a char is:tt sizeof(char) bytes.n;cout The size of a float is:tt sizeof(float) byt
17、es.n;cout The size of a double is:t sizeof(double) bytes.n;return 0;程序运行输出:The size of an int is: 4 bytes.The size of a short int is: 2 bytes.The size of a long int is: 4 bytes.The size of a char is: 1 bytes.The size of a float is: 4 bytes.The size of a double is: 8 bytes.2-20 打印ASCII码为32127的字符。解: #
18、include int main()for (int i = 32; i128; i+)cout (char) i;return 0;程序运行输出:!#$%G()*+,./0123456789:;ABCDEFGHIJKLMNOP_QRSTUVWXYZabcdefghijklmnopqrstuvwxyzs2-21 运行下面的程序,视察其输出,与你的设想是否一样?#include int main()unsigned int x;unsigned int y = 100;unsigned int z = 50;x= y - z;cout Difference is: x;x = z - y;cou
19、t nNow difference is: x endl;return 0;解: 程序运行输出:Difference is: 50Now difference is: 4294967246留意,第二行的输出并非 -50,留意x、y、z的数据类型。2-22 运行下面的程序,视察其输出,体会i+与+i的差异。#include int main()int myAge = 39; / initialize two integersint yourAge = 39;cout I am: myAge years old.n;cout You are: yourAge years oldn;myAge+;
20、/ postfix increment+yourAge; / prefix incrementcout One year passes.n;cout I am: myAge years old.n;cout You are: yourAge years oldn;cout Another year passesn;cout I am: myAge+ years old.n;cout You are: +yourAge years oldn;cout Lets print it again.n;cout I am: myAge years old.n;cout You are: yourAge
21、years oldn;return 0;解: 程序运行输出:I am 39 years oldYou are 39 years oldOne year passesI am 40 years oldYou are 40 years oldAnother year passesI am 40 years oldYou are 41 years oldLets print it againI am 41 years oldYou are 41 years old2-23 什么叫常量?什么叫变量?解: 所谓常量是指在程序运行的整个过程中其值始终不行变更的量,除了用文字表示常量外,也可以为常量命名,这
22、就是符号常量;在程序的执行过程中其值可以变更的量称为变量,变量是须要用名字来标识的。2-24 变量有哪几种存储类型?解: 变量有以下几种存储类型:auto存储类型:承受堆栈方式支配内存空间,属于一时性存储,其存储空间可以被若干变量屡次覆盖运用; register存储类型:存放在通用存放器中;extern存储类型:在全部函数与程序段中都可引用;static存储类型:在内存中是以固定地址存放的,在整个程序运行期间都有效。2-25 写出下列表达式的值:1. 2 3 & 6 92. ! ( 4 5) | (6 2解: 1 12 -13 04 02-28 编写一个完好的程序,实现功能:向用户提问如今正在
23、下雨吗?,提示用户输入Y或N。若输入为Y,显示如今正在下雨。; 若输入为N,显示如今没有下雨。;否则接着提问如今正在下雨吗?解: 源程序:#include #include void main()char flag;while(1)cout flag;if ( toupper(flag) = Y)cout 如今正在下雨。;break;if ( toupper(flag) = N)cout 如今没有下雨。;break;程序运行输出:如今正在下雨吗?(Yes or No):x如今正在下雨吗?(Yes or No):l如今正在下雨吗?(Yes or No):q如今正在下雨吗?(Yes or No):
24、n如今没有下雨。或:如今正在下雨吗?(Yes or No):y如今正在下雨。2-29 编写一个完好的程序,运行时向用户提问你考试考了多少分?(0100),接收输入后推断其等级,显示出来。规则如下:解: #include void main()int i,score;cout score;if (score100 | score0)cout 分数值必需在0到100之间!;elsei = score/10;switch (i)case 10:case 9:cout 你的成果为优!;break;case 8:cout 你的成果为良!;break;case 7:case 6:cout 你的成果为中!;
25、break;default:cout 你的成果为差!;程序运行输出:你考试考了多少分(0100):85你的成果为良!2-30 (1)实现一个简洁的菜单程序,运行时显示Menu: A(dd) D(elete) S(ort) Q(uit), Select one:提示用户输入,A表示增加,D表示删除,S表示排序,Q表示退出,输入为A、D、S时分别提示数据已经增加、删除、排序。输入为Q时程序完毕。要求运用if else语句进展推断,用break、continue限制程序流程。解: #include #include void main()char choice,c;while(1)cout c;ch
26、oice = toupper(c);if (choice = A)cout 数据已经增加. endl;continue;else if (choice = D)cout 数据已经删除. endl;continue;else if (choice = S)cout 数据已经排序. endl;continue;else if (choice = Q)break;程序运行输出:Menu: A(dd) D(elete) S(ort) Q(uit), Select one:a数据已经增加. Menu: A(dd) D(elete) S(ort) Q(uit), Select one:d数据已经删除. M
27、enu: A(dd) D(elete) S(ort) Q(uit), Select one:s数据已经排序. Menu: A(dd) D(elete) S(ort) Q(uit), Select one:q (2)实现一个简洁的菜单程序,运行时显示Menu: A(dd) D(elete) S(ort) Q(uit), Select one:提示用户输入,A表示增加,D表示删除,S表示排序,Q表示退出,输入为A、D、S时分别提示数据已经增加、删除、排序。输入为Q时程序完毕。要求运用Switch语句。解: 源程序:#include #include void main()char choice;w
28、hile(1)cout choice;switch(toupper(choice)case A:cout 数据已经增加. endl;break;case D:cout 数据已经删除. endl;break;case S:cout 数据已经排序. endl;break;case Q:exit(0);break;default:程序运行输出:Menu: A(dd) D(elete) S(ort) Q(uit), Select one:a数据已经增加. Menu: A(dd) D(elete) S(ort) Q(uit), Select one:d数据已经删除. Menu: A(dd) D(elet
29、e) S(ort) Q(uit), Select one:s数据已经排序. Menu: A(dd) D(elete) S(ort) Q(uit), Select one:q2-31 用穷举法找出1100间的质数,显示出来。分别运用while,do-while,for循环语句实现。解: 源程序: 运用while循环语句:#include #include void main()int i,j,k,flag;i = 2;while(i = 100)flag = 1;k = sqrt(i);j = 2;while (j = k)if(i%j = 0)flag = 0;break;j+;if (fla
30、g)cout i 是质数. endl;i+;运用dowhile循环语句:#include #include void main()int i,j,k,flag;i = 2;doflag = 1;k = sqrt(i);j = 2;doif(i%j = 0)flag = 0;break;j+;while (j = k);if (flag)cout i 是质数. endl;i+;while(i = 100);运用for循环语句:#include #include void main()int i,j,k,flag;for(i = 2; i = 100; i+)flag = 1;k = sqrt(i
31、);for (j = 2; j = k; j+)if(i%j = 0)flag = 0;break;if (flag)cout i 是质数. endl;程序运行输出:2是质数.3是质数.5是质数.7是质数.11是质数.13是质数.17是质数.19是质数.23是质数.29是质数.31是质数.37是质数.41是质数.43是质数.47是质数.53是质数.59是质数.61是质数.67是质数.71是质数.73是质数.79是质数.83是质数.89是质数.97是质数.2-32 比拟Break语句与Continue语句的不同用法。解: Break使程序从循环体与switch语句内跳出,接着执行逻辑上的下一条语
32、句,不能用在别处;continue 语句完毕本次循环,接着开场推断确定是否接着执行下一次循环; 2-33 定义一个表示时间的构造体,可以准确表示年、月、日、小时、分、秒;提示用户输入年、月、日、小时、分、秒的值,然后完好地显示出来。 解: 源程序见试验指导部分试验二2-34 在程序中定义一个整型变量,赋以1100的值,要求用户猜这个数,比拟两个数的大小,把结果提示给用户,直到猜对为止。分别运用while、dowhile语句实现循环。解: /运用while语句#include void main() int n = 18;int m = 0;while(m != n) cout m;if (n
33、m)cout 你猜的值太小了! endl;else if (n m)cout 你猜的值太大了! endl;elsecout 你猜对了! endl;/运用dowhile语句#include void main() int n = 18;int m = 0;docout m;if (n m)cout 你猜的值太小了! endl;else if (n m)cout 你猜的值太大了! endl;elsecout 你猜对了! endl;while(n != m);程序运行输出:请猜这个数的值为多少?(0100):50你猜的值太大了!请猜这个数的值为多少?(0100):25你猜的值太大了! 请猜这个数的值
34、为多少?(0100):10你猜的值太小了!请猜这个数的值为多少?(0100):15你猜的值太小了!请猜这个数的值为多少?(0100):18你猜对了! 2-35 定义枚举类型weekday,包括Sunday到Saturday七个元素在程序中定义weekday类型的变量,对其赋值,定义整型变量,看看能否对其赋weekday类型的值。解: #include enum weekdaySunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturdayvoid main()int i;weekday d = Thursday;cout d = d endl;i
35、 = d;cout i = i endl;d = (weekday)6;cout d = d endl;d = weekday( 4 );cout d = d endl;程序运行输出:d = 4i = 4d = 6d = 4 第三章 函数3-1 C+中的函数是什么?什么叫主调函数,什么叫被调函数,二者之间有什么关系?如何调用一个函数? 解: 一个较为困难的系统往往须要划分为若干子系统,高级语言中的子程序就是用来实现这种模块划分的。C与C+语言中的子程序就表达为函数。调用其它函数的函数被称为主调函数,被其它函数调用的函数称为被调函数。一个函数很可能既调用别的函数又被另外的函数调用,这样它可能在某
36、一个调用与被调用关系中充当主调函数,而在另一个调用与被调用关系中充当被调函数。调用函数之前先要声明函数原型。按如下形式声明:类型标识符 被调函数名 (含类型说明的形参表);声明了函数原型之后,便可以按如下形式调用子函数:函数名(实参列表)3-2 视察下面程序的运行输出,与你设想的有何不同?细致体会引用的用法。源程序:#include int main()int intOne;int &rSomeRef = intOne;intOne = 5;cout intOne:tt intOne endl;cout rSomeRef:t rSomeRef endl;int intTwo = 8;rSome
37、Ref = intTwo; / not what you think!cout nintOne:tt intOne endl;cout intTwo:tt intTwo endl;cout rSomeRef:t rSomeRef endl;return 0;程序运行输出:intOne: 5rSomeRef: 5intOne: 8intTwo: 8rSomeRef: 83-3 比拟值调用与引用调用的一样点与不同点。解: 值调用是指当发生函数调用时,给形参支配内存空间,并用实参来初始化形参(干脆将实参的值传递给形参)。这一过程是参数值的单向传递过程,一旦形参获得了值便与实参脱离关系,此后无论形参发
38、生了怎样的变更,都不会影响到实参。引用调用将引用作为形参,在执行主调函数中的调用语句时,系统自动用实参来初始化形参。这样形参就成为实参的一个别名,对形参的任何操作也就干脆作用于实参。3-4 什么叫内联函数它有哪些特点?解: 定义时运用关键字 inline的函数叫做内联函数;编译器在编译时在调用处用函数体进展交换,节约了参数传递、限制转移等开销;内联函数体内不能有循环语句与switch语句;内联函数的定义必需出如今内联函数第一次被调用之前;对内联函数不能进展异样接口声明;3-5 函数原型中的参数名与函数定义中的参数名以及函数调用中的参数名必需一样吗?解: 不必一样,全部的参数是依据位置与类型而不
39、是名字来区分的。 3-6 重载函数时通过什么来区分?解: 重载的函数的函数名是一样的,但它们的参数的个数与数据类型不同,编译器依据实参加形参的类型及个数的最佳匹配,自动确定调用哪一个函数。3-7 编写函数,参数为两个unsigned short int型数,返回值为第一个参数除以第二个参数的结果,数据类型为short int;假设第二个参数为0,则返回值为-1。在主程序中实现输入输出。解: 源程序:#include short int Divider(unsigned short int a, unsigned short int b)if (b = 0)return -1;elsereturn a/b;typedef unsigned short int USHORT;typedef unsigned long int ULONG;int main()USHORT one, two;short int answer;cout Enter two