C语言-Struct
来源:互联网 发布:优化相机 编辑:程序博客网 时间:2024/05/16 05:45
// main.m
#import <Foundation/Foundation.h>#import "Student.h"//声明结构体/* struct 结构体名 { 类型修饰符 成员变量名; .......... 类型修饰符 成员变量名; }; */// 点得数据类型 x y//struct mypoint 点的数据类型// x y 就是新的数据类型的成员变量struct mypoint{ float x; //横坐标 float y; //纵坐标}; //大括号中的为成员变量,大括号之后必须要有分号//矩形的数据类型 length widestruct 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;}
0 0
- C语言struct机制
- c语言之struct
- C语言-Struct
- c语言struct用法
- C语言中的struct和typedef struct
- C语言中 typedef struct 和 struct
- C语言结构体(struct)
- C语言struct复制问题
- c语言结构体struct
- C语言关键字--- struct union
- c语言:typedef + struct + 指针
- c语言:typedef + struct + 指针
- C语言中的struct用法
- C语言结构体struct
- C语言typedef struct详解
- C语言struct关键字详解
- C 语言struct的知识
- c语言 struct 的初始化
- 我的金工实习心得(二):铸工第一天
- LintCode-Copy Books
- Java(8-10)
- A1085. Perfect Sequence (25)
- 事件响应的优先级、stopProgapation禁止下层组件响应
- C语言-Struct
- To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
- JVM学习笔记(三)------内存管理和垃圾回收
- 交叉排序
- Android Drawable、Bitmap、byte[]之间的转换
- 确定天数 SDUT 2520
- HDu 1513 LCS
- JVM学习笔记(四)------内存调优
- poj2001字典树