C语言-Struct

来源:互联网 发布:优化相机 编辑:程序博客网 时间:2024/05/16 05:45

//  main.m

#import <Foundation/Foundation.h>#import "Student.h"//声明结构体/*  struct 结构体名 { 类型修饰符  成员变量名; .......... 类型修饰符  成员变量名; }; */// 点得数据类型 x y//struct mypoint 点的数据类型// x y 就是新的数据类型的成员变量struct mypoint{    float x; //横坐标    float y;  //纵坐标};          //大括号中的为成员变量,大括号之后必须要有分号//矩形的数据类型  length widestruct myrect {    float length;  //长度    float wide;    //宽度};int main(int argc, const char * argv[]){//    //整型//    int a = 0;//    //点类型//    struct mypoint point_1 = {2.0,3.0};     //定义了一个数据类型为 struct mypoint ,变量名为 point_1 ,初值为2.0,3.0的一个变量 point_1;//    //结构体内存的问题:以最大数据类型整数倍进进行分配//////    printf("%lu   %lu",sizeof(struct mypoint),sizeof(point_1));//    //    //矩形类型//    struct myrect rect_1 = {1.0,9.0};    //定义了一个数据类型为 struct myrect ,变量名为 rect_1 ,初值为1.0,9.0 的一个变量rect_1;//    struct myrect rect_2 = {0};    //若={0} 则意味着所有的成员变量初值为 0;//    //    //访问结构体成员变量  :      结构体变量名+"."+成员变量名//    printf("\n点横坐标%.2f,纵坐标%.2f ",point_1.x,point_1.y);   //当 printf 中 前部的汉字多的话影响程序对变量名的搜索,以至于本式中的 x y 不变颜色 //    //结构体的成员变量可以当变量使用//    point_1.x = 100.0f;    //定义时数值后+f,表示此数是浮点型数值,可省略.//    printf("\n点横坐标%.2f,纵坐标%.2f ",point_1.x,point_1.y);//    //    struct mypoint point_2 = {1.0,1.0};//    //结构体可以整体赋值//    point_1 = point_2;//    printf("\n点横坐标%.2f,纵坐标%.2f ",point_1.x,point_1.y);//    //            //   //定义学生结构体的变量//    //    struct student dengken = {"dengken",'m',60,25,91};//    printf("name = %s,sex = %c,num = %d,age = %d,score = %.2f",dengken.name,dengken.sex,dengken.num,dengken.age,dengken.score);//    //                //匿名结构体    //    struct {//        char name[20];//        int age;//    }stu1={"zhangsan",16};      //定义一个  数据类型为struct{char name[20];int age;},变量名为 stu1,初值为{"zhangsan",16}的一个变量 stu1//                                //优点  可以不用声明  直接使用   //    printf("\n%lu",sizeof(struct{char name[20];int age;}));//    //    //学生变量//    Student jinpeng = {"hanjinpeng",'m',04,16,19};//            //    Student stu1 = {"zhangsan",'m',01,18,60};//    Student stu2 = {"lisi",'w',02,16,99};//    Student stu3 = {"wangwu",'m',03,20,80};//    //    //调用分数最高的学生//    outputStuInfo(getMaxScoreOfStu(stu1, stu2, stu3));//    //找出年龄最小的//    outputStuInfo(maxAge(stu1, stu2, stu3));//     //找出性别是'm'的//     outputStuInfo(sexOfStu(stu1, stu2, stu3));//    //            //    //如果{0}那么结构体中的每一个成员变量即成员变量的子变量都为0//    Student stu = {0};//    Student stu_1 = {"zhangsan",'m',01,18,60,{1992,10,1}};//    //    printf("year = %d",stu_1.birthday.year);//    printf("month = %d",stu_1.birthday.month);            Student aaa = {"aaa",'m',1101,23,95};    Student bbb = {"bbb",'m',1102,22,60};    Student ccc = {"ccc",'?',1103,18,99};    Student ddd = {"ddd",'m',1104,12,100};    Student eee  ={"eee",'?',1105,44,69};        Student stu[5] ={aaa,bbb,ccc,ddd,eee};    //访问 stu[1]    outputStuInfo(stu[1]);    //循环遍历学生数组  打印每一个学生的信息    printStusInfo(stu, 5);        //根据成绩 对学生进行升序排列打印        sortstubyscore(stu,5);        //根据年龄进行升序排列打印    agearrange(stu,5);        //根据用户输入的学号  打印对应学生信息    short num = 0;    printf("\n请输入学号:\n");    scanf("%hd",&num);    Student result = getstubynum(stu, 5, num);    outputStuInfo(result);     return 0;}


