用C语言学好结构化编程逻辑!本篇主要分析结构体数组和结构体类型的函数,对于二级C语言来说,主要是考处理学生多个成绩上和求平均值上。两个实例的参考代码里面都有相应的注释,就不在外面分析了
一、结构体变量
C语言结构体(Struct)从本质上讲是一种自定义的数据类型,只不过这种数据类型比较复杂,是由 int、char、float 等基本类型组成的。你可以认为结构体是一种聚合类型。
在实际开发中,我们可以将一组类型不同的、但是用来描述同一件事物的变量放到结构体中。例如,在校学生有姓名、年龄、身高、成绩等属性,学了结构体后,我们就不需要再定义多个变量了,将它们都放到结构体中即可。
二、用结构体数组处理学生成绩
1、参考代码:
#include <stdio.h>
#define N 5
int main()
{
struct student{
char number[7];
char name[7];
int age;
float score[3];
};
int i;
struct student s[N]= { {"130101","Lily",20,78,86,66},
{"130105","Poul",18,85,92,66},
{"134522","Dev",16,83,83,66},
{"103247","Jaun",21,75,94,66},
{"130105","Chen",23,96,72,66} };
printf(" 学号 姓名 年龄 数学 语文 英语\n");
for(i=0; i<N; i++)
{
printf("%6s %6s %4d %6.1f %5.1f %5.1f\n",s[i].number, s[i].name, s[i].age, s[i].score[0], s[i].score[1], s[i].score[2]);
}
getchar();
}
2、参考结果:
三、结构体类型函数求平均值
1、参考代码:
#include <stdio.h>
#define N 5
struct student{
char number[7];
char name[7];
int age;
float score[3];
};
struct score average(struct student *p, int n); //申明结构体类型函数
struct score{
float sx; //数学,语文,英语
float yw;
float yy;
};
main()
{
struct student s[N]= { {"130101","Lily",20,78,86,66},
{"130105","Poul",18,85,92,66},
{"134522","Dev",16,83,83,66},
{"103247","Jaun",21,75,94,66},
{"130105","Chen",23,96,72,66} };
struct score as;
as=average(s,5); //传入结构体数组和学生个数
printf("数学平均成绩:%4.1f\n",as.sx);
printf("语文平均成绩:%4.1f\n",as.yw);
printf("英语平均成绩:%4.1f\n",as.yy);
getchar();
}
struct score average(struct student * p, int n) //结构体类型函数,接受结构体类型数组和学生个数 ,用于返回结构日类型数组s
{
struct score s= {0,0,0}; //结构体类型数组赋初值
int i;
for(i=0; i<n; i++)
{
s.sx+= (p+i)->score[0]; //利用线性链表,指针每向右移动 i 个,将其内的score数组内的语数英成绩加到对应的s.sx, s.yw, s.yy上
s.yw+= (p+i)->score[1];
s.yy+= (p+i)->score[2];
}
s.sx /= 5; //将总分除5求得平均值
s.yw /= 5;
s.yy /= 5;
return s; //返回结构体数组 struct student s
}
2、参考结果: