C++primer第一章习题
2017-11-01 15:42
246 查看
练习1.1:查阅你使用的编译器的文档,确定它所使用的文件名约定。编译并运行第2页的main程序。
练习1.2:改写程序,让它返回-1.返回值-1通常被当做程序错误的标识。重新编译运行你的程序,观察你的系统如何处理main返回的错误标识。
练习1.3:编写程序,在标准输出上打印Hello, World。
#include<iostream>
int main()
{
std::cout << "Hello, World" << std::endl;
练习1.4: 我们的程序使用加法运算符+来将两个数相加。编写程序使用乘法运算符*,来打印两个数的乘积。
#include<iostream>
int main()
{
int n1,n2;
std::cout << "请输入两个数以完成相加和相乘:" << std::endl;
std::cin >> n1 >> n2;
std::cout << "The result of " << n1 << " + " << n2
<< " is " << n1 + n2 << std::endl;
std::cout << n1 << " * " << n2 << " is " << n1 * n2 << std::endl;
return 0;
}
练习1.5 同1.4。
练习1.6:解释下列程序片段是否合法?如何修改?
不合法。在第二、三行的第一个<<输出运算符前面加上“std::cout” 即可。
练习1.7:编译一个包含不正确的嵌套注释的程序,观察编译器返回的错误信息。
给出非法字符的错误信息。
练习1.8:指出下列哪些输出语句是非法的。
std::cout << "/*"; //合法
std::cout << "*/"; //合法
std::cout << /* "*/" */; //非法
std::cout << /* "*/" /* "/*" */; //合法
练习1.9: 编写程序,使用while循环将50到100的整数相加。
#include<iostream>
int main()
{
int i = 50,sum = 0;
while( i != 101 )
{
sum += i;
++i;
}
std::cout << "The sum is " << sum << std::endl;
return 0;
}
输出的结果为:The sum is 3825。
练习1.10:除了++运算符将运算对象的值增加1之外,还有一个递减运算符实现将值减少1。编写程序,使用递减运算符在循环中按递减顺序打印出10到0之间的整数。
#include<iostream>
int main()
{
int i = 10;
while( i >= 0 )
{
std::cout << i << " ";
--i;
}
std::cout << std::endl;
return 0;
}
练习1.11:编写程序,提示用户输入两个整数,打印出这两个整数所指定范围内的所有整数。
#include<iostream>
int main()
{
int start,last;
/*打印不包含范围的last*/
std::cout << "请输入两个整数,程序将打印这两个整数之间的所有数:" << std::endl;
std::cin >> start >> last;
if( start > last )
{
int tmp = start;
start = last;
last = tmp;
}
while( start != last + 1 )
{
std::cout << start << " ";
++start;
}
return 0;
}
练习1.12:下面的for循环完成了什么功能?sum的终值是多少?
int sum = 0;
for( int i = -100; i < = 100; ++i )
sum += i;
该循环将-100(含)到100(含)之间的所有数相加,sum的终值是0;
练习1.13 :使用for循环重做1.4.1节中所有的练习。
这里就省略了。。。
练习1.14:对比for循环和while循环,两种形式的优缺点是什么?
答:在循环次数已知的情况下,for循环形式更简洁。
而循环次数无法预知时,用while循环实现更适合。
练习1.15:编写程序,包含第14页的“再探编译”中讨论的常见错误。熟悉编译器生成的错误信息。
略。
练习1.16:编写程序,从cin读取一组数,输出其和。
#include<iostream>
int main()
{
int val;
int sum = 0;
std::cout << "请输入一组数,以求它们的和(输入非数字结束):" << std::endl;
while( std::cin >> val )
{
sum += val;
}
std::cout << "The sum is " << sum << std::endl;
return 0;
}
练习1.17:如果输入的所有值都是相等的,本节的程序会输出什么?如果没有重复值,输出又会是怎样的?
程序我又自己打了一次:
#include<iostream>
/*统计输入流中每个值连续出现出现了多少次*/
int main()
{
//curVal是正在统计的数,我们将要读入的数存入val
int curVal = 0, val = 0;
if( std::cin >> curVal ) //读取第一个数,确保有数处理
{
int cnt = 1;
while( std::cin >> val ) //直到读到一个非法输入
{
if( val == curVal )
++cnt;
else
{
std::cout << curVal << " occurs "
<< cnt << " times " << std::endl;
curVal = val;
cnt = 1;
}
}
std::cout << curVal << " occurs "
<< cnt << " times " << std::endl;
}
return 0;
}
所有值相等和没有重复值程序都正常运行,都能统计每个值出现的次数。
练习1.18: 同上。
练习1.19:同练习1.10 。
练习1.20 - 1.25 :
省略。
练习1.2:改写程序,让它返回-1.返回值-1通常被当做程序错误的标识。重新编译运行你的程序,观察你的系统如何处理main返回的错误标识。
练习1.3:编写程序,在标准输出上打印Hello, World。
#include<iostream>
int main()
{
std::cout << "Hello, World" << std::endl;
return 0; }
练习1.4: 我们的程序使用加法运算符+来将两个数相加。编写程序使用乘法运算符*,来打印两个数的乘积。
#include<iostream>
int main()
{
int n1,n2;
std::cout << "请输入两个数以完成相加和相乘:" << std::endl;
std::cin >> n1 >> n2;
std::cout << "The result of " << n1 << " + " << n2
<< " is " << n1 + n2 << std::endl;
std::cout << n1 << " * " << n2 << " is " << n1 * n2 << std::endl;
return 0;
}
练习1.5 同1.4。
练习1.6:解释下列程序片段是否合法?如何修改?
不合法。在第二、三行的第一个<<输出运算符前面加上“std::cout” 即可。
练习1.7:编译一个包含不正确的嵌套注释的程序,观察编译器返回的错误信息。
给出非法字符的错误信息。
练习1.8:指出下列哪些输出语句是非法的。
std::cout << "/*"; //合法
std::cout << "*/"; //合法
std::cout << /* "*/" */; //非法
std::cout << /* "*/" /* "/*" */; //合法
练习1.9: 编写程序,使用while循环将50到100的整数相加。
#include<iostream>
int main()
{
int i = 50,sum = 0;
while( i != 101 )
{
sum += i;
++i;
}
std::cout << "The sum is " << sum << std::endl;
return 0;
}
输出的结果为:The sum is 3825。
练习1.10:除了++运算符将运算对象的值增加1之外,还有一个递减运算符实现将值减少1。编写程序,使用递减运算符在循环中按递减顺序打印出10到0之间的整数。
#include<iostream>
int main()
{
int i = 10;
while( i >= 0 )
{
std::cout << i << " ";
--i;
}
std::cout << std::endl;
return 0;
}
练习1.11:编写程序,提示用户输入两个整数,打印出这两个整数所指定范围内的所有整数。
#include<iostream>
int main()
{
int start,last;
/*打印不包含范围的last*/
std::cout << "请输入两个整数,程序将打印这两个整数之间的所有数:" << std::endl;
std::cin >> start >> last;
if( start > last )
{
int tmp = start;
start = last;
last = tmp;
}
while( start != last + 1 )
{
std::cout << start << " ";
++start;
}
return 0;
}
练习1.12:下面的for循环完成了什么功能?sum的终值是多少?
int sum = 0;
for( int i = -100; i < = 100; ++i )
sum += i;
该循环将-100(含)到100(含)之间的所有数相加,sum的终值是0;
练习1.13 :使用for循环重做1.4.1节中所有的练习。
这里就省略了。。。
练习1.14:对比for循环和while循环,两种形式的优缺点是什么?
答:在循环次数已知的情况下,for循环形式更简洁。
而循环次数无法预知时,用while循环实现更适合。
练习1.15:编写程序,包含第14页的“再探编译”中讨论的常见错误。熟悉编译器生成的错误信息。
略。
练习1.16:编写程序,从cin读取一组数,输出其和。
#include<iostream>
int main()
{
int val;
int sum = 0;
std::cout << "请输入一组数,以求它们的和(输入非数字结束):" << std::endl;
while( std::cin >> val )
{
sum += val;
}
std::cout << "The sum is " << sum << std::endl;
return 0;
}
练习1.17:如果输入的所有值都是相等的,本节的程序会输出什么?如果没有重复值,输出又会是怎样的?
程序我又自己打了一次:
#include<iostream>
/*统计输入流中每个值连续出现出现了多少次*/
int main()
{
//curVal是正在统计的数,我们将要读入的数存入val
int curVal = 0, val = 0;
if( std::cin >> curVal ) //读取第一个数,确保有数处理
{
int cnt = 1;
while( std::cin >> val ) //直到读到一个非法输入
{
if( val == curVal )
++cnt;
else
{
std::cout << curVal << " occurs "
<< cnt << " times " << std::endl;
curVal = val;
cnt = 1;
}
}
std::cout << curVal << " occurs "
<< cnt << " times " << std::endl;
}
return 0;
}
所有值相等和没有重复值程序都正常运行,都能统计每个值出现的次数。
练习1.18: 同上。
练习1.19:同练习1.10 。
练习1.20 - 1.25 :
省略。
相关文章推荐
- C++Primer第五版 第一章习题答案(部分)
- C++primer[习题][第一章][1-10]
- C++primer[习题][第一章][11-20]
- 第一章习题汇总
- 【编程之法】第一章习题 7.第一个只出现一次的字符
- C++Primer第五版 第十八章习题答案(21~30)
- c++primer 习题9.43
- C++Primer 习题9.39
- UNIX环境高级编程习题——第一章
- 第一章 习题
- c++primer 课后习题个人解答 part1 4.3 C-Style Character Strings
- C++primer习题6.16
- C++Primer 学习笔记 第一章 (快速入门)
- C++Primer _vector _习题3.13
- C++Primer第五版 第六章习题答案(41~50)
- c++primer第十章习题(2)
- 《c++primer(第四版)》习题8.7
- C++Primer习题6.12
- C++primer第14章习题解答
- C++primer[习题][第三章][11-20]