C++语⾔程序设计教程(第3版)课后编程题⽬录
习题⼀
输出菱形图案
题⽬:编写⼀程序输出⽤*组成的菱形图案
我的⽅法:
1.分析:直接cout输出相关图案即可
2.代码:
#include<iostream>
using namespace std;
int main()
{
cout << "              *" << endl;
cout << "            *****" << endl;
cout << "        **************" << endl;
cout << "    **********************" << endl;
cout << "******************************" << endl;
cout << "    **********************" << endl;
cout << "        **************" << endl;
cout << "            *****" << endl;
cout << "              *" << endl;
}
以⼋进制、⼗六进制的形式输出⼀个数
题⽬:输⼊任意⼗进制数,将其以⼋进制、⼗六进制的形式输出
教材答案:
1.分析:
常⽤操纵符
操纵符作⽤说明
oct 数据以⼋进制的形式输
作⽤范围为后续输出的整数对
象,⼩数不起作⽤
dec 数据以⼗进制的形式输
出(默认)
同上
hex 数据以⼗六进制的形式
输出
同上
endl换⾏并刷新输出流
setw(n)设置输出宽度仅对后⼀个对象起作⽤
setprecision(n)设置输出⼩数位数(默
认为6)作⽤范围为后续对象
在使⽤操纵符时,要使⽤iomanip头⽂件2.涉及知识点:常⽤操纵符的使⽤
3.代码:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int number1;
cout << "输⼊的⼗进制数为:" << endl;
cin >> number1;
cout <<"⼋进制:"<< oct << number1 << endl;
cout << "⼗六进制:"<<hex << number1 << endl;
}
按精度从⼩到⼤输出结果
题⽬:输⼊两个数,将它们相除,观察为⽆限循环⼩数时按精度从⼩到⼤输出的结果
教材答案:
1.分析:输⼊的两个数,我⼀开始输⼊为两个整型的数字,发现⽆论精度设定为多⼤答案都⼀样,输⼊的是整型,输出的⾃然也是整型,因此要将整型的两个数字改为双精度型double
2.涉及知识点:数字类型的选择、常⽤操纵符的使⽤
3.代码:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
double i, j;
cin >> i >> j;
cout << setprecision(1);
cout << "precision(1):" << i << "/" << j << "=" << i / j << endl;
cout << setprecision(2);
cout << "precision(2):" << i << "/" << j << "=" << i / j << endl;
cout << setprecision(3);
cout << "precision(3):" << i << "/" << j << "=" << i / j << endl;
cout << setprecision(4);
cout << "precision(4):" << i << "/" << j << "=" << i / j << endl;
cout << setprecision(5);
cout << "precision(5):" << i << "/" << j << "=" << i / j << endl;
cout << setprecision(6);
cout << "precision(6):" << i << "/" << j << "=" << i / j << endl;
cout << setprecision(7);
cout << "precision(7):" << i << "/" << j << "=" << i / j << endl;
cout << setprecision(8);
cout << "precision(8):" << i << "/" << j << "=" << i / j << endl;
cout << setprecision(9);
cout << "precision(9):" << i << "/" << j << "=" << i / j << endl;
cout << setprecision(10);
cout << "precision(10):" << i << "/" << j << "=" << i / j << endl;
cout << setprecision(11);
cout << "precision(11):" << i << "/" << j << "=" << i / j << endl;
cout << setprecision(12);
cout << "precision(12):" << i << "/" << j << "=" << i / j << endl;
cout << setprecision(13);
cout << "precision(13):" << i << "/" << j << "=" << i / j << endl;
}
习题⼆
精度运⽤
题⽬:摄⽒温度与华⽒温度的转换公式为:
c=5/9*(f-32)
其中c为摄⽒温度,f为华⽒温度,写出两者之间互相转换的表达式,将表达式放⼊程序中,以整数形式输⼊⼀种温度值,以整数形式输出转
换后的温度值
我的⽅法&教材答案:
1.分析:直接套⽤公式进⾏转换表达即可
2.涉及知识点:(1)当/运算符⽤于两个整数相除时,如果商含有⼩数部分,将被截掉。若不想其被截掉,则⾄少保证除数或被除数中有⼀个
是浮点数或双精度数
(2)\n——换⾏        \t——空格
转义序列含义
\n换⾏
\t空格
\v竖向跳格
\b退格,相当于backspace键
\r回车(return)
\f⾛纸(feed)换页
\a鸣铃(alert)
\\反斜杠符
\'单引号
\''双引号
\ooo ooo为3位⼋进制数
\xhh hh为两位⼗六进制数
3.代码:
#include<iostream>
using namespace std;
int main()
{
int f, c=0;
cin >> f;
c = (5 / 9.0)*(f - 32);  //当/运算符⽤于两个整数相除时,如果商含有⼩数部分,将被截掉。若不想其被截掉,则⾄少保证除数或被除数中有⼀个是浮点数或双精度数 cout << "摄⽒度为:"<<f<<"\n"<<"转化后的华摄⽒度为:"<<c << endl;
return 0;
}
⽤三⽬运算符⽐较出最⼤者
题⽬:⽤三⽬运算符求出x、y、z的最⼤者
我的⽅法:
1.涉及知识点:三⽬运算符是条件运算符,实现简单的选择功能
2.代码:
#include<iostream>
using namespace std;
int main()
{
int x, y, z;
cin >> x >> y >> z;
int max = (((x > y) ? x : y) > z) ? ((x > y) ? x : y) : z;
cout << max << endl;
}
变量值的交换
题⽬:分别写出引进和不引进第3个变量交换两个变量值的表达式(语句)
我的⽅法:
1.分析:引进第三个变量即常规的tmp交换,⽽不引进第三个变量我⽤了vector容器
2.代码:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
//引⼊第三个变量
int a = 3, b = 4;
cout << "交换之前的a为:" << a << "交换之前的b为:" << b << endl; int tmp = a;
a = b;namespace是干嘛的
b = tmp;
cout << "交换之后的a为:" << a << "交换之后的b为:" << b << endl;
//不引⼊第三个变量
vector<int>v1;
v1.push_back(9);
vector<int>v2;
v2.push_back(6);
cout << "交换之前的c为:";
for (vector<int>::iterator it = v1.begin(); it != v1.end(); it++)
{
cout << *it << endl;
}
cout << "交换之前的d为:";
for (vector<int>::iterator it = v2.begin(); it != v2.end(); it++)
{
cout << *it << endl;
}
swap(v1, v2);
cout << "交换之后的c为:" ;
for (vector<int>::iterator it = v1.begin(); it != v1.end(); it++)
{
cout << *it << endl;
}
cout << "交换之后的d为:";
for (vector<int>::iterator it = v2.begin(); it != v2.end(); it++)
{
cout << *it << endl;
}
return 0;
}
教材答案:
1.分析:跟我的不⼀样的是不引进第三个变量的那⼀条
2.代码: