第三章 程序设计初步
1.
2.计算圆的数据
设圆半径r=1.5,圆柱高 h=3求圆周长圆面积圆球表面积圆球体积圆柱体积。
用 cin 输人数据,输出计算结果,输出时要求有文字说明,取小数点后两位数字。请编程序。
#include <cmath>
#include <iostream>
#include <iomanip>
int main() {
setlocale(LC_ALL, "zh_CN.UTF-8");
int r = 1.5;
int h = 3;
int perimeter = 2 * M_PI * r;//计算周长
int area = M_PI * pow(r, 2);//计算面积
int ball_size = 4 * M_PI * pow(r, 2);//圆球表面积
int ball_volume = 4 / 3 * M_PI * pow(r, 3);//圆球体积
std::cout << std::setprecision(2) << "周长:" << perimeter << std::endl;
std::cout << std::setprecision(2) << "面积:" << area << std::endl;
std::cout << std::setprecision(2) << "圆球表面积:" << ball_size << std::endl;
std::cout << std::setprecision(2) << "圆球体积:" << ball_volume << std::endl;
return 0;
}
问题回馈
- 设置小数点保留需要使用<iomanip>的std::setprecision
- cout加上fixed可以固定保留小数位数
- cmath提供了M_PI
- pow是幂函数, sqrt是根号
3. 华氏度与摄氏度
输人一个华氏温度,要求输出摄氏温度。公式为c=一(F-32),输出要有文字说明,取两位小数
#include <iostream>
#include <iomanip>
using namespace std;
int main(int argc, char const *argv[]) {
double temp;
cout << "输入华氏温度:";
cin >> temp;
cout << endl << fixed << setprecision(2) << "摄氏温度为:" << -(temp - 32.0) <<"C";
return 0;
}
问题回馈
- 没什么问题
4.getchar与putchar
编程序用getchar 函数读入两个字符给 cl,c2然后分别用putchar 函数和cout 语句输出这两个字符。并思考以下问题:
(1)变量 cl,c2应定义为字符型还是整型?抑或二者皆可?
(2)要求输出cl和c2值的ASCII码应如何处理?
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main(int argc, char const *argv[]) {
char c1 = getchar();
int c2 = getchar();
putchar(c1);
putchar(c2);
cout << endl;
return 0;
}
问题回馈
- 中间涉及到了一些关于char int的问题,实质上getchar是可以int也可以char的。
- 输出c1,c2的ASCII码需要使用cout << (int)c1
5. 理解 char 与 int 与 ascii
整型变量与字符变量是否在任何情况下都可以互相代替?
如char cl ,c2; int cl,c2;是否无条件的等价?
问题回馈
- 答案是否定的!因为有些int并无法找到ASCII对应的char!
GPT见解
是的,您说的是正确的。虽然整型变量和字符变量都是变量类型,但它们并不在所有情况下可以互相代替。
例如,在C语言中,char类型的变量只能存储一个字符(在ASCII编码中),而int类型的变量可以存储更大的值,从-2147483648到2147483647(如果使用32位编译器)。因此,如果你将一个超出char类型范围的整数赋值给一个char类型的变量,那么该变量将无法存储整数的全部信息,并且会出现错误的结果。
另一方面,当你将一个包含字符的变量赋值给一个整型变量时,这个字符变量会被转换为其对应的ASCII码值并存储在整型变量中,这可能与原始字符的含义不同。因此,在特定情况下,这两种类型的变量不能互相代替。
6.运算
什么是算术运算?什么是关系运算?什么是逻辑运算?
GPT见解
算术运算是对数字进行数学操作的过程,例如加法、减法、乘法和除法等。它们通常用于执行数值计算。
关系运算是比较两个值之间关系的运算,例如相等、大于、小于、大于等于、小于等于和不等于等。它们通常用于条件语句和循环控制结构中。
逻辑运算是在逻辑上对布尔值进行操作的过程,例如与、或和非等。它们通常用于条件语句和循环控制结构中。在编程中,逻辑运算通常用于判断某些条件是否满足,以便程序可以根据需要采取相应的行动。
8. 比大小
比大小 abc
#include <iostream>
#include "algorithm"
using namespace std;
int main(int argc, char const *argv[]) {
int a, b, c;
cin >> a >> b >> c;
cout << ((a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c));
cout << max({a, b, c});
return 0;
}
问题回馈
- <algorithm>是C++标准库中的头文件之一,它包含了一系列的算法函数。这些算法函数都是以泛型编程的方式实现的,可以用于不同类型的数据结构。引入了后可以使用 std::max({})
12. 颠倒数字
给一个不多于5 位的正整数,要求:D求出它是几位数;2分别打印出每一位数字;3按逆序打印出各位数字,例如原数为321,应输出123。
#include <iostream>
#include <iomanip>
#include <cmath>
#include <algorithm>
using namespace std;
int main(int argc, char const *argv[]) {
int number;
cin >> number;
if (number >= 100000) {
::printf("最高为五位数");
return 0;
}
string str = to_string(number);
cout << str.length() << endl;
for (int i = 0; i < str.length(); ++i) {
cout << str[i] << endl;
}
reverse(str.begin(), str.end());
cout << str << endl;
return 0;
}
问题回馈
- 这边问题比较大,尤其是反转。reverse是<algorithm>下的函数,其需要提供一个迭代器范围,即代码中的`reverse(str.begin(), str.end())
13. 范围条件
企业发放的奖金来自利润提成。
利润i低于或等于 10 万元的,可提成10% 为奖金;
利润i高于10万元,低于或等于 20 万元(100000<i200000 时低于10 万元的部分按10%提成高于10万元的部分可提成7.5%;200000<i400000 时低于20 万的部分仍按上述办法提成(下同),高于20 万元的部分按 5% 提成;400000<i600000 时高于40万元的部分按3% 提成;600000 <i1000000 时高于60万元的部分按 1.5%提成i>1000000时,超过100万元的部分按1%提成。从键盘输入当月利润求应发奖金总数
要求:(1)用if语句编程序:
(2)用switch 语编序。
//过于机械化
14. 排序数字
输人4 个整数要求按由小到大的顺序输出。
#include <iostream>
#include <iomanip>
#include <cmath>
#include <algorithm>
using namespace std;
void swap(int *num1, int *num2)
{
int temp = *num2;
*num2 = *num1;
*num1 = temp;
}
int main(int argc, char const *argv[])
{
int a, b, c, d;
cin >> a >> b >> c >> d;
int nums[] = {a, b, c, d};
int length = sizeof(nums) / sizeof(nums[0]);
for (int i = 0; i < length - 1; i++)
{
for (int j = 0; j < length - 1; j++)
{
if (nums[j] > nums[j + 1])
{
swap(nums[j], nums[j + 1]);
}
}
}
for (int i = 0; i < length; i++)
{
cout << nums[i] << ((i < 3) ? "," : "");
}
return 0;
}
问题回馈
- 指针变量
- 冒泡排序
- 数组长度,数组与Array
15. 最小公倍数 最大公约数
输人两个正整数 m和n,求其最大公约数和最小公倍数。