【C语言】结构体(二)
一,结构体的初始化
和其它类型变量一样,对结构体变量可以在定义时指定初始值
#include <stdio.h>
#include <stdlib.h>
struct books // 结构体类型
{char title[50];char author[50]; //结构体成员char subject[100];int book_id;
}book = { "C 语言","zhangsan","编程语言",12345 }; //结构体变量的初始化
int main()
{printf("title : %s\nauthor: %s\nsubject: %s\nbook_id: %d\n", book.title, book.author, book.subject, book.book_id);return 0;
}
二,结构体成员的访问
1,访问手段:使用成员访问运算符(.)用一个点来访问
2,访问手段的使用:<结构体类型变量名> . <成员名> 结构体名 点 成员名
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct // 无标签名,匿名结构体
{char name[20]; //姓名int num; //学号int age; //年龄char group; // 所在小组float score; // 成绩
}stu1; // 结构体变量int main()
{// 给结构体成员赋值stu1 = { "zhangsan",1,20,'A',149.5f };printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f\n", stu1.name, stu1.num, stu1.age, stu1.group, stu1.score);return 0;
}
注:结构体是一种自定义的数据类型,是创建变量的模板,不占用内存空间;结构体变量才包含了实实在在的数据,需要内存空间来存储。
三,结构体数组
1,是什么?
答:数组中的每一个元素都是结构体(元素是结构体)
2,为什么(要有)?
答:用来表示一个拥有相同数据结构的群体
3,怎么做?
答:如图所示
是什么中:
数组指的是一个班级
每一个元素指的是一个班的不同学生
结构体指的是不同学生的信息
为什么中:
相同数据结构指的是不同学生的信息的种类
注:
结构体数组在定义的同时也可以初始化
当对数组中全部元素赋值时,也可以不给出数组长度
练习题:计算全班学生的总成绩、平均成绩和140分一下的人数
#include <stdio.h>
#include <stdlib.h>
struct stu
{char name[20];int num;int age;char group;float score;
} ban[5] = {{"xing",5,18,'c',145.0},{"ao",4,19,'a',130.5},{"sheng",1,18,'a',148.5},{"pei",2,17,'f',139.0},{"yuan",3,17,'b',144.5}
}; // 表示一个班有5个人
int main()
{int i, num_140 = 0;float sum = 0;for (i = 0; i < 5; i++) {sum += ban[i].score;if (ban[i].score < 140) num_140++;}printf("sum=%.2f\naverage=%.2f\nnum_140=%d\n", sum, sum / 5, num_140);return 0;
}
未完待续。。。