C语言回顾 七 结构体

结构体
#import <Foundation/Foundation.h>
int count1 = 100;
//全局变量作用域是在每个函数中都能访问到的
//生命周期是整个程序
int sum(int, int );//函数声明时参数名是可以省略的,但是函数的定义的的时候是不可以省略的;
int sum(int a, int b)
{
    return a + b;
}
//声明一个student结构体类型
//struct作用1:说明声明时一个结构体类型,作用2:struct与结构体名一起组成结构体类型
//结构体的类型 struct student
struct student{
    //成员变量(只定义类型和成员名,不赋初值)
    short num;
    char name[20];
    char sex;
    int age;
    float score;
 };//最后分号不要丢

void printfStudentContent(struct student stu);
void printfStudentContent(struct student stu)
{
    printf("学号:%hd, 姓名:%s, 性别:%c, 年龄:%d, 分数:%.2f\n",stu.num, stu.name, stu.sex, stu.age, stu.score);
}

//匿名结构体(变量定义写在‘}’后面)
struct{
    int num;
    char name[40];
    float score;
} s1 = {1,"呼噜娃", 33.5},s2 = {2, "蹦擦擦", 40.5};

一、
typedef int  intteger;
typedef struct student Student;
二、
typedef struct student{
//成员变量(只定义类型和成员名,不赋初值)//字符串数组赋值需要借助字符函数
    short num;
    char name[20];
    char sex;
    int age;
    float score;
}Student;

void printfStudentContent(Student stu);
void printfStudentContent(Student stu){
    printf("学号:%hd, 姓名:%s, 性别:%c, 年龄:%d, 分数:%.2f\n",stu.num, stu.name, stu.sex, stu.age, stu.score);
    
}

typedef struct yPoint{
    char x;   //
    short y; //
}YPoint;

typedef struct date{
    int year;
    int month;
    int day;
} Mydate;
typedef struct person{
    char name[20];
    Mydate birthday; //结构体嵌套 person1.date.year
} Person;


//找出最高分的人并打印该人的全部信息
void maxStudentArr(Student studentsArr[], int count);
void maxStudentArr(Student studentsArr[], int count)
{
    Student maxStu = {0};
//找出学生成绩最高者
    for (int i = 0; i < 5; i++) {
        if (maxStu.score < studentsArr[i].score) {
            maxStu = studentsArr[i];
        }
    }
    
    printfStudentContent(maxStu);
}

//排序结构体数组
void sortStudentArr(Student studentsArr[], int count);
void sortStudentArr(Student studentsArr[], int count)
{ for (int i = 0; i < count - 1; i++) {
        for (int j = 0; j < count - 1 - i; j++) {
            if (studentsArr[j].score < studentsArr[j+1].score) {
                Student temp = studentsArr[j];
                studentsArr[j] = studentsArr[j+1];
                studentsArr[j+1] = temp; 
            }
        }
    }
}
//打印数组全部元素
void printfStudentArr(Student studentsArr[], int count);
void printfStudentArr(Student studentsArr[], int count)
{ for (int i = 0; i < count; i++) {
        printfStudentContent(studentsArr[i]);
    }printf("\n");
}
int main(int argc, const char * argv[])
{
    //局部变量的作用域是在自己的有效范围内可用
    //凡是出现在{}里面的都是局部变量
    //他们的作用域就是在{}内部
    //在同一个作用域中,不能定义两个相同变量名
    //在不同作用域中,可以定义两个相同变量名的变量,第一种,两个全是全局的,互不影响;第二种,一个全局的,一个局部的,在局部作用域范围内使用变量时识别到的是当前的局部变量变量而不是全局变量(强龙不压地头蛇)
//    int sum1 = sum(3, 5);
//    printf("%d ",sum1);

//定义一个struct student类型的变量
    struct student stu1 = {1, "师父", 'm', 44, 12};
    struct student stu2 = {2, "悟空", 'm', 100, 70};
    struct student stu3 = {3, "娘娘",'f', 99, 50};
//结构体成员访问 结构体变量名.成员变量
    printf("学号:%hd, 姓名:%s, 性别:%c, 年龄:%d, 分数:%.2f\n",stu1.num, stu1.name, stu1.sex, stu1.age, stu1.score);
    printf("学号:%hd, 姓名:%s, 性别:%c, 年龄:%d, 分数:%.2f\n",stu2.num, stu2.name, stu2.sex, stu2.age, stu2.score);
    printf("学号:%hd, 姓名:%s, 性别:%c, 年龄:%d, 分数:%.2f\n",stu3.num, stu3.name, stu3.sex, stu3.age, stu3.score);
    printfStudentContent(stu2);
    //结构体变量和其他变量一样,可以整体进行赋值;
    stu3 = stu1;
    //成员变量赋值
    stu3.num = 5;
    stu3.age = 42;
    strcpy(stu3.name, "金刚");
    printfStudentContent(stu3);


//匿名结构体
    printf("%d",s1.num);
    
    intteger a = 10;
    printf("%d\n",a);
    
    struct student stu4 = {1, "lang", 'm', 33, 90.2};
        Student stu5 = stu4;
        printf("%s",stu5.name);

//有三个学生,编程找出分出最高者和分数最低者

    Student stu1 = {1, "师父", 'm', 44, 12};
    Student stu2 = {2, "悟空", 'm', 42, 72};
    Student stu3 = {3, "八戒", 'm', 47, 17};
    Student stu4 = {0};
    
    stu4 = stu1.score > stu2.score ? stu1 : stu2;
    stu4 = stu4.score > stu3.score ? stu4 : stu3;
    printfStudentContent(stu4);
    
    
    Student stu11 = {1, "师父", 'm', 44, 12};
    Student stu21 = {2, "悟空", 'm', 42, 72};
    Student stu31 = {3, "八戒", 'm', 47, 17};
    Student stu5 = {0};
    
    stu5 = stu11.score < stu21.score ? stu11 : stu21;
    stu5 = stu5.score < stu31.score ? stu5 : stu31;
    printfStudentContent(stu5);

//定义三个person变量,比较年龄找出年龄最大值
    //1.定义三个person变量
    Person p1 = {"大娃", {1990,3,5}};
    Person p2 = {"二娃", {1990,7,5}};
    Person p3 = {"小娃", {1990,4,5}};
    //2.比较散变量的年龄
    Person personArr[3] = { p1, p2, p3};
    for (int i = 0; i < 3; i++) {
        printf("%s ",personArr[i].name);
    }printf("\n");
//练习

//有5名学生保存在结构体数组中,编程查找成绩最高者,输出该学生的全部信息
    Student stu1 = {1, "zhangsan", 'm', 20, 90};
    Student stu2 = {2, "lisi", 'm', 12, 22};
    Student stu3 = {3, "wangwu", 'f', 44, 54};
    Student stu4 = {4, "wangermazi", 'm', 66, 77};
    Student stu5 = {5, "yaoyiyao", 'f', 61, 99};
    //定义一个数组存放所有的学生
    Student studentsArr[5] = {stu1, stu2, stu3, stu4, stu5};
    //五个学生中的最高分的信息
    maxStudentArr(studentsArr,5);
    //五个学生中的按照分数从高到低冒泡排序依次打印学生的的全部信息
    sortStudentArr(studentsArr, 5);
       return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值