我写了一个代码,有点问题,高手看一下
//本程序冒泡排序有点问题,还是输出有问题,大家帮忙看看#include <stdio.h>
int chengji0[10];
void switches(float chengji[])
{
int i,a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0;//都应该初始化数据
for(i=0;i<5;i++)//i用来做循环,读取各个成绩的分段
{
if(chengji[i]<60){j++;}
if(chengji[i]<65&&chengji[i]>60){h++;}
if(chengji[i]<70&&chengji[i]>65){g++;}
if(chengji[i]<75&&chengji[i]>70){f++;}
if(chengji[i]<80&&chengji[i]>75){e++;}
if(chengji[i]<85&&chengji[i]>80){d++;}
if(chengji[i]<90&&chengji[i]>85){c++;}
if(chengji[i]<95&&chengji[i]>90){b++;}
if(chengji[i]<100&&chengji[i]>95){a++;}
}
printf("各个的分段人数为:\n");
for(i=0;i<5;i++)//输出各个成绩,若没有该分段成绩的值则不输出
{
if (a>0)
printf("95分以上=%d\n",a);
if (b>0)
printf("90分以上=%d\n",b);
if (c>0)
printf("85分以上=%d\n",c);
if (d>0)
printf("80分以上=%d\n",d);
if (e>0)
printf("75分以上=%d\n",e);
if (f>0)
printf("70分以上=%d\n",f);
if (g>0)
printf("65分以上=%d\n",g);
if (h>0)
printf("60分以上=%d\n",h);
if (j>0)
printf("60分以下=%d\n",j);
}
}
void dataout(int number[],float chengji[])//输出输出函数
{
int j;
int i;
for(i=1;i<=5;i++) chengji0[i]=chengji[i];
printf("排序后的数据为:\n");
for(j=0;j<5;j++)
{
printf("%d %f",number[j],chengji[j]);//输出
printf("\n");
}
}
sort(float chengji[])/*这地方改了下!你对比这看看*/
{
int i,j,kz;//i,j用来做循环,
float t;//t用来数值交换
for(i=1;i<=5;i++)//应为冒泡排序,所以可以少比较一次
{
//kz=1;
for(j=1;j<=5-1-i;j++)//同上
if(chengji[j]>chengji[j+1])//如果前一个数比后一个数大,那么就进行数值交换
{
//kz=0;
t=chengji[j];
chengji[j]=chengji[j+1];
chengji[j+1]=t;//数值交换
}
}
}
void main()
{
int number[5];
float chengji[5];
int i,j;
float sum=0.0,ave;//number[5]用来记录学生的学号,chengji[5]用来记录学生的成绩,sum计算总分,ave计算平均分
printf ("please input 5 students number:\n");
for(i=0;i<5;i++)
{
scanf("%d",&number[i]);
}
printf("please input 5 students grade:\n");
for(j=0;j<5;j++)
{
scanf("%f",&chengji[j]);
}
for(j=0;j<5;j++)
{
sum=sum+chengji[j];
}//计算总分
ave=sum/5;//计算平均分
printf("平均成绩ave=%f\n",ave);
printf("超出平均分的人数有:\n");
for (j=0;j<5;j++)
{if (chengji[j]>ave)//比较是否超过平均分
printf("%d %f\n",number[j],chengji[j]);
}sort(chengji);//调用排序函数
dataout(number,chengji);//调用数据输出函数
switches(chengji);//调用分段函数
}