31-结构体变量定义与输入输出.doc_第1页
31-结构体变量定义与输入输出.doc_第2页
31-结构体变量定义与输入输出.doc_第3页
31-结构体变量定义与输入输出.doc_第4页
31-结构体变量定义与输入输出.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

课 题结构体变量的输入、输出课 型讲练授课班级授课时数2教学目标1、掌握结构体类型的说明、结构体变量(数组)的定义及初始化2、掌握结构体变量成员的引用和初始化教学重点结构体类型的说明、结构体变量的定义、结构体变量成员的引用教学难点结构体数组的定义与使用学情分析在此之前,学生已经学习了大部分的C语言知识,变量定义,数组等等,对于结构体这样一个数据类型尚属首次接触,但对其概念容易理解,对结构体类型数据的使用还会存在问题。教学效果教 后 记引入:前面我们已经学习了一种构造数据类型:数组,使用数组可以带来很多方便。但是数组要求被处理数据必须有相同的类型。日常工作中经常需要处理由不同数据类型组合起来的整体,对于这样的问题使用数组是不可能实现的,使用多个变量是可以描述,但这样做无法反映出同一事物的各个属性间的相互关系。为此,C语言提供了一种全新的构造数据类型结构体类型(或者称为结构类型)。如:新生入学登记表如下: 一个对象由多个数据描述学号姓名性别年龄住址总分011ZhuPing女19Suzhou498012LiMing男20Beijing518新课:针对上述问题可以用C语言提供的全新数据类型结构体来支持这种数据结构。结构体的定义及输入和输出一结构体类型定义 struct 结构类型名 类型 成员名1; 类型 成员名2; 类型 成员名3; 类型 成员名n; 例: struct student int no; char name20; char sex; char address50; int score;其中,struct是关键字,作为定义结构体类型的标志,后面紧跟的是结构体名,由用户自行定义,花括号内是结构体的成员说明表,用来说明该结构体有哪些成员及它们的数据类型。花括号外的分号不能省略,它表示一种结构体类型说明的终止。动手练习1:1、定义一个表示日期的结构体类型。(成员包括:年、月、日)2、定义一个银行存款帐户的结构体类型,假设存款单的必要项目为帐号、姓名、日期和金额等基本信息。二结构体变量的定义 (1)间接定义法先定义结构类型,再定义结构体变量 struct stu_info ; struct stu_info stu1,stu2;(2)直接定义法 struct stu_info stu1,stu2;(3)直接定义的简化struct stu1,stu2;注意点n 结构体类型,结构体变量是不同的两个概念;n 定义时先定义类型,再定义该类型的变量;n 赋值、存取或运算时只针对变量进行,不对类型进行;n 编译时,只对结构变量分配空间,对结构类型不分配空间;结构变量的存储空间是各成员类型占用存储空间的总和;三结构体变量的引用和初始化1、引用结构体变量的成员项。对结构体变量的使用,一般情况下不把它作为一个整体参加数据处理,而是用结构体的各个成员项来参加各种运算和操作。引用结构体变量中的成员项的一般形式为: 结构体变量名.成员项名 例如,将日期2011年5月28日赋给struct date型变量Date可表示成: Date.year=2011; Date.month=5; Date.day=28;如果一个结构体成员本身又是一个结构体类型变量,则要通过两个“.”运算符来访问该结构成员的结构成员。下面例题中用到的zhang.Date.year、zhang.Date.month、zhang.Date.day就是这种情况。例1:下面给出一个应用结构体变量的完整例子struct date /*定义一个表示日期的结构体类型*/int year; int month; int day;struct account /*定义一个客户的基本信息的结构体类型*/long id;char name20; struct date Date; float money;#include “stdio.h”main()struct account zhang,wang; /*用赋值语句给结构体变量zhang的各个成员项赋值*/zhang.id=1234567;=“ zhang Hong”;zhang.Date.year=2002;zhang.Date.month=10;zhang.Date.day=19;zhang.money=21353.33;/*通过键盘输入结构体变量wang的各个成员项的值*/printf(“nThe wang id:”);scanf(“%ld”,&wang.id);printf(“nThe wang name:”);gets();printf(“nThe wang Date:”);scanf(“%d%d%d”,& wang.Date.year,&wang.Date.month,&wang.Date.day);printf(“nThe wang money:”);scanf(“%f”,&wang.money);printf(“n id name year month day money ”);printf(“n-”);printf(“n%ld%-20s%5d%5d%5d%10.2f”, zhang.id, , zhang.Date.year, zhang.Date.month, zhang.Date.day, zhang.money);printf(“n%ld%-20s%5d%5d%5d%10.2f”, wang.id, , wang.Date.year, wang.Date.month, wang.Date.day, wang.money);printf(“n-”);2、一个结构体变量作为一个整体来引用C语言允许两个相同类型的结构体变量之间相互赋值,这种结构体变量之间赋值的过程是一个结构体变量的成员项的值赋给另一个结构体变量的相应部分。如下面的赋值语句是合法的:wang=zhang;不允许用赋值语句将一组常量直接赋值给一个结构体变量。如下面的赋值语句是不合法的:wang=2345678,“Li Qiang Zhuang”,2003,5,1, 23456.98 ;3、结构体变量的初始化同其它数据类型一样,结构体类型变量在定义时也可以直接对其进行初始化。例如:在主程序中定义并直接初始化结构体变量。main()struct worker char *name; char *address; int num3; w1=“Li Hua”,“Bei Jing”,95,89,93; printf(“%s,%s,%d,%d,%d”,,w1.address,w1.num0,w1.num1,w1.num2);这种结构体变量的初始化形式,只需在结构体变量后面加上赋值运算符,把成员项的对应值用一对花括号括起来,放在赋值运算符后面即可。例2:假设为学生选课提供的2门课程信息分别存放在变量a和b中(信息包括课程编号、课程名称、学分、任课老师)。编写程序,输出这2门课程的的所有信息。算法:分析过程:(略)程序:#include stdio.h#includestring.hstruct course int num; char name20; int cre; char t20;void main() struct course a,b;a.num=1;strcpy(,电路);strcpy(a.t,张三);a.cre=2;b.num=2;strcpy(b .name,C语言);strcpy(b.t,李四);b.cre=4;printf(课程编号 课程名称 学分 教师n);printf(%6d%10s%8d%10sn,a.num,,a.cre,a.t);printf(%6d%10s%8d%10sn,b.num,,b.cre,b.t); 方法二:#include stdio.h#includestring.hstruct course int num; char name20; int cre; char t20;void main() struct course a= 1,电路,2,张三;struct course b= 2,C语言,4,李四;printf(课程编号 课程名称 学分 教师n);printf(%6d%10s%8d%10sn,a.num,,a.cre,a.t);printf(%6d%10s%8d%10sn,b.num,,b.cre,b.t); 例3:假设为学生选课提供的2门课程信息分别存放在变量a和b中(信息包括课程编号、课程名称、学分、任课老师)。编写程序,将两个变量中的内容交换。算法:程序:#include stdio.h#includestring.hstruct course int num; char name20; int cre; char t20;void main() struct course temp; struct course a= 1,电路,2,张三; struct course b= 2,C语言,4,李四;printf(课程编号 课程名称 学分 教师n);printf(%6d%10s%8d%10sn,a.num,,a.cre,a.t);printf(%6d%10s%8d%10sn,b.num,,b.cre,b.t); temp=a; a=b; b=temp; printf(交换后的内容n); printf(课程编号 课程名称 学分 教师n);printf(%6d%10s%8d%10sn,a.num,,a.cre,a.t);printf(%6d%10s%8d%10sn,b.num,,b.cre,b.t);从键盘上输入:#include stdio.h#includestring.hstruct course int num; char name20; int cre; char t20;void main() struct course a,b,temp;printf(课程编号 课程名称 学分 教师n);scanf(%6d%10s%8d%10sn,&a.num,&,&a.cre,&a.t);scanf(%6d%10s%8d%10sn,&b.num,&,&b.cre,&b.t); printf(课程编号 课程名称 学分 教师n);printf(%6d%10s%8d%10sn,a.num,,a.cre,a.t);printf(%6d%10s%8d%10

温馨提示

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

评论

0/150

提交评论