第九章 结构体
9.1 定义结构体年月日,输入年月日计算改日是本年第几天
#include<stdio.h>
typedef struct setdata{
int year;
int month;
int day;
}Data;
int isday(Data n);
int main()
{
Data n;
printf("请输入年月日,格式与1997/01/01一致:\n");
scanf("%d/%d/%d",&n.year,&n.month,&n.day);
printf("%d/%d/%d 是%d 年的第 %d 天",n.year,n.month,n.day,n.year,isday(n));
return 0;
}
int isday(Data n)
{
int i,sum=0,monthend[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if((n.year%4==0&&n.year%100)||n.year%400==0)
monthend[2]=29;
for(i=1;i<n.month;i++)
sum+=monthend[i];
sum+=n.day;
return sum;
}
9.3 打印函数打印学生成绩数组构成的结构体
#include<stdio.h>
#define N 80
typedef struct setstus{
int num;
char name[N];
int score[3];
}Studentlist;
void printfstudent(Studentlist n);
int main()
{
Studentlist n1;
printf("请输入学生信息,学号 姓名 成绩1 成绩2 成绩3:\n");
scanf("%d %s %d %d %d",&n1.num,&n1.name,&n1.score[0],&n1.score[1],&n1.score[2]);
printfstudent(n1);
return 0;
}
void printfstudent(Studentlist n)
{
printf("输出学生信息: %03d %s %d %d %d",n.num,n.name,n.score[0],n.score[1],n.score[2]);
}
9.4 输入函数打印学生成绩数组构成的结构体
#include<stdio.h>
#define N 80
typedef struct setstus{
int num;
char name[N];
int score[3];
}Studentlist;
void printfstudent(Studentlist n);
void input(Studentlist *n);
int main()
{
Studentlist n1;
input(&n1);
printfstudent(n1);
return 0;
}
void input(Studentlist *n)
{
printf("请输入学生信息,学号 姓名 成绩1 成绩2 成绩3:\n");
scanf("%d %s %d %d %d",&n->num,&n->name,&n->score[0],&n->score[1],&n->score[2]);
}
void printfstudent(Studentlist n)
{
printf("输出学生信息: %03d %s %d %d %d",n.num,n.name,n.score[0],n.score[1],n.score[2]);
}
9.5 学生成绩
#include<stdio.h>
#define N 80
#define M 10
typedef struct setstus{
int num;
char name[N];
int score[3];
}Studentlist;
void printfstudent(Studentlist n);
void input(Studentlist *n);
void avescore(Studentlist n[]);
void highestscore(Studentlist n[]);
int main()
{
Studentlist n[M];
int i;
for(i=0;i<M;i++)
input(&n[i]);
avescore(n);
highestscore(n);
return 0;
}
void input(Studentlist *n)
{
printf("请输入学生信息,学号 姓名 成绩1 成绩2 成绩3:\n");
scanf("%d %s %d %d %d",&n->num,&n->name,&n->score[0],&n->score[1],&n->score[2]);
}
void printfstudent(Studentlist n)
{
printf("输出学生信息: %03d %s %d %d %d",n.num,n.name,n.score[0],n.score[1],n.score[2]);
}
void avescore(Studentlist n[])
{
int i,j,sum=0;
double ave;
for(i=0;i<M;i++)
{
for(sum=0,j=0;j<3;j++)
sum+=n[i].score[j];
ave=sum/3;
printf("[%d] %s 同学的平均成绩是%f\n",n[i].num,n[i].name,ave);
}
}
void highestscore(Studentlist n[])
{
int i,j,sum=0,index=-1;
double ave,max=0;
for(i=0;i<M;i++)
{
for(sum=0,j=0;j<3;j++)
sum+=n[i].score[j];
ave=sum/3;
if(max<ave)
{
index=i;
max=ave;
}
}
printf("输出最高分同学的信息:%d %s %d %d %d 平均分为 %f",n[index].num,n[index].name,n[index].score[0],n[index].score[1],n[index].score[2],max);
}