C语言实现数字频率统计垂直直方图(递归法)

先奉上效果图:
在这里插入图片描述
数组a[10]统计0~9每个数字出现的频率
我们要显示这样的直方图统计数字出现的频率
x x
x x x x
0 1 2 3
要打印出垂直的直方图,从上往下,从出现次数最多的元素开始打印。
统计出现次数最多的数,相应出现次数为n,满足出现次数为n的打印’*’,不满足的打印空格;然后让n-1,再统计出现次数为n-1的元素进行判断和打印,直到n=0时结束。

#include<stdio.h>
int max(int *a) //返回数组中的最大值
{
  int i,n=a[0];
  for(i=0;i<10;i++)
  {
    if(n<a[i]) n=a[i];
  }
return n;
}
void printstar(int *a,int n)
{
  int x=124,y=n; //124对应竖线的ascII码
  if(y>=10) printf("%-d%c",y,x); //y>=10显示格式问题
  else printf("%2d%c",y,x);
  for(int i=0;i<10;i++)
  {
    if(a[i]==n)
    {
      putchar('*'); putchar(' '); putchar(' ');
       a[i]--; //出现次数最多的元素--
    }
    else
    {
      putchar(' '); putchar(' '); putchar(' ');
    }
  }
  putchar('\n'); n--; //数组元素最大值--
  if(n>0) printstar(a,n); //递归,n=n--
  else
  {
    printf("  |------------------------------\n");
    printf("   0  1  2  3  4  5  6  7  8  9\n");
  }
}
int main()
{
  int c,n,a[10]={0}; //a[0]~a[9]代表0~9的计数
  printf("请输入数字0~9:");
  while((c=getchar())!='\n')
  if(c>='0'&&c<='9') ++a[c-'0']; //0~9出现的频率
  n=max(a);
  printf("\t 数字频率统计直方图\n");
  printstar(a,n); 
  return 0;
}
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值