一、选择题(共30分,每小题2分)题目1假定有“structBOOK{chartitle[40];floatprice;};structBOOKbook;”,则不正确的语句为()。选择一项:a.structBOOK*x=malloc(book);b.structBOOKx={C++Programming,27.0};c.structBOOK*x=malloc(sizeof(structBOOK));d.structBOOK*x=&book;正确答案是:structBOOK*x=malloc(book);题目2假定有“structBOOK{chartitle[40];floatprice;}book;”,则正确的语句为()。选择一项:a.structBOOKx=&book;b.structBOOK*x=&book;c.structBOOKx=calloc(BOOK);d.structBOOK*x=BOOK;正确答案是:structBOOK*x=&book;题目3在结构类型的定义中,不同数据成员的定义项之间采用的分隔符是()。选择一项:a.句点b.冒号c.分号d.逗号正确答案是:分号题目4假定一个结构类型的定义为“structA{inta,b;doublec;};”,则该类型的长度为()。选择一项:a.8b.10c.12d.16正确答案是:16题目5假定一个结构类型的定义为“structD{inta;D*next;};”,则该类型的长度为()。选择一项:a.4b.8c.12d.16正确答案是:8题目6假定要访问一个结构指针变量x中的数据成员a,则表示方法为()。选择一项:a.x.ab.x-ac.x(a)d.x{a}正确答案是:x-a题目7与结构成员访问表达式x.name等价的表达式为()。选择一项:a.x-nameb.&x-namec.(&x)-named.(*x)-name正确答案是:(&x)-name题目8假定一个链表中结点的结构类型为“structAA{intdata,structAA*next;};”,则next数据成员的类型为()。选择一项:a.structAAb.structAA*c.AAd.int正确答案是:structAA*题目9假定一个链表的表头指针为f,结点中包含有data和next域,则向该链表的表头插入一个地址为p的结点时,应执行的操作为()。选择一项:a.p-next=fb.p-next=f和f=pc.f=p-nextd.f-next=p和f=p正确答案是:p-next=f和f=p题目10标准输入设备键盘的文件流标识符是()。选择一项:a.stdinb.stdoutc.stderrd.stdio正确答案是:stdin题目11表示文件结束符的符号常量为()。选择一项:a.eofb.Eofc.EOFd.feof正确答案是:EOF题目12C语言中打开一个数据文件的系统函数为()。选择一项:a.fgetc()b.fputc()c.fclose()d.fopen()正确答案是:fopen()题目13从一个数据文件中读入以换行符结束的一行字符串的系统函数为()。选择一项:a.gets()b.fgets()c.getc()d.fgetc()正确答案是:fgets()题目14向一个二进制文件中写入信息的函数fwrite()带有的参数个数为()。选择一项:a.1b.2c.3d.4正确答案是:4题目15在C语言中,为只写操作打开一个文本文件的方式为()。选择一项:a.ab.r+c.rd.w正确答案是:w二、判断题(共40分,每小题2分。叙述正确则回答“是”,否则回答“否”)题目16在结构类型的定义中,其中的数据成员可以是本身类型的直接对象。选择一项:对错正确的答案是“错”。题目17在结构类型的定义中,允许出现结构类型不完整的超前定义。选择一项:对错正确的答案是“对”。题目18定义结构类型的变量时,不能够同时进行初始化。选择一项:对错正确的答案是“错”。题目19使用一个结构类型时,必须一起使用关键字struct和类型标识符。选择一项:对错正确的答案是“对”。题目20假定一个结构类型的定义为“structA{inta,b;A*c;};”,则该类型的长度为12。选择一项:对错正确的答案是“对”。题目21假定一个结构类型的定义为“structB{inta[5];char*b;};”,则该类型的长度为20。选择一项:对错正确的答案是“错”。题目22执行calloc(n,8)函数调用时,将动态分配得到8*n个字节的存储空间。选择一项:对错正确的答案是“对”。题目23执行malloc(sizeof(structBB))函数调用时,得到的动态存储空间能够保存具有structBB结构类型的一个对象。选择一项:对错正确的答案是“对”。题目24假定要访问一个结构对象x中的由a指针成员所指向的对象,则表示方法为x.a。选择一项:对错正确的答案是“错”。题目25假定要访问一个结构指针p所指对象中的b指针成员所指的对象,则表示方法为p-b。选择一项:对错正确的答案是“错”。题目26与结构成员访问表达式(*fp).score等价的表达式是fp-score。选择一项:对错正确的答案是“对”。题目27在C语言中,对二进制文件的所有不同打开方式共有6种。选择一项:对错正确的答案是“对”。题目28C语言中的标准输入和输出设备文件都属于字符文件。选择一项:对错正确的答案是“对”。题目29在一个磁盘数据文件的文件名中,文件主名和扩展名都是必须的,不可省略。选择一项:对错正确的答案是“错”。题目30在数据文件打开方式字符串中,字符r、w和a具有确定的含义,分别代表读、写和追加方式。选择一项:对错正确的答案是“对”。题目31一个磁盘数据文件的文件名由文件主名和扩展名所组成,其中间用圆点分开。选择一项:对错正确的答案是“对”。题目32C语言系统中提供一个用来描述文件属性的类型标识符为FILE。选择一项:对错正确的答案是“对”。题目33每次只能向文本文件中写入一个字符,不能一次写入一个字符串。选择一项:对错正确的答案是“错”。题目34对二进制文件进行读和写操作将使用相同的系统函数。选择一项:对错正确的答案是“错”。题目35在C语言中,系统函数fseek()用来移动数据文件中的文件位置指针。选择一项:对错正确的答案是“对”。三、写出下列每个程序运行后的输出结果(共15分,每小题5分)题目36#includestdio.hstructWorker{charname[15];//姓名intage;//年龄floatpay;//工资};voidmain(){structWorkerx={wanghua,52,4300};structWorkery,*p;y=x;p=&x;printf(%s%d%6.2f\n,x.name,y.age,p-pay);}wanghua524300题目37#includestdio.h#includestring.hstructWorker{charname[15];//姓名intage;//年龄floatpay;//工资};voidmain(){structWorkerx;char*t=liouting;intd=38;floatf=3493;strcpy(x.name,t);x.age=d;x.pay=f;printf(%s%d%6.0f\n,x.name,x.age,x.pay);}liouting392493题目38#includestdio.hstructWorker{charname[15];intage;floatpay;};intLess(structWorkerr1,structWorkerr2){if(r1.ager2.age)return1;elsereturn0;}voidmain(){structWorkera[4]={{abc,25,2420},{def,58,4638},{ghi,49,4260},{jkl,36,3750}};structWorkerx=a[0];inti;for(i=1;i4;i++)if(Less(x,a[i]))x=a[i];printf(%s%d%6.0f\n,x.name,x.age,x.pay);}def584638四、写出下列每个函数的功能(共15分,每小题5分)题目39voidQA(structWorkera[],intn){inti;for(i=1;in;i++)scanf(%s%d%f,&a[i].name,&a[i].age,&a[i].pay);}假定结构类型structWorker的定义如下:structWorker{charname[15];intage;floatpay;};从键盘输入n个Worker类型的记录到一维数组a中。题目40intCount(structIntNode*f){//f为指向一个单链表的表头指针intc=0;while(f){c++;f=f-next;}returnc;}假定structIntNode的类型定义为:structIntNode{intdata;IntNode*next;};统计出以表头指针为f的链表中结点的个数。题目41voidxw1(char*fname){FILE*fout=fopen(fname,w);chara[20];printf(每个字符串长度小于20,字符串end作为结束标志\n);while(1){scanf(%s,a);if(strcmp(a,end)==0)break;fputs(a,fout);fputc('\n',fout);}fclose(fout);}把从键盘上输入的若干个字符串保存到由fname参数所指定的文本文件中。