字母金字塔多重嵌套循环求思路。

ffff7474774 2011-06-13 01:51:34
让程序输入一个大写字母,是嵌套循环产生像下面这样的金字塔图案;

A
ABA
ABCBA
ABCDCBA
ABCDEDCBA

这种团要求扩展到用户输入的字符,例如,前面的图案是在输入E时需要产生的。提示:试用一个外部循环来处理行数,在每一行试用三个内不循环,一个处理空格, 一个升序打印字母,一个降序打印字母。



开始我是想从最底层开始写起,不过在我能想到的范围内我都想了底层的没有写出来。 然后我又想从中间开始写起。但写着写着觉得也不好写。想了两种头了还没想出来。求高人说下对于这样的循环编写的思路是什么……
...全文
1220 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
sheenfan 2013-01-15
  • 打赏
  • 举报
回复
#include <stdio.h> int main(void) { int row,col,i,j,space; char ch,letter='A'; printf("Please input letter(A-Z):\n"); scanf("%c",&ch); space=ch-letter; for(row=0;row<=space;row++) { for(col=0;col<space-row;col++) printf(" "); for(i=letter;i<=letter+row;i++) { printf("%c",i); } j='A'+row; while(--j>='A') { printf("%c",j); } printf("\n"); } return 0; }
sheenfan 2013-01-15
  • 打赏
  • 举报
回复
#include <stdio.h> int main(void) { int row,col,i,j,space; char ch,letter='A'; printf("Please input letter(A-Z):\n"); scanf("%c",&ch); space=ch-letter; for(row=0;row<=space;row++) { for(col=0;col<space-row;col++) printf(" "); for(i=letter;i<=letter+row;i++) { printf("%c",i); } j='A'+row; while(--j>='A') { printf("%c",j); } printf("\n"); } return 0; }
ffff7474774 2011-06-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 purplish 的回复:]
C/C++ code
#include <stdio.h>
#include <string.h>


int myprint(char *str, int n)
{
int i;
int j;

for(j = 0; j < (strlen(str) - n); j++){
printf(" ");
}

for(i = 0; i < n;……
[/Quote]

你的方法不行额……
Purplish 2011-06-13
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>


int myprint(char *str, int n)
{
int i;
int j;

for(j = 0; j < (strlen(str) - n); j++){
printf(" ");
}

for(i = 0; i < n; i++){
printf("%c", str[i]);
}

for(;i >= 0; i--){
printf("%c", str[i]);
}
printf("\n");
return 0;

}


int main()
{
char str[30];
int n;

scanf("%s", str);
for(n = 0; n < strlen(str); n++){
myprint(str, n);
}

return 0;
}


可行,但是总感觉有点苯。
xzl272372011 2011-06-13
  • 打赏
  • 举报
回复
额。我写的是小写的 如果字母是大写的把a 换成A就可以了
xzl272372011 2011-06-13
  • 打赏
  • 举报
回复
#include <stdio.h>


int main(void)
{
char str;
int i, j, m, n=0;
printf("请输入一个字母:");
scanf("%c", &str);
printf("**********\n");
int len = str - 'a';
char str1 = 'a';
for(i = len; i >= 0; i--) {

for(m=0;m<len-n;m++) printf(" ");
for(j = 'a'; j <= str1; j++) {
printf("%c", j);
}
for(j=str1-1; j>='a'; j--)
printf("%c", j);

if(str1 < str) {
str1++;
}else {
break;
}
n++;
printf("\n");
}
return 0;
}
qq120848369 2011-06-13
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

/*step1:存入数组*/

char arr[100][100]={0};

void putInArr(int height)
{
int longest=height*2-1;

for(int i=0;i<height;++i)
{
int m;

for(m=0;m<i;++m)
{
arr[i][m]='A'+m;
}

arr[i][m]='A'+m;

--m;

for(int n=m+2;m>=0;++n,--m)
{
arr[i][n]='A'+m;
}
}
}

int main()
{
putInArr(4);

for(int i=0;i<4;++i)
{
for(int j=0;j<(i+1)*2-1;++j)
{
printf("%c",arr[i][j]);
}

printf("\n");
}

return 0;
}
ylbhz 2011-06-13
  • 打赏
  • 举报
回复
#include <stdio.h>

int main(int argc, char* argv[])
{
char chr;
printf("Please input a character(A-Z):");scanf("%c", &chr);
if(chr > 'Z' || chr < 'A') return 0;

for(int i = 'A';i < chr + 1;i ++)
{
int line = i - 0x40;
for(int j = 0;j < chr - i;j ++) printf(" ");
for(int n = 'A';i - n < line && n - i < line;n ++) printf("%c", i - n < 0 ? i - (n - i) : n);
printf("\r\n");
}

return 0;
}
G18469486484135 2011-06-13
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <string.h>
#define N 27
#define MyFlush() getc(stdin)

int main(int argc, char *argv[])
{
char str_ord[N] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char str_tur[N] = "ZYXWVUTSRQPONMLKJIHGFGDCBA";

char check, *rec;
int loc, index;

rec = NULL;

while(1)
{
printf("Please input a character(A-Z):");

scanf("%c", &check);
MyFlush();
if(check >= 'A' && check <= 'Z')
{
loc = check - 'A';
for(index = 0; index <= loc; index++)
{
rec = &str_tur[N - index - 1];
printf("%.*s", index + 1, str_ord);
printf("%s\n", rec);
}
}

}
return 0;
}

参考了5L大哥的和以前见到的代码,尝试了下,这个是上三角,等腰的写法参考ls几位哥们的。。
ffff7474774 2011-06-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 anyidan 的回复:]
行数 字母数
0 1
1 3
2 5
。。。。。。。。。。。
i 2*i+1 第 i 个字符是中点
[/Quote]
你说的我还真木有看懂……
ffff7474774 2011-06-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhao4zhong1 的回复:]
C/C++ code
// A
// ABA
// ABCBA
// ABCDCBA
//ABCDEDCBA
#include <stdio.h>
#include <conio.h>
int n,h,s,i;
int main() {
while (1) {
printf("Please input a character(A-Z):")……
[/Quote]

你好,虽然代码能过去但是题目类型说只能用 for 循环出来。还有你的代码有些地方我还是看不懂的额。不是我刁钻,而是题目太刁钻。~~~~
ffff7474774 2011-06-13
  • 打赏
  • 举报
回复
111111A
11111ABA
1111ABCBA
111ABCDCBA
11ABCDEDCBA


发帖系统会自动的吧多余空格给去掉。 所以看的时候请无视掉 数字1
ffff7474774 2011-06-13
  • 打赏
  • 举报
回复
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA

发布的时候貌似 把图案的空格给去掉了自动
AnYidan 2011-06-13
  • 打赏
  • 举报
回复
行数 字母数
0 1
1 3
2 5
。。。。。。。。。。。
i 2*i+1 第 i 个字符是中点
赵4老师 2011-06-13
  • 打赏
  • 举报
回复
//    A
// ABA
// ABCBA
// ABCDCBA
//ABCDEDCBA
#include <stdio.h>
#include <conio.h>
int n,h,s,i;
int main() {
while (1) {
printf("Please input a character(A-Z):");
fflush(stdout);
rewind(stdin);
scanf("%c",&n);
if ('A'<=n && n<='Z') {
for (h=0;h<n-'A'+1;h++) {
for (s=n-'A'-h;s>0 ;s--) printf(" " );
for (i='A' ;i<'A'+h;i++) printf("%c",i);
for (i='A'+h ;i>='A' ;i--) printf("%c",i);
printf("\n" );
}
getch();
break;
}
}
return 0;
}

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