C/C++语言程序设计辅导资料十三# d1 ~- k: m. D5 }& q
一、主题:自定义数据类型二、学习时间:2020年6月22日-6月28日“不忘初心、牢记使命”主题理论学习:6 m: v: @1 X: v
担使命,就是要牢记我们党肩负的实现中华民族伟大复兴的历史使命,勇于担当负责,积极主动作为,用科学的理念、长远的眼光、务实的作风谋划事业;保持斗争精神,敢于直面风险挑战,知重负重、攻坚克难,以坚忍不拔的意志和无私无畏的勇气战胜前进道路上的一切艰难险阻;在实践历练中增长经验智慧,在经风雨、见世面中壮筋骨、长才干。
$ l. y) z- I0 K: D0 D摘选自《在“不忘初心、牢记使命”主题教育工作会议上的讲话》三、知识脉络:! ^+ n7 o2 @* d& R1 R7 o# T
第9章 自定义数据类型
2 W, _' p' k8 y/ x0 j# d, w9.0 导学* l, p/ w8 j0 n# y6 M1 r
9.1 定义结构体! i# Z. q ?. c8 D6 f2 S
9.2 应用结构体四、学习要求:
+ {) v% c; L. J/ r理解结构体, S1 A; z" e" d& f+ h
掌握声明结构体的方法
$ X. ~ h, R" s6 ^/ [' d" Z掌握结构体变量的定义、初始化及使用方法
2 r& c a5 U, N2 ?+ d4 V/ r掌握结构体数组的定义、初始化及使用方法$ {' S* D8 ]' M4 C9 U
掌握结构体指针的定义、初始化及使用方法
0 N% ~1 z+ Z4 w! E掌握声明嵌套结构体的方法
7 K% f" Q9 `6 H8 T/ e% S$ o% B. f理解向函数传递结构体变量及数组的方法
- E1 t) M; @# _了解链表的特点五、重点难点:# M/ _( O4 h r2 B# k* I
结构体的定义6 d* ]/ j7 O6 ]) p" U' l8 r* z* H
结构体变量5 ]# [9 n* u! C: i5 T8 A, A3 H
结构体数组: I' ?5 Z7 s/ M
结构体指针
) o+ K S5 ]( t& k8 P* {, R结构体嵌套
, u, U4 n, |6 m函数与结构体六、主要内容:
+ T1 r# @7 N2 |/ ^, b1 Y& e1.理解结构体 struct9 C4 S$ [6 C: W. L
用户自定义的新数据类型
; {3 Q B4 H6 l6 I2 Z' p6 A4 {4 y在结构体中可以包含若干个不同数据类型和不同意义的数据项,即若干数据项的一个聚合。
$ K g/ D& E1 ?) z3 t6 w2.定义结构体类型7 p o6 r( p: X2 y3 `
定义一个结构体类型的一般形式为:; h7 ]. v0 [5 E, I" |1 {6 A
struct 结构体名8 D( H0 t/ m4 E/ B \% C2 R" j
{/ O4 S# @3 q# p, M* L. q5 u; s
数据类型 成员名1;8 j) l( m* J5 P" y; x9 W
数据类型 成员名2;' P6 [) \5 y. F1 ?& ?* N
。 。 。
7 V f' p, B2 B& b6 l) w* _ 数据类型 成员名n;
# Q5 l9 W. [7 M} ;
* u. C7 P. R% o. T: ^3 Z结构体声明并不分配空间!+ p7 D1 C3 Q! |) I% L' w
结构体类型声明是在说明一种数据类型。3.结构体变量
3 p1 D% t# T: y2 j, p" G: o先定义结构体类型,再定义变量名,在定义类型的同时定义变量。
, t, H4 \: m1 \2 C$ c访问方式:结构体变量名 . 成员名
4 j# s/ M( q- q7 t) l可以同类型的结构体变量进行整体的赋值运算,不能对结构体变量进行整体输入/输出/比较运算! 4.结构体数组6 s/ c- x0 |/ i; }/ I! o3 w
具有相同结构体类型的结构体变量组成的数组。0 E. h1 Y2 p! J+ u/ k6 F) b
结构体数组的每个元素都是结构体类型的数据,它们都分别包括各个成员项。0 a7 ?% e9 y4 P+ W0 j, l
struct student stu[3];
2 Y2 z/ z6 D8 ^. Q& L u* j
& l5 y* z8 V# B7 ]结构中可以包含其他结构作为成员
* c. B* L, _( W3 F* l4 I" d: j/ w; y* }( `4 ^! @8 b. X% \* v3 {9 x
struct Date { int year , month , day ;}
# Q! X" u+ O4 U% xstruct Student2 P( |8 w$ l7 ^/ [7 e6 \
{ int iNum;
2 z) U- G4 b' E0 U3 B) P) I char cArrName[20];
2 m4 i' A0 ^; G Q, c char cSex;% u _/ g7 |% k' @# Z* m
struct Date birthday;
" ]" B% Z: H) l7 n8 D};5.结构体指针6 z5 N8 j: T8 |$ ^+ Y3 w
指针变量的值是结构体变量的起始地址,即第一个成员的地址。7 S" D$ P/ v( ^% v8 ?1 _" h* \& o. @9 K
定义与初始化7 b% m, L/ j8 p
struct 结构体名 *结构指针名;
; X2 I3 t$ d- J- q6 vstruct Student *pstu = &stu ;
! B- S u! `% U5 v( _5 `结构体指针的使用
# t f, @ k3 u# S! n结构体指针名 -> 成员名
. Z- R1 o% C! I% G& t% q' l(*结构体指针名). 成员名
9 D0 m3 D9 b3 W结构体数组指针:指向结构体数组或数组元素的指针4 V( T1 H) ]; A8 \' W/ O
结构成员不能是自身的结构变量,但可用一个指向自身结构的指针 作为成员。七、习题:
/ S$ Y Q3 s0 Y7 ]. {/ L1.在说明一个结构体变量时系统分配给它的存储空间是( )。
. i1 i$ y9 _' }' ?3 g) mA.该结构体中第一个成员所需的存储空间/ V8 t0 I2 E0 H& Z0 \* A, y) ]& z6 Y
B.该结构体中最后一个成员所需的存储空间9 p9 {! U1 F4 v
C.该结构体中占用最大存储空间的成员所需的存储空间! l1 N; \1 N! S( R E
D.该结构体中所有成员所需存储空间的总和。
) m( e3 ] x& J, `; q) h答案:D2.设有以下说明语句,则以下叙述不正确的是( ) 。
6 V+ X: V5 s) o8 g9 x ystruct stu
. r! {2 U, ?9 r$ p* Q+ M o: T Z; C6 Y{int a;float b;}stutype;
9 X9 T1 K* @) V( A4 X; A fA.struct 是结构体类型的关键字* @4 F, W! C9 x
B.struct stu 是用户定义的结构体类型
* l2 V, L o* g/ s& A2 ]C.stutype 是用户定义的结构体类型名
4 C: m& I2 p! o( B6 sD.a 和 b 都是结构体成员名- x* f2 N+ G1 c$ A0 a+ v( t
答案:C3.以下对结构体变量stu1中成员age的合法引用是( )。
' Z! |- b* ]9 H/ C$ r#include5 r9 [- }# Z; s
struct student$ d9 [0 V( B* x6 \- T
{- P2 X: m, j) [* u$ U0 [
int age;- f; B. ~/ [. t7 j8 X8 f
int num;
5 d* x, D/ D/ V0 \( e3 f}stu1,*p;
3 t9 Z: w- F2 D9 u% _, [) ^( Rp=&stu1;
$ u* ^0 L8 o3 J1 S/ \ g$ Q" K/ L" NA.stu1->age% i/ [4 u4 ?! l, p3 U. z! E0 ?
B.student.age
; J0 a3 n$ }7 {9 L' u" XC.p->age4 Q* I8 I- _; |) R2 g
D.p.age
% N) _9 | s: \答案:C4.有如下定义:
6 y9 W: @- o' K5 X& q% _6 mStruct date
% |& }# n8 A. V6 v; V( _{
9 B k" U# Z, d4 C! \) F int year,month,day;
: S u3 L' Q* K( W};
~, {* p1 _' t' H0 H; uStruct worklist
" w3 C$ }# C$ O5 B1 m. m{/ L% z$ |* e! q1 ^/ N' w
Char name[20];
% \( r$ e6 w0 Q) |) rChar sex;
$ [$ f: ^" A& v AStruct date birthday;
" q o. ^" o' u# _}person;/ @( N0 E) E: N4 Q7 ?
对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是( ) 。7 R) g6 |; k/ a, \ V
A.worklist .birthday.year=1978
! c5 o* s6 C2 [ R0 y* q" t7 {B.birthday.year=1978
2 y3 ?. a% o, g9 X" qC.person.birthday.year=1958" t6 j9 @) b5 s6 [; T
D.person.year=1958
3 u( a# v. |8 ^答案:C5.以下程序运行的结果是( ) 。
4 X/ S, A/ a6 A( W1 r. f/ m3 p9 M#include) y" ?2 r3 ]5 A+ v( w( l
struct date. q( m# S/ {9 k1 y6 f6 F
{ int year , month , day ;
S7 b' c9 M- E } ;
5 Q" ?9 F! c8 b* j& {, jmain()# M1 R6 e" |) N j
{ 5 n% C5 D( V @% F' _7 _ m
printf(“%d\n”,sizeof(struct date));Q1 A' g% D" R% Z9 y
}
2 J8 Z, {3 M- X+ PA.6
( B+ K5 u, ?. R# [6 vB.8' t; b$ _( [) _) y7 a/ e
C.10+ d* H6 ~8 f% U2 [+ e
D.12
- ?6 c1 m# r- k9 S. {$ x, w3 g" o1 `答案:D6.在32位系统中,对于时间结构体
7 g q2 F- Y0 W* d: p7 R7 O! E struct date
$ m! f" r1 Y' y3 T4 \ { int year , month , day ;
9 H M$ w* C/ T: s- e char week[5];
/ P% S- G+ X0 O( q/ _0 L% ^" | } 2 ?; k4 f) V8 X) k$ _, }; C
则执行 printf(“%d\n”,sizeof(struct date))的输出结果为( ) 。 + m7 {* S' c. {% c+ ~- D& |& y+ \, G
A.12/ n0 k6 ]8 L6 |( Z1 M
B.17/ I/ i% w# H! @) z" s/ L
C.182 z9 g* j5 Q$ @3 O' V
D.20
& H/ x2 w1 x1 I- Z5 V答案:D7.设有以下语句:
6 I: Q* R) t1 t7 t Q' U struct st
7 t. X: `5 h2 H2 I9 a8 S/ |- i! P{ int n ;+ P" ^4 t' k j- `, y
char name[10]
8 R* k% W |) ]6 P } ;
* H. B u8 Y& S' u v struct st a[3]={ 5 , “li” , 7 , “wang” , 9 ,”zhao”} , *p ;
* G% f0 W: t8 o2 k p= a;: V$ V- Y% a- s
则以下表达式的值为6的是( ) 。
$ {' f$ o$ d/ \0 r3 aA.p++ ->n
0 P# F6 a# `1 CB.p->n++& T V" Z% S3 g! r
C.(*p) . n++
$ Z! Y/ R4 N5 w7 Y( |: SD.++p ->n
" G% F& `, i' {. i4 P% _* P. n+ g答案:D8.设有以下语句,则输出结果是( ) 。6 t; B" Q6 x" W" b d" N) Z6 Q
struct List
3 E# {$ O6 b) T) H; Z3 V5 W- K{int data ;
& q* e7 ^. j$ E& m( E( Vstruct List *next;
4 u8 r0 S: b% k' [8 X, m};
0 x" w& n: ]$ l% a- Jint main{/ L1 V. e7 h7 D" F, A
struct List a[3]={1,&a[1],2,&a[2],3,&a[0]}, * p;: P* E/ h5 y! G( h
p=&a[1] ;
4 X* l7 N$ O/ \3 Q" ?) y( Xprintf("%d\n",--p->data);' n: ^) E Q- L7 t: t& f" a" c& j
printf("%d\n",p->next->data);
@ x1 c9 \8 s. kprintf("%d\n",p--->data);p4 z) `6 m$ U5 y
}
( R$ T2 ?) d, |: w" M) rA.1 2 1
$ d5 ?: T+ p- l/ g7 q7 ]) [3 IB.3 1 1
0 T# ^9 P' _ O8 [/ T0 D( U; ~& t5 F! UC.1 3 2
- U9 q2 a/ t8 M8 D9 S1 K0 V7 n! ^D.2 1 32 w* @: d, L5 p
答案:A9.下若有以下语句,则下面表达式的值为( ) 。
0 `1 E, w7 q2 _/ U3 d% Pstruct complx{int x; int y;}; r, [6 v1 F( e T8 J6 Z1 D
cnum[2]={1,3,2,7};
* H4 i+ Z* ^+ R3 e6 q3 ^cnum[0].y/cnum[0].x*cnum[1].x;
% E, U' B+ l) R8 q2 m1 fA.0
4 f6 {, N0 W- \$ W+ _: n, YB.18 p2 _6 T7 T+ w# G- b6 d
C.3% n/ a$ S" _* W- u$ U7 ]
D.6. E/ A, C' h+ _( U2 |; t
答案:D10.线性表采用链式存储结构时,要求内存中可用存储单元的地址( )。) ^$ n* d2 c6 |8 v4 I# e R) n9 Q# {, I
A.必须是连续的: V" |# ]7 W8 x& C$ V* |% Y
B.部分地址必须是连续的
5 Y$ c4 g* W' r8 _! L0 g bC.一定是不连续的' B5 ?6 L% F" |7 V% h& M; A6 M0 s
D.连续或不连续都可以。
, X" I4 z5 m; t5 F2 E答案:D大连理工作业无忧答案网整理
0 K2 _; g6 R! N/ X