[C语言]输出图形:从键盘输入一个正整数n(代表正三角的层数),打印如下图形。注意中间一行左侧不留空白。

经典例题:从键盘输入一个正整数n(代表正三角的层数),打印如下图形。注意中间一行左侧不留空白

例:

输入:4

输出:如下

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

基本逻辑:循环嵌套

一共有两种实现方法:

1.将图形分为两部分:前四行 和 后三行

2.将图形分为三部分:即前三行 中间一行 后三行

(由于基本语法和逻辑无太大区别,这里我们拿第一种情况来解答)

首先是代码基础部分如下:包括头文件和需要的变量,这里输入变量设为 x

#include <stdio.h>
#include <stdlib.h>
int main() {
	int i, j ,m, n, p, q,x;
	scanf("%d",&x);

然后我们来实现图形的第一部分

	for(i=1;i<=x;i++){
		for(j=x-i;j>0;j--){
			printf(" ");
		}
		for(m=1;m<=2*i-1;m++){
			printf("*");
		}
		printf("\n");
	}

总循环为行数:其包含两个分支:1.空格 2.星号

在第一层分支中,找出空格数量与输入变量x和行数的关系,显然为一个递减的等差数列,所以用到 j - - ,因为 任何数减去0都为0,所以直接写就好

在第二层分支中,找出星号数量与行数的关系,显然也为等差递减数列,由于星号是从小到大数来打印,所以与上一分支逻辑相反,这里条件为小于等于2*i-1,m++,且从1开始

然后我们来实现第二部分

	for(n=1;n<=x-1;n++){
		for(p=0;p<n;p++){
			printf(" ");
		}
		for(q=2*x-1-2*n;q>0;q--){
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

同理,总循环为行数,

总体思路大同小异,不再赘述,

第一分支,为空格但不同的是逐级增加,空格数量与行数相关,所以p=0;p<n(误区:星号右面的空格并没有做要求,所以无需打印即可做到题目中的效果)

第二分支,找出星号数量与行数和输入变量的数列,同理,逐级递减 的 逻辑思想

综上,最终代码为:

#include <stdio.h>
#include <stdlib.h>
int main() {
	int i, j ,m, n, p, q,x;
	scanf("%d",&x);
	for(i=1;i<=x;i++){
		for(j=x-i;j>0;j--){
			printf(" ");
		}
		for(m=1;m<=2*i-1;m++){
			printf("*");
		}
		printf("\n");
	}
	for(n=1;n<=x-1;n++){
		for(p=0;p<n;p++){
			printf(" ");
		}
		for(q=2*x-1-2*n;q>0;q--){
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

如果对你有帮助,请点一个赞,万分感谢QWQ 

  • 18
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值