如何用C语言for循环控制输出字母组成的等腰三角形,如:输入D,输出: A ABA ABCBA ABCDCBA
1个回答
展开全部
#include <stdio.h>
#include <math.h>
int main() {
char max = '\0';
int i = 0, j = 0, m = 0;
puts("请输入A~Z");
scanf("%c", &max);
if (max >= 'A' && max <= 'Z') {
m = max - 'A';
/* 输入A时 m = 0,输入B时 m = 1 …… */
puts("-------------------------------------------");
for (i = 0; i <= m; i++) {
for (j = 0; j < m - i; j++) {
printf(" ");
}
for (j = 0; j <= i; j++) {
printf("%c", 'A' + j);
}
for (j = i - 1; j >= 0; j--) {
printf("%c", 'A' + j);
}
printf("\n");
}
puts("-------------------------------------------");
for (i = 0; i <= m; i++) {
for (j = 0; j <= m + i; j++) {
if (j < m - i) {
printf(" ");
} else {
printf("%c", (char)(max - fabs(m - j)));
}
}
printf("\n");
}
puts("-------------------------------------------");
} else {
puts("输入内容有误");
}
return 0;
}
纯数学计算而已
-------------------------
哦,我这写的是你正文中的,标题那个等我写给你
更多追问追答
追问
能不能给我讲讲解题思路,还有,能不能不用math.h,我们还没学到用math
追答
math.h 可以不用,主要用到的是绝对值计算。不用的话,可以用if来判断,你看懂下面思路的话,可以自己试着把第二部分的fabs改成if判断好了。
思路是这样的,两道题目是不同的
第一个题目分析一下,是有三个部分的,假设m已经输入,把它转换成以下数字:A:0 B:1 C:2 D:3 这样每个数字变成字母就是 'A' + 3 = 'D' 这样的关系,所以题目就变成了,输入一个m=3,输出
---0
--010
-01210
0123210
这样的结果
首先对每一行进行循环,就是 i 循环,每个循环分为3部分:
1) 输出 m - i 个空格;
2) 正向输出[0 .. i]的值,包括0和i(还记得刚才说的0是A吧)
3) 反向输出[i-1 .. 0]的值,包括i-1和0
然后一行输出完成了,printf("\n") 换行就行了
第二个题目和第一个题目看起来相似,其实是不同的,不同点在于:其实每一行都是同样的字母排列,都是0123210,只不过按照三角形的位置,有的点显示,有的点不显示。那么只需要先找到生成这个数列0123210的方法,然后再用条件控制他们是显示数字还是显示空格就行了
生成数列的方法很简单,设 j 是从0到2*m的自变量,数列值就是 v = m - | m - j |。这样当jm 的时候 v=2*m - j
控制是否输出的判断就更简单了,当 j m+i 时不显示,输出空格,否则就显示数列值
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询