问题简介:
学生信息:姓名,学号,英语成绩,数学成绩,政治成绩
- 写出学生结构体信息
- finput()输入每个学生信息
- 求单科和总分最高的学生信息
代码展示1.
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<stdio.h>
#include <string.h>
//void finput();
struct student{
char name[50];
int ID[20];
int English;
int Math;
int political;
};
student finput(struct student std){
//struct student std;
printf("请输入学生的姓名,学号,成绩(英语,数学,政治):\n");
printf("姓名:");
scanf("%s", std.name);
printf("学号:");
scanf("%d", std.ID);
printf("英语:");
scanf("%d", &std.English);
printf("数学:");
scanf("%d", &std.Math);
printf("政治:");
scanf("%d", &std.political);
return std;
}
int maxScore(int a[]){
int j;
int max = 0;
for (int i = 0; i < 3; i++){
if (a[i]>max){
max = a[i];
j = i;
}
}
return j;
}
int compare(int x1, int x2, int x3){
int max = 0;
if (x1 > x2){
max = x1;
}
else{
max = x2;
}
if (x3 > max){
max = x3;
}
return max;
}
int main(){
struct student std[3];
for (int i = 0; i < 3; i++){
std[i] = finput(std[i]);
printf("\n");
}
int sum[3] = {0,0,0};
int math[3] = {0,0,0};
int english[3] = {0,0,0};
int political[3];
for (int i = 0; i < 3; i++){
sum[i] = std[i].English + std[i].Math + std[i].political;
printf("%d \t %d \t %d \n",std[i].English, std[i].Math, std[i].political);
printf("%d\n", sum[i]);
math[i] = std[i].Math;
english[i] = std[i].English;
political[i] = std[i].political;
}
int index = maxScore(sum);
int index1 = maxScore(math);
int index2 = maxScore(english);
int index3 = maxScore(political);
printf("总分成绩最高的学生成绩%d,学生名为%s\n", sum[index], std[index].name);
//英语
printf("英语成绩最高的学生成绩%d,学生名为%s\n", english[index2], std[index2].name);
//数学
printf("数学成绩最高的学生成绩%d,学生名为%s\n", math[index1], std[index1].name);
//政治
printf("政治成绩最高的学生成绩%d,学生名为%s\n", political[index3], std[index3].name);
}
代码展示2.
//有n个结构体变量,内含学生号, 姓名和三门课成绩。要求输出单科成绩和总成绩最高学生的信息。
#include <stdio.h>
#define N 3
struct Student
{
int num;
char name[20];
float socre[3];
float total_points;
};
void input(struct Student stu[])
{
int i;
printf("请分别输入各学生的信息:学号,姓名,三门课成绩\n");
for(i=0;i<N;i++)
//score[0]是英语成绩, score[1]是数学成绩成绩,score[2]是政治成绩
{
scanf("%d %s %f %f %f",&stu[i].num,stu[i].name,&stu[i].socre[0],&stu[i].socre[1],&stu[i].socre[2]);
stu[i].total_points=(stu[i].socre[0]+stu[i].socre[1]+stu[i].socre[2]);
}
}
struct Student max(struct Student stu[])
{
int i,m=0;
for(i=0;i<N;i++)
if(stu[i].total_points>stu[m].total_points)
m=i;
return stu[m];
}
struct Student english_max(struct Student stu[])
{
int i,m=0;
for(i=0;i<N;i++){
if(stu[i].socre[0]>stu[m].socre[0]){
m=i;
}
}
return stu[m];
}
struct Student math_max(struct Student stu[])
{
int i,m=0;
for(i=0;i<N;i++){
if(stu[i].socre[1]>stu[m].socre[1]){
m=i;
}
}
return stu[m];
}
struct Student political_max(struct Student stu[])
{
int i,m=0;
for(i=0;i<N;i++){
if(stu[i].socre[2]>stu[m].socre[2]){
m=i;
}
}
return stu[m];
}
void print1(struct Student stud)
{
printf("单科英语成绩最高的学生是:\n");
printf("学号:%d\n姓名:%s\n英语成绩:%6.2f\n",stud.num,stud.name,stud.socre[0]);
//printf("单科数学成绩最高的学生是:\n");
//printf("学号:%d\n姓名:%s\n英语成绩:%6.2f\n",stud.num,stud.name,stud.socre[1]);
//printf("单科政治成绩最高的学生是:\n");
//printf("学号:%d\n姓名:%s\n英语成绩:%6.2f\n",stud.num,stud.name,stud.socre[2]);
}
void print2(struct Student stud)
{
printf("单科数学成绩最高的学生是:\n");
printf("学号:%d\n姓名:%s\n英语成绩:%6.2f\n",stud.num,stud.name,stud.socre[1]);
}
void print3(struct Student stud)
{
printf("单科政治成绩最高的学生是:\n");
printf("学号:%d\n姓名:%s\n英语成绩:%6.2f\n",stud.num,stud.name,stud.socre[2]);
}
void print(struct Student stud)
{
printf("成绩最高的学生是:\n");
printf("学号:%d\n姓名:%s\n三门课成绩:%5.1f,%5.1f,%5.1f\n总成绩:%6.2f\n",stud.num,stud.name,stud.socre[0],stud.socre[1],stud.socre[2],stud.total_points);
}
int main()
{
struct Student stu[N],*p=stu;
input(p);
print1(english_max(p));
print2(math_max(p));
print3(political_max(p));
print(max(p));
return 0;
}
第二种方法可改进。留给查看的博友吧!