c程序设计语言第一章2
时间:2014-04-28 13:25:01
收藏:0
阅读:369
练习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 }
运行结果:
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 }
运行结果:
练习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 }
运行结果:
评论(0)