2010-11-30 56 views
0

我是C编程的新手,在编程练习时遇到了一些困难,我敢肯定这对任何知道C的人都很简单,不幸的是你必须按照练习。帮助一个简单的C编程练习

这里的练习:

有一个程序,要求用户输入 一个大写字母。使用嵌套循环 产生金字塔状 这样的:

A 

    ABA 

    ABCBA 

ABCDCBA 

ABCDEDCBA 

的模式应该扩展到 输入的字符。例如, 前面的模式将由E的 输入值产生。提示:使用外部 循环来处理行。在一行中使用三个 内部循环,一个用于处理 空格,一个用于按升序打印字母 ,另一个用于打印降序顺序的字母 。

所以我能走到今天:

#include <stdio.h> 

int main(void) { 

int rows; 
int spaces; 

char asc; 
char desc; 
char input; 

printf("Please enter an uppercase letter: "); 
scanf("%c", &input); 

for (rows = 'A'; rows <= input; rows++) { 
    for (spaces = input; spaces > rows; spaces--) { 
    printf(" "); 
    } 
    for (asc = 'A'; asc <= rows; asc++) { 
    printf("%c", asc); 
    } 
    for (desc = asc - 2; desc >= rows; desc--) { 
    printf("%c", desc); 
    } 
    printf("\n"); 
} 
return 0; 
} 
+5

什么是你的问题? – 2010-11-30 05:58:21

回答

5

你是非常接近:

for (desc = asc - 2; desc >= 'A'; desc--) { 

注意,第二内环后,ascrows + 1。然后,您将desc初始化为rows - 1。你应该能够明白为什么>= rows是错误的,并且不会导致迭代。

正确的条件是简单的>= 'A'

+0

哇,这很痛苦。多谢,伙计。一直在看那条该死的线约一个小时。 – Corey 2010-11-30 06:03:56

+0

@Corey:如果这回答了你的问题,请点击勾号轮廓把它变成绿色,并给Matthew这个荣誉。 – 2010-11-30 07:13:35

-1
#include <stdio.h> 
#include <string.h> 
#define ROW 6 

int main() { 

    char let = '\0', ch; 
    int row; 

    scanf("%c", &let); 
    for (row = 0; row <= ROW; row++) { 
    for (ch = let; let > (ch + row); --ch) { 
     for (ch = let; let < (ch + row); ++ch) { 
     printf("%c", ch); 
     } 
     // ch = let; 
     printf("\n"); 
    } 
    } 
    return 0; 
} 

任何意见或修正将高度赞赏..我也是一个新的 //学习者;)