1、一、 选择题1. 假定有“struct BOOKchar title40;float price;struct BOOK *book;”,则不正确的语句为(A)。Astruct BOOK *x=malloc(book); Bstruct BOOK x=“C+ Programming”,27.0; Cstruct BOOK *x=malloc(sizeof(BOOK); Dstruct BOOK *x=&book;2. 假定有“struct BOOKchar title40;float price; book;”,则正确的语句为(B)。Astruct BOOK x=&book; Bstruct
2、BOOK *x=&book;Cstruct BOOK x=calloc(BOOK); Dstruct BOOK *x=BOOK;3表示文件结束的符号常量为(C)。Aeof BEof CEOF Dfeof4C语言中系统函数fopen()是(D)一个数据文件的函数。A读取 B写入 C关闭 D打开5从一个数据文件中读入以换行符结束的一行字符串的函数为(B)。Agets() Bfgets() Cgetc() Dfgetc()6向一个二进制文件写入信息的函数fwrite()带有(D)参数。A1 B2 C3 D4二、填空题1假定一个结构类型的定义为“struct Aint a,b;A*c;”,则该类型的大
3、小为_12_字节。2假定一个结构类型的定义为“struct Bint a5,char *b;”,则该类型的大小为_24_字节。3假定一个结构类型的定义为“struct Dint a;unionint b;double c;struct D* d2;”,则该类型的大小为_20理论值。用sizeof(D)得到的结果是 24,说明编译系统采用的结构成员对齐方式是8个字节_字节。4假定要动态分配一个类型为struct Worker的具有n个元素的数组,并由r指向这个动态数组,则使用语句的表达式为struct Worker* r=_(Worker*)malloc(n*sizeof(Worker);_。5
4、假定要访问一个结构x中的由a指针成员所指向的对象,则表示方法为_x.(*a)_。6假定要访问一个结构指针p所指向对象中的b指针成员所指的对象,则表示方法为_ *(p-b)_7和结构成员访问表达式(*fp).score等价的表达式是_fp-score_。三、写出下列每个程序运行后的输出结果1. #includestruct Workerchar name15; /姓名int age; /年龄float pay; /工资;void main()struct Worker x=wanghua,52,23.50;struct Worker y,*p;y=x;p=&x;printf(%s %d %6.2
5、fn,y.name,y.age,y.pay);printf(%s %d %6.2fn,p-name,p-age,p-pay);输出结果为:wanghua 52 23.50wanghua 52 23.50Press any key to continue2. #include#includestruct Workerchar name15; /姓名int age; /年龄float pay; /工资;void main()struct Worker x;char *t=louting;int d=38;float f=493;strcpy(x.name,t);x.age=d;x.pay=f;x.
6、age+;x.pay*=2;printf(%s %d %6.2fn,x.name,x.age,x.pay);输出结果为:louting 39 986.00Press any key to continue3. #include#includestruct Workerchar name15; /姓名int age; /年龄float pay; /工资;int Less(struct Worker r1,struct Worker r2)if(r1.ager2.age)return 1;else return 0;void main()struct Worker a4=abc,25,420,de
7、f,58,638,ghi,49,560,jkl,36,375;struct Worker x=a0;int i;for(i=1;i4;i+)if(Less(x,ai)x=ai;printf(%s %d %6.2fn,x.name,x.age,x.pay);输出结果为:def 58 638.00Press any key to continue四、写出下列每个函数的功能1. void QA(struct Worker a,int n)int i;for(i=0原错为1,数组是第一个元素下标应为0!;in;i+)scanf(%s %d %f,&ai.name,ai.age,ai.pay);假定结构
8、struct Worker的定义如下:#include#include#includestruct Workerchar name15; /姓名int age; /年龄float pay; /工资;函数功能为:输入struct Worker 类型的对象an的各个元素的值2. struct StrNode *QB(int n)StrNode *f,*p;if(n=0)return NULL;f=(StrNode*)VC+6.0不能将void *赋值给其它类型,必须强制转换malloc(sizeof(struct StrNode);scanf(%s,f-name);p=f;while(-n)p=p
9、-next=(StrNode*)malloc(sizeof(struct StrNode);scanf(%s,p-name);p-next=NULL;return f;假定结构struct StrNode的定义如下:struct StrNodechar name5;struct StrNode *next;函数功能为:建立一个具有n个结点,每个结点的类型是StrNode的链表3. struct IntNode* FindMax(struct IntNode *f)struct IntNode *p=f;if(!f)return NULL;f=f-next;while(f)if(f-data d
10、ata)p=f;f=f-next;return p;假定结构struct StrNode的定义如下:struct IntNodeint data;struct IntNode * next;函数功能为:在一个具有n个结点,每个结点的类型是IntNode的链表中寻找data值最大的结点4. int Count(struct IntNode *f)int c=0;while(f)c+;f=f-next;return c;假定结构struct StrNode的定义如下:struct IntNodeint data;struct IntNode * next;函数功能为:计算一个具有n个结点,每个结点
11、的类型是IntNode的链表的结点数5. struct IntNode* Input(int n)struct IntNode *f,*p;f=(IntNode*)malloc(sizeof(struct IntNode);if(n=0)return NULL;f-next=NULL;printf(从键盘输入 %d 个整数:,n);while(n-)scanf(%d,&(f-data);p=f;f=(IntNode*)malloc(sizeof(struct IntNode);f-next=p;return f-next;假定结构struct StrNode的定义如下:struct IntNo
12、deint data;struct IntNode * next;函数功能为:在类型为IntNode的链表后输入n个结点的数据6. #include#include#includevoid JA(char* fname)FILE* fout=fopen(fname,w);char a20;printf();while(1)scanf(%s,a);if(strcmp(a,end)=0)break;fputs(a,fout);fputc(n,fout);fclose(fout);void main()char *p=d:xxkxuxk1.txt;JA(p);函数功能为:在已经存在的d:xxk文件夹下(如不存在此文件夹程序运行会出错)打开xuxk1.txt文件,并向其中输入一系列长度小于20的字符串,直到输入字符串end结束。6 / 6