




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级(C语言)机试模拟试卷24(共9套)(共345题)国家二级(C语言)机试模拟试卷第1套一、选择题(本题共39题,每题1.0分,共39分。)1、设某二叉树的后序序列为CBA,中序序列为ABC,则该二叉树的前序序列为()。A、BCAB、CBAC、ABCD、CAB标准答案:C知识点解析:后序序列为CBA,中序序列为ABC,则说明,A为根结点,并且B和C均在A的右子树上;结点B和C中,后序序列为CB,中序序列为BC,则说明结点C在结点B的右子树上,根据分析可得,该二叉树的前序序列为ABC,答案选C。2、设一棵满二叉树共有15个结点,则在该满二叉树中的叶子结点数为()。A、7B、8C、9D、10标准答案:B知识点解析:在具有n个结点的满二叉树,其非叶子结点数为int(n/2),而叶子结点数等于总结点数减去非叶子结点数。本题n=15,故非叶子结点数等于int(15/2)=7,叶子结点数等于15-7=8。3、以下程序的输出结果是()。#includemain(){inta=4,b=3,c=2,d=1;printf("%d",aA、1B、3C、2D、4标准答案:A知识点解析:条件表达式的格式为:"a?b:c",它的功能是:当a为真时,表达式的值等于b的值;当a为假时,表达式的值等于c的值。因为条件运算符的结合方向为“自右向左”。因此,当表达式中嵌套使用条件表达式时,应先计算右边的条件表达式,再计算左边的条件表达式。题中应先计算“d4、以下数组定义中错误的是()。A、intx[2][3]={1,2,3,4,5,6};B、intx[][3]={0};C、intx[][3]={{1,2,3},{4,5,6}};D、intx[2][3]={{1,2},{3,4},{5,6}};标准答案:D知识点解析:D选项中x[2][3]定义的是一个两行三列的二维数组,而在给数组元素赋值时却赋成了三行,所以错误。5、有以下程序:#include<stdio.h>voidf(int*q){imi=0;for(;i<5;i++)(*q)++;}main(){inta[5]={1,2,3,4,5},i;f(a);for(i=0;i<5;i++)printf("%d,",a[i]);}程序运行后的输出结果是()。A、6,2,3,4,5,B、2,2,3,4,5,C、1,2,3,4,5,D、2,3,4,5,6,标准答案:A知识点解析:本题考查的是函数的地址调用,将数组名作为数组首地址进行传递,然后取首个数组元素值进行加1运算,循环5次。因此A选项正确。6、有以下程序:#include<stdio.h>voidfun(intn){staticintx[3]={1,2,3};intk;for(k=0;k<3;k++)x[k]+=x[k]-n;for(k=0;k<3;k++)printf("%d,",x[k]);}main(){fun(0);fun(1);}程序运行后的输出结果是()。A、1,2,3,0,2,4,B、2,4,6,3,7,11,C、2,4,6,1,3,5,D、1,2,3,4,5,6,标准答案:B知识点解析:第一次调用fun()函数,此时n=0,数组x是静态的,因此,只在第一次时初始化,由x[k]+=x[k]-n计算可知,x[]={2,4,6},第二次调用fun(),此时n=1,x[]={2,4,6},经计算得x[]={3,7,11},故输出结果为2,4,6,3,7,11,。7、以下叙述中不正确的是()。A、在不同的函数中可以使用相同的名字的变量B、函数中的形式参数是局部变量C、在一个函数内定义的变量只在本函数范围内有效D、在一个函数内的复合语句中定义的变量在本函数范围内有效标准答案:D知识点解析:此题考查的是变量的作用范围。选项D)中,在一个函数的复合语句中定义的变量是局部变量,只在定义此变量的复合语句内有效,并不是在整个函数体内都有效。8、判断char型变量c1是否为小写字母的正确表达式为()。A、’a’<=c1<=’z’B、(c1>=a)&&(c1<=z)C、(’a’>=c1||(’z’<=c1)D、(c1>=’a’)&&(c1<=’z’)标准答案:D知识点解析:C语言规定,字符常量在程序中要用单引号括起来。首先判断c1是否为小写字母的主要条件“c1>=’ap’和“c1<=’z’”是逻辑与关系,其次选项A的这种形式C语言中没有,所以选项D正确。9、下列合法的标识符是()。A、123B、#256C、a.55D、abhj1_2_3标准答案:D知识点解析:C语言规定,标识符是由字母、数字或下划线组成,并且它的第一个字符必须是字母或者下划线。“#”、“.”不允许出现在标识符中。10、有以下程序:#include<stdio.h>main(){intx;scanf("%d",&x):if(x<=3);elseif(x!=10)printf("%d\n",x);}程序运行时,输入的值在哪个范围才会有输出结果()。A、小于3的整数B、不等于10的整数C、大于3或等于10的整数D、大于3且不等10的整数标准答案:D知识点解析:根据代码可知如果x的值小于等于3,执行空语句,不进行打印操作。如果x的值大于3,再判断x的值是否不等于10,如果不等于10就打印x的值,所以选择D选项。11、以下不构成无限循环的语句或语句组是()。A、n=0;do{++n;}while(n<=0);B、n=0;while(1){n++;}C、n=10;while(n);{n--;}D、for(n=0,i=1;;i++)n+=i;标准答案:A知识点解析:选项A中do后面的语句只执行了一次便结束了循环;B选项中条件while(1)永远成立,所以是死循环;C选项中n的值为10,而循环体为空语句,所以while(n)永远为真,进入死循环;D选项中for语句第二个表达式为空,所以没有判别条件,进入死循环。12、有以下程序:#include<stdio.h>main(){inti,j,x=0;for(i=0;i<2;i++){x++:for(j=0;j<=3;j++){if(j%2)continue;x++;}x++;}printf("x=%d\n",x);}程序执行后的输出结果是()。A、x=4B、x=8C、x=6D、x=12标准答案:B知识点解析:coutinue的作用是跳出循环体中剩余的语句而进行下一次循环。第一次执行外循环i的值为0,执行x++,x的值变为1,第一次执行内层循环j的值为0,不满足if条件,执行x++,x的值变为2,第二次内循环j的值为1,if条件成立,跳出本次循环,第三次执行内循环j的值为2,不满足if条件,x的值变为3,第四次执行内循环j的值为3满足条件跳出本次内循环,x的值加1,即为4,第一次外循环结束。第二次执行外循环时,同理,i的值被加了,4次,变为8,所以选择B选项。13、如果进栈序列为A,B,C,D,则可能的出栈序列是()。A、C,A,D,BB、B,D,C,AC、C,D,A,BD、任意顺序标准答案:B知识点解析:栈的操作原则为后进先出。选项B中出栈顺序可按“A进,B进,B出,C进,D进,D出,C出,A出”实现。14、有以下程序:#include<stdio.h>main(){inta,b;for(a=0;a<3;a++){scanf("%d",&b);switch(b){default:printf("%d",++b);case1:printf("%d",++b);case2:printf("%d",++b);}}}执行时输入:123<回车>,则输出结果是()。A、233456B、234C、223444D、234344标准答案:A知识点解析:这是一个循环结构嵌套选择结构,按照外层循环,内层选择一步一步处理即可。本题重点注意,switch语句中并没有出现break语句,所以内层循环是不会跳出的。15、有以下程序#includemain(){inty=9;for(;y>0;y--)if(y%3==0)printf("%d",--y);}程序的运行结果是()。A、852B、963C、741D、875421标准答案:A知识点解析:该函数的逻辑是:若数组a中元素下标为偶数并且该元素也为偶数则该元素自加1,若元素下标为偶数并且该元素为奇数则该元素自减1,若该元素下标为奇数则设定该元素为0,所以结果输出为选项A)。16、有以下程序:#includemain(){inti,s=0,t[]={1,2,3,4,5,6,7,8,9};for(i=0;i<9;i+=2)s+=*(t+i);printf(“%d\n”,s);}程序执行后的输出结果是()。A、20B、25C、45D、36标准答案:B知识点解析:统计1~9九个数中的奇数和,此题考察指向数组的指针。C语言规定数组名代表数组的首地址,也就是第一个元素的地址。因此*(t+i)代表数组的第i+1个元素。程序运行的结果是1+3+5+7+9=25。17、软件生命周期中的活动不包括()。A、市场调研B、需求分析C、软件测试D、软件维护标准答案:A知识点解析:软件生命周期可以分为软件定义、软件开发与软件运行维护三个阶段。主要活动阶段是:可行性研究与计划阶段,需求分析,软件设计,软件实现,软件测试,运行和维护,所以选择A。18、若x=4,y=5,则x&y的结果是()。A、0B、4C、3D、5标准答案:B知识点解析:本题主要考查按位与运算的知识点。按位与是对两个运算量相应的位进行逻辑与,“&”的规则和逻辑与“&&”相同。x=4的二进制为00000100,y=5的二进制为00000101,x&y=00000100,转化为十进制即为4。19、有下列程序段:typedefstructNODE{intnum;structNODE*next;}OLD;下列叙述中正确的是()。A、以上的说明形式非法B、NODE是一个结构体类型C、OLD是一个结构体类型D、OLD是一个结构体变量标准答案:C知识点解析:C语言允许用typedef说明一种新类型名,其一般形式为:typedef类型名标识符。typedef语句的作用仅仅是使“标识符”来代表已存在的“类型名”,并未产生新的数据类型。原有类型名依然有效。此题中,用typedef定义了新的类型OLD结构,所以OLD为结构体类型。20、设数据元素的集合D={1,2,3,4,5},则满足下列关系R的数据结构中为线性结构的是()。A、R={(1,2),(3,4),(5,1)}B、R={(1,3),(4,1),(3,2),(5,4)}C、R={(1,2),(2,3),(4,5)}D、R={(1,3),(2,4),(3,5)}标准答案:B知识点解析:一个非空的数据结构如果满足以下两个条件:有且只有一个根结点;每一个结点最多有一个前件,也最多有一个后件,称为线性结构。A项中有两个根结点3和5,错误;B项根结点为5,之后的结点除最后一个结点外都只有一个前件和后件,正确;C项有两个根结点1和4,错误;D项有两个根结点1和2,错误。21、若变量已正确定义,则以下for循环():for(x=0,y=0;(y!=123)&&(x<4);x++);A、执行4次B、执行3次C、执行次数不确定D、执行123次标准答案:A知识点解析:循环判断语句为"(y!=123)&&(x<4)”,必须同时满足"y!=123"和"x<4"这两个表达式,循环才会继续。因此,当x=4时,循环终止,for循环共执行4次。22、有以下程序#include<stdio.h>main(){structSTU{charname[9];charsex;doublescore[2];};structSTUa={"Zhao",’m’,85.0,90.0},b={"Qian",’f’,95.0,92.0};b=a;printf("%s,%c,%2.0f,%2.0f\n",,b.sex,b.score[0],b.score[1]);}程序的运行结果是A、Qian,m,85,90B、Zhao,m,85,90C、Zhao,f,95,92D、Qian,f,95,92标准答案:B知识点解析:本题考查结构体初始化操作,本题中可以直接将结构体a赋值给b,所以输出的结果和a一样,选项B正确。23、有3个关系R、S和T如下:则由关系R和S得到关系T的操作是()。A、投影B、选择C、交D、差标准答案:D知识点解析:投影是指从关系模式中指定若干个属性组成新的关系。从关系中找出满足给定条件的元组的操作称为选择。这两种操作运算均是对单个关系进行,不是两个关系之间的运算,故A、B选项错误。交:R∩S结果是既属于R又属于S的记录组成的集合,R∩S得到一个元组,按照属性ABC的顺序是c32,故C选项错误。差:R—S结果是属于R但不属于s的记录组成的集合,R—S得到3个元组,按照属性ABc的顺序是a34、b21、ed2,故D选项正确。24、有三个关系表R、S和T,其内容如下:其中关系T由关系R和S通过某种操作得到,该操作为()。A、选择B、求差C、求交D、并标准答案:D知识点解析:关系T中包含了R和S中的所有元素,所以是并操作。25、有以下程序#includeintm1(intx,inty){returnx<=y?x:y;}intm2(intx,inty){returnx<=y?y:x;}intfun(inta,intb){returna+b;}main(){intx=2,y=3,z=1;printf("%d\n",fun(m1(x,y),m2(y,z)));}程序的运行结果是()。A、5B、6C、4D、3标准答案:A知识点解析:暂无解析26、对于以下函数声明voidfun(intarray[4],int*ptr);以下叙述中正确的是()。A、array,ptr都是指针变量B、调用fun函数时,实参的值将逐一复制给arrayC、调用fun函数时,array按值传送,ptr按地址传送D、array是数组,ptr是指针,它们的性质不同标准答案:A知识点解析:voidfun(intarmy[4],int*ptr);第一个参数虽然是数组类型,但是会退化为指针,并且形参数组的个数没有用。第二个参数是指针,因此实际上二个形参都是指针,传递的都是地址,而不是值。可知选项B、c、D错误。答案为A选项。27、有以下程序:#includemain(){inta[4][4]={{1,2,3,4},{1,6,5,9},{3,7,2,5},{4,2,4,l}},i,k,t;for(i=0;i<3;i++)for(k=i+1;k<4;k++)if(a[i][i]<a[k][k]){t=a[i][i];a[i][i]=a[k][k];a[k][k]=t;}for(i=0;i<4;i++)printf(’’%d,’’,a[0][i]);}程序运行后的输出结果是()。A、9,1,2,6B、6,2,3,4C、6,4,3,2D、9,3,4,6标准答案:B知识点解析:双重for循环和if条件语句结合实现对二维数组对角线上的元素[1,6,2,1]进行从大到小的排序,输出结果只是第一行的内容,所以结果是6,2,3,4。28、有以下程序:#neludemain(){inta=0,b=0,C=0,d=0;if(a=1)b=1;c=2;elsed=3;pfintf(’’%d,%d,%d,%d\n’’,a,b,c,d);}程序运行后的输出结果是()。A、1,1,2,0B、0,0,0,3C、编译有错D、0,1,2,0标准答案:C知识点解析:if语句只执行后面的一个语句或一个用大括号包括的程序段。本题中if语句中的条件若为真,则只执行b=1;这一条语句,后面的c=2是一个和if分支结构无关的语句,因此,再后面的else语句便成为一个独立的语句,因为前面没有if分支与其对应,因此会在编译过程中出错。如果改成if(a=1){b=1;c=2}elsed=3:则编译正确。29、若实体A和B是一对多的联系,实体B和C是一对一的联系,则实体A和C的联系是A、一对一B、一对多C、多对一D、多对多标准答案:B知识点解析:A和B为一对多的联系,则对于A中的每一个实体,B中有多个实体与之联系,而B与C为一对一联系,则对于B中的每一个实体,C中之多有一个实体与之联系,则可推出对于A中的每一个实体,C中有多个实体与联系,所以为一对多联系。30、下列叙述中正确的是A、有且只有一个根结点的数据结构一定是线性结构B、每一个结点最多有一个前件也最多有一个后件的数据结构一定是线性结构C、有且只有一个根结点的数据结构一定是非线性结构D、有且只有一个根结点的数据结构可能是线性结构,也可能是非线性结构标准答案:D知识点解析:一个非空的数据结构如果满足以下两个条件:有且只有一个根结点;每一个结点最多有一个前件,也最多有一个后件,称为线性结构,故A、B和C选项都错误;不同时满足以上两个条件的数据结构就称为非线性结构,其中树形结构只有一个根结点,D选项正确。31、为了对有序表进行对分查找,则要求有序表A、只能顺序存储B、只能链式存储C、可以顺序存储也可以链式存储D、任何存储方式标准答案:A知识点解析:二分法查找也称拆半查找,是一种高效的查找方法。能使用二分法查找的线性表必须满足两个条件:用顺序存储结构;线性表是有序表。A选项正确。32、以下对联合类型叙述正确的是()。A、可以对联合变量名直接赋值B、使用联合变量的目的是为了节省内存C、任何一个联合变量可以同时引用联合中的不同成员D、联合类型定义中不能同时出现结构类型的成员标准答案:B知识点解析:由于联合体是同一存储区域由不同类型的变量共事,所以不可以直接对联合体变量名进行赋值,且联合体中的空间在某一时刻只能保持莱一成员的数据;另外合体中可以出现结构类型的成员。33、需求分析阶段的任务是()。A、软件开发方法B、软件开发工具C、软件开发费用D、软件系统功能标准答案:D知识点解析:需求分析县软件定义时期的最后一个阶段,它的基本任务就是详细调查现实世界要处理的对象,充分了解原系统的工作概况,明确用户的各种需求,然后存这些基础上确定新系统的功能。34、设a,b,c是整型变量且均已赋值,则以下选项中错误的赋值语句是A、a=(b=3)=1;B、a=(b=2)+c;C、a=b=c+10;D、a=1+(b=c=2);标准答案:A知识点解析:赋值运算结合性为由右向左结合,赋值运算符左值为变量,右值为变量或常量,且左右两边数据类型相同才能实现赋值。A选项中,赋值运算(b=3)=1,左值为表达式,不是变量不能被赋值,A选项错误,所以选择A选项。B选项运算过程为,先赋值b=2,再计算b+c,将结果赋给a,是正确的赋值语句。C选项运算过程为,先计算c+10将结果赋给b,再将b赋给a,是正确的赋值语句。D选项运算过程为,先将2赋给c,再将c赋给b,然后计算1+b,将结果赋给a,是正确的赋值语句。35、下列叙述中正确的是A、所有数据结构必须有根结点B、所有数据结构必须有终端结点(即叶子结点)C、只有一个根结点,且只有一个叶子结点的数据结构一定是线性结构D、没有根结点或没有叶子结点的数据结构一定是非线性结构标准答案:D知识点解析:一个非空的数据结构如果满足以下两个条件:有且只有一个根结点;每一个结点最多有一个前件,也最多有一个后件,称为线性结构,在数据结构中习惯称为线性表,D选项正确。图是可能不包含根结点或叶子结点的数据结构,AB选项错误。数据结构中若有中间结点不满足只有一个前件或者后件条件,则不属于线性结构,C选项错误。36、若有定义语句:doublex,y,*px,*py;执行px=&x;py=&y;正确的输入语句是A、scanf("%lf%lf",x,y);B、scanf("%f%f"&x,&y);C、scanf("%f%f",x,y);D、scanf("%lf%le",px,py);标准答案:D知识点解析:%lf,%le是针对double的,如果仅用%f,输入的数据可能不能被完全接收,数据的精度可能不足。%f主要针对float类型的变量的输入,选项B错误。根据scanf(格式,变量地址),选择A,C错误。因此,选择D37、若有定义:charc;doubled;程序运行时输入:12<回车>,能把字符1输入给变量c、数值2输入给变量d的输入语句是A、scanf("%d%lf",&c,&d);B、scanf("%c%lf",&c,&d);C、scanf("%c%f",&c,&d);D、scanf("%d%f",&c,&d);标准答案:B知识点解析:%lf是针对double的,如果仅用%f,输入的数据可能没有被完全接收,数据的精度可能不足,选项C,D错误。%f主要针对float类型的变量的输入。%d主要针对整型数据的输入,%c主要针对字符类型的数据的输入,选项A错误。故答案为B选项38、有以下程序:#include<stdio.h>intfun(intx,inty){if(x!=y)return(y);elseretum((x+y)/2);}main(){inta=4,b=5,c=6;printf("%d\n",fun(2*a,fun(b,c)));}程序运行后的输出结果是()。A、3B、6C、8D、12标准答案:B知识点解析:fun(b,c)即fun(5,6),5!=6,所以返回6;fun(2*a,6)即fun(8,6),8!=6,所以返回6。39、有以下程序:#include<stdio-h>#include"string.h"voidfun(char*s[],intn){char*t;inti,j;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(strlen(s[i])>strlen(s[j])){t=s[i];s[i]=s[j];s[j]=t;}}main(){char*ss[]={"bcc","bbcc","xy","aaaacc","aabcc"};fun(ss,5);printf("%s,%s\n",ss[0],ss[4]);}程序的运行结果是()。A、xy,aaaaccB、aaaacc,xyC、bcc,aabccD、aabcc,bcc标准答案:A知识点解析:从main函数入手,定义了一个一维数组并赋初值,接着调用函数fun(),函数的功能是:比较数组中各元素的长度,按元素长度从小到大的顺序排列元素,所以执行“fun(ss,5)”函数后,“*ss[]={"xy","bcc","bbcc","aabcc","aaaacc"}”,所以调用printf函数输出ss[0],ss[4]的值分别为xy,aaaacc。二、程序填空题(本题共1题,每题1.0分,共1分。)40、下列给定程序中,函数fun的功能是:在形参ss所指字符串数组中查找与形参t所指字符串相同的串,找到后返回该串在字符串数组中的位置(即下标值),若未找到则返回一I。ss所指字符串数组中共有N个内容不同的字符串,且串长小于M。清在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<string.h>#defineN5#defineM8intfun(char(*SS)[M],char*t){inti;/**********found***********/for(i=0;i<—【1】;i++)/**********found***********/if(strcmp(SS[i],t)==0)return【2】;return(一1);}main(){charch[N][M]={“if”,“while”,“switch”,“int”,“for”},t[M];intn,i;printf(“\nTheoriginalstring\n\n”);for(i=0;i<N;i++)puts(ch[i]);printf(“\n”);printf(“\nEnterastringforsearch:”),gets(t);n=fun(ch,t);/**********found***********/if(n==【3】)printf(“\nDon’tfound!\n”);elseprintf(“\nThepositionis%d\n”,n);}标准答案:(1)N(2)i(3)一1知识点解析:填空1:变量j是循环变世,它的取值范围足0—N。填空2:如果ss所指字符串数组中的字符串与t所指字符串相同,则返回其下标值,即returni;,否则返回一1,即return一1;。填空3:在main函数中输出最后结果,判断函数返回值n,如果n=一1,说明没有找到,否则输出n。三、程序修改题(本题共1题,每题1.0分,共1分。)41、下列给定程序中函数fun的功能是:将字符串中的字符逆序输出,但不改变字符串中的内容。例如,若字符串为“abed”,则应输出:“deba”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>/**********found***********/voidfun(chara){if(*a){fun(a+1);/**********found***********/printf(“%c”*a);}}main(){chars[10]=“abcd”;printf(“处理前字符串=%s\n,处理后字符串=”,s);fun(s);printf(“\n”);}标准答案:(1)voidfun(char*a)(2)prinff(“%c”,*a);知识点解析:(1)定义函数时形参的类型要与凋用函数中实参的类型一致,主函数中fun传递的是字符串s的首地址,所以此处形参应为指针类型。(2)根据prinff函数格式,很容易找到错误之处。四、程序设计题(本题共1题,每题1.0分,共1分。)42、请编写函数fun,其功能是:计算并输出下列多项式的值:例如,在主函数中从键盘给n输入15,则输出为:s=2.718282。注意:要求n的值大于1但不大于100。部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includedoublefun(intn){}main(){intn;doubles;printf("Inputn:");scanf("%d",&n);s=fun(n);printf("s=%f\n",s);NONO();}NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;intn,i;doubles;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++)(fscanf(rf,"%d",&n);s=fun(n);fprintf(wf,"%lf\n",s);}fclose(rf);fclose(wf);}标准答案:doubles=1;longt=1;inti;for(i=1;i<=n;i++){t=t*i;/*计算阶乘*/s+=1./t;/*计算每项的值并累加至变量s中*/}returns;/*返回多项式的值。/知识点解析:(1)根据题干中给出的数列,推出每一项是阶乘的倒数,所以首先在循环中求得每一项的阶乘。其中阶乘的计算公式定义为:公式分为参数n是1和大于1的两种情况,例如,1的阶乘1!=1;5的阶乘5!=5×4×3×2×1。(2)然后求得阶乘分之一的累加和。国家二级(C语言)机试模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去掉,剩余的数按原来从高位到低位的顺序组成一个新数,并通过形参指针n传回所指变量。例如,若输入一个数27638496,则新数为739。请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>voidfun(unsignedlong*n){unsignedlongx=0,i;intt;i=1;while(*n)/*********found*********/{t=*n%【1】;/*********found*********/if(t%2!=【2】){x=x+t*i;i=i*10;}*n=*n/10:}/*********found*********/*n=【3】;}main(){unsignedlongn=-1;while(n>99999999||n<0){printf("Pleaseinput(0<n<100000000):");scanf("%1d",&n);}fun(&n);printf("\nTheresultis:%1d\n",n);}标准答案:(1)10(2)0(3)x知识点解析:填空1:通过t对10求余,取出该数值的各个位。填空2:通过if条件语句实现奇偶数的判定。如果条件表达式对2求余为O即为偶数,反之则为奇数。填空3:最后将剩余的数赋给n所指向的元素。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.C。在此程序中,函数fun的功能是:计算n!。例如,给13输入5,则输出120.000000。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<conio.h>doublefun(intn){doubleresult=1.0;/*********found*********/ifn==0return1.0;while(n>1&&n<170)/*********found*********/result=n--:returnresult;}main(){intn;printf("InputN:");scanf("%d",&n);printf("\n\n%d!=%1f\n\n",n,fun(n));}标准答案:(1)if(n==0)(2)result*=n--;或{result*=n;n--;}知识点解析:(1)这里是一个简单的格式错误,if条件判断语句应该加括号。(2)根据阶乘的概念,从n开始,n!=n*(n-1)!,直到1,所以应该为result*=n--;。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun,其功能是:将一个数字字符串转换为一个整数(不得调用c语言提供的将字符串转换为整数的函数)。例如,若输入字符串“-1234”,则函数把它转换为整数值-1234。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容。仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#include<string.h>longfun(char*p){}voidmain(){chars[6];longn;printf("Enterastring:\n");gets(s);n=fun(s);printf("%1d\n",n);}标准答案:longfun(char*p){longn=0;intflag=1;if(*p==’-’)/*负数时置flag为-1*/{p++;flag=-1;}elseif(*p==’+’)/*正数时置flag为1*/p++;while(*p!=’\0’){n=n★10+*p-‘0’;/*将字符串转成相应的整数*/p++;}returnn*flag;}知识点解析:if语句的作用是判断该字符串为正数还是负数,while循环的作用是将字符串转成相应的整数。注意:*p是一个字符(例如‘9’、‘4’),并不是一个数,要将其转成相应的数字需令其减去’0’(不是’\0’),即*p-’0’就得到*p这个字符的相应数字,例如’0’-’0’=0、’8’-’0’=8等。必须在程序的前面加#include,函数atol的作用是将字符串转换成长整型数,它是一个库函数。国家二级(C语言)机试模拟试卷第3套一、选择题(本题共39题,每题1.0分,共39分。)1、下列叙述中正确的是()。A、栈是一种先进先出的线性表B、队列是一种后进先出的线性表C、栈与队列都是非线性结构D、以上三种说法都不对标准答案:D知识点解析:栈是一种先进后出的线性表,队列是一种先进先出的线性表,栈与队列都是线性结构。2、设某二叉树的后序序列为CBA,中序序列为ABC,则该二叉树的前序序列为()。A、BCAB、CBAC、ABCD、CAB标准答案:C知识点解析:后序序列为CBA,中序序列为ABC,则说明,A为根结点,并且B和C均在A的右子树上;结点B和C中,后序序列为CB,中序序列为BC,则说明结点C在结点B的右子树上,根据分析可得,该二叉树的前序序列为ABC,答案选C。3、有下列程序段:typedefstructNODE{intnum:structNODE*next;}OLD:下列叙述中正确的是()。A、以上的说明形式非法B、NODE是一个结构体类型C、OLD是一个结构体类型D、OLD是一个结构体变量标准答案:C知识点解析:C语言允许用typedef说明一种新类型名,其一般形式为:tvpedef类型名标识符。typedef语句的作用仅仅是使“标识符”来代表已存在的“类型名”,并未产生新的数据类型。原有类型名依然有效。此题中,用使tvpedef定义了新的类型OLD结构,所以OLD为结构体类型。4、有以下程序:#include<stdio.h>intb=2;intfun(int*k){b=*k+b;return(b);}voidmain(){inta[10]={1,2,3,4,5,6,7,8},i;for(i=2;i<4;i++){b=fun(&a[i])+b;printf("%d",b);}printf("\n");}程序运行后的输出结果是()。A、1012B、810C、1028D、1016标准答案:C知识点解析:因为b是全局变量,所以它的值在整个程序结束才会消失。for循环中,第一次循环,i=2,a[2]=3,所以fun(&a[i]=3+2=5,b=5,所以b=fun(&a[i])+b=5+5=10;第二次循环,b=10,然后fun(&a[i])代入a[3]=4,这时fun(&a[i]=10+4=14,所以b=fun(&a[i])+b=14+14=28。5、以下叙述错误的是()。A、变量的作用域取决于变量定义语句的位置B、全局变量可以在函数以外的任何部位进行定义C、局部变量的作用域可用于其他函数的调用D、一个变量说明为static存储类型是为了限制其他编译单元的引用标准答案:D知识点解析:本题考查函数调用的变量作用域。全局变量不在任何函数体内定义,作用域为整个文件;局部变量在函数体内定义,作用域仅为本次函数;static类型是静态变量,为了方便其他编译单元的引用,不能随意改变。一个函数包含两部分:函数首和函数体,函数体包括花括号内的所有语句。6、以下选项中,合法的一组C语言数值常量是()。A、028.5e-3-0nxfB、12OXa23-0nxfC、.1774c1.5-0nxfD、0x8A10,000-0nxf标准答案:B知识点解析:八进制数开头必须是数字“0”,其数字包括0~7,而在选项A中,028是错误的。浮点数据的指数形式表示常量中,C语言规定字母e或E之前必须要有数字,且e或E之后的指数必须为整数,而选项C中4e1.5是错误的。在选项D中,整型数据10,000的表示形式是错误的。所以本题的答案为选项B。7、若语句“t=fun(fun(x,y,a),(a+b,a+c),x+y+z);”对fun函数的调用正确,则fun函数的形参个数为()。A、3B、4C、5D、6标准答案:A知识点解析:本题考查函数调用时的参数个数。在函数调用时,实参必须和形参的个数、类型一一对应。但函数的计算结果只有一个值,因而fun函数的参数个数为3。8、以下语句中存在语法错误的是()。A、charss[6][20];ss[1]="right?";B、charss()[20]={"right?"};C、char*ss[6];ss[1]="right?";D、char*ss():{"right?"};标准答案:A知识点解析:数组定义后,不可以对数组整体赋值,s是二维数组,因ss[1]是一维字符数组,即字符串,字符串赋值可以使用stmpy(ss[1],"right");这样的形式,而选项A中对二维数组中的第“1”维(相当于一个一维数组)赋值,是不可以的。选项B和D是定义时对数组初始化,这是可以的。选项C中,将字符串在内存中的首地址赋给指针数组的一个元素,这是可以的。9、在C语言中,变量的隐含存储类别是()。A、autoB、staticC、externD、无存储类别标准答案:A知识点解析:C语言中,变量的隐含存储类型为auto。10、C源程序中不能表示的数制是()。A、十六进制B、八进制C、十进制D、二进制标准答案:D知识点解析:在C语言中整型常量可以用十进制、八进制和十六进制等形式表示,但不包括二进制,所以选择D。11、一个教师可讲授多门课程,一门课程可由多个教师讲授。则实体教师和课程间的联系是()。A、1:1联系B、1:m联系C、m:1联系D、m:n联系标准答案:D知识点解析:因为一个教师可讲授多门课程,而一门课程又能由多个教师讲授,所以它们之间是多对多的关系,可以表示为m:n。12、以下程序的运行结果是()。#include<stdio.h>main(){inta=3,b=4,C=8,d=4,m=1,n=3;printf("%d\n",(m=a>b)&&(n=c>d));}A、0B、1C、2D、3标准答案:A知识点解析:逻辑与(&&)运算符的功能是:当“&&”运算符两边的运算对象均为1时,整个表达式的值为1,否则为0。因为a=3<b=4,即m=0,所以整个表达式的值为0。13、下面选项中不是关系数据库基本特征的是()。A、不同的列应有不同的数据类型B、不同的列应有不同的列名C、与行的次序无关D、与列的次序无关标准答案:A知识点解析:在关系数据库中,二维表由行数据组成,每行数据包含若干属性值,每个属性都有指定的类型和取值范围。数据行数是有限的,每行数据互不相同(元组唯一性),每行的次序可以任意交换(元组的次序无关性);表中属性名(列各)各不相同即字段名不重复,属性名(列名)次序可任意交换。故本题答案为A选项。14、以下定义语句中正确的是()。A、inta=b=0;B、charA=65+1’b=‘b’;C、floata=1,*b=&a,*c=&b;D、doublea=0.0;b=1.1:标准答案:B知识点解析:A选项语句中b变量还没有定义不能直接用于给a变量赋值。C选项语句中*、*c表示的是一个实型变量的地址,不能再将&b赋值给指针型变量c。D选项语句中a=0.0后面应该为逗号,不能是分号。15、若x=2,y=3,则x&y的结果是()。A、0B、2C、3D、5标准答案:B知识点解析:本题主要考查按位与(&)运算的知识点。“&”是对两个运算量相应的位进行逻辑与,“&”的规则与逻辑与“&&”相同。x=2的二进制为00000010,y=3的二进制为00000011,x&y=00000010,转化为十进制即为2。16、一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是()。A、一对一B、一对多C、多对多D、多对一标准答案:C知识点解析:因为一个人可以操作多个计算机,而一台计算机又可以被多个人使用,所以两个实体之间是多对多的关系。17、以下选项中正确的定义语句是()。A、double,a,b;B、doublea=b=7;C、doublea;b;D、doublea=7,b=7;标准答案:D知识点解析:A选项中变量类型符double后面不能有逗号。B选项中变量b不能先使用再定义,应该写成选项D中的格式。C选项中变量a后面应该是逗号而不是分号。18、有以下程序:#includevoidf(int*q){inti=0;for(;i<5;i++)(*q)++;}main(){inta[5]={1,2,3,4,5},i;f(a);for(i=0;i<5;i++)printf(“%d,”,a[i]);}程序运行后的输出结果是()。A、6,2,3,4,5,B、2,2,3,4,5,C、1,2,3,4,5,D、2,3,4,5,6,标准答案:A知识点解析:本题考查的是函数的地址调用,将数组名作为数组首地址进行传递,然后取首个数组元素值进行加1运算,循环5次。因此A选项正确。19、下列叙述中正确的是()。A、算法就是程序B、设计算法时只需要考虑数据结构的设计C、设计算法时只需要考虑结果的可靠性D、以上三种说法都不对标准答案:D知识点解析:算法是指解题方案的准确而完整的描述,算法不等于程序,也不等于计算方法,所以A错误。设计算法时不仅要考虑对数据对象的运算和操作,还要考虑算法的控制结构。20、有以下程序#inc1udemain(){intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=0;for(i=0;i<3;i++)for(j=2j>=i;j——)=—b[i]D];printf("%d\n",t);}程序运行后的输出结果是()。A、4B、3C、8D、9标准答案:C知识点解析:这道题主要考查的是二维数组的有关知识。在两层for循环语句中,累加上三角元素,所以程序执行的过程为“t=b[0][0]+b[0][1]+b[0][2]+b[1][1]+b[1][2]+b[2][2]=8”。21、程序流程图中带有箭头的线段表示的是()。A、图元关系B、数据流C、控制流D、调用关系标准答案:C知识点解析:在数据流图中,用标有名字的箭头表示数据流。在程序流程图中,用标有名字的箭头表示控制流。所以选择C)。22、有以下程序:#include<stdio.h>main(){inti,j,x=0;for(i=0;i<2;i++){x++:for(j=0;j<=3;j++){if(j%2)continue;x++;}x++;}printf("x=%d\n",x);}程序执行后的输出结果是()。A、x=4B、x=8C、x=6D、x=12标准答案:B知识点解析:toutinue的作用是跳出循环体中剩余的语句而进行下一次循环。第一次执行外循环i的值为0,执行x++,x的值变为1,第一次执行内层循环j的值为0,不满足if条件,执行x++,x的值变为2,第二次内循环j的值为1,if条件成立,跳出本次循环,第三次执行内循环j的值为2,不满足if条件,x的值变为3,第四次执行内循环j的值为3满足条件跳出本次内循环,x的值加1,即为4,第一次外循环结束。第二次执行外循环时,同理,i的值被加了,4次,变为8,所以选择B选项。23、有以下程序:#include<stdio.h>voidfull(int*s,intn1,intn2){inti,j,t;i=n1;j=n2;while(i<J){t=s[i];s[i]=s[J];s[j]=t;i++;j--;}}main(){inta[10]={1,2,3,4,5,6,7,8,9,0},k;fun(a,0,3);fun(a,4,9);fun(a,0,9);for(k=0;k<10;k++)printf("%d",a[k]);printf("\n");}程序运行后的输出结果是()。A、4321098765B、5678901234C、0987654321D、0987651234标准答案:B知识点解析:该程序首先给一维数组赋值,然后三次调用fun函数,其中fun(a,0,3);功能是将一维数组中笫1,个元素和第4个元素互换,第2个元素和第3个元素互换;其中fun(a,4,9);功能是将一维数组中第5个元素和第10个元素互换,第6个和第9个元素互换,第7个元素和第8个元素互换;其中fun(a,0,9);功能是将将一维数组中第1个元素和第10个元素互换,第2个元素和第9个元素互换……依此类推。因此B选项正确。24、有以下程序#include<stdio.h>intfun(){staticintx=1;x*=2;returnx;}main(){inti,s=1;for(i=1;i<=2;i++)s=fun();printf("%d\n",s);}程序运行后的输出结果是A、0B、1C、4D、8标准答案:C知识点解析:fun函数中的x为静态局部变量,占用固定的内存单元,下一次调用时仍可保留上次调用时的值。也就是说,如果多次调用fun函数,x的定义只在第一次调用时有效,从第二次调用开始,x的定义相当于不存在,直接使用x的值。主函数中调用两次fun函数:第一次调用:x=1,x=x*2=2,s=2;第二次调用:(直接用上次x的值)x=x*2=4,s=4。因此C选项正确。25、以下能正确表述算式sin(2πr+30°)的C语言表达式是()。A、sin(2*3.14*r+3.14*30/180.0)B、sin(2*π*r+30)C、sin(2*3.14*r+30)D、sin(2*3.14*r+30*3.14/360.0)标准答案:A知识点解析:考查算术表达式的写法,C中没有π,需要用数值3.14代替,C中sin函数的参数为弧度,角度30转成弧度应为3.14*30/180。故而选A)。26、有以下程序#includemain(){inta[3]={0},i,j,k=2;for(i=0;iA、3B、2C、1D、0标准答案:A知识点解析:暂无解析27、有以下程序:#include<stdio.h>main(){inti,t[][3]={9,8,7,6,5,4,3,2,1};for(i=0;i<3;i++)printf(’’%d’’,t[2-i][i]);程序执行后的输出结果是()。A、357B、753C、369D、751标准答案:A知识点解析:二维数组t[][3]实际上指t[3][3]={{9,8,7},{6,5,4},{3,2,1}},通过循环语句for语句可以得到i=0,t[2][0]=3、i=1,t[1][1]=5、i=2,t[0][2]=7、i=3时循环结束即t[2][0]=3、t[1][1]=5、t[0][2]=7。因此A选项正确。28、有以下程序:#include<stdio.h>voidfun(int*s,intn1,intn2){inti,j,t;i_nl;j=n2;while(i<j){t=s[i];s[i]=s[j];s[j]=t;i++;j--;}}main(){inta[10]={1,2,3,4,5,6,7,8,9,0},k;fun(a,0,3);fun(a,4,9);fun(a,0,9);for(k=0;k<10;k++)printf(’’%d’’,a[k]);printf(’’\n’’);}程序运行后的输出结果是()。A、1,1,2,6,B、6,2,1,l,C、6,4,3,2,D、2,3,4,6,标准答案:C知识点解析:首先对二维数组进行赋值操作,a[0][0]、a[0][1]、…、a[3][2]、a[3][3]的值为1、4、…、6、1。通过for嵌套循环语句和if条件语句,对二维数组对角线元素进行由大到小的排序操作,程序最后通过for语句输出二维数组第1行的4个元素。因此C选项正确。29、若有以下程序#include<stdio.h>#include<string.h>typedefstructstu{charname[10],gender;intscore;}STU;voidf(char*p){strcpy(p,"Qian");}main(){STUa={"Zhao",’m’,290},b;b=a;f();b.gender=’f’;b.score=350;printf("%s,%c,%d,",,a.gender,a.score);printf("%s,%c,%d\n",,b.gender,b.score);}则程序的输出结果是A、Zhao,m,290,Qian,f,350B、Zhao,m,290,Zhao,m,290C、Qian,f,350,Qian,f,350D、Zhao,m,290,Zhao,f,350标准答案:A知识点解析:本题考查结构体的相关操作以及传值、传址的区别,该题中调用f函数后,b的name会重新赋值为Qian,选项A正确。30、有以下程序:#includemain(){intx=1;for(;x<8;x++){if(x%3){printf(’’%d,’’,x++);continue;}printf(’’%d,’’,++x);}}程序运行后的输出结果是()。A、1,4,5,7B、1,3,5,7C、2,4,5,8D、8,5,4,2标准答案:A知识点解析:注意循环变量在循环体中有个加1的运算,所以循环变量x=1,3,5,7;当x是3的整数倍时,输出++x,当x不是3的整数倍时输出x++,所以结果是1,4,5,7。31、下面关于位运算符的叙述,正确的是A、||表示"按位或"的运算B、#表示"按位异或"的运算C、&表示"按位与"的运算D、~表示"按位异或"的运算标准答案:C知识点解析:本题考查位运算。^为按位异或,|为按位或,~表示按位取反。所以C选项正确。32、C语言主要是借助以下哪种手段来实现程序模块化A、定义函数B、定义常量和外部变量C、使用丰富的数据类型D、使用三种基本结构语句标准答案:A知识点解析:C语言程序的模块化通过函数来体现,所以选择A。33、C语言中分支结构中的if(表达式)语句中,关于“表达式’’值的叙述中正确的是()。A、必须是逻辑值B、必须是整数值C、不能为零D、可以是任意合法的数值标准答案:D知识点解析:if语句中的值可以是任意合法的数值或表达式,其他选项均不正确。34、有以下程序:#includevoidmain(){inti=5,s=0;do{switch(i){case1:case3:s+=1;i--;break;default:s=0;i一一;case2:case4:s+=2;i一一;break;}printf(’’%d’’,s);}while(i>0&&s<5);}程序运行后的输出结果是()。A、235B、2350C、0235D、2356标准答案:A知识点解析:注意两点。一是case分支语句后面若没有break则会执行其后的所有语句,直到有break跳出或switch()语句结束,do一while循环第1次执行时,i=5,在switch中执行default分支,但其后没有break,所以后面的分支也会被执行,执行完后s=2,i=3;第2次执行do一while循环时,会执行case3后面的语句,直到有break跳出,执行完后s=3,i=2;第3次执行后s=5,i=1,此时注意while中的条件是s<5,所以循环结束,打印的结果是235。35、以下叙述正确的是A、不能在数组说明符的一对方括号中使用表达式B、charc1,*c2,**c3,c4[2];是C语言的合法语句C、数组下标的最小值可以是负值D、若有数组定义intarray[5];则语句printf("%d",array[1.23]);是合法的标准答案:B知识点解析:在B选项中,c1是字符型变量,c2是字符型指针变量,c3是指向字符型指针的指针变量,c4[2]是一个一维字符数组,这些都是C语言的合法语句,因此答案为B选项。36、以下非法的字符常量是A、’\\n’B、’\101’C、’\x21’D、’\0’标准答案:A知识点解析:C语言允许使用一种以特殊形式出现的字符常量,,使用"\n"来表示换行,"\n"实际上是一个字符,它的ASCII码值为10,不存在’\\n’用法,故答案为A选项。37、有以下程序#include<stdio.h>typedefstructstu{charname[10];chargender;intscore;}STU;voidf(STUa,STU*b){a=*b;printf("%s,%c,%d,",,a.gender,a.score);}main(){STUa={"Zhao",’m’,290},b={"Qian",’f’,350};f(a,&b);printf("%s,%c,%d\n",,a.gender,a.score);}程序运行后的输出结果是A、Qian,f,350,Qian,f,350B、Zhao,m,290,Qian,f,350C、Qian,f,350,Zhao,m,290D、Zhao,m,290,Zhao,m,290标准答案:C知识点解析:main函数中,首先定义两个结构体STU类型的变量a,b,并对a,b初始化,f函数的功能是:用形参结构体指针b指向的结构体对形参a赋值,此时形参结构体a的值为指针b指向的值,输出a即输出指针b指向的结构体,返回到main函数后,在输出实参a的值,答案为C选项,注:形参a,b不要和实参a,b混淆。38、数据库系统的数据独立性是指A、不会因为系统数据存储结构与数据逻辑结构的变化而影响应用程序B、不会因为数据的变化而影响应用程序C、不会因为存储策略的变化而影响存储结构D、不会因为某些存储结构的变化而影响其他的存储结构标准答案:A知识点解析:数据库系统的数据独立性,是指数据库中数据独立于应用程序且不依赖于应用程序,即数据的逻辑结构、存储结构与存取方式的改变不会影响应用程序。故选A选项。39、以下关于C语言的叙述中正确的是()。A、预处理命令通常位于函数体外面,但也可以位于函数体中间B、C语言中的变量定义须在其他语句之前C、在C语言程序的书写中,一个语句必须单占一行D、一个C语言源程序可以由一个或多个源文件组成,每个源文件可由自己的main函数标准答案:A知识点解析:源程序中可以有预处理命令(include命令仅为其中的一种)。C语言中的变量可以在使用之前的任何位置进行定义。C语言程序的书写中,多个语句可以位于一行,但为了增强可读性,一般每行只有一条语句。一个C语言源程序可以由一个或多个源文件组成,但仅可以有一个main函数.二、程序填空题(本题共1题,每题1.0分,共1分。)40、程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据不变。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#defineN5typedefstructstudent{longsno;charname[10];floatscore[3];}STU;voidfun(char*filename,STUn){FILE*fp;/**********found**********/fp=fopen(_____1_____,"rb+");/**********found**********/fseek(_____2_____,一(long)sizeof(STU),SEEKEND);/**********found**********/fwrite(&n,sizeof(STU),1,_____3_____);fclose(fp);}main(){STUt[N]=f{10001,"MaChao",91,92,77),{10002,"CaoKai",75,60,88},{10003,"LiSi",85,70,78},{10004,"FangFang",90,82,87},{10005,"ZhangSan",95,80,88}};STUn={10006,"ZhaoSi",55,70,68},ss[N];inti,j;FILE*fp;fp=fopen("student.dat","wb");fwrite(t,sizeof(STU),N,fp);fclose(fp);fp=fopen("student.dat","rb");fread(ss,sizeof(STU),N,fp);fclose(fp);printf("\nTheoriginaldata:\n\n");for(j=0;j标准答案:(1)filename(2)fp(3)fp知识点解析:第一空:“fp=fopen(__1__,"rb+");”补充fopen的参数,fopen的调用形式是:fp=fopen(文件名,文件使用方式),因此第一空处应填文件名“filename”。第二空:此处是补充fseek函数的参数,fseek的调用形式是:fseek(fp,offset,position),其中第一个参数是文件型指针,故第二空处应填文件型指针变量“fp”。第三空:fwrite的调用形式是(buffer,size,count,fb),最后一个参数是文件型指针,故第三空处应填“fp”,将新的学生数据写在最后一个学生数据位置。三、程序修改题(本题共1题,每题1.0分,共1分。)41、给定程序MODI1.C中的函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据域赋0到m-1的值。请改正函数Creatlink中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#includetypedefstructaa{intdata;structaa*next;}NODE;NODE*Creatiink(intn,intm){NODE*h=NULL,*p,*s;inti;/**********found***********/p=(NODE)malloc(sizeof(NODE));h=p;p->next=NULL;for(i=1;i<=n;i++){s=(NODE*)malloc(sizeof(NODE));s->data=rand()%m;s->next=p->next;p->next。s;p=p->next;}/**********found**********/returnp;}outlink(NODE*h){NODE*p;p=h->next;printf("\n\nTHELIST:\n\nHEAD");while(P){printf("->%d”,p->data);p=p->next;}printf("\n");}main(){NODE*head;head=Creatlink(8,22);outlink(head);}标准答案:(1)p=(NODE*)malloc(sizeof(NODE));(2)returnh;知识点解析:(1)第一标识下“p=(NODE)malloc(sizeof(NODE));”,maclloc函数的返回类型是void*类型,表示未确定类型的指针,因此需要指针类型转换,而“(NODE)”不是指针类型,故第一标识下应改成“p=(NODE*)mailoc(sizeof(NODE));”。(2)第二个标识下,最后将单链表返回,应该是返回头指针h指向的链表,而不是其中的一个节点p,所以“returnp;”应该改为“returnh;”。四、程序设计题(本题共1题,每题1.0分,共1分。)42、请编写函数fun,函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#innclude#include#defineN80intfun(char*s){}main(){charline[N];intnum=0;voidNONO();printf("Enterastring:\n");gets(line);num=fun(line);printf("Thenumberofwordis:%d\n\n",num);NONO();}voidNONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FTLE*rf,*wf;inti,num;charline[N],*p;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fgets(line,N,rf);p=strchr(line,’\n’);if(p!=NULL)*p=0;num=fun(line);fprintf(wf,"%d\n",num);}fclose(rf);fclose(wf);}标准答案:inti,n=0;//字符统计初始值设置为0for(i=0;i=’a’&&s[i]<=’z’&&s[i+1]=’’||s[i+1]==’\0’)//单词判断条件n++;//单词统计计数器加1}returnn;//返回统计值知识点解析:(1)首先,求得字符串的长度。(2)只要
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年口哨种类测试题及答案
- 2025年钢结构第4版试题及答案
- 2025年淄博高校面试试题及答案
- 译林版三下英语 Unit3 School rules作业单
- 2025年人才争夺面试试题及答案
- 2025年天上的街市考试题及答案
- 2025年垂体瘤的护理试题及答案
- 2025年山东地理中考试题及答案
- 2025年厦门电梯考试试题及答案
- 2025年人脑开发测试题及答案
- 《颈椎病的护理》PPT课件(完整版)
- 新苏教版科学五年级下册全套教学课件
- 审计部组织架构及岗位设置
- 流行性乙型脑炎PPT课件
- 深圳市轨道交通线网规划(2016_2035)(草案)
- 400V电缆分支箱生产实用工艺流程
- 实验实训室使用申请表
- 四十二式太极剑剑谱
- 完整解读2021年《建设工程抗震管理条例》PPT教学讲座课件
- 新版小学英语PEP四年级下册教材分析(课堂PPT)
- 食用植物油生产许可证审查细则.doc
评论
0/150
提交评论