一道C语言题目,帮忙解答~谢谢

输入一个班10个学生的学号和每个学生3门功课(数学,英语,计算机)的成绩,编程计算出每个学生的总分和平均分,并按成绩优劣顺序,最后打印一张按高分到低分名次排序的成绩单。要求:
1 排序用一个函数实现
2 打印的成绩单表包括:序号,学号,数学,英语,计算机,总分,平均分

要求用结构体做

#include <stdio.h>

#define n 10

struct score
{
int num;
float math; //数学成绩
float english; //英语成绩
float computer; //计算机成绩
float avg; //平均成绩
float all; //总成绩
};

void fun(struct score s[])
{
int i,j,t1;
float t;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(s[i].all<s[j].all)
{
t=s[i].all;
s[i].all=s[j].all;
s[j].all=t;

t=s[i].avg;
s[i].avg=s[j].avg;
s[j].avg=t;

t=s[i].computer;
s[i].computer=s[j].computer;
s[j].computer=t;

t=s[i].english;
s[i].english=s[j].english;
s[j].english=t;

t=s[i].math;
s[i].math=s[j].math;
s[j].math=t;

t1=s[i].num;
s[i].num=s[j].num;
s[j].num=t1;

}
for(i=0;i<n;i++)
printf("编号:%d,学号:%d,数学成绩:%f,英语成绩:%f,计算机成绩:%f,平均分:%f,总分:%f\n",i+1,s[i].num,s[i].math,s[i].english,s[i].computer,s[i].avg,s[i].all);
}

void main()
{
int i;
struct score s[n];
printf("请输入学生信息:\n");
for(i=0;i<n;i++)
{
printf("学生 %d的信息\n学号: ",i+1);
scanf("%d",&s[i].num);
printf("数学成绩: ");
scanf("%f",&s[i].math);
printf("英语成绩: ");
scanf("%f",&s[i].english);
printf("计算机成绩: ");
scanf("%f",&s[i].computer);
s[i].avg=(s[i].computer+s[i].english+s[i].math)/3;
s[i].all=s[i].computer+s[i].english+s[i].math;

}
fun(s);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-06-25
不会
第2个回答  2008-06-25
struct score
{
float math; //数学成绩
float english; //英语成绩
float computer; //计算机成绩
float avg; //平均成绩
float all: //总成绩
}
求出平均成绩和总成绩来用,冒泡排序法就可以得出最后的成绩单了

一道C语言题目,看图~大神帮忙解答下吧!急急急急急!!在线等
答案是D 在C语言中数组赋值可以如A,那样,【】里面定义了长度5{}中有最大不超过5个值,则赋值成功 B在5个数值之内所以也是正确的 答案C,就是另外中赋值方法,在【】中不定义长度,因此数组a[]的实际长度取决于{}中的值的数量,也就是说在C答案中有5个0作为数值,因此C答案中的a[]的实际...

C语言的题,都不难,帮忙解答,追加悬赏喔。麻烦把各个选项都解释解释最好...
这个union是表示,一块储存空间用short,long,char,三种类型来描述,所以c[0] 与i[0]一样的。这个程序是要打印s->c[0],printf("%x\\n", s ->c[0])这句里的%x表示打印的数字是十六进制的。由于c[0]里面放的是0x39,所以这里打印的正好是39.第三题:与第二题类似,注意这里求的是them的...

求解C语言题目,最好有解释,谢谢:
1.*p1和*p2都是指向float类型的指针。它们的值只能是地址。A B C 中p1或p2的值都是地址,只有D中a[0]+1结果为float类型的数字,不是地址,所以应该选D 2.A 错误,函数的返回值又函数自身定义决定 B正确 C 错误 main函数可以放在程序的后面,前面可以放全局变量和函数等 D 错误 C语言程序总...

一道c语言问题,请各位高手们帮帮忙,谢谢
char p[][20]={“get”,”put”,”out”};p是一个有3个元素的数组,数组中的每个元素都是一个char[20]类型的数组。也就是说,p是一个二维数组。strlen(p[0])+strlen(p[1])+ strlen(p[2])即计算p中的三个字符串的长度总和,为3+3+3=9。

求解一道c语言题目 请详细解释一下怎样输入输出多组数据。谢谢!
include<stdio.h>int main(void){ int a[6][5]={{0}}; int i=0,j=0,k=0; int temp; for(i=0;i<6;i++) { for(j=0;j<5;j++) { scanf("%d",&a[i][j]); } } for(i=0;i<6;i++) { for(j=0;j<5;j++) { fo...

C语言题目,详细解释,每一项为什么,谢谢
这个题目选C。因为定义a[3][4]二维数组后,第一下标的取值范围是0~2三个数,第二下标的取值范围是0~3四个数,即:a[0~2][0~3],共计3×4=12个元素。显然选项C的a[0][4]并不在这个范围内,所以这个元素并不存在,是非法调用。

帮忙解答一道C语言选择题
第一部分typedef struct student STU;第二部分struct studrnt { };第一部分将结构体struct student定义为类型STU,所以可以用STU s;来声明一个结构体,所以D是对的 第二部分定义一个机构体struct student,所以可以用struct student s;来声明一个结构体,所以B是对的 选项C:typedef struct student s;是...

C语言题目,请帮忙做一下,谢谢!
1.for循环语句 for语句格式为:for(表达式1;表达式2;表达式3)语句:\/*循环体*\/ 该语句执行过程如下:①先对表达式1赋初值;②判别表达式2是否满足给定条件,若其值为真,满足循环条件,则执行循环体内语句,然后执行表达式3,进入第二次循环,再判别表达式2……;否则判断表达式2的值为假,不满足条件,就终止for...

初学C语言,请帮忙解答一下
因为变量c的值不为2、4、6时,所以假设c=7;A.0||0||0 = 0 B.(c>=2&&c<=6)为 0,所以0||1||1 = 1 C.因为(c>=2&&c<=6)= 0,所以&&后面的不用判断就知道(c>=2&&c<=6)&&!(c%2) = 0 D.和C一样的分析 也为0 所以正确答案为B.希望对您有所帮助,谢谢采纳~...

C语言问题谢谢
x < y ,因为不成立所以条件为假 (false 也就是 0), 然后 0 < 4成立,条件为真,所以输出结果为1.备注:这个题目考察的问题点实际上就是云算符的优先级 和 结合规则,如果能熟练掌握,其实很简单的,加油。以上是我对这道题目的解析,如果对你有帮助,请采纳一下,谢谢。

相似回答