C语言结构体部分._第1页
C语言结构体部分._第2页
免费预览已结束,剩余8页可下载查看

下载本文档

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

文档简介

1、C 语言结构体部分-知识点及试题结构体是一种重要的数据结构,在实践中有广泛的应用。计算机二级考试大纲 对结构体部分的要求为:(1 结构体类型数据的定义方法和引用方法。(2用指针和结 构体构成链表,单向链表的建立、输出、删除与插入。下面就这些基本知识点和有关试题进行总结和解析,希望对考试有所帮助。一、基础知识(1 结构体的定义struct 结构体名例如:struct student 成员列表 char n ame20;变量表;int age;char sex;stu1,stu2 ;注意:结构体定义完后,别忘了分号!也可这样定义:struct student stu1, stu2 ;结构体数组的定

2、义:struct student x10;(2 结构体成员的访问两种方式:直接访问。如:stu1. age用指针访问。先定义指向结构体的指针:struct stude nt *p;然后可以通过:(*p .成员变量 或 p-成员变量 来访问(3 关于单项链表先了解两个函数:内存分配函数 malloc如:int *p; p=(int * malloc (sizeof (int;分配一块整型大小 的内存空间。注意:malloc 无返回值,分配内存时要强制类型转换。内存释放函数 freefree (要释放内存的地址;有关链表具体的操作请参看谭浩强的C 程序设计(第二版11.7 节(p273重点了解基本

3、思想和相关算法,其实考试时的程序根本没有书上的难。在这里我要说,重点理解有关链表插入及删除时指针移动的先后顺序问题。注意指针的保存和归位。(既头指针的保存和链表遍历时指针的归位。这都是考试重点,相信我 没错的。二、典型试题及解析(1 以下程序运行的结果是_#include ” stdio.h ”mai n( struct date int year , month , day ; today ;printf( “n%d ,sizeof(struct date;A .6 B.8 C.10 D.12解析:本题考察了不同变量在内存中所占字节的位数。现总结如下(针对 TC2.0版本:char型变量占1

4、个字节;int型变量占2个字节;Io ng和float型变量占4个字节; double型变量占 8 个字节。本题定义了 3 个 int 型变量 所以选 A.这类计算占字节大小的题,通常和联合体结合起来考。请看下例:变量 a 所占内存字节数是 _union U char st4;int I ;long l ;struct A int c;union U u ; a ;答案应该是 6。注意:联合体分配内存时是按照所占内存最多的一类变量 的数 目分配的。而不是所有变量所占内存数量的和特别注意:实际编程中,在没有定义结构体类型变量之前,系统是不会给 结构体 的成员变量分配内存的。(2以下程序输出结果是

5、 _struct stu int x ;int *y; *P;int dt4= 10,20,30,40 ;struct stu a4=50 , &dtO , 60 , &dt1 , 70 , &dt2 , 80 , &dt3 ;mai n( P=a;printf(“d,” -x+p/语句 1printf(“d,”,-x+;p/ 语句 2printf(“” , +(*-y ; / 语句 3A.10,20,20 B.50,60,21 C.51 , 60,21 D 60,70,31解析:这类题考察了结构体成员变量的访问以及运算符的优先级。需要注 意的是“的优先级大于“

6、 +和 “ *的优先级。语句 1 中,先执行 p-x ,得到 50 后再+ ,得到结果 51语句 2 中,先执行(+P,指针移动后,取得成员变量 x 的值为 60语句 3 中先取得*p_y 的值,即 dt1的值然后+,最后得句一改为 printf( “%d ,p+;则结果变为:_答案是 50,70,31。好好想一下吧。下面有几道这类练习题1. 设有以下语句:struct st int n ;struct st *n ext;static struct st a3= 5 , &a1 , 7 , &a2 , 9 , O , *p ; p=&a0;则以下表达式的值为 6 的是

7、_A. p+ -n B. p-n+ C. (*p . n+ D. +p -n2. 设有以下语句,则下面表达式中的值为 3 的是_struct s int al ;struct s *a2 ;引申一下:将语,可以强化一下;static struct s a3=1 , & a1 , 2 , &a2 , 3,&a0 , * ptr ;ptr=&a1;A. ptr - a1+ B. pM+ -a1 C. *ptr - al D. +ptr -a13. 若有以下语句,则下面表达式的值为 1002 的是_struct stude nt int age ;int num ;s

8、truct student stu3=1001,20, 1002,19, 1003,21; struct student *p ;p=stu ;A. (p+ - num B. (p+-age C. (*p . num D. (*+ . age4. 若有以下说明和语句:struct stude nt int age ;int num ; std , *p ;p=&std ;则以下对结构体变量 std 中成员 age 的引用方式不正确的是 _A. std . age B. p - age C. (*p . age D. *p . age 以上 4 题的答案均为 D。else printf

9、(%ld not found , num ;(4 下面程序实现的功能是在已定义的的考生链表中删除指定考生号的结请按照程序功能填空。Struct stude nt *delete ( head , num ;Struct stude nt *head ;Long num ; struct stude nt *p1 , *p2;if ( head=NULL printf (“n”;goto end ;p2=head ;while (num != p2 - num &(_ 1_ p 仁 p2 ; p2= p2 -next ; if ( num= p2 -numif ( p2=head hea

10、d=p2 -n ext ;else_2_ ;printf (“ delete : % ld, num ;n=n T;占八end :return (head ;解析:链表的删除操作过程一般如下:1. 首先判断要删除结点的链表是否为空,若为空(head=NULL,则输出空表信 息。2. 设置两个指针变量 p1 和 p2 ,使 p2 指向头指针 head。3. 如果删除的结点是链表中的第一个结点时,则应将 p -n ext 赋值给 head。4. 如果要删除的不是第一个结点,则使 p2 指向下一个结点。操作时,先将 p2 赋 值给 p1,再将 p -next 赋值给 p2。这样依次使 p1 , p2

11、 后移并进行比较,直到找到要 删除的结点为止。5. 找到要删除的结点时,则要完成删除结点的操作,此时将 p2 -next 赋值给 p -next 即可。答案:1 p2 - next != NULL 2 p1 - next = p2 - next关于链表还有插入操作,输入和输出,请自己总结。链表部分主要理解操作过程思想,考试时,出的题不是很多,但有一定难 度。可以说二级考试的最高难度就是链表和指针的混合应用了。所以指针部分也要相当清楚才行。 总之,要考高分,这两部分一定要拿下!其实,这一章全称叫做 结构体与共用 体”但共用体部分出题不多(一般一两道,主要考内存分配问题,而且经常与结构体 混合考察。所以一 定要记住共用体的特点,这样应付考试就容易多了。else printf (%ld not found , num ;在最后,请看一道专门考”共

温馨提示

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

评论

0/150

提交评论