经上一次的结构体数组概念学习之后再进行结构体数组这部分进行代码实操,更能感受出数组结合结构体之后会使代码功能性更强且精简。
本次分享为代码展示,代码分析。
代码展示:
示例:
#include<stdio.h>
struct stu
{
int number;
char name[20];
int score[5];
}st[10]={
{
1001,"zhao",85,64,82,63},
{
1002,"Qian",92,60,96,67},
{
1003,"you",99,90,87,90},
{
1004,"ruan",90,98,87,86},
{
1005,"zhang",90,87,77,88}
},temp;
int main()
{
int i,j;
int num;
num=5;
for(i=0;i<num;i++)
{
st[i].score[4]=0;
for(j=0;j<4;j++)
{
st[i].score[4]+=st[i].score[j];
}
}
for(i=0;i<num;i++)
{
for(j=0;j<num-i;j++)
{
if(st[j].score[4]<st[j+1].score[4])
{
temp=st[j];
st[j]=st[j+1];
st[j+1]=temp;
}
}
}
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t成绩4\t总成绩\n");
for(i=0;i<num;i++)
{
printf("%d\t%s\t%d\t%d\t%d\t%d\t%d\n",st[i].number,st[i].name,st[i].score[0],
st[i].score[1],st[i].score[2],st[i].score[3],st[i].score[4]);
}
}
该示例是看着教材改的代码。
代码分析:
st[10]={
{1001,“zhao”,85,64,82,63},
{1002,“Qian”,92,60,96,67},
{1003,“you”,99,90,87,90},
{1004,“ruan”,90,98,87,86},
{1005,“zhang”,90,87,77,88}
},temp;
这一部分是结构体stu定义的变量,教材实在主函数再次定义,但我喜欢一次定义完。
temp是临时变量用于交换。与之后的总成绩冒泡排序相关。
此部分为算四科总成绩:
for(i=0;i<num;i++)
{
st[i].score[4]=0;
for(j=0;j<4;j++)
{
st[i].score[4]+=st[i].score[j];
}
}
循环体中score[4]是在定义的score[5]时留的一部分内存给总成绩(脚标从四个成绩依次为0,1,2,3),从这里可以体会到运用结构体数组的精简代码作用,就不用再去定义数组来存储这部分。
以下为冒泡排序:
for(i=0;i<num;i++)
{
for(j=0;j<num-i;j++)
{
if(st[j].score[4]<st[j+1].score[4])
{
temp=st[j];
st[j]=st[j+1];
st[j+1]=temp;
}
}
}
这相对于之前一维数组冒泡排序较为难理解。仔细读还是能看懂。
整段代码还是比较容易。