关于 C 语言的一个问题,希望懂的可以回答一下(初学者拜谢) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
loveis0
V2EX    程序员

关于 C 语言的一个问题,希望懂的可以回答一下(初学者拜谢)

  •  
  •   loveis0 2015-09-10 20:30:51 +08:00 4414 次点击
    这是一个创建于 3735 天前的主题,其中的信息可能已经有所发展或是发生改变。
    int main (int argc, const char * argv[]) {
    // for (int c = 0; c < 5; c++) {
    // for (int n = 0; n < 3; n++) {
    // printf (" ");
    // }
    // }
    int count = 0;
    for (int i = 1; i <= 9; i++) {
    printf (" %c",count );
    for (int j = 1; j <= i; j++) {
    printf ("%c%i*%i=%i\t",count,j,i,i*j );
    }
    printf ("\n");
    count++;
    }
    return 0;
    }


    代码在上面,但是敲了半天实在是琢磨不出来。

    我想把 99 乘法表像以下这行代码这样实现出来,像一座山一样。

    int main (int argc, const char * argv[]) {
    // int count = 0;
    for (int i = 0; i < 7; i++) {
    for (int j=i; j < 7; j++) {
    printf (" ");
    }
    for (int n=0; n <= i*2; n++) {
    printf ("*");
    }
    printf ("\n");
    // count++;
    }
    return 0;
    }

    因为我是初学者,所以搞不太懂哪里没做对,麻烦懂的人,亲切回答一下。。。
    27 条回复    2015-09-12 12:52:02 +08:00
    zodiac1111
        1
    zodiac1111  
       2015-09-10 21:02:33 +08:00
    我也不懂,但是代码如果格式化一下,应该会有更多人愿意看看.
    vixvix
        2
    vixvix  
       2015-09-10 21:43:37 +08:00
    我试了试,能跑... 你出啥问题了?
    loveis0
        3
    loveis0  
    OP
       2015-09-10 22:10:21 +08:00
    @vixvix 不是能不能跑的问题,我上面说了呀,想要代码 1 类似于代码 2 那样,输出成一个形状。。。。一座山那样。。。。就需要把最前面的空格,依次递减。。但是就是不知道怎么继续做了。。。
    ho121
        4
    ho121  
       2015-09-10 22:19:04 +08:00 via Android
    为什么是%c
    CodeCaker
        5
    CodeCaker  
       2015-09-10 22:20:33 +08:00
    没具体看你的代码。你可以参考一下 printf ("%Ns", str );printf ("%-Ns", str );......这类格式。
    CRVV
        6
    CRVV  
      &nbs;2015-09-10 22:23:52 +08:00   1
    zonyitoo
        7
    zonyitoo  
       2015-09-10 22:27:44 +08:00
    完全没懂你到底要实现什么
    sharpkingdom
        8
    sharpkingdom  
       2015-09-10 22:32:52 +08:00   1
    #include <stdio.h>
    int main (int argc, const char * argv[]) {

    int count = 0;
    int i = 1;
    for (; i <= 9; i++) {
    //printf (" %c",count );
    int j = 1;
    int k = 0;
    for (;k<(9-i );k++){
    printf (" ");
    }
    for (; j <= i; j++) {
    printf ("%i%i*%i=%i ",count,j,i,i*j );
    }
    printf ("\n");
    count++;
    }
    return 0;
    }


    你看上面代码的结果是不是你想要的。
    我是在线编译调试的, https://ganquan.info/g++-compiler/
    大家想编译的话可以使用上面的网址。
    Strikeactor
        9
    Strikeactor  
       2015-09-10 22:36:26 +08:00
    你要不试试从最后一排开始算,算出一排存一排,最后一起输出
    空格数累加,下层字符数减去上层字符数除二就是上层前面需要多加的空格
    sharpkingdom
        10
    sharpkingdom  
       2015-09-10 22:39:05 +08:00
    ```c
    #include <stdio.h>
    int main (int argc, const char * argv[]) {

    int count = 0;
    int i = 1;
    for (; i <= 9; i++) {
    int j = 1;
    int k = 0;
    for (;k<(9-i );k++){
    printf (" ");
    }
    for (; j <= i; j++) {
    printf ("%i%i*%i=%2i ",count,j,i,i*j );
    }
    printf ("\n");
    count++;
    }
    return 0;
    }
    ```

    上面这个版本貌似对齐了都。关键不在于什么空格依次递减,如何对齐我觉得是关键。
    kokutou
        11
    kokutou  
       2015-09-10 23:31:00 +08:00 via Android
    @CRVV 吊吊吊。。。真的是好无聊啊。。。。
    wezzard
        12
    wezzard  
       2015-09-10 23:34:44 +08:00
    想起一笑:「各位高手,我在上找到一段 python 源代,格式已失了,能我原一下?」
    loveis0
        13
    loveis0  
    OP
       2015-09-10 23:40:10 +08:00
    @sharpkingdom 已感谢!!!就是要的是这样的效果。不过每个方程前面多了一个数字=。=我才看到,现在去研究下怎么实现的。。。谢谢高手!!!
    loveis0
        14
    loveis0  
    OP
       2015-09-10 23:43:01 +08:00
    @ho121 因为我是初学者不太懂,我以为空格这种符号要用%c ,因为%i 不是表示数字吗?
    @CodeCaker 你楼下的那位 @sharpkingdom 同志看懂了我的代码,你可以复制下他的看看,应该可以明白我的意思。。。
    @CRVV 我就是觉得有趣=。=谢谢
    @Strikeactor 作为一个初学者,你光这样说我也不太懂。。。。
    10iii
        15
    10iii  
       2015-09-10 23:45:53 +08:00   1
    int main (int argc, const char * argv[]) {

    int count = 0;
    for (int i = 1; i <= 9; i++) {
    for (int x = (9-count );x>0;x--) printf ("\t");
    for (int j = 1; j <= i; j++) {
    printf ("%i*%i=%i\t",j,i,i*j );
    }
    printf ("\n");
    count++;
    }
    return 0;
    }
    loveis0
        16
    loveis0  
    OP
       2015-09-10 23:45:55 +08:00
    @sharpkingdom 谢谢,为了我无聊的想法,您辛苦了。要是方便的话可以请您代码每行上加一些注释吗?当然如果不方便就不浪费时间了。只不过我是初学者,很想知道您每一步的具体思维是怎么想的。
    loveis0
        17
    loveis0  
    OP
       2015-09-10 23:52:33 +08:00
    @10iii 神了!!!就是这个!!完美!!!
    loveis0
        18
    loveis0  
    OP
       2015-09-10 23:55:16 +08:00
    @10iii 求注释每一步的思维方式可以吗 QAQ 。。。当然如果不方便请随意。。。
    10iii
        19
    10iii  
       2015-09-11 00:04:08 +08:00
    每行输出前面空上一些格子就好了,算算好空个字符就行了,我用了 tab 偷懒,结果是在有些环境中打印出来的结果可能不是金字塔形,取决于环境对于 tab 的定义是几个空格。
    loveis0
        20
    loveis0  
    OP
       2015-09-11 00:12:24 +08:00
    @10iii 恩好的我会好好研究下的。。。谢谢。。。
    Tedko
        21
    Tedko  
       2015-09-11 00:23:03 +08:00
    知道 ascii 麽= =。。 c 里面类型,如果你用 int 填%c 的话会当做 ascii 处理吧。。。
    http://www.jisuanke.com/course/2
    loveis0
        22
    loveis0  
    OP
       2015-09-11 00:25:42 +08:00
    @Tedko 嘿嘿,不太清楚。。。对电脑技术很感兴趣,可编程确实是才学没多久。。。
    Strikeactor
        23
    Strikeactor  
       2015-09-11 02:01:15 +08:00   1
    @loveis0 =_=逼我上图

    观察这样一个结构,你可以把它当成一个每层定长的矩形来看,每层由有颜色的部分和两边的空白组成
    由于尾部的空白不会影响前面的位置,不管它们,我们只需要让前面的空白把有颜色的部分挤到合适的位置(正中间)
    所以只需要一个循环,每次输出一条长度刚刚好的 空白+颜色
    第一次产生最底层,获得它的长度是 10 ,存起来,空白长度为 0 ,存起来
    第二次产生倒数第二层,获得它的长度是 8 , 10-8=2 ,因为首尾各有一个空白所以这一层的空白增量是 2 的一半 1 ,加上上层的空白长度 0 ,这一层的空白长度为 1
    第三次产生倒数第三层,获得它的长度是 6 , 8-6=2 ,因为首尾各有一个空白所以这一层的空白增量是 2 的一半 1 ,加上上层的空白长度 1 ,这一层的空白长度为 2
    。。。
    依次类推,空白数不断累加

    到最后把储存结果的变量 print 出来就是个金字塔了,空格会把字顶到合适的位置
    Tedko
        24
    Tedko  
       2015-09-11 03:28:35 +08:00
    @loveis0 https://en.wikipedia.org/wiki/ASCII
    看不懂英文百度百科也行
    gyao
        25
    gyao  
       2015-09-11 10:54:26 +08:00
    #include <stdio.h>

    int main (int argc, char *argv[]) {
    for (int i = 1; i <= 9; i++) {
    printf ("%.*s", 10 - i, "\t\t\t\t\t\t\t\t\t\t");
    for (int j = 1; j <= i; j++) {
    printf ("%d*%d=%d\t", j, i, i * j );
    }
    printf ("\n");
    }
    return 0;
    }
    loveis0
        26
    loveis0  
    OP
       2015-09-12 12:49:51 +08:00
    @Strikeactor 非常感谢前辈耐心打字并且告诉我实现的思路(ˉ ˉ),由于上课的原因抱歉拖到现在才来回复。辛苦前辈啦。(`)
    loveis0
        27
    loveis0  
    OP
       2015-09-12 12:52:02 +08:00
    @Tedko 虽然不是看不懂英文,可这样密密麻麻的英文还真是看不懂。。。。。=。=。。。


    @gyao 又一种思路 0.0 ,我去研究研究,谢谢前辈。。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     970 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 22:45 PVG 06:45 LAX 14:45 JFK 17:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86