先输入某个班学生人数n,再输入这n个学生的c语言期末成绩,输出最高分并统计不

如题所述

#include<stdio.h>
 
#define LEN 100 /*学生人数上限*/
#define FAIL 60 /*及格分数下限*/

struct student {
    int no; /*学号*/
    float score; /*成绩*/
};

void inputScore (struct student stu[], int n) { /*录入学生成绩*/
    int i,error;
    for (i = 0; i < n; i ++) {
     do {
     printf ("请输入第%d名学生信息:\n",i+1);
     printf ("学号:");
     scanf ("%d",&stu[i].no);
     printf ("成绩:");
     scanf ("%f",&stu[i].score);
     error = 0;
if (stu[i].score > 100 || stu[i].score < 0) {
error = 1;
printf ("\n成绩输入错误,请重新输入!\n");
}
     printf ("\n");
     } while (error);
    }
    printf ("%d名的学生信息均已输入完毕!\n",n);
    putchar ('\n');
}

void printScore (struct student stu[], int n) { /*输出学生成绩*/
int i;
printf ("学号\t成绩\n");
for (i = 0; i < n; i ++)
printf ("%d\t%.2f\n",stu[i].no,stu[i].score);
}

void printAverage (struct student stu[], int n) { /*输出平均分*/
float average=0;
int i;
for (i = 0; i < n; i ++)
average += stu[i].score;
average/=n;

printf ("%d名学生的平均成绩为:%.2f\n",n,average);
putchar ('\n');
}

void printMaxMin (struct student stu[], int n) { /*输出最高分、最低分*/
float max=stu[0].score,min=stu[0].score;
int i;
for (i = 0; i < n; i ++) {
if (stu[i].score > max)
max = stu[i].score;
if (stu[i].score < min)
min = stu[i].score;
}

printf ("%d名学生\n最高分:%.2f\n最低分:%.2f\n",n,max,min);
putchar ('\n');
}


void printPassRate (struct student stu[], int n) { /*计算并输出合格率*/
int i,count;
for (i = 0,count = 0; i < n; i ++)
       if (stu[i].score > FAIL)
           count ++;

printf ("%d名学生\n%d名学生成绩合格\n合格率:%.2f%%\n",n,count,(float)count/n*100);
putchar ('\n');
}

void printSort (struct student stu[], int n) { /*从高到低排序*/
int i,j;
struct student temp;
for (i = 0; i < n - 1; i++)
for (j = 0; j < n - 1 - i; j++)
if (stu[j].score < stu[j + 1].score) {
temp = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = temp;
}
printf ("%d名学生成绩从高到低排序:\n",n);
printScore (stu,n);
putchar ('\n');
}

int main(void) {
int stuNum,key=0;
    
    struct student stu[LEN]; /*学生结构体数组*/
    printf ("请输入学生人数:");
    scanf ("%d",&stuNum);
    putchar ('\n');
    
    while (key!=6) {
     system ("cls"); /*清屏*/
     puts ("=====================================================================");
     printf("序号\t功能详情\n");
     puts ("---------------------------------------------------------------------");
     printf("1\t输入%d名同学成绩\n",stuNum);
     printf("2\t输出%d名同学的平均成绩\n",stuNum);
     printf("3\t输出最高分和最低分\n");
     printf("4\t计算及格率并输出\n");
     printf("5\t将%d名同学成绩按从高分到低分的顺序输出\n",stuNum);
     printf("6\t退出\n");
puts ("=====================================================================");

printf("请输入功能序号以开启操作:");
scanf("%d",&key);
printf("\n");
system ("cls"); /*清屏*/
     switch (key){
         case 1: inputScore (stu,stuNum); break;
         case 2: printAverage (stu,stuNum); break;
         case 3: printMaxMin (stu,stuNum); break;
         case 4: printPassRate (stu,stuNum); break;
         case 5: printSort (stu,stuNum);break;
         case 6: printf("程序结束!\n\n");;break;
         default:printf("输入错误,请重新输入!\n\n");break;
     }
     if (key!=6) {
     printf("按回车键继续\n");fflush (stdin);getch ();
    }
    }
    getch ();
    return 0;
}

运行结果

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-12-09

统计不... 不什么啊?不及格人数吗? 

可以这样做:

#include <stdio.h>
int main()
{
    float max = -1, t;
    int low = 0, i, n;
    scanf("%d",&n);
    for(i = 0; i < n; i ++)
    {
        scanf("%f",&t);
        if(t > max) max = t;
        if(t<60) low ++;
    }
    printf("the max score is %.2f\n", max);
    printf("number of stu lower than 60 is %d\n", low);
    
    return 0;
}

追问

不及格人数!

追答

那我这个就可以了。你可以试试 满意请采纳

本回答被网友采纳
相似回答