《C++语言程序设计(第5版)》(清华大学出版社,郑莉 董渊编著)习题——第2章 C++语言简单程序设计

文章介绍了使用C++编写的几个基础编程示例,包括用户输入处理、数据类型及其字节数、ASCII码输出、菜单设计、循环控制、穷举法、时间结构体、猜测游戏和组合问题,以及九九乘法表的输出。
摘要由CSDN通过智能技术生成

2-15 编写一个程序,运行时提示输入一个数字,再把这个数字显示出来。

#include <iostream>

using namespace std;

int main() {
    // 提示用户输入数字
    cout << "请输入一个数字: ";

    // 用于存储用户输入的数字的变量
    double number;

    // 从标准输入读取用户输入的数字
    cin >> number;

    // 显示用户输入的数字
    cout << "您输入的数字是: " << number << endl;

    return 0;
}

 

2-16 C++语言有哪几种数据类型?简述其值域。编程显示你使用的计算机中的各种数据类型的字节数。

#include <iostream>

using namespace std;

int main() {
    cout << "整型的大小: " << sizeof(int) << " 字节\n";
    cout << "长整型的大小: " << sizeof(long) << " 字节\n";
    cout << "短整型的大小: " << sizeof(short) << " 字节\n";
    cout << "字符型的大小: " << sizeof(char) << " 字节\n";
    cout << "单精度浮点型的大小: " << sizeof(float) << " 字节\n";
    cout << "双精度浮点型的大小: " << sizeof(double) << " 字节\n";
    cout << "布尔型的大小: " << sizeof(bool) << " 字节\n";
    // 根据需要添加更多的数据类型

    return 0;
}

2-17 输出ASCⅡ码为32~127的字符。

#include <iostream>

using namespace std;

int main() {
    // 输出ASCII码为32~127的字符
    for (int i = 32; i <= 127; ++i) {
        cout << char(i) << " ";
    }

    cout << endl;

    return 0;
}

2-25 编写一个完整的程序,实现功能:向用户提问“现在正在下雨吗?”,提示用户输入Y或N。若输入为Y,显示“现在正在下雨。”;若输入为N,显示“现在没有下雨。”;否则继续提问“现在正在下雨吗?”。

#include <iostream>
#include <string>

int main() {
    std::string userInput;

    do {
        // 提问用户是否正在下雨
        std::cout << "现在正在下雨吗?(输入Y或N): ";
        std::cin >> userInput;

        // 处理用户输入
        if (userInput == "Y" || userInput == "y") {
            std::cout << "现在正在下雨。\n";
        } else if (userInput == "N" || userInput == "n") {
            std::cout << "现在没有下雨。\n";
        } else {
            std::cout << "无效的输入,请输入Y或N。\n";
        }

    } while (userInput != "Y" && userInput != "y" && userInput != "N" && userInput != "n");

    return 0;
}

2-26 编写一个完整的程序,运行时向用户提问“你考试考了多少分?(0~100)”,接收输入后判断其等级显示出来。规则如下:
优90≤分数≤100

良80≤分数<90

中60≤分数<80

差0≤分数<60

#include <iostream>

int main() {
    // 提示用户输入分数
    std::cout << "你考试考了多少分?(0~100): ";

    // 接收用户输入
    int score;
    std::cin >> score;

    // 判断等级并显示结果
    if (score >= 90 && score <= 100) {
        std::cout << "优\n";
    } else if (score >= 80 && score < 90) {
        std::cout << "良\n";
    } else if (score >= 60 && score < 80) {
        std::cout << "中\n";
    } else if (score >= 0 && score < 60) {
        std::cout << "差\n";
    } else {
        std::cout << "输入无效,分数应在0~100之间。\n";
    }

    return 0;
}

2-27 实现一个简单的菜单程序,运行时显示“Menu:A(dd) D(elete) S(ort) Q(uit),Selet one:“提醒用户输入,A表示增加,D表示删除,S表示排序,Q表示退出,输入为A、D、S时分别提示“数据已经增加、删除、排序。”输入为Q时程序结束。

(1)要求使用if…else语句进行判断,用break、continue控制程序流程。

(2)要求使用switch语句。

