C语言程序设计郑莉课后习题答案_第1页
C语言程序设计郑莉课后习题答案_第2页
C语言程序设计郑莉课后习题答案_第3页
C语言程序设计郑莉课后习题答案_第4页
C语言程序设计郑莉课后习题答案_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C++语言程序设计(清华大学郑莉)课后习题答案

动,使得软件使用起来越来越方便,但开发起来却越来越困难,

第一章概述对这种软件的功能很难用过程来描述和实现,使用面向过程的

方法来开发和维护都将非常困难。

1-1简述计算机程序设计语言的发展历程。

1-4什么是对象?什么是面向对象方法?这种方法有哪些特

点?

解:

迄今为止计算机程序设计语言的发展经历了机器语言、汇编语

言、高级语言等阶段,C++语言是一种面向对象的编程语言,也解:

属于高级语言。从一般意义上讲,对象是现实世界中一个实际存在的事物,它

可以是有形的,也可以是无形的。对象是构成世界的一个独立

单位,它具有自己的静态特征和动态特征。面向对象方法中的

1-2面向对象的编程语言有哪些特点?对象,是系统中用来描述客观事物的一个实体,它是用来构成

系统的一个基本单位,由一组属性和一组行为构成。

面向对象的方法将数据及对数据的操作方法放在一起,作为一

解:个相互依存、不可分离的整体一对象。对同类型对象抽象出其

面向对象的编程语言与以往各种编程语言有根本的不同,它设共性,形成类。类中的大多数数据,只能用本类的方法进行处

计的出发点就是为了能更直接的描述客观世界中存在的事物以理。类通过一个简单的外部接口,与外界发生关系,对象与对

及它们之间的关系。面向对象的编程语言将客观事物看作具有象之间通过消息进行通讯。这样,程序模块间的关系更为简单,

属性和行为的对象,通过抽象找出同一类对象的共同属性(静程序模块的独立性、数据的安全性就有了良好的保障。通过实

态特征)和行为(动态特征),形成类。通过类的继承与多态可现继承与多态性,还可以大大提高程序的可重用性,使得软件

以很方便地实现代码重用,大大缩短了软件开发周期,并使得的开发和维护都更为方便。

软件风格统一。因此,面向对象的编程语言使程序能够比较直面向对象方法所强调的基本原则,就是直接面对客观存在的事

接地反问题域的本来面目,软件开发人员能够利用人类认识事物来进行软件开发,将人们在日常生活中习惯的思维方式和表

物所采用的一般思维方法来进行软件开发。C++语言是目前应用达方式应用在软件开发中,使软件开发从过分专业化的方法、

最广的面向对象的编程语言。规则和技巧中回到客观世界,回到人们通常的思维。

1-3什么是结构化程序设计方法?这种方法有哪些优点和缺1-5什么叫做封装?

点?

解:

解:封装是面向对象方法的一个重要原则,就是把对象的属性和服

结构化程序设计的思路是:自顶向下、逐步求精;其程序结构务结合成一个独立的系统单位,并尽可能隐蔽对象的内部细节。

是按功能划分为若干个基本模块;各模块之间的关系尽可能简

单,在功能上相对独立;每一模块内部均是由顺序、选择和循

环三种基本结构组成;其模块化实现的具体方法是使用子程序。1-6面向对象的软件工程包括哪些主要内容?

结构化程序设计由于采用了模块分解与功能抽象,自顶向下、

分而治之的方法,从而有效地将一个较复杂的程序系统设计任

务分解成许多易于控制和处理的子任务,便于开发和维护。解:

虽然结构化程序设计方法具有很多的优点,但它仍是一种面向面向对象的软件工程是面向对象方法在软件工程领域的全面应

过程的程序设计方法,它把数据和处理数据的过程分离为相互用,它包括面向对象的分析(00A)、面向对象的设计(00D)、

