//用的VC++6.0
#include<stdio.h>
#define N 2
int main(){
struct Birthday{
int year;
int month;
int day;
};
struct Student{
int id;
char name[30];
struct Birthday birth;
char gender;
int scores[3];
double aver;
};
struct Student students[N];
for(int i=0;i<2;i++){
printf("请输入第%d位学生的信息\n",i+1);
printf("请输入学号:");
scanf("%d\n",&students[i].id);
printf("请输入姓名");
fflush(stdin);
gets(students[i].name);
printf("请输入出生年月日:");
scanf("%d%d%d\n",
&students[i].birth.year,
&students[i].birth.month,
&students[i].birth.day);
printf("请输入性别");
fflush(stdin);
students[i].gender=getchar();
printf("请输入语文数学外语成绩:\n");
for(int j=0;j<3;j++){
scanf("%d",&students[i].scores[j]);
}
putchar('\n');
}
for(int i=0;i<N;i++) { //计算平均分
students[i].aver=0;
for(int j=0;j<3;j++){
students[i].aver+=students[i].scores[j];
}
students[i].aver/=3.0;
}
for(int i=0;i<N-1;i++){ //按照平均分排序
for(int j=0;j<N-1-i;j++){
if(students[j].aver<students[j+1].aver){
struct Student tmp;
tmp=students[j];
students[j]=students[j+1];
students[j+1]=tmp;
}
}
}
printf("*****学生信息如下*****\n");
printf("学号\t%-10s\t出生年 月 日\t 性别\t英语\t数学\t语文\t平均分\n","姓名"); //为什么姓名用双引号,后面再
控制台输出时出现在前面
for(int i=0;i<N;i++){
printf("%d\t",students[i].id);
printf("%-10s\t",students[i].name);
printf("%d-%d-%d\t",students[i].birth.year,
students[i].birth.month,
students[i].birth.day
);
if(students[i].gender=='M')
printf("男\t");
else printf("女");
for(int j=0;j<3;j++){
printf("%d\t",students[i].scores[j]);
}
printf("%6.2f\n",students[i].aver);
}
}
以下为控制台输入输出
请输入第1位学生的信息
请输入学号:2009
12 //这里必须得输入点什么才能进行下一步,getchar(); 和fflush(stdin)都试过不好用
请输入姓名lucy
请输入出生年月日:
2002
12
13
1 //这里也是必须得输入点什么才能进行下一步,getchar(); 和fflush(stdin)都试过不好用
请输入性别f
请输入语文数学外语成绩90
80
70
请输入第2位学生的信息
请输入学号:200913
1
请输入姓名lily
请输入出生年月日:
20021014
10
12
1
请输入性别m
请输入语文数学外语成绩60
50
40
*****学生信息如下*****
学号 姓名 出生年 月别 英语 数学 语文 平均分 //这里出生年月日和性别怎么挤到一起了,
2009 lucy 2002-12-13 女90 80 70 80.00
200913 lily 20021014-10-12 女60 50 40 50.00
Clink v0.4.9 [git:2fd2c2] Copyright (c) 2012-2016 Martin Ridgers
http://mridgers.github.io/clink
Microsoft Windows [版本 10.0.22000.795]
#include<stdio.h>
#define N 2
int main(){
struct Birthday{
int year;
int month;
int day;
};
struct Student{
int id;
char name[30];
struct Birthday birth;
char gender;
int scores[3];
double aver;
};
struct Student students[N];
for(int i=0;i<2;i++){
printf("请输入第%d位学生的信息\n",i+1);
printf("请输入学号:");
scanf("%d\n",&students[i].id);
printf("请输入姓名");
fflush(stdin);
gets(students[i].name);
printf("请输入出生年月日:");
scanf("%d%d%d\n",
&students[i].birth.year,
&students[i].birth.month,
&students[i].birth.day);
printf("请输入性别");
fflush(stdin);
students[i].gender=getchar();
printf("请输入语文数学外语成绩:\n");
for(int j=0;j<3;j++){
scanf("%d",&students[i].scores[j]);
}
putchar('\n');
}
for(int i=0;i<N;i++) { //计算平均分
students[i].aver=0;
for(int j=0;j<3;j++){
students[i].aver+=students[i].scores[j];
}
students[i].aver/=3.0;
}
for(int i=0;i<N-1;i++){ //按照平均分排序
for(int j=0;j<N-1-i;j++){
if(students[j].aver<students[j+1].aver){
struct Student tmp;
tmp=students[j];
students[j]=students[j+1];
students[j+1]=tmp;
}
}
}
printf("*****学生信息如下*****\n");
printf("学号\t%-10s\t出生年 月 日\t 性别\t英语\t数学\t语文\t平均分\n","姓名"); //为什么姓名用双引号,后面再
控制台输出时出现在前面
for(int i=0;i<N;i++){
printf("%d\t",students[i].id);
printf("%-10s\t",students[i].name);
printf("%d-%d-%d\t",students[i].birth.year,
students[i].birth.month,
students[i].birth.day
);
if(students[i].gender=='M')
printf("男\t");
else printf("女");
for(int j=0;j<3;j++){
printf("%d\t",students[i].scores[j]);
}
printf("%6.2f\n",students[i].aver);
}
}
以下为控制台输入输出
请输入第1位学生的信息
请输入学号:2009
12 //这里必须得输入点什么才能进行下一步,getchar(); 和fflush(stdin)都试过不好用
请输入姓名lucy
请输入出生年月日:
2002
12
13
1 //这里也是必须得输入点什么才能进行下一步,getchar(); 和fflush(stdin)都试过不好用
请输入性别f
请输入语文数学外语成绩90
80
70
请输入第2位学生的信息
请输入学号:200913
1
请输入姓名lily
请输入出生年月日:
20021014
10
12
1
请输入性别m
请输入语文数学外语成绩60
50
40
*****学生信息如下*****
学号 姓名 出生年 月别 英语 数学 语文 平均分 //这里出生年月日和性别怎么挤到一起了,
2009 lucy 2002-12-13 女90 80 70 80.00
200913 lily 20021014-10-12 女60 50 40 50.00
Clink v0.4.9 [git:2fd2c2] Copyright (c) 2012-2016 Martin Ridgers
http://mridgers.github.io/clink
Microsoft Windows [版本 10.0.22000.795]