标题:C Primer Plus第6章中的例题,请大佬指教一下,谢谢!
只看楼主
hyq1979
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2021-4-25
结帖率:0
已结贴  问题点数:20 回复次数:6 
C Primer Plus第6章中的例题,请大佬指教一下,谢谢!
#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语句中?
搜索更多相关主题的帖子: Primer for num printf 初始化 
2021-04-25 22:27
hyq1979
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2021-4-25
得分:0 
而且        for (j = 0;j < num - i ; j++)
            printf("");
这个for循环已经将j++,也并不是0啊。
2021-04-25 22:30
hyq1979
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2021-4-25
得分:0 
#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;        
}
好吧,自己理解的,这个例题对于菜鸟来说还是有点难度。
2021-04-25 23:45
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:620
专家分:3020
注 册:2011-4-22
得分:5 
#include <stdio.h>
int main(){
    int i ,j,num;
    ......
    ......
}

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

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

2021-04-26 09:17
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:5 
程序代码:
#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' );
    }
}
2021-04-26 09:56
夏天q
Rank: 4
来 自:七月
等 级:业余侠客
威 望:5
帖 子:33
专家分:227
注 册:2021-4-4
得分:5 
对于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编辑过]

2021-04-26 18:29
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:5 
j是在main里定义的,在第2个for初始化了。初始化一次后,在之后的整个main里都是可以直接使用的。
如果j是在第2个for里定义的,那么他只能在第二个for的范围内使用。
2021-04-27 00:29



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-505577-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.239493 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved