第二章 程序设计基础 程序设计练习题

2.1(将摄氏温度值转换为华氏温度值)编写程序,读入一个double型的摄氏温度值,将其转换为华氏温度值并显示结果。

#include <iostream>
using namespace std;

int main()
{
	double celsius = 0.0;//摄氏温度值
	cout << "请输入摄氏温度值:";
	cin >> celsius;

	double fahrenheit = 0.0;//华氏温度值
	fahrenheit = (9.0 / 5)*celsius + 32;//转换公式
	cout << celsius << "摄氏度是" << fahrenheit << "华氏度";

	return 0;
}


2.2(计算一个圆柱体的体积)编写一个程序,读入一个圆柱体的半径和长度,用如下公式计算其面积和体积:
area = radius * radius * π;volume = area * length

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
	const double PI = 3.141592;//定义常量π
	double radius = 0.0, length = 0.0;
	cout << "Enter the radius and length of a cylinder:";
	cin >> radius >> length;

	double area = 0.0, volume = 0.0;
	area = pow(radius, 2)*PI;//计算圆柱面积公式
	volume = area * length;//计算圆柱体积公式

	cout << "The area is:" << area << endl;
	cout << "The volume is:" << volume << endl;

	return 0;
}


2.3(将英尺转换成米)编写一个程序,读入一个以英尺为单位的长度值,将其转换为以米为单位的值,输出结果。1英尺等于0.305米。

#include <iostream>
using namespace std;

int main()
{
	const double rate = 0.305;
	double feet = 0.0, meter = 0.0;
	cout << "Enter a value for feet:";
	cin >> feet;
	meter = rate * feet;
	cout << feet << " feet is " << meter << " meters";

	return 0;
}


2.4(将磅转换为千克)编写程序,读入一个以磅为单位的重量值,转换为以千克为单位的值,输出结果。1磅等于0.454千克。

#include <iostream>
using namespace std;
int main()
{
	const double rate = 0.454;
	double pound = 0.0, kilogram = 0.0;
	cout << "Enter a number in pounds:";
	cin >> pound;
	kilogram = pound * rate;
	cout << pound << " pounds is " << kilogram << " kilograms";

	return 0;
}


2.5(金融应用:计算消费)编写程序,读入消费小计和小费费率,计算小费金额和消费总计。例如,用户输入消费小计为10,小费费率为15%,程序应输出小费金额为$1.5以及消费总计为$11.5。

#include <iostream>
using namespace std;
int main()
{
	double subtotal = 0.0, gratuityRate = 0.0;
	cout << "Enter the subtotal and a gratuity rate:";
	cin >> subtotal >> gratuityRate;

	double gratuity = 0.0, total = 0.0;
	gratuity = gratuityRate / 100 * subtotal;
	total = gratuity + subtotal;
	cout << "The gratuity is $" << gratuity << " and total is $" << total;

	return 0;
}


2.6(讲一个整数中的所有数字相加)编写一个程序,读入一个0~1000范围内的整数,将此整数中的所有数字相加。例如,如果整数为932,则所有数字和为14。

#include <iostream>
using namespace std;
int main()
{
	int number = 0, sumOfDigits = 0;
	cout << "Enter a number between 0 and 1000:";
	cin >> number;

	sumOfDigits += number % 10;//提取个位数字
	sumOfDigits += (number / 10) % 10;//提取十位数字
	sumOfDigits += (number / 100) % 10;//提取百位数字

	cout << "The sum of the digits is " << sumOfDigits;

	return 0;
}


2.7(找出年数)编写程序,提示用户输入分钟数(如,10亿),输出所对应的年数和天数。为了简明,假定一年有365天。

#include <iostream>
using namespace std;
int main()
{
	int numberOfMinutes = 0;
	int numberOfDays = 0;
	int numberOfYears = 0;

	cout << "Enter the number of minutes:";
	cin >> numberOfMinutes;

	numberOfDays = numberOfMinutes / 60 / 24;//计算总共有多少天
	numberOfYears = numberOfDays / 365;//用天数计算有多少年
	numberOfDays %= 365;//总天数对年取余就是剩余的天数

	cout << numberOfMinutes << " minutes is approximately " << numberOfYears << " years and " << numberOfDays << " days";

	return 0;
}


2.8(当前时间)程序清单2-9,ShowCurrentTime.cpp,给出一个程序,显示当前的格林尼治时间。修改程序使它提示用户输入与格林尼治时间相差的时区,输出待定时区的时间。

/*本题在跨天时会出现bug,如GMT为1:0:0,差-5个时区
则当前时间为-4:0:0,但根据题意和所学难度,此程序为
该时期的正确答案*/
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
	int totalSecond = time(0);
	int currentSecond = totalSecond % 60;
	int currentMinute = (totalSecond / 60) % 60;
	int currentHour = (totalSecond / 60 / 60) % 24;

	int timeZone = 0;//一个时区相处一小时
	cout << "Enter the time zone offset to GMT:";
	cin >> timeZone;
	cout << "The current time is " << currentHour+timeZone << ":" << currentMinute << ":" << currentSecond;

	return 0;
}


2.9(物理:加速度)平均加速度被定义为速率的变化除以时间,如下列公式所示:a = (v1-v0)/t,编写程序,提示用户输入以米/秒为单位的初速度v0,以米/秒为单位的末速度v1,以秒为单位花费时间t,输出平均加速度。

#include <iostream>
using namespace std;

int main()
{
	double v0 = 0, v1 = 0, t = 0;
	cout << "Enter v0,v1 and t:";
	cin >> v0 >> v1 >> t;
	double a = (v1 - v0) / t;
	cout << "The average acceleration is " << a;

	return 0;
}


2.10(科学技术:计算能量)编写程序,计算将水从初始温度加热到末温度所需的能量。程序提示用户输入以千克为单位的水量、初始水温以及末温度。计算公式为:Q = M * (finalTemperature - initialTemperature)* 4184其中M为单位的水的质量,温度则以摄氏度为单位,能量Q的单位是焦耳。

#include <iostream>
using namespace std;

int main()
{
	const double RATE = 4184;
	double amountOfWater = 0;
	double initialTemperature = 0, finalTemperature = 0;
	double energy = 0;

	cout << "Enter the amount of water in kilograms:";
	cin >> amountOfWater;
	cout << "Enter the initial temperature:";
	cin >> initialTemperature;
	cout << "Enter the final temperature:";
	cin >> finalTemperature;

	energy = amountOfWater * (finalTemperature - initialTemperature)*RATE;
	cout << "The energy needed is " << energy << "J";

	return 0;
}


2.11(人口估算)重新编写程序设计练习1.11的程序,提示用户输入年数,输出这么多年后的人口数。使用程序设计练习1.11中的提示。

#include <iostream>
using namespace std;

int main()
{
	int numberOfYears = 0;
	cout << "Enter the number of years:";
	cin >> numberOfYears;

	int totalSecond = numberOfYears * 365 * 24 * 60 * 60;
	cout << "The population in " << numberOfYears << " years is " <<
		312032486 + totalSecond / 7 + totalSecond / 45 - totalSecond / 13;

	return 0;
}


2.12(物理:计算跑道长度)给出飞机的加速度a以及起飞速度v,可以用下面的公式计算出飞机起飞需要的最短跑道长度:length = $v^2$/2a,编写程序,用户输入以米/秒(m/s)为单位的速度v以及以米/秒的平方(m/$s^2$)为单位的加速度a,输出最短跑道长度。

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
	double v = 0,a = 0, length = 0;
	cout << "Enter speed and acceleration:";
	cin >> v >> a;

	length = pow(v, 2) / 2 / a;
	cout << "The minimum runway length for this airplance is " << length<<"m";

	return 0;
}


2.13(金融应用:计算零存整数价值)假定用户每月向一个储蓄账号中存100美元,年利率为5%。那么,月利率为0.05 / 12 = 0.00417。第一个月后,账面金额变为
100 * (1 + 0.00417) = 100.417
第二个月后,账面金额变为
(100 + 100.417) * (1 + 0.00417) = 201.252
第三个月后,账面金额变为
(100 + 201.252) * (1 + 0.00417) = 302.507
以此类推。
编写程序,提示用户输入每月储蓄的金额,输出6个月后的账面金额。(在程序设计练习5.32中,会使用循环来简化本题的代码,并扩展为计算机任意个月后的账面金额。)

#include <iostream>
using namespace std;

int main()
{
	const double YEARRATE = 0.05;
	double monthRate = YEARRATE / 12;
	double monthlySavingAmount = 0;

	cout << "Enter the monthly saving amount:";
	cin >> monthlySavingAmount;

	double accountValue = 0;
	accountValue = monthlySavingAmount * (1 + monthRate);//first month
	accountValue = (monthlySavingAmount + accountValue)*(1 + monthRate);//第二个月
	accountValue = (monthlySavingAmount + accountValue)*(1 + monthRate);//第三个月
	accountValue = (monthlySavingAmount + accountValue)*(1 + monthRate);//第四个月
	accountValue = (monthlySavingAmount + accountValue)*(1 + monthRate);//第五个月
	accountValue = (monthlySavingAmount + accountValue)*(1 + monthRate);//第六个月
	cout << "After the sixth month, the account value is $" << accountValue;

	return 0;
}


