C++ primer (中文版-第五版 )练习题答案
C++ primer (中文版-第五版 ) 练习题答案
- 第1章 开始
- 1.4控制流
- 1.4.1节 while语句练习
- 1.4.2节 for语句练习
- 1.4.3节 读取数量不定的输入数据练习
- 1.4.4 if 语句练习
- 第2章 变量和基本类型
- 2.1 基本内置类型
- 2.1.1 算术类型 练习
- 2.1.2 类型转换 练习
- 2.1.3 字面值常量 练习
- 2.2 变量
- 2.2.1 变量定义 练习
- 2.2.2 变量声明和定义的关系 练习
- 2.2.3 标识符
- 2.2.4 名字的作用域
- 2.3 符合类型
- 2.3.1 引用 练习
- 2.3.2 指针 练习
- 2.2.3 理解符合变量的声明 练习
- 3 字符串、向量和数组
- 3.2 标准库类型string
- 3.2.2 string对象上的操作
第1章 开始
1.4控制流
1.4.1节 while语句练习
练习1.9:
编写程序利用while循环将50到100的整数相加。
#include <iostream>
using namespace std;
void main(){int sum=0, val=50;while(val<=100){sum +=val;val++;}cout<< "50到100的整数相加为"<<sum<<endl;
}
练习1.10:
除了++运算符将运算对象的值增加1之外,还有一个递减的运算符(- -)实现将减少1。编写程序,使用递减运算符在循环过程中按照递减的顺序打印出10到0之间的整数。
#include <iostream>
using namespace std;
void main(){cout<< "递减打印10到0之间的整数:";int i =10;while(i>=0){cout <<i<<" ";i--;}
}
练习1.11:
编写程序,提示用户输入两个整数,打印出这两个整数所指定的范围的所有整数。
#include <iostream>
using namespace std;
void main(){cout<< "请依次输入v1和v2的值:";cin>>v1>>v2;cout<< "v1和v2之间的所有整数:";int n=v1;while(n<=v2){cout<<n<<" ";n++;}
1.4.2节 for语句练习
练习1.12:
下面for循环完成了什么功能?sum的终值是多少?
#include <iostream>
using namespace std;
void main(){int sum = 0;for(int i = -100; i <= 100;++i)sum += i;cout <<"This sum is:"<< sum << endl;
}
答:for循环完成了从-100到100之间的整数相加;sum的终值为0。
练习1.13:
使用for循环重做1.4.1节的所有练习
1.9 将50到100整数相加。
#include <iostream>
using namespace std;
void main()
{int sum = 0;for(int i = 50; i <= 100;i++)sum += i;cout <<"50到100之间的整数相加:"<< sum << endl;
}
1.10 编写程序,使用递减运算符在循环过程中按照递减的顺序打印出10到0之间的整数。
#include <iostream>
using namespace std;
void main(){cout <<"递减打印出10到0之间的整数:";for(int n = 10;n >= 0;n--)cout <<n<< " " ;cout << endl;
}
1.11 编写程序,提示用户输入两个整数,打印出这两个整数所指定的范围的所有整数。
#include <iostream>
using namespace std;
void main(){int v1, v2;cout << "请输入v1和v2的值:";cin >> v1 >> v2;cout <<"v1和v2之间的整数为:";for(int j = v1;j<=v2;j++){cout << j << " ";}
}
练习 1.15:
对比for循环和while循环,两种形式的优缺点格式什么?
while循环:
while循环,可以对一些不确定循环次数的循环进行较好的控制。
for循环:
for循环书写简练,对内存较节省(局部变量i再循环结束后自动清除)。
1.4.3节 读取数量不定的输入数据练习
练习1.16:
编写程序,从cin读取一组数,输出其和。
#include <iostream>
using namespace std;
int main(){int sum = 0, num = 0;while(cin >> num){sum += num;}cout << "Sum is " << sum <<endl;return 0;
}
1.4.4 if 语句练习
练习1.17:
如果输入的所有值都是相等的,本节的程序会输出什么?如果没有重复值,输出又会是怎样的?
答:输入所有值都是相等的,则程序会统计出重复的次数;若输入的值没有重复,那么每个值的重复次数都为 1 。
练习1.18:
编译并运行本节的程序,给它输入全都相等的值。再次运行程序,输入没有重复的值。
答:
输入全都相等的值:
输入没有相等的值:
练习1.19:
修改你为1.4.1节练习1.10(第11页)所编写的程序(打印一个范围内的数),使其能处理用户输入的第一个数比第二个数小的情况。
#include <iostream>
using namespace std;
int main(){int v1, v2;cout<< "请依次输入v1和v2的值:";cin>>v1>>v2;if (v1<=v2){cout<< "v1和v2之间的所有整数:";int n=v1;while(n<=v2){cout<<n<<" ";n++;}}else{cout << "您的输入有误。";}return 0;}
第2章 变量和基本类型
2.1 基本内置类型
2.1.1 算术类型 练习
练习2.1:
类型 int、 long、long long和 short 的区别是什么?无符号类型和带符号类型的区别是什么? float 和 double 的区别是什么?
答:int、 long、 long long和short尺寸不同,表示的数据范围不同。无符号只能表示0和正数,无符号还可以表示负数。float为单精度浮点数,double为双精度,一般来说,float占4字节,double占8字节。
练习2.2:
计算按揭贷款时,对于利率本金和付款分别应选择何种数据类型?说明理由。
答:利率应该用unsigned double表示,本金和付款应使用unsigned float表示。因为利率一般小数位数较多,且没有负数,本金和付款小数位数少,也没有负数。
2.1.2 类型转换 练习
练习2.3:
读写程序结果。
#include <iostream>
using namespace std;
int main(){unsigned u = 10,u2 = 42;cout << u2 - u << endl; //32cout << u - u2 << endl; //4294967264int i = 10, i2 = 42;cout << i2 - i << endl; // 32cout << i - i2 << endl; //-32cout << i - u << endl; //0cout << u - i <<endl; //0return 0;}
运行截图:
2.1.3 字面值常量 练习
练习2.5:
指出下述字面值的数据类型并且说明每一组内几种字面值的区别:
( a ) ‘a’ , L’a’, “a”, L"a"
( b ) 10, 10u, 10L, 10uL, 012, 0xC
( c ) 3.14, 3.14f, 2.14L
( d ) 10, 10u, 10., 10e-2
答:
( a ) ’ a ’ :字符字面值; L ’ a ': 宽字符型字面值;" a " : 字符串字面值; L" a ":宽字符字符串字面值。
( b ) 10:十进制; 10u:无符号整型; 10L:长整型;10uL:无符号长整型; 012:八进制; 0xC:十六进制。
( c ) 3.14: 浮点型;3.14f: 单精度浮点型字面值,类型是float; 3.14L:扩展精度浮点型字面值,类型是long double。
( d ) 10:整型; 10u:无符号整型,10.浮点型, 10e-2:双精度浮点型
练习2.6:
下面两组定义是否有区别,若有,请叙述之:
答:
int month = 9, day = 7; //mounth day均为10进制
int month = 09, day = 07; //mounth day均为8进制,且month会报错,因为09超出范围了。error: invalid digit '9' in octal constant
练习2.7:
下述字面值表示何种含义?它们各自的数据类型是什么?
( a ) “Who goes with F\145rgus?\012”
( b )3.14e1L
( c )1024f
( d ) 3.14L
答:
( a ) \145表示小写字母“e”, \012表示换行符。 输出:who goes with Fergus?
( b ) 扩展精度浮点型字面值,类型是 long double
( c ) 单精度浮点型字面值,类型事float
( d ) 表示扩展的浮点型,类型是long double
练习2.8:
请利用转义序列编写一段程序,要求先输出2M,然后转到新的一行。修改程序使其先输出2, 然后输出制表符,再输出M,然后转到新的一行。
/*
请利用转义序列编写一段程序,要求先输出2M,然后转到新的一行。
*/
#include <iostream>
using namespace std;
int main(){cout << "\62\115\12";return 0;}
/*
修改程序使其先输出2, 然后输出制表符,
再输出M,然后转到新的一行。
*/
#include <iostream>
using namespace std;
int main(){cout << "\62\t\115\12";return 0;}
2.2 变量
2.2.1 变量定义 练习
练习2.9:
解释下列定义的含义。对于非法的定义,请说明错在何处并将其改正。
( a ) std :: cin >> int inout_value;
( b ) int i = { 3,14 };
( c ) double salary = wage = 9999.99;
( d ) int i = 3.14;
答: ( a ) 错误
int inout_value;std :: cin >> inout_value;
( b ) 错误
float i = { 3,14 };
( c ) 错误
double salary , wage;salary = wage = 9999.99;
( d ) 警告,有隐式转化,i值为3。
练习2.10:
下列变量的初值分别是什么?
#include <iostream>
using namespace std;
std::string global_str; //初始化为一个空串
int global_int; // 初始化为0
int main(){int local_int; //按标准局部变量不初始化,g++编译器下可能也会初始化为空std::string local_str;return 0;}
2.2.2 变量声明和定义的关系 练习
练习2.11:
指出下面的语句是声明还是定义。
( a ) entern int ix =1024;
( b ) int iy;
( c ) extern int iz;
答:( a ) 定义
( b ) 声明并定义
( c ) 声明
2.2.3 标识符
练习2.12:
请指出下面的名字中哪些是非法的?
(1)int doube = 3.14;
(2)int _;
(3)int catch-22;
(4)int 1_or_2 = 1;
(5)double Double = 3.14;
答:(1)非法,double为关键字,不能作为变量名
(2)合法
(3)非法,变量名只能包含字母、数字、下划线
(4)非法,不能以数字开头
(5)合法
2.2.4 名字的作用域
练习2.13:
下面程序中j的值是多少?
int i = 42;
int main(){int i = 100;int j = i;
}
答: j = 100
练习2.14:
下面的程序合法吗?如果合法,它将输出什么?
int i = 100, sum = 0;
for(int i = 0; i != 10; ++i)sum +=i;cout << i << " " << sum << endl;
答:合法。 将输出 100 45
2.3 符合类型
2.3.1 引用 练习
练习 2.15:
下面哪个定义是不合法的?为什么?
( a ) int ival = 1.01; //不合法,用float初始化int,会有警告( b )int &rvall = 1.01; // 不合法,引用的初始值必须是一个对象( c )int &rvall2 = ival; //合法( d )int &rval3; // 不合法,引用必须初始化
练习2.16:
练习2.16:考查下面的所有赋值然后回答:哪些赋值是不合法的?为什么?哪些赋值是合法的?它们执行了什么样的操作?
int i = 0, &r1 = i;
double d = 0, &r2 = d;
r2 = 3.12159; //合法,但隐式转化
r2 = r1; //合法,但隐式转化
i = r2; //合法,但隐式转化
r1 = d; //合法,但隐式转化
练习 2.17:
执行下面的代码段将输出什么结果?
int i, &ri = i;i = 5; ri = 10;cout << i << " " << ri <<endl;
答:10 10
2.3.2 指针 练习
练习 2.18:
编写代码分别更改指针的值以及指针所指对象的值。
#include <iostream>
using namespace std;
int main(){int i = 3;int j = 9;int *p = &i;cout << "p = " << p <<" *p = "<< *p <<endl;cout << "i = " << i <<" j = "<< j <<endl;p = &j;cout << "更改指针的值" <<endl;cout << "p = " << p <<" *p = "<< *p <<endl;cout << "i = " << i <<" j = "<< j <<endl;cout << "更改指针所指对象的值"<<endl;*p = 39;cout << "p = " << p <<" *p = "<< *p <<endl;cout << "i = " << i <<" j = "<< j <<endl;}
练习 2.19:
说明指针和引用的主要区别。
答:
(1) 引用在定义时必须初始化,而指针可不初始化
(2)引用在其生命周期内,只能指向一个对象,而指针可以先后指向不同的对象
(3)指针本身就是一个对象,允许对指针进行赋值和拷贝。
练习 2.20:
请叙述下面这段代码的作用。
#include <iostream>
using namespace std;
int main(){int i = 42;int *p1 = &i;*p1 = *p1 * *p1;}
答:求 i 的平方的结果存在原地址
练习 2.21:
请解释下述定义。在这些定义中有非法的吗?如果有,为什么?
int i = 0;double *dp = &i; //非法,不能用int型的变量初始化doube指针int *ip = i; //非法,不能用int值初始化指针int *p = &i; //合法
练习2.22:
假设p是一个int型指针,说明下面代码的含义
if § //如果地址不为0
if (*p) //如果所指的值为真
练习2.23:
给定指针p,能否知道它指向了一个合法的对象?
答:不行,指针只是只想一个储存地址,并没有只想对象的属性所有无法判断对象是否合法。
练习2.24:
在下面这段代码中为什么p合法而1p非法?
int i = 42;
void *p = &i; //因为void指针类型可以存放任意对象的地址
long *lp = &i; //但是long指针,就只能存放long对象的地址
2.2.3 理解符合变量的声明 练习
练习 2.25:
说明下列变量的类型和值。
( a ) int *p//int指针类型,i//int型变量, &r = i//引用类型,初始化为i;
( b ) int i,//int型变量 *p = 0//int指针类型,初始值为0;
( c ) int *ip//int型指针,ip2 //int型变量;
3 字符串、向量和数组
3.2 标准库类型string
3.2.2 string对象上的操作
练习3.2:
编写一段程序从标准输入中一次读入一整行,然后修改该程序使其一次读入一个词。
一次读入一整行
string line;while(getline(cin, line))cout << s << endl;
一次读入一个词
string word;while(cin >> word){cout << word <<endl;
练习3.3:
请说明string类的输入运算符和getline函数分别是如何处理空白字符的。
答:输入运算符:会自动忽略字符串前的空白(空格、制表符、换行等),从第一个真正的字符到下一个空白,反复读取,逐个输出单词。
getline:getline函数会保存字符串中的所有的空白,读入数据直到遇见换行符。
练习3.4:
编写一段程序读入两个字符串,比较其是否相等并输出结果。如果不相等,输出较大的那个字符串。改写上述程序,比较输入的两个字符串是否等长,如果不等长,输出长度较大的那个字符串。
比较是否相等
string s1, s2;cin >> s1 >> s2;if(s1 > s2){cout << s1 << endl;}else if(s1 < s2){cout << s2 << endl;}elsecout << "equal" << endl;
比较长度
string s1, s2;cin >> s1 >> s2;if(s1.length() > s2.length()){cout << s1 << endl;}else if(s1.length() < s2.length()){cout << s2 << endl;}elsecout << "equal" << endl;
练习3.5:
编写一段程序从标准输入中读入多个字符串并将它们连接在一起,输出连接成的大字符串。然后修改上述程序,用空格把输入的多个字符串分隔开来。
输出连接成的大字符串
string word;string sum;while (getline(cin, word)) {sum += word ;cout << sum << endl;}
用空格把输入的多个字符串分隔开来
string word;string sum;while (getline(cin, word)) {sum += word + " ";cout << sum << endl;}
C++ primer (中文版-第五版 )练习题答案相关推荐
- C++primer 第五版 练习题【3.32】 P104页 个人解答
[练习题3.32] 题目大致意思如下: 定义一个含有10个int的数组,令每个元素的值就是其下标值,将创建的数组拷贝给另外一个数组.利用vector重写程序,实现类似的功能: [源代码]: #incl ...
- C++Primer第五版——习题答案+详解(完整版)
C++Primer第五版--习题答案详解 新手入门必看的书.知识是一个系统化并且相互关联的体系,零散的东西每天收获如果不形成自己的体系的话,那将是毫无意义的,所以我觉得有必要将这本书先啃一遍,消化其 ...
- C++Primer第五版 习题答案 目录
C++Primer第五版 习题答案 本文当作我学习C++的一个记录,这里的习题答案并不是标准答案,仅仅是我的理解,如有错误,请大家指出,谢谢! 参考的文章会在文末列出. 使用的系统为:ubuntu 1 ...
- C++Primer第五版——习题答案详解
C++Primer第五版--习题答案详解 新手入门必看的书.知识是一个系统化并且相互关联的体系,零散的东西每天收获如果不形成自己的体系的话,那将是毫无意义的,所以我觉得有必要将这本书先啃一遍,消化其 ...
- 《C++ Primer中文版(第5版)》学习笔记与习题完整发布!
点击上方"AI有道",选择"星标"公众号 重磅干货,第一时间送达 现在 Python 越来越流行,学习人工智能也大都以学习 Python 为主.然而,C++ 仍 ...
- C++ Primer中文版(第5版)
<C++ Primer中文版(第5版) > 基本信息 作者: (美)Stanley B. Lippman(斯坦利 李普曼) Josee Lajoie(约瑟 拉乔伊) Barba ...
- C++ Primer中文版(第4版 特别版)
简单介绍:什么:哈哈.怎么向家里交代啊,你别误会?你是来找我们的吧,于是.其他人也全部靠在了我的身边.头剪得就 本文写于:2012年10月03日;更不是弓箭手 计划:什么:哈哈.怎么向家里交代http ...
- C程序设计谭浩强第五版课后答案 第三章习题答案
C语言程序设计谭浩强第五版课后答案第三章 1.假如我国国民生产总值的年增长率为7%, 计算10年后我国国民生产总值与现在相比增长多少百分比.计算公式为p=(1+r)np = (1+r)^np=(1+r ...
- 【书籍分享】C++ Primer 中文第五版 PDF
https://gitcode.net/qq_29856169/writings/-/blob/mine/C++_Primer_pdf.md 书籍信息 书名:<C++ Primer 中文版(第 ...
最新文章
- UVA10652 Board Wrapping(求凸包、计算凸多边形面积)
- 多数元素—leetcode169
- C# Replace函数与JS replace函数
- Adobe illustrator 直接选择工具删除白板 - 连载 6
- 关于C++异常处理的一些思考
- 十一、Shell脚本流程控制语句
- ActiveMQ消息队列
- sql 获取当前时间
- cnchar.js 获取汉字的拼音和笔画数的js库 cnchar2.0 支持繁体字、笔画顺序、多音字词
- azure 云上安装部署nginx
- 网络渗透测试实验二(网络扫描与网络侦察)
- 数字图像相关(Digital Image Correlation, DIC)中的非线性优化方法IC-GN的数值解计算
- ipad怎么和mac分屏_将Mac屏幕扩展到iPad有多好用?我甚至有了入手iPad Pro的冲动...
- 别再花时间统计考勤数据了,这个报表统计神器才是你最后出路
- 基于Power BI Desktop的电子产品综合数据分析案例
- Cannot obtain license for Compiler (feature compiler) with license version = 2.2(转)
- 瑞萨单片机之data flash的使用(五)
- 网上邻居无法访问的一点启示
- 动态联编与静态联编的区别
- 精彩回顾 | 华为 HDG 成都站霸气上演 蓉城风云再起
热门文章
- 如何用PHP-Eclipse调试PHP程序
- 易语言从c盘开始搜索文件,易语言全盘查找指定文件并返回地址
- 汉字的书写效果的实现
- 计算机语言cobol,COBOL语言编译器
- 猜数字游戏——一个可以无聊到你一直玩的Game
- matlab ceiling,ceiling_excel中ceiling函数的用法?
- linux:rm运用
- 支付宝(查询对账单下载地址+文件下载+解压+遍历文件+读文件)
- 从大专生到蚂蚁金服CTO,他写下“支付宝”第一行代码:逆风的方向,更适合飞翔!...
- 顺丰货机、无人机齐飞的空中物流网