有4个学生,每个学生的信息包括学号、姓名、3门课程(数学、物理、计算机)的成绩,如下表所示:
学号
姓名
数学
物理
计算机
1001
Wang li
93
89
87
1002
Li shan
85
80
78
1003
Zhao min
65
70
60
1004
Ma yun
77
70
83
(1) 从键盘上输入4个学生的上述信息(要有提示性语句);
(2) 计算每个学生的平均成绩;
(3) 输出各位同学的学号、姓名、数学、物理、计算机成绩和平均成绩;
(4) 输出平均成绩最高的同学的学号、姓名、数学、物理、计算机成绩和平均成绩。
定义个学生结构,然后定义学生数组,逐个输入再求值
#include <stdio.h>
typedef struct _student
{
int id;
char name[20];
float score[3];
float avg;
}student;
void input(student *s,int n)
{
for(int i=0;i<n;i++)
{
printf("请输入第%d个学生的学号:",i+1);
scanf("%d",&s[i].id);
printf("请输入第%d个学生的姓名:",i+1);
getchar();
gets(s[i].name);
printf("请输入第%d个学生的数学成绩:",i+1);
scanf("%f",&s[i].score[0]);
printf("请输入第%d个学生的物理成绩:",i+1);
scanf("%f",&s[i].score[1]);
printf("请输入第%d个学生的计算机成绩:",i+1);
scanf("%f",&s[i].score[2]);
s[i].avg = (s[i].score[0] + s[i].score[1] + s[i].score[2])/3;
}
}
void output(student *s,int n)
{
printf("%-10s%-22s%-10s%-10s%-10s%-10s\n","学号","姓名","数学","物理","计算机","平均分");
for(int i=0;i<n;i++)
printf("%-10d%-22s%-10.1f%-10.1f%-10.1f%-10.1f\n",s[i].id,s[i].name,s[i].score[0],s[i].score[1],s[i].score[2],s[i].avg);
}
void getHigh(student *s,int n)
{
int max = 0;
for(int i=1;i<n;i++)
if(s[i].avg > s[max].avg)
max = i;
printf("最高分学生信息为:");
printf("学号: %d\n",s[max].id);
printf("姓名: %s\n",s[max].name);
printf("数学: %.1f\n",s[max].score[0]);
printf("物理: %.1f\n",s[max].score[1]);
printf("计算机: %.1f\n",s[max].score[2]);
printf("平均分: %.1f\n",s[max].avg);
}
int main()
{
student stu[4];
input(stu,4);
output(stu,4);
getHigh(stu,4);
return 0;
}
定义结构体,
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
typedef struct _student
{
int id;
char name[20];
int score[3];
float ave;
}student;
//1 输入
void intput(student stu[], int n)
{
int i, j;
printf("请输入%d个学生的信息:\n");
for (i = 0; i < n; i++)
{
printf("请输入学生%d的学号:", i + 1);
scanf("%d", &stu[i].id);
getchar();
printf("请输入学生%d的姓名:", i + 1);
gets_s(stu[i].name);
printf("请输入学生%d的数学、物理和计算机成绩(以空格分隔):",i+1);
for (j = 0; j < 3; j++)
scanf("%d", &stu[i].score[j]);
}
}
//2 计算平均成绩
void average(student stu[], int n)
{
int i, j;
float sum = 0;
for (i = 0; i < n; i++)
{
stu[i].ave = 0;
for (j = 0; j < 3; j++)
stu[i].ave += stu[i].score[j];
stu[i].ave /= 3;//得到平均成绩
}
}
//3 输出各位同学的学号、姓名、数学、物理、计算机成绩和平均成绩
void show1(student stu[], int n)
{
int i, j;
printf("输出各位同学的学号、姓名、数学、物理、计算机成绩和平均成绩:\n");
printf("%6s %8s %6s %6s %8s %8s\n", "学号", "姓名", "数学", "物理", "计算机","平均分");
for (i = 0; i < n; i++)
printf("%6d %8s %6d %6d %8d %8.2f\n", stu[i].id, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].ave);
}
//输出平均成绩最高的同学的学号、姓名、数学、物理、计算机成绩和平均成绩
void show2(student stu[], int n)
{
int i, j;
student tmp;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - 1 - i; j++)
{
if (stu[j].ave < stu[j + 1].ave)
{
tmp = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = tmp;
}
}
}
printf("平均分最高的同学的学号、姓名、数学、物理、计算机成绩和平均成绩:\n");
printf("%6d %8s %6d %6d %8d %8.2f\n", stu[0].id, stu[0].name, stu[0].score[0], stu[0].score[1], stu[0].score[2], stu[0].ave);
}
int main()
{
student stu[4];
intput(stu, 4);
average(stu, 4);
show1(stu, 4);
show2(stu, 4);
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!