c语言程序 序言,c语言程序设计序言习题答案续(7页)-原创力文档

习题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; i>0; --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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值