一、实验目的及要求
- 进一步理解结构体的概念;
- 掌握结构体的定义和结构体变量的定义和使用方法;
- 能正确使用结构体数组;
- 掌握链表的基本概念,能够编写简单的应用程序
- 进一步提高编程能力。
1.一个班有10名同学,每名同学都有如下信息:学号,姓名,三门课程的成绩。请编写程序输入全班同学的信息,并且按第一门课程的成绩从小到大排序后输出。(见结构体程序设计 一)
3.在题1的基础上,每个同学添加出生日期信息,编写程序输入全班同学的信息,并且按照年龄(出生日期)排序后输出。要求:判断二人的大小写成函数。
//一个班有10名同学,每名同学都有如下信息:学号,姓名,三门课程的成绩。
//请编写程序输入全班同学的信息,并且按第一门课程的成绩从小到大排序后输出3. 在题1的基础上,每个同学添加出生日期信息,
//编写程序输入全班同学的信息,并且按照年龄(出生日期)排序后输出。要求:判断二人的大小写成函数。并分别用选择排序和冒泡排序。
#include<stdio.h>
#define N 3
typedef struct date {
int year;
int month;
int day;
}Date;
struct student
{
int num;
char name[20];
float score[3];
Date birth;
};
void input(struct student stu[])
{
int i;
for (i = 0; i < N; i++)
{
printf("请输入第%d个学号,姓名,三门课程的成绩", i + 1);
scanf_s("%d%s%f%f%f", &stu[i].num, stu[i].name,10, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
printf("请输入该学生的而出生日期:");
scanf_s("%d%d%d",&stu[i].birth.year,&stu[i].birth.month,&stu[i].birth.day);
}
}
void output(struct student stu[])
{
int i;
for (i = 0; i < N; i++)
{
printf("第%d个学号:%d,姓名:%s", i + 1, stu[i].num, stu[i].name);
printf("三门课的成绩:%.2f %.2f %.2f\n", stu[i].score[0], stu[i].score[1], stu[i].score[2]);
printf("出生日期:");
printf("%d年%d月%d日\n", stu[i].birth.year, stu[i].birth.month, stu[i].birth.day);
}
}
int comparedate(Date d1, Date d2)
{
return d1.year * 10000 + d1.month * 100 + d1.day > d2.year * 10000 + d2.month * 100 + d2.day;
}
void sortage(struct student stu[])
{
int i, j, k;
struct student temp;
for (i = 0; i < N - 1; i++)
{
k = i;
for (j = i + 1; j < N; j++)
if (comparedate(stu[j].birth,stu[k].birth))
k = j;
temp = stu[i];
stu[i] = stu[k];
stu[k] = temp;
}
}
int main()
{
struct student stu[N];
input(stu);
sortage(stu);
output(stu);
}
4.计算每名同学三门课程的平均成绩,并按照平均成绩排序后输出。在此基础上,每名同学增加等级(grade)信息,若平均成绩高于全班平均成绩10分以上,则为”A”,高于平均成绩不超过10分,则为”B”,低于平均成绩则为”C”,计算每个同学的等级,并输出。
//一个班有10名同学,每名同学都有如下信息:学号,姓名,三门课程的成绩。
//请编写程序输入全班同学的信息,并且按第一门课程的成绩从小到大排序后输出4.
//在题2的基础上,每名同学增加等级(grade)信息,若平均成绩高于全班平均成绩10分以上,则为”A”,
//高于平均成绩不超过10分,则为”B”,低于平均成绩则为”C”,计算每个同学的等级,并输出。
#include<stdio.h>
#define N 3
struct student
{
int num;
char name[20];
float score[3];
float avg;
};
float avg;
void input(struct student stu[])
{
int i;
float sum=0;
for (i = 0; i < N; i++)
{
printf("请输入第%d个学号,姓名,三门课程的成绩", i + 1);
scanf_s("%d%s%f%f%f", &stu[i].num, stu[i].name, 10, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
stu[i].avg = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3;
sum += stu[i].avg;
}
avg = sum / N;
}
void output(struct student stu[])
{
int i;
for (i = 0; i < N; i++)
{
printf("第%d个学号:%d,姓名:%s", i + 1, stu[i].num, stu[i].name);
printf("三门课的成绩:%.2f %.2f %.2f\n", stu[i].score[0], stu[i].score[1], stu[i].score[2]);
for (i = 0; i < N; i++)
{
if (stu[i].avg > avg + 10)
printf("平均成绩:%.2f,等级A\n", stu[i].avg);
else if (stu[i].avg >= avg)
printf("平均成绩:%.2f,等级B\n", stu[i].avg);
else if(stu[i].avg < avg)
printf("平均成绩:%.2f,等级C\n", stu[i].avg);
}
}
}
void sortavg(struct student stu[])
{
int i, j, k;
struct student temp;
for (i = 0; i < N - 1; i++)
{
k = i;
for (j = i + 1; j < N; j++)
if (stu[j].avg < stu[k].avg)
k = j;
temp = stu[i];
stu[i] = stu[k];
stu[k] = temp;
}
}
int main()
{
struct student stu[N];
input(stu);
sortavg(stu);
output(stu);
}