让程序要求用户输入一个大写字母,使用嵌套循环产生像下面这样的金字塔图案:
A
ABA
ABCBA
ABCDCDA
ABCDEDCBA
这种图案要扩展到用户输入的字符。例如,前面的图案是在输入E时需要产生的。提示:使用一个外部循环来处理行,在每一行中使用三个内部循环,一个处理空格,一个以升序打印字母,一个以降序打印字母。如果您的系统不使用ASCII或类似的以严格数字顺序表示字母的编码,请参见在编程练习3中
1 #include<stdio.h> 2 3 int main(void) 4 { 5 int i,j,k; 6 char letter; 7 printf("Please input a capital:"); 8 scanf("%c",&letter); 9 k=letter-'A'+1; 10 for(i=0;i<k;i++) 11 { 12 for(j=0;j<k-i;j++) printf(" "); 13 for(j=0;j<=i;j++) printf("%c",'A'+j); 14 for(j=i-1;j>=0;j--) printf("%c",'A'+j); 15 printf("\n"); 16 } 17 return(0); 18 }
问题一:k=letter-'A'+1 是否是字符运算
问题二:如何理解for的嵌套循环
1. 不是,相当于数值计算了,计算出用户输入的是第几个大写字母,字符有对应的ASCII编码,这里的'A'就可以直接看成数字了;
2. 我初学编程时,看for循环是通过这样的方式的(比较傻逼的方式):按照for循环的执行流程,把值一个一个带入进入算,一步一步走,把这些写在纸上。纸上写过之后,把这个过程再用脑袋跟着代码模拟走,直到自己晕了,休息一下再重来,直到不晕,然后发现自己看到for循环不晕了。(忘了回答了,这就是嵌套了两层for循环,从外层开始。i=0,进入到内层,执行内层的第一个for,再执行内层的第二个for循环,再执行内层的第三个for循环,完了;开始i=1...........)
按照你的思路,基本已经明白它的循环原理了,还有一个小小的问题是:我想要让它能持续输入下一个内容,应该要怎么做
@振宁:是不是输出一个三角形后可以继续接受用户输入?
简单点直接用一个 while(true) { 你的代码 } 包裹起来就行了,就是加了一个死循环在外面。
1. C语言中是将字符类型作为整数参与计算的,因此不存在“字符计算”这一说法,所有的char类型的计算都是整数计算。
2. 可以像楼上一样动手把每一次循环过程的变量写下来,或者用IDE调试的时候去设置断点或逐行调试
1. 这个计算 其实是使用acsii码 进行的数值计算, 而且语言中不存在“字符计算” , 所有的char 都是使用整数计算
2. 关于for循环嵌套,是按照 () 中的条件进行一条条判断,去执行for的结构体, 关于你第10行的for是包含下边三个for循环的, 因此第一个运行1次,下变三个都需要利便, 你可以采用 IDE 提供的调试进行测试