c语言1)按成绩高低排序,输出排序后的成绩;2)统计并输出不及格成绩、人数;3)输出最高分、最低分?

从键盘输入若干个学生的成绩,按要求完成功能。(10分)
题目内容:
从键盘输入若干个(不超过10个)学生的百分制成绩,当输入成绩为负值时,则表示输入结束。
具体要求完成的功能如下:
1)按成绩高低排序,输出排序后的成绩;
2)统计并输出不及格成绩、人数;
3)输出最高分、最低分。
输入格式:
输入若干个分数,用空格分隔,如果输入的分数<0,则结束输入;
如果输入的分数个数超过10个,则只处理前10个成绩。
输出格式:
分三行输出,即,
第1行从高到低输出排序后的成绩,数据之间用一个空格分隔,行末无空格;
第2行输出不及格的成绩(从高到低的顺序)、不及格的人数,行末无空格。
第3行输出最高分、最低分,两数之间有一个空格,行末无空格。
输入样例:
85 55 90 75 88 70 65 45 -1
输出样例:
90 88 85 75 70 65 55 45
55 45 2
90 45

根据题目中信息所示:仅输入一科目成绩;人数不作为参数输入;

现在假设:及格线为60分(题目未明确给出)

    #include<stdio.h>

    //#include< cstring>

    //#include<algorithm>

    typedef struct {

    int grade;

    }student;

    //选择排序

    void selectSort(student stu[10],int n){

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

    {int k=i;

    for(int j=k+1;j<=n;j++){

    if(stu[j].grade>stu[k].grade)

    {k=j;

    }}

    int temp=stu[i].grade;

    stu[i].grade=stu[k].grade;

    stu[k].grade=temp;}}

    //数据输出

    void display(student stu[10],int n)

    {

    for(int j=0;j<n;++j)

    printf("%d ",stu[j].grade);

            printf("\n");}

    //数据最大值与最小值

    void poll_values(student stu[2],int n){

    printf("%d %d",stu[0].grade,stu[n].grade);

    printf("\n");

    }

    int main(){

    student stu[10];

    student fail[10];

    student poll[2];

    int n=0;//总人数

    int m=0;//不及格人数

    while(n<10){

    scanf("%d",&stu[n].grade);

    if(stu[n].grade<0){

    break;

    }

    ++n;}

    selectSort(stu,n);

    //--------------------------------------

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

    if(stu[i].grade<60){

    fail[m]=stu[i];

    ++m;}

    selectSort(fail,m);

    display(stu,n);

    display(fail,m);

    poll[0]=stu[0];

    poll[1]=stu[n-1];

    display(poll,2);

    //poll_values(stu,n)

    return 0;

    }

    运行结果如下

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-06-17
#include<stdio.h>
int less=0,num=0,i=0,j, scores[100000],temp;
//输入成绩
void input(){
i=0;
num=0;
while(1==1){
scanf("%d",&scores[i]);
if(scores[i++]<0||i==100000-1){
break;
}
}
//控制输入人数不超过10个人,如果输入人数多于10个人,则取前10个
if(i>10){
num=10;
}else{
num=i-1;
}
//统计大于100分数有多少个
int count=0;
for(i=0;i<num;i++){
if(scores[i]>100){
count++;
}
}
//当分数大于100分的时候递归输入
if(count>0){
printf("分数必须小于等于100!\n\n");
input();
}
}
void main(){
input();
//冒泡排序降序排序(从大到小)
for(i=0;i<num;i++){
for(j=0;j<num-i;j++){
if(scores[j]<scores[j+1]){
temp=scores[j];
scores[j]=scores[j+1];
scores[j+1]=temp;
}
}
}
//逆序输出(由高到低)输出成绩
for(i=0;i<num;i++){
if(i!=num-1){
printf("%d ",scores[i]);
}else{
printf("%d\n",scores[i]);
}
}
//统计和输出不及格人数,同时输出不及格分数
for(i=0;i<num;i++){
if(scores[i]<60){
less++;
printf("%d ",scores[i]);
}
}
printf("%d\n",less);
printf("%d %d\n",scores[0],scores[num-1]);
}
第2个回答  2020-06-17
int n=0;
int arr[10];
int temp=0;
do{scanf("%d",&temp);
if(n<10&&temp>=0)
arr[n++]=temp;
}whlie(temp>=0);
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++){
if(arr[j]<arr[i]){
temp=arr[i];arr[i]=arr[j];arr[j]=temp;
}
}
temp=0;
for(int i=0;i<n;i++){
if(arr[i]<60){temp++;printf("%d ",arr[i]);}
}
printf("%d\n%d %d",temp,arr[0],arr[n-1]);
相似回答