【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;//换行//
	}
}
  • 15
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 我可以为您提供一个示例,用来输出实心菱形:#include <iostream> using namespace std; int main() { int i, j, rows; cout << "输入行数:"; cin >> rows; for(i=1; i<=rows; i++) { for(j=1; j<=rows-i; j++) { cout << " "; } for(j=1; j<=2*i-1; j++) { cout << "*"; } cout << "\n"; } for(i=rows-1; i>=1; i--) { for(j=1; j<=rows-i; j++) { cout << " "; } for(j=1; j<=2*i-1; j++) { cout << "*"; } cout << "\n"; } return 0; } ### 回答2: C++语言中可以使用循环结构和条件判断来输出实心菱形,具体代码如下: ```cpp #include <iostream> int main() { int n; std::cout << "请输入菱形的边长(奇数):"; std::cin >> n; for (int i = 0; i <= n; i++) { // 输出上半部分的菱形 for (int j = 0; j < n - i; j++) { std::cout << " "; } for (int j = 0; j < 2 * i - 1; j++) { std::cout << "*"; } std::cout << std::endl; } for (int i = n - 1; i >= 0; i--) { // 输出下半部分的菱形 for (int j = 0; j < n - i; j++) { std::cout << " "; } for (int j = 0; j < 2 * i - 1; j++) { std::cout << "*"; } std::cout << std::endl; } return 0; } ``` 上述代码先要求用户输入一个奇数边长n,然后使用两个嵌套的循环结构来输出菱形的每一。第一个循环用于输出上半部分的菱形,从第一到第n;第二个循环用于输出下半部分的菱形,从第n到倒数第一。在循环中,通过在每一输出一定数量的空格和星号来构成菱形的图案。 ### 回答3: 要使用cout语句输出实心菱形,可以使用循环来实现。以下是一个示例代码: ```cpp #include <iostream> using namespace std; int main() { int num; cout << "请输入菱形行数:"; cin >> num; // 获取输入行数 // 输出上半部分的菱形 for (int i = 1; i <= num; i++) { // 输出的空格 for (int j = 1; j <= num - i; j++) { cout << " "; } // 输出的星号 for (int k = 1; k <= 2 * i - 1; k++) { cout << "*"; } cout << endl; } // 输出下半部分的菱形 for (int i = num - 1; i >= 1; i--) { // 输出的空格 for (int j = 1; j <= num - i; j++) { cout << " "; } // 输出的星号 for (int k = 1; k <= 2 * i - 1; k++) { cout << "*"; } cout << endl; } return 0; } ``` 此代码通过两个循环来输出菱形的各,第一个循环输出上半部分的菱形,第二个循环输出下半部分的菱形。每的空格数量和星号数量呈规律递增或递减。输出结果将会是一个实心菱形
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

南蓬幽

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

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

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

打赏作者

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

抵扣说明:

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

余额充值