您的位置:首页 > 编程语言 > C语言/C++

C语言-Struct

2015-08-10 20:05 218 查看
// main.m
#import <Foundation/Foundation.h>
#import "Student.h"

//声明结构体
/*  struct 结构体名 {
类型修饰符  成员变量名;
..........
类型修饰符  成员变量名;
};
*/
// 点得数据类型 x y
//struct mypoint 点的数据类型
// x y 就是新的数据类型的成员变量

struct mypoint{
float x; //横坐标
float y;  //纵坐标

};          //大括号中的为成员变量,大括号之后必须要有分号

//矩形的数据类型  length wide
struct 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: