分享一道作业题221102

题目:输入一个正整数n作为行数,要求输出n行字符构成的图形。例如,输入4,输出如下图形:

                                                A

                                              BBB

                                           CCCCC

                                         DDDDDDD

下面我们简单梳理一下编写程序的思路:

1)输入空格,且空格数随行数增多而递减1;

2)输入字母,输入字母数随行数增多而递增2,字母ASCII码值随之递增1;

3)换行

而且分析得知1)、2)、3)步骤应该是多次循环,且循环次数已知,故用for语句进行编写:

#include <stdio.h>
int main()
{
	int n,i,i1,j,row;//n行数,i输入空格数,j输入字母数 
	int ASCII=65;
	
	scanf("%d",&n);
	i=n;
	for (row=1;row<=n;row++,i--,ASCII++){    
		for(i1=1;i1<=i;i1++){                //1*
			printf(" ");
		}
		for(j=1;j<=2*row-1;j+=1){            //2*
			printf("%c",ASCII);
		}
		printf("\n");
	}
	
		return 0;
}

易错:这里要说明一个很容易错的地方。可以看到//1*、//2*语句中分别在for的语句1中加入了i1=1和j=1,这里不可以仅在初始的时候分别赋值i、j等于1,因为随着循环进行,i1++和j++的过程中,i1的值和j的值已经发生改变不在为1,所以在进行for循环体语句之前要重新赋值i1、j等于1。

此外,我的一个室友(大家可以叫他“小帅”)还分享给我一道类似的题目:

       

因为我是先做过上面的题目,所以在他分享给我这道题是我的思路还是很清晰的:

1)空格输入:字母前的空格从39个递减,字母中间的空格从1开始以2为公差递增;               

2)字母输入:前部空格+字母+中部空格+字母,字母改变规律同上;                                     

3)换行                                                           

1.但这里需要注意的是我们输入的是字母而不再是数字,所以要先用char定义来储存输入值 

2.第一行和最后一行是特殊的,要么用if语句进行编写,要么在循环前后分别输出(此处为了编写“美观”,就用if语句编写了)

我的作答如下:

#include <stdio.h>
int main()
{
	int n,i=39,i1,j,row,ASCII=65;//n:行数,i(字母前)空格数,j(中间空格数) 
	char word;
	
	scanf("%c",&word);
	n=word-64;
	
	for (row=1;row<=n;row++,i--,ASCII++) {
		for (i1=1;i1<=i;i1++) {
			printf(" ");
		}
		if (row==1) {                    //第一行
			printf("%c\n",ASCII);
		} else if (row==n) {             //最后一行
			for (n=n*2-1;n>0;n--) {
				printf("%c",ASCII);
			}
		} else {                         //中间行
			printf("%c",ASCII);
			for (j=1;j<=2*(row-1)-1;j++) {
				printf(" ");
			}
			printf("%c\n",ASCII);
		}
	}
		
	return 0;
}

可以看到,我是先把第一行和最后一行的情况说明,中间则用else代替。分情况编写就使这道题变得很简单了~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值