结构型、共用型和枚举型典型例题分析与解答
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
结构型、共用型和枚举型典型例题分析与解答
1 设有下列定义语句,则表达式“p->x「l」”的值是_____________;表达式“(*p).k”的值是
____________。
struct { int x[5];
int k;
} s={{1,2},3},*p=&s;
【分析】p是指向结构型变量s的结构型指针变量,所以“p->成员名”就是结构型变量s的成员。由于表达式中给出的成员是数组元素x[1],所以该表达式的值就是x[1]的值。从赋初值来看,这个数组元素的初值为2,所以第一个空白应该填写2。同样道理,*p就是p指向的结构型变量s,所以第二个表达式就是s.k,k是结构型变量S的成员,初值为3,所以第二个表达式的值为3。
【答案】2
3
2 设有下列定义语句,则下列表达式中能表示结构型xx的成员x的表达式是()
struct xx{ int x;};
struct yy { struct xx xxx;int yy;} xxyy;
① xxyy.x ② xxyy->x ③(&xxyy)->xxx.x ④xxx.x
【分析】分析备选答案①:xxyy是结构型yy的变量,其后跟“.成员”是正确的,但是这个成员必须是结构型yy的成员,而表达式中的“x”是结构型xx的成员,所以是错误的。分析备选答案②:xxyy是结构型变量,其后不能跟“->”,这样会造成语法错误。分析备选答案③:&xxyy是结构型变量xxyy的
地址,其后跟“->成员”是正确的,表示该结构型
的成员,这个成员是结构型对的成员xxx,而这个成员的数据类型又是另一个结构型xx,所以其后应该是“.xx的成员”,表达式中恰好是xx的成员x,所以这个表达式是正确的(注意,这是嵌套结构型成员的弓l用格式)。至于备选答案④:xxx是结构型成员,不能直接引用,前面必须有结构型变量或结构型数
组元素。
【答案】③
3 设有下列定义语句,则表达式“(*(p+1)).name[1]”的值是______________;表达式“(p+1)
-> score[1]”的值是_____________。
struct { long num;char name[10」;float score[3];
}s[2」={{101L,"zhao",{90,80,70}},{102L,"qian",{75,65,55}}},*p=s;【分析】指针变量 p是指向结构型数组 S的首地址,所以 p+ 1就是数组元素 s[1]的地址,因此,*(p + l)就是 s[1],这是一个结构型数组元素,其后跟“.name[1]”,则代表结构型成员,所以第一个空白处应该填写的是结构型成员name数组的元素name[1]的值,从赋初值的情况来看,这个值是字符‘i’。
再来分析第二个表达式, p+ l是结构型数
组s的元素s[1]的地址,在地址后面跟“->score[1]”也是代表结构型成员,因此第二个空白处填写的是结构型成员score数组的元素score[l]的值,这个值显然是65.0。
【答案】'i'
65.0
4 关于获得系统日期函数(getdate())和获得系统时间(gettime())的函数,下列说法中错误的是
()
①需要在程序的开头写上相关的包含命令
②如果需要通过getdate()函数获得系统日期,必须定义一个 struct date型的变量
③如果需要通过gettime()函数获得系统时间,必须定义一个 struct time型的变量和一个struct time
型的指针变量
④getdate()函数和gettime()函数均无返回值
【分析】分析备选答案①:显然是正确的说法,使用任何系统函数都要写上包含该函数的包含命令。分析备选答案②:因为调用getdat()函数时,需要一个能接受系统日期的结构型 struct date的变量,虽然该函数的参数是指向该种结构型的指针变量,但是我们可以用“&结构型变量名”作为实际参数,所以本答案的说法也是正确的。分析备选答案③:和备选答案②类似,从gettime()函数的调用要求来说,也需要一个能存放系统时间的 struct tine结构型的变量,虽然调用函数时需要的是指针变量,但是可以用“&结构型变量名”来调用,并不一定需要同时有结构型变量和结构型指针变量,所以该说法是错误的,符合题意。至于备选答案④:教材中明确指出,这两个系统函数均无返回值。
【答案】③
5 设有下列定义语句,则表达式“sizeof(union uu)”的值是___________;表达式“size-of((&uu1)
->x[5])”的值是_________________。
union uu { short x[10]; char s[10]; float x10;}uu1;
【分析】sizeof()函数的参数可以是数据类型符,也可以是已经定义的变量、数组元素等对象。该函数的返回值是测试对象所占用的内存字节数。对于第一个表达式来说,测试对象是共用型“union un”。对于共用型来说,所占用的字节数是共用型成员中占用字书数最多的成员所占用的字节数。共用型union uu 的三个成员占用的字节数分别为20、10、4,所以该表达式的值是20。第二个表达式测试的是共用型uu的变量uul的成员x数组元素x[5」所占用的字节数,这个成员的数据类型是短整型,所以每个数组元素占
用的字节数是2,即该表达式的值为2。
【答案】 20
2
6 设有下列定义语句:
enum { A=65,B=67, C=69}abc;
则关于循环语句“for(abc=A;abc<C;abc++);”的正确说法是()
①语法出错②死循环③循环次数是4 ④循环次数是2
【分析】由于A、B、C是枚举常量,所以可以用在循环语句中作为控制变量来控制循环。分析备选答案①:显然这个答案是错误的,上述循环语句的语法是正确的。注意循环体是一个空语句,这是允许的。分析备选答案②、③、④,关键是搞清楚这个循环到底执行多少次。分析这个问题时,有一个原则,即使用枚举型变量时,进行++运算是加上整数1,还是将定义枚举型时,枚举常量表中的后一个枚举常量值放到这