输出金字塔字母的问题求教
/*我是新手,学习到循环这一章,做课后的编程习题,遇到些困难,请高手指点一下。论坛里也有金字塔的贴,不过情形不大一样。要求:比如输入字母E,形成金字塔排列。
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
需要用到一个外部循环控制行,三个内部循环,一个控制空格,一个控制字母升序输出,一个控制字母降序输出。
升序的没问题,降序要怎么写?我很久弄不好。注意:因为只学到循环一章,后面的分支跳转if等语句都不能用。只能用while或for语句。*/
#include<stdio.h>
#define totle 65 //字母A的ASC码值
int main(void)
{
int line;
char letter,ch,fh,rh;
printf("请输入一个大写字母:\n");
scanf("%c",&letter);
for(line=0;line<=(letter-totle);line++)
{
for(ch='A';ch<=('A'+line);ch++) //升序输出字母
printf("%c",ch);
for(fh=0;fh<line;fh++) //降序这个我知道写的不对,重复执行了。
{
for(rh=totle+line-1;rh-totle>=0;rh--)
printf("%c",rh);
}
printf("\n");
}
getch();
return 0;
}
/*因为要搞懂降序输出,空格循环还没写。*/
----------------解决方案--------------------------------------------------------
把你的改了下!现在可以实现了!
#include <stdio.h>
#include <stdlib.h>
int main()
{
int line,i;
char letter,ch;
printf("请输入一个大写字母:");
scanf("%c",&letter);
for(line=0;line<=letter-'A';line++)
{
for(i=0;i<letter-'A'-line;i++)
printf(" ");
for(ch='A';ch<=('A'+line);ch++) //升序输出字母
printf("%c",ch);
ch-=2;
while(ch!='A'-1)
printf("%c",ch--);
printf("\n");
}
system("pause");
return 0;
}
----------------解决方案--------------------------------------------------------
非常感谢,我会好好研究一下你写的程序。
看似很简单,可是我脑子就是转不过弯来。
----------------解决方案--------------------------------------------------------
2楼不是用tc编的吧
----------------解决方案--------------------------------------------------------
用的dev c++,所以用了system("pause");暂停!
----------------解决方案--------------------------------------------------------
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define totle 65 //字母A的ASC码值
int main(void)
{
int line;
char letter,ch;
int j;
printf("请输入一个大写字母:");
scanf("%c",&letter);
for(line=0;line<=letter-totle;line++)
{
j=line;
for(int i=0;i<letter-'A'-line;i++)
printf(" ");
for(ch='A'+abs(j);ch<=('A'+line);) //升序输出字母
{
printf("%c",ch);
j =j-1;
ch='A'+abs(j);
}
printf("\n");
}
for(line=letter-totle-1;line>=0;line--)
{
j=line;
for(int i=0;i<letter-'A'-line;i++)
printf(" ");
for(ch='A'+abs(j);ch<=('A'+line);) //降序输出字母
{
printf("%c",ch);
j=j-1;
ch='A'+abs(j);
}
printf("\n");
}
getch();
return 0;
}
这样也可以了
----------------解决方案--------------------------------------------------------
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(){
int m,n,i,j;
do scanf("%c",&n);while(!isalpha(n));
n=toupper(n)-'A';m=(n<<1)+1;
for(i=0;i<=n;i++,putchar('\n'))
for(j=0;j<m;j++)
putchar(abs(i-n)+abs(j-n)>n?' ':'A'+i-abs(j-n));
system("pause");
}
我的答案。#include <stdlib.h>
#include <ctype.h>
int main(){
int m,n,i,j;
do scanf("%c",&n);while(!isalpha(n));
n=toupper(n)-'A';m=(n<<1)+1;
for(i=0;i<=n;i++,putchar('\n'))
for(j=0;j<m;j++)
putchar(abs(i-n)+abs(j-n)>n?' ':'A'+i-abs(j-n));
system("pause");
}
[[italic] 本帖最后由 StarWing83 于 2007-12-28 13:43 编辑 [/italic]]
----------------解决方案--------------------------------------------------------
你得代码很简练
----------------解决方案--------------------------------------------------------
回复 7# 的帖子
<stdlib.h><ctype.h>
这两个头文件我还没学到。
----------------解决方案--------------------------------------------------------
stdlib.h这个其实是为了那个system,暂停用的,
ctype.h是为了那个isalpha,就是判断输入是不是字符
还有一个abs,这个应该知道吧?
----------------解决方案--------------------------------------------------------