第十八讲C语言高级编程结构与习题课.ppt
《第十八讲C语言高级编程结构与习题课.ppt》由会员分享,可在线阅读,更多相关《第十八讲C语言高级编程结构与习题课.ppt(32页珍藏版)》请在三一文库上搜索。
1、第十八讲 C语言高级编程 结构与习题课,北京大学信息学院,2,结构的概念,通常,一个学生的个人信息,包括:学号、姓名、性别、年龄、各门功课的成绩等数据,这些数据都与一个学生相关联,类型各不相同。如果将这些数据定义为各独立的简单变量: Number、Name、Sex、Age、Course1、Course2、 这样就难以反映它们之间的内在联系。应该把它们组织成一个组合项,把它们当作一个有机的整体。 这个组合项就是结构(Structure),3,结构类型及其定义,把多个紧密关联的变量(分量)顺序组织在一起,定义成一个新的复合数据类型结构类型 定义一个结构类型 struct 结构类型名 类型1 分量名
2、1; 类型2 分量名2; ; 结构分量的类型可以相同,也可不同 同一个结构内的分量名不可相同,struct point float x; float y; ;,4,结构类型变量的定义,结构类型只是定义了一种新的数据类型 系统并不为这个新类型分配内存空间。 可以使用新的结构类型来声明变量结构类型变量。 结构类型变量定义的两种形式: 用已定义的结构定义变量,例如: struct point point1; struct point point2; 定义结构的同时定义结构类型的变量,例如: struct city float x, y; int population; city1, city2; 系
3、统会为结构类型变量分配内存空间,5,结构类型变量中分量的访问,结构类型变量的值由其各个分量构成 对分量的访问一般通过“变量名.分量名”完成 结构赋值及访问的例子: float dx, dy; struct point float x, y; p1, p2, points2; p1.x = p1.y = 3.5f; p2.x = p2.y = 1.5f; dx = p1.x - p2.x; dy = p1.y - p2.y;,结构变量本身可以作为一个整体来使用 points0 = p1; points1 = p2;,6,结构类型中的分量,结构类型中分量的类型可以是任何类型 基本数据类型的分量 s
4、truct point float x, y; ; 其他类型的分量:结构类型、数组类型 分量的类型不能是未定义的结构类型 分量的类型不能是正在定义的结构类型,7,结构变量的内存布局,结构中各分量在内存中顺序存放 struct square struct point int x, y; p1, p2; sq1; sq1.p1.x = 10; sq1.p1.y = 20; sq1.p2.x = 100; sq1.p2.y = 200;,sq1.p1.x,sq1.p1.y,sq1.p2.x,sq1.p2.y,8,结构变量所占内存的大小,结构变量所占内存的大小并不完全等于于各分量所占字节数的总和 st
5、ruct char_frequency char c; int frequency; ; sizeof(strcut char_frequency)通常为8,而非5 这是编译器在编译时的一个特殊要求。,9,结构应用示例(1)救援,洪水淹没了很多房子,只有屋顶还是安全的。被困的人们都爬上了屋顶。现在救生船每次都从大本营出发,到各屋顶救人,救了人之后将人送回大本营。 救生船每次从大本营出发,以速度50米/分钟时向下一个屋顶,达到一个屋顶后,救下其上的所有人,每人上船1分钟,船原路返回,达到大本营,每人下船0.5分钟。 假设大本营与任意一个屋顶的连线不穿过其它屋顶。 输入:第一行是屋顶数n,其后n行
6、,每行是每个屋顶的坐标和人数 输出:第一行是所有人都到达大本营并登陆所用的时间,其后n行,每行是每个屋顶的坐标和人数,10,图中原点是大本营,每个点代表屋顶, 每个屋顶由其位置坐标和其上的人数表示。,11,程序示例: succor.cpp,12,结构应用示例(2)学生成绩统计,定义一个结构,包含学生的所有信息。 struct student int number; char name8; char sex; int age; float course8; ; struct student class1160;,13,单个变量、数组和结构,数组和结构:多个变量的集合 数组 通过数组可定义大量类型
7、相同的变量 数组元素通过“变量下标”形式访问 静态数组的大小(数组元素的个数)是预先确定的,即数组定义中数组个数必须是整数常量 结构 结构把一组密切相关的变量(类型可以不同)组织成一个整体 结构的分量通过“变量. 分量“形式访问,int a; char str100; scanf(“%d”, ,字符串与数值,从控制台输入字符串: scanf():不能带空格 gets():可以有空格 在一个程序中,尽量只使用一种输入函数。当既要输入有空格的字符串,又要输入数值时,应避免使用以下方式:,14,那该怎么办呢?,字符串与数值,在输入数值时也使用gets(),得到表示数值的字符串,再将该字符串转换成数值
8、。 int atoi(char *str):将字符串转换成整数 double atof(char *str):将字符串转换成浮点数,15,#include ,字符串与数值,16,#include #include #include int main() char s100; double x; int i; gets(s); /* Test of atof */ x = atof( s ); printf( “atof test: ASCII string: %s float: %lfn“, s, x ); gets(s); /* Test of atoi */ i = atoi( s );
9、printf( “atoi test: ASCII string: %s integer: %dn“, s, i ); return 0; ,小明的药物动力学名词词典,17,小明的药物动力学名词词典,回顾排序:排序的基本思想,18,对数组 int szLEN进行排序, 可以分为 LEN 个步骤进行。 第 k 步:把第 k 大的数放在变量 szLEN-k 中; (K=1, 2, 3, 4, , LEN-1, LEN),小明的药物动力学名词词典,回顾排序:冒泡排序,19,int e; for(int k = 1 ; k szi+1) e = szi+1; szi+1 = szi; szi = e;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第十八 语言 高级 编程 结构 习题
链接地址:https://www.31doc.com/p-2536194.html