Bootstrap

【C++】cin、cout基础编程题:完整解析与优化解法


在这里插入图片描述

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳]
本文专栏: C++


在这里插入图片描述


💯前言

  • 本文深入探讨四道C++编程题目,包括每道题的题目描述、输入输出格式、解题思路及不同的解法优化。我们将逐步深入地讲解每个解法的代码结构、其内在逻辑及其优缺点,旨在帮助读者系统地理解C++编程的基础概念与技巧。
    通过对这些题目的详细分析,读者将逐步掌握C++编程的核心语法调试技巧,并在不同情境下选择最优实现策略的能力。这些练习的设计旨在为初学者提供系统化的学习路径,帮助其建立扎实的编程基础,为应对更复杂的编程任务奠定理论与实践的坚实基础。
    C++ 参考手册
    在这里插入图片描述

💯第一题:Hello, World! 输出

在这里插入图片描述
题目描述
编写一个程序,能够输出 “Hello, World!”。

提示

  • 使用英文标点符号;
  • “Hello, World!” 逗号后面没有空格。
  • H 和 W 为大写字母。

输入格式

输出格式

输入输出样例
无输入,输出为:

Hello, World!

解题思路

在这里插入图片描述
这是一道非常经典的C++入门题目,其主要目的是让初学者熟悉C++的基本程序结构和标准输出语句。程序要求输出一行特定的内容,即“Hello, World!”。对于初学者来说,这一题的关键是掌握C++的基础编程结构以及如何实现简单的标准输出。

在C++中,标准输出使用iostream库中的cout,因此必须包含头文件 <iostream> 并使用 std::cout 来完成输出操作。通过这一练习,初学者可以理解C++的编译与运行过程,熟悉C++标准库的基本功能调用,从而为后续的学习打下坚实基础。


解法代码与分析

在这里插入图片描述

#include <iostream>
using namespace std;

int main() {
    cout << "Hello, World!" << endl;
    return 0;
}
  • #include <iostream>:引入C++标准输入输出库,以便使用 cout 进行输出。
  • using namespace std;:通过使用 std 命名空间,避免每次调用标准库函数时都需要显式使用 std:: 前缀。
  • int main():C++程序的入口函数,程序从此处开始执行。
  • cout << "Hello, World!" << endl;:将字符串输出到控制台,endl 用于换行。
  • return 0;:表示程序正常结束,返回状态码0给操作系统。

本题的核心在于理解如何使用 cout 进行标准输出,尤其是掌握 cout 语句中 << 操作符的用法。这些基础知识对后续复杂的输入输出操作至关重要,是C++编程的核心基础。


💯第二题:小飞机图案打印

在这里插入图片描述
题目描述
KiKi 学会了屏幕输出信息,他想输出一架小飞机。请帮他编写程序输出这架小飞机。

输入格式

输出格式
打印一个固定的图案,形似飞机。

输出样例

    **    
    **    
************
 ************
   *  *   
   *  *   

解题思路

在这里插入图片描述
这道题要求输出一个特定的字符图案,图案由字符 “*” 和空格组合而成。我们需要使用多行的 cout 语句逐行打印出内容。为了确保每一行的字符能够正确对齐,我们需要精确控制空格的数量和字符的位置。通过观察每一行的图案,发现其具有一定的对称性,这使得我们在编码时可以精确地决定每行输出的字符数目和排列方式。

这种字符图案的输出在编程中非常常见,特别是在练习字符排列和排版对齐时,例如打印菱形、树形或其他对称性图案。在编写这些代码时,首先要确保字符的精确位置,其次需要保证各行间的结构保持一致,以形成完整的图案。


解法代码与分析

在这里插入图片描述

#include <iostream>
using namespace std;

int main() {
    cout << "    **    " << endl;
    cout << "    **    " << endl;
    cout << "************" << endl;
    cout << " ************" << endl;
    cout << "   *  *   " << endl;
    cout << "   *  *   " << endl;
    return 0;
}
  • 输出图案:通过多个 cout 语句逐行输出图案,每行由空格和 * 组合形成。
  • 换行:每次输出一行后使用 endl 进行换行,以确保下一行内容正确对齐。

代码优化思路
对于固定的图案,可以直接使用多个 cout 语句来输出。但如果图案更复杂,或者需要多次输出类似的图案,可以考虑通过循环和数组来简化代码,以提高代码的可读性和复用性。例如,可以将每行的字符串内容存储在数组中,再通过循环遍历数组进行输出,从而减少代码冗余,提高后续维护和修改的便捷性。

在实际应用中,尤其是需要频繁打印类似图案时,这种优化方法不仅可以简化代码,还能使代码逻辑更清晰,更易于后续扩展和修改。


💯第三题:输出第二个整数

在这里插入图片描述

题目描述
输入三个整数,整数之间由一个空格分隔。把第二个输入的整数输出。

输入格式
只有一行,共三个整数,整数之间由一个空格分隔。

输出格式
只有一行,一个整数,即输入的第二个整数。

输入输出样例

  • 输入
      123 456 789
    
  • 输出
      456
    

解题思路

本题要求从输入的三个整数中,提取出第二个整数并输出。我们可以使用 cin 读取三个整数,然后选择性地输出第二个整数。在C++中,cin 是处理输入的常用工具,我们可以选择逐个输入或者一次性读取所有数据,这取决于具体的实现需求。
在这里插入图片描述


解法 1(逐个输入)

在这里插入图片描述

#include <iostream>
using namespace std;

int main() {
    int n1, n2, n3; // 定义三个整数变量
    cin >> n1;      // 输入第一个整数
    cin >> n2;      // 输入第二个整数
    cin >> n3;      // 输入第三个整数
    cout << n2 << endl; // 输出第二个整数
    return 0;
}
  • 分三次输入:分别使用 cin 读取三个整数,将它们存储在 n1n2n3 中。
  • 输出第二个整数:直接输出 n2
  • 优点:输入输出逻辑清晰,代码易于理解。

这种逐个输入的方法可以帮助初学者理解如何使用 cin 来逐步读取输入变量。在实际编程中,这种方法也允许我们在每次输入后对数据进行验证和处理,从而增加代码的灵活性。


解法 2(一次性输入)

在这里插入图片描述

#include <iostream>
using namespace std;

int main() {
    int n1, n2, n3;    // 定义三个整数变量
    cin >> n1 >> n2 >> n3; // 一行读取三个整数
    cout << n2 << endl;    // 输出第二个整数
    return 0;
}
  • 一次性输入:通过一个 cin 语句同时读取三个整数,这样代码更加简洁。
  • 优点:减少代码冗余,使其更适合常规编程和竞赛场景。

一次性输入方式更为高效,可以减少代码长度,使程序的逻辑更为清晰,尤其在需要快速读取并处理多个输入时,这种方法可以有效提升编程效率。

解法 3(忽略第三个整数)

#include <iostream>
using namespace std;

int main() {
    int n1, n2;        // 定义两个整数变量
    cin >> n1 >> n2;   // 读取前两个整数
    cout << n2 << endl; // 输出第二个整数
    return 0;
}
  • 忽略第三个输入:只读取前两个整数,这样可以直接得到第二个整数。
  • 优点:代码更加简洁有效,如果不需要处理第三个输入,这是最好的选择。

这种方法适合在明确知道后续输入无用的情况下使用,可以进一步提高代码的简洁性和执行效率。同时,这种方法在输入数据量较大但只需要处理一部分数据时,也具有一定的优势。


对比分析

解法优点缺点使用场景
解法 1(逐个输入)输入输出逻辑清晰,适合新手学习输入操作稍显冗长教学场景,清楚表达变量输入关系
解法 2(一次性输入)一行完成输入,代码简洁高效无显著缺点竞赛和常规编程场景
解法 3(忽略第三个)仅读取需要的变量,省略无用输入,节约资源不适用于需要使用所有输入的场景数据量大时,忽略部分数据时使用

