码迷,mamicode.com
首页 > 编程语言 > 详细

C语言打印水平直方图或者垂直直方图

时间:2015-11-28 23:06:53      阅读:647      评论:0      收藏:0      [点我收藏+]

标签:

     在C程序设计语言(第2版?新版)一书中有一道打印单词数目水平或者垂直直方图的习题,参见该第17页。现在假如我们已经得到了单词的计数数组。

打印水平方向的直方图比较简单, 只需要两重循环即可,外层循环执行的次数是数组长度。内层循环为该数组每个元素的大小。方法如下:

 1 /*
 2 * 打印水平方向直方图
 3 *
 4 */
 5 void horizontal(int array[],int len){
 6  
 7   printf("\t↑\n");
 8   printf("\t|\n");
 9   printf("\t|\n");
10   int i;
11   for(i=0;i<10;i++){
12       int k=0;
13       printf("\t|");
14       for(;k<array[i];k++){
15           printf("*");
16       }
17       printf("(%d)",array[i]);
18       printf("\n\t|\n");
19   }
20    printf("\t--------------------------------------------------->\n");
21    printf("\t-----------------------------------水平方向直方图-------------------------------------\n\n");
22 }

     打印垂直方向的直方图相对麻烦一些,但也只需要两层循环,首先我们要找出该数组中的最大元素,因为该数据决定了垂直统计直方图的最大高度,也就是外层循环的次数(此处我们让最大数据加一,因为我们想在脂肪图上方显示数据),内层循环的次数是元素的个数,与水平直方图的循环方式相反。内层循环每次拿数组中的与外层的数据对比,如果相等,打印符号同时当前数据自动减一,不然下次会打印不停地打印符号,否则打印空,找出数组中的最大数据相对比较简单。方法如下:

 1 /*
 2 * 打印垂直方向直方图
 3 *
 4 */
 5 void vertical(int array[],int len){
 6   int maxValue=max(array,len);    
 7   int j;
 8   int i;  
 9   printf("\t↑\n");
10   for(i=maxValue+1;i>0;i--){
11       printf("\t|    ");
12       for(j=0;j<10;j++){
13           if(array[j]==i){
14                printf("****\t");
15                array[j]--;
16           }else if(array[j]==i-1){
17                //显示数目
18                printf("(%d)\t",array[j]);
19           }else{
20              printf("   \t");  
21           }
22       }
23       printf("\n");
24   }
25   printf("\t--------------------------------------------------------------------------------------->\n");
26   printf("\t-----------------------------------垂直方向直方图-------------------------------------\n\n");
27 }

   整个程序如下

 1 #include<stdio.h>
 2 /*
 3 * 最大数
 4 *
 5 */
 6 int max(int* array,int len){
 7     int maxValue= 0;
 8     int i=0;
 9     for(i=0;i<len;i++){
10         if(array[i]>maxValue){
11             maxValue=array[i];
12         }
13     }
14     return maxValue;
15 }
16 /*
17 * 打印水平方向直方图
18 *
19 */
20 void horizontal(int array[],int len){
21  
22   printf("\t↑\n");
23   printf("\t|\n");
24   printf("\t|\n");
25   int i;
26   for(i=0;i<10;i++){
27       int k=0;
28       printf("\t|");
29       for(;k<array[i];k++){
30           printf("*");
31       }
32       printf("(%d)",array[i]);
33       printf("\n\t|\n");
34   }
35    printf("\t--------------------------------------------------->\n");
36    printf("\t-----------------------------------水平方向直方图-------------------------------------\n\n");
37 }
38 
39 /*
40 * 打印垂直方向直方图
41 *
42 */
43 void vertical(int array[],int len){
44   int maxValue=max(array,len);    
45   int j;
46   int i;  
47   printf("\t↑\n");
48   for(i=maxValue+1;i>0;i--){
49       printf("\t|    ");
50       for(j=0;j<10;j++){
51           if(array[j]==i){
52                printf("****\t");
53                array[j]--;
54           }else if(array[j]==i-1){
55                //显示数目
56                printf("(%d)\t",array[j]);
57           }else{
58              printf("   \t");  
59           }
60       }
61       printf("\n");
62   }
63   printf("\t--------------------------------------------------------------------------------------->\n");
64   printf("\t-----------------------------------垂直方向直方图-------------------------------------\n\n");
65 }
66 main(){
67   int words[10];
68   int temp[10];
69   int i=0;
70   for(;i<10;i++){
71       words[i]=(i-4)*(i-4)+1;
72   }
73   int maxValue=max(words,10);
74   printf("maxValue=%d\n",maxValue);
75   horizontal(words,10);
76   vertical(words,10);
77 }

  程序运行效果图:

技术分享

技术分享

图片太大,分为两次截取

C语言打印水平直方图或者垂直直方图

标签:

原文地址:http://www.cnblogs.com/iwillow/p/5003614.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!