题目
利用for循环打印以下图案
我的思路
这个图案大致分为两部分,一部分是不变的下划线循环打印,一部分是连续的字母。
那么就可以拆解为两个问题:1、如何根据循环次数打印重复的下划线,即第n次循环就打印“n-1”条下划线? 2、如何根据循环次数打印连续字母?
解决:1、外层循环控制总的循环次数,内层循环根据当前循环次数确定要输出的下划线数量。即外层i=1;i<=n;i++和内层j=1;j<=i;j++(大概是这样的形式) 2、根据ASCII码表发现F是70,E等字母逐渐-1,printf(“%c”,70-j)(大概形式),也就是把字母转换成数值输出就行
我的代码
#include<stdio.h>
int main(){
int i,j;
for(i=1;i<=7;i++){
for(j=1;j<=i-2;j++){
if(i>=3){
printf("_");//循环打印下划线
}
}
for(j=1;j<=i-1;j++){
printf("%c",70-j+1);//循环打印字母
}
printf("\n");
}
return 0;
}
改进的代码
#include <stdio.h>
int main(int argc, char *argv[])
{
int i, j;
char ch = 'F';
printf("please input char:"); //输入一个字符,然后每一行依次递减输出
scanf("%c", &ch);
for (i = 0; i <= ch - 'A' ; i++) {
for(j = 0; j < i; j++)
putchar('_');
for(j = 0; j <= i; j++)
putchar(ch-j);
putchar('\n');
}
return 0;
}
经验
1、以前没有试过一个外循环套两个内循环(for循环)的形式,所以一开始没想到
2、一开始都想到“几次循环就打印几条下划线了",但是还是没想到用
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
这个循环形式,记住这种循环就是:外层循环控制总的循环次数,内层循环根据当前循环次数确定要输出的下划线数量。
3、编程问题很多都是需要把问题转化为数值问题,比如这里字母问题转化为ASCII码值问题。
4、下次还应该从问题里发现更多的规律,其实这里还隐含着一个规律就是打印的行数跟最大字母和最小字母的差值有关
5、打印字符还是用putchar()好一点,以后要习惯用这个函数
6、如果循环打印的数量等不对,除了用在for循环里用if控制,还可以直接修改for循环的循环条件,修改循环条件的数目