【问题描述】设计程序解决问题时,如果数据的结构比较复杂,难以用简单变量或数组表示时,可采用更复杂的构造类型。
编写程序,定义结构体类型,成员包括:
学号(7位),姓名(不超过4个汉字),出生日期(包括年、月和日),4个成绩(用数组表示,数组4个元素,分别表示:平时成绩、实验成绩、期末成绩、总评成绩),成绩均用整型数表示,其中,总评成绩=平时成绩*0.2+实验成绩*0.3+期末成绩*0.5。
用该结构体类型定义数组,输入元素个数,输入数组元素的各成员,输出数组元素的各成员。
【输入形式】元素个数,数组元素的各成员
【输出形式】数组元素的各成员
【样例输入】
3
2021001 WangPing 2003 6 12 95 90 67
2021002 LiuLi 2002 10 20 94 96 54
2021003 TongAn 2002 12 5 95 86 45
【样例输出】
num name birthday s1 s2 s3 sum
2021001 WangPing 2003/ 6/12 95 90 67 79
2021002 LiuLi 2002/10/20 94 96 54 74
2021003 TongAn 2002/12/5 95 86 45 67
【样例说明】
输入样例:
第1行表示元素个数;第2~4行分别表示各个数组元素的成员,分别为学号、姓名、出生年月日、平时成绩、实验成绩、期末成绩
输出样例:
学号10列列宽,左对齐;姓名10列列宽,左对齐;出生日期的年份原样输出,月份为2列列宽右对齐,日为4列列宽左对齐;平时成绩、实验成绩、期末成绩和总评成绩均为4列列宽,左对齐
#include <stdio.h>
#include <stdbool.h>
#include "string.h"
struct stuBirthday {
int year;
int month;
int day;
};
struct StuScore {
int normalGrades;
int experimentalGrades;
int finalGrades;
int generalCommentGrades;
};
struct Members {
int stuNo;
char stuName[9];
struct stuBirthday birthday;
struct StuScore stuScore;
};
int main() {
int num, i;
scanf("%d", &num);
struct Members members[num];
for (i = 0; i < num; i++) {
scanf("%d", &members[i].stuNo);
scanf("%s", members[i].stuName);
scanf("%d %d %d",
&members[i].birthday.year,
&members[i].birthday.month,
&members[i].birthday.day);
scanf("%d %d %d",
&members[i].stuScore.normalGrades,
&members[i].stuScore.experimentalGrades,
&members[i].stuScore.finalGrades
);
}
printf("%-10s%-10s%-12s%-4s%-4s%-4s%-4s\n","num","name","birthday","s1","s2","s3","sum");
for (i = 0; i < num; i++) {
members[i].stuScore.generalCommentGrades = 0;
int finallyScore = (members[i].stuScore.normalGrades * 0.2) + (members[i].stuScore.experimentalGrades * 0.3) +
(members[i].stuScore.finalGrades * 0.5);
printf("%-10d%-10s%-4d/%2d/%-4d%-4d%-4d%-4d%-4d",
members[i].stuNo,
members[i].stuName,
members[i].birthday.year,
members[i].birthday.month,
members[i].birthday.day,
members[i].stuScore.normalGrades,
members[i].stuScore.experimentalGrades,
members[i].stuScore.finalGrades,
finallyScore
);
printf("\n");
}
return 0;
}
printf("%-12s","name");
说明:
%-12s 以12列宽左侧对齐输出
%12s 以12列宽右侧对齐输出