独立的实体。当数据结构改变时,所有相关的处理过程都要进面向对象的编程(OOP)、面向对象的测试(00T)和面向对象的

行相应的修改,每一种相对于老问题的新方法都要带来额外的软件维护(OOSM)等主要内容。

开销,程序的可重用性差。

由于图形用户界面的应用,程序运行由顺序运行演变为事件驱1-7简述计算机内部的信息可分为几类?

解:解:

计算机内部的信息可以分成控制信息和数据信息二大类;控制原码:将符号位数字化为0或1,数的绝对值与符号一起编码,

信息可分为指令和控制字两类;数据信息可分为数值信息和非即所谓"符号一绝对值表示”的编码。

数值信息两类。正数的反码和补码与原码表示相同.

负数的反码与原码有如下关系:

符号位相同(仍用1表示),其余各位取反(。变1,1变0)。

1-8什么叫二进制?使用二进制有何优点和缺点?补码由该数反码的最末位加1求得。

解:

二进制是基数为2,每位的权是以2为底的幕的进制,遵循逢

二进一原则,基本符号为。和1。采用二进制码表示信息,有第二章C++简单程序设计

如下几个优点:1.易于物理实现;2.二进制数运算简单;3.机

器可靠性高;4.通用性强。其缺点是它表示数的容量较小,表

示同一个数,二进制较其他进制需要更多的位数。2-1C++语言有那些主要特点和优点?

1-9请将以下十进制数值转换为二进制和十六进制补码:解:

(1)2(2)9(3)93C++语言的主要特点表现在两个方面,一是全面兼容C,二是支

(4)-32(5)65535(6)-1持面向对象的方法。C++是一个更好的C,它保持了C的简洁、

高效、接近汇编语言、具有良好的可读性和可移植性等特点,

对C的类型系统进行了改革和扩充,因此C++比C更安全,C++

解:的编译系统能检查出更多的类型错误。C++语言最重要的特点

(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)162-2下列标识符哪些是合法的?

(5)(65535)10=(1111111111111111)2=(FFFF)Program,,_lock,test2,3inl>A_B_C_D

16

(6)(-1)10=(1111111111111111)2=(FFFF)16

解:

Program,」ock,test2,A_B_C_D是合法的标识符,其它

1-10请将以下数值转换为十进制:的不是。

(1)(1010)2(2)(10001111)2(3)(0101111111000011)

2

(4)(7F)16(5)(2D3E)16(6)(F10E)162-3例2.1中每条语句的作用是什么?

^include<iostream.h>

voidmain(void)

解:(

(1)(1010)2=(10)10cout«*Hello!\n*;

(2)(10001111)2=(143)10cout<<"Welcometoc++!\n”;

(3)(0101111111000011)2=(24515)10)

(4)(7F)16=(127)10

(5)(2D3E)16=(11582)10

(6)(F10E)16=(61710)10解:

ttinclude<iostream.h>〃指示编译器将文件iostream.h中

的代码

1-11简要比较原码、反码、补码等几种编码方法。〃嵌入到该程序中该指令所在的地方

voidmain()〃主函数名,void表示函数没有返回值

{〃函数体标志

cout〈〈”Hello!\rT;〃输出字符串Hello!到标准输出设备(显2-8什么叫做表达式?x=5+7是一个表达式吗?它的值是

示器)上.多少?

cout«*Welcometoc++!\n”;〃输出字符串Welcometoc++!

}

在屏幕输出如下:解:

Hello!任何一个用于计算值的公式都可称为表达式。x=5+7是一

Welcometoc++!个表达式,它的值为12。

2-4使用关键字const而不是#define语句的好处有哪些?2-9下列表达式的值是多少?

1.201/4

2.201%4

解:3.201/4.0

const定义的常量是有类型的,所以在使用它们时编译器可以

查错;而且,这些变量在调试时仍然是可见的。

解:

1.50

2-5请写出C++语句声明一个常量PI,值为3.1416:再声明一2.1

