您的位置:首页 > 其它

C:结构体

2015-07-31 11:00 267 查看
结构体


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

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

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

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

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

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

/* struct 结构体名 {

char name[20];

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

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

*/

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

//定义一个结构体变量

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

struct student{//学生的结构体
char name[20];
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", 18,'m',90};
struct point   p1 = {23, 12.25};
struct rect    r1  = {23,34};
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 = {2015,07,31};//    我们使用重命名的名字进行定义变量
Student stu1 = {"lee", 18,'m',90};
//    结构体成员的访问  结构体变量.成员变量名
//获取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 = 12;
p.y = 13;
//赋值的第二种方式 整体结构体赋值
struct point p1 = {120,23};
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[10];
int num;
};
//数组作为结构体成员变量时,可以通过结构体的整体赋值为数组的每个元素赋值
struct one s1 ={{1,2},3};
struct one s2 ={{12,13},3};
s1 = s2;
for (int i = 0; i < 2; 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[20];//分号隔开
char gender;
int age;
//        float height;
};
//定义一个有5个元素的结构体数组
struct teachr Tea[5] ={//存有5个结构体的数组  结构体数组
{"AA",'m',22},//结构体数组元素 以逗号 隔开
{"邓超",'m',19},
{"王大治",'m',14},
{"陈姐",'w',12},
{"XXX",'w',21},//这里的逗号写不写无所谓
};
int b = Tea[3].age;
struct teachr tea1 = Tea[0];
for (int i = 0; i < 5; 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[10];//如果把这一行放最后面  打印为 16
double a;//double  8个字节

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


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

实战:

1.创建一个 Size 结构体,包含 width,height 两个变量。
并写以下函数:
函数 1,判断两个 size 是否等宽。
函数 2,判断两个 size 是否在等高。
函数 3,判断两个 size 是否相等

2.创建一个 Point 结构体,包含 x,y 两个变量。
并写以下函数:
函数 1,判断两个点是否在一条水平线上。
函数 2,判断两个点是否在一条垂直线上。
函数 3,判断两个点是否相等

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


好的题目
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: