Keirou 2022-11-11 16:38 采纳率: 0%
浏览 13

《C程序设计语言》练习1-13

编写一个程序,打印输入中单词长度的直方图。水平方向的直方图比较容易绘制,垂直方向的直方图则要困难些。
# include <stdio.h>

# define IN 1
# define OUT 0
# define MAXLEN 10  /*定义单词的最大长度*/

/*print histogram of word length in input*/
main()
{
    int c, i, j, nc, state, max;  /*nc = number character*/
    int lword [MAXLEN]; 
    scanf ("%c", &c);    /*获取c作为字符输入*/ 
    
    for (i = 0; i < MAXLEN; ++ i)
        lword [i] = 0;
    
    nc = max = 0;
    state = OUT;
    while ((c = getchar()) != EOF)
        if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')){
            state = IN;
            ++ nc;
        }
        else if (state == IN){
            state = OUT;
            ++ lword [nc - 1];  /*递增以不同单词长度为下标的数组*/
            if (max < lword [nc - 1])
                max = lword [nc - 1];  /*寻找数组最大值,并赋予max。为后续打印垂直直方图做准备*/
            nc = 0;
        }
    
    /*打印水平直方图*/
    printf ("print histogram of word length in input\n");
    printf ("horizontal version:\n");
    for (i = 0; i < MAXLEN; ++ i){
        printf ("%2d: ", i + 1);
        for (j = 0; j < lword [i]; ++ j)
            printf ("*");
        printf ("\n");
    }
    printf ("\n");
    
    /*打印垂直直方图*/
    /*思路:设置i = max + 1 的行往下扫,j = 0的列往右扫*/
    printf ("vertical version:\n");
    for (i = max + 1; i > 0; -- i){
        for (j = 0; j < MAXLEN; ++ j)
            if (i == lword [j] + 1)
                printf ("%3d", lword [j]);  /*当i = 某列数组值 + 1时,输出当列数组值*/
            else if (i <= lword [j])
                printf ("  *");  /*当i <= 某列数组值时,输出**/
            else
                printf ("   ");  /*当i > 某列数组值时,输出空格*/
        printf ("\n");
    }
    for (i = 1; i <= MAXLEN; ++ i)
        printf ("%3d", i);
} 
运行结果

img

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-11-11 18:10
    关注
    评论

报告相同问题?

问题事件

  • 修改了问题 11月11日
  • 创建了问题 11月11日

悬赏问题

  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证