算法设计基础题目.ppt_第1页
算法设计基础题目.ppt_第2页
算法设计基础题目.ppt_第3页
算法设计基础题目.ppt_第4页
算法设计基础题目.ppt_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

,算,法,设,计,基,础,Introduction to the Design of Algorithm,计算机学院 软件工程教研室 张荣博,手机Email:,什么是结构?结构与数组有什么差别? 有几种结构的定义形式,它们之间有什么不同? 什么是结构的嵌套? 什么是结构变量和结构成员变量,如何引用结构成员变量? 结构变量如何作为函数参数使用? 什么是结构数组,如何定义和使用结构数组?,2,第3讲 结构体,3,思考一个问题,在程序里表示一个学生的信息(姓名、年龄、性别、),怎么表示? 表示多个人呢? 如何用计算机程序实现下述表格的管理?,表1 某学校学生成绩管理表,数组的解决方法,4,int studentId30; /* 最多可以管理30个学生, 每个学生的学号用数组的下标表示*/ char studentName3010; char studentSex302; int timeOfEnter30; /*入学时间用int表示*/ int scoreComputer30; /*C语言课的成绩*/ int scoreEnglish30; /*英语课的成绩*/ int scoreMath30; /*高等数学课的成绩*/ int scorePhysics30 ; /*大学物理课的成绩*/,学号: 姓名: 性别: 入学时间: C语言成绩: 英语成绩: 数学成绩: 物理成绩:,数组赋值,5,int studentId30 = 1,2,3,4,5,6; char studentName3010 = “令狐冲“,“林平之“, “岳灵珊“,“任莹莹“; char studentSex302 = “男“,“男“,“女“,“女“; int timeOfEnter30 = 2012, 2012, 2012, 2012; int scoreComputer30 = 90,78,89,78; int scoreEnglish30 = 83,92,72,95; int scoreMath30 = 72,88,98,87; int scorePhysics 30 = 82,78,66,90;,数据内存的管理形式,6,缺点,分配内存不集中,寻址效率不高 对数组进行赋初值时,容易发生错位 结构显得比较零散,不容易管理,7,我们希望的内存分配图,8,结构体的解决方法,9,struct STUDENT int studentID; /*每个学生的序号*/ char studentName10;/*每个学生的姓名*/ char studentSex4; /*每个学生的性别*/ int timeOfEnter; /*每个学生的入学时间*/ int scoreComputer; /*每个学生的C语言成绩*/ int scoreEnglish; /*每个学生的大学英语成绩*/ int scoreMath; /*每个学生的高等数学成绩*/ int scorePhysics; /*每个学生的物理成绩*/ ;,struct STUDENT是一个类型 struct STUDENT students4; students0.studentName students0.Sex 它们都是变量,一般称为结构的成员变量,结构的概念与定义,10,struct Student int studentID ; char studentName10; char studentSex4 ; int timeOfEnter ; int scoreComputer; int scoreEnglish ; int scoreMath; int scorePhysics ; ;,定义结构体,是定义一种新的数据类型,不是声明变量。,通过结构体,把有内在联系的不同类型的数据统一成一个整体,使它们相互关联。,结构,又可以理解为变量的集合,所以可以单独使用其成员;故而,对各成员都要进行类型说明。,如何声明结构体变量?,11,方法一:先定义结构体类型再定义变量名 struct student int studentID ; char studentName10 ; char studentSex4 ; int timeOfEnter ; int scoreComputer; int scoreEnglish ; int scoreMath; int scorePhysics ; ; struct student student1, student2;,定义studet1和sudent2为 struct student类型变量,方法二:在定义类型的同时定义变量 struct student int studentID ; char studentName10 ; char studentSex4 ; int timeOfEnter ; int scoreComputer; int scoreEnglish ; int scoreMath; int scorePhysics ; student1 , student2 ;,12,一般形式是: struct 结构体名 成员列表 变量名列表;,13,方法三:直接定义结构类型变量. struct int studentID ; char studentName10 ; char studentSex4 ; int timeOfEnter ; int scoreComputer; int scoreEnglish ; int scoreMath; int scorePhysics ; student1 , student2 ;,此时,不出现结构体名。,结构体的嵌套定义,14,struct Date int year; int month; int day; ;,struct Studnet int studentID; char studentName 10; char studentSex4; Date timeOfEnter; . ;,在定义嵌套的结构类型时,必须先定义成员的结构类型,再定义主结构类型。,结构体类型变量的引用,15,引用形式为:结构体变量名 . 成员名,规则: 1. 不能将一个结构体变量作为一个整体进行赋值和输出;只能对其各个成员分别输出printf(“”,student1); printf(“ %d”, student1.studentID);,错!,正确!,16,2 .若成员本身又属一个结构体类型,只能对最低级的 成员进行赋值或存取以及运算。 如:student1. timeOfEnter .year,3. 对成员变量可以象普通变量一样进行各种运算,如: sum =student1. scoreEnglish + student2. scoreEnglish ; 4. 可以引用成员的地址,也可以引用结构体变量的地址,如 scanf(“%d”,输入student1.studnetID的值,输入student1.num的值,错!,例题,例题1:计算实发工资 在一个职工工资管理系统中,工资项目包括编号、姓名、基本工资、奖金、保险、实发工资。 输入一个正整数n,再输入n个职工的前5项信息,计算并输出每位职工的实发工资。 实发工资 = 基本工资+奖金保险。,17,#include struct employee int num; char name20; float jbgz, jj, bx, sfgz; ; int main(void) int i, n; struct employee e; printf(“请输入职工人数n: “); scanf(“%d“, ,18,请输入职工人数n: 1 请输入第1个职工的信息:102 Zhong 2200.5 800 85.2 编号:102 姓名:Zhong 实发工资:2915.30,结构变量做为函数参数,改写例1,要求使用结构变量作为函数参数。 定义一个用于计算实发工资的函数: float count_sfgz(struct employee m) return m.jbgz + m.jj - m.bx; 再将主函数main中的语句: e.sfgz = e.jbgz + e.jj - e.bx; 改为: e.sfgz = count_sfgz(e);,19,结构体数组,一个结构变量只能表示一个实体的信息,如果有许多相同类型的实体,就需要使用结构数组。 结构数组是结构与数组的结合,与普通数组的不同之处在于每个数组元素都是一个结构类型的数据,包括各个成员项。,20,结构数组元素,结构数组元素的成员引用 结构体数组名下标 . 结构体成员名 使用方法与同类型的变量完全相同 friends5.age = 26; strcpy( , “Zhang San“); friends4 = friends1;,21,结构数组排序,例3: 输入并保存10个学生的信息,计算并输出平均分,再按照从高分到低分的顺序输出他们的信息。,22,#include struct student int num; char name20;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论