C:结构体

时间:2023-03-10 04:58:07
C:结构体
结构体

构造类型:就是有基本的类型组成的

1.结构体  结构体是一种自定义的数据类型 和 int float 是一样的都可以定义变量

数组 只能存放一种类型的容器

结构体   可以存放多种数据类型  相对于数组更加的完整

2.一个结构体可以被作为另一个结构体中的普通变量

3.结构体的声明(数据类型的声明)

/*    struct 结构体名 {

char name[20];

int age; //结构体成员  结构体成员之间是要用分号隔开   在结构体内部定义变量的时候仅仅是声明,不能赋值

}; //分号是结构体声明的结束标示符,在声明的时候不能省略

*/

声明一个结构体变量(变量的声明)

//定义一个结构体变量

struct student stu1 ={"lee", 18,'m',90};

    struct student{//学生的结构体
char name[];
int age;
// char stuTele[11];
char gender;//性别
float score;
};
struct point{//点的结构体
float x;//横坐标
float y;//纵坐标
};
struct rect{//长方形结构体
float width;//宽度
float height;//长度
float x;//x坐标
float y;//y坐标
};
struct round{//圆圈
Point p;//一个结构体可以被作为另一个结构体中的普通变量
float r;
};
struct cube{//定义一个立方体
float leight;//长
float width;//宽度
float height;//高度
};
int main(int argc, const char * argv[]) {//main() 上面的都是 全局变量 //结构体类型 struct + 结构体名
//定义一个结构体变量
struct student stu1 = {"lee", ,'m',};
struct point p1 = {, 12.25};
struct rect r1 = {,};
struct round round1 = { {12.5,15.6}, 12.5};//这里要注意一下
struct cube cube1 = {12.5,3.4,23.5}; }

//给结构体的类型重命名  typedef

typedef struct student Student;

//    结构体重命名的第二种形式
typedef struct data{
int year;
int mounth;
int day;
}Day;//直接在定义的时候就重命名了 新起的名字与重命名的是等同的 都可以用
Day d1 = {,,};// 我们使用重命名的名字进行定义变量
Student stu1 = {"lee", ,'m',};
// 结构体成员的访问 结构体变量.成员变量名
//获取stu 的姓名,性别,年龄,分数
//给字符串赋值的时候要用到 strcpy()函数
strcpy(stu1.name, "Kitty");//给stud1的姓名改为kitty
printf("%s \n",stu1.name);
stu1.age;
stu1.name;
stu1.gender;
stu1.score;
    //获取stu1的基本信息; 输出其信息
//结构体的访问是通过 变量名.成员变量名
printf("name = %s age = %d gender = %c score = %.2f",stu1.name,stu1.age,stu1.gender,stu1.score);
    struct point p ={23.3,45.7};
//赋值的第一种方式 单个成员逐个赋值
p.x = ;
p.y = ;
//赋值的第二种方式 整体结构体赋值
struct point p1 = {,};
p = p1;
printf("%.2f %.2f \n",p.x,p.y);

//对于整体赋值的小技巧   数组作为一个结构体的成员时,就可以直接给数组赋值,对比之前数组是不能直接赋值的

//对于整体赋值的小技巧   数组作为一个结构体的成员时,就可以直接给数组赋值,对比之前数组是不能直接赋值的
printf("%.2f %.2f \n",p.x,p.y);
printf("%.2f %.2f \n",p.x,p.y);//语句要写在函数的内部
//赋值技巧
struct one{
int a[];
int num;
};
//数组作为结构体成员变量时,可以通过结构体的整体赋值为数组的每个元素赋值
struct one s1 ={{,},};
struct one s2 ={{,},};
s1 = s2;
for (int i = ; i < ; i++) {
printf("%d \t",s1.a[i]);
}

minAgePer = p1.age > p2.age ? p1 : p2;//这里是保存的是最大年龄的人的整体信息

minAgePer = minAgePer.age > p3.age ? minAgePer : p3;

下午笔记

struct teachr{
char name[];//分号隔开
char gender;
int age;
// float height;
};
//定义一个有5个元素的结构体数组
struct teachr Tea[] ={//存有5个结构体的数组 结构体数组
{"AA",'m',},//结构体数组元素 以逗号 隔开
{"邓超",'m',},
{"王大治",'m',},
{"陈姐",'w',},
{"XXX",'w',},//这里的逗号写不写无所谓
};
int b = Tea[].age;
struct teachr tea1 = Tea[];
for (int i = ; i < ; i++) {
printf("name is %s ,age is %d, sex is %c \n",Tea[i].name,Tea[i].age,Tea[i].gender);
}

结构体的内存空间:结构体的内存对齐方式--------(结构体所占内存空间大小 是以成员中最大数据类型为基本单位分配的)

*****

struct test{

        char m[];//如果把这一行放最后面  打印为 16
double a;//double 8个字节 float b;// int 、float 4个字节
//为了节省存储空间我们把定义的时候把所占内存最大的放最上面
// char m[10]; double a; float a; 顺序不同的放看结果
};
printf("%lu \n",sizeof(struct test));

分配的空间 前面的必须是后面的整数倍

实战:

.创建一个 Size 结构体,包含 width,height 两个变量。
并写以下函数:
函数 ,判断两个 size 是否等宽。
函数 ,判断两个 size 是否在等高。
函数 ,判断两个 size 是否相等 .创建一个 Point 结构体,包含 x,y 两个变量。
并写以下函数:
函数 ,判断两个点是否在一条水平线上。
函数 ,判断两个点是否在一条垂直线上。
函数 ,判断两个点是否相等 .某班有 个学生,三门课。分别编写 个函数实现以下要求:
() 求各门课的平均分;
() 找出有两门以上不及格的学生,并输出其学号和不及格课程的成绩;
() 找出三门课平均成绩在 - 分的学生,并输出其学号和姓名
.创建一个Rect结构体,包含origin,size两个变量。其中origin是Point类型的,size是Size类型的。
并写以下函数:
函数1,判断两个Rect是否相交。
函数2,判断两个Rect是否包含某个Point。
函数3,判断一个Rect是否在另外一个Rect中。
======
耶稣有13个门徒, 循环开始报数, 报道3的人去死, 最后存活的就是叛徒,找到叛徒的原来位置
有A,B,C,D四个候选人, 有n个人对其进行投票, 按票数从高到低进行输出.

好的题目