2.14(健康应用:BMI)身体质量指数(BMI)在体重方面衡量健康。用以千克为单位的重量除以以米为单位的身高的平方来计算。编写程序,提示用户输入以磅为单位的体重以及以英尺为单位的身高,输出BMI。注意,1磅等于0.45359237千克,1英尺为0.0254米。

#include <iostream>
using namespace std;

int main()
{
	const double KILOGRAMRATE = 0.45359237, METERRATE = 0.0254;
	double pound = 0, inche = 0;
	cout << "Enter weight in pounds:";
	cin >> pound;
	cout << "Enter height in inches:";
	cin >> inche;

	double BMI = 0.0;
	BMI = pound * KILOGRAMRATE / (inche*METERRATE) / (inche*METERRATE);
	cout << "BMI is " << BMI;

	return 0;
}


2.15(几何学:两点之间的距离)编写程序,提示用户输入两个点(x1,y1),(x2,y2),输出他们之间的距离。计算距离的公式为\sqrt{(x2-x1)^2+(y2-y1)^2}注意可以使用pow(a,0.5)来计算$\sqrt a$.

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
	double x1 = 0, x2 = 0, y1 = 0, y2 = 0;
	cout << "Enter x1 and y1:";
	cin >> x1 >> y1;
	cout << "Enter x2 and y2:";
	cin >> x2 >> y2;

	double distance = 0;
	distance = pow(pow(x2 - x1, 2) + pow(y2 - y1, 2), 0.5);
	cout << "The distance between the two points is " << distance;

	return 0;
}


2.16(几何:六边形的面积)编写程序,提示用户输入六边形的边,输出它的面积。计算六边形面积的公式为Area = \frac{3\sqrt{3}}{2}s^2。其中s是边的长度。

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
	double side = 0;
	cout << "Enter the side:";
	cin >> side;

	double area = 1.5*sqrt(3.0)*side*side;
	cout << "The atea of the hexagon is " << area;

	return 0;
}


2.17(科学技术:风冷温度)外面到底有多冷?单单的温度不足够提供答案。其他因素包括风速、相对湿度以及光照在决定户外寒冷程度上都起了重要作用。2001年,国际气候协会(NWS)履行了新的风冷温度,使用温度和风速来测量寒冷程度,公式为:
t_{wc}$ = 35.74 + 0.6215$t_a$ - 35.75$v^{0.16}$ + 0.4275$t_a$$v^{0.16}
其中$t_a$是以华氏度为单位的户外温度,v是以英里每小时(mph)为单位的速度。$t_{wc}$为风冷温度。公式在风速低于2mph或者温度低于-58华氏度或高于41华氏度时不能使用。
编写程序,提示用户输入在-58华氏度及41华氏度之间的温度,大于或等于2mph的风速,输出风冷温度。使用pow(a,b)来计算$v^{0.16}$

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
	double twc = 0, ta = 0, v = 0;
	cout << "Enter the temperature in Fahrenheit:";
	cin >> ta;
	cout << "Enter the wind speed in miles per hour:";
	cin >> v;

	twc = 35.74 + 0.6215*ta - 35.75*pow(v, 0.16) + 0.4275*ta*pow(v, 0.16);
	cout << "The wind chill index is " << twc;

	return 0;
}


2.18(输出一个表)编写程序,输出下面的列表:

a b pow(a,b)
1 2 1
2 3 8
3 4 81
4 5 1024
5 6 15625
#include<iostream>
#include <cmath>
using namespace std;

int main()
{
	int a = 1, b = 2;
	cout << "a" << "	" << "b" << "	" << "pow(a,b)" << endl;
	cout << a << "	" << b << "	" << pow(a, b) << endl;
	a++, b++;
	cout << a << "	" << b << "	" << pow(a, b) << endl;
	a++, b++;
	cout << a << "	" << b << "	" << pow(a, b) << endl;
	a++, b++;
	cout << a << "	" << b << "	" << pow(a, b) << endl;
	a++, b++;
	cout << a << "	" << b << "	" << pow(a, b) << endl;

	return 0;
}

2.19(几何:三角形的面积)编写程序,提示用户输入三角形的三个顶点(x1,y1),(x2,y2),(x3,y3),输出它的面积。计算三角形的公式为

s = (side1 + side3 + side3)/2

area = \sqrt{s(s-side1)(s-side2)(s-side3)}

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
	double x1 = 0, y1 = 0, x2 = 0, y2 = 0, x3 = 0, y3 = 0;
	cout << "Enter three points for a triangle;";
	cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;

	double side1 = pow(pow(x1 - x2, 2) + pow(y1 - y2, 2), 0.5);
	double side2 = pow(pow(x1 - x3, 2) + pow(y1 - y3, 2), 0.5);
	double side3 = pow(pow(x3 - x2, 2) + pow(y3 - y2, 2), 0.5);
	double s = (side1 + side2 + side3) / 2;

	double area = pow(s * (s - side1) * (s - side2) * (s - side3), 0.5);
	cout << "The area of the triangle is " << area;

	return 0;
}