//使用if...else

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    vector<string> data;  // 用于存储数据的向量

    while (true) {
        cout << "菜单:A(增加) D(删除) S(排序) Q(退出)\n";
        char choice;
        cout << "请选择:";
        cin >> choice;

        if (choice == 'A') {
            // 增加数据
            string newData;
            cout << "输入要增加的数据:";
            cin >> newData;
            data.push_back(newData);
            cout << "数据已经增加。\n";
        } else if (choice == 'D') {
            // 删除数据
            if (data.empty()) {
                cout << "没有数据可以删除。\n";
            } else {
                cout << "原始数据:";
                for (size_t i = 0; i < data.size(); ++i) {
                    cout << data[i] << " ";
                }
                cout << "\n输入要删除的数据:";
                string itemToDelete;
                cin >> itemToDelete;

                vector<string>::iterator it = find(data.begin(), data.end(), itemToDelete);
                if (it != data.end()) {
                    data.erase(it);
                    cout << "数据已经删除。\n";
                } else {
                    cout << "未找到数据。\n";
                }
            }
        } else if (choice == 'S') {
            // 排序数据
            if (data.empty()) {
                cout << "没有数据可以排序。\n";
            } else {
                sort(data.begin(), data.end());
                cout << "数据已经排序。\n";
            }
        } else if (choice == 'Q') {
            // 退出程序
            cout << "程序正在退出。\n";
            break;
        } else {
            // 处理无效输入
            cout << "无效的选择。请键入 A、D、S 或 Q。\n";
            continue;
        }

        // 显示当前数据
        cout << "当前数据:";
        for (size_t i = 0; i < data.size(); ++i) {
            cout << data[i] << " ";
        }
        cout << "\n\n";
    }

    return 0;
}

// 使用switch语句

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    vector<string> data;  // 用于存储数据的向量

    char choice;
    while (true) {
        cout << "菜单:A(增加) D(删除) S(排序) Q(退出)\n";
        cout << "请选择:";
        cin >> choice;

        switch (choice) {
            case 'A':
            case 'a': {
                // 增加数据
                string newData;
                cout << "请输入要增加的数据:";
                cin >> newData;
                data.push_back(newData);
                cout << "数据已经增加。\n";
                break;
            }
            case 'D':
            case 'd': {
                // 删除数据
                if (data.empty()) {
                    cout << "没有数据可以删除。\n";
                } else {
                    cout << "当前数据:";
                    for (size_t i = 0; i < data.size(); ++i) {
                        cout << data[i] << " ";
                    }
                    cout << "\n请输入要删除的数据:";
                    string itemToDelete;
                    cin >> itemToDelete;

                    size_t indexToDelete = 0;
                    bool found = false;
                    for (size_t i = 0; i < data.size(); ++i) {
                        if (data[i] == itemToDelete) {
                            indexToDelete = i;
                            found = true;
                            break;
                        }
                    }

                    if (found) {
                        data.erase(data.begin() + indexToDelete);
                        cout << "数据已经删除。\n";
                    } else {
                        cout << "未找到数据。\n";
                    }
                }
                break;
            }
            case 'S':
            case 's': {
                // 排序数据
                if (data.empty()) {
                    cout << "没有数据可以排序。\n";
                } else {
                    sort(data.begin(), data.end());
                    cout << "数据已经排序。\n";
                }
                break;
            }
            case 'Q':
            case 'q':
                // 退出程序
                cout << "程序正在退出。\n";
                return 0;
            default:
                // 处理无效输入
                cout << "无效的选择,请输入A、D、S或Q。\n";
        }

        // 显示当前数据
        cout << "当前数据:";
        for (size_t i = 0; i < data.size(); ++i) {
            cout << data[i] << " ";
        }
        cout << "\n\n";
    }

    return 0;
}

2-28 用穷举法找出1~100的质数并显示出来。分别使用while、do-while、for循环语句实现。

// 使用while循环

#include <iostream>

using namespace std;

int main() {
    int number = 2;

    cout << "1~100之间的质数有:";

    while (number <= 100) {
        int divisor = 2;
        bool isPrime = true;

        while (divisor <= number / 2) {
            if (number % divisor == 0) {
                isPrime = false;
                break;
            }
            divisor++;
        }

        if (isPrime) {
            cout << number << " ";
        }

        number++;
    }

    cout << endl;

    return 0;
}
//使用do...while语句

#include <iostream>

using namespace std;

int main() {
    int number = 2;

    cout << "1~100之间的质数有:";

    do {
        int divisor = 2;
        bool isPrime = true;

        do {
            if (number % divisor == 0) {
                isPrime = false;
                break;
            }
            divisor++;
        } while (divisor <= number / 2);

        if (isPrime) {
            cout << number << " ";
        }

        number++;
    } while (number <= 100);

    cout << endl;

    return 0;
}
//使用for循环语句

#include <iostream>

using namespace std;

int main() {
    cout << "1~100之间的质数有:";

    for (int number = 2; number <= 100; ++number) {
        bool isPrime = true;

        for (int divisor = 2; divisor <= number / 2; ++divisor) {
            if (number % divisor == 0) {
                isPrime = false;
                break;
            }
        }

        if (isPrime) {
            cout << number << " ";
        }
    }

    cout << endl;

    return 0;
}

2-30 声明一个表示时间的结构体,可以精确表示年、月、日、小时、分、秒;提示用户输入年、月、日、小时、分、秒的值,然后完整地显示出来

#include <iostream>

using namespace std;

// 定义表示时间的结构体
struct Time {
    int year;
    int month;
    int day;
    int hour;
    int minute;
    int second;
};

