版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级(C语言)机试模拟试卷26(共9套)(共226题)国家二级(C语言)机试模拟试卷第1套一、选择题(本题共39题,每题1.0分,共39分。)1、软件详细设计产生的图如下:该图是()。A、N-S图B、PAD图C、程序流程图D、E-R图标准答案:C知识点解析:程序流程图基本图符有3种:控制流(用箭头表示)、加工步骤(用方框表示)、逻辑条件(用菱形表示)。控制结构有5种:①顺序结构;②选择结构;③多分支选择结构;④后判断重复型结构;⑤先判断重复型结构。题目中是选择结构的程序流程图。2、数据流图中带有箭头的线段表示的是()。A、控制流B、事件驱动C、模块调用D、数据流标准答案:D知识点解析:数据流图基本符号的含义:①矩形表示数据的外部实体;②圆角的矩形表示变换数据的处理逻辑;③“=”表示数据的存储;④箭头表示数据流。3、下列关于线性链表的描述中,正确的是()。I、只含有一个指针域来存放下一个元素地址II、指针域中的指针用于指向该结点的前一个或后一个结点(即前件或后件)III、结点由两部分组成:数据域和指针域。A、仅I、IIB、仅I、IIIC、仅II、IIID、全部标准答案:D知识点解析:在定义的链表中,若只含有一个指针域来存放下一个元素地址,称这样的链表为单链表或线性链表。在链式存储方式中,要求每个结点由两部分组成:一部分用于存放数据元素值,称为数据域;另一部分用于存放指针,称为指针域。其中指针用于指向该结点的前一个或后一个结点(即前件或后件)。4、设有关键码序列(66,13,51,76,81,26,57,69,23),要按关键码值递增的次序排序,若采用快速排序法,并以第一个元素为划分的基准,那么第一趟划分后的结果为()。A、23,13,51,57,66,26,81,69,76B、13,23,26,51,57,66,81,76,69C、23,13,51,57,26,66,81,69,76D、23,13,51,57,81,26,66,69,76标准答案:A知识点解析:快速排序是起泡排序的改进。在快速排序中,任取一个记录,以它为基准用交换的方法将所有的记录分成两部分,关键码值比它小的在一部分,关键码值比它大的在另一部分,再分别对两个部分实施上述过程,一直重复到排序完成。5、以下选项中不合法的标识符是()。A、&aB、FORC、13rintD、_00标准答案:A知识点解析:C语言中标识符由字母、下划线、数字组成,且开头必须是字母或下划线。另外,关键字不能作为标识符。因为C语言中区分大小写,所以B选项中的“FOR”可以作为标识符来用。A选项中含有非法字符&,所以选择A。6、下列叙述中错误的是()。A、用户所定义的标识符允许使用关键字B、用户所定义的标识符应尽量做到“见名知意”C、用户所定义的标识符必须以字母或下划线开头D、用户定义的标识符中,大、小写字母代表不同标识标准答案:A知识点解析:在C语言中,合法标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须为字母或下划线,凡是要求标识符的地方都必须按此规则命名。在C语言的标识符中,大写字母和小写字母被认为是两个不同的字符。在选择标识符时,应注意做到“见名知义”,即选择具有一定含义的英文单词或汉语拼音作为标识符,以增加程序的可读性。7、下面程序段的输出结果是()。#include<stdio.h>main(){floatx=1.236547;printf("tha",(int)(x*1000+0.5)/(float)1000);}A、1.237000B、输出格式说明与输出项不匹,输出无定值C、1.236000D、1.24标准答案:A知识点解析:本题中,(int)(x*1000+0.5)的结果为1237,(float)1000是将1000强制转换成flat类型;整个表达式(int)(x*1000+0.5)/(float)1000的结果为1.237000,再以实数(6位小数)形式输出。8、语句“printf("a\bhow\’are\’y\\\bou\n");”的输出结果是()。A、a\bhow\’are\’y\\bouB、a\bhow\’are\’y\bouC、how’are’youD、ahow’are’y\hou标准答案:C知识点解析:“\b”格式符表示退格,功能是将它后面的字母把它前面的字母覆盖,导致“\b”格式符前面的字母不能输出;“\’”格式符表示输出单引号字符;“\\”格式符表示输出反斜线字符。9、下列叙述中正确的是()。A、循环队列中的元素个数随队头指针与队尾指针的变化而动态变化B、循环队列中的元素个数随队头指针的变化而动态变化C、循环队列中的元素个数随队尾指针的变化而动态变化D、以上说法都不对标准答案:A知识点解析:在循环队列中,用队尾指针rear指向队列中的队尾元素,用队头指针front指向队头元素的前一个位置。因此,从队头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素。所以循环队列中的元素个数随队头指针和队尾指针的变化而变化。A正确。10、下列二维数组初始化语句中,正确且与语句inta[][3]={1,2,3,4,5}等价的是()。A、inta[2][]={{1,2,3},{4,5}};B、inta[][3]={1,2,3,4,5,0};C、inta[][3]={{1,0}{,{2,0},{3,0}};D、inta[2][]={{1,2,3},{4,5,6}};标准答案:B知识点解析:此题考查的是二维数组的初始化。题干中数组a的第二个下标为3,由此可知数组a是一个2行3列的数组,初始化时未赋初值的元素的值自动为0,所以与选项B)是等价的,最后一个元素的值为0。11、软件详细设计产生的图如下:该图是()。A、N-S图B、PAD图C、程序流程图D、E-R图标准答案:C知识点解析:程序流程图基本图符有3种:控制流(用箭头表示)、加工步骤(用方框表示)、逻辑条件(用菱形表示)。控制结构有5种:①顺序结构;②选择结构;③多分支选择结构;④后判断重复型结构;⑤先判断重复型结构。题目中是选择结构的程序流程图。12、定义结构体数组structStu{intnum;charname[20];x[5]={1,"ZHAO",2,"QIAN",3,"SUN",4,"LEE",5,"ZHOU"};for(i=1;i<5;i++)printf("%d%c",x[i].num,x[i].name[2]);程序执行后的输出结果是()。A、2A3N4E5OB、1H213U4EC、1A2N3E4OD、1A2N3E4O标准答案:A知识点解析:本题主要考查结构体数组。x[i].num是结构体x[i]中的num成员,x[i].name[2]是结构体x[i]中name成员的第3个元素。第一次循环,i=1,输出x[1].num,x[l].name[2]的值,即2A;第二次循环,i=2,输出x[2].num,x[2].name[2]的值,即3N;第三次循环,i=3,输出x[3].num,x[3].name[2]的值,即4E:第四次循环,i=4,输出x[4].num,x[4].name[2]的值,即50。13、fgets(str,n,fp)函数从文件中读入一个字符串,以下错误的叙述是()。A、字符串读入后会自动加入’\0’B、fp是指向该文件的文件型指针C、fgets函数将从文件中最多读入n个字符D、fgets函数将从文件中最多读入n-1个字符标准答案:C知识点解析:字符串输入函数fgets()的调用形式为:fgets(s,n,fp);s可以是一个字符数组名,或是指向字符串的指针;n为要读取的最多的字符个数:fp是指向该文件的文件型指针;字符串输入函数的功能是:从fp所指向的文件中读取长度不超过n-1个字符的字符串,并将该字符串存放到字符数组s中。14、设Y为整型变量,A=1,A的地址为EF01;B=2,B的地址为EF02;执行语句B=&A;Y=&b;后Y的值()。A、1B、2C、EF01D、EF02标准答案:C知识点解析:&是取地址运算符,Y=&B是将B的地址赋给Y,因此Y值为EF01。15、设有定义:structcomplex{intreal,unreal;datal={1,8},data2;则以下赋值语句中错误的是()。A、data2=(2,6);B、data2=datal;C、data2=real=datal.real;D、data2.real=datal.unreal;标准答案:A知识点解析:A选项中可以在声明变量的同事为data2赋值,但是data2=(2,6);应写作data2={2,6}。所以选择A。16、以下程序的输出结果是()。#includemain()structst{p=aa;{intx;int*y;}*p;printf("%d\n",++(p->x));}intdt[4]={1,2,3,4};structstaa[4]={2,&dt[0],3,&dt[0],4,&dt[0],5,&dt[0],};A、1B、2C、3D、4标准答案:C知识点解析:程序首先将指针p指向结构体数组aa的首地址,通过p->x引用了结构体数组aa[0]的第一个成员2;++(p->x)是将p识的值加l,所以输出结果为3。17、可在C程序中用作用户标识符的一组标识符是()。A、voiddefineWORDB、as_b3_123IfC、For_abccaseD、2cDOSIG标准答案:B知识点解析:C语言规定,标识符是由字母、数字或下划线组成,并且它的第一个字符必须是字母或下划线,关键字不能用作用户标识符。18、有以下程序:#includemain(){inti,j;for(i=1;i<4;i++){for(j=i;j<4;j++)printf(“%d*%d=%d”,i,j,i*j);printf一(“\n”);}}程序运行后的输出结果是()。A、1*1=11*2=21*3=32*2=42*3=63*3=9B、1*1=11*2=21*3=32*1=22*1=2=43*1=3C、1*1=11*2=22*2=41*3=32*3=63*3=9D、1*1=12*1=22*2=43*1=33*2=63*3=9标准答案:A知识点解析:外循环第一次i的值为1,内循环第一次j的初值为1,打印|*|=1;内循环第二次j的值为2,打印1*2=2;内循环第三次j的值为3,打印1*3=3,打印回车换行,退出内循环。外循环第二次i的值为2,内循环第一次j的初值为2,打印2*2=4;内循环第二次j的值为3,打印2*3=6,打印回车换行,退出内循环。外循环第三次i的值为3,内循环第一次i的初值为3,打印3*3=9,打印回车换行,退出内循环。19、有以下程序#include<stdio.h>main(){FILE*fp;intk,n,a[6]={1,2,3,4,5,6};fp=fopen("d2.dat","w");fprintf(fp,"%d%d%d\n",a[0],a[1],a[2]);fprintf(fp,"%d%d%d\n",a[3],a[4],a[5]);fclose(fp);fp=fopen("d2.dat","r");fscanf(fp,"%d%d",&k,&n);printf("%d%d\n",k,n);fclose(fp);}程序运行后的输出结果是A、12B、14C、1234D、123456标准答案:D知识点解析:fprintf()函数向文件输出,将输出的内容输出到硬盘上的文件或是相当于文件的设备上执行两次fprintf后文件中有123456,所以D选项正确。20、设有下面的定义:structst{mta;floatb:}d;int*p,要使p指向结构变量d中的a成员,正确的赋值语句是()。A、*p=d.a;B、p=&a;C、p=d.a;D、p=&d.a;标准答案:D知识点解析:本题主要考查按结构数组元素方式引用结构成员。结构体变量的成员引用方法有3种:①结构体变量名.成员名;②指针变量名—>成员名;③(*指针变量名).成员名。因为p是指针变量,所以应该将地址值赋给p。21、下列关于C语言数据文件的叙述中正确的是()。A、文件由ASCII码字符序列组成,C语言只能读写文本文件B、文件由二进制数据序列组成,C语言只能读写二进制文件C、文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件D、文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件标准答案:D知识点解析:本题考查的是数据文件的有关概念。文件由数据流的形式组成,可以按数据存放的形式分为二进制文件和文本文件,C语言既能读写文本文件,又能读写二进制文件。22、以下选项中与if(a==1)a++;elsea=b;语句功能不同的语句是()。A、switch(a){case():a=b;break;default:a++;}B、switch(a==1){case0:a++;default:a=b;}C、switch(a){default:a=b;break;case1:a++:}D、a=(a==1)?(a++):b标准答案:B知识点解析:ifelse语句的含义是,如果变量a的值等于l,变量a的值加1,否则,则把变量b的值赋给变量a。在本题的4个选项中,与其含义不同的是选项B,因为没有break语句,当a=1的时候,会顺序执行两条语句,最终结果是将b的值赋给a。23、以下叙述中正确的是()。A、调用函数时,函数名必须与被调用的函数名完全一致B、函数调用时,不必区分函数名称的大小写C、函数名允许用数字开头D、在函数体中只能出现一次return语句标准答案:A知识点解析:暂无解析24、已知一个文件中存放若干工人档案记录,其数据结构如下:structa{charnumber[100];intage;floatp[6];};定义一个数组:structab[10];假定文件已正确打开,不能正确地从文件中读入10名工人数据到数组b中的是()。A、ffead(b,sizeof(structa),10,fp);B、for(i=0;i<10;i++)fread(b[i],sizeof(stmcta),1,fp);C、for(i=0;i<10;i++)fread(b+i,sizeof(structa),1,fp);D、for(i=0;i<5;i+=2)ffead(b+i,sezeof(structa),2,fp);标准答案:B知识点解析:数据块输入/输出函数的调用格式为:fread(buffer,size,count,fp),其中:“buffer”是一个指针,对于fread来说,它是读入数据的存放地址。“size”是要读写的字节数;“count”是要进行读写多少个size字节的数据项;“fp”是指文件型指针。选项B)中b[i]是一个数组,不是指针,需改为&b[i]。25、数据独立性是数据库技术的重要特点之一。所谓数据独立性是指()。A、数据与程序独立存放B、不同的数据被存放在不同的文件中C、不同的数据只能被对应的应用程序所使用D、以上三种说法都不对标准答案:D知识点解析:数据独立性是数据与程序间的互不依赖性,即数据库中数据独立于应用程序而不依赖于应用程序。所以选项A),选项B)和选项C)都不正确。26、有以下程序#include<stdio.h>structS{intn;inta[20];};voidf(int*a,intn){inti;for(i=0;i<n-1;i++)a[i]+=i;}main(){inti;structSs={10,{2,3,1,6,8,7,5,4,10,9}};f(s.a,s.n);for(i=0;i<s.n;i++)printf("%d,",s.a[i]);}程序运行后的输出结果是A、2,3,1,6,8,7,5,4,10,9,B、3,4,2,7,9,8,6,5,11,10,C、2,4,3,9,12,12,11,11,18,9,D、1,2,3,6,8,7,5,4,10,9,标准答案:C知识点解析:题目中定义了一个结构体类型S,然后定义了一个结构体变量s并初始化,执行f函数后,将s中元素a的每个元素都加上i,i的值从0~9,这里需要注意,最后一个元素没有加i,所以最终答案为C选项。27、以下叙述中错误的是()。A、可以给指针变量赋一个整数作为地址值B、函数可以返回地址值C、改变函数形参的值,不会改变对应实参的值D、当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL标准答案:A知识点解析:不能将一个整数直接赋给指针变量作为地址,所以A选项是错误的。函数的返回值可以是地址,即指针。函数调用中形参值的变化不会传递给实参。28、下列工具中,不属于结构化分析的常用工具的是()。A、数据流图B、数据字典C、判定树D、N-S图标准答案:D知识点解析:结构化分析的常用工具有数据流图、数据字典、判定树和判定表。29、以下能够实现计算5!的程序段是()。A、intfac=1,k=0;do{k++;fac*=k;}while(k<5);B、intfac=0,k=1;do{fac*=k;k++;}while(k<5);C、intfac=1,k=1;do{k++;fac*=k;}while(k<=5);D、intfac=1,k=0;do{fac=k;k++;}while(k<5);标准答案:A知识点解析:do…while循环语句一般形式为:do{循环体}while(表达式),执行过程为:首先执行循环体,之后判断表达式,表达式成立(非0)则再一次执行循环体,不成立(0)则退出循环。A项,k=1,fac=1*1,判断k<5,条件成立进行下一次循环,直到k=5,fac=1*2*3*4*5,k<5不成立退出循环,实现计算5!。B项,fac从0开始,做乘法一直都是0,无法实现5!。C项,k=2,fac=1*2,循环条件成立,直到k=6,fac=1*2*3*4*5*6才因循环条件不成立退出循环,实现61。D项:k=0,fac=1*0=0,之后做乘法一直为0,无法实现5!。30、以下程序段完全正确的是()。A、int*p;8canf(“%d”,&p);B、int*p;seanf(“%d”,P);C、intk,*p=&k;scanf(“%d”,P);D、intk,*P;*P:&k;scanf(“%d”,P);标准答案:C知识点解析:A选项中错在没有对指针进行初始化,是无效指针,并且在scanf(“%d”,&p)中无需再进行取地址操作;B选项中没有对指针进行初始化,是无效指针;D选项中语句*p=&k;的左端*p是指针所指内存空间的值,&k是地址,应为p=&k。因此C选项正确。31、以下程序段中的变量已正确定义for(i=0;i<4;i++,i++)for(k=1;k<3;k++);printf("*");该程序段的输出结果是()。A、*B、****C、**D、********标准答案:A知识点解析:暂无解析32、大学中每个年级有多个班,每个班有多名学生,则实体班级和实体学生之间的联系是()。A、一对多B、一对一C、多对一D、多对多标准答案:A知识点解析:实体集之间通过联系来建立联接关系分为三类:一对一联系(1:1)、一对多联系(1:m)、多对多联系(m:n)。每个班有多名学生,但每个学生只能在一个班级里,故实体班级和实体学生之间的联系是一对多,故A选项正确。33、有以下程序:#include#defineSUB(a)(a)-(a)main(){inta=2,b=3,c=5,d;d=SUB(a+b)*c;printf("%d\n",d);}程序运行后的输出结果是()。A、0B、-12C、-20D、10标准答案:C知识点解析:本题考查宏定义。宏定义只是做简单的替换,所以本题中执行语句SUB(a+b)}c=(a+b-(a+b)*c=-20,故答案为C选项。34、以下关于C语言文件的叙述中正确的是()。A、文件南数据序列组成,其类型可以为二进制文件或文本文件B、文件由记录序列组成,其类型可以为二进制文件或文本文件C、文件由字符序列组成,其类型可以为二进制文件或文本文件D、文件由数据序列组成,其类型只能是二进制文件标准答案:A知识点解析:C语言文件是指一组相关数据的有序集合,从文件编码的方式看,文件可分为ASCII码文件和二进制文件两种,其中ASCII文件也称为文本文件,所以文件由数据序列组成,类型可以为二进制文件或文本文件,故选项A正确。35、有以下程序:#include#includestruetA{inta;charb[10];doublec;};structAf(struetAt);main(){8truetAat={1001,"ZhangDa",1098.0};a=f(a);printf("%d,%s,%6.1f\n",a.a,a.b,a.c);}struetAf(struetAt){t.a=1002;strepy(t.b,"ChangRong");t.c=1202.0:returnt;}程序运行后的输出结果是()。A、1002,ZhangDa,1202.0B、1002,ChangRong,1202.0C、1001,ChangRong,1098.0D、1001,ZhangDa,1098.0标准答案:B知识点解析:本题考查结构体变量的引用以及作为函数参数的用法。题目虽然看似复杂,其实比较容易,f函数的参数是结构体变量,然后对参数重新赋值并返回,所以该题目的答案为B选项。36、有以下程序:#include<stdio.h>main(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf("a=%d,b=%d\n",a,b);}程序的运行结果是()。A、a=2,b=2B、a=2,b=1C、a=1,b=1D、a=1,b=0标准答案:B知识点解析:C语言还提供了一种用于多分支选择的switch语句,计算表达式的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后语句,然后不再进行判断,继续执行后面所有case后语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。x=1;进入第一层switch,y=0;进入第二层switch。执行a++;break;后a=1;在进入case2,(这里case1:没有break,)执行了a++,b++,由于存在break,则跳出switch,得到a=2.b=1,因此答案为B选项。37、若要求定义具有10个int型元素的一维数组a,则以下定义语句中错误的是()。A、intaE5+5];B、intn=10,a[n];C、#definen5inta[2*n];D、#defineN10inta[N];标准答案:B知识点解析:一维数组的定义方式为:类型说明符数组名[常量表达式];注意定义数组时,元素个数不能是变量。因此应该选B选项。38、下列选项中,不属于数据模型所描述的内容的是()。A、数据类型B、数据操作C、数据结构D、数据约束标准答案:A知识点解析:数据模型描述的内容包含数据结构、数据操作和数据约束。39、有以下程序#include<stdio.h>main(){intx[]={8,2,6,12,5,15},f1,f2;int*p=x;f1=f2=x[0];for(;p<=x+5;p++){if(f1<*p)f1=*p;if(f2>*p)f2=*p;}printf("%d,%d\n",f1,f2);}程序的运行结果是A、15,2B、15,15C、2,15D、8,8标准答案:A知识点解析:本题的用意是求数组的最大值和最小值,首先把数组x首地址的值赋给指针p,故*p初始值为8,而p是地址值,p+1相当于数组中下一元素的地址,在for循环,是求数组x对应的最大值和最小值,f1为最大值,f2为最小值。因此输出为15,2,答案为A选项。二、程序填空题(本题共1题,每题1.0分,共1分。)40、给定程序中,函数fun的功能是:在形参ss所指字符串数组中,删除所有串长超过k的字符串,函数返回所剩字符串的个数。ss所指字符串数组中共有N个字符串,且串长小于M。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include<stdio.h>#include<string.h>#defineN5#defineM10intfun(char(*ss)[M],intk)(inti,j=0,len;/**********found**********/for(i=0;i<___1___;i++){len=strlen(ss[i]);/**********found**********/if(len<=___2___)/**********found**********/strcpy(ss[j++],___3___);}returnj;}main(){charx[N][M]={"Beijing","Shanghai","Tianjing","Nanjing","Wuhan"};inti,f;printf("\nTheoriginalstring\n\n");for(i=0;i<N;i++)puts(x[i]);printf("\n");f=fun(x,7);printf("Thestringwitchlengthislessthanorequalto7:\n");for(i=0;i<f;i++)puts(x[i]);printf("\n");}标准答案:(1)N(2)k(3)ss[i]知识点解析:本题中函数fun的功能是在形参ss所指字符串数组中,删除所有串长超过k的字符串,然后函数返回所剩字符串的个数。根据题意,在fun函数中,利用for循环比较字符串长度是否小于k,然后利用sWcpy函数组成新的可用字符串数组,将可用的字符串数组的长度值进行返回,即为字符串的个数。第一空:“for(i=0;i<___1___;i++)”,这一空部分出现在fun函数中的for循环条件中,在定义了i之后i的条件。根据for后面的语句我们可以看出,这里是要进行比较,比较对象是ss所指字符串数组的所有字符串,所以这里循环要进行整改字符串数组的长度,相应的,这里for循环的循环条件就要是i小于字符串长度,而字符串长度开始就有定义,为N,所以这里应该是i<N,这一空应该填N。第二空:“if(len<=___2___)”,这一空部分出现在fun函数中,是for循环中if条件语句的条件,这根据if条件语句后面的语句我们可以知道,这里的条件语句是后面strcpy的执行条件,而strcpy要执行,根据题目给出的条件我们可以知道是要字符串长度小于等于k才能保留,所以这里的if条件语句中的条件应该是字符串长度小于k,所以这一空应该填k。第三空:“strcpy(ss[j++]___3___);”这一空部分出现在strcpy函数中,此函数为字符串复制函数,是将后面的一个字符串复制到前面一个字符数组中去,根据题意和前面的条件语句,这一行语句是要将符合条件的字符串重新组成一个新的字符串数组,然后返回新数组的长度,这样的话就能知道ss啪为新字符串数组,而这里要复制的就是原字符串数组中符合条件的字符串,所以这里要填就是前面符合条件的i所对应的字符串,所以这一空应该填ss[i]。三、程序修改题(本题共1题,每题1.0分,共1分。)41、给定程序MODI1.C中函数fun的功能是:逐个比较p、q所指两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到c所指数组中,形成一个新的字符串。例如,若主函数中a字符串为:aBCDeFgH,主函数中b字符串为:ABcd,则C中的字符串应为:aBcdeFgH。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#include<stdio.h>#include<string.h>voidfun(char*p,char*q,char*c){/**********found**********/intk=1;/**********found**********/while(*p!=*q){if(*p<*q)c[k]=*q;elsec[k]=*p;if(*p)p++;if(*q)q++;k++;}}main(){chara[10]="aBCDeFgH",b[10]="ABcd",C[80]={’\0’};fun(a,b,c);printf("Thestringa:");puts(a);printf("Thestringb:");puts(b);printf("Theresult:");puts(c);}标准答案:(1)intk=1改为intk=0;(2)(*p!=*q)改为(*p‖*q);知识点解析:本题中函数fun的功能是:逐个比较p、q所指两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到c所指数组中,形成一个新的字符串。While循环为字符串比较的提供前提条件,然后再比较得到p、q两个字符串一一对应的符合条件中可用的一个字符,最终合并得到新的字符串c。(1)第一个错误在fun函数最开始定义的k的初始值。根据fun函数的功能我们可以知道这里k是新字符串c各字符的位置,然后根据比较结果一一对应新字符串个位置的字符。这里犯了一个明显的错误就是:从字符串的第一个字符比较,得到的第一个字符在字符串中的位置不是c[1]而是c[0],所以k的初始值不是1,而是0。所以这里第一个改错是将1改为0。第二个错误在while循环的条件表达式,我们要知道的是while循环条件和if循环条件的区别。if的条件为开始条件,即符合这条件开始循环,而这里while的循环条件则是为终止条件,意思是下面括号内的循环进行到不符合while条件语句时终止,所以这里很明显错误,如果是这种条件的只要两个字符串中出现相同的字符即终止,以例子来说就是到第二个字符比较久终止,很明显不符合题意。所以为了完全比较这两个字符串,给出的终止条件应该是到两个字符串都结束,即两个字符串字符都为“’\0’”时终止,所以终止条件应该为“*p‖*q”。四、程序设计题(本题共1题,每题1.0分,共1分。)42、假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导的*号之外,将串中其它“*”号全部删除。在编写函数时,不得使用C语言提供的字符串函数。函数fun中给出的语句仅供参考。例如,字符串中的内容为:****A*BC*DEF*G*******,删除后字符串中的内容应当是:****ABCDEFG。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include<stdio.h>voidfun(char*a){/*以下代码仅供参考*/inti=0,k;while(a[i]==’*’)i++;k=i;while(a[i]!=’\0’)/*以下程序段实现非*字符前移*/{}a[k]=’\0’;}main(){chars[81];voidNONO();printf("Enterastring:\n");gets(s);fun(s);printf("Thestringafterdeleted:\n");puts(s);NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;inti;chars[81];in=fopen("in.dat","r");out=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(in,"%s",s);fun(s);fprintf(out,"%s\n",s);}folkose(in);fclose(out);}标准答案:voidfun(char*a)(inti=0,k;while(a[i]==’*’)i++;k=i;while(a[i]!=’\0’){if(a[i]!=’*’)a[k++]=a[i];i++;}a(k]=’\0’;}知识点解析:本题所需要的功能是是处理一个输入的只含字母和“*”的字符串,除了字符串前导的“*”号之外,将串中其它“*”号全部删除。并且在编写函数时,不得使用C语言提供的字符串函数。这里根据题意,很快我们就知道需要使用循环语句和条件语句来进行功能的实现。第一步要自己输入字符串,这就需要格式输入函数;第二步就要进行功能函数了,这里的就要一开始是否有“*”的存在,有多少个“*”,这个是很重要的判断。因为根据题意虽然是要删除“*”,但是字符串前面的“*”是不用删除的,无论有多少个都不能删除,然后当没有“*”或者跳过字符串前面“*”后,就要到达第一个字母了,字母保留,然后后面遇见“*”就删除,依次循环进行下去,一直到字符串结束,这些功能的实现就需要条件语句和循环语句的使用了;第三步将处理过后的字符串输出,得到新的字符串,程序就可以结束了。本题主函数中需要输入一个字符串,然后进入fun函数处理字符串,在fun函数中,就要实现题目要求我们写出的功能了。首先是判断字符串的开始是否为“*”,这里就用到while函数(这里因为有步骤的区别,所以这里用while比用if好),判断开始的字符是否为“*”,见程序第5~6行,这里需要顺次进行,因为开始无论有多少个“*”都不用删除,当出现字母时,就开始下一步了,因为已经出现了字母,所以后面出现的“*”一律删除,而字母时不用管的,所以这里就又需要if条件语句来判断是否为“*”然后赋值为空,见程序第9~12行,当程序进行到字符为空时代表字符串结束,程序就终止,这里就要用到while条件语句进行终止判断,见程序第7行。这样循环进行就能保留字符串前面的“*”并且删除后面出现的所有“*”了,然后fun函数执行完成就可以转到主函数中进行新字符串的输出了。国家二级(C语言)机试模拟试卷第2套一、选择题(本题共40题,每题1.0分,共40分。)1、假定已建立以下数据链表结构,且指针p和q已指向如下图所示的结点:则以下选项中可将q所指结点从链表中删除并释放该结点的语句是()。A、(*)p.next=(*q).next;free(p)B、b=q—>next;free(q)C、p=q;free(q)D、p—>next=q—>next;free(q)标准答案:D知识点解析:要删除结点q,应首先由q的上一个结点p的指针域指向q的指针域所指向的结点,即p—>next=q—>next;,然后才能释放结点q,即free(q)。2、若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是()。A、函数调用可以作为独立的语句存在B、函数调用可以作为一个函数的实参C、函数调用可以出现在表达式中D、函数调用可以作为一个函数的形参标准答案:D知识点解析:本题考查函数调用的有关知识点。函数调用①可以出现在表达式中;②可以作为独立的语句存在;③可以作为一个函数的实参。3、以下数组定义中错误的是()。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]定义的是一个两行三列的二维数组,而在给数组元素赋值时却赋成了三行,所以错误。4、请阅读以下程序:#include#includevoidfun(intb[])main(){staticinti=0;{intk,a[5]={1,3,5,4,9};Do{b[i]+=b[i+1];fun(a);}while(++i<2);}for(k=0;k<5;k++)printf("%d",a[k]);}上面程序的输出是()。A、13579B、48579C、48549D、48999标准答案:C知识点解析:本题考查的是for循环以及while循环。fun函数中定义了静态变量i=0,fun(a)使得a[0]=a[0]+a[1]=4,a[1]=a[1]+a[2]=8,此时i的值变为1,++i<2不成立,所以do-while循环结束,输出数组a的各元素即得到48549。5、以下不正确的转义字符是()。A、’\\’B、’\d’C、’\s’D、’088’标准答案:D知识点解析:’\\’是反斜线符,’\d’是整型变量转义字符,’\s’是字符串型转义字符,C语言中没有规定’088’为转义字符。6、若语句“t=fun(fun(x,y,a),(a+b,a+c),x+y+z);”对fun函数的调用正确,则fun函数的形参个数为()。A、3B、4C、5D、6标准答案:A知识点解析:本题考查函数调用时的参数个数。在函数调用时,实参必须和形参的个数、类型一一对应,但函数的计算结果只有一个值,因而fun函数的参数个数为3。7、若x=2,y=3,则x&y的结果是()。A、0B、2C、3D、5标准答案:B知识点解析:本题主要考查按位与(&)运算的知识点。“&”是对两个运算量相应的位进行逻辑与,“&”的规则与逻辑与“&&”相同。x=2的二进制为00000010,y=3的二进制为00000011,x&y=00000010,转化为十进制即为2。8、已知一个文件中存放若干工人档案记录,其数据结构如下:structa{charnumber[100];intage;floatp[6];};定义一个数组:structanumber[10];假定文件已正确打开,不能正确地从文件中读入10名工人数据到数组b中的是()。A、fread(b,sizeof(structa),10,fp);B、for(i=0;i<10;i++)fread(b[i],sizeof(structa),1,fp);C、for(i=0;i<10;i++)fread(b+i,sizeof(structa),1,fp);D、for(i=0;i<5;i+=2)fread(b+i,sezeof(structa),2,fp);标准答案:B知识点解析:数据块输入/输出函数的调用形式为:fread(buffer,size,count,fp)。fread函.数参数说明:“buffer”是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。“size”是要读写的字节数;“count”是要进行读写多少个size字节的数据项;“fp”是指文件型指针。选项B)中b[i]是一个数组,不是指针,需改为&b[i]。注意:完成一次读操作(fread())后,如果没有关闭流(felose()),则指针(FILE*fp)自动向后移动前一次读写的长度,不关闭流则继续下一次读操作,接着上次的输出继续输出。9、检查软件产品是否符合需求定义的过程称为()。A、确认测试B、需求测试C、验证测试D、路径测试标准答案:A知识点解析:确认测试的任务是验证软件的功能和性能,以及其他特性是否满足需求规格说明中确定的各种需求。10、有下列程序:main(){intm,n,p;scanf("m=%dn=%dp=%d",&m,&n,&p);printf("%d%d%d\n",m,n,p);}若想从键盘上输入数据,使变量m中的值为123,n中的值为456,P中的值为789,则正确的输入是()。A、m=123n=456p=789B、m=123n=456p=789C、m=123,n=456,p=789D、123456789标准答案:A知识点解析:scanf()函数中格式控制字符串是为了输入数据用的,无论其中有什么字符,在输入数据时,按照一一对应的位置原样输入这些字符。11、当a=4,b=5,c=7,d=6时,执行下面一段程序:if(a<b)if(c<d)x=1;elseif(a<c)if(b<c)x=2;elsex=3;elsex=4;elsex=5;程序执行后,x的值为()。A、1B、2C、3D、4标准答案:B知识点解析:本题考查ifelse语句。第一个if语句,先判断条件,a<b成立,则执行下面的语句:第二个if语句,先判断条件,e<d不成立,则执行其对应的else语句:第三个if语句,先判断条件,a<c成立,执行其后语句;第四个if语句,先判断条件,b<c成立,执行语句x=2。12、在C浯言程序中,以下说法正确的足()。A、函数的定义和函数的调用均不可以嵌套B、函数的定义不可嵌套,但函数的调用可以嵌套C、函数的定义可以嵌套,但函数的调用不可以嵌套D、函数的定义和函数的调用均可以嵌套标准答案:B知识点解析:本题考查函数调用的基本概念。因为函数的结果是一个未知量,而函数定义时不能使用未知量,所以函数定义不可以嵌套,但是函数调用可以嵌套。13、以下关于宏的叙述中正确的是()。A、宏替换没有数据类型限制B、宏定义必须位于源程序中所有语句之前C、宏名必须用大写字母表示D、宏调用比函数渊用耗费时间标准答案:A知识点解析:宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头,所以B选项中宏定义必须位于源程序中所有语句之前是错误的。宏名一般用大写,但不是必须用大写,所以C选项错误。宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值),所以D选项错误。14、若有“doublea;”,则正确的输入语句是()。A、scanf(’’%1f’’,a);B、scanf(’’%f’’,&a);C、scanf(’’%lf’’,&a);D、scanf(’’%le’’,a);标准答案:C知识点解析:scanf函数的调用形式是:scanf(“格式字符串”,输入项地址表)。其中,“格式字符串”是要输入的变量的格式符;“输入项地址表”是要输入的变量的地址。a是double型数据,格式字符串可以用“%1f”,“%f”是浮点型。题中定义变量a为双精度型变量,双精度变量的格式符为“%1f”;变量的地址用取地址符“&”加变量名表示,变量a的地址为“&a”。15、有如下程序#includemain(){char*p1=0;int*p2=0;double*p3=0;printf("%d,%d,%d\n",sizeof(p1),sizeof(p2),sizeof(p3));}程序运行后的输出结果是()。A、4,4,4B、1,4,8C、0,0,0D、1,2,4标准答案:A知识点解析:不可以把一个int型数据直接赋值给一个指针变量,只能用取地址运算符"&"把该整型变量的地址赋值给该指针变量,选项A)错误;函数类型若为指针类型则可以返回地址值,选项B)正确;函数传参过程中,是把实参的数据复制一份传给形参,所以改变形参的值不会对实参造成影响,选项C)正确;NULL的定义包含在头文件stdio.h中,所以选项D)正确;所以答案选A)。16、有以下程序:#includemain(){FILE*pf;char*s1=“China”,*s2=”Beijing”;pf=fopen(“abc.dat”,“wb+”);fwrite(s2,7,1,pf);rewind(pf);/*文件位置指针同到文件开头*/fwrite(s1,5,1,pf);fclose(pf);}以上程序执行后abc.dat文件的内容是()。A、ChinaB、ChinangC、ChinaBeijingD、BeijingChina标准答案:B知识点解析:本题考查文件操作函数,fwrite和rewind函数,题目中先是将s2字符串写入adc.dat中,然后将写指针回到文件开头,然后写入s1字符串,那么s1字符串就将前5个字符覆盖,所以最终结果为Chinang,选项B正确。17、下列叙述中正确的是()。A、线性表的链式存储结构与川页序存储结构所需要的存储空间是相同的B、线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构C、线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构D、线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性标准答案:B知识点解析:线性链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以一般要多于顺序存储结构。18、下列选项中,不属于数据管理员(DBA)职责的是()。A、数据库维护B、数据库设计C、改善系统性能,提高系统效率D、数据类型转换标准答案:D知识点解析:数据库管理员(DataBaseAdministrator,DBA)是指对数据库的规划、设计、维护、监视等的人员,其主要工作如下:数据库设计。DBA的主要任务之一是数据库设计,具体地说是进行数据模式的设计;数据库维护。DBA必须对数据库中的数据安全性、完整性、并发控制及系统恢复、数据定期转储等进行实施与维护;改善系统性能,提高系统效率。DBA必须随时监视数据库的运行状态,不断调整内部结构,使系统保持最佳状态与效率。19、若变量已正确定义,则以下语句的输出结果是()。s=32:s^=32;printf("%d",s);A、-1B、0C、1D、32标准答案:B知识点解析:本题考查逻辑异或运算。异或运算只有在两个比较的位不同时其结果是1,否则结果为0,题目中两个值相同,所以结果为0。20、以下选项中正确的语句组是()。A、char*s;S={“BOOK!”};B、char*s;s=“BOOK!”;C、chars[10];s=“BOOK!”;D、chars[];s=“BOOK!”;标准答案:B知识点解析:A选项去掉大括号就正确了;C选项和D选项应在定义时赋初值。因此B选项正确。21、定义如下变量和数组:inti,x[3][3]={1,2,3,4,5,6,7,8,9};则下面语句的输出结果是()。for(i=0;i<3;i++)printf(’’%d’’,x[i][2-i]);A、159B、147C、357D、369标准答案:C知识点解析:本题主要考查二维数组的使用。题中利用for循环来输出x数组中的指定元素:①当i=0时,输出x[0][2]=3;②当i=1时,输出x[1][1]=5;③当i=2时,输出x[2][0]=7。22、若有以下程序:#includemain(){inta=1,b=2,c=3,d=4,r=0;if(a!=1);elser=1;if(b==2)r+=2;e]se;if(c!=3)r+=3;else;if(d==4)r+=4;printf("%d\n",r);}则程序的输出结果是()。A、10B、7C、6D、3标准答案:B知识点解析:else总是和与之最近的if配对,执行第一个if,判断条件不成立,执行elser=1;语句。再执行第二个if语句中的判断条件,成立,左移执行r+=2,r的值为3,再执行第三个if的判断条件,不成立,执行第7行else后面的空语句“;”。再执行第四个if的判断条件d==4成立,执行r+=4,r的值为7。然后打印输出。23、若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是()。A、函数的形参和实参分别占用不同的存储单元B、形参只是形式上的存在,不占用具体存储单元C、同名的实参和形参占同一存储单元D、函数的实参和其对应的形参共占同一存储单元标准答案:A知识点解析:本题重点考察的是函数的形参和实参。在定义函数时函数名后面括弧中的变量名称为“形式参数”(简称形参),在主调函数中调用一个函数时,函数名后面括弧中的参数(可以是一个表达式)称为“实际参数”(简称实参)。C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元。因此A选项正确。24、有以下程序:#includemain(){inta[4][4]={{1,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}};inti,j,k,t;for(i=0;i<4;i++)for(j=0;j<3;j++)for(k=j+1;k<4;k++)if(a[j][i]>a[k][i]){t=a[j][i];arj][i]=a[k][i];a[k][i]=t;}/*按列排序*/for(i=0;i<4;i++)printf("%d,",a[i][i]);}程序运行后的输出结果是()。A、1,6,2,1,B、8,7,3,1,C、4,7,5,2,D、1,6,5,7,标准答案:D知识点解析:首先对二维数组进行赋值操作,a[0][0],a[0][1],…,a[3][2],a[3][3]的值为l,4,…,6,1。通过for语句和if语句,对二维数组各列元素进行由小到大的排序操作,程序最后通过for语句输出二维数组对角线上的元素。因此D选项正确。25、有以下程序:#includemain(){intx=0x13:if(x=0x12)printf("True");printf("False\n");}程序运行后的输出结果是()。A、TrueB、TrueFalseC、FalseD、TrueFalseTrue标准答案:B知识点解析:if(x=0x12)条件语句为赋值语句,注意赋值操作符“=”与相等操作符“==”的区别,条件成立,输出True;退出条件语句,输出False。26、有以下程序:#include<stdio.h>#defineN5#defineMN+l#definef(x)(x*M)main(){inti1,i2:i1=f(2):i2=f(1+1);printf("%d%d\n",i1,i2);}程序运行后的输出结果是()。A、127B、1212C、1111D、117标准答案:D知识点解析:本题考查宏定义的用法,宏定义只是做个简单的替换,所以本题中执行f(2)=(2*N+1)=11,执行f(1+1)=(1+1*N+1)=7。选项D正确。27、若变量已正确定义,有以下程序段i=0;doprintf("%d,",i);while(i++);printf("%d\n",i);其输出结果是A、0,1B、0,0C、1,1D、程序进入无限循环标准答案:A知识点解析:第一次首先先执行循环体打印i的值0,然后判断while的条件i++,先用后自增,所以判断时条件为假,跳出循环,但是仍执行了i的自增操作,i的值为1,在接下来的打印语句中进行打印。28、有以下程序#includevoidfun(int*s,intn1,intn2){inti,j,t;i=n1;j=n2;while(iA、5678901234B、0987654321C、4321098765D、0987651234标准答案:A知识点解析:暂无解析29、有以下程序:#include#defineN4voidfun(inta[][N],intb[]){inti;for(i=0;i<N;i++)b[i]=a[i][i]一a[i][N一1一i];}main(){intx[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},y[N],i;fun(x,y);for(i=0;i<N;i++)printf(’’%d,’’,y[i]);printf(’’\n’’);}程序运行后的输出结果是()。A、一3,一1,1,3B、-12,-3,0,0C、0,1,2,3D、一3,一3,一3,一3标准答案:A知识点解析:本题中由fun函数可知,b[0]=a[0][0]一a[0][3]=1一4=一3,b[1]=a[1][1]-[1][2]=6—7=一1,b[2]=a[2][2]-[2][1]=11—10=1,b[3]=a[3][3]一[3][1]=16一13=30所以主函数中打印y数组元素的值为A选项。30、有如下程序#includemain(){inti,data;seallf(“%d”,&data)for(i=0;i<5;i++){if((idata&&i%3==0))continue;printf(“%d,”,i);}}程序运行时,从键盘输入:13<回车>后,程序输出结果为()。A、0,2,4,B、1,3,5,C、0,1,2,3,4,5,D、0,1,2,3,标准答案:A知识点解析:程序通过scanf()函数,输入data的值13,for循环中,i的值遍历0~4,对每个i的值执行if语句判断,其中:i>data始终为假;所以表达式i>data&&i%3==0始终为假;所以if语句的判断条件需要看i31、有以下程序:#include#defineM6#defineg(x)(x*M)main(){intm,n,k=1;m=g(k+1);n=g(2);printf(’’%d,%d\n’’,m,n);}程序运行后的输出结果是()。A、7,12B、12,12C、7,11D、7,7标准答案:A知识点解析:宏定义一定要先代入再计算表达式的值,m=(k+1*6)=(1+6)=7;n=(2*6)=12。32、下列叙述中正确的是()。A、线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构B、线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的C、线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构D、线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性标准答案:A知识点解析:线性表的链式存储结构会有一个额外的指针来指向下一个结点,所以其所需要的存储空间一般要多于顺序存储结构。33、有以下程序#include<stdio.h>inta=2;intf(){staticintn=0;intm=0;n++;a++;m++;returnn+m+a;}main(){intk;for(k=0;k<3;k++)printf("%d,",f());printf("\n");}程序的运行结果是A、5,7,9,B、5,6,7,C、5,8,11,D、5,5,5,标准答案:A知识点解析:static变量又称为静态变量,编译时,将其分配在内存的静态存储区中,在整个程序运行期间都不释放这些存储单元,即使退出函数,下次再进入该函数时,静态局部变量仍使用原来的存储单元,值是上一次函数调用结束时的值。若定义时未赋初值,在编译时,系统自动赋初值为0;若定义时赋初值,则仅在编译时赋初值一次,程序运行后不再给变量赋初值。程序执行过程为:k=0,a=2,n=0,m=0;n=1,a=3,m=1,返回5;k=1,a=3,n=1,m=0;n=2,a=4,m=1,返回7;k=2,a=4,n=2,m=0;n=3,a=5,m=1,返回9;k=3退出循环。A选项正确。34、在C语言程序中,以下说法正确的是()。A、函数的定义和函数的调用均不可以嵌套B、函数的定义不可嵌套,但函数的调用可以嵌套C、函数的定义可以嵌套,但函数的调用不可以嵌套D、函数的定义和函数的调用均可以嵌套标准答案:B知识点解析:本题考查函数调用的基本概念。因为函数的结果是一个未知量,而函数定义时不能使用未知量,所以函数定义不可以嵌套,但是函数调用可以嵌套。35、下列程序的运行结果是()。#include<stdio.h>voidmain()voidfun(int*s,int*p){inta[]={2,3,4,5},k,x;{staticintt=3;for(k=0;k<4;k++)*p=s[t];{fun(a,&x);t--;}printf(“%d,”,x);}}A、5,4,3,2,B、2,3,4,5,C、2,2,2,2,D、5,5,5,5,标准答案:A知识点解析:分fun函数程序段,可知fun函数要实现的功能是将s中第(t+1)个元素前面(含该元素)的元素逆置赋给数组p。由于fun函数定义了静态变量t=3,因此,在主函数中调用函数fun(a,&x)时,就是将数组a中前4个元素逆置赋给数组x,最后输出x数组。36、有以下程序#include<stdio.h>structtt{intx;structtt*y;}s[3]={1,0,2,0,3,0};main(){structtt*p=s+1;p->y=s;printf("%d,",p->x);p=p->y;printf("%d\n",p->x);}程序运行后的输出结果是A、2,3B、2,1C、1,2D、3,1标准答案:B知识点解析:结构体tt是一个递归定义,类似于链表,通过成员变量y链接起来。p=s+1指向s[1]。p->y指向s[2],但现在p->y=s,因此s[2]=s[0],此时s[]={1.0,2.0,1.0},而p在s[1]位置,因此p->x为2,p=p->y,p指向s[2],因此p->x=1,故打印结果为2,1。答案为B选项。37、软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下面属于系统软件的是A、学籍管理系统B、ERP系统C、C编译程序D、CAI软件标准答案:C知识点解析:计算机软件按功能分为应用软件、系统软件、支撑软件(或工具软件)。系统软件是管理计算机的资源,提高计算机的使用效率,为用户提供各种服务的软件。应用软件是为了应用于特定的领域而开发的软件。支撑软件介于系统软件和应用软件之间,协助用户开发软件的工具型软件,其中包括帮助程序人员开发和维护软件产品的工具软件,也包括帮助管理人员控制开发进程和项目管理的工具软件,如Dephi、PowerBuilder等。选项C属于系统软件,选项A、B、D属于应用软件,故选C选项.38、医生可以为病人开不同的药,而同一种药也可由不同医生开给病人,则实体医生和实体药之间的联系是A、多对多B、一对一C、多对一D、一对多标准答案:A知识点解析:实体集之间通过联系来建立联接关系分为三类:一对一联系(1:1)、一对多联系(1:m)、多对多联系(m:n)。由于医生可以为病人开不同的药,而同一种药也可由不同医生开给病人,所以两者的联系属于多对多。故选A选项39、有以下程序:#include<stdio.h>main(){ints,t,A=10;doubleB=6;s=sizeof(A);t=sizeof(B);printf("%d,%d\n",s,t);}在VC6.0平台上编译运行,程序运行后的输出结果是()。A、10,6B、4,4C、2,4D、4,8标准答案:D知识点解析:C语言中利用sizeof()函数判断数据类型长度,在VC6.0平台中,整型int占有4个字节,double型数据占有8个字节。40、以下程序的输出结果是()。#include<stdio.h>main(){inta[3][3]={0,1,2,0,1,2,0,1,2},i,j,s=1;for(i=0;i<3.i++)for(j=i,j<=i0++)s+=a[i][a[j][j];printf("%d\n",s);}A、3B、4C、1D、9标准答案:B知识点解析:当外层循环为i时,内层循环j只能取j=i,所以s+=a[i][a[j][j]],其实就是s+=a[i][a[i][i]],当i=0时,s=s+a[0][a[0][0]]=s+a[0][0]=1,当i=1时S=S+a[1][a[1][1]]=s+a[1][1]=1+1=2,当i=2时,s=s+a[2][a[2][2]]=s+a[2][2]=2+2=4。二、程序填空题(本题共1题,每题1.0分,共1分。)41、下列给定程序中,函数fun的功能是:把形参a。所指数组中的奇数按原顺序依次存放到a[0]、a[1]、a[2]…中,把偶数从数组中删除,奇数个数通过函数值返回。例如,若a所指数组中的数据最初排列为:9,1,4,2.3,6,5,8,7,删除偶数后a所指数组中的数据为:9,1,3,5,7,返回值为5。请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#inClude#defineN9intfun(intta[],intn){inti,j;j=0;for=0;i标准答案:(1)1(2)j++(3)j知识点解析:填空1:根据题意要保留奇数删除偶数,if语句用来判断数组元素是否为奇数,奇数不能被2整除,所以填入if([i]%2=1)。填空2:将奇数赋值给数组元素,数组下标递增。填空3:数组中奇数的个数通过函数返回值返回,所以填入j。三、程序修改题(本题共1题,每题1.0分,共1分。)42、已知一个数列从第0项开始的前三项分别为0,0,1,以后的各项都是其相邻的前三项之和。给定程序MODI1.C中函数fun的功能是:计算并输出该数列前n项的平方根之和。n的值通过形参传入。例如,当n=10时,程序的输出结果应为:23.197745。请改正程序中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#include/**********found**********/fun(intn){doublesum,s0,s1,s2,s;intk;sum=1.0;if(n<=2)sum=0.0;s0=0.0;s1=0.0;s2=1.0;for(k=4;k<=n;k++){s=s0+s1+s2;sum+=sqrt(s);s0=s1;s1=s2;s2=s;}/**********found**********/returnsum}main(){intn;printf("InputN=");Scanf("%d",&n);printf("%f\n",fun(n));}标准答案:(1)doublefun(intn)(2)returnsum;知识点解析:(1)第一个错误标识下fun函数的定义根据题干要返回前n项的平方根之和,函数具有返回值,所以“fun(intn)”应改为“doublefun(intn)”,其中double为双精度型变量。(2)第二个标识符下返回平方根之和,根据C语言语法每一句C语言后面应该以“;”为结尾,所以“retumsum”改为“r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房屋买卖合同签订签订签订技巧
- 维修机械设备合同协议
- 建筑工地安全承包合同
- 招标公告信息格式
- 个人借款合同协议示例
- 设计服务合同精准模板
- 云计算技术研发合同
- 软件授权变更协议格式
- 育儿嫂服务合同的续约与终止流程解读
- 服务外包合同争议的解决策略
- 2024-2030年中国食品安全行业运营模式及发展战略规划分析报告
- 基于核心素养长链条培养的小学科学与初中物理的衔接研究
- 《新媒体视角下古镇旅游营销策略探究:以苏州同里古镇为例》开题报告4100字
- 诺如病毒的护理查房
- 2024年高考真题-文综政治(全国甲卷) 含解析
- 七年级数学期中模拟卷【测试范围:七上第1-3章】(冀教版2024)
- (统编版2024)语文七年级上册 第四单元 《阅读综合实践 》 课件(新教材)
- 建筑物拆除人员安全教育考核试卷
- 《智能网联汽车智能传感器测试与装调》电子教案
- 关注合规经营的年度措施计划
- 智能财务管理利用人工智能进行企业财务管理考核试卷
评论
0/150
提交评论