第三章 程序设计初步

第三章 程序设计初步

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,求其最大公约数和最小公倍数。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容