个浮点型变量a,把PI的值赋给a。3.50.25

解:2-10执行完下列语句后,a、b、c三个变量的值为多少?

constfloatPI=3.1416;a=30;

floata=PI;b=a++;

c=++a;

2-6在下面的枚举类型中,Blue的值是多少?

enumCOLOR{WHITE,BLACK=100,RED,BLUE,GREEN=解:

300);a:32;b:30;c:32;

解:2-11在一个for循环中,可以初始化多个变量吗?如何实现?

Blue=102

解:

2-7注释有什么作用?C++中有哪几种注释的方法?他们之间在for循环设置条件的第一个”;〃前,用,分隔不同的赋值表达

有什么区别?式。

例如:

for(x=0,y=10;x<100;x++,y++)

解:

注释在程序中的作用是对程序进行注解和说明,以便于阅读。

编译系统在对源程序进行编译时不理会注释部分,因此注释对2-12执行完下列语句后,n的值为多少?

于程序的功能实现不起任何作用。而且由于编译时忽略注释部intn;

分,所以注释内容不会增加最终产生的可执行程序的大小。适for(n=0;n<100;n++)

当地使用注释,能够提高程序的可读性。在C++中,有两种给

出注释的方法:一种是延用C语言方法,使用"/*"和"*/"括起

注释文字。另一种方法是使用从开始,直到它所在解:

行的行尾,所有字符都被作为注释处理。n的值为100

else//y>x||y

y=x;

2-13写一条for语句,计数条件为n从100到200,步长为2;

然后用while和do-while语句完成同样的循环。

2-17修改下面这个程序中的错误,改正后它的运行结果是什

么?

解:ttinclude<iostream.h>

for循环:voidmain()

for(intn=100;n<=200;n+=2);inti

intj;

while循环:i=10;/*给i赋值

intx=100;j=20;/*给j赋值*/

while(n<=200)cout«*i+j=«i+j;/*输出结果*/

n+=2;return0;

i

/

do…while循环:

intn=100;

do解:

{改正:

n+=2;ttinclude<iostream.h>

}while(n<=200);intmain()

(

inti;

2-14if(x=3)和if(x==3)这两条语句的差别是什intj;

么?i=10;〃给i赋值

j=20;/*给j赋值*/

cout<<"i+j="<<i+j;/*输出结果*/

解:return0;

语句if(x=3)把3赋给x,赋值表达式的值为true,作为if)

语句的条件;语句if(x=3)首先判断x的值是否为3,若相程序运行输出:

等条件表达式的值为ture,否则为false。i+j=30

2-15什么叫做作用域?什么叫做局部变量?什么叫做全局变2-18编写一个程序,运行时提示输入一个数字,再把这个数字

量,如何使用全局变量?显示出来。

解:解:

作用域是一个标识符在程序正文中有效的区域。局部变量,一源程序:

般来讲就是具有块作用域的变量;全局变量,就是具有文件作#include<iostream.h>

用域的变量。

intmain()

j

t

2-16已知x、y两个变量,写一条简单的if语句,把较小的的inti;

值赋给原本值较大的变量。cout«”请输入一个数字:”;

cin»i;

cout«”您输入一个数字是"«i«endl;

解:return0;

if(x>y))

x=y;程序运行输出:

请输入一个数字:5!〃#$%G'()*+,./0123456789:;<>?@ABCDEFGHIJKLMNOP_QRSTU

您输入一个数字是5VWXYZ[\]7abcdefghijklmnopqrstuvwxyz<|>^s

2-19C++有哪几种数据类型?简述其值域。编程显示你使用的2-21运行下面的程序,观察其输出,与你的设想是否相同?

计算机中的各种数据类型的字节数。ttinclude<iostream.h>

intmain()

