C:结构体

结构体

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

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个人对其进行投票, 按票数从高到低进行输出.
好的题目

 

 

 
posted @ 2015-07-31 11:00  ywda  阅读(465)  评论(0编辑  收藏  举报