共3门学科,要求用C语言编程,输入全班成绩,并把它们的平均分进行排序,如何做到?

如题所述

#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define stuNum  3 //假设全班学生3人  å¤ªå¤šæˆ‘懒得输,反正测试,你想改多少自己改
#define nameLen 11 //学科名称的最大字符数  æˆ‘预设最多5个中文字  ä¸æ»¡æ„è‡ªå·±æ”¹

typedef struct xueke
{
    char xkName[nameLen];//学科名称
    float xkp;//学科平均分
}XK;
int main()
{
    int y[stuNum],s[stuNum],w[stuNum],i,j;//定义语文 æ•°å­¦ å¤–语 ä¸‰å­¦ç§‘
    int numsave,sum[]={0,0,0};//记录三科成绩和
    char *nameSave=(char *)malloc(sizeof(char)*nameLen);
    XK xk[3];//记录三科名称及平均分
    //录入成绩
    printf("录入%d名学生的语文成绩:\n",stuNum);
    for(i=0;i<stuNum;i++)
    {
        scanf("%d",&y[i]);
        sum[0]=sum[0]+y[i];
    }
    printf("录入%d名学生的数学成绩:\n",stuNum);
    for(i=0;i<stuNum;i++)
    {
        scanf("%d",&s[i]);
        sum[1]=sum[1]+s[i];
    }
    printf("录入%d名学生的外语成绩:\n",stuNum);
    for(i=0;i<stuNum;i++)
    {
        scanf("%d",&w[i]);
        sum[2]=sum[2]+w[i];
    }

    strcpy(xk[0].xkName,"语文");
    xk[0].xkp=(float)sum[0]/stuNum;
    strcpy(xk[1].xkName,"数学");
    xk[1].xkp=(float)sum[1]/stuNum;
    strcpy(xk[2].xkName,"外语");
    xk[2].xkp=(float)sum[2]/stuNum;

    for(i=0;i<3;i++)
    {
        for(j=i;j<3;j++)
        {
            if(xk[i].xkp<xk[j].xkp)//降序排列
            {
                numsave=xk[i].xkp;
                memset(nameSave,0,nameLen);
                strcpy(nameSave,xk[i].xkName);

                xk[i].xkp=xk[j].xkp;
                memset(xk[i].xkName,0,nameLen);
                strcpy(xk[i].xkName,xk[j].xkName);

                xk[j].xkp=numsave;
                memset(xk[j].xkName,0,nameLen);
                strcpy(xk[j].xkName,nameSave);
            }
        }

    }


    //打印
    printf("降序排列\n");
    for(i=0;i<3;i++)
    {
        printf("学科:%s å¹³å‡åˆ†:%.1f\n",xk[i].xkName,xk[i].xkp);
    }
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2018-01-07

你这个问题有一些不清楚的地方。程序设计很重要的一点就是明确要求。第一,三门学科成绩是精确到那一位的?(确定数据类型)。第二:这个班有多少人?(一个,两个。。。)那我就猜好了。精确到小数点后一位,人数由键盘输入。

思路:把平均分存进数组,然后用排序法排序,一个班大约50个人左右。用快速排序法吧。

代码如下:

#include<stdio.h>

int n;
float score[101];//定义两个全局变量,这两个变量需要在子函数中使用

void quicksort(int ,int );

int main(void)
{
int i;
float a,b,c;
//读入数据
printf("输入班级人数\n");
scanf("%d",&n);

for(i=0;i<n;i++)
{
printf("输入%d号学生的三门成绩\n",i);
scanf("%f%f%f",&a,&b,&c);
score[i] = (a+b+c)/(float)3;
}

quicksort(0,n-1);

printf("从小到大的分数\n");
for(i=0;i<n;i++)
printf("%f\n",score[i]);
}

void quicksort(int left,int right)
{
int i,j;//定义哨兵
float term;//中间量

if(left>right)
return;
term = score[left];
i = left;
j = right;
while(i!=j)
{
//顺序很重要,要先往右从左找。
while(score[j]>=term&&i<j)
j--;
//再从左往右找
while(score[i]<=term&&i<j)
i++;
//交换两个数在数组中的位置
if(i<j)
{
score[i] = score[i]+score[j];
score[j] = score[i]-score[i];
score[i] = score[i]-score[j];
}
}
//将基准数归位
score[left] = score[i];
score[i] = term;

quicksort(left,i-1);
quicksort(i+1,right);
}//快速排序库函数有的,不过以前写了,粘贴过来改改,效果一样。

共3门学科,要求用C语言编程,输入全班成绩,并把它们的平均分进行排序,如 ...
\/\/学科平均分}XK;int main(){ int y[stuNum],s[stuNum],w[stuNum],i,j;\/\/定义语文 数学 外语 三学科 int numsave,sum[]={0,0,0};\/\/记录三科成绩和 char *nameSave=(char *)malloc(sizeof(char)*nameLen); XK xk[3];\/\/记录三科名称及平均分 \/\/录入成绩 pri...

C语言 \/\/练习 求出三名学生 三门功课成绩 并排序 通过堆空间来实现...
printf("3名学生3科成绩情况为:\\n");showArry(p,3,3);printf("请输入排序依据:(0按学科1排序,1按学科2排序,2按学科3排序,3按总分排序):");while(x<0 || x>3)scanf("%d",&x);printf("请输入排序方式:(1升序排列,0降序排列):");while(flag!=1 && flag!=0)scanf("%d",&...

c语言编程要求输入全班3门课的成绩,输出全班的总成绩以及平均分还有每个...
printf("全班级总分为%f,平均分为%f",total,total\/(N*3));}

请用C语言编一个程序计算3位学生3门课成绩总分和平均成绩?
printf("成绩%d: ",j+1);scanf("%d",&str[count].score[j]);sum+=str[count].score[j];} str[count].avr=sum\/3;printf("\\n是否继续?(y or n)");fflush(stdin);scanf("%c",&ch);count++;} return stud;} \/\/成绩排序函数 void sort()...

