C语言第七讲(Struct结构体)

一:main.m文件里:

#import

#import  "Dot.h"

//定义一个手机的结构体

struct phone{

    char type[20];

    float price;

};

typedefstructphone Phone;

//引入头文件的实质,就是把.h中的内容粘贴过来

//结构体声明还可以在函数内部,也可以写在函数外部

//打印结构体数组函数

//void printArray(Phone array[],int count);

//void printArray(Phone array[],int count){

//    for (int i=0; i

//        printf("%s %.2f\n",array[i].type,array[i].price);

//

//    }

//}

//冒泡排序的函数

void bubbleSort(Phone array[],int count);

void bubbleSort(Phone array[],int count){

    for (int i=0; i1; i++) {

        for (int j=0; j1-j; j++) {

            if (array[j].price>array[j+1].price) {

                Phone temp=array[j];

                array[j]=array[j+1];

                array[j+1]=temp;

            }

        }

    }

}

//  for (int i=0; i

//      

//     printf("%s %.2f\n",array[i].type,array[i].price);

//      

//  }

int main(int argc, const char * argv[]) {

     //结构体是一种用户可以自定义数据类型

    //结构体的声明格式

   

    

    struct student {

        int number ;

        char name[20];

        char gender;

        float score;

    };

    

    //注:

    //1.结构体命名使用小驼峰法

    //2.每一个成员变量后要加分号(;)

    //3.大括号外面也要加分号(;)

    //4.成员变量的类型可以不同

    

    //定义整型变量

    int a=0;

    //结构体变量

    struct student stu ={9527,"xiaoqiang",'F',59.9};

    //注:struct student 数据类型

    //stu 变量名

    //{9527,"xiaoqiang",'F',59.9}赋值

    

    //访问结构体的成员变量:使用点语法

    printf("%d\n",stu.number);

    printf("%s\n",stu.name);

    printf("%c\n",stu.gender);

    printf("%f\n",stu.score);

    

    

    

    // 每一个成员变量的值都为0

    struct student stu1={0};

    //结构体变量可以直接参与运算

    stu1=stu;

    

    printf("%d\n",stu1.number);

    printf("%s\n",stu1.name);

    printf("%c\n",stu1.gender);

    printf("%.2f\n",stu1.score);

    

    //修改成员变量的值

    stu1.number=1234;

    //stu1.name=xiaoqiong;

    strcpy(stu1.name, stu.name);

    stu1.gender='M';

    stu1.score=59.8;

    

    printf("%d %s %c %.2f\n",stu1.number,stu1.name,stu1.gender,stu1.score);

    

    //有三个学生,编程找出分数最高者及年龄最小者

    

   

    

    struct student1 {

        int age;

        char name[20];

        float score;

    };

    

    struct student1 s1={118, "laoyao", 01.1};

    struct student1 s2={45, "dachui" , 99.9};

    struct student1 s3={85, "lisi" , 465.0};

    

    struct student1 max={0};

    max=s1.score>s2.score?s1:s2;

    max=max.score>s3.score?max:s3;

    printf("分数最高者:%s %d %.2f\n",max.name,max.age,max.score);

    

    

    struct student1 min={0};

    min=s1.ageage?s1:s2;

    min=min.ageage?min:s3;

    printf("年龄最小者:%s %d %.2f\n",min.name,min.age,min.score);

    

    

    //  重命名数据类型

    //typedef 原类型名 新类型名

    //注:新类型名使用大驼峰法命名

    typedef int AAA;

    int c=10;

    int d=10;

    typedef struct student Student;

    struct student p1={123,"xiaoming",'F',99.9};

    Student p2={123,"xiaoming",'F',99.9};

    

    //结构体所占的字节数是最大成员变量数据类型所占字节数的倍数

    // 结构体成员变量的顺序,会影响到结构体所占的字节数

    //合理的排布成员变量的顺序,能够减少内存碎片,降低结构体所占的字节数

    struct abc {

        char a ;

        short b;

        char d ;

        int c  ;

    };

    printf("%lu\n",sizeof(structabc));//12

    

    struct point {

        float x;

        float y;

    };

    typedefstructpoint P;

    //Pp={0};

   

    //定义一个手机的结构体

    struct phone{

        char type[20];

        float price;

    };

    typedef struct phone Phone;

    //定义5个结构体变量,存入数组

    Phone q1={"Iphone",5999};

    Phone q2={"samsung",7000};

    Phone q3={"huawei",3000};

    Phone q4={"blackberry",3850};

    Phone q5={"xiaomi",1999};

    

    

    

    

    

    

    

    

    

    

    

    

    //结构体数组

    Phone array[5]={q1,q2,q3,q4,q5};

//    array[1]   结构体变量

//    array[1].type  结构体的成员变量

    

    //遍历数组,打印每一个元素

    for (int i=0; i<<span se-mark="1">5; i++) {

        printf("%s %.2f\n",array[i].type,array[i].price);

    }

    

    

    //按照价格排序(低到高)

    for (int i=0; i<<span se-mark="1">5-1; i++) {

        for (int j=0; j<<span se-mark="1">5-1-i; j++) {

            if (array[j].price>array[j+1].price) {

                Phone temp=array[j];

                array[j]=array[j+1];

                array[j+1]=temp;

            }

        }

    }

    for (int i=0; i<<span se-mark="1">5; i++) {

        printf("%s %.2f\n",array[i].type,array[i].price);

    }

    printf("\n");

    //a-z

    for (int i=0; i<<span se-mark="1">5-1; i++) {

        for (int j=0; j<<span se-mark="1">5-1-i; j++) {

            if (strcmp(array[j].type, array[j+1].type)) {

                

                Phone temp= array[j];

                array[j]=array[j+1];

                array[j+1]= temp;

            }

        }

    }

    

    for (int i=0; i<<span se-mark="1">5; i++) {

        printf("%s %.2f\n",array[i].type,array[i].price);

    }

//   定义一个BOOL 类型的变量,用于标记上一趟比较是否发生了交换

    //YES:发生了交换,NO:没有发生交换

    

    int b[5]={10, 6, 7, 8, 9};

    BOOL flag=YES;

    //每一趟比较开始的条件:上一趟比较发生了交换

    //如果上一趟比较没有发生交换,说明数组已经是有序的,不用进行排序了

    for (int i=0; i<<span se-mark="1">5-1&&flag; i++) {

        //每一趟比较开始的时候,假设这一趟比较不会发生交换

        flag=NO;

        for (int j=0; j<<span se-mark="1">5-1-i; j++) {

            if (b[j]>b[j+1]) {

                int temp=b[j];

                b[j]=b[j+1];

                b[j+1]=temp;//

                //一旦进入到if语句内部,说明发生了交换

                flag=YES;

            }

        }

        

    }

    

    for (int i=0; i<<span se-mark="1">5; i++) {

        printf("%d ",b[i]);

    }

二:Dot.h里:

//结构体的声明写在.h


//结构体声明还可以在函数内部,也可以写在函数外部

struct point {

    float x;

    float y;

};

typedef struct point P;




本讲结束...

正宗上课源代码​


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值