目录
如果只需要stu1、stu2两个变量,后面不再需要使用结构体数据类型,定义其他变量(匿名结构体)
- int num1;//int 是数据类型,而num1是一个具体的int变量
-
- struct Cat cat1;//Cat是结构体数据类型,而cat1是一个Cat变量
- struct 结构体名称 { // 结构体名首字母大写,比如Cat, Person
- 成员列表;
- };
声明一个结构体变量,无论是否初始化,都开辟内存,声明一个结构体指针变量,对其初始化的时候才会开辟内存
成员是结构体上的一个组成部分,一般是基本数据类型、也可以是数组、指针、结构体等
在创建一个结构体变量后,需要给成员赋值,如果没有赋值就使用可能导致程序异常终止
不同结构体的变量的成员独立,互不影响,一个结构体变量的成员更改,不影响另外一个
- struct Stu{
- char *name; //姓名
- int num; //学号
- int age; //年龄
- char group; //所在学习小组
- float score; //成绩
- };
- struct Stu stu1, stu2;
- //定义了两个变量 stu1 和 stu2,它们都是 Stu 类型,都由 5 个成员组成
- //注意关键字struct不能少
- struct Stu{
- char *name; //姓名
- int num; //学号
- int age; //年龄
- char group; //所在学习小组
- float score; //成绩
- } stu1, stu2;
- //在定义结构体Stu 的同时,创建了两个结构体变量 stu1 和 stu2
- struct Student{
- char *name; //姓名
- int num; //学号
- int age; //年龄
- char group; //所在小组
- float score; //成绩
- } stu1 = {"贾宝玉", 11, 18, 'B', 90.50}, stu2 = { "林黛玉", 12, 16, 'A', 100 };
- struct { //没有写 Stu
- char *name; //姓名
- int num; //学号
- int age; //年龄
- char group; //所在学习小组
- float score; //成绩
- } stu1, stu2;
- stu1.name = "tom"; stu1.num = 100;....
- //1. 该结构体数据类型,没有名, 匿名结构体
- //2. stu1 和 stu2 就是 该结构体的两个变量
结构体和数组类似,也是一组数据的集合,整体使用没有太大的意义。数组使用下标[]获取单个元素,结构体使用.号获取单个成员。
获取结构体成员的一般格式为:结构体变量名.成员名
- struct{
- char *name; //姓名
- int num; //学号
- int age; //年龄
- char group; //所在小组
- float score; //成绩
- } stu1;
- stu1.name = "jack";
- printf("%s", stu1.name);
- #include
-
- void main() {
-
- struct Student{
- char *name; //姓名
- int num; //学号
- int age; //年龄
- char group; //所在小组
- float score; //成绩
- } stu1 = {"贾宝玉", 11, 18, 'B', 90.50}, stu2 = { "林黛玉", 12, 16, 'A', 100 };
-
- struct Student stu3 = {"林黛玉2", 12, 16, 'A', 100 };
- struct Student stu4;
- //stu4 = {"林黛玉2", 12, 16, 'A', 100 };//会有问题
- stu4.name = "smith";//没问题
-
- printf("\n stu1.name=%s", stu1.name);
- printf("\n stu3.name=%s", stu3.name);//
- printf("\n stu4.name=%s", stu4.name);
- getchar();
- }


