C 习题

作者: 吃柠檬的鸮 | 来源:发表于2019-03-23 16:29 被阅读0次

    练习 1 -13 编写一个程序,打印输入中单词长度的直方图。

    /* histogramh.c */
    /* 打印水平方向的直方图 */
    #include <stdio.h>
    
    int main() {
        int c, i, nwhite, nother;
        int ndigit[10];
    
        nwhite = nother = 0;
        for (i = 0; i < 10; ++i)
            ndigit[i] = 0;
    
        /* 字符统计 */
        while (( c = getchar()) != EOF)
            if (c >= '0' && c <= '9')
                ++ndigit[c - '0'];
            else if (c == ' ' || c == '\n' || c == '\t') 
                ++nwhite;
            else
                ++nother;
        
        printf("digits = ");
        for (i = 0; i < 10; ++i)
            printf(" %d", ndigit[i]);
        printf("\nwhite space = %d\nother = %d\n", nwhite, nother);
    
        /* 打印水平方向的直方图 */
        printf("value\t↑\n");
        for (i = 0; i < 10; ++i) {
            int j;
            printf("%d \t|", i);
            for (j = 0; j < ndigit[i]; ++j) {
                printf("■");
            }
            printf("\n\t|\n");
        }
    
        printf("space\t|");
        for (i = 0; i < nwhite; ++i) {
            printf("■");
        }
        printf("\n\t|\n");
    
        printf("other\t|");
        for (i = 0; i < nother; ++i) {
            printf("■");
        }
        printf("\n\t|--------------------------------------→ number\n\n");
    
        return 0;
    }
    

    编译运行结果如下:

    $ ./histogramh.out 
    123 445 67890 111   451
    ,   abcdef ghi 152670
    digits =  2 6 2 1 3 3 2 2 1 1
    white space = 9
    other = 10
    value   ↑
    0       |■■
            |
    1       |■■■■■■
            |
    2       |■■
            |
    3       |■
            |
    4       |■■■
            |
    5       |■■■
            |
    6       |■■
            |
    7       |■■
            |
    8       |■
            |
    9       |■
            |
    space   |■■■■■■■■■
            |
    other   |■■■■■■■■■■
            |--------------------------------------→ number
    
    $ 
    
    /* histogramv.c  */
    /* 打印垂直方向的直方图 */
    #include <stdio.h>
    
    int main() {
        int c, i, nwhite, nother;
        int ndigit[10];
        int max;
    
        max = nwhite = nother = 0;
        for (i = 0; i < 10; ++i) {
            ndigit[i] = 0;
        }
        
        while ((c = getchar()) != EOF) {
            if (c >= '0' && c <= '9') {
                ++ndigit[c - '0'];
            } else if (c == ' ' || c == '\n' || c == '\t') {
                ++nwhite;
            } else {
                ++nother;
            }
        }
        
        printf("digits = ");
        for (i = 0; i < 10; ++i) {
            printf(" %d", ndigit[i]);
            max = max < ndigit[i] ? ndigit[i] : max;
        }
        printf(", white space = %d, other = %d\n", nwhite, nother);
        max = max < nwhite ? nwhite : max;
        max = max < nother ? nother : max;
    
        /* draw histogram */
        printf("nums\t↑\n\t|");
    
        for (i = max; i > 0; --i) {
            printf("\n\t|");
    
            int j;
            for (j = 0; j < 10; ++j) {
                if (ndigit[j] >= i) 
                    printf(" ■  ");
                else 
                    printf("    ");
            }
    
            if (nwhite >= i)
                printf("  ■  ");
            else 
                printf("     ");
    
            if (nother >= i)
                printf("   ■  ");
            else 
                printf("      ");
        }
    
        printf("\n\t|----------------------------------------------------→ value\n");
        printf("\t");
        for (i = 0; i < 10; ++i)
            printf("  %d ", i);
        printf("  space  ohter\n");
        
    
        return 0;
    }
    
    $ ./histogramv.out 
    1234567890  2,4,8,16    32
    64,128,256  abcdefg
    digits =  1 3 5 2 3 2 4 1 3 1, white space = 5, other = 12
    nums  ↑
          |
          |                                                ■  
          |                                                ■  
          |                                                ■  
          |                                                ■  
          |                                                ■  
          |                                                ■  
          |                                                ■  
          |         ■                                ■     ■  
          |         ■               ■                ■     ■  
          |     ■   ■       ■       ■       ■        ■     ■  
          |     ■   ■   ■   ■   ■   ■       ■        ■     ■  
          | ■   ■   ■   ■   ■   ■   ■   ■   ■   ■    ■     ■  
          |----------------------------------------------------→ value
            0   1   2   3   4   5   6   7   8   9   space  ohter
    $
    

    相关文章

      网友评论

          本文标题:C 习题

          本文链接:https://www.haomeiwen.com/subject/jvysvqtx.html