C Primer加上第6章练习3

时间:2013-01-23 10:26:57

标签: c

他们要求打印的内容:

F
FE
FED
FEDC
FEDCB
FEDCBA

我能够打印:

F
FF
FFF
FFFF
FFFFF

使用此代码:

int main()
{
    int count, count2;

    char letterToPrint = 'F';

    for (count = 0; count < 5; count++)
    {
        for (count2 = 0; count2 <= count; count2++)
        {
            printf("%c", letterToPrint);
        }
        printf("\n");
    }
}

我可以在第二个for循环中添加一些内容来打印上一个字母然后递减它,还是会再次循环?

8 个答案:

答案 0 :(得分:5)

请记住,C中的字符(两个字符文字,例如'F'char类型)都是正常的整数值,因此您可以使用它们执行常规算术,例如从'F'循环到'A'

像这样:

for (int i = 'F'; i >= 'A'; i--)
{
    for (int c = 'F'; c >= i; c--)
        printf("%c", c);
    printf("\n");
}

答案 1 :(得分:3)

您只需要在内循环中更改letterToPrint的值,并在外循环开始时重置它:

int main()
{
    int count, count2;
    for (count = 0; count < 5; count++)
    {
        char letterToPrint = 'F'; // MOVED
        for (count2 = 0; count2 <= count; count2++)
        {
            printf("%c", letterToPrint--);
            //                        ^^
        }
        printf("\n");
    }
}

答案 2 :(得分:3)

只需将printf("%c", letterToPrint);更改为printf("%c", letterToPrint - count);

即可

你应该使用putchar而不是printf,但是给予:
 putchar(letterToPrint - count);

答案 3 :(得分:2)

只是为了它:

for(int i = 20; i >= 0 ; i-=4)
{
    printf("%X\n", 0xFEDBCA >> i);
}

答案 4 :(得分:1)

您甚至可以针对任何角色推广此解决方案,因为您要打印的行数是 的(INT)( 'F' - 'A')

void printCharPattern(char startChar)
{
int count, count2;
char letterToPrint = starChar;
int no_of_lines = (int)startChar-(int)'A'+1;

for (count = 0; count < no_of_lines; count++)
{   
    letterToPrint = start_char;
    for (count2 = 0; count2 <= count; count2++)
    {
        printf("%c", letterToPrint--);
    }
    printf("\n");
}
}

答案 5 :(得分:0)

在内循环中减少letterToPrint并在外循环中初始化它。

答案 6 :(得分:0)

声明另一个char differLetter 在第一个for循环之后说differeLetter = laterToPrint printf differLetter而不是laterToPrint

答案 7 :(得分:0)

如果给定的字母是'G'或'Z'?更通用的算法

#include <stdio.h>

int main() {
  char letter = 'F';

  int i=0,j;
  do {
    for (j=0 ; j<=i ; j++) printf("%c", letter-j);
    printf("\n");
  } while (letter-i++ > 'A');

  return 0;
}