结构体的正确使用


结构体的正确使用

1. 为什么要使用结构体

基本的intcharfloatdouble类型无法满足解决问题的要求时,结构体是解决问题的方法之一。
结构体其实就是一种数据结构,结构体支持用户利用基本数据类型组合而成。注意:结构体类型不是C中一种新的数据类型,它只是将基本数据类型组装起来,变得更大了而已。
使用结构体可以简化代码量,提高代码维护效率。

2. 运用结构体的例子

问题:A班上有4名学生,本学期一共学习了三门课。现在需要将学生姓名和该学生的成绩记录下来,并将记录结果打印输出。请编程解决问题。
分析:分析对象是学生,学生有姓名(char类型)、成绩(int类型)。如果我们使用二维字符数组记录学生名字,用二维整型数组记录学生成绩,是否可行?
当然,仅仅作为记录这种想法肯定是没有问题,但是将记录打印出来就不可行了。这种解决方法割裂了学生和成绩的关系。
这时候可以考虑使用结构体,结构体变量包含char类型用于保存学生姓名,int数组用于保存学生成绩。
代码如下:

# include 
# include 
#define Stu_num 4
#define Subject 3
typedef struct 
{
    char name[50];
    int score[Subject];
} Student;


int main ()
{
    Student students[Stu_num ];
    int subject_num;
    memset (&students, 0, sizeof (students));
    for (int i = 0; i < Stu_num ; i++)
    {
        printf("请输入第%d个学生姓名:", i+1);
        scanf("%s", students[i].name);
        printf ("请输入第%d个学生三门成绩(成绩之间用空格隔开):", i+1);
        subject_num = 0;
        scanf ("%d %d %d", &students[i].score[subject_num], &students[i].score[subject_num + 1], &students[i].score[subject_num + 2]); 
    }

    for (int j = 0; j < Stu_num ; j++)
    {
        subject_num = 0;
        printf ("%s的三门成绩分别是:%d %d %d\n", students[j].name, students[j].score[subject_num], students[j].score[subject_num + 1], students[j].score[subject_num + 2]);
    }
    return 0;
}

代码运行结果如下:

扩展:当学生数量增加,学习科目增加,我们只需小小改动就可以解决。

#define Stu_num 4   //可以根据需要修改学生数量
#define Subject 3   //可以根据需要修改科目数量

转载请注明出处