c语言机房题库南昌工程学院,南昌工程学院C语言程序设计基础课件第9讲结构体.ppt...

253b171540df25e1b84436cbe50dfc72.gif南昌工程学院C语言程序设计基础课件第9讲结构体.ppt

这些数据是相互相联系的 若独立定义很难反应出其内在联系 定义成数组而类型又不一致 因此C语言充许用户自已定义一种数据结构 称为结构体 structure 学号姓名性别年龄成绩地址10001xiaomingM1880beijing 第八章结构体 8 1结构体的概念 例 学校对学生建档案 要用到学号 姓名 性别 年龄 成绩 地址等数据 这些数据的类型不一样 例2 structstudent intnum charname 10 charsex intage floatscore charaddr 16 一 结构体类型的定义 struct结构体名 类型名成员1类型名成员2类型名成员3 考虑 1 结构体名 2 结构体类型 structstudent intnum charname 10 charsex intage floatscore charaddr 16 1 定义结构体类型 不是定义变量 只是说明类型的结构 类型说明不占内存空间 2 定义结构体类型可以省略结构体名 struct intnum charname 10 charsex intage floatscore charaddr 16 二 结构体类型变量的定义 1 定义了结构类型后定义变量 如 structstd charname 10 intnum floatscore structstdx y floatx y 用这种方法定义结构体变量时 不能省略结构体名 如 structstd charname 10 intnum floatscore x y 2 定义结构类型时 同时定义结构变量 2 构体变量student所占字节总数为 18字节 各成员所占字节总和 1 这种方法定义结构变量时 可以省结构体标识名 如 struct charname 10 intnum floatscore x y 如 structdate intmonth intday intyear structperson intnum charname 10 charsex intage structdatebirthday charaddr 16 3 成员也可以是一个结构体变量 例1有以下结构体定义不正确的是 A structstudentB struct intnum intnum floatage floatage std1 std1 C structD defineSTUDENTstructstu intnum STUDENTfloatage intnum student floatage structstudentstd1 std1 例2设有以下结构体描述不正确的是 structstu inta floatb st1 A struct是结构体的关键字B structstu是用户定义的结构体类型C st1是用户定义的结构体类型名D a和b是结构体成员名 对成员的引用为 结构变量名 成员名st1 numst1 namest1 agest1 birthday day 三 结构体成员的引用 注意 不能整体引用结构变量 只能对成员一个个引用 structstudent intnum charname 20 charsex charaddr 20 a1 1001 liming M beijing printf d a1 num printf s a1 name printf c a1 sex 四 结构体变量的初始化 定义结构体时赋值 scanf d structstudent intnum charname 20 charsex charaddr 20 a1 2 通过scanf语句赋值 3 结构体数组及始化 structstudent intnum charname 20 charsex charaddr 20 st1 3 结构化数组 表示有stu 0 stu 1 stu 2 三个结构体元素 structstudent intnum charname 20 charsex charaddr 20 st1 3 1001 liming M beijing 1002 hujun M hebei 1003 yeqing M jiangxi 3 结构体数组及始化 问 st1 1 sex st1 2 name stl 0 num st1 2 add M yeqing 1001 jiangxi 例以下程序输出结果是main structcmp intx inty cnum 2 1 3 2 7 printf d n cnum 0 y cnum 0 x cnum 1 x A 0B 1C 3D 6 选项中能打印出字母 M 的语句是structperson charname 9 intage structpersonclass 10 John 17 Paul 19 Mary 18 Adam 16 A printf c n class 3 name B printf c n class 3 name 1 C printf c n class 2 name 1 D printf c n class 2 name 0 structstudent intnum charname 20 charadd 20 structstudenta st 3 p 五 指向结构体类型数据的指针 structstudent intnum charname 20 charsex charaddr 20 a st 3 p structstudent intnum charname 20 charsex charaddr 20 a st 3 p p 因此引用一个结构体成员有以下三种方法 a numa sex p num p sexp nump sex 设有如下定义structss charname 10 intage charsex std 3 p std 下面各输入语句中错误的是A scanf d 若要使p指向data中的a域 正确的赋值语句是structsk inta floatb data int p A p D p data a 有以下程序程序运行后的输出结果是structSTU charnum 10 floatscore 3 main structSTUs 3 20021 90 95 85 20022 95 80 75 20023 100 95 90 p s inti floatsum 0 for i 0 iscore i printf 6 2f n sum A 260 00B 270 00C 280 00D 285 00 有以下程序程序运行后的输出结果为11的是structst intx int y pt inta 1 2 b 3 4 structstc 2 10 a 20 b pt c A pt yB pt xC pt xD pt x 例 unionstudent inti floatx charch s1 s2 p 例 unionstudent inti floatx charch unionstudents1 s2 p 联合体 共用体 联合体定义的一般形式与结构一样 其形式为 union联合体名 类型名1成员名1 类型名2成员名2 类型名n成员名n 变量名表 1 结构体变量所占字节数是其成员所占字节之和 联合体变量中所有成员共享存储区 联合体变量所占内存字节与其成员字节数最多的那个成员相等 2 由于联合体变量中所有成员共享存储区 因此变量中的所有成员的首地址相同 说明 3 变量在定义的同时只能用第一个成员的类型的值进行初始化 同时刻只有一个数据类型存在 若有以下说明和定义 以下叙述中错误的是uniondt inta charb doublec data A data的每个成员起始地址都相同B 变量data所占的内存字节数与成员c所占字节数相等C data a 5 printf f n data c 输出结果为5 000000D data可以作为函数的实参 有以下定义和语句 则sizeof a 的值是 1 而sizeof a share 的值是 2 structdate intday intmonth intyear union intshare1floatshare2 share a 用户typedef定义类型 两种方式都定义整型变量k 两种方式都定义了实型变量x y 例 typedefintINTEGER INTTEGERk 例 typedeffloatFL FLx y floatx y intk 为现有类型 另年定义新的类型名 其定义的一般形式为typedef类型名标识符 两种方法定义结构体变量a1a2 typedefstructstudent intx floaty chara 10 HH structstudenta1 a2 HHa1 a2 例1下面叙述中错误的是 A通过typedef增加新的类型Btypedef将已存在的类型用一个新的名字来代表Ctypedef定义新的类型名后 原有类型名仍有效Dtypedef为各种类型起别名 但不能为变量起别名 例2则下面叙述中正确的 typedefstructST longa intb charc 2 NEW A 说明形式非法B ST是一个结构体类型C NEW是结构体类型D NEW是结构体变量 将形参std所指结构体数组中年龄最大者的数据作为函数值返回typedefstruct charname 10 intage STD STDfun STDstd intn STDmax inti max 1 for i 1 i n i if max age 2 max std i returnmax main STDstd 5 aaa 17 bbb 16 ccc 18 ddd 17 eee 15 STDmax max fun std 5 printf s d 3 max age

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值