[C语言笔记]11、结构体

前言:

C语言的相关知识点的笔记均在下面的专栏链接中,欢迎订阅!

c语言笔记_1zero10的博客-优快云博客

11-1结构体的定义和使用(创建)

法1:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
//1、结构体的定义
                //格式:struct 结构体名 {结构体成员变量列表};
struct Book {
        char name[100];
        double price;
        int value;
};
int main() {
//2、结构体的使用
        //2-1、法1:struct 结构体名 变量名;
        struct Book c;
        strcpy(c.name, "c语言从入门到精通");
        c.price = 999;
        c.value = 1000000;
        printf("%s的价格是:%.2lf 价值是:%d\n", c.name, c.price, c.value);
        return 0;
}

 

法2:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
//1、结构体的定义
                //格式:struct 结构体名 {结构体成员变量列表};
struct Book {
        char name[100];
        double price;
        int value;
};
int main() {
//2、结构体的使用
        //2-2、法2:struct 结构体名 变量名 = {初始化列表};
        struct Book py = { "python入门到精通",999,100000 };
        printf("%s的价格是:%.2lf 价值是:%d\n", py.name, py.price, py.value);
        
        return 0;
}

 

法3: 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
//1、结构体的定义
                //格式:struct 结构体名 {结构体成员变量列表};
struct Book {
        char name[100];
        double price;
        int value;
}cpp;
int main() {
//2、结构体的使用
        //2-3、法3:直接创建
        strcpy(cpp.name, "c语言零基础编程");
        cpp.price = 399;
        cpp.value = 10000;
        printf("%s的价格是:%.2lf 价值是:%d\n", cpp.name, cpp.price, cpp.value);
        
        return 0;
}

 

11-2结构体数组

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
//1、结构体的定义
struct Book {
        char name[100];
        double price;
        int value;
};
int main() {
        //2、结构体数组的定义
                //格式:struct 结构体名 数组名[元素个数]={{},{},{}...};
        struct Book books[3] = {
                {"c语言程序设计",999,10000},
                {"python零基础到精通",999,10101},
                {"c++零基础编程",399,9999},
        };
        //3、修改结构体数组的元素
        strcpy(books[2].name, "c++从入门到入土");

        //4、循环遍历输出结构体数组
        for (int i = 0; i < 3; ++i) {
                struct Book tmp = books[i];
                printf("%s的价格是%.2lf 价值是:%d\n", tmp.name, tmp.price, tmp.value);
        }
        return 0;
}

 

 

11-3结构体指针

作用就是有效的修改单个人为创建的结构体的成员的值

比如

定义结构体:

struct Book { char name[100]; double price; int value; };

创建结构体

struct Book b={"c语言入门到精通",999,100000};

那么现在你需要把b中999 改成399.99如何修改

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
//1、结构体的定义
struct Book {
        char name[100];
        double price;
        int value;
};
int main() {
        //2、结构体指针的创建 
                //格式 struct 结构体名 * 变量名 =&结构体变量;
        struct Book b = { "c语言程序入门到精通",999,100010 };
        struct Book* pb = &b;
        //3、修改b的值 两种修改方法
        (*pb).price = 399.99;
        pb->value = 10000;

        printf("%s的价格是%.2lf 价值是:%d\n", b.name, b.price, b.value);
        return 0;
}

 

 

11-4嵌套结构体

1、利用嵌套结构体

输出下面这句话

一个圆心坐标为(9,8),半径为5的圆

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//1、结构体的定义
struct Point {
        double x, y;
};
struct Circle {
        struct Point pt;//把定义圆心坐标的结构体Point 定义一个结构体变量pt嵌套进Circle结构体里 
        int radius; // 半径
};
int main() {
        struct Circle c; 
        c.pt.x = 9;
        c.pt.y = 8;
        c.radius = 5;
        printf("这是一个圆心坐标为:(%.0lf,%.0lf),半径为:%d 的圆\n", c.pt.x, c.pt.y, c.radius);

        return 0;
}

 

 

2、利用嵌套结构体

达到以下题目要求:

现在有两个圆

要输出

这是一个圆心坐标为(9,8),半径为5的圆

这是一个圆心坐标为(2,1),半径为1的圆

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//1、结构体的定义
struct point {
        double x, y;
};
struct circle {
        struct point pt;//把定义圆心坐标的结构体Point 定义一个结构体变量pt嵌套进Circle结构体里 
        int radius; // 半径
};
struct circles {
        int size;
        struct circle c[100];
};
int main() {
        struct circles cs = {
                2,
                {
                        {{9,8},5},{{2,1},1}
                }
        };
        for (int i = 0; i < cs.size; ++i) {
                struct circle tmp = cs.c[i];
                printf("这是一个圆心为:(%.0lf,%.0lf),半径为:%d 的圆\n", tmp.pt.x, tmp.pt.y, tmp.radius);
        }
        return 0;
}

 

11-5结构体作为参数传函数内部

结论:和变量作为参数传进函数道理一样

如果变量/结构体传进函数后需要对它的值进行修改 就得用址传递 即传入变量/结构体的指针

如果变量/结构体传进函数后不需要对它的值进行修改 就得用值传递 即传入变量/结构体本身

例:

用结构体定义一个 圆心坐标为(9,8)半径为5 的圆

然后定义movecircle函数用来修改圆心坐标和半径的值 横坐标+2 纵坐标-1 半径+3

再定义printcircle函数打印出新的圆心坐标和半径

#include <stdio.h>
struct circle {
        int x, y;
        int radius;
};
void movecircle(struct circle* c,int a, int b, int m) {
        (*c).x += a; 
        (*c).y -= b;
        (*c).radius += m;
        /*
        也可写成这样
        c->x += a;
        c->y -= b;
        c->radius += m;
        */
}

void printcircle(struct circle c) {
        printf("新的圆的圆心坐标为:(%d,%d)半径为:%d", c.x, c.y, c.radius);
}

int main() {
        struct circle c = { 9,8,5 };
        movecircle(&c, 2, 1, 3);
        printcircle(c);
        return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值