#import <Foundation/Foundation.h>
以下是Function.h(自己添加的)
// 取消结构体自动补齐
// 结构体在内存当中计算占多少字节
// 计算顺序 由上至下依次计算
// 一个成员变量一个成员变量的计算
// 并且自动补齐为 该结构体中所占最大字节数的变量的字节数来进行补齐的
// 例: 如果结构体中 最大的是float 就按4的倍数补齐 最大的是double 就按8的倍数补齐
#pragma pack(1)
/*
声明一个结构体
关键字 struct
struct 结构体名 {
类型名1 变量名1;
类型名2 变量名2;
.......
}
*/
// 声明一个描述学生的结构体
// 结构体中声明的变量 一般叫做 成员变量
struct Student {
char name[20]; // 注意 中间用分号隔离
char sex;
double number;
float score;
int age;
};typedef struct Student Student;
// 声明结束 也用分号结束
// 声明描述一个点的结构体
// 声明描述一个日期的结构体
struct MyPoint {
float abs;
float ord;
};
typedef struct MyPoint MyPoint;
struct Date {
int year;
int month;
int day;
};
typedef struct Date Date;
struct StudentMessage {
char name[20];
float score;
int age;
};
void messageValue(struct Student stu);
void sortMessage(struct StudentMessage stu);
// 需求:描述一个人名字与出生年月日 家庭成员
// 结构体中可以有其他结构体当作成员变量
// 结构体中可以嵌套结构体
struct HomePerson{
char mother[20];
char father[20];
};typedef struct HomePerson Homeperson;
struct Person{
char name[20];
Date day;
Homeperson home;
};typedef struct Person Person;
// 声明一个函数 冒泡排序
void sortArray(Student stuArray[],int count);
#import "Function.h"
以下为Function.m
void messageValue(struct Student stu){
printf("%s,%c,%.2f,%.2f,%d\n",stu.name,stu.sex,stu.score,stu.number,stu.age);
}
void SortMessage(struct StudentMessage stu){
printf("%s %.2f %d",stu.name,stu.score,stu.age);
};
// 按照成绩冒泡排序并输入全部信息
void sortArray(Student stuArray[],int count){
for (int i = 0; i < count - 1; i++) {
for (int j = 0; j < count - i - 1; j++) {
// 注意1:比是数组中 结构体变量的分数
// 注意2:交换是数组中 结构体变量
if (stuArray[j].score < stuArray[j + 1].score) {
Student temp = stuArray[j];
stuArray[j] = stuArray[j + 1];
stuArray[j + 1] = temp;
}
}
}
for (int n = 0; n < count; n++) {
// 打印的是数组中每一个结构体的变量
messageValue(stuArray[n]);
}
}
以下是main.h
#import <Foundation/Foundation.h>
#import "Function.h"
// 声明一个匿名结构体 没有名字的结构体
struct {
char name[20];
char sex;
int age;
} stu1 = { "wanglong", 'm', 18},stu2 = { "jianglong", 'm', 22};
// 起别名 给类型起别名
// 使用关键字 typedef 老名字 新名字
typedef int Jay;
// 给 float 起个别名
// 给 int array[5]起个别名
typedef float hh;
typedef int MyArray[5];// 把int array[5] -> MyArray
// 描述一个男的
struct Man {
char name[20];
float height;
};
typedef struct Man SuperMan;
// 声明结构体和起别名 连一起写
typedef struct Woman{
char name[20];
char sex;
}SuperWoman;
typedef struct StudentMessage StudentMessage;
int main(int argc, const char * argv[]) {
// 定义一个结构体变量
// struct 结构体名 变量名 = { 初值};
// 初值的顺序需要和 声明时一样
// 取出结构体中成员变量的值
// 结构体变量 . 成员变量 = 值
// 姜龙
// struct Student stu1 = {"jianglong",'x', 66, 88.8, 22};
//
// printf("%d\n",stu1.age);
// // 修改结构体变量的成员变量的值
// stu1.age = 32;
// printf("%d\n",stu1.age);
// // 修改名字
// strcpy(stu1.name, "longjiang");
// printf("%s\n",stu1.name);
//
// 编写一个函数 打印结构体的所有信息
// 变量的数据类型 变量名以前 全是类型
// struct Student stu2 = {"nipeng", 'x', 14, 88.8, 21};
// struct Student stu3 = {"jay", 'x', 1, 99.9, 31};
// messageValue(stu1);
// printf("%ld",sizeof(struct Student));
// 起别名 (外号)
// MyArray haha = {1, 2, 3, 4, 6};
// SuperMan m2 = {};
// Date date1 = {2015,10,17};
// StudentMessage stu11 = {"jk", 66.6, 20};
// StudentMessage stu22 = {"hz", 67.6, 22};
// StudentMessage stu33 = {"ll", 69.6, 25};
//有三个学⽣,编程找出分数最⾼者以及年龄最⼩者
// 先找最高分 三数比大小 再根据这个最高分 找人
// float maxScore = 0;
// maxScore = stu11.score > stu22.score ? stu11.score:stu22.score;
// maxScore = maxScore > stu33.score ? maxScore : stu33.score;
// // 根据分找人
// if (maxScore == stu11.score) {
// sortMessage(stu11);
// }
// if (maxScore == stu22.score) {
// sortMessage(stu22);
// }
// if (maxScore == stu33.score) {
// sortMessage(stu33);
// }
// int minAge = 0;
// minAge = stu11.age < stu22.age ? stu11.age : stu22.age;
// minAge = minAge < stu33.age ? minAge : stu33.age;
// if (minAge == stu11.age) {
// sortMessage(stu11);
// }
// if (minAge == stu22.age) {
// sortMessage(stu22);
// }
// if (minAge == stu33.age) {
// sortMessage(stu33);
// }
// 数据类型 数组名[元素个数] = { 初值};
// Student a[4] = {stu1, stu2, stu3, stu4};
// 结构体变量可以直接赋值 赋值的过程是个拷贝的过程
// Student stu4 = stu1;
// 数组不能直接进行赋值 数组名字是首元素的地址 是常量 是程序运行期间无法改变的值
// 声明一个Person结构体变量
// 声明一个Date的结构体变量
// Date d1 = {1997, 8, 24};
// Homeperson h1 = {"mama", "die"};
// Person p1 = {"wanglong", d1, h1};
// printf("%s\n",p1.home.father);
Student stu1 = { "wanglong", 'm', 100, 98.8, 18};
Student stu2 = { "zhuangzhuang", 'm', 100, 88.8, 18};
Student stu3 = { "Jay", 'm', 100, 78.8, 18};
Student stu4 = { "Echo", 'm', 100, 68.8, 18};
Student stu5 = { "xuyang", 'm', 100, 89.8, 18};
// 把这五个人放进一个数组中
Student studentArray[5] = {stu1, stu2, stu3, stu4, stu5};
// Student tempStu3 = studentArray[2];
// tempStu3.name;
// printf("%s",studentArray[2].name);
//有5名学⽣保存在结构体数组中,按成绩从高到低 排序并输出
// for (int i = 0; i < 4; i++) {
// for (int j = 0; j < 4 - i; j++) {
// if (studentArray[j].score < studentArray[j + 1].score) {
// Student temp = studentArray[j];
// studentArray[j] = studentArray[j + 1];
// studentArray[j + 1] = temp;
//
// }
// }
// }
// for (int n = 0; n < 5; n++) {
// messageValue(studentArray[n]);
// }
sortArray(studentArray, 5);
return 0;
}