- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
习题1-13(垂直方向直方图:编写一个程序打印输入中单词长度的垂直方向的直方图。
View Code
1 #include
2 #define IN 1 /* 在单词内部 */
3 #define OUT 0 /* 在单词外部 */
4 #define MAXLEN 15 /* 单词的最大长度 */
5 #define MAXHIST 15 /* 直方图的最大长度 */
6 #define MAXWORD 100 /* 限制输入单词的上限 */
7
8 int wl[MAXWORD]; /* 用于存放单词长度的数组 */
9
10 /* 打印垂直方向的直方图 */
11 void main(
12 {
13 char c;
14 int i, j;
15 int len = 0; /* 当前单词的长度 */
16 int wc = 0; /* 统计单词的个数 */
17 int state = OUT; /* 状态初始化为在单词外部 */
18 int maxvalue; /* 单词中最大长度 */
19 for (int k=0; k
20 wl[MAXWORD] = 0; /* 数组进行初始化 */
21 while ((c=getchar( != EOF {
22 if (c == || c == \t || c == \n {
23 if (state == IN {
24 if (len MAXLEN
25 len = MAXLEN;
26 wl[++wc] = len;
27 }
28 len = 0;
29 state = OUT;
30 } else if (state == OUT {
31 state = IN;
32 len++;
33 } else
34 len++;
35 }
36 if (wc 1 {
37 printf(no words!\n;
38 return;
39 }else if (wc MAXWORD
40 wc = MAXWORD;
41 maxvalue = 0;
42 for (i=1; i=wc; i++ {
43 if (wl[i] maxvalue
44 maxvalue = wl[i];
45 }
46 /* 实现垂直直方图 */
47 for (i=MAXHIST; i0; --i {
48 for (j=1; j=wc; j++
49 if (wl[j] % MAXHIST = i {
50 printf( * ;
51 } else
52 printf( ;
53 putchar(\n;
54 }
55 for (i=1; i=wc; i++
56 printf( %d , wl[i];
57 putchar(\n;
58 }
RT:
垂直直方图和水平直方图程序在统计单词个数之前都是一致的,垂直直方图使用另外一种处理方式。
习题1-14:编写一个程序,打印输入中各个字符出现频度的直方图。
View Code
1 #include
2 #include
3 #define MAXHIST 15 /* 直方图长度上限 */
4 #define MAXCHAR 128 /* 出现的字符上限 */
5
6 /* 统计输入中各个字符的直方图 */
7 void main(
8 {
9 char c;
10 int i;
11 int charlen; /* 字符出现的频度 */
12 int ch[MAXCHAR]; /* 保存所有字符的数组 */
13 for (i = 0;i MAXCHAR; i++
14 ch[i] = 0;
15 while ((c=getchar( != EOF {
16 if (c MAXCHAR
17 ++ch[c];
18 }
19 for (i = 1; i MAXCHAR; ++i {
20 if (ch[i] MAXHIST
21 ch[i] = MAXHIST;
22 }
23 /* 输出水平方向直方图 */
24 for (i = 1; i MAXCHAR; ++i {
25 charlen = ch[i];
26 if (charlen 1
27 continue;
28 if (isprint(i /* 可显示的字符 */
29 printf(%c %d\t, i, charlen;
30 else
31 printf( %d\t, charlen;
32 while (ch[i] 0 {
33 putchar(*;
34 --ch[i];
35 }
36 putchar(\n;
37 }
38 }
RT:
从打印的结果来看,第一个是不可显示的换行符,第二个是空格,其余是字母。
文档评论(0)