用C语言设计一个学生成绩统计程序,

要求(1)输入30个学生一门功课的成绩。(2)计算班级平均分。(3) 统计0~59、60~69、70~79、80~89、90~100各区间的人数。(4)计算大于等于平均分的人数。用函数解决。

改好了,问题不大,我都写在注释里了:

#include<stdio.h>
#include<math.h>
#define N 35
#define COURSE 4

struct student
{
char num[10];/*如果把num当作字符串的话,不能用int,而是char数组。不然就用int num;*/
float score[4];
float sum;
float aver;
}
stu[N];

void main()
{
void Input(struct student stu[]);
void count(struct student stu[]);
void sort(struct student stu[]);
void find(struct student stu[]);
sqrt(1.0);/*不知你用什么编译器,如果TC的话,有个BUG。就是结构体里有float型的话,要加这句,不然会报错*/
Input(stu);
count(stu);
find(stu);
/*为什么你的程序里没有执行着几个函数咧?*/

}
void Input(struct student stu[])
{
int i,j;
printf("Enter No.and score as :score1 score2 score3 score4\n");
for (i=0;i<N;i++)
{
scanf("%s",stu[i].num);/*用%s输入字符串*/
for (j=0;j<COURSE;j++)
{
scanf("%f",&stu[i].score[j]);
}
}

}

void count(struct student stu[])
{
float sum,aver;
int i,j;
for(i=0;i<N;i++)
{
sum=0;
for(j=0;j<5;j++)
sum+=stu[i].score[j];
aver=sum/4;
stu[i].sum=sum;
stu[i].aver=aver;
}

}

void sort(struct student stu[])
{
int i,j,k;
struct student temp;
for(i=0;i<N;i++)
{
k=i;
for(j=i+1;j<N;j++)
if(stu[k].sum<stu[j].sum)k=j;
if(k!=i)
{
temp=stu[i];
stu[i]=stu[k];
stu[k]=temp;
}
}
printf("number score1 score2 score3 score4 sum average \n");
for(i=0;i<N;i++)
printf("%-8s%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f\n",stu[i].num,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].sum,stu[i].aver);
/*输出学号也用%s*/
}

void find(struct student stu[])
{
int flag=0;
int i,j;
sort(stu) /*;//stu[];)*/

printf("the student of one score>=90 and 前五名:\n");
/*这两句调换一下位置,不然输出不太好*/

for(i=0;i<5;i++)
{
int sum=0;
for(j=0;j<4;j++)
if(stu[i].score[j]>=90 )sum++;
if(sum)
{
flag=1;
printf("%-8s%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f\n",stu[i].num,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].sum,stu[i].aver);
}
}
if(flag==0)
printf(" not exist!\n");
/*这个判断放在循环体之外,不然会输出好多" not exist!"*/

}

另外,注意:
1.个班的学生成绩最多35人。你的咋是固定35人捏?
2.第四点要求:根据用户要求输入课程号显示该门课程成绩在90以上且总分在前五的学生的 学号和各科成绩,平均分和总分

你似乎没有看清题意吧?是要用户输入课程号耶。

