170、编写并运行一个 C++ 程序,该程序一次接收一个华氏温度,共接收六个。在请求下一个值之前,将输入的每个值转换为其对应的摄氏温度。程序中使用 for 循环。所需的转换公式为:摄氏度 = (5.0/9.0) × (华氏度 – 32)。
以下是实现该功能的 C++ 代码:
#include <iostream>
using namespace std;
int main() {
double fahrenheit, celsius;
for (int i = 0; i < 6; ++i) {
cout << "请输入第 " << i + 1 << " 个华氏温度: ";
cin >> fahrenheit;
celsius = (5.0 / 9.0) * (fahrenheit - 32);
cout << "对应的摄氏温度是: " << celsius << endl;
}
return 0;
}
这段代码使用 for 循环接收六个华氏温度,并将每个温度转换为摄氏温度后输出。
171、编写并运行一个 C++ 程序,该程序一次接收一个加仑值,共接收 10 个加仑值,并在请求下一个值之前将每个输入的值转换为升。在程序中使用 for 循环。已知 1 加仑 = 3.785 升。
以下是实现该功能的 C++ 程序:
#include <iostream>
int main() {
double gallons, liters;
for (int i = 0; i < 10; i++) {
std::cout << "请输入第 " << i + 1 << " 个加仑值: ";
std::cin >> gallons;
liters = gallons * 3.785;
std::cout << gallons << " 加仑等于 " << liters << " 升。
";
}
return 0;
}
这个程序使用
for
循环 10 次,每次从用户输入中获取一个加仑值,将其转换为升并输出结果。
172、a. 编写一个 C++ 程序,当程序运行时,选择并显示要输入的五个数字中的最大值。(提示:使用一个 for 循环,在循环内同时使用 cin 和 if 语句。)b. 修改为练习 6a 编写的程序,使其同时显示最大值以及该最大值在输入数字集中出现的位置。
a. 以下是实现选择并显示五个数字中最大值的 C++ 程序示例:
#include <iostream>
int main() {
int max, num;
std::cout << "请输入第一个数字: ";
std::cin >> max;
for (int i = 1; i < 5; i++) {
std::cout << "请输入第 " << i + 1 << " 个数字: ";
std::cin >> num;
if (num > max) {
max = num;
}
}
std::cout << "最大值是: " << max << std::endl;
return 0;
}
b. 以下是修改后的程序,可同时显示最大值以及其出现的位置:
#include <iostream>
int main() {
int max, num, position = 1;
std::cout << "请输入第一个数字: ";
std::cin >> max;
for (int i = 1; i < 5; i++) {
std::cout << "请输入第 " << i + 1 << " 个数字: ";
std::cin >> num;
if (num > max) {
max = num;
position = i + 1;
}
}
std::cout << "最大值是: " << max << ",出现在第 " << position << " 个位置。" << std::endl;
return 0;
}
173、编写一个 C++ 程序,选出并显示前 20 个能被 3 整除的整数。(提示:使用取模运算符 %)
以下是一个满足需求的 C++ 程序:
#include <iostream>
int main() {
int count = 0;
int num = 3;
while (count < 20) {
if (num % 3 == 0) {
std::cout << num << std::endl;
count++;
}
num++;
}
return 0;
}
该程序使用
while
循环 和取模运算符
%
找出并显示前 20 个能被 3 整除的整数。
174、一个孩子的父母承诺在她12岁生日时给她10美元,并在之后的每个生日将礼物金额翻倍,直到年度礼物超过1000美元。编写一个C++程序,确定孩子在收到最后一笔钱时的年龄以及孩子总共收到的金额。
以下是解决该问题的C++程序示例:
#include <iostream>
int main() {
int age = 12;
double gift = 10;
double total = 0;
while (gift <= 1000) {
total += gift;
gift *= 2;
age++;
}
std::cout << "孩子收到最后一笔钱时的年龄是: " << age - 1 << "岁" << std::endl;
std::cout << "孩子总共收到的金额是: " << total << "美元" << std::endl;
return 0;
}
该程序通过循环模拟每年的礼物金额翻倍,直到礼物金额超过1000美元。同时,累加每年的礼物金额得到总金额,并记录孩子的年龄。最后输出孩子收到最后一笔钱时的年龄和总共收到的金额。
175、全球人口(以十亿为单位)的模型由公式(Population = 6.0e^(0.02t) )给出,其中 t 是年份(t = 0 代表 2000 年 1 月,t = 1 代表 2001 年 1 月)。使用该公式编写一个 C++ 程序,显示 2005 年 1 月至 2010 年 1 月的年度人口表。
以下是一个满足需求的 C++ 程序示例:
#include <iostream>
#include <iomanip>
#include <cmath>
int main() {
std::cout << "Year Population (billions)" << std::endl;
for (int t = 5; t <= 10; ++t) {
int year = 2000 + t;
double population = 6.0 * std::exp(0.02 * t);
std::cout << year << " " << std::fixed << std::setprecision(6) << population << std::endl;
}
return 0;
}
该程序首先输出表头,然后使用
for
循环遍历从 2005 年到 2010 年对应的
t
值(5 到 10),计算每年的人口数量并输出。
176、一个以初始速度 v、与地面成 θ 角发射的抛射体,其 x 和 y 坐标随时间 t 的变化公式为:x = v t cos(θ),y = v t sin(θ)。编写一个 C++ 程序,显示一个以 500 英尺/秒的初始速度、22.8 度角发射的抛射体的 x 和 y 值表。(提示:记得转换为弧度制。)该表应包含从 0 到 10 秒、以 0.5 秒为增量的时间间隔对应的数值。
以下是实现该功能的 C++ 代码:
#include <iostream>
#include <cmath>
const double PI = 3.14159265358979323846;
int main() {
double v = 500; // 初始速度,单位:英尺/秒
double theta = 22.8 * PI / 180; // 将角度转换为弧度
std::cout << "时间(s) x(ft) y(ft)" << std::endl;
for (double t = 0; t <= 10; t += 0.5) {
double x = v * t * std::cos(theta);
double y = v * t * std::sin(theta);
std::cout << t << " " << x << " " << y << std::endl;
}
return 0;
}
上述代码定义了初始速度和角度,将角度转换为弧度制,然后使用
for
循环以 0.5 秒为增量遍历从 0 到 10 秒的时间间隔,计算每个时间点的 x 和 y 坐标并输出。
177、编写一个程序,生成一个1到100之间的随机数。然后程序应要求玩家猜测这个值。要对猜测次数进行计数,每次玩家猜测错误后,应告知玩家猜测的值是过高还是过低,然后要求玩家再次猜测。当玩家猜对正确数字时,程序应显示所用的猜测次数。无论玩家是否猜对,程序在第七次猜测后都应停止。
以下是实现该功能的C++代码:
#include <iostream>
#include <cstdlib>
#include <ctime>
int main() {
// 初始化随机数种子
srand(time(NULL));
// 生成1到100之间的随机数
int randomNumber = rand() % 100 + 1;
int guess;
int guessCount = 0;
std::cout << "我已经想好了一个1到100之间的数字,你可以开始猜测啦!
";
while (guessCount < 7) {
std::cout << "请输入你的猜测: ";
std::cin >> guess;
guessCount++;
if (guess == randomNumber) {
std::cout << "恭喜你,猜对啦!你一共用了 " << guessCount << " 次猜测。
";
return 0;
} else if (guess > randomNumber) {
std::cout << "猜的数字过高啦,请再试一次。
";
} else {
std::cout << "猜的数字过低啦,请再试一次。
";
}
}
std::cout << "很遗憾,你已经用完了7次猜测机会。正确的数字是 " << randomNumber << "。
";
return 0;
}
代码解释:
随机数生成
:借助
srand(time(NULL))
初始化随机数种子,再用
rand() % 100 + 1
生成1到100之间的随机数。
猜测循环
:采用
while
循环,最多允许7次猜测。每次猜测后,猜测次数加1。
猜测判断
:若猜测正确,输出所用的猜测次数并结束程序;若猜测过高或过低,给出相应提示。
结束条件
:若7次猜测都未猜对,输出正确数字并结束程序。
178、据说,只要时间足够,一只在打字机上随机按键的猴子可以打出莎士比亚的作品。你可以通过编写一个程序来随机选择并显示字母,从而模拟这一过程。统计程序打出字母的数量,直到程序打出以下两个字母的单词之一:at、is、he、we、up 或 on。当打出其中一个单词时,停止程序并显示总共打出的字母数量。(提示:通过选择 1 到 26 之间的随机整数来选择一个字母。)
以下是实现该功能的 C++ 代码示例:
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
int main() {
std::srand(std::time(0));
int letterCount = 0;
std::string targetWords[] = {"at", "is", "he", "we", "up", "on"};
bool found = false;
while (!found) {
char firstLetter = 'a' + (std::rand() % 26);
char secondLetter = 'a' + (std::rand() % 26);
std::string currentWord = std::string(1, firstLetter) + secondLetter;
letterCount += 2;
for (const auto& word : targetWords) {
if (currentWord == word) {
found = true;
break;
}
}
}
std::cout << "Total number of letters typed: " << letterCount << std::endl;
return 0;
}
这段代码首先初始化随机数种子,然后在一个循环中不断生成两个随机字母组成的单词,同时统计字母数量。当生成的单词与目标单词之一匹配时,停止循环并输出总共打出的字母数量。
179、编写一个程序来模拟掷两个骰子。如果两个骰子的点数总和是 7 或 11,你赢;否则,你输。可以对这个程序进行扩展,比如加入下注、不同赔率、不同的输赢组合、当你没钱了或者达到赌场限额时停止游戏、显示骰子点数等等。(提示:使用表达式 dots = (int)(6.0 * random number + 1) 来计算每个骰子显示的点数,其中 random number 在 0 到 1 之间。)
以下是一个满足需求的 C++ 程序示例:
#include <iostream>
#include <cstdlib>
#include <ctime>
int main() {
srand(time(NULL));
double money = 100.0; // 初始资金
double bet; // 下注金额
int houseLimit = 500; // 赌场限额
while (money > 0 && money < houseLimit) {
std::cout << "你当前有 $" << money << "。请输入下注金额: $";
std::cin >> bet;
if (bet <= 0 || bet > money) {
std::cout << "无效的下注金额,请重新输入。
";
continue;
}
int dice1 = (int)(6.0 * (double)rand() / RAND_MAX + 1);
int dice2 = (int)(6.0 * (double)rand() / RAND_MAX + 1);
int total = dice1 + dice2;
std::cout << "你掷出的骰子点数为: " << dice1 << " 和 " << dice2 << ",总和为: " << total << "。
";
if (total == 7 || total == 11) {
money += bet;
std::cout << "你赢了! 现在你有 $" << money << "。
";
} else {
money -= bet;
std::cout << "你输了。现在你有 $" << money << "。
";
}
}
if (money <= 0) {
std::cout << "你没钱了,游戏结束。
";
} else {
std::cout << "你达到了赌场限额,游戏结束。
";
}
return 0;
}
这个程序模拟了掷两个骰子的游戏,允许玩家下注。玩家初始有 100 美元,赌场限额为 500 美元。如果玩家掷出的骰子点数总和是 7 或 11,玩家赢,获得下注金额;否则玩家输,扣除下注金额。当玩家没钱了或者达到赌场限额时,游戏结束。
180、进行了四次实验,每次实验有六个测试结果。每个实验的结果如下所示。编写一个使用嵌套循环的程序,计算并显示每个实验的测试结果的平均值。第一次实验结果:23.2、31、16.9、27、25.4、28.6;第二次实验结果:34.8、45.2、27.9、36.8、33.4、39.4;第三次实验结果:19.4、16.8、10.2、20.8、18.9、13.4;第四次实验结果:36.9、39、49.2、45.1、42.7、50.6。
以下是实现该功能的 C++ 代码:
#include <iostream>
using namespace std;
int main() {
double experiments[4][6] = {
{23.2, 31, 16.9, 27, 25.4, 28.6},
{34.8, 45.2, 27.9, 36.8, 33.4, 39.4},
{19.4, 16.8, 10.2, 20.8, 18.9, 13.4},
{36.9, 39, 49.2, 45.1, 42.7, 50.6}
};
for (int i = 0; i < 4; i++) {
double total = 0;
for (int j = 0; j < 6; j++) {
total += experiments[i][j];
}
double average = total / 6;
cout << "第" << i + 1 << "次实验的平均值是: " << average << endl;
}
return 0;
}
这段代码使用了嵌套循环,外层循环遍历四次实验,内层循环遍历每次实验的六个结果,计算每个实验结果的总和并求出平均值,最后输出每个实验的平均值。
181、一家电气制造商通过在三个不同时间测量五台发电机的输出电压来对它们进行测试。编写一个使用嵌套循环的C++程序,输入每台发电机的测试结果,然后计算并显示每台发电机的平均电压。假设发电机的测试结果如下:第一台发电机:122.5、122.7、123.0;第二台发电机:120.2、127.0、125.1;第三台发电机:121.7、124.9、126.0;第四台发电机:122.9、123.8、126.7;第五台发电机:121.5、124.7、122.6。
以下是实现该功能的C++程序:
#include <iostream>
int main() {
double generatorResults[5][3] = {
{122.5, 122.7, 123.0},
{120.2, 127.0, 125.1},
{121.7, 124.9, 126.0},
{122.9, 123.8, 126.7},
{121.5, 124.7, 122.6}
};
for (int i = 0; i < 5; i++) {
double total = 0;
for (int j = 0; j < 3; j++) {
total += generatorResults[i][j];
}
double average = total / 3;
std::cout << "第 " << i + 1 << " 台发电机的平均电压是: " << average << std::endl;
}
return 0;
}
该程序使用嵌套循环遍历每台发电机的测试结果,计算每台发电机的平均电压并输出。
182、编写一个程序,计算并显示当 y = xz / (x – z) 时 y 的值。程序应计算 x 在 1 到 5 之间、z 在 2 到 6 之间时 y 的值。x 变量应控制外层循环,且每次递增 1,z 也应每次递增 1。当 x 和 z 的值相等时,程序还应显示消息“Function Undefined”。
以下是实现该功能的 C++ 程序:
#include <iostream>
using namespace std;
int main() {
for (int x = 1; x <= 5; x++) {
for (int z = 2; z <= 6; z++) {
if (x == z) {
cout << "Function Undefined" << endl;
} else {
double y = static_cast<double>(x * z) / (x - z);
cout << "x = " << x << ", z = " << z << ", y = " << y << endl;
}
}
}
return 0;
}
代码解释:
外层循环
:
for (int x = 1; x <= 5; x++)
控制
x
的值从 1 到 5 变化。
内层循环
:
for (int z = 2; z <= 6; z++)
控制
z
的值从 2 到 6 变化。
条件判断
:
if (x == z)
检查
x
和
z
是否相等,如果相等则输出“Function Undefined”。
计算 y 的值
:如果
x
和
z
不相等,则计算
y = x * z / (x - z)
并输出结果。
183、已知一个数n及其平方根的一个近似值,可使用公式:新近似值 = (n / 上一个近似值 + 上一个近似值) / 2 来得到更接近实际平方根的近似值。编写一个C++程序,提示用户输入一个数和其平方根的初始猜测值。利用这些输入数据,程序应计算出精确到0.00001的平方根近似值。(提示:当两个近似值之间的差值小于0.00001时,停止循环)
以下是实现该功能的C++程序:
#include <iostream>
#include <cmath>
int main() {
double n, guess, newGuess;
std::cout << "请输入一个数: ";
std::cin >> n;
std::cout << "请输入该数平方根的初始猜测值: ";
std::cin >> guess;
do {
newGuess = (n / guess + guess) / 2;
if (std::abs(newGuess - guess) < 0.00001) {
break;
}
guess = newGuess;
} while (true);
std::cout << "该数平方根的近似值为: " << newGuess << std::endl;
return 0;
}
该程序首先提示用户输入一个数和其平方根的初始猜测值,然后使用
do - while
循环不断更新近似值,直到两个近似值之间的差值小于
0.00001
,最后输出精确到
0.00001
的平方根近似值。