首页 > 代码库 > c程序设计语言第一章2

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=http://www.mamicode.com/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=http://www.mamicode.com/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 }

 

运行结果:

 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=http://www.mamicode.com/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=http://www.mamicode.com/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 }


运行结果:

练习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=http://www.mamicode.com/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=http://www.mamicode.com/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 }


运行结果: