《C++习题答案.docx》由会员分享,可在线阅读,更多相关《C++习题答案.docx(23页珍藏版)》请在三一办公上搜索。
1、C+习题答案第二章 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是合法的标识符,其它
2、的不是。 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而不
3、是#define语句的好处有哪些? 解: 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 = 102 2-7 注释有什么作用?C+中有哪几种注释的方法?他们之间有什么区别? 解: 注
4、释在程序中的作用是对程序进行注解和说明,以便于阅读。编译系统在对源程序进行编译时不理会注释部分,因此注释对于程序的功能实现不起任何作用。而且由于编译时忽略注释部分,所以注释内容不会增加最终产生的可执行程序的大小。适当地使用注释,能够提高程序的可读性。在C+中,有两种给出注释的方法:一种是延用C语言方法,使用/*和*/括起注释文字。另一种方法是使用/,从/开始,直到它所在行的行尾,所有字符都被作为注释处理。 2-8 什么叫做表达式?x = 5 + 7是一个表达式吗?它的值是多少? 解:任何一个用于计算值的公式都可称为表达式。x = 5 + 7是一个表达式,它的值为12。 2-9 下列表达式的值是
5、多少? 1. 201 / 4 2. 201 % 4 3. 201 / 4.0 解: 1 50 2 1 3 50.25 2-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的值为1
6、00 2-13 写一条for语句,计数条件为n从100到200,步长为2;然后用while和dowhile语句完成同样的循环。 解: for循环: for (int n = 100; n = 200; n += 2); while循环: int x = 100; while (n = 200) n += 2; dowhile循环: int n = 100; do n += 2; while(n y) x = y; else / y x | y = x y = x; 2-17 修改下面这个程序中的错误,改正后它的运行结果是什么? #include void main int i int j; i
7、 = 10; /* 给i赋值 j = 20; /* 给j赋值 */ cout i + j = i + j; /* 输出结果 */ return 0; 解: 改正: #include int main int i; int j; i = 10; / 给i赋值 j = 20; /* 给j赋值 */ cout i + j = i + j; /* 输出结果 */ return 0; 程序运行输出: i + j = 30 2-18 编写一个程序,运行时提示输入一个数字,再把这个数字显示出来。 解: 源程序: #include int main int i; cout i; cout 您输入一个数字是 i
8、 endl; return 0; 程序运行输出: 请输入一个数字:5 您输入一个数字是5 2-19 C+有哪几种数据类型?简述其值域。编程显示你使用的计算机中的各种数据类型的字节数。 解: 源程序: #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
9、char is:tt sizeof(char) bytes.n; cout The size of a float is:tt sizeof(float) bytes.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
10、 size of a float is: 4 bytes. The size of a double is: 8 bytes. 2-20 打印ASCII码为32127的字符。 解: #include int main for (int i = 32; i128; i+) cout (char) i; return 0; 程序运行输出: !#$%G*+,./0123456789:;?ABCDEFGHIJKLMNOP_QRSTUVWXYZabcdefghijklmnopqrstuvwxyzs 2-21 运行下面的程序,观察其输出,与你的设想是否相同? #include int main unsig
11、ned int x; unsigned int y = 100; unsigned int z = 50; x= y - z; cout Difference is: x; x = z - y; cout nNow difference is: x endl; return 0; 解: 程序运行输出: Difference is: 50 Now difference is: 4294967246 :第二行的输出并非 -50,注意x、y、z的数据类型。 2-22 运行下面的程序,观察其输出,体会i+与+i的差别。 #include int main int myAge = 39; / initi
12、alize two integers int yourAge = 39; cout I am: myAge years old.n; cout You are: yourAge years oldn; myAge+; / postfix increment +yourAge; / prefix increment cout 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
13、.n; cout You are: +yourAge years oldn; cout Lets print it again.n; cout I am: myAge years old.n; cout You are: yourAge years oldn; return 0; 解: 程序运行输出: I am 39 years old You are 39 years old One year passes I am 40 years old You are 40 years old Another year passes I am 40 years old You are 41 years
14、 old Lets print it again I am 41 years old You are 41 years old 2-23 什么叫常量?什么叫变量? 解: 所谓常量是指在程序运行的整个过程中其值始终不可改变的量,除了用文字表示常量外,也可以为常量命名,这就是符号常量;在程序的执行过程中其值可以变化的量称为变量,变量是需要用名字来标识的。 2-24 变量有哪几种存储类型? 解: 变量有以下几种存储类型: auto存储类型:采用堆栈方式分配内存空间,属于一时性存储,其存储空间可被若干变量多次覆盖使用; register存储类型:存放在通用寄存器中; extern存储类型:在所有函数和
15、程序段中都可引用; static存储类型:在内存中是以固定地址存放的,在整个程序运行期间都有效。 2-25 写出下列表达式的值: 1. 2 3 & 6 9 2. ! ( 4 5) | (6 2 解:1 1 2 -1 3 0 4 0 2-28 编写一个完整的程序,实现功能:向用户提问现在正在下雨吗?,提示用户输入Y或N。若输入为Y,显示现在正在下雨。; 若输入为N,显示现在没有下雨。;否则继续提问现在正在下雨吗? 解: 源程序: #include #include void main char flag; while(1) cout flag; if ( toupper(flag) = Y) /
16、 toupper把小写字母转化为大写字母,包含在stdlib.h中 cout 现在正在下雨。; break; if ( toupper(flag) = N) cout 现在没有下雨。; break; 程序运行输出: 现在正在下雨吗?(Yes or No):x 现在正在下雨吗?(Yes or No):l 现在正在下雨吗?(Yes or No):q 现在正在下雨吗?(Yes or No):n 现在没有下雨。 或: 现在正在下雨吗?(Yes or No):y 现在正在下雨。 2-29 编写一个完整的程序,运行时向用户提问你考试考了多少分?,接收输入后判断其等级,显示出来。规则如下: 解: #incl
17、ude void main int i,score; cout score; if (score100 | score0) cout 分数值必须在0到100之间!; else i = score/10; switch (i) case 10: case 9: cout 你的成绩为优!; break; case 8: cout 你的成绩为良!; break; case 7: case 6: cout 你的成绩为中!; break; default: cout 你的成绩为差!; 程序运行输出: 你考试考了多少分?(0100):85 你的成绩为良! 2-30实现一个简单的菜单程序,运行时显示Menu
18、: 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; choice = toupper(c); if (choice = A) cout 数据已经增加. endl; continue; else if (choice = D
19、) 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 数据已经删除. Menu: A(dd) D(elete) S(ort) Q(uit), Select one:s 数据已经排序. Menu: A(dd)
20、D(elete) S(ort) Q(uit), Select one:q 要求使用Switch语句。 解: 源程序: #include #include void main char choice; while(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); default: ; 程序运行输出: Menu: A(dd) D(el
21、ete) S(ort) Q(uit), Select one:a 数据已经增加. Menu: A(dd) D(elete) S(ort) Q(uit), Select one:d 数据已经删除. Menu: A(dd) D(elete) S(ort) Q(uit), Select one:s 数据已经排序. Menu: A(dd) D(elete) S(ort) Q(uit), Select one:q 2-31 用穷举法找出1100间的质数,显示出来。分别使用while,do-while,for循环语句实现。 解: 使用while循环语句: #include #include void ma
22、in 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 (flag) cout i 是质数. endl; i+; 使用dowhile循环语句: #include #include void main int i,j,k,flag; i = 2; do flag = 1; k = sqrt(i); j = 2; do if ( i % j = = 0) flag = 0; break; j+; whi
23、le (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); 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是质数.
24、 23是质数. 29是质数. 31是质数. 37是质数. 41是质数. 43是质数. 47是质数. 53是质数. 59是质数. 61是质数. 67是质数. 71是质数. 73是质数. 79是质数. 83是质数. 89是质数. 97是质数. 2-32 比较Break语句与Continue语句的不同用法。 解: Break使程序从循环体和switch语句内跳出,继续执行逻辑上的下一条语句,不能用在别处; continue 语句结束本次循环,接着开始判断决定是否继续执行下一次循环; 2-33 定义一个表示时间的结构体,可以精确表示年、月、日、小时、分、秒;提示用户输入年、月、日、小时、分、秒的值,然
25、后完整地显示出来。 解: #include using namespace std; struct time int year; int month; int day; int hour; int minute; int second; ; void main time now; coutnow.yearnow.monthnow.daynow.hournow.minutenow.second; coutnow.year年now.month月now.dayendsnow.hour:now.minute:now.secondendl; 日2-34 在程序中定义一个整型变量,赋以1100的值,要求用
26、户猜这个数,比较两个数的大小,把结果提示给用户,直到猜对为止。分别使用while、dowhile语句实现循环。 解: 使用while语句 #include void main int n = 18; int m = 0; while(m != n) cout m; if (n m) cout 你猜的值太小了! endl; else if (n m) cout 你猜的值太大了! endl; else cout 你猜对了! endl; 使用dowhile语句 #include void main int n = 18; int m = 0; do cout m; if (n m) cout 你猜的
27、值太小了! endl; else if (n m) cout 你猜的值太大了! endl; else cout 你猜对了! endl; while(n != m); 程序运行输出: 请猜这个数的值为多少?(0100):50 你猜的值太大了! 请猜这个数的值为多少?(0100):25 你猜的值太大了! 请猜这个数的值为多少?(0100):10 你猜的值太小了! 请猜这个数的值为多少?(0100):15 你猜的值太小了! 请猜这个数的值为多少?(0100):18 你猜对了! 2-35 定义枚举类型weekday,包括Sunday到Saturday七个元素在程序中定义weekday类型的变量,对其赋
28、值,定义整型变量,看看能否对其赋weekday类型的值。 解: #include enum weekday Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday ; void main int i; weekday d = Thursday; cout d = d endl; /输出对应的整型值 i = d; /将对应的整型值赋值给整型变量 cout i = i endl; d = (weekday)6; cout d = d endl; d = weekday( 4 ); cout d = d endl; 程序运行输出:
29、 d = 4 i = 4 d = 6 d = 4 2-36口袋中有红、黄、蓝、白、黑5种颜色的球若干个。每次从口袋中任意取出3个球,问得到3种不同颜色的球的可能取法,并输出每种排列的情况。 :球的颜色只有5种,每个球的颜色只能是5种之一,因此可以用枚举型变量来处理。设某一次取出的球颜色为:i,j,k,根据题意,要求i,j,k三者互不相等。可以用穷举法,对每一种可能分别进行测试,看哪一组符合条件。 解: #include #include /在输出时要用到setw控制符 using namespace std; enum color red,yellow,blue,white,black; /声
30、明枚举类型color int main( ) color pri; /定义color类型的变量pri int i,j,k,n=0,loop; /n是累计不同颜色的组合数 for ( i=red ; i=black ; i+) /当i为某一颜色时 for ( j=red ; j=black ; j+) /当j为某一颜色时 if (i!=j) /若前两个球的颜色不同 for ( k=red ; k=black ; k+) / 只有前两个球的颜色不同,才需要检查第3个球的颜色 if (k!=i) & (k!=j) / 3个球的颜色都不同 n=n+1; / 使累计值n加1 coutsetw(3)n;
31、/ 输出当前的n值,字段宽度为3 for (loop=1;loop=3;loop+) / 先后对3个球作处理 switch (loop) /loop的值先后为1,2,3 case 1: pri=color(i);break; /color(i)强制类型转换,使pri的值为i对应的枚举值 case 2: pri=color(j);break; /使pri的值为j 对应的枚举值 case 3: pri=color(k);break; /使pri的值为k 对应的枚举值 default: break; switch (pri) /判断pri的值,输出相应的颜色 case red: coutsetw(8
32、)red; break; case yellow: coutsetw(8)yellow; break; case blue: coutsetw(8)blue; break; case white: coutsetw(8)white; break; case black: coutsetw(8)black; break; default : break; coutendl; couttotal:nendl; /输出符合条件的组合的个数 return 0; 补充题:定义一个结构体变量,编写程序,要求输入年、月、日,程序能计算并输出该日在本年中是第几天。注意闰年问题。 :正常年份每个月中的天数是已知
33、的,只要给出日期,算出该日在本年中是第几天是不困难的。如果是黁年且月份在3月或3月以后是,应再增加一天。闰年的规则是:年份能被4整除但不能被100整除;或者年份能被400整除,如2000,2004,2008是闰年,2100,XX年不是闰年 解: 程序一: switch语句 #include using namespace std; struct int year; int month; int day; date; int main int days; coutdate.yeardate.monthdate.day; switch (date.month) case 1: days=date.
34、day; break; case 2: days=date.day+31; break; case 3: days=date.day+59; break; case 4: days=date.day+90; break; case 5: days=date.day+120; break; case 6: days=date.day+151; break; case 7: days=date.day+181; break; case 8: days=date.day+212; break; case 9: days=date.day+243; break; case 10: days=date.
35、day+273; break; case 11: days=date.day+304; break; case 12: days=date.day+334; break; if (date.year %4= 0 & date.year % 100 != 0 |date.year % 400 = 0) & date.month =3) days+=1; coutdate.month/date.day is the daysth day in date.year.endl; return 0; 程序二:一维数组结合for循环 #include using namespace std; struct int year; int month; int day; date; int main int i,days; int day_tab13=0,31,28,31,30,31,30,31,31,30,31,30,31; coutdate.yeardate.monthdate.day; days=0; for (i=1;i=3) days+=1; coutdate.month/date.day is the daysth day in date.year.endl; return 0;