一、复习题
1. 为什么C++有多种整形?
答:C++语言中包含多种整形,主要有short、int、long和long long这四种,每一种还分别包含有符号类型和无符号类型(unsigned)。它们之间的主要区别在于存储使用的位数不同,位数不同所能表示的范围也就不同,并且有符号类型既可以表示正数又可以表示负数,而无符号类型只能表示正数。这样用户便可以在程序设计过程中根据数据运算所需选择适当类型的整形数据。(其实就好比咱们买东西一样,买个几块钱的东西用十块钱就行了,用100干啥)
2. 声明与描述相符的变量
答:
a. short a = 80; 等价于 short int a = 80;
b. unsigned b = 42110; 等价于 unsigned int b = 42110;
c. 由于需要存储的值超过30亿,超出32位存储范围,使用long long 类型存储
long long c = 3000000000; 等价于 long long int c = 3000000000;
省略int和加上int效果一样,当然int类型不能省略哈
3. C++提供了什么措施来防止超出整形范围?
答:C++语言中并没有自动防止整形类型数据超出范围的功能,需要程序员自己预先估计数据的范围然后选择合适的整形类型。而且C++并没有明确规定每一种整形类型的宽度,具体数值由开发平台和编译器决定,可以使用头文件climits查看。
4. 33L与33有什么区别
答:首先C++中整形字面值通常默认为int,除非超出了int类型的最大值。用户也可以自己在整形常量后面添加后缀来指定具体的整形类型。L后缀代表33L为long类型,其宽度至少和int一样长,而33是默认的int类型,其宽度至少和short一样长。
5. 下面两条 C++语句是否等价?
char grade = 65;
char grade = ‘A’;
答:两条语句都声明了字符类型变量grade,第一条语句将其初始化为65所对应的字符,而第二条语句将其初始化为字符’A’。在ASCII码平台下,这两条语句是等价的,ASCII码值65对应字符’A’,在不基于ASCII码的平台下两条语句将视具体情况而定。在实现上两条语句也略有差异,第一条语句中65为int类型的常量,初始化时会自动类型转换为char类型,然后将其存储到grade中。而第二条语句直接将变量grade初始化为字符类型的数据敞亮’A’。
6. 如何使用C++来找出编码88表示的字符?至少两种方法
答:
1)char类型也是整形,直接赋值输出
char ch = 88;
cout << ch << endl;
2)强制类型转换(C++风格)
cout << char(88) << endl;
3) 强制类型转换(C风格)
cout << (char)88 << endl;
7. 将long值赋给float变量会导致舍入误差,将long类型赋给double变量呢?将longlong类型赋值给double变量呢?
答:舍入误差主要是由整形数据的有效位数超过了浮点型数据所能表示的范围所引起的。long类型数据的最大值为20亿,即10位数,而一般float类型只能表示6位有效数字,因此转换时可能会产生舍入误差。而double类型一般可以是表示15位有效数字,long转换为double时不会产生舍入误差。而long long类型最大可以包含19位有效数字,转换为double时可能会产生舍入误差。
8. 下列C++表达式的结果分别为多少?
a. 74
b. 63/4 = 18/4=4 首先这边3对应两个运算符和/,两个运算符优先级相同,看结合性,结合性为从左到右,且除运算符/两侧均为整数时进行整数除法,只保留整数部分。
c. 0 理由同上
d. 4.5 表达式中出点double类型,其余两个int类型均自动类型转换为double,当除运算符/两侧有一侧为浮点数,则进行浮点数除法
e. 3 运算符%取左侧数除以右侧数的余数,且两侧只能为整形
9. 假设x1和x2是两个double变量,要将他们作为整数相加,再将结果赋给一个整型变量。请编写一条C++语句完成这项任务。如果将他们作为double值相加并转换为int呢?
答:
1)先强制类型转换再相加
int sum = int(x1) + int(x2);
2)先相加再强制类型转换
int sum = int(x1 + x2);
10. 下面每条语句声明的变量分别是什么类型?
1)auto cars = 15; 15为int类型常量,则cars为int类型
2)auto iou = 150.37f; 150.37f为float类型常量,则iou为float类型
3)auto level = ‘B’; ‘B’为char类型常量,则level为char类型
4)auto crat = U’\U0002155’; 首先在单引号表明右侧为字符常量,其次前缀U表示该常量是char32_t类型,则crat为char32_t类型
5)auto fract = 8.25f/2.5; 首先2.5为double类型,而8.25f为float类型,则8.25自动类型转换为double,则除法结果为double,所以fract为double类型。
二、编程练习
以下代码除了第一题是完整的代码以外,其余题目非必要只输出主体部分,读者需自己添加头文件和名称空间
1. 编写一个程序,要求用户使用一个整数表示自己的身高(单位为英寸),然后将身高转换为英寸和英尺。该程序使用下划线数字来指示输入位置。另外使用一个符号常量const来表示输出因子。
#include <iostream>
using namespace std;
// 定义符号常量
const int FOOT_TO_INCH = 12; // 1英尺等于12英寸
int main()
{
int height; // 存储身高
// 输入
cout << "以英寸为单位输入身高:";
cin >> height;
// 转换
int foot = height / FOOT_TO_INCH; // 存储转换后的英尺数
int inch = height % FOOT_TO_INCH; // 存储转换后的英寸数
// 输出
cout << "你的身高为 " << foot << "英尺," << inch << "英寸" << endl;
return 0;
}
2. 编写一个小程序,要求以几英尺几英寸的方式输入其身高,并以磅为单位输入其体重。报告体重指数BMI。…
// 符号常量的定义
const int FOOT_TO_INCH = 12; // 1英尺 = 12英寸
const double INCH_TO_METER = 0.0254; // 1英寸 = 0.0254米
const double KG_TO_POUND = 2.2; // 1千克 = 2.2磅
int main()
{
// 定义三个变量存储身高和体重
int height_foot, height_inch; // 英尺和英寸按整数输入
double weight_pound;
// 输入
cout << "输入身高(英寸加英尺):";
cin >> height_foot >> height_inch;
cout << "输入体重(磅):";
cin >> weight_pound;
// 转换
double height_meter = (height_foot * FOOT_TO_INCH + height_inch) * INCH_TO_METER; // 身高转换为米为单位
double weight_kg = weight_pound * KG_TO_POUND; // 体重转换为千克为单位
// 计算
double BMI = weight_kg / (height_meter * height_meter);
// 输出
cout << "你的BMI为:" << BMI << endl;
return 0;
}
3. 编写一个程序,要求用户以度、分、秒的方式输入一个纬度,然后以度为单位显示该纬度。…
// 符号常量的定义
const int DEGREE_TO_MINUTE = 60; // 1度 = 60 分
const int MINUTE_TO_SECOND = 60; // 1分 = 60 秒
int main()
{
// 定义三个变量存储度、分、秒
int degree, minute, second;
// 输入
cout << "Enter a latitude in degrees, minutes, and seconds:" << endl;
cout << "First, enter the degree:";
cin >> degree;
cout << "Next, enter the minutes of arc:";
cin >> minute;
cout << "Finally, enter the seconds of arc:";
cin >> second;
// 转换为度的形式
double degree_style = degree + double(minute) / DEGREE_TO_MINUTE
+ double(second) / (DEGREE_TO_MINUTE * MINUTE_TO_SECOND);
// 按格式输出
cout << degree << " degrees, " << minute << " minutes, "
<< second << " seconds = " << degree_style << " degrees"
<< endl;
return 0;
}
4.编写一个程序要求用户以整数输入秒数(使用long或long long变量存储),然后以天、小时、分钟和秒显示这段时间。…
// 符号常量的定义
const int DAY_TO_HOUR = 24; // 一天24小时
const int HOUR_TO_MINUTE = 60;
const int MINUTE_TO_SECOND = 60;
int main()
{
// 选择合适的类型定义变量
long long seconds;
int days, hours, minutes;
// 输入
cout << "Enter the number of seconds:";
cin >> seconds;
// 转换
cout << seconds << " seconds = "; // 由于后面要改变seconds的值,先把它这部分输出
days = seconds / (DAY_TO_HOUR * HOUR_TO_MINUTE * MINUTE_TO_SECOND);
seconds = seconds % (DAY_TO_HOUR * HOUR_TO_MINUTE * MINUTE_TO_SECOND); // 计算完天数后要减掉
hours = seconds / (HOUR_TO_MINUTE * MINUTE_TO_SECOND);
seconds = seconds % (HOUR_TO_MINUTE * MINUTE_TO_SECOND);
minutes = seconds / MINUTE_TO_SECOND;
seconds = seconds % MINUTE_TO_SECOND; // 把天数、小时数、分钟数减完就剩秒了
// 按格式输出
cout << days << " days, " << hours << " hours, "
<< minutes << " minutes, " << seconds << " seconds."
<< endl;
return 0;
}
5. 编写一个程序,要求用户输入全球当前人口和美国当前人口(或其他国家的人口)。将这些信息存储在long long变量中,按照下面格式输出。…
int main()
{
// 选择合适的类型存储变量
long long global_amount, american_amount;
// 输入
cout << "Enter the world's population: ";
cin >> global_amount;
cout << "Enter the population of US: ";
cin >> american_amount;
// 计算人口比例
double population_percent = double(american_amount) / double(global_amount) * 100; // 百分比显示,先转换为浮点数,再乘以100
// 按格式输出
cout << "The population of the US is " << population_percent
<< "% of the world population." << endl;
return 0;
}
6. 编写一个程序,要求用户输入驱车里程(单位是英里)和汽油使用量(单位是加仑),然后指出汽车油耗量为1加仑的里程,即油耗。…
int main()
{
// 选择合适的类型存储变量
double distance_mile, fuel_gallon;
// 输入
cout << "请输入驱车里程数(英里):";
cin >> distance_mile;
cout << "请输入耗油量(加仑):";
cin >> fuel_gallon;
// 计算油耗量
double fuel_consume = distance_mile / fuel_gallon;
// 输出
cout << "油耗为:" << fuel_consume
<< "英里每加仑" << endl;
// 欧洲风格
double distance_km, fuel_liter;
// 输入
cout << "请输入驱车里程(千米):";
cin >> distance_km;
cout << "请输入耗油量:";
cin >> fuel_liter;
// 计算
fuel_consume = fuel_liter / distance_km * 100; // 每100km的耗油量
// 输出
cout << "油耗为:" << fuel_consume
<< "升每100km" << endl;
return 0;
}
7. 编写一个程序,要求用户按照欧洲风格输入汽车油耗(每100km的耗油量,单为是升),然后将其转换为美式风格的耗油量(每加仑多少英里)。…
// 符号常量的定义
const double GALLON_TO_LITER = 3.785; // 1加仑 = 3.785升
const double HKM_TO_MILE = 62.14; // 100千米 = 62.14英里
int main()
{
// 以欧式风格输入输入汽车油耗
double fuel_comsume;
cout << "请输入油耗(欧式风格):";
cin >> fuel_comsume;
// 转换为美式风格
double fuel_gallon = fuel_comsume / GALLON_TO_LITER; // 把100km的耗油量转换为加仑
double distance_mile = HKM_TO_MILE; // 100km转换为英里
fuel_comsume = distance_mile / fuel_gallon; // 计算美式油耗
// 以美式风格输出油耗
cout << "油耗为(美式风格):" << fuel_comsume
<< "英里每加仑" << endl;
return 0;
}
作者并未直接按照搬答案,其中也有我的个人思路。本人的水平有限,如果有错,请大家指出。我看到了一定会及时更正,感谢!!!