{

解:unsignedintx;

源程序:unsignedinty=100;

#include<iostream.h>unsignedintz=50;

x=y-z;

intmain()cout«*Differenceis:«x;

x=z-y;

cout«”Thesizeofanintis:\t\t*«sizeof(int)«cout«”\nNowdifferenceis:"<<x«endl;

“bytes.\n*;return0;

cout«”Thesizeofashortintis:\t*«sizeof(short))

«"bytes.\n*;

cout«”Thesizeofalongintis:\t*«sizeof(long)

«"bytes.\n*;解:

cout«”Thesizeofacharis:\t\t*«sizeof(char)«程序运行输出:

bytes.\n”;Differenceis:50

cout«”Thesizeofafloatis:\t\t*«sizeof(float)Nowdifferenceis:4294967246

«"bytes.\n*:注意,第二行的输出并非-50,注意x、y、z的数据类型。

cout«”Thesizeofadoubleis:\t"«sizeof(double)

«“bytes.\n*;

return0;2-22运行下面的程序,观察其输出,体会i++与++i的差别。

)#include<iostream.h>

程序运行输出:intmain()

Thesizeofanintis:4bytes.{

Thesizeofashortintis:2bytes.intmyAge=39;//initializetwointegers

Thesizeofalongintis:4bytes.intyourAge=39;

Thesizeofacharis:1bytes.cout«"Iam:"«myAge«”yearsold.\n";

Thesizeofafloatis:4bytes.cout«”Youare:"«yourAge«”yearsold\n”;

Thesizeofadoubleis:8bytes.myAge++;//postfixincrement

++yourAge;//prefixincrement

cout«”Oneyearpasses...\n”;

2-20打印ASCII码为32~127的字符。cout«"Iam:"«myAge«”yearsold.\n";

cout«”Youare:"«yourAge«”yearsold\n";

cout«*Anotheryearpasses\n*;

解:cout«"Iam:"«myAge++«"yearsold.\n";

#include<iostream.h>cout«”Youare:"«++yourAge«”yearsold\n*;

intmain()cout«"Let'sprintitagain.\n”;

(cout«"Iam:"«myAge«”yearsold.\n*;

for(inti=32;i<128;i++)cout«,Youare:"«yourAge«”yearsold\n”;

cout«(char)i;return0;

return0;)

)

程序运行输出:解:

程序运行输出:1.a|b-c

Iam39yearsold2.a*b&-c

Youare39yearsold3.a&b|c

Oneyearpasses4.a|b&c

Iam40yearsold

Youare40yearsold

Anotheryearpasses解:

Iam40yearsold1.-1

Youare41yearsold2.1

Let'sprintitagain3.3

Iam41yearsold4.3

Youare41yearsold

2-27若a=1,下列各式的结果是什么?

2-23什么叫常量?什么叫变量?1.!a|a

2.~a|a

3.a八a

解:4.a»2

所谓常量是指在程序运行的整个过程中其值始终不可改变的

量,除了用文字表示常量外,也可以为常量命名,这就是符号

常量;在程序的执行过程中其值可以变化的量称为变量,变量解:

是需要用名字来标识的.1.1

2.-1

3.0

2-24变量有哪几种存储类型?4.0

解:2-28编写一个完整的程序,实现功能:向用户提问”现在正在

变量有以下几种存储类型:下雨吗?“,提示用户输入Y或N。若输入为Y,显示“现在正在

auto存储类型:采用堆栈方式分配内存空间,属于一时性存储,下雨。若输入为N,显示“现在没有下雨。否则继续提

其存储空间可以被若干变量多次覆盖使用;问”现在正在下雨吗?”

register存储类型:存放在通用寄存器中;

extern存储类型:在所有函数和程序段中都可引用;

static存储类型:在内存中是以固定地址存放的,在整个程序解:

运行期间都有效.源程序:

#include<iostream.h>

ftinclude<stdlib.h>

2-25写出下列表达式的值:

1.2<3&&6<9voidmain()

