c语言绘直方图,用C语言绘制直方图,绘制输入单词长度的直方图

这是那本著名的《C语言程序设计》里的数组那部分的一个练习题

基本思路是先统计出每个单词的长度(longth)和每个长度的单词出现的次数(number),然后用用两重循环分别扫描X和Y轴绘制直方图

代码:

#include

#include

#define N 50

struct words

{

int longth;

int number;

};

int main()

{

//statistics

printf("Please input some words:\n");

words w[N];

for(int i=0;i

int flag=0;

char c;

for(int i=0;i

{

while((c = getchar())!= ' ')

{

if(c == '\n') break;

else w[i].longth++;

}

flag = i;

if(c == '\n') break;

}

printf("Count the longth of each word inputted:\n");

printf("No.\tLongth\n");

for(int j=0;j

{

if(w[j].longth != 0) printf("%2d\t%2d\n",j+1,w[j].longth);

}

//统计长度为i的单词有几个

for(int i=1;i

{

for(int j=0;j<=flag;j++)

if(w[j].longth == i) w[i].number++;

else continue;

}

printf("Count the appearance times of each longth word:\n");

printf("Longth\tCount\n");

for(int i=1;i

if(w[i].number!=0)printf("%d\t%d\n",i,w[i].number);

//sort

int s[N];

for(int i=0;i

//for(int i=0;i

//找到横坐标的最大值

for(int j=0;j

for(int k=0;k

if(s[k]

{

int temp=s[k];

s[k]=s[k+1];

s[k+1]=temp;

}

int ss[N];

for(int i=1;i

//for(int i=1;i

//找到纵坐标的最大值

for(int j=1;j

for(int k=1;k

if(ss[k]

{

int temp=ss[k];

ss[k]=ss[k+1];

ss[k+1]=temp;

}

//draw the Histogram

int max_longth = s[0];//最长的长度,即横坐标的最大点

int max_number = ss[1];//最多的个数,即纵坐标的最高点

printf("max_longth=%d\nmax_number=%d\n",max_longth,max_number);

//print

printf("The Histogram :\n");

printf("X: The longth of each input word\n");

printf("Y: The statistics of their appearance\n");

for(int i=max_number;i>0;i--)//打印纵坐标

{

printf("%2d",i);

for(int k=1;k<=max_longth;k++)//开始对横坐标进行扫描

{

if((w[k].longth = k)&&(w[k].number >= i)) printf("%c",219);

else printf(" ");

}

printf("\n");

}

printf(" ");

for(int i=1;i<=max_longth;i++)

printf("%d",i);

printf("\nJob Done!\n");

}

其实一部分调试时所用的语句我没有删掉,或许对读程序有帮助。

下面是我的一个测试的结果图:

efc42429586a8ef646fd3e1114ba6bbb.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值