C语言一维数组的问题,求解啊

1. (一维数组)从键盘输入一个班(全班最多不超过10人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别统计下列内容:

(1)统计不及格人数;最高分,平均分

(2)统计成绩在全班平均分及平均分之上的学生人数;

(3)对学生成绩用冒泡法排序,输出。

#include<stdio.h>

#define size 10

void main()

{

 float a[size],avg,sum=0,temp=0;

 int num=0,j;

 /*********将学生的成绩储存到数组a[size]中**********/

 printf("请输入学生的成绩");

 for(int i=0;i<size;i++)

 {

  scanf("%f",&a[i]);

  if(a[i]<0)break;

  sum=sum+a[i];

  num++;

 }

 avg=sum/num;

 printf("全班总分:%.2f\n全班平均分:%.2f\n",sum,avg);

 for(i=0;i<num;i++)

 {

  if(a[i]>temp)temp=a[i];

 }

 printf("全班成绩最高分是:%.2f\n",temp);

    /**********输出全班高于平均分的成绩**********/

 printf("高于全班平均分的分数:");

 for(i=0;i<num;i++)

    if(a[i]>avg)

 printf("%.2f\t",a[i]);

 

 printf("\n");

 /************冒泡排序全班成绩并输出**********/

 printf("全班成绩如下(由高到低):");

 for(i=1;i<=num;i++)

 {

 for(j=0;j<num;j++)

  if(a[j]>a[j+1])

  {

   temp=a[j];

   a[j]=a[j+1];

   a[j+1]=temp;

  }

 }

 for(i=1;i<=num;i++)

 {

  printf("%.2f\t",a[i]);

 }

 printf("\n");

}

 

 

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-18

#include "stdio.h"

void main()

{

 int i,b,j,c;

 float a[10],max,average,m=0,sum=0,n=0,t;

 for(i=0;i<10;i++)

 {

  scanf("%f",&a[i]);

  if(a[i]<0)

   break;        //当输入小于0的数时,退出循环,当然若是输入了10个数还没小于0则也会退出

 }

 for(b=0;b<i;b++)

 {

  if(a[b]<60)

  m++;        //这是不及格人数

 }

 for(b=0;b<i;b++)

 sum=sum+a[b];//这是总分数

 average=sum/i;//这是平均分数

 for(b=0;b<i;b++)

 {

  if(a[b]>=average)

   n++;//这是大于等于平均分数的人数

 }

 for(j=1;j<i-1;j++)  //此处开始则为冒泡法

  for(c=0;c<i-j;c++)

   if(a[c]>a[c+1])

   {

    t=a[c];

    a[c]=a[c+1];

    a[c+1]=t;

   }

 printf("不及格人数为%f人,最高分为%f,平均分为%f,大于等于平均分的人数为%f",m,a[i-1],average,n);

 printf("成绩从低到高的顺序是");

 for(c=0;c<i;c++)//这是用冒泡法排完序后从小到大输出分数

  printf("%f ",a[c]);

 printf("\n");

}

第2个回答  2013-04-18
int main(void)
{
double score[10];
int count=0;//统计输入的成绩个数
double max=0,agv=0;//存放最大值和平均值
double sum=0;//存放总分
int upper_count=0;//存放成绩在平均分及平均分之上的人数
double tmp=0;//存放临时变量,用于冒泡排序
int num=0;//存放不及格人数

//依次输入学生成绩
printf("请输入学生的成绩:以负数作为结束");
for (int i=0; i<10; i++) {

scanf("%lf",&score[i]);
if (score[i]<0) //当输入成绩为负数时,输入结束
break;
count++;
sum+=score[i];
}
printf("%d",count);
agv=sum/count;//求平均值
max=score[0];

//统计不及格人数,最高分,
for (int i=0; i<count; i++) {
if (score[i]<60) {
num++;
}
if (max<score[i]) {
max=score[i];
}
if (score[i]>agv) {
upper_count++;
}
}
printf("不及格人数为%d\n最高分为:%.2f\n平均分为:%.2f\n成绩在全班平均分及平均分之上的学生人数为:%d\n",num,max,agv,upper_count);
//冒泡排序
for (int i=0; i<count-1; i++) {
for (int j=i+1; j<count; j++) {
if (score[j]<score[j+i]) {
tmp=score[j];
score[j]=score[j+1];
score[j+1]=tmp;
}
}
}
printf("排序后的分数为:");
for (int i=0; i<count; i++) {
printf("%.2f ",score[i]);
}
}
第3个回答  2013-04-18
#include<stdio.h>
#include<string.h>
#define N 10//定义数组大小
int main(void)
{
void bubble(float scores[],int n);
int i = 0;
int temp = 0;
int j = 0;
float scores[N];
float sum = 0.0;
float average = 0.0;
puts("输入成绩,负数值结束输入操作");
memset(scores,0,sizeof(scores));
for(i=0;i<N;i++)
{
scanf("%f",&scores[i]);
// if(scores[i] < 0.0)
{
// j = i;//保存下退出前的序号
// printf("%d\n",j);
scores[i] = 0;//推出前前空
break;
}
printf("scores[%d]=%.2f\n",i,scores[i]);
}
j = i;//保存下退出前的序号
puts("数据处理阶段");
bubble(scores,j);//排好序的数组
for(i=0;i<j;i++)
{
printf("%.2f\n",scores[i]);
sum = sum+scores[i];//计算总分数
}
average = sum/j;
printf("average = %.2f\n",average);
for(i=0;i<j;i++)
{
if(scores[i] >= average )
temp++;//大于平均分人数
}
printf("最高分=%.2f\t最低分=%.2f\n及格人数=%d\n",scores[0],scores[j-1],temp);
return 0;
}
void bubble(float score[],int n)
{
int i = 0;
int j = 0;//降序排列
float temp = 0;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
{
if(score[j+1] > score[j])
{
temp = score[j];
score[j] = score[j+1];
score[j+1] = temp;
}
}
}

相似回答