练习1-13  编写一个程序,打印输入中单词长度的直方图。水平方向的直方图比较容易绘制,垂直方向的直方图则要困难些。

代码如下:

  1. #include <stdio.h> // 包含标准库的信息。
  2.  
  3. #define MAXWORD 10 // 输入单词的最大数。
  4. #define IN 1 // 在单词内。
  5. #define OUT 0 // 在单词外。
  6.  
  7. int main() // 定义名为main的函数,它不接受参数值。
  8. {
  9. printf("======打印输入单词长度的直方图======\n");
  10. printf("======只统计前10个单词的长度======\n");
  11. int ws_len[MAXWORD];
  12. int c, count, i, state; // 单词,单词长度,单词个数,是否输入了多个\t或空格。
  13. c = count = i = state = ;
  14.  
  15. while ((c = getchar()) != EOF)
  16. {
  17. if (c == '\t' || c == '\n' || c == ' ') // 如果输入完了一个单词。
  18. {
  19. // 把单词长度放入长度数组。
  20. if (state == IN)
  21. {
  22. state = OUT;
  23. // 将长度放入长度数组。
  24. ws_len[i] = count;
  25. // 清空单词长度。
  26. count = ;
  27. // 数组下表+1;
  28. ++i;
  29. }
  30. }
  31. else
  32. {
  33. // 如果输入的不是\t,\n和空格,记录单词长度。
  34. ++count;
  35. state = IN;
  36. }
  37. }
  38. int j;
  39.  
  40. printf("单词长度水平直方图如下:\n");
  41. for (i = ;i < ;i++)
  42. {
  43. printf("%2d |", i+);
  44. for (j = ;j < ws_len[i];j++)
  45. {
  46. printf("*");
  47. }
  48. printf("\n");
  49. }
  50.  
  51. printf("\n单词长度垂直直方图如下:\n");
  52. int maxvalue = ;
  53. // 获得最长的单词长度。
  54. for (i = ;i < ;i++)
  55. {
  56. if (ws_len[i] > maxvalue)
  57. {
  58. maxvalue = ws_len[i];
  59. }
  60. }
  61.  
  62. // 从最上排向下打印。
  63. for (i = maxvalue; i > ; --i)
  64. {
  65. for (j = ; j < ; j++)
  66. if (ws_len[j] >= i) {
  67. printf(" * ");
  68. }
  69. else
  70. printf(" ");
  71. printf("\n");
  72. }
  73. for (i = ; i < ; i++)
  74. printf(" %d ", i);
  75.  
  76. getchar(); // 防止控制台一闪而过,需要接受任意字符后在关闭控制台。
  77. return ; // 向执行环境返回一个整形,0代表执行成功。
  78. }

个人理解:

使用之前的计数器功能记录单词的长度,然后在运用循环功能对数组中记录的单词长度进行排版打印。

C程序设计语言练习题1-13的更多相关文章

  1. C程序设计语言练习题1-3

    练习1-3 修改温度转换程序,使之能在转换表的顶部打印一个标题. 代码如下: #include <stdio.h> // 包含标准库的信息. int main() // 定义名为main的 ...

  2. C程序设计语言练习题1-10

    练习1-10 编写一个将输入复制到输出的程序,并将起重的制表符替换为\t,把回退符替换成\b,把反斜杠替换为\\.这样可以将制表符和回退符以可见的方式显示出来. 代码如下: #include < ...

  3. C程序设计语言练习题1-23

    练习1-23 编写一个删除C语言程序中所有的注释语句.要正确处理带引号的字符串与字符常量.在C语言中,注释不能嵌套. 代码如下: #include <stdio.h> // 包含标准库的信 ...

  4. C程序设计语言练习题1-16

    练习1-16 修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本. 代码如下: #include <stdio.h> // 包含标准库的信息 ...

  5. C程序设计语言练习题1-22

    练习1-22 编写一个程序,把较长的输入行”折“成短一些的两行或多行,折行的位置在输入行的第n列之前的最后一个非空格之后.要保证程序能够智能地处理输入行很长以及在制定的列前没有空格或制表符时的情况. ...

  6. C程序设计语言练习题1-21

    练习1-21 编写程序entab,将空格串替换为最少数量的制表符和空格,但要保持单词之间的间隔不变.假设制表符终止的位置与练习1-20的detab程序的情况相同.当使用一个制表符或者一个空格都可以打到 ...

  7. C程序设计语言练习题1-20

    练习1-20 编写程序detab,将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止位的地方.假设制表符终止位的位置是固定的,比如每隔n列就会出现一个制表符终止位.n应该是变量还是符号 ...

  8. C程序设计语言练习题1-19

    练习1-19 编写函数reverse(s),将字符串s中的字符顺序颠倒过来.使用该函数编写一个程序,每次颠倒一个输入行中的字符顺序.代码如下: #include <stdio.h> // ...

  9. C程序设计语言练习题1-18

    练习1-18 编写一个程序,删除每个输入行末尾的空格及制表符,并删除完全是空格的行. 代码如下: #include <stdio.h> // 包含标准库的信息. #define MAXLI ...

  10. C程序设计语言练习题1-17

    练习1-17 编写一个程序,打印长度大于80个字符的所有输入行. 代码如下: #include <stdio.h> // 包含标准库的信息. #define MAXROW 10 // 最大 ...

随机推荐

  1. BZOJ 1025 [SCOI2009]游戏

    1025: [SCOI2009]游戏 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1533  Solved: 964[Submit][Status][ ...

  2. 蓝牙4.0 BLE 开发

    在BLE开发中的一些随记,供大家参考: 凡事皆有状态 低功耗蓝牙背后有个基本的概念:任何事务都有状态.状态可以是任何东西:当前的温度,设备里电池的状态,设备名称或者对测量温度的地点的描述.它通过属性服 ...

  3. linux下的type命令

    type命令用来显示指定命令的类型.一个命令的类型可以是如下几种: alias 别名 keyword 关键字,Shell保留字 function 函数,Shell函数 builtin 内建命令,She ...

  4. top -Hp pid 显示所有的线程

    可以显示所有的线程 top -Hp pid [root@jiangyi01.sqa.zmf /home/ahao.mah] #top -Hp 41330 top - 22:49:40 up 27 da ...

  5. python爬虫__第一个爬虫程序

    前言 机缘巧合,最近在学习机器学习实战, 本来要用python来做实验和开发环境 得到一个需求,要爬取大众点评中的一些商户信息, 于是开启了我的第一个爬虫的编写,里面有好多心酸,主要是第一次. 我的文 ...

  6. Citrix 服务器虚拟化之十三 Xenserver虚拟机内存优化与性能监控

    Citrix 服务器虚拟化之十三   Xenserver虚拟机内存优化与性能监控 XenServer的DMC通过自动调节运行的虚拟机的内存,每个VM分配给指定的最小和最大内存值之间,以保证性能并允许每 ...

  7. 标准的数据获取 -ios

    #define kBgQueue dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) #define kLatestKivaL ...

  8. LeetCode——Valid Palindrome

    Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignori ...

  9. 重叠I/O之事件通知

      在 Winsock 中,重叠 I/O(Overlapped I/O)模型能达到更佳的系统性能,高于select模型.异步选择和事件选择三种.重叠模型的基本设计原理便是让应用程序使 用一个重叠的数据 ...

  10. java byte数组与int,long,short,byte转换

    public class DataTypeChangeHelper { /** * 将一个单字节的byte转换成32位的int * * @param b * byte * @return conver ...