注册 登录
编程论坛 C语言论坛

C Primer Plus第6章中的例题,请大佬指教一下,谢谢!

hyq1979 发布于 2021-04-25 22:27, 1738 次点击
#include <stdio.h>
int main(){
    int i ,j,num;
    char c ;
    printf("Enter the core char you want to print(A...Z):");
    scanf("%c" , &c);
    char ch = 'A';
    num = c - 'A' + 1;
    for (i = 1;i <= num ;i++) {
        for (j = 0;j < num - i ; j++)
            printf("");
        for (ch ='A'; j < num; j++)
            printf("%c" , ch++);
        /*在打印正序字符数时,需要通过ch做递增操作,起始值j在空格处已经通过循环做了初始化,因此只打印剩余字符数*/
        for (j = 1, ch-=2; j < i ; j++, ch--)
            printf("%c",ch);
        printf("/n");
    }
    return 0;
}
中间注释那段变量j没有在for (ch ='A'; j < num; j++)做初始化啊,难道之前的for (j = 0;j < num - i ; j++)中的j=0初始化能带到下面的for语句中?
6 回复
#2
hyq19792021-04-25 22:30
而且        for (j = 0;j < num - i ; j++)
            printf("");
这个for循环已经将j++,也并不是0啊。
#3
hyq19792021-04-25 23:45
#include<stdio.h>
int main(void)
{
    int i,j,number;
    char c,ch='A';
    printf("请输入一个大写字母:");
    scanf("%c",&c);
    number=c-'A'+1; //number为金字塔高度
    for(i=1;i<=number;i++) //比较i与number值,判断金字塔高度循环次数i
    {
        for(j=0;j<number-i;j++) //i同时为每层金字塔所需字符数,number-i即为每层金字塔所需空格数
        printf(" "); //打印每层空格数
        for(ch='A';j<number;j++) //首字母为A,number-j即为每层金字塔所需字符数
        printf("%c",ch++); //打印每层字符数
        for(j=1,ch-=2;j<i;j++,ch--) //i即为每层正序字符数,因为上段ch++多增1个字符,这里需要ch-=2,ch--逆序字符
        printf("%c",ch); //打印逆序字符
        printf("\n"); //
    }
    return 0;        
}
好吧,自己理解的,这个例题对于菜鸟来说还是有点难度。
#4
zbjzbj2021-04-26 09:17
#include <stdio.h>
int main(){
    int i ,j,num;
    ......
    ......
}

看见你定义的变量的生命周期了吗?
在main()函数中定义的,从同级的大括号起始有效,到与之配套的闭括号,以后才会失效。
变量在消失之前,他的值会一直存在。

[此贴子已经被作者于2021-4-26 10:18编辑过]

#5
rjsp2021-04-26 09:56
程序代码:
#include <stdio.h>

int main( void )
{
    char c;
    printf( "%s", "Enter the core char you want to print(A...Z): " );
    scanf( " %c", &c );

    for( char line='A'; line<=c; ++line )
    {
        printf( "%*s", c-line, "" );

        for( char i='A'; i!=line; ++i )
            putchar( i );
        for( char i=line; i>='A'; --i )
            putchar( i );

        putchar( '\n' );
    }
}
#6
夏天q2021-04-26 18:29
对于j不理解的话 可以改成下面形式
程序代码:
#include <stdio.h>
int main(void)
{
    char letter;
   
    printf("Please enter a capital letter.\n");
    scanf("%c", &letter);
   
    const int n = letter - 'A';
   
    int space, j, row;
    for(space = n, row = 0; space >= 0; space--, row++)
    {
        for(j = 0; j < space; j++)
        {
            printf(" ");
        }
        for(j = 0; j <= row; j++)
        {
            printf("%c", 'A' + j);
        }
        for(j = row; j > 0; j--)
        {
            printf("%c", 'A' + j - 1);
        }        
        printf("\n");
    }
    return 0;
}


[此贴子已经被作者于2021-4-26 18:31编辑过]

#7
apull2021-04-27 00:29
j是在main里定义的,在第2个for初始化了。初始化一次后,在之后的整个main里都是可以直接使用的。
如果j是在第2个for里定义的,那么他只能在第二个for的范围内使用。
1