1.结构体:结构体(Struct)可以用来存放一组不同类型的数据。
(1)结构体的声明
每个成员变量都用自己的声明来描述,以分号结束。花括号之后的分号表示结构声明结束。结构声明可以放在函数外,称为全局结构体。
(2)结构体变量的定义
如学生结构体,定义该结构体变量的方式为 struct student s1;
(3)结构体之间是可以互相访问的,比如在学生变量中使用一个生日结构体。
(4)结构体数组:通过结构体数组可以实现初始化多个结构体变量的操作,要注意的是,初值赋值的地方必须是定义结构体数组之后的位置,不可以在别的地方对结构体赋初值。
2.作业题:
/*
1.定义一个结构体数组,将其赋值并输出
结构体类型要求:学号、姓名、3科成绩
2.结构体查找(按学号查,输出学号和所有成绩)
3.求出每个人的平均分
4.输出总成绩最高的同学姓名、各科成绩
5.求出每一科的最高分并输出对应同学的学号
6.求出每一科的平均分
7.以上练习分别写在不同函数中,在主函数分别调用
//主函数只做输入与输出
//增加 删除 修改(对一个人的所有信息)
*/
#include<stdio.h>
#include<string.h>
char dispaly();
void init_Student();
void findStudent(int Num);
void everyoneAverage();
void theBestStudent();
void danKeZuiGao();
void meiYiKeAverage();
void deleteStudent(int num);
void printRoster();
void updateStudent(int num,char *a,float math,float English,float physics);
void insertStudent(int num,char *a,float math,float English,float physics);
int Roster_Length = 0;
struct Student {
int Student_Num;
char Student_Name[20];
float Student_Math;
float Student_English;
float Student_Physics;
}Student_Roster[50];
int main() {
init_Student();
char c;
while(1){
c=dispaly();
if(c=='#'){
break;
}
}
return 0;
}
char dispaly(){
printf("====================================\n");
printf("请输入对应操作数字:\n");
printf("1.根据学号查找学生\n");
printf("2.求所有科目平均分\n");
printf("3.找出单总成绩最高的学生学号\n");
printf("4.找出单科最高的学生学号\n");
printf("5.求出每科平局成绩\n");
printf("6.删除学生\n");
printf("7.更新学生信息\n");
printf("8.增加一个学生\n");
printf("9.打印学生信息表\n");
printf("输入#退出程序\n");
printf("===================================\n");
char temp;
getchar();
scanf("%c",&temp);
switch(temp){
case '1':{
int n;
printf("请输入学号:\n");
scanf("%d",&n);
findStudent(n);
break;
}
case '2':{
everyoneAverage();
break;
}
case '3':{
theBestStudent();
break;
}
case '4':{
danKeZuiGao();
break;
}
case '5':{
meiYiKeAverage();
break;
}
case '6':{
printf("请输入想要删除的学生学号\n");
int n;
scanf("%d",&n);
deleteStudent(n);
break;
}
case '7':{
printf("请输入要更新的学号 姓名 数学成绩 英语成绩 物理成绩\n");
int num;
char a[30]={""};
float m,e,p;
scanf("%d",&num);
getchar();
gets(a);
scanf("%f%f%f",&m,&e,&p);
updateStudent(num,a,m,e,p);
break;
}
case '8':{
printf("请输入要增加的学号 姓名 数学成绩 英语成绩 物理成绩\n");
int num;
char a[30]={""};
float m,e,p;
scanf("%d",&num);
getchar();
gets(a);
scanf("%f%f%f",&m,&e,&p);
insertStudent(num,a,m,e,p);
break;
}
case '9':{
printRoster();
break;
}
default:{
return temp;
}
}
}
void init_Student() {
printf("初始化学生名单\n");
char c;
int i = 0;
while (1) {
printf("请输入学生学号:");
scanf("%d", &Student_Roster[i].Student_Num);
printf("请输入学生姓名:");
scanf("%s", &Student_Roster[i].Student_Name);
printf("请输入学生数学成绩:");
scanf("%f", &Student_Roster[i].Student_Math);
printf("请输入学生英语成绩:");
scanf("%f", &Student_Roster[i].Student_English);
printf("请输入学生物理成绩:");
scanf("%f", &Student_Roster[i].Student_Physics);
getchar();
i++;
Roster_Length++;
printf("是否继续初始化学生名单:y/n ");
c = getchar();
if (c == 'y') {
continue;
}
else {
break;
}
}
}
void findStudent(int Num) {
int temp=0;
for (int i = 0; i<Roster_Length; i++) {
if (Student_Roster[i].Student_Num == Num) {
printf("学生学号:%d\n学生姓名:%s\n学生数学成绩:%.2f\n学生英语成绩:%.2f\n学生物理成绩:%.2f\n",
Student_Roster[i].Student_Num, Student_Roster[i].Student_Name, Student_Roster[i].Student_Math,
Student_Roster[i].Student_English, Student_Roster[i].Student_Physics);
temp++;
}
else {
continue;
}
}
if(temp==0){
printf("查无此人!\n");
}
}
void everyoneAverage(){
float sum1=0,sum2=0,sum3=0;
for(int i=0;i<Roster_Length;i++){
sum1+=Student_Roster[i].Student_Math;
sum2+=Student_Roster[i].Student_English;
sum3+=Student_Roster[i].Student_Physics;
}
printf("数学平均分为:%.2f\n英语平均分为:%.2f\n物理平均分为:%.2f\n",sum1/Roster_Length,sum2/Roster_Length,sum3/Roster_Length);
}
void theBestStudent(){
int theBestFlag=0;
int BestFlagArr[100];
int length=0;
float theBestPoint=Student_Roster[0].Student_Math+Student_Roster[0].Student_English+Student_Roster[0].Student_Physics;
for(int i=0;i<Roster_Length;i++){
if((Student_Roster[i].Student_Math+Student_Roster[i].Student_English+Student_Roster[i].Student_Physics)>theBestPoint){
theBestFlag=i;
theBestPoint=Student_Roster[i].Student_Math+Student_Roster[i].Student_English+Student_Roster[i].Student_Physics;
}
else{
continue;
}
}
for(int i=0;i<Roster_Length;i++){
if((Student_Roster[i].Student_Math+Student_Roster[i].Student_English+Student_Roster[i].Student_Physics)==theBestPoint){
BestFlagArr[length++]=i;
}
}
for(int i=0;i<length;i++){
printf("总成绩最高的同学学号:%d 姓名:%s 数学成绩:%.2f 英语成绩:%.2f 物理成绩:%.2f\n",
Student_Roster[BestFlagArr[i]].Student_Num,Student_Roster[BestFlagArr[i]].Student_Name,Student_Roster[BestFlagArr[i]].Student_Math,
Student_Roster[BestFlagArr[i]].Student_English,Student_Roster[BestFlagArr[i]].Student_Physics
);
}
}
void danKeZuiGao(){
float bestMath=Student_Roster[0].Student_Math,bestEnglish=Student_Roster[0].Student_English,bestPhysics=Student_Roster[0].Student_Physics;
int flag1=0,flag2=0,flag3=0;
for(int i=0;i<Roster_Length;i++){
if(Student_Roster[i].Student_Math>bestMath){
flag1=i;
}
if(Student_Roster[i].Student_English>bestEnglish){
flag2=i;
}
if(Student_Roster[i].Student_Physics>bestPhysics){
flag3=i;
}
}
printf("数学成绩最好的同学学号:%d\n英语成绩最好的同学学号:%d\n物理成绩最好的同学学号:%d\n",
Student_Roster[flag1].Student_Num,Student_Roster[flag2].Student_Num,Student_Roster[flag3].Student_Num);
}
void meiYiKeAverage(){
float sum1=0,sum2=0,sum3=0;
for(int i=0;i<Roster_Length;i++){
sum1+=Student_Roster[i].Student_Math;
sum2+=Student_Roster[i].Student_English;
sum3+=Student_Roster[i].Student_Physics;
}
printf("数学平均分:%.2f\n英语平均分:%.2f\n物理平均分:%.2f\n",sum1/Roster_Length,sum2/Roster_Length,sum3/Roster_Length);
}
void deleteStudent(int num){
for(int i=num-1;i<Roster_Length;i++){
Student_Roster[i]=Student_Roster[i+1];
}
Roster_Length--;
}
void printRoster(){
for(int i=0;i<Roster_Length;i++){
printf("学号:%d\n姓名:%s\n数学:%.2f\n英语:%.2f\n物理:%.2f\n",Student_Roster[i].Student_Num,Student_Roster[i].Student_Name
,Student_Roster[i].Student_Math,Student_Roster[i].Student_English,Student_Roster[i].Student_Physics);
}
}
void updateStudent(int num,char *a,float math,float English,float physics){
strcpy(Student_Roster[num-1].Student_Name,a);
Student_Roster[num-1].Student_Math=math;
Student_Roster[num-1].Student_English=English;
Student_Roster[num-1].Student_Physics=physics;
}
void insertStudent(int num,char *a,float math,float English,float physics){
Roster_Length++;
Student_Roster[Roster_Length-1].Student_Num=num;
strcpy(Student_Roster[Roster_Length-1].Student_Name,a);
Student_Roster[Roster_Length-1].Student_Math=math;
Student_Roster[Roster_Length-1].Student_English=English;
Student_Roster[Roster_Length-1].Student_Physics=physics;
}
(本文图片出处来自于CSDN博主__Sunshine_,使用图片只是为了方便个人学习,侵删)