2.!(4<7){

3.!(3>5)11(6<2)charflag;

while(1)

t

解:cout«”现在正在下雨吗?(YesorNo):*;

1.truecin»flag;

2.falseif(toupper(flag)=='Y')

3.true(

cout«”现在正在下雨。*;

break;

2-26若a=1,b=2,c=3,下列各式的结果是什么?)

if(toupper(flag)='N')cout«"你的成绩为中!”;

(break;

cout«〃现在没有下雨。default:

break;cout«”你的成绩为差!";

))

)

))

)程序运行输出:

程序运行输出:你考试考了多少分?(0~100):85

现在正在下雨吗?(YesorNo):x你的成绩为良!

现在正在下雨吗?(YesorNo):1

现在正在下雨吗?(YesorNo):q

现在正在下雨吗?(YesorNo):n2-30(1)实现一个简单的菜单程序,运行时显示"Menu:A(dd)

现在没有下雨。D(elete)S(ort)Q(uit),Selectone:"提示用户输入,A表

或:示增加,D表示删除,S表示排序,Q表示退出,输入为A、D、

现在正在下雨吗?(YesorNo):yS时分别提示”数据已经增加、删除、排序。”输入为Q时程序

现在正在下雨。结束。要求使用if…else语句进行判断,用break、continue

控制程序流程。

2-29编写一个完整的程序,运行时向用户提问"你考试考了多

少分?(0~100)”,接收输入后判断其等级,显示出来。规则解:

如下:ttinclude<iostream.h>

ttinclude<stdlib.h>

解:voidmain()

#include<iostream.h>{

charchoice,c;

voidmainOwhile(1)

((

inti,score;cout«"Menu:A(dd)D(elete)S(ort)Q(uit),Select

one:";

cout«〃你考试考了多少分?(0~100):1cin»c;

cin»score;choice=toupper(c);

if(score>100||score<0)if(choice='A')

cout«”分数值必须在0到100之间!”;{

elsecout«”数据已经增加."«endl;

(continue;

)

i=score/10;elseif(choice=='D')

switch(i){

(cout«”数据已经删除."«endl;

case10:continue;

case9:)

cout«〃你的成绩为优!”;elseif(choice=='S')

break;(

case8:cout«”数据已经排序."«endl;

cout«〃你的成绩为良!";continue;

break;)

case7:elseif(choice=='Q')

case6:break;

)数据已经增加.

}Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:d

程序运行输出:数据己经删除.

Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:aMenu:A(dd)D(elete)S(ort)Q(uit),Selectone:s

数据已经增加.数据已经排序.

Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:dMenu:A(dd)D(elete)S(ort)Q(uit),Selectone:q

数据已经删除.

Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:s

数据已经排序.2-31用穷举法找出l~100间的质数,显示出来。分别使用

Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:qwhile,do-while,for循环语句实现。

(2)实现一个简单的菜单程序,运行时显示"Menu:A(dd)

D(elete)S(ort)Q(uit),Selectone:"提示用户输入,A表解:

示增加,D表示删除,S表示排序,Q表示退出,输入为A、D、源程序:

S时分别提示“数据已经增加、删除、排序。”输入为Q时程序使用while循环语句:

结束。要求使用Switch语句。ttinclude<iostream.h>

解:ttinclude<math.h>

源程序:

ftinclude<iostream.h>voidmain()

#include<stdlib.h>(

inti,j,k,flag;

voidmainOi=2;

(while(i<=100)

charchoice;{

while(1)flag=1;

(k=sqrt(i);

cout«"Menu:A(dd)D(elete)S(ort)Q(uit),Selectj=2;

one:*;while(j<=k)

cin»choice;(

switch(toupper(choice))=0)

((

case'A':flag=0;

cout«”数据己经增加."«endl;break;

break;)

case'D':j++;

cout«”数据已经删除."«endl;)

break;if(flag)

case'S':cout«i«”是质数."«endl;

cout«〃数据已经排序."«endl;i++;

break;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论