首页 新闻 会员 周边 捐助

关于C primer Plus

0
悬赏园豆:40 [已解决问题] 解决于 2015-07-24 15:47

让程序要求用户输入一个大写字母,使用嵌套循环产生像下面这样的金字塔图案:

    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的嵌套循环

资深呆的主页 资深呆 | 初学一级 | 园豆:37
提问于:2015-07-23 18:34
< >
分享
最佳答案
0

1. 不是,相当于数值计算了,计算出用户输入的是第几个大写字母,字符有对应的ASCII编码,这里的'A'就可以直接看成数字了;

2. 我初学编程时,看for循环是通过这样的方式的(比较傻逼的方式):按照for循环的执行流程,把值一个一个带入进入算,一步一步走,把这些写在纸上。纸上写过之后,把这个过程再用脑袋跟着代码模拟走,直到自己晕了,休息一下再重来,直到不晕,然后发现自己看到for循环不晕了。(忘了回答了,这就是嵌套了两层for循环,从外层开始。i=0,进入到内层,执行内层的第一个for,再执行内层的第二个for循环,再执行内层的第三个for循环,完了;开始i=1...........)

收获园豆:40
liqipeng | 小虾三级 |园豆:1160 | 2015-07-23 19:15

按照你的思路,基本已经明白它的循环原理了,还有一个小小的问题是:我想要让它能持续输入下一个内容,应该要怎么做

资深呆 | 园豆:37 (初学一级) | 2015-07-24 15:46

@振宁:是不是输出一个三角形后可以继续接受用户输入?

简单点直接用一个 while(true) {   你的代码   } 包裹起来就行了,就是加了一个死循环在外面。

liqipeng | 园豆:1160 (小虾三级) | 2015-07-24 16:46
其他回答(2)
0

1. C语言中是将字符类型作为整数参与计算的,因此不存在“字符计算”这一说法,所有的char类型的计算都是整数计算。

2. 可以像楼上一样动手把每一次循环过程的变量写下来,或者用IDE调试的时候去设置断点或逐行调试

飞鸟_Asuka | 园豆:393 (菜鸟二级) | 2015-07-24 11:00
0

1. 这个计算 其实是使用acsii码 进行的数值计算,  而且语言中不存在“字符计算” , 所有的char 都是使用整数计算

2. 关于for循环嵌套,是按照 () 中的条件进行一条条判断,去执行for的结构体, 关于你第10行的for是包含下边三个for循环的, 因此第一个运行1次,下变三个都需要利便, 你可以采用 IDE 提供的调试进行测试

Rocky_Ansi | 园豆:210 (菜鸟二级) | 2015-07-24 12:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册