iOS学习笔记---c语言学习第七天
结构体
结构体是一种自定义的数据类型
struct 结构体名
{
类型说明符 成员名;
…
类型说明符 成员名;
};
#import <Foundation/Foundation.h> int main(int argc, const char * argv[])
{ struct teacher{
char name[];
char sex;
int age;
char course[];
};
typedef struct teacher Teacher;
Teacher cui={"cui",'m',,"language c"};
struct cup{
float price;//价格
int capacity;//容量
char corlor[];//颜色
};
typedef struct cup Cup;
Cup fuguang={10.5,,"black"};
return ;
}
结构体变量定义
eg:stu1.num//stu1的学号
注:结构体成员变量与普通变量一样,可以赋值
int num;
char name[20]; char sex; float score;
}
stu1 = {1,”wukong”, ‘m’,99.5f},
stu2 = {2, “bajie”, ‘m’, 65.0f};

// struct cup{
// float price;//价格
// int capacity;//容量
// char corlor[20];//颜色
// };
// typedef struct cup Cup;
//定义结构体的同时就起别名。
// typedef struct cup{
// float price;//价格
// int capacity;//容量
// char corlor[20];//颜色
// } Cup;

练习:有三个学生,变成找出分数最高者以及年龄最小者。
typedef struct students{
char name[];
int age;
float score;
} Students;
Students s1={"zhangsan",,};
Students s2={"lisi",,};
Students s3={"wangwu",,};
Students max = {};
max = s1.score>s2.score?s1:s2;
max = max.score>s3.score?max:s3;
printf("%s的分数最高\n",max.name);
Students min = {};
min = s1.age<s2.age?s1:s2;
min = min.age<s3.age?min:s3;
printf("%s的年龄最小",min.name);
结构体空间占用
以最大成员变量类型所占空间为分配单位i按结构体成员声明顺序由上而下分配
注:分配空间不足以存储成员变量时,分配新的空间单位
结构体嵌套
结构体的成员依然可以是结构体
typedef struct date{
int year;
int month;
int day; } MyDate;
struct student{
char name[20];
MyDate birthday;//stu1.birthday.year;
};
结构体数组
将多个结构体变量放到数组中,构成结构体数组
eg:struct student students[10]={0};
//练习用结构体数组做
typedef struct date{
int year;
int month;
int day;
} MyDate;
typedef struct students{
char name[];
int age;
float score;
MyDate birthday; } Students; Students stus[]={
{"zhangsan",,,{,,}},
{"lisi",,,{,,}},
{"wangwu",,,{,,}}
};
Students min= stus[];
for (int i = ; i<; i++) {
if (min.age>stus[i].age) {
min = stus[i];
}
}
printf("%s\n",min.name);
Students max = stus[];
for (int i=; i<; i++) {
if (max.score<stus[i].score) {
max = stus[i];
}
}
printf("%s",max.name);
对上述学生成绩从大到小排序
for (int i=; i<; i++) {
for (int j=; j<-i; j++) {
if (stus[j].score>stus[j+].score) {
Students temp=stus[j];
stus[j]=stus[j+];
stus[j+]=temp;
}
}
}
for (int i=; i<; i++) {
printf("%s %d %.2f\n",stus[i].name,stus[i].age,stus[i].score);
}
排序写到函数内
typedef struct date{
int year;
int month;
int day;
} MyDate;
typedef struct students{
char name[];
int age;
float score;
MyDate birthday;
} Students;
void bobbleSart(Students s[],int count)
{
for (int i=; i<count-; i++) {
for (int j=; j<count--i; j++) {
if (s[j].score>s[j+].score) {
Students temp=s[j];
s[j]=s[j+];
s[j+]=temp;
}
}
}
}
总结
结构体是一种比较灵活的数据结构类型,并且与oc要学的类很相似
结构体和数组的互相嵌套可以实现比较复杂 的数据结构
iOS学习笔记---c语言学习第七天的更多相关文章
- IOS学习笔记07---C语言函数-printf函数
IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...
- IOS学习笔记06---C语言函数
IOS学习笔记06---C语言函数 -------------------------------------------- qq交流群:创梦技术交流群:251572072 ...
- [java学习笔记]java语言核心----面向对象之this关键字
一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理: 代表的是当前对象. this就是所在函数 ...
- [java学习笔记]java语言核心----面向对象之构造函数
1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用: 给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...
- Java学习笔记:语言基础
Java学习笔记:语言基础 2014-1-31 最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...
- 学习笔记:CentOS7学习之二十一: 条件测试语句和if流程控制语句的使用
目录 学习笔记:CentOS7学习之二十一: 条件测试语句和if流程控制语句的使用 21.1 read命令键盘读取变量的值 21.1.1 read常用见用法及参数 21.2 流程控制语句if 21.2 ...
- 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧
目录 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧 25.1 Shell中的色彩处理 25.2 awk基本应用 25.2.1 概念 25.2.2实例演示 25.3 awk ...
- 学习笔记:CentOS7学习之二十二: 结构化命令case和for、while循环
目录 学习笔记:CentOS7学习之二十二: 结构化命令case和for.while循环 22.1 流程控制语句:case 22.2 循环语句 22.1.2 for-do-done 22.3 whil ...
- 学习笔记:CentOS7学习之二十:shell脚本的基础
目录 学习笔记:CentOS7学习之二十:shell脚本的基础 20.1 shell 基本语法 20.1.1 什么是shell? 20.1.2 编程语言分类 20.1.3 什么是shell脚本 20. ...
随机推荐
- 如何删除 Ubuntu 上不再使用的旧内核
提问:过去我已经在我的Ubuntu上升级了几次内核.现在我想要删除这些旧的内核镜像来节省我的磁盘空间.如何用最简单的方法删除Ubuntu上先前版本的内核? 在Ubuntu上,有几个方法来升级内核.在U ...
- 10款优秀Vim插件帮你打造完美IDE
导读 如果你稍微写过一点代码,就能知道“集成开发环境”(IDE)是多么的便利.不管是Java.C还是Python,当IDE会帮你检查语法.后台编译,或者自动导入你需要的库时,写代码就变得容易许多.另外 ...
- C# 子窗体点击按钮产生的新子窗体放在父窗体里
情景展示: 父窗体Form1,左边是按钮,右边是panel(放置子窗体) 父窗体点击按钮,在panel显示第一个子窗体AA, AA有个按钮,点击按钮,是第二个子窗体ZZ, 怎样将AA的子窗体ZZ也显示 ...
- java jar
http://www.cnblogs.com/shirui/p/5270969.html Java之 将程序打包成jar包 准备材料: 1.java文件: Helloworld.java pack ...
- IT公司100题-18-圆圈中最后剩下的数字
问题描述: n个数字(下标为0, 1, …, n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(当前数字从1开始计数).当一个数字被删除后,从被删除数字的下一个数字开始计数,继续删除 ...
- SharePoint 2013 Nintex Workflow 工作流帮助(十一)
博客地址 http://blog.csdn.net/foxdave 工作流动作 27. Create item in another site(Libraries and lists分组) 该操作用于 ...
- python黑帽子源码
https://www.nostarch.com/download/BHP-Code.zip https://yunpan.cn/cPvLPWMTdWJRu 访问密码 4243
- kali linux karmetasploit配置【续】
Karmetasploit In Action https://www.offensive-security.com/metasploit-unleashed/karmetasploit-action ...
- oracle触发器如何使用2
触发器 是特定事件出现的时候,自动执行的代码块.类似于存储过程,但是用户不能直接调用他们.触发器是许多关系数据库系统都提供的一项技术.在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处 ...
- Tomcat容器运行struts2+spring+mybatis架构的java web应用程序简单分析
1.具体的环境为 MyEclipse 8.5以及自带的tomcat spring3.0.5 struts2.3.15.1 mybatis3.0.5 2.想弄明白的一些问题 tomcat集成spring ...