这些你自己应该知道怎么做吧?
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-10-29
要求输入10个学生5门功课的成绩,分别用子函数求出:(1)每个学生的平均分;(2)每门功课的平均分;(3)找出最高分所对应的学生和功课。
#include<stdio.h>
#include<stdlib.h>
struct student
{
 double score[5];
}s[10];
void avg()

 printf("\n");
 double sum;
 for(int i=0;i<10;i++)
    { 
   sum=0;
   printf("第%d位学生的平均分数是: ",i+1);
   for(int j=0;j<5;j++) 
     sum+=s[i].score[j];
   printf("%.2lf\n",sum/5);
  }
  printf("\n");
  return ;
}
void tavg()
{
 printf("\n");
 double sum;
 for(int j=0;j<5;j++)
 {
  sum=0;
  for(int i=0;i<10;i++)
   sum+=s[i].score[j];
   printf("第%d门功课的平均分是: %.2lf\n",j+1,sum/10); 
 }
 return ;
}
void maxsc()
{
 printf("\n");
 double max=-1;
 int i,j;
 for( i=0;i<10;i++)
  {
   for( j=0;j<5;j++)
     if(max<s[i].score[j]) 
     {
     max=s[i].score[j];
    }
  }
  printf("最高分是:%.2lf分,对应学生与功课如下:\n",max);
  for(i=0;i<10;i++)
  {
   for(int j=0;j<5;j++)
      if(max==s[i].score[j])
      {
     printf("第%d位学生的第%d门成绩\n",i+1,j+1);
    }
  } 
  printf("\n"); 

int main()
{
 int i,j;
 for(i=0;i<10;i++)
 {  
  for(j=0;j<5;j++) 
    {
    printf("输入第%d位学生的第%d门功课的成绩: ",i+1,j+1);
    scanf("%lf",&s[i].score[j]);
    printf("\n");
    }
    printf("\n");
 
 }
 printf("学生平均分数情况:\n"); 
   avg();         //每个学生的平均分 
   printf("功课平均分数情况:\n"); 
   tavg();        //每门功课的平均分
   printf("最高分数即对应学生功课:\n"); 
 maxsc();        //最高分对应的学生和功课 
   system("PAUSE");
   return 0;
}

第2个回答  推荐于2018-05-01
#include"stdio.h"
void main()
{
int n=0;
int a[30];
int zf=0;
//输入
for(n=0;n<30;n++)
{
printf("请输入第%d个学生的成绩:",n+1);

scanf("%d",&a[n]);
}

pjfen(a,30);
tongji(a,30);
dypjfen(a,30);

}
//求平均分
int pjfen(int a[],int n)
{
int i;

int zf=0;

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

{
zf+=a[i];

}
printf("平均分为%d\n",zf/n);

return zf/n;

}

//统计各区间人数
void tongji(int a[],int n)
{
int i;

int b,c,d,e,f;

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

{
if (a[i]<59)
b++;

else if (a[i]<69)
c++;

else if (a[i]<79)
d++;

else if (a[i]<89)
e++;

else

f++;

}
printf("0~59、60~69、70~79、80~89、90~100各区间的人数分别为%d,%d,%d,%d,%d\n",b,c,d,e,f);

}

//求大于平均分人数
void dypjfen(int a[],int n)
{
int i;
int n=0;

int pj;

pj= pjfen(a,n);

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

{
if(a[i]>=pj)

n++;

}
printf("大于平均分人数为为%d\n",n);

}本回答被网友采纳
第3个回答  2015-10-07
改好了,问题不大,我都写在注释里了:

#include<stdio.h>
#include<math.h>
#define N 35
#define COURSE 4

struct student
{
char num[10];/*如果把num当作字符串的话,不能用int,而是char数组。不然就用int num;*/
float score[4];
float sum;
float aver;
}
stu[N];

void main()
{
void Input(struct student stu[]);
void count(struct student stu[]);
void sort(struct student stu[]);
void find(struct student stu[]);
sqrt(1.0);/*不知你用什么编译器,如果TC的话,有个BUG。就是结构体里有float型的话,要加这句,不然会报错*/
Input(stu);
count(stu);
find(stu);
/*为什么你的程序里没有执行着几个函数咧?*/

}
void Input(struct student stu[])
{
int i,j;
printf("Enter No.and score as :score1 score2 score3 score4\n");
for (i=0;i<N;i++)
{
scanf("%s",stu[i].num);/*用%s输入字符串*/
for (j=0;j<COURSE;j++)
{
scanf("%f",&stu[i].score[j]);
}
}

}

void count(struct student stu[])
{
float sum,aver;
int i,j;
for(i=0;i<N;i++)
{
sum=0;
for(j=0;j<5;j++)
sum+=stu[i].score[j];
aver=sum/4;
stu[i].sum=sum;
stu[i].aver=aver;
}

}

void sort(struct student stu[])
{
int i,j,k;
struct student temp;
for(i=0;i<N;i++)
{
k=i;
for(j=i+1;j<N;j++)
if(stu[k].sum<stu[j].sum)k=j;
if(k!=i)
{
temp=stu[i];
stu[i]=stu[k];
stu[k]=temp;
}
}
printf("number score1 score2 score3 score4 sum average \n");
for(i=0;i<N;i++)
printf("%-8s%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f\n",stu[i].num,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].sum,stu[i].aver);
/*输出学号也用%s*/
}

void find(struct student stu[])
{
int flag=0;
int i,j;
sort(stu) /*;//stu[];)*/

printf("the student of one score>=90 and 前五名:\n");
/*这两句调换一下位置,不然输出不太好*/

for(i=0;i<5;i++)
{
int sum=0;
for(j=0;j<4;j++)
if(stu[i].score[j]>=90 )sum++;
if(sum)
{
flag=1;
printf("%-8s%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f\n",stu[i].num,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].sum,stu[i].aver);
}
}
if(flag==0)
printf(" not exist!\n");
/*这个判断放在循环体之外,不然会输出好多" not exist!"*/

}

另外,注意:
1.个班的学生成绩最多35人。你的咋是固定35人捏?
2.第四点要求:根据用户要求输入课程号显示该门课程成绩在90以上且总分在前五的学生的 学号和各科成绩,平均分和总分

你似乎没有看清题意吧?是要用户输入课程号耶。

这些你自己应该知道怎么做吧?