通过上述三种解法的对比,可以看出,根据具体需求的不同,选择合适的输入方式可以有效提高代码的简洁性和执行效率。在教学中,我们通常选择逐个输入的方式来帮助学生理解基本的输入输出概念,而在实际编程中,更倾向于一次性输入以提高效率。
在这里插入图片描述


💯第四题:实现字符构成等腰三角形图案

题目描述
给定一个字符,用它构造一个底边长5个字符,高3个字符的等腰字符三角形。

输入格式
输入只有一行,包含一个字符。

输出格式
该字符构成的等腰三角形,底边长5个字符,高3个字符。
在这里插入图片描述
输入输出样例
输入:

*

输出:

  *
 ***
*****

说明/提示
对于100%的数据,输入的字符是ASCII中的可见字符。


解法代码与分析

在这里插入图片描述
首先,我们来分析如何使用C++实现这个题目。以下是一个初始的代码实现:

#include <iostream>
using namespace std;

int main() {
    char ch1;
    cin >> ch1;
    cout << " " << ch1 << " " << endl;
    cout << " " << ch1 << ch1 << ch1 << " " << endl;
    cout << ch1 << ch1 << ch1 << ch1 << ch1 << endl;
    return 0;
}
  1. #include <iostream>:这是一个标准库,包含了输入输出流的定义,使我们可以使用cincout
  2. using namespace std;:为了避免每次使用coutcin时都写std::,我们使用了using namespace std;
  3. char ch1;:定义了一个字符变量ch1,用于存储用户输入的字符。
  4. cin >> ch1;:从用户输入中读取字符,赋值给ch1
  5. cout << ... << endl;:利用cout来输出字符构成的三角形,每行结束使用endl换行。

通过这些步骤,程序成功地输出了一个由输入字符构成的等腰三角形,底边长度为5个字符,高度为3个字符。输出的结果如下:

  *
 ***
*****

虽然这个代码达到了题目的要求,但代码中处理每行前空格的方式稍显笨拙,且空格的处理并不是最清晰和直接的,接下来我们会对其进行优化。


优化后的代码实现

基于对初始代码的分析,我们可以发现代码中的空格处理不够简洁。为了使代码更具可读性,并更好地达到输出等腰三角形的目的,我们对代码进行了优化。
在这里插入图片描述


优化后的代码

#include <iostream>
using namespace std;

int main() {
    char ch1;
    cin >> ch1;
    cout << "  " << ch1 << endl;
    cout << " " << ch1 << ch1 << ch1 << endl;
    cout << ch1 << ch1 << ch1 << ch1 << ch1 << endl;
    return 0;
}

在这里插入图片描述


优化的改进点

在这里插入图片描述

  • 减少了冗余的空格:初始代码中的第一、第二行都有多余的空格,通过优化,第一行前输出两个空格,第二行前输出一个空格,这样处理得更为精简,使得代码逻辑更加清晰。
  • 更易理解的输出格式:每行的cout语句更直观地反映了输出的内容,使得代码易于理解,也便于修改。

优化后的输出结果如下:

  *
 ***
*****

💯小结

  • 在这里插入图片描述
    这四道题目涵盖了C++编程中的基础知识,包括标准输入输出的使用、字符与空格的格式控制、以及如何根据需求灵活选择代码实现方案。通过这些练习,读者可以更加深入地理解C++的核心语法,掌握输出格式的控制技巧,并了解如何在不同场景中进行代码优化。每种解法的优缺点分析帮助读者更好地理解选择不同实现方案的考量因素,从而提高编写高质量代码的能力。
    希望这篇文章能够帮助C++初学者理解并掌握基础的编程概念,为后续应对更加复杂的编程任务奠定坚实的基础。通过对每道题目的详细分析,初学者不仅可以学会如何编写代码,还可以逐步培养编程的逻辑思维解决问题的能力。如果您有任何问题或者希望进一步探讨相关内容,欢迎随时提问。我们非常乐意协助您解答疑惑,并在编程学习的道路上共同进步

在这里插入图片描述


;