- #include
-
- void main() {
-
- /*
- 张老太养了两只猫猫:一只名字叫小白,今年3岁,白色。还有一只叫小花,今年100岁,花色。
- 请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色。
- 如果用户输入的小猫名错误,则显示 张老太没有这只猫猫。
- 分析:
- 1. 猫猫有 三个成员(变量)组成
- 2. 使用结构体解决
- */
- //创建 结构体Cat 【是数据类型】
-
- struct Cat {//结构体的名字Cat,Cat就是我们自己构造的数据类型
- char* name;//名字,使用指针,指向一个字符串
- int age;//年龄
- char* color;//颜色
- };
-
- //使用结构体Cat创建对应的变量
- struct Cat cat1;//cat1就是struct Cat的一个变量
- struct Cat cat2;
-
- //给cat1的各个成员赋值
- cat1.name = "小白";
- cat1.age = 3;
- cat1.color = "白色";
-
- cat2.name = "小花";
- cat2.age = 100;
- cat2.color = "花色";
-
- //输出两只猫的信息
- printf("\n第一只猫 name = %s, age = %d, color = %s", cat1.name, cat1.age, cat1.color);
- printf("\n第二只猫 name = %s, age = %d, color = %s", cat2.name, cat2.age, cat2.color);
-
- getchar();
- }
- #define _CRT_SECURE_NO_WARNINGS
- #include
-
- /*
- 编写一个Dog结构体,包含name(char[10])、age(int)、weight(double)属性
- 编写一个say函数,返回字符串,信息中包含所有成员值。
- 在main方法中,创建Dog结构体变量,调用say函数,将调用结果打印输出。
- */
- //定义Dog结构体
- struct Dog {
- char * name;
- int age;
- double weight;
- };
- //say函数,返回字符串,信息中包含所有成员值
- char * say(struct Dog dog) {
- //将这个信息放入到一个字符串(字符数组)
- static char info[50]; //局部静态变量
- sprintf(info, "name=%s age=%d weight=%.2f", dog.name, dog.age, dog.weight);
- //sprintf函数用于将格式化的数据写入字符串
-
- dog.name = "小花";
- return info;
- }
-
- void main() {
- //测试
- //定义结构体变量
- struct Dog dog;
- char * info = NULL;
- dog.name = "小黄";
- dog.age = 1;
- dog.weight = 3.4;
- info = say(dog); //结构体变量默认是值传递
- printf("\n 小狗信息=%s", info);
- printf("\n main 小狗名字=%s", dog.name);//如果结构体变量是地址传递,则可能小狗名字就会改变了
- getchar();
- }
- #include
- #include
-
- /*
- 1.一个景区根据游人的年龄收取不同价格的门票。
- 2.请编写游人结构体(Visitor),根据年龄段决定能够购买的门票价格并输出
- 3.规则:年龄>18 , 门票为20元,其它情况免费。
- 4.可以循环从控制台输入名字和年龄,打印门票收费情况, 如果名字输入 n ,则退出程序。
- */
-
- //定义结构体
- struct Visitor {
- char name[10];
- int age;
- double pay; //应付票价
- };
-
- //编写函数处理业务
- //说明:因为结构体默认是值传递,会拷贝一份完整数据,效率较低
- // 因此,为了提高效率,我们直接接收地址(指针)
- void ticket(struct Visitor * visitor) {//结构体指针类型
- //判断
- if( (*visitor).age > 18) {
- (*visitor).pay = 20;
- } else {
- (*visitor).pay = 0;
- }
- }
-
- void main() {
-
- //测试
- //创建结构体变量(创建一个游客)
- struct Visitor visitor;
- //循环的输入名字和年龄
- while(1) {
-
- printf("\n 请输入游客名字");
- scanf("%s", visitor.name);
- //判断如果名字输入 n ,则退出程序
- if(!strcmp("n", visitor.name) ) {
- break;
- }
- printf("\n 请输入游客年龄");
- scanf("%d", &visitor.age);
- //调用函数 ticket , 获取应付的票价
- ticket(&visitor);
- printf("\n 该游客应付票价=%.2f", visitor.pay);
- }
-
- printf("退出程序");
- getchar();
- getchar();
- }
- #define _CRT_SECURE_NO_WARNINGS
- #include
- #include
-
- /*1) 编程创建一个Box结构体,在其中定义三个成员表示一个立方体的长、宽和高,长
- 宽高可以通过控制台输入。
- 2) 定义一个函数获取立方体的体积(volume)。
- 3) 创建一个结构体,打印给定尺寸的立方体的体积。
- 4) 思路
- */
- //值传递
-
- //定义结构体
- struct Box {
- double len;
- double width;
- double height;
- double volumn;//体积
-
- };//一定要有这个;
-
- double getVolumn(struct Box Box) {
-
- Box.volumn = Box.len * Box.width * Box.height;
- return Box.volumn;
-
- }
-
- void main() {
-
- //创建结构体变量
- struct Box Box;
-
- printf("请输入立方体的长: ");
- scanf("%lf", &Box.len);
-
- printf("请输入立方体的宽: ");
- scanf("%lf", &Box.width);
-
- printf("请输入立方体的高: ");
- scanf("%lf", &Box.height);
-
- double volumn = getVolumn(Box);
- printf("立方体的体积为%.2f\n", volumn);
-
- printf("退出程序");
- getchar();
- getchar();
-
- }
- double getVolumn(struct Box *Box) {
-
- return ((*Box).len) * ((*Box).width) * ((*Box).height);
-
- }
只需要更改获取立方体体积的函数