//
// main.m
// LessonStruct
//
// Created by lanouhn on 14-7-24.
// Copyright (c) 2014年 vaercly@163.com 陈聪雷. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Sructs.h"
//导入自定义的头文件时用"", 导入系统的头文件时用<>
/**
* 结构体是一种自定义的数据类型, 也是用来存储多个数据的容器, 只不过结构体要比数组灵活, 它可以存储不同的类型的相数据
*/
//结构体的定义
//struct + 结构体名字{大括号中填写结构体成员, 多个结构体成员之间通过分号间隔} + ; (分号必不可少)
struct student {
//结构体成员
int number; //存储学号
char sex; //存储性别
};//分号结构体定义的结束标志, 必不可少 float x;//存储横坐标
float y;//存储纵坐标
//typedef 第一种格式, 先定义结构体类型, 然后再typedef
typedef struct student Student;//给结构体类型struct student重新定义了一个名字Student
//typedef 第二种格式, 定义结构体的同时, typedef
typedef struct student1 {
//结构体成员
int number; //存储学号
char sex; //存储性别
}Student1;
//定义一个点结构体
struct point {
//结构体成员
float x;//存储横坐标
float y;//存储纵坐标
};
typedef struct point Poi;
typedef struct point1 {
float x;//存储横坐标
float y;//存储纵坐标
}Point1;
//定义一个矩形结构体
struct rectangle {
//结构体成员
float length;//存储长
float width;//存储宽
};
typedef struct rectangle Rectangle;
//typedef 类型中定义(给已有的类型重新起一个名字), 新名字和原类型具有同样的功能
typedef int Integer;
int main(int argc, const char * argv[])
{
//定义一个学生结构体变量, 和定义int, float, 插入类型数据一样, 只不过把类型换成结构体类型而已
//结构体类型 = struct 关键字 + 结构体名字
Integer a = 0;
//struct student 学生结构体类型
//stu 学生结构体名字
Student stu = {9527, 'M'};
Student stu1 = {10086, 'F'};
Poi poi = {1.2, 2.4};
Rectangle rec = {13, 14};
//结构体变量访问结构体成员的方式, 通过结构体变量.结构体成员
printf("%d %c\n", stu.number, stu.sex);
printf("%d %c\n", stu1.number, stu1.sex);
printf("%f %f\n", poi.x, poi.y);
printf("%f %f\n", rec.length, rec.width);
stu.number = 100;
printf("%d\n", stu.number);
//定义一个学生结构体变量
Stu xiaoGuang = {"xiaoGuang", 'F', 10, 12.3};
printf("%s %c %d\n", xiaoGuang.name, xiaoGuang.sex, xiaoGuang.number);
Stu xiaoMing = {0};
// strcpy(xiaoMing.name, xiaoGuang.name);
// xiaoMing.sex = xiaoGuang.sex;
// xiaoMing.number = xiaoGuang.number;
//结构体变量可以直接赋值
xiaoMing = xiaoGuang;
printf("%s %c %d\n", xiaoMing.name, xiaoMing.sex, xiaoMing.number);
Stu xiaoHong = {"xiaoHong", 'F', 29, 45.6};
Stu xiaoGang = {"xiaoGang", 'F', 18, 89.3};
Stu temp = {0};
temp = xiaoGuang.score > xiaoHong.score ? xiaoGuang : xiaoHong;
temp = temp.score > xiaoGang.score ? temp : xiaoGang;
printf("最高分数的学生为:%s\n", temp.name);
temp = xiaoGuang.number < xiaoHong.number ? xiaoGuang : xiaoHong;
temp = temp.number < xiaoGuang.number ? temp : xiaoGuang;
printf("最小年龄的学生为:%s\n", temp.name);
return 0;
}