C语言输入某学生3个学科成绩 输出成绩 总分和平均分
include<stdio.h> void main(){ int a[5];int b,c,d=0;a[3]=0;printf("\\n输入学生三门功课成绩:");for(b=0;b<3;b++){ scanf("%d",&a[b]);a[3]+=a[b];} a[4]=a[3]\/3;printf("总分为:\\n");printf("%d \\t",a[3]);printf("平均分为:\\n");printf("%d \\...

C语言编程,求出某学生期末三门课程的总分及平均分
程序如下:include"stdio.h"int main (void){int a,b,c;\/\/定义三个变量啊a,b,c分别存放三门课的成绩double sum,ave;\/\/定义sum和ave分别存放三门成绩的和与平均值printf("请输入三门课程的成绩a= b= c= ");scanf("%d%d%d",&a,&b,&c);sum=a+b+c;\/\/求三门课程的和ave=(a+...

c语言中输入全班的三门课成绩输出每人各科平均成绩
include <stdio.h>int main() { double mark[4][3], aver[4], high[3] = {0}; int i, j; for (i = 0; i < 4; i++) { double all = 0.0; printf ("请输入%c的三门成绩:\\n", 'A'+i); for (j = 0; j < 3; j++) { scanf ("%lf",...

...每个学生有5门课成绩,并统计每个学生的平均分
"请输入第%d个学生的成绩中间用空格分开:\\n",i+1);scanf("%f %f %f %f %f",&g[i][0],&g[i][1],&g[i][2],&g[i][3],&g[i][4]);}for (int i = 0; i < 3; i++) {float avg = 0.0;float sum = 0.0;for (int j = 0; j < 5; j++) {sum += g[...

C语言编程,从键盘上输入学生的三门课程成绩,求总成绩和平均成绩
include<stdio.h> int main(){ double a,b,c;scanf("%lf%lf%lf",&a,&b,&c);printf("总成绩:%.2lf 平均成绩:%.2lf\\n",a+b+c,(a+b+c)\/3);return 0;}

...english、C language,输出三门成绩,总成绩,平均成绩
int main(){ int i,j,k;int sum;float average;printf("输入DB成绩:\\n");scanf("%d",&i);printf("输入english成绩:\\n");scanf("%d",&j);printf("输入C language成绩:\\n");scanf("%d",&k);sum=i+j+k;average=sum\/3;printf("sum=%d,average=%.2f",sum,average);getchar();...

相似回答