int main() {
    // 创建时间结构体变量
    Time time;

    // 提示用户输入时间信息
    cout << "请输入年份: ";
    cin >> time.year;

    cout << "请输入月份: ";
    cin >> time.month;

    cout << "请输入日期: ";
    cin >> time.day;

    cout << "请输入小时: ";
    cin >> time.hour;

    cout << "请输入分钟: ";
    cin >> time.minute;

    cout << "请输入秒数: ";
    cin >> time.second;

    // 显示完整的时间信息
    cout << "输入的时间为:" << time.year << "年" << time.month << "月" << time.day << "日 "
         << time.hour << "时" << time.minute << "分" << time.second << "秒" << endl;

    return 0;
}

2-31 在程序中定义一个整型变量,赋以1~100的值,要求用户猜这个数,比较两个数的大小,把结果提示给用户,直到猜对为止。分别使用while、do...while语句实现循环。

//使用while循环

#include <iostream>

using namespace std;

int main() {
    int targetNumber = 42; // 要猜的数字
    int userGuess;

    cout << "猜一猜1~100之间的数字: ";

    // 使用while循环
    while (true) {
        cin >> userGuess;

        if (userGuess == targetNumber) {
            cout << "恭喜你,猜对了!" << endl;
            break; // 结束循环
        } else if (userGuess < targetNumber) {
            cout << "猜的数字太小了,请再试一次: ";
        } else {
            cout << "猜的数字太大了,请再试一次: ";
        }
    }

    return 0;
}
// 使用do...while语句

#include <iostream>

using namespace std;

int main() {
    int targetNumber = 42; // 要猜的数字
    int userGuess;

    cout << "猜一猜1~100之间的数字: ";

    // 使用do...while循环
    do {
        cin >> userGuess;

        if (userGuess == targetNumber) {
            cout << "恭喜你,猜对了!" << endl;
        } else if (userGuess < targetNumber) {
            cout << "猜的数字太小了,请再试一次: ";
        } else {
            cout << "猜的数字太大了,请再试一次: ";
        }
    } while (userGuess != targetNumber);

    return 0;
}

2-32 口袋中有红、黄、蓝、白、黑5种颜色的球若干个。每次从口袋种取出3个不同颜色的球,问有多少种取法?

#include <iostream>
#include <string>

using namespace std;

int main() {
    const int totalColors = 5; // 总颜色数
    const int ballsPerDraw = 3; // 每次取出的球数

    string colors[] = {"红", "黄", "蓝", "白", "黑"};

    int combinationCount = 0;

    // 循环遍历所有可能的排列
    for (int color1 = 0; color1 < totalColors; ++color1) {
        for (int color2 = 0; color2 < totalColors; ++color2) {
            for (int color3 = 0; color3 < totalColors; ++color3) {
                if (color1 != color2 && color1 != color3 && color2 != color3) {
                    // 输出当前排列和编号
                    cout  << combinationCount + 1 << " ";
                    cout << colors[color1] << " " << colors[color2] << " " << colors[color3] << endl;
                    combinationCount++;
                }
            }
        }
    }

    // 输出总的排列数
    cout << "总共有 " << combinationCount << " 种取法。" << endl;

    return 0;
}

2-33 输出九九乘法表

#include<bits/stdc++.h>
using namespace std;
//打印九九乘法表
int main(){
int i=0;
int j=0;
for(i=1;i<=9;i++){
    for(j=1;j<=i;j++){
        cout<<j<<"*"<<i<<"="<<i*j<<" ";
    }
    cout<<endl;
}
return 0;
}

C语言课程设计的优点主要体现在以下几个方面: 基础性强:C语言是一门基础性的编程语言,它直接涉及到计算机的内存管理、指针操作等底层知识。学习C语言有助于深入理解计算机的工作原理,为后续学习其他高级语言打下坚实基础。 可移植性好:C语言编写的程序可以在多种操作系统和硬件平台上运行,因此,学习C语言可以帮助学生掌握跨平台编程的技能,提高程序的可移植性。 效率高:C语言具有高效性,它可以直接访问硬件资源,执行效率高。在编写系统级软件、嵌入式系统、游戏开发等领域,C语言具有明显优势。 结构清晰:C语言采用结构化编程思想,有助于培养学生的逻辑思维能力和程序设计能力。通过C语言的学习,学生可以掌握如何合理组织代码、设计算法和数据结构。 资源丰富:C语言拥有丰富的学习资源和社区支持,包括教材、在线课程、论坛等。学生可以通过这些资源自主学习,解决遇到的问题,提高编程能力。 实践性强:C语言课程设计通常包含大量的实践环节,如编写小程序、实现算法等。这些实践环节有助于提高学生的动手能力和解决问题的能力,使他们更好地将理论知识应用于实际项目中。 综上所述,C语言课程设计具有基础性强、可移植性好、效率高、结构清晰、资源丰富和实践性强等优点。通过C语言的学习,学生可以掌握编程的基本技能,为后续的专业学习和职业发展奠定坚实基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WiIsonEdwards

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值