问题:输入任意多个一位数字(0-9),然后按照出现次数输出.
我写的对应功能如下:
1.可以接受任意多个一位数;
2.按照出现次数多少排序输出;
3.如几个数字出现次数相同时,按照数字由大到小排序(这个要是由小到大就能省去冒泡排序后的那一块儿).
#include<stdio.h>
void Pro(int ar[],int n);
void Bubble_Sort(int Num[],int len); //冒泡排序
int Idex[10]={0,1,2,3,4,5,6,7,8,9}; //可能出现的数字组成的数组
int main(void)
{
int i,n;
puts("Input the number of elements to the array:");
scanf("%d",&n);
int ar[n]; //变长数组,编译器需要支持C99标准才行.
puts("Input n numbers:");
for(i=0;i<n;i++) //读取数组元素
scanf("%d",&ar[i]);
Pro(ar,n);
putchar('\n');
return 0;
}
void Pro(int ar[],int n)
{
int i,j=0,temp;
int Num[10]={0};
for(i=0;i<n;i++) //统计各个数字出现的次数
{
temp=ar[i];
switch(temp)
{
case 0:Num[0]++;break;
case 1:Num[1]++;break;
case 2:Num[2]++;break;
case 3:Num[3]++;break;
case 4:Num[4]++;break;
case 5:Num[5]++;break;
case 6:Num[6]++;break;
case 7:Num[7]++;break;
case 8:Num[8]++;break;
case 9:Num[9]++;break;
default : break;
}
}
Bubble_Sort(Num,10); //排序
for(i=1;i<10;i++) //如果出现次数相同,则按数字由大到小排列
for(j=0;j<10-i;j++)
{
if(Num[j]==Num[j+1] && Num!=0)
if(Idex[j]<Idex[j+1])
{
temp=Idex[j];
Idex[j]=Idex[j+1];
Idex[j+1]=temp;
}
}
puts("统计结果如下(出现次数由多到少排序,出现次数相同时按数字由大到校排序,数字后括号内为其出现的次数统计):");
for(i=0;i<10;i++)
{
if(0!=Num[i]) //过滤掉后面次数为0的元素
printf("%d(%d) ", Idex[i],Num[i]);
}
putchar('\n');
}
void Bubble_Sort(int Num[],int len) //冒泡排序
{
int i,j,temp1,temp2;
for(i=1;i<len;i++)
{
for(j=0;j<len-i;j++) //循环找到下沉"气泡",每下沉一位,下次比较长度小一位
{
if(Num[j]<=Num[j+1])
{
temp1=Num[j]; //数字交换
Num[j]=Num[j+1];
Num[j+1]=temp1;
temp2=Idex[j]; //次数对应数字也同时移动
Idex[j]=Idex[j+1];
Idex[j+1]=temp2;
}
}
}
}
本文介绍了一个C语言程序,该程序能够接收多个一位数字输入,并统计每个数字出现的次数。之后,程序将根据出现次数对这些数字进行排序输出,若出现次数相同,则按数字大小降序输出。

被折叠的 条评论
为什么被折叠?



