国家二级(C语言)机试模拟试卷7(共340题)_第1页
国家二级(C语言)机试模拟试卷7(共340题)_第2页
国家二级(C语言)机试模拟试卷7(共340题)_第3页
国家二级(C语言)机试模拟试卷7(共340题)_第4页
国家二级(C语言)机试模拟试卷7(共340题)_第5页
已阅读5页,还剩96页未读 继续免费阅读

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷7(共9套)(共340题)国家二级(C语言)机试模拟试卷第1套一、选择题(本题共39题,每题1.0分,共39分。)1、数据库技术的根本目标是()。A、数据存储B、数据共享C、数据查询D、数据管理标准答案:B知识点解析:数据库是长期储存在计算机内、有组织的、可共享的大量数据的集合,它具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序所共享,所以数据库技术的根本目标是解决数据共享问题。2、有以下程序:main(){intk=33;printf("%d,%o,%x",k,k,k);}执行后的输出结果是()。A、33,033,0x21B、33,033,21C、33,041,021D、33,41,21标准答案:D知识点解析:本题考查不同进制间的转换。printf输出函数中输出变量的格式,由输出格式符决定。题中“%o”格式符表示以八进制的形式输出;“%x”格式符表示以十六进制的形式输出。“33”的八进制和十六进制分别是41和21。3、有以下程序:#includemain(){intx=1,y=0,a=0,b=0;switch(x){ease1:switch(y){ease0:a++;break;case1:b++;break;}ease2:a++;b++;break;ease3:a++;h++;}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知识点解析:case常量表达式只是起语句标号作用,并不是该处进行条件判断。在执行switch语句时,根据switch的表达式,找到与之匹配的case语句,就从此case子句执行下去,不在进行判断,直到碰到break或函数结束为止。所以执行内层switch(y)时只执行了a++,此时a的值为1。然后执行外层case2语句的a+十;b++;a为2,b为1。所以结果为B。4、以下程序的输出结果是()。#includemain(){inta=8,b=6,m=1;switch(a%4){case0:m++;break;case1:m++:switch(b%3){default:m++;case0:m++:break;}}printf(“%d\11”,m);}A、1B、2C、3D、4标准答案:B知识点解析:本题考查switch语句。因为a=8,a%4=0,所以执行case0后面的语句,将m加1,遇到break语句跳出SWitch。5、若输入bcdefgh、m、abcdefg,以下程序的输出结果为()。#include#includemain(){inti;charstring[20],str[3][20];for(i=O;i<3;i++)gets(str[i]);if(strcmp(str[0],str[1])>0)strcpy(string,str[0]);elsestrcpy(string,str[1]);iffstrcmp(str[2],string)>0)strcpy(string,str[2]);printf("/os",string);}A、bcdefghB、mC、abcdefgD、bcdefgh或abcdefg标准答案:B知识点解析:本题考查字符比较函数和字符复制函数:strcmp(s1,s2);函数功能:比较字符串str1和str2比较的是字符的ASCII码的值,当str1str2,返回值为正数。6、己知函数的调用形式:fread(buffer,size,count,fp);其中buffer代表的是()。A、一个整型变量,代表要读入的数据项总数B、一个文件指针,指向要读的文件C、一个指针,是指向的输入数据放在内存中的起始位置D、一个存储区,存放要读的数据项标准答案:C知识点解析:数据块输入/输出函数的调用形式为:ffead(buffer,size,count,fp))。ffead函数参数说明:“buffer”是一个指针,对fread来说,它是读入数据的存放地址;“size”是要读写的字节数;“count”是要进行读写多少个size字节的数据项;“fp”是指文件型指针。7、设变量x和y均已正确定义并赋值,以下if语句中,在编译时将产生错误信息的是()。A、it(x++);B、if(x>y&&y!=0);C、ifi(x>y)x-elsey++;D、if(y<0){;}elsex++;标准答案:C知识点解析:选项C)中,if(x>y)后面的“x一”是一个表达式而不是一个语句,所以在编译时会产生错误信息。8、若有定义intx,y;并已正确给变量赋值,则以下选项中与表达式(x-y)?(x++):(y++)中的条件表达式(x-y)等价的是()。A、(x-y<0||x-y>0)B、(x-y<0)C、(x-y>0)D、(x-y==0)标准答案:A知识点解析:条件表达式:x=表达式17表达式2:表达式3的含义是:先求解表达式1,若为非0(真),则求解表达式2,将表达式2的值赋给x。若表达式1的值为0(假),则求解表达式3,将表达式3的值赋给x。在本题中与表达式1:(x-y)等价的是(x-y<0||x-y>0)。9、数据结构中,与所使用的计算机无关的是数据的()。A、存储结构B、物理结构C、逻辑结构D、线性结构标准答案:C知识点解析:数据的逻辑结构反映的是数据元素之间的逻辑关系,与使用的计算机无关。10、以下关于long、int和short类型数据占用内存大小的叙述中正确的是()。A、均占4个字节B、根据数据的大小来决定所占内存的字节数C、由用户自己定义D、由C语言编译系统决定标准答案:D知识点解析:不同的编译系统或计算机系统对几类整型数所占用的字节数有不同的规定。long、int和short类型数据占用内存大小是由选择何种c编译系统决定的。11、有以下程序:#include<stdio.h>main(){intx[3][2]={0},i;for(i=0;i<3;i++)scanf("%d",x[i]);printf("%3d%3d%3d\n",x[0][0],x[0][1],x[1][0]);}若运行时输入:246<回车>,则输出结果为()。A、204B、200C、240D、246标准答案:A知识点解析:本题中输入的3个数据2,4,6分别赋值给了x[0][0],x[1][0],x[2][0]。x[0][1]仍为初始时的0,所以打印输出时的结果为A)选项。12、若已定义:inta[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;其中0≤i≤9,则对a数组元素不正确的引用是()。A、a[p-a]B、*(&a[i])C、p[i]D、a[10]标准答案:D知识点解析:此题考查对一维数组的引用。对于已定义的数组a[M],数组元素的正确引用必须满足下标小于M且为正整数。选项D中下标值出现溢出。13、有以下程序:#include<stdio.h>structS{intn;inta[20];};voidf(int*a,intn){int1;for(i=0;i<n-1;i++)a[i]+=i;}main(){inti;struetSs={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,所以最终答案为C选项。14、若有代数式,(其中e仅代表自然对数的底数,不是变量),则下列能够正确表示该代数式的C语言表达式是()。A、sqrt(abs(n^x+e^x))B、sqrt(fabs(pow(n,x)+pow(x,e)))C、sqrt(fabs(pow(n,x)+exp(x)))D、sqrt(fabs(pow(x,n)+exp(x)))标准答案:C知识点解析:n和e的x幂次方,要分别调用C语言的数学库函数doublepow(n,x)和doubleexp(x),因为这两个函数的返回值都为double型,对两者的和计算绝对值,调用库函数doublefabs(pow(n,x)+exp(x)),求出和的绝对值,再调用开平方函数doublesqrt(fabs(pow(n,x)+exp(x))),这样计算出的结果就是题干中表达式的值。15、有下列程序,其中%u表示按无符号整数输出。main(){unsignedintx=0xFFFF;/*x的初值为十六进制数*/printf("%u\n",x);}程序运行后的输出结果是()。A、-1B、65535C、32767D、0xFFFF标准答案:B知识点解析:“%u”格式符表示以十进制形式输出无符号整形变量。本题中无符号整形变量x=0xFFFF表示的是十六进制无符号整型变量的最大值65535,所以最后输出的结果为65535。16、以下叙述中正确的是()。A、C语言比其他语言高级B、C语言可以不用编译就能被计算机识别执行C、C语言以接近英语国家的自然语言和数学语言作为语言的表达形式D、C语言出现的最晚,具有其他语言的一切优点标准答案:C知识点解析:此题考查的是C语言的基本特点。C语言是一种高级编程语言,但并不是比其他语言高级;C语言源程序必须经过编译生成目标文件才能被计算机识别执行;C语言出现比较晚,它既有优点也有缺点,而并不是具有其他一切语言的优点。17、设有以下语句:inta=1,b=2,c;13=a^(b<<2);执行后,c的值为()。A、7B、9C、8D、6标准答案:B知识点解析:b为2,二进制为00000010,执行左移两位操作后为00001000,然后与a00000001做异或操作结果为00001001,即十进制的9。18、若有定义和语句:inta,b;scanf("%d,%d,",&a,&b);以下选项中的输入数据,不能把值3赋给变量a、5赋给变量b的是()。A、3,5B、3,5C、3,5,D、3,5,4标准答案:A知识点解析:考查数据的输入,printf("%d,",b=a+b);先计算b=a+b,得出b=1,再输出b值。语句printf("%d\n",a=2*b);先计算a=2*b,得出a=2,再输出a值。所以输出结果为A)。19、已定义以下函数:intfun(int*p){return*p;}fun函数的返回值是()。A、一个整数B、不确定的值C、形参P中存放的值D、形参P的地址值标准答案:A知识点解析:返回值为指针变量指向的数据,该数据已被定义为整型。因此A选项正确。20、有以下程序:#include<stdio.h>voidfun(char*a,char*b){while(*a==’*’)a++;while(*b=*a){b++;a++;}}main(){char*s="*****a*b****".t[80];fun(s,t);puts(t);}程序的运行结果是()。A、a*b****B、a*bC、*****a*bD、ab标准答案:A知识点解析:注意两个while,第一个是判断相等“==”,第二个是赋值“=”,第一个循环终止的条件是指针指向的字符不为“*”,就会在遇到字符“a”时停止,第二个循环把a指针所指的内容依次赋给了b指针指向的内容,直到字符串结束时终止。所以结果就是字符串的后半段,选项A正确。21、以下叙述正确的是()。A、只能在循环体内和switch语句体内使用break语句B、contiune语句的作用是结束整个循环的执行C、在循环体内使用break语句或continue语句的作用相同D、从多层循环嵌套中退出时,只能使用goto语句标准答案:A知识点解析:本题考查循环的4个知识点:①break语句可以出现在循环体内及switch语句体内,不能用于其他的语句;②continue语句的作用是结束本次循环,即跳过循环体中下面尚未执行的语句,而接着转去判定循环条件是否成立,从而确定下一次循环是否继续执行,也就是说执行contiune语句不会使整个循环终止;③在循环体内使用break语句会使循环提前终止;④从多层循环嵌套中退出时,可以使用goto语句或者break语句。22、以下关于函数的叙述中正确的是()。A、函数形参的类型与返回值的类型无关B、函数必须要有形参C、函数必须要有返回值D、函数调用必须传递实参标准答案:A知识点解析:暂无解析23、以下选项中关于程序模块化的叙述错误的是()。A、可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序B、把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块C、把程序分成若干相对独立的模块,可便于编码和调试D、可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序标准答案:A知识点解析:程序模块化思想中,可以采用自顶向下、逐步细化的方法。所以选项A中“自底向上”的说法是错误的。24、结构化程序所要求的基本结构不包括()。A、顺序结构B、GOTO跳转C、选择(分支)结构D、重复(循环)结构标准答案:B知识点解析:1966年Boehm和Jacopini证明了程序设计语言仅仅使用顺序、选择和重复三种基本控制结构就足以表达出各种其他形式结构的程序设计方法。25、以下关于return语句的叙述中正确的是()。A、一个自定义函数中必须有一条return语句B、一个自定义函数中可以根据不同情况设置多条return语句C、定义成void类型的函数中可以有带返回值的return语句D、没有return语句的自定义函数在执行结束时不能返回到调用处标准答案:B知识点解析:在函数中允许有多个return语句,但每次调用只能有一个return语句被执行,因此只能返回一个函数值。定义成void类型的函数,不允许从该函数取得返回值,也不允许使用return语句,C选项描述错误。没有return语句的函数在执行到函数的最后一条语句后会自动返回到调用处,A、D选项描述错误。因此B选琐正确。26、有如下程序:#includestruetpair{intfirst,second;};struetpairget_min_max(int*array,intlen){inti;struetpairres;res.first=array[0];res.second=array[0];for(i=1;i<len;i++){if(array[i]<res.first)res.first=array[i];if(array[i]>res.second)res.second=array[i]:}returnres;}main(){intarray[5]={9,1,3,4};struetpairmin_max=get_min_max(array,5)printf("min=%d,max=%d\n",min_max.first,min_max.second);}程序运行后的输出结果是()。A、min=1,max=9B、min=0,max=9C、min=1,max=4D、min=0,max=4标准答案:B知识点解析:在对数组进行初始化时,如果在说明数组时给出了长度,但没有给所有的元素赋予初始值,那么C语言将自动对余下的元素赋初值0,则array[5]={9,1,3,4,0}。程序的执行过程为:调用函数get_min_max(array,5),将数组array的首地址传入函数,定义结构体变量res,并为其成员赋值。for循环查找数组array的最小值0,将其赋值给res的成员first,查找数组最大值9,并将其赋值给res的成员second。最后返回结构体变量res,则min_max=res。输出min_max.first=0,min_max.second=9。27、为了建立如图所示的存储结构(即每个结点含两个域,data是数据域,next是指向结点的指针域)则在()处填入的选项是()。strucflink{chardata;_______}node;A、structlink*next;B、linknext;C、link*next;D、strucflinknext;标准答案:A知识点解析:存储结构用链式存储。链式结构每个节点有个指针域,指针域指向下一个链式结构的节点,因此指针域的结构应该是该结构形式,因此应定义为structlink*next,故答案为A选项。struct是结构体的说明符,不能省略。28、以下叙述中正确的是()。A、int*p1;int**p2;int*p3;都是合法的定义指针变量的语句B、指针变量只能通过求地址运算符(&)来获得地址值C、语句p=NULL;与p=\0;是等价的语句D、语句p=NULL;执行后,指针p指向地址为0的存储单元标准答案:A知识点解析:暂无解析29、有以下程序:#includemain(){chars[][6]={-.abed“,”abe”,“ab”};inti;for(i-0;i<3;i++)puts(s[i]);}}执行后的输出结果是()。A、abedabeabB、aaaC、abedbedcD、dabc标准答案:A知识点解析:程序初始化一个二维数组,其中每个元素都是一个字符数组,for循环中使用字符串输出函数puts()打印二维数组中的每个元素,puts()接受字符数组名当做参数,将该字符数组存储的字符串打印出来,程序中s[0]存储的字符串是“abcd”,s[1]存储的字符串是“abc”,s[2]存储的字符串是“ab”,所以程序输出为:abcd、abc、ab,答案选A。30、有以下程序:#include<stdio.h>nlain(){FILE*fp;inti,a[6]={1,2,3,4,5,6},k;fp=fopen("datadat","w+b");fwite(&a[0],sizeof(int),1,fp);for(i=1;i<6;i++){fseek(fp,0L,0);fwrite(&a[i],sizeof(int),1,fp);}fseek(fp,0L,0);fread(&k,sizeof(int),1,fp);felose(fp);printf("%d\n",k);}程序运行后的输出结果是()。A、123456B、21C、6D、654321标准答案:C知识点解析:首先使用fopen函数以只写方式打开文件datAdat,返回文件指针fp然后通过调用Write函数,将起始地址为&a[0]、单位长度为sizeof(int)的一个元素写入文件,即写入a[0];接着for循环从数组a的第二个元素起,每次首先使用fseek()函数将指针fp定位到文件datAtdat的开始位置,写入起始地址&a[i]、单位长度为sizeof(int)的一个元素,即写入a[i];此时数组元素按照逆序写入文件:654321,盾环结束后,使用fseek()函数再将指针fp定位到文件开始位置,调用fread()函数,从fp所指位置读取单化长度为sizeo(int)的一个元素到变量k中,即k=6,最后调用fclose()函数关闭文件,输出k的值6,故答案为C。31、有以下程序#include<stdio.h>voidfun(char*p,intn){charb[6]="abcde";inti;for(i=0,p=b;i<n;i++)p[i]=b[i];}main(){chara[6]="ABCDE";fun(a,5);printf("%s\n",a);}程序运行后的输出结果是A、abcdeB、ABCDEC、edcbaD、EDCBA标准答案:B知识点解析:本题考查数组名作为函数参数,执行f函数时,传进去的a指针被重新指向了b,所以原本a数组的地址内容不变,所以输出结果为ABCDE,答案为B选项。32、有以下程序#include<stdio.h>voidfun(int*s){staticintj=0;dos[j]+=s[j+1];while(++j<2);}main(){inti,a[10]={1,2,3,4,5};for(i=1;i<3;i++)fun(a);for(i=1;i<5;i++)printf("%d",a[i]);printf("\n");}程序运行后的输出结果是A、34756B、5745C、5795D、35745标准答案:B知识点解析:本题主要考查do…while语句,执行fun函数后,a数组里面的元素变为35745,输出后四个字符,所以结果为5745,选项B正确。33、在C语言中,变量的隐含存储类别是()。A、autoB、staticC、extemD、无存储类别标准答案:A知识点解析:C语言中,变量的隐含存储类型为auto。34、若输入bcdefgh、m、abcdefg,以下程序的输出结果为()。#include<stdio.h>#include<string.h>main(){inti;charstring[20],str[3][20];for(i=O;i<3;i++)gets(str[i]);if(strcmp(str[0],str[1])>0)strcpy(string,str[0]);elsestrcpy(string,str[1]);if(strcmp(str[2],string)>0)strcpy(string,str[2]);printf("%s",string);}A、bcdefghB、mC、abcdefgD、bcdefgh或abcdefg标准答案:B知识点解析:本题考查字符比较函数和字符复制函数:strcmp(s1,s2);函数功能:比较字符串str1和str2比较的是字符的ASCII码的值,当str1<str2时,返回值为负数;当str1=str2时,返回0;当str1>str2,返回值为正数。35、下列叙述中错误的是A、算法的时间复杂度与算法所处理数据的存储结构有直接关系B、算法的空间复杂度与算法所处理数据的存储结构有直接关系C、算法的时间复杂度与空间复杂度有直接关系D、算法的时间复杂度与算法程序执行的具体时间是不一致的标准答案:C知识点解析:算法的时间复杂度是指执行算法所需要的计算工作量。数据的存储结构直接决定数据输入,而这会影响算法所执行的基本运算次数,A选项叙述正确。算法的空间复杂度是指执行这个算法所需要的内存空间,其中包括输入数据所占的存储空间,B选项叙述正确。而算法的时间复杂度与空间复杂度没有直接关系,故选择C选项。算法程序执行的具体时间受到所使用的计算机、程序设计语言以及算法实现过程中的许多细节所影响,而算法的时间复杂度与这些因素无关,所以是不一致的,D选项叙述正确。36、若有定义:doublea,b,c;能正确给a,b,c输入数据的语句是A、scanf("%lf%lf%lf"&a,&b,&c)B、scanf("%f%f%f",&a,&b,&c);C、scanf("%lf%lf%lf",a,b,c);D、scanf("%lf%lf%lf",&a,&b,&c);标准答案:D知识点解析:%lf,%le是针对double的,如果仅用%f,输入的数据可能不完全接收,数据的精度可能不足。%f主要针对float类型的变量的输入,因此选项B错误。根据题目格式可知A,C错误。故答案为D选项。37、有以下程序#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选项。左边所有副作用都结束后,才对其右边的子表达式进行运算,并以最右边表达式值作为整个逗号表达式的值。1、后置自增运算:k++表示先运算,后自加。2、前置自增运算:++k表示先自加,后运算。因此,表达式x=0,x+10,x++的计算过程为首先赋值x=0,然后将x加10,但是并不对x进行赋值,最后计算x++,并,根据后置自增运算的计算结果,即为x=0.0。,故答案为C选项。38、下列叙述中正确的是A、算法复杂度是指算法控制结构的复杂程度B、算法复杂度是指设计算法的难度C、算法的时间复杂度是指设计算法的工作量D、算法的复杂度包括时间复杂度与空间复杂度标准答案:D知识点解析:算法的复杂度是指运行该算法所需要的计算机资源的多少,所需的资源越多,该算法的复杂度越高;反之,所需资源越少,复杂度越低。算法复杂度包括算法的时间复杂度和算法的空间复杂度,算法的时间复杂度是指执行算法所需要的计算工作量,算法空间复杂度指执行这个算法所需要的内存空间。故选择D选项39、若变量已正确定义并赋初值,以下合法的赋值语句是A、k=(m==n);B、k=-m-nC、k=int(m+n);D、k=m*n=1;标准答案:A知识点解析:m,n的变量类型未知,但题目中已定义和赋值。选项B的-m-n对于整型与浮点数类型可以这样操作,但若变量为字符类型,则错误。选项C,编译类型错误,强制转化使用错误。选项D,m*n是常量,只能用作表达式的右值,不能作为左值。故答案为A选项。二、程序填空题(本题共1题,每题1.0分,共1分。)40、给定程序中,函数fun的功能是:对形参SS所指字符串数组中的M个字符串按长度由短到长进行排序。SS所指字符串数组中共有M个字符串,且串长#include#defineM5#defineN20voidfun(char(*ss)[N]){inti,j,k,n[M];chart[N];for(i=0;in[j])___2____;if(k!=i){Strcpy(t,ss[i]);strcpy(ss[i],ss[k]);/**********found***********/strcpy(ss[k],____3_____);n[k]=n[i];}}}main(){charss[M][N]={“shanghai”,“guangzhou”,“beijing”,“tianjing”,“cchongqing”);inti;printf(“\nTheoriginalstringsare:\n”);for(i=0;i标准答案:(1)i+1(2)k=j(3)t知识点解析:函数fun的功能是用是选择排序对M个字符串由短到长进行排序。第一空:由审题分析可知,外循环i=0时,内循环变量从i+1到M-1(下标从0开始),从M—1个字符串中再挑出一个最短的字符串,故第一空处应为“i+1”。第二空:k记录最短字符串的下标,内循环开始前k赋初值i,内循环从剩下的M-i个字符串里面找最短的,比较k字符串和j字符串的长度大小,如果n[k]>n[j],则把j赋给k,即第二空处应为“k=j”。第三空:if(k!=i)说明找到了新的更短的字符串,那么把它和第i个字符串交换,因此第三空处应为“t”。三、程序修改题(本题共1题,每题1.0分,共1分。)41、下列给定程序中,函数fun的功能是:计算并输出下列级数的前N项和SN,直到SN+1的值大于q为止,q的值通过形参传入。例如,若q的值为50.0,则函数值应为49.394948。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<conio.h>#include<stdio.h>doublefun(doubleq){intn;doubles,t,n=2;s=2.0;while(s<=q){t=S;/**********found***********/s=s+(n+1)/n;n++;}printf(“n=%d\n”,n);/**********found***********/returnS;}main(){printf(“%f\n”,fun(50));}标准答案:(1)s=s+(double)(n+1)/n;(2)returnt:知识点解析:(1)在C语言中,整数除以整数得出的结果也是整数,因此此处要转换数据类型。(2)观察while循环,如果返回变量是8.那么返回的是大于q的值,而题中所要返回的是小于q的值,所以应该返回变量t。四、程序设计题(本题共1题,每题1.0分,共1分。)42、编写函数fun,其功能是:求Fibonaeci数列中大于t的最小的数,结果由函数返回。Fibonacei数列F(n)的定义为:F(0)=0,F(1)=1F(n)=F(n—1)+F(n一2)例如,当t=1000时,函数值为1597。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<conio.h>#include<math.h>#include<stdio.h>intfun(intt){}main(){intn;n=1000;printf(“n=%d,f=%d\n”,n,fun(n));}标准答案:intfun(intt){intf0=0,f1=1,f,do{/*根据Fibonacci数列的定义求数值*/f=f0+f1;f0=f1;f1=f;}while(f<t);/*如果求的数值小于t则继续*/returnf;}知识点解析:根据所给数列定义不难发现,该数列最终的结果是由两个数列之和组成,所以可以在循环内部始终把f看成是前两项之和,而f0始终代表第n一2项,f1代表第n—1项。退出循环时得到的数f,就是大于指定数的最小的数。国家二级(C语言)机试模拟试卷第2套一、选择题(本题共40题,每题1.0分,共40分。)1、有以下定义:structdata{inti;charc;doubled;}x;以下叙述中错误的是()。A、x的内存地址与x.i的内存地址相同B、structdata是一个类型名C、初始化时,可以对x的所有成员同时赋初值D、成员i、c和d占用的是同一个存储空间标准答案:D知识点解析:变量i、c、d是结构体变量x中三个不同的成员,占用不同的存储空间。2、设x和Y都是int类型,且x=1,y=2,则printf("%d%d",x,y,(x,y))的输出结果是()。A、12B、122C、1,2D、输出值不确定标准答案:A知识点解析:本题考查printf函数的格式和逗号表达式。printf函数在输出时,是根据格式说明符的个数输出的,如果函数中有多余的项将不予输出;如果有输出项少于格式说明符,则出错,不能输出正确的结果。本题中逗号表达式(x,y)只返回y的值。此时格式说明的个数是2,而输出项的个数是3,因此printf函数只输出前两项。3、如果进栈序列为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出”实现。4、若有“doublea;”,则正确的输入语句是()。A、scanf("%1f",a);B、scanf("%f",&a);C、scanf("%1f",&a)D、scanf("%1e",a);标准答案:C知识点解析:scanf函数的调用形式是:scanf("格式字符串",输入项地址表)。其中,“格式字符串”是要输入的变量的格式符;“输入项地址表”是要输入的变量的地址。a是double型数据,格式字符串可以用%1f,%f是浮点型。题中定义变量a为双精度型变量,双精度变量的格式符为“if”;变量的地址用取地址符“&”加变量名表示,变量a的地址为“&a”。5、有以下程序:#inc1udeintfun(intx,inty){if(x!=y)return(y);elsereturn((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。6、C语言中允许用外部说明来指定变量、函数和其他标识符的特征,这里所说的外部指的是()。A、冠以关键字externB、位置在函数体外部C、作用范围是全程的D、位置在函数的外部标准答案:D知识点解析:C语言中允许用位置在函数外部的说明来指定变量、函数和其他标识符的特征。7、下面不属于软件测试实施步骤的是()。A、集成测试B、回归测试C、确认测试D、单元测试标准答案:B知识点解析:软件测试的过程一般按照四个步骤进行,即单元测试、集成测试、验收测试(确认测试)和系统测试,所以答案选择B8、有两个关系R、S如下:由关系R通过运算得到关系S,则所使用的运算为()。A、选择B、投影C、插入D、连接标准答案:B知识点解析:投影运算是指对于关系内的域指定可引入新的运算。本题中S是在原有关系R的内部进行的,是由R中原有的那些域的列所组成的关系。所以选择B。9、阅读下面程序,程序执行后的结果为()。#inc1ude"stdio.h"main(){char*str="abcdefghijklmnopq";while(*str++!=’e’);printf("%c\n",*str);}A、fB、aC、eD、q标准答案:A知识点解析:本题考查的是取内容运算符“*”和自加运算符“++”的优先级问题。由于“++”的优先级高于“*”,所以题干中“*str++!=’e’”,即“*(str++)!=’e’”,当str指向字符“’e"’时,while循环的条件不成立,但“str”已经进行了自加指向了字符“’f’”,所以“*str”输出字符“’f’”。10、以下不能用于描述算法的是()。A、文字叙述B、程序语句C、伪代码和流程图D、E-R图标准答案:D知识点解析:算法的描述有伪代码、流程图、N-S结构图等。E-R是实体联系模型。所以选择D选项。11、下列关于栈的叙述中,正确的是()。A、栈顶元素最先能被删除B、栈顶元素最后才能被删除C、栈底元素永远不能被删除D、栈底元素最先能被删除标准答案:A知识点解析:栈是“先进后出”的数据结构,因此栈顶元素最后入栈却最先被删除,栈底元素最先入栈却最后被删除,答案为A。12、设有定义:inta=1,b=2,c=3;以下语句中执行效果与其他一个不同的是()。A、if(a>b)c=a,a=b,b=c;B、if(a>b){c=a,a=b,b=c;}C、if(a>b)c=a;a=b;b=c;D、if(a>b){e=a;a=b;b:c;}标准答案:C知识点解析:由于a小于b,所以所有选项中的条件都为假,c选项中实际执行了a=b;b=c;两个操作。而A、B、D选项由于条件不成立,所以什么也没有做,所以选择C选项。13、C语言中允许用外部说明来指定变量、函数和其他标识符的特征,这里所说的外部指的是()。A、冠以关键字externB、位置在函数体外部C、作用范围是全程的D、位置在函数的外部标准答案:D知识点解析:C语言中允许用位置在函数外部的说明来指定变量、函数和其他标识符的特征。14、以下数据结构中,属于非线性数据结构的是()。A、栈B、线性表C、队列D、二叉树标准答案:D知识点解析:二叉树属于非线性结构。栈是一种特殊的线性表,这种线性表只能在固定的一端进行插入和删除操作;队列可看作是插入在一端进行,删除在另一端进行的线性表。15、在C语言中,以下说法不正确的是()。A、在C程序中,整数和实数都能被准确无误地表示出来B、在C程序中,任何一个变量名都代表存储器中的一个位置C、静态变量的生存期与整个程序的运行期相同D、C语言中,任何变量都必须先声明才能进行引用标准答案:A知识点解析:此题考查C语言的基本概念。变量的实质就是在内存中占据一定的存储单元,存储单元里存放的是该变量的值,变量的值可以根据需要进行修改;整数在允许的范围内可以准确的表示出来,但不可能表示无限度的实数。16、设有宏定义:#defineIsDIV(k,n)((k%n==1):1:0)且变量m已正确定义并赋值,则宏调用:IsDIV(m,5)&&IsDIV(m,7)为真时所要表达的是A、判断m是否能被5和7整除B、判断m被5和7整除是否都余2C、判断m被5或者7整除是否余1D、判断m是否能被5或者7整除标准答案:A知识点解析:暂无解析17、若有以下定义,则对数组元素的正确引用是()。inta[5],*p=a;A、*&a[5]B、(*a)+2C、*p+4D、*(a+2)标准答案:D知识点解析:本题考查通过指针引用数组元素。选项A)、C)没有这种引用形式;选项B),(*a)+2与*a+2相同,表示第一个元素的值加2;选项D),*(a+2)引用数组的第3个元素。18、在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是()。A、并B、交C、投影D、除标准答案:B知识点解析:关系R与s经交运算后所得到的关系是由那些既在R内又在S内的有序组所组成,记为R∩S,交运算不改变关系表中的属性个数但能减少元组个数。19、在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是()。A、并B、交C、投影D、除标准答案:B知识点解析:关系R与S经交运算后所得到的关系是由那些既在R内又在S内的有序组所组成,记为RnS,交运算不改变关系表中的属性个数但能减少元组个数。20、有以下程序:#includevoidfun(char*c,intd){*c=*c+1;d+=1;printf("%c,%c",*c,d);}main(){chara=’F’,b=’f’;fun(&b,a);printf("%c,%c\n",a,b);)程序的输出结果为()。A、g,GF,gB、g,FF,gC、G,fF,GD、f,gf,g标准答案:A知识点解析:此题考查的是函数参数的传递。main函数中首先调用fun函数,fun函数的功能是使字符c的ASCII码值加1并输出,使d加1并输出对应的字符;fim(&b,a)输出“g,G”,但是由于fun函数的第一个参数进行的是地址传递,而第二个参数进行的是值传递,所以main函数中的printf函数输出“F,g”。21、下列关于线性链表的叙述中,正确的是()。A、各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致B、各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续C、进行插入与删除时,不需要移动表中的元素D、以上说法均不正确标准答案:C知识点解析:一般来说,在线性表的链式存储结构中,各数据结点的存储序号是不连续的,并且各结点在存储空间中的位置关系与逻辑关系也不一致。线性链表中数据的插入和删除都不需要移动表中的元素,只需改变结点的指针域即可。22、有以下程序:#includeintfun(int(*s)[4],intn,intk){intm,i;m=s[0][k];for(i=1;im)m=s[i][k];returnm;}main(){inta[4][4]={{1,2,3,4},{11,12,13,14},{21,22,23,24}.{31,32,33,34}};printf(“%d\n”,fun(a,4,0));}程序运行后的输出结果是()。A、4B、34C、31D、32标准答案:C知识点解析:本题重点考察二维数组名作为实参进行参数传递,在主函数中调用了fun函数,实参为二维数组名a和两个整数4、0,这样对应定义fun函数首部有三种形式,这里采用了第一种形式——行指针,这样在fun函数对8[i][j]进行操作实际上就是对主函数中的a[i][j]进行操作,再分析fun函数的作用便可知,是求二维数组第0列中最大的那个元素。因此C选项正确。23、使用白盒测试方法时,设计测试用例应根据()。A、程序的内部逻辑B、程序的复杂结构C、程序的功能D、使用说明书标准答案:A知识点解析:白盒测试允许测试人员利用程序内部的逻辑结构及有关信息来设计或选择测试用例,对程序所有的逻辑路径进行测试。24、有以下结构体说明、变量定义和赋值语句:structSTD{charname[10];intage;charsex;}s[5],*ps;ps=&s[0];则以下scanf函数调用语句有错误的是()。A、scanf(’’%s’’,s[0].name);B、scanf(’’%d’’,&s[0].age);C、scanf(’’%c’’,&(ps->SeX));D、scanf(’’%d’’,ps->age);标准答案:D知识点解析:本题考查结构体的相关知识,题目中需要输入一个变量,scanf要求参数为指针,而D选项中ps->age为一个变量,不是指针,所以错误。25、若变量均已正确定义并赋值,以下合法的C语言赋值语句是()。A、x=y==5;B、x=n%2.5;C、x+n=i;D、x=5=4+l:标准答案:A知识点解析:B选项中运算符“%”的前后必须为整数,C选项中不能将变量赋给表达式x+n,D选项中不能将表达式4+1赋给常量5。26、下列叙述中正确的是()。A、数据库系统可以解决数据冗余和数据独立性问题,而文件系统不能B、数据库系统能够管理各种类型的文件,而文件系统只能管理程序文件C、数据库系统可以管理庞大的数据量,而文件系统管理的数据量较少D、数据库系统独立性较差,而文件系统独立性较好标准答案:A知识点解析:数据管理技术的发展经历了3个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。三者各自的特点如下表所示。数据库系统可以解决数据冗余和数据独立性问题,而文件系统不能。数据库系统和文件系统的区别不仅在于管理的文件类型与数据量的多少。数据库系统具有高度的物理独立性和一定的逻辑独立性,而文件系统独立性较好。故本题答案为A选项。27、有以下程序:#include<stdio.h>nlain(){FILE*fp;inti,a[6]={1,2,3,4,5,6},k;fp=fopen("datadat","w+b");fwite(&a[0],sizeof(int),1,fp);for(i=1;i<6;i++){fseek(fp,0L,0);fwrite(&a[i],sizeof(int),1,fp);}fseek(fp,0L,0);fread(&k,sizeof(int),1,fp);felose(fp);printf("%d\n",k);}程序运行后的输出结果是()。A、123456B、21C、6D、654321标准答案:C知识点解析:首先使用fopen函数以只写方式打开文件datAdat,返回文件指针fp然后通过调用Write函数,将起始地址为&a[0]、单位长度为sizeof(int)的一个元素写入文件,即写入a[0];接着for循环从数组a的第二个元素起,每次首先使用fseek()函数将指针fp定位到文件datAtdat的开始位置,写入起始地址&a[i]、单位长度为sizeof(int)的一个元素,即写入a[i];此时数组元素按照逆序写入文件:654321,盾环结束后,使用fseek()函数再将指针fp定位到文件开始位置,调用fread()函数,从fp所指位置读取单化长度为sizeo(int)的一个元素到变量k中,即k=6,最后调用fclose()函数关闭文件,输出k的值6,故答案为C。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、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选项正确。29、下列不合法的用户标识符是()。A、j2_KEYB、DoubleC、4dD、_8_标准答案:C知识点解析:在C语言程序中,合法标识符的命名规则是:标识符可以由字*、数字和下划线组成,并且第一个字符必须是字*或下划线。30、以下关于C语言数值常量的选项中,合法的是()。A、12.0Xa234.5e0B、028.5e一3一0xfC、.1774e1.50abcD、0x8A10,0003.e5标准答案:A知识点解析:C语言中八进制整型常量的开头是数字0,十六进制整型常量的数字开头是0x;但八进制不能有8或9,所以选项B错,C选项中2e1.2中e后面的指数不是整数,D选项中3.e5小数点后面缺少数字,另外。也不用用逗号作为千分位分隔符。31、有以下程序#include<stdio.h>intfun(chars[]){char*p=s;while(*p!=0)p++;return(p-s);}main(){printf("%d\n",fun("0ABCDEF"));}程序运行后的输出结果是A、1B、6C、7D、0标准答案:C知识点解析:本题考查字符串作为函数参数以及while语句,本题中传入字符串OABCDEF,然后执行fun后,就得到了该字符串中字符的个数,不包括结尾符,该字符串有7个字符,所以答案为C。32、有以下程序:#includemain(){unsignedchara=8,c;c=a>>3;printf(’’%d\n’’,c);}程序运行后的输出结果是()。A、16B、1C、32D、0标准答案:B知识点解析:无符号整型变量a的值为8,二进制表示为00001000,右移3位后为00000001,即十进制的1,所以输出1。33、若inta=3,b=2,c=1;则赋值表达式有误的是()。A、a=(b+4)=1;B、a=b=c+3;C、a=(b=2)+cD、a=2+(b=c=3);标准答案:A知识点解析:不能给表达式赋值。34、若在程序中变量均已定义成int类型,且已赋大于1的值,则下列选项中能正确表示代数式的表达式是A、1.0/a/b/cB、1/(a*b*c)C、1.0/a*b*cD、1/a/b/(double)c标准答案:A知识点解析:由于abc均大于1,所以表达式1/abc小于1,需要用浮点类型表示。若要计算表达式值,需要使其自动转化成浮点类型,所以A选项正确。B选项由于变量与常量均为整型,不会自动转换为浮点类型,B选项错误。C选项表示表达式bc/a,故错误。D选项,由于算数运算法结合性自左向右,先计算1/a,结果为0,之后的计算无论是否转换数据类型结果均为0,D选项错误。35、下列说法正确的是()。A、int(**def)[10];----def指向一个指针,该指针指向10个整型变量构成的数组B、int*(*gh[10]);---gh指向一个指针,该指针指向10个整型变量构成的数组C、int*(*gh[10]);---gh是一个指针,指向由10个指向整型变量的指针构成的数组D、A,C均正确标准答案:D知识点解析:int*(*gh[10]);---gh是一个指针,指向由10个指向整型变量的指针构成的数组,int(**def)[10];--def指向一个指针,该指针指向10个整型变量构成的数组。36、有如下程序#include<stdio.h>intconvert(int*data){return(*data)++;}main(){intdata=56;convert(&data);printf("%d,",data);data=convert(&data);printf("%d,\n",data);}程序运行后的输出结果是A、56,57,B、57,58,C、57,57,D、55,57,标准答案:C知识点解析:convert函数每次都定义了一个指针*data,再将指针变量*data对应地址的值进行加一处理,再返回加1前的值作为结果,因此答案为C选项。37、有以下程序#include<stdio.h>intk=5;voidf(int*s){s=&k;*s=7;}main(){intm=3;f(&m);printf("%d,%d\n",m,k);}程序运行后的输出结果是A、3,5B、7,7C、5,7D、3,7标准答案:D知识点解析:函数f()的功能是定义一个整型的指针变量s,指向全局变量k,然后修改s指向地址中的值为7,因此f()函数只是修改全局变量k的值为7,与main()函数中临时变量m无关,因此最后输出为3,7,答案为D选项。38、以下是正确C语言实型常量的是A、.e-1B、e-1C、-1eD、0.1标准答案:D知识点解析:所谓常量是指在程序运行的过程中,其值不能被改变的量。在C语言中,有整型常量、实型常量、字符常量和字符串常量等类型。实型常量有两种表示形式:十进制小数形式、指数形式。指数形式中e后面的指数必须是整数,阶码标志e之前需要有数字,由此可知选项A,B,C错误。答案为D选项39、若有定义:doublea,b,c;能正确给a,b,c输入数据的语句是A、scanf("%lf%lf%lf"&a,&b,&c)B、scanf("%f%f%f",&a,&b,&c);C、scanf("%lf%lf%lf",a,b,c);D、scanf("%lf%lf%lf",&a,&b,&c);标准答案:D知识点解析:%lf,%le是针对double的,如果仅用%f,输入的数据可能不完全接收,数据的精度可能不足。%f主要针对float类型的变量的输入,因此选项B错误。根据题目格式可知A,C错误。故答案为D选项。40、有以下程序:#include<stdio.h>unsignedfun(unsignednum){unsignedk=1:do{k*=num%10;num/=10;}while(num);returnk;}main(){unsignedn=26;printf("%d\n",fun(n));}程序运行后的输出结果是()。A、12B、10C、16D、8标准答案:A知识点解析:程序首先执行main函数,执行printf(”%d\n”,fun(n));即输出表达式fun(6)的值,为了计算该表达式,需要调用函数func。此时main将n中的26作为实参传递给fun的num,即num值为26,接着执行d0—while语句。第1次循环.执行k*=num%10,即k=k*(num%10)=1*(26%10)=6;执行num/=10.即num=num/10=26/10=2;while后面循环条件为num,此时num为2,是非0值,即表示循环条件成立,继续执行循环体。此时k为6,num为2,执行d0—while中的语句后,k为12,num为0。由于while后面循环条件为num,此时num为0,表示循环条件不成立,结束循环,执行returnk,即返回至main函数中的被调用处,执行main函数,执行printf语句,输出结果为12。二、程序填空题(本题共1题,每题1.0分,共1分。)41、给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),作为函数值返回;并将大于平均值的数放在形参Y所指数组中,在主函数中输出。例如,有10个正数:4630324061745154826,平均值为:30.500000主函数中输出:4632404548请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#include#defineN10doublefun(doublex[],double*y){inti,j;doubleav;/**********found**********/av=____1____;/**********found**********/for(2=0;iav)y[____3____]=x[i];y[j]=一1;returnav;}main(){inti;doublex[N],y[N];for(i=0;i=0;i++)printf("%5.1f",y[i]);printf("\n");}标准答案:(1)0(2)x[i]/N(3)j++知识点解析:第一空:“returnav;”可知变量av保存了平均值,故第一空处av初始化应为0,即第一空处应填“0”。第二空:“for(i=0;iav)y[__3__]=x[i];”是将x[i]保存在y所指的数组中,i是循环变量,i初始化为0,故y[]的计数变量为j,故第三空处应为“j++”。三、程序修改题(本题共1题,每题1.0分,共1分。)42、给定程序MODI1.C是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并且作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!1#include<stdio.h>2#include<stdlib.h>3typedefstructaa4{intdata;structaa*next;}NODE;5intfun(NODE*h)6{intsum=0;7NODE*p;8/**********found**********/9p=h;10while(p)11{if(p->data%2==0)12sum+=p->data;13/**********found**********/14p=h->next;15}16returnsum;17}18NODE*creatlink(intn)19(NODE*h,*p,*s;20inti;21h=p=(NODE*)malloc(sizeof(NODE));22for(i=1;i<=n;i++)23{s=(NODE*)malloc(sizeof(NODE));24s->data=rand()%16;25s->next=p->next;26p->next=s;27p=p->next;28}29p->next=NULL;30returnh;31}32outlink(NODE*h,FILE*pf)33{NODE*p;34p=h->next;35fprintf(Pf,’’in\nTHELIST:in\nHEAD’’);36while(p)37{fprintf(pf,’’->%d’’,p->data);p=p->next;}38fprintf(pf,’’in’’);39}40outresult(ints,FILE*pf)41{fprintf(pf,’’\nThesumofevennumbers:%d\n’’,s);}42main()43{NODE*head;inteven;44head=creatlink(12);45head->data=9000;46outlink(head,stdout);47even=fun(head);48printf(’’\nTheresult:in’’);outresult(even,stdout);49}标准答案:(1)p=h->next;(2)p=p->next;知识点解析:(1)根据题干中求得除了头结点之外的结点数据域中的数据值,头指针h,工作指针p指向头结点的下一个结点,所以第一个标识下的“p=h;”指向头结点应该改为指向下一个结点“p=h->next;”。(2)工作指针p,利用p实现对链表的遍历,p表示指向链表的当前结点,所以指向下一个结点应该是“p=p->next;”。四、程序设计题(本题共1题,每题1.0分,共1分。)43、编写函数fun,它的功能是计算:s作为函数值返回。在C语言中可调用log(n)函数求ln(n)。log函数的引用说明是:doublelog(doublex)。例如,若m的值为:20,fun函数值为:6.506583。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。1#include<math.h>2#include<stdio.h>3doublefun(intm)4{56}7main()8{9voidNONO();10printf(’’%f\n’’,fun(20));11NONO();12}13voidNONO()14{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/15FILE*fp,*wf;16inti,n;17doubles;18fp=fopen(’’in.dat’’,’’r’’);19wf=fopen(’’out.dat’’,’’w’’);20for(i=0;i<10;i++){21fscanf(fp,’’%d’’,&n);22s=fun(n);23fprintf(wf,’’%f\n’’,s);24}25fclose(fp);26fclose(wf);27}标准答案:1doubles=0.0;2inti;3for(i=1;i<=m;i++)s+=log(1.0*i);4s=sqrt(s);5returns;知识点解析:(1)调用log(n)函数求ln(n)。(2)对调用log(n)进行累加求和,求得根号里的内容。(3)最后调用C语言的库函数sqrt计算(2)中求得值的平方根。国家二级(C语言)机试模拟试卷第3套一、选择题(本题共39题,每题1.0分,共39分。)1、以下选项中可用做C程序合法实数的是()。A、3.0e0.2B、.1eoC、E9D、9.12E标准答案:B知识点解析:A选项中e后面的指数必须为整数,所以错误。C语言规定,E之前必须要有数字,所以C选项错误。E后面必须要有数字,且必须为整数,所以D选项错误。2、以下叙述中正确的是()。A、charc1,c2,*c3,c4[40];是合法的变量定义语句B、数组下标的下限由数组中第一个非零元素的位置决定C、数组下标的下限由数组中第一个被赋值元素的位置决定D、数组下标的下限是1标准答案:A知识点解析:A)正确,charc1,c2,*c3,c4[40]表示定义了两个字符变量c1、c2,一个字符指针c3,一个字符数组c4。数组的下限永远为0,选项B)、C)、D)错,答案选A)。3、下列叙述中正确的是()。A、在栈中,栈中元素随栈底指针与栈顶指针的变化而变化B、在栈中,栈顶指针不变,栈中元素随栈底指针的变化而变化C、在栈中,栈底指针不变,栈中元素随栈顶指针的变化而变化D、以上说法均不对标准答案:C知识点解析:栈是“先进后出”的数据结构,在整个过程中,栈底指针不变,入栈与出栈操作均由栈顶指针来操作,所以选择C。4、下列程序的输出结果是()。#includevoidfun(int*a,int*b){int*k;k=a;a=b;b=k;}main(){inta=1,b=2,*x=&a,/y=&b;fun(x,y);printf("%d%d",a,b);}A、21B、l2C、编译出错D、00标准答案:B知识点解析:本题考查函数调用时的参数传递。分析题目可知fun函数的形参是指向实参的指针,但main()函数中调用flm()函数时,实参是指针变量x、y(分别为指向a和b的指针),a、b的值在函数调用前后未发生变化,因而a=1,b=2,即输出12。5、下列二维数组初始化语句中,正确且与语句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。6、设q1和q2是指向一个int型一维数组的指针变量,k为float型变量,下列不能正确执行的语句是()。A、k=*q

温馨提示

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

评论

0/150

提交评论