2.20(线的斜率)编写程序,提示用户输入两个点的坐标(x1,y1)和(x2,y2),输出连接两点的线的斜率。斜率公式为(y2-y1)/(x2-x1)。

#include <iostream>
using namespace std;

int main()
{
	double x1 = 0, x2 = 0, y1 = 0, y2 = 0;
	cout << "Enter the coordinates for two points:";
	cin >> x1 >> y1 >> x2 >> y2;
	double k = (y2 - y1) / (x2 - x1);
	cout << "The slope for the line that connects two points " <<
		"(" << x1 << "," << y1 << ") and (" << x2 << "," << y2 << ") is " << k;
	return 0;
}

2.21(驾车费用)编写程序,提示用户输入驾驶距离、以公里每加仑为单位的汽车耗油效率、每加仑的价格,输出这趟路程的花费。

#include <iostream>
using namespace std;

int main()
{
	double distance = 0, milesPerGallon = 0, pricePerGallon = 0;
	cout << "Eter the driving distance:";
	cin >> distance;
	cout << "Enter miles per gallon:";
	cin >> milesPerGallon;
	cout << "Enter price per gallon:";
	cin >> pricePerGallon;

	double costOfDriving = distance / milesPerGallon * pricePerGallon;
	costOfDriving = ((int)(costOfDriving * 100)) / 100.0;//使结果保留两位小数,即精确到美分
	cout << "The cost of driving is $" << costOfDriving;

	return 0;
}

2.22(金融应用:计算利息)已知余款和年利率,可计算出下个月的支付利息,用下面的公式:interest = balance * (annualIntersRate / 1200)。编写程序,读余额及年利率,输出下个月的利息。

#include <iostream>
using namespace std;

int main()
{
	double interest = 0, balance = 0, annualInterestRate = 0;
	cout << "Enter balance and interest rate (e.g.,3 for 3%):";
	cin >> balance >> annualInterestRate;
	interest = balance * (annualInterestRate / 1200);
	cout << "The interest is " << interest;

	return 0;
}

2.23(金融应用:未来投资价值)编写程序,读入投资数额、年利率、年数,输出未来投资价值,使用下面的公式:

\dpi{100} futureInvestmentValue =investment \times (1+ mothlyInterestRate)^{numberOfYears\ast 12}

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
	double investmentAmount = 0, monthlyInterestRate = 0, numberOfYears = 0;
	double annualInterestRate = 0;
	cout << "Enter investment amount:";
	cin >> investmentAmount;
	cout << "Enter annual interest rate in percentage:";
	cin >> annualInterestRate;
	cout << "Enter number of years:";
	cin >> numberOfYears;

	monthlyInterestRate = annualInterestRate / 1200;//计算月利率
	double futureInvestmentValue = 0;
	futureInvestmentValue = investmentAmount * pow(1 + monthlyInterestRate, numberOfYears * 12);
	cout << "Accumulated value is $" << futureInvestmentValue;

	return 0;
}

2.24(金融应用:货币单元)重新编写程序清单2-12,ComputeChange.cpp,修复将一个float值转换为int值时可能产生的精度丢失。输入后两个数字代表美分的整数。例如输入1156代表11美元和56美分。

#include <iostream>
using namespace std;

int main()
{
	unsigned amount = 0;
	cout << "Enter an amount in int,for example 1156 is 11 dollars and 56 pennies:";
	cin >> amount;

	unsigned remainingAmount = amount;
	unsigned numberOfOneDollars = remainingAmount / 100;//一美元数量
	remainingAmount = remainingAmount % 100;

	unsigned numberOfQuarters = remainingAmount / 25;//二角五分数量
	remainingAmount = remainingAmount % 25;

	unsigned numberOfDimes = remainingAmount / 10;//一角数量
	remainingAmount %= 10;

	unsigned numberOfNickels = remainingAmount / 5;//五美分数量
	remainingAmount %= 5;

	unsigned numberOfPennies = remainingAmount;//一美分数量

	cout << "Your amount " << amount/100 <<" dollars and "<<amount%100<<" pennies"<< " consists of " << endl <<
		"	" << numberOfOneDollars << " dollars" << endl <<
		"	" << numberOfQuarters << " quarters" << endl <<
		"	" << numberOfDimes << " dimes" << endl <<
		"	" << numberOfNickels << " nickels" << endl <<
		"	" << numberOfPennies << " pennies" << endl;

	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40836442/article/details/106783964