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

代码如下:

#include <stdio.h>    //    包含标准库的信息。

#define MAXWORD 10    //    输入单词的最大数。
#define IN 1 // 在单词内。
#define OUT 0 // 在单词外。 int main() // 定义名为main的函数,它不接受参数值。
{
printf("======打印输入单词长度的直方图======\n");
printf("======只统计前10个单词的长度======\n");
int ws_len[MAXWORD];
int c, count, i, state; // 单词,单词长度,单词个数,是否输入了多个\t或空格。
c = count = i = state = ; while ((c = getchar()) != EOF)
{
if (c == '\t' || c == '\n' || c == ' ') // 如果输入完了一个单词。
{
// 把单词长度放入长度数组。
if (state == IN)
{
state = OUT;
// 将长度放入长度数组。
ws_len[i] = count;
// 清空单词长度。
count = ;
// 数组下表+1;
++i;
}
}
else
{
// 如果输入的不是\t,\n和空格,记录单词长度。
++count;
state = IN;
}
}
int j; printf("单词长度水平直方图如下:\n");
for (i = ;i < ;i++)
{
printf("%2d |", i+);
for (j = ;j < ws_len[i];j++)
{
printf("*");
}
printf("\n");
} printf("\n单词长度垂直直方图如下:\n");
int maxvalue = ;
// 获得最长的单词长度。
for (i = ;i < ;i++)
{
if (ws_len[i] > maxvalue)
{
maxvalue = ws_len[i];
}
} // 从最上排向下打印。
for (i = maxvalue; i > ; --i)
{
for (j = ; j < ; j++)
if (ws_len[j] >= i) {
printf(" * ");
}
else
printf(" ");
printf("\n");
}
for (i = ; i < ; i++)
printf(" %d ", i); getchar(); // 防止控制台一闪而过,需要接受任意字符后在关闭控制台。
return ; // 向执行环境返回一个整形,0代表执行成功。
}

个人理解:

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

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. FFT多项式乘法加速

    FFT基本操作...讲解请自己看大学信号转置系列... 15-5-30更新:改成结构体的,跪烂王学长啊啊啊啊机智的static... #include<iostream> #include ...

  2. 动态规划初级练习(二):BadNeighbors

    Problem Statement      The old song declares "Go ahead and hate your neighbor", and the re ...

  3. UVAlive4287 Proving Equivalences(scc)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=10294 [思路] 强连通分量. 求出bcc后,缩点形成DAG,设D ...

  4. mysql二进制

    1.     从http://www.mysql.com下载二进制版的Mysql安装包     //这个MYSQL是二进制版的,不用编译 Linux (x86)        5.0.41    59 ...

  5. adb Logcat用法

    转自: http://blog.csdn.net/tiantianshangcha/article/details/6288537 个人认为有一下几个常用命令: adb logcat -b radio ...

  6. 【COM学习】之一、QueryInterface

    开始先说一句,学习com之前要学好c++ 对象模型. QueryInterface的使用: QueryInterface是IUnknown的一个成员函数,客户可以通过此函数来查询某个组件是否支持某个特 ...

  7. sql server 2005中IMAGE类型的BUG问题

    目的:在sql server 2005数据库上筛选出那些有照片的员工 由于客户之前的数据库是sql server 2000,定义的photo字段的数据类型为image, 在sql 2005数据库上,用 ...

  8. java中基于TaskEngine类封装实现定时任务

    主要包括如下几个类: 文章标题:java中基于TaskEngine类封装实现定时任务 文章地址: http://blog.csdn.net/5iasp/article/details/10950529 ...

  9. Android学习–Android app 语言切换功能

    功能: app用户根据自己的语言喜好,设置app语言.语言设置只针对本app,并在下次启动应用时保留前一次启动设置. 更新语言: public static void changeAppLanguag ...

  10. [转] GDB disassemble

    前面几篇谈GDB调试程序的帖子,都对反汇编语焉不详.这里详细讨论一下disassemble/disass命令 反汇编一个函数disass func_name 反汇编一段内存地址, 第1个参数是起始地址 ...