【c++】C语言之输入行数,输出实心菱形和空心菱形

简介: C语言之输入行数,输出实心菱形和空心菱形

输出菱形

编程自动输出如下图形,由屏幕输入指定行数(奇数),实现后封装为函数,以行数作为参数值。

在这里插入图片描述

     
   输入一个n,表示左边两个菱形图形(实心和空心)的行数(或者一半行数)  
   利用循环语句实现输出。说明:此题相当于两个题,要打印出两个图。
  提示:第一个菱形分析*号个数和规律;第二题分析*出现位置及变化规律

做题思路

先输出上半部分,再输出下部分
这样就相当于输出一个正三角形和一个倒三角形。
并且正三角形的行数比倒三角形的行数多一行,多出的一行是两个三角形的线。

正三角形

for(i=1; i<=n; i++)//上半部分 
    {
        for(j=1; j<=n-i; j++)//"n-i"当前行第一个星号左边的空格数//
            cout << ' ';
        for(j=1; j<=2*i-1; j++)//"2*i-1"为当前行的星号数// 
            cout << '*';
        cout << endl;//换行//
    }

倒三角形

for(i=n; i>=1; i--)//下半部分
    {
        for(j=1; j<=n-i+1; j++)//"n-i"当前行第一个星号左边的空格数// 
            cout << ' ';
        for(j=1; j<=2*i-1; j++)//"2*i-1"为当前行的星号数// 
            cout << '*';
        cout << endl;//换行//
    }

改变两者的n

n_u=n/2+1;//上半部分行数
n_l=n/2;//下半部分行数 

在这里插入图片描述

代码:

#include <iostream>
using namespace std;
int main()
{
    int n,i,j,n_u,n_l;
    cout << "输入行数一个奇数:";
    cin >> n;
    n_u=n/2+1;//上半部分行数
    n_l=n/2;//下半部分行数 
    for(i=1; i<=n_u; i++)//上半部分 
    {
        for(j=1; j<=n_u-i; j++)//"n_u-i"当前行第一个星号左边的空格数//
            cout << ' ';
        for(j=1; j<=2*i-1; j++)//"2*i-1"为当前行的星号数// 
            cout << '*';
        cout << endl;//换行//
    }
    for(i=n_l; i>=1; i--)//下半部分
    {
        for(j=1; j<=n_l-i+1; j++)//"n_l-i"当前行第一个星号左边的空格数// 
            cout << ' ';
        for(j=1; j<=2*i-1; j++)//"2*i-1"为当前行的星号数// 
            cout << '*';
        cout << endl;//换行//
    }
}

空心菱形

做题思路

先输出上半部分,再输出下部分
这样就相当于输出一个正三角形和一个倒三角形。
并且正三角形的行数比倒三角形的行数多一行,多出的一行是两个三角形的线。

在实心的基础上改进
不同点在于*的输出

if(i==1)
            cout << '*';
        else{
            cout << '*';
            for(j=1; j<=2*(i-1)-1; j++)//"2*i-1"为当前行的星号数// 
                cout << ' ';
            cout << '*';
        }

结果

在这里插入图片描述

代码

#include <iostream>
using namespace std;
int main()
{
    int n,i,j,n_u,n_l;
    cout << "输入行数一个奇数:";
    cin >> n;
    n_u=n/2+1;//上半部分行数
    n_l=n/2;//下半部分行数 
    for(i=1; i<=n_u; i++)//上半部分 
    {
        for(j=1; j<=n_u-i; j++)//"n_u-i"当前行第一个星号左边的空格数//
            cout << ' ';
        
        if(i==1)
            cout << '*';
        else{
            cout << '*';
            for(j=1; j<=2*(i-1)-1; j++)//"2*i-1"为当前行的星号数// 
                cout << ' ';
            cout << '*';
        }
        
        cout << endl;//换行//
    }
    for(i=n_l; i>=1; i--)//下半部分
    {
        for(j=1; j<=n_l-i+1; j++)//"n_l-i"当前行第一个星号左边的空格数// 
            cout << ' ';
        if(i==1)
            cout << '*';
        else{
            cout << '*';
            for(j=1; j<=2*(i-1)-1; j++)//"2*i-1"为当前行的星号数// 
            cout << ' ';
            cout << '*';
        }
        
        cout << endl;//换行//
    }
}
目录
相关文章
|
2月前
|
安全 编译器 C语言
C++入门1——从C语言到C++的过渡
C++入门1——从C语言到C++的过渡
66 2
|
15天前
|
算法 编译器 C语言
【C语言】C++ 和 C 的优缺点是什么?
C 和 C++ 是两种强大的编程语言,各有其优缺点。C 语言以其高效性、底层控制和简洁性广泛应用于系统编程和嵌入式系统。C++ 在 C 语言的基础上引入了面向对象编程、模板编程和丰富的标准库,使其适合开发大型、复杂的软件系统。 在选择使用 C 还是 C++ 时,开发者需要根据项目的需求、语言的特性以及团队的技术栈来做出决策。无论是 C 语言还是 C++,了解其优缺点和适用场景能够帮助开发者在实际开发中做出更明智的选择,从而更好地应对挑战,实现项目目标。
43 0
|
2月前
|
C语言 C++
C 语言的关键字 static 和 C++ 的关键字 static 有什么区别
在C语言中,`static`关键字主要用于变量声明,使得该变量的作用域被限制在其被声明的函数内部,且在整个程序运行期间保留其值。而在C++中,除了继承了C的特性外,`static`还可以用于类成员,使该成员被所有类实例共享,同时在类外进行初始化。这使得C++中的`static`具有更广泛的应用场景,不仅限于控制变量的作用域和生存期。
65 10
|
3月前
|
算法 机器人 C语言
ROS仿真支持C++和C语言
ROS仿真支持C++和C语言
88 1
|
2月前
|
C语言 C++
实现两个变量值的互换[C语言和C++的区别]
实现两个变量值的互换[C语言和C++的区别]
24 0
|
4月前
|
编译器 Linux C语言
【C++小知识】为什么C语言不支持函数重载,而C++支持
【C++小知识】为什么C语言不支持函数重载,而C++支持
|
4月前
|
存储 编译器 C语言
C++内存管理(区别C语言)深度对比
C++内存管理(区别C语言)深度对比
85 5
|
5月前
|
程序员 编译器 C语言
云原生部署问题之C++中的nullptr相比C语言中的NULL优势如何解决
云原生部署问题之C++中的nullptr相比C语言中的NULL优势如何解决
55 10
|
6月前
|
存储 Linux C语言
c++进阶篇——初窥多线程(二) 基于C语言实现的多线程编写
本文介绍了C++中使用C语言的pthread库实现多线程编程。`pthread_create`用于创建新线程,`pthread_self`返回当前线程ID。示例展示了如何创建线程并打印线程ID,强调了线程同步的重要性,如使用`sleep`防止主线程提前结束导致子线程未执行完。`pthread_exit`用于线程退出,`pthread_join`用来等待并回收子线程,`pthread_detach`则分离线程。文中还提到了线程取消功能,通过`pthread_cancel`实现。这些基本操作是理解和使用C/C++多线程的关键。
|
6月前
|
C语言 图形学 C++