c程序设计语言第一章2

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

 1 #include <stdio.h>

 2 #include <stdlib.h>

 3 #define MAXHIST 15//定义直方图的最大值

 4 #define MAXWORD 11//定义单词的最大字符数

 5 #define IN 1

 6 #define OUT 0

 7 int main()

 8 {

 9     int nc;//单词所含的字符数

10     int maxvalue=0;//记录单词所含字符的最大值

11     int c;

12     int i;

13     int len;//记录直方图所需打印的*数目

14     int overflow=0;//记录越界单词的数目

15     int state=OUT;

16     int wc[MAXWORD];//记录不同长度单词的数目

17     //初始或数组

18     for(i=0;i<MAXWORD;i++)

19     {

20         wc[i]=0;

21     }

22     while((c=getchar())!=EOF)

23     {

24         if(c==' '||c=='\t'||c=='\n')

25         {

26             state=OUT;

27             if(nc>0&&nc<MAXWORD)

28             {

29                 ++wc[nc];

30             }

31             else

32             {

33                 ++overflow;

34             }

35             nc=0;

36         }

37         else

38         {

39             if(state==OUT)

40             {

41                 state=IN;

42                 nc=1;//记录每个单词的开始

43             }

44             else

45             {

46                 nc++;

47             }

48         }

49     }

50     //求出单词所含字符数的最大值

51     for(i=1;i<MAXWORD;i++)

52     {

53         if(wc[i]>maxvalue)

54         {

55             maxvalue=wc[i];

56         }

57     }

58     for(i=1;i<MAXWORD;i++)

59     {

60         printf("%3d-%3d:",i,wc[i]);

61         if(wc[i]>0)

62         {

63             len=wc[i]*MAXHIST/maxvalue;//此部分用来同比例放大数值

64         }

65         else

66         {

67             len=0;

68         }

69         while(len>0)

70         {

71             putchar('*');

72             len--;

73         }

74         putchar('\n');

75     }

76     printf("%3d word(s) overflow!",overflow);

77     return 0;

78 }

 

运行结果:

c程序设计语言第一章2

 1 #include <stdio.h>

 2 #include <stdlib.h>

 3 #define MAXHIST 15//定义直方图的最大值

 4 #define MAXWORD 11//定义单词的最大字符数

 5 #define IN 1

 6 #define OUT 0

 7 int main()

 8 {

 9     int nc;//单词所含的字符数

10     int maxvalue=0;//记录单词所含字符的最大值

11     int c;

12     int i,j;

13    // int len;//记录直方图所需打印的*数目

14     int overflow=0;//记录越界单词的数目

15     int state=OUT;

16     int wc[MAXWORD];//记录不同长度单词的数目

17     //初始或数组

18     for(i=0;i<MAXWORD;i++)

19     {

20         wc[i]=0;

21     }

22     while((c=getchar())!=EOF)

23     {

24         if(c==' '||c=='\t'||c=='\n')

25         {

26             state=OUT;

27             if(nc>0&&nc<MAXWORD)

28             {

29                 ++wc[nc];

30             }

31             else

32             {

33                 ++overflow;

34             }

35             nc=0;

36         }

37         else

38         {

39             if(state==OUT)

40             {

41                 state=IN;

42                 nc=1;//记录每个单词的开始

43             }

44             else

45             {

46                 nc++;

47             }

48         }

49     }

50     //求出单词所含字符数的最大值

51     for(i=1;i<MAXWORD;i++)

52     {

53         if(wc[i]>maxvalue)

54         {

55             maxvalue=wc[i];

56         }

57     }

58     for(i=MAXHIST;i>0;i--)

59     {

60         for(j=1;j<MAXWORD;j++)

61         {

62             if((wc[j]*MAXHIST/maxvalue)>=i)

63             {

64                 printf("  *");

65             }

66             else

67             {

68                 printf("   ");

69             }

70         }

71         putchar('\n');

72     }

73     for(i=1;i<MAXWORD;i++)

74     {

75         printf("%3d",wc[i]);

76     }

77     putchar('\n');

78     for(i=1;i<MAXWORD;i++)

79     {

80         printf("%3d",i);

81     }

82     printf("%3d word(s) overflow!",overflow);

83     return 0;

84 }


运行结果:

c程序设计语言第一章2

练习1.14编写一个程序,打印输入中各个字符出现频度的直方图

 1 #include <stdio.h>

 2 #include <stdlib.h>

 3 #include <ctype.h>

 4 #define MAXCHAR 121

 5 #define MAXHIST 15

 6 int main()

 7 {

 8     int c;

 9     int i;

10     int maxvalue=0;//记录单词所含字符的最大值

11     int len;//记录直方图所需打印的*数目

12     int wc[MAXCHAR];//记录不同长度单词的数目

13     //初始或数组

14     for(i=0;i<MAXCHAR;i++)

15     {

16         wc[i]=0;

17     }

18     while((c=getchar())!=EOF)

19     {

20         if(c<MAXCHAR)

21             ++wc[c];

22     }

23         //求出单词所含字符数的最大值

24     for(i=1;i<MAXCHAR;i++)

25     {

26         if(wc[i]>maxvalue)

27         {

28             maxvalue=wc[i];

29         }

30     }

31     for(i=97;i<MAXCHAR;i++)

32     {

33         if(isprint(i))

34         {

35             printf("%3d-%c-%d ",i,i,wc[i]);

36         }

37         else

38         {

39             printf("%3d- -%d ",i,wc[i]);

40         }

41         if(wc[i]>0)

42         {

43             len=wc[i]*MAXHIST/maxvalue;//此部分用来同比例放大数值

44         }

45         else

46         {

47             len=0;

48         }

49         while(len>0)

50         {

51             putchar('*');

52             len--;

53         }

54         putchar('\n');

55     }

56 

57     return 0;

58 }


运行结果:

c程序设计语言第一章2

你可能感兴趣的:(程序设计)