002.png

//
// main.m
// C6_结构体2
//
// Created by YIem on 15/11/17.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import <Foundation/Foundation.h>

import "MyFunc.h"

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


// 定义变量
Person dawa = {"大娃", 'm', 16, 1.0};
// 打印结构体成员变量
printf("%s %c %d %.2f\n", dawa.name, dawa.sex, dawa.age, dawa.height);

//
printPerson(dawa);
Person yeye = {"爷爷", '?', 17, 1.7};
printPerson(yeye);
Person jinggang = {"金刚葫芦娃", '?', 15, 1.84};
printPerson(jinggang);
Person shejing = {"蛇精", 'f', 18, 2.26};
Person xiezi = {"蝎子精" , 'm', 500, 2.36};
// 结构体数组
//整型数组 int a[5] = {1, 2, 3, 4, 5};
Person huluwa[5] = {dawa, yeye, jinggang, shejing, xiezi};
printf("---------分割线-----------\n");
// 遍历
for (int i = 0; i < 5; i++) {
    // huluwa[i] 获取每一个结构体变量
    printPerson(huluwa[i]);
    // 定义一个临时结构体
    Person p = huluwa[i];
    printf("%s %c %d %.2f\n", huluwa[i].name, p.sex, p.age, p.height);
}
///
printf("----------分割线----------\n");
/// 打印结构体数组
printPersonArray(huluwa, 5);
printf("-----------------\n");
/// 定义180以上的人
printPersonBeyond180(huluwa, 5);
/// 普通版冒泡
int a[5] = {2, 7, 4, 3, 6};
for (int i = 0; i < 5 - 1; i ++) {
    for (int j = 0; j < 5 - 1 - i; j++) {
        if (a[j] > a[j + 1]){
        int temp = a[j];
        a[j] = a[j + 1];
        a[j + 1] = temp;
        }
    }
    
    }
for (int i = 0; i < 5; i++) {
    printf("%d", a[i]);
    printf("\n");
}

printf("---------------\n");
/// 函数版冒泡
    bubbleSort(a, 5);
printf("---------------\n");
/// 按照身高大小排队
bubuleSortPersonArray(huluwa, 5);


// 结构体内存分配原则
// 1. 先找到结构体中所占空间最大的类型 已类型为分配单位(eg : int ->4, float -> 4)
// 2. 自上而下 分配内存 如果所剩内层不够放当前类型 则重新分配空间 如果够放 则可填充剩余空间中






return 0;

}



//
// MyFunc.h
// C6_结构体2
//
// Created by YIem on 15/11/17.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//
// 声明

import <Foundation/Foundation.h>

struct person {

char name[20];
/// 性别
char sex;
/// 年龄
int age;
/// 身高
float height;

};
typedef struct person Person;

/// 打印结构体
void printPerson (Person p);
/// 打印结构体数组
// 参数1. 结构体数组
// 参数2. 数组元素个数
void printPersonArray(Person p[], int count);
/// 打印180以上的人
void printPersonBeyond180(Person p[], int count);

///冒泡
void bubbleSort(int a[], int count);
/// 结构体数组 冒泡 按照身高大小排队
void bubuleSortPersonArray(Person p[], int count);



//
// MyFunc.m
// C6_结构体2
//
// Created by YIem on 15/11/17.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//
// 定义

import "MyFunc.h"

/// 定义结构体
void printPerson (Person p) {

printf("name: %s, sex: %c, age: %d,height: %.2f\n", p.name, p.sex, p.age, p.height);

}
/// 打印结构体数组
void printPersonArray(Person p[], int count) {

for (int i = 0; i < count; i++) {
    printPerson(p[i]);
}

}
/// 定义180以上的人
void printPersonBeyond180(Person p[], int count) {

for (int i = 0; i < count; i++) {
    if (p[i].height > 1.80) {
        printPerson(p[i]);
    }
}

}
///冒泡
void bubbleSort(int a[], int count) {

for (int i = 0; i < count - 1; i++) {
    for (int j = 0; j < count - 1 - i; j++) {
        if (a[j] > a[j + 1]) {
            int temp = a[j];
            a[j] = a[j + 1];
            a[j + 1] = temp;
        }
    }
}
for (int i = 0; i < count; i++) {
    printf("%d ", a[i]);
}
printf("\n");

}

/// 结构体数组 冒泡 按照身高大小排队
void bubuleSortPersonArray(Person p[], int count) {

for (int i = 0; i < count - 1; i++) {
    for (int j = 0; j < count - 1 - i; j++) {
        // 比较  两个结构体的成员变量
        // 比较两个人的身高
        if (p[j].height > p[j + 1].height) {
            // 交换两个结构体
            // 句号两个人的位置
            Person temp = p[j];
            p[j] = p[j + 1];
            p[j + 1] = temp;
            
        }
    }
}
printPersonArray(p, count);

}