C++语言程序设计教程(第3版)课后编程题

目录

习题一

输出菱形图案

 以八进制、十六进制的形式输出一个数

 按精度从小到大输出结果

习题二

精度运用

 用三目运算符比较出最大者

变量值的交换 

 优化等级分判断

优化百钱买百鸡 

 判断位数并逆向输出一个整数

输入一个整数判断是否回文数

正向、逆向输出26个英文字母 

判断闰年及月份天数

根据重量和邮寄距离计算邮资

素数的判断

递归求x的y次幂 

习题三

冒泡排序

反向输出字符串

删除字符串的某个字符

不用strcpy函数复制字符数组

不用strcat连接两个字符串

判断是否为回文数

求两个矩阵的乘积

打印杨辉三角

习题五

求三角形的面积和周长

求两点之间的距离

设计一个包含学生基本信息的学生类


习题一

输出菱形图案

题目:编写一程序输出用*组成的菱形图案

我的方法:

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;
	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.代码:

#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;
	b = tmp;
	cout << "交换之后的a
  • 1
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值