//Student.h

#import <Foundation/Foundation.h>typedef struct myDate{    int year;    int month;    int day;    }MyDdte;//声明 学生结构体////struct student{//    char name[20];    //姓名//    char sex;         //性别//    short num;        //学号//    int age;          //年龄//    float score;      //分数//};//////typedef   作用:给一个已知的数据类型起一个新的名字,用新的名字取代替之前的数据类型//typedef struct student Student; typedef struct student{    char name[20];    //姓名    char sex;         //性别    short num;        //学号    int age;          //年龄    float score;      //分数           //前两步合并为一个过程,开头typedef, 结尾 Student;     MyDdte birthday;  //出生日期 }Student;//找出三个学生成绩最高者Student getMaxScoreOfStu(Student stu1,Student stu2,Student stu3);//输出学生信息void outputStuInfo(Student stu);//找出年龄最大的Student maxAge(Student stu1,Student stu2,Student stu3);//找出性别是 m 的Student sexOfStu(Student stu1, Student stu2,Student stu3);//循环遍历学生数组  打印每一个学生的信息void printStusInfo(Student stu[],int count);//根据得分对学生进行升序排列打印void sortstubyscore(Student stu[],int n);//根据根据得分年龄进行升序排列打印void  agearrange(Student stu[],int n);//根据用户输入的学号  打印对应学生信息Student getstubynum(Student stu[],int n,short num);


//Student.m

#import "Student.h"//找出三个学生成绩最高者Student getMaxScoreOfStu(Student stu1,Student stu2,Student stu3){    Student maxScore = {0};    maxScore = stu1.score > stu2.score ? (stu1.score > stu3.score ? stu1 : stu3):(stu2.score > stu3.score ? stu2 : stu3);    return maxScore;}//输出学生信息void outputStuInfo(Student stu){    printf("name = %s,sex = %c,num = %d,age = %d ,score = %.2f \n",stu.name,stu.sex,stu.num,stu.age,stu.score);}//找出年龄最小的Student maxAge(Student stu1,Student stu2,Student stu3){    Student max = (stu1.age < stu2.age ? stu1 : stu2);     max = max.age < stu3.age ? max : stu3;    return max;}//找出性别是 m 的Student sexOfStu(Student stu1, Student stu2,Student stu3){    Student a[3] = {stu1,stu2,stu3};    int c = 0;    for (int i = 0; i < 3; i++) {        if (a[i].sex ==  'm') {            int c = i;            break;        }    }    return a[c];}//循环遍历学生数组  打印每一个学生的信息void printStusInfo(Student stu[],int count){    for (int i = 0; i < count; i++) {        outputStuInfo(stu[i]);    }}//根据得分对学生进行升序排列打印void sortstubyscore(Student stu[],int n){for (int i = 0 ; i < n - 1; i++) {    for (int j = 0;  j < n - i - 1; j++) {        if (stu[j].score > stu[j + 1].score) {            Student temp = stu[j];            stu[j] = stu[j + 1];                     //stu[j] 本质是一个元素,但是由于类型的原因,其实相当于一个数组,简化了程序操作            stu[j + 1] = temp;        }    }}printStusInfo(stu, 5);}//根据根据得分年龄进行升序排列打印void  agearrange(Student stu[],int n){    for (int i = 0 ; i < n - 1; i++) {        for (int j = 0;  j < n - i - 1; j++) {            if (stu[j].age > stu[j + 1].age) {                Student temp = stu[j];                stu[j] = stu[j + 1];                stu[j + 1] = temp;            }        }}}//根据用户输入的学号  打印对应学生信息Student getstubynum(Student stu[],int n ,short num){    for (int i = 0; i < n - 1; i++) {        if (stu[i].num == num) {            return stu[i];        }    }    Student stu_1 ={0};    printf("没有查询到此学生\n");    return stu_1;}





0 0
原创粉丝点击