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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷34(共9套)(共344题)国家二级(C语言)机试模拟试卷第1套一、选择题(本题共40题,每题1.0分,共40分。)1、在关系代数运算中,有5种基本运算,它们是()。A、并(∪)、差(-)、交(∩)、除(÷)和笛卡儿积(×)B、并(∪)、差(-)、交(∩)、投影(π)和选择(σ)C、并(∪)、交(∩)、投影(π)、选择(σ)和笛卡儿积(×)D、并(∪)、差(-)、投影(π)、选择(σ)和笛卡儿积(×)标准答案:D知识点解析:并、差、笛卡儿积、投影和选择是5种基本的运算,其他运算即交、连接和除,均可以通过5种基本的运算来表达。2、若变量都己正确说明,则以下程序段()。#include<stdio.h>main(){inta=8;intb=6:printf(a>b?"&&&a:%d":"!!!b=%d",a,b);}A、输出为:&&&a=8B、输出为:!!!b=8C、输出为:&&&a=8!!!b=6D、全部错误标准答案:A知识点解析:本题考查printf的输出格式和条件表达式“?:”的使用。①printf函数输出时,“&&&%d\n”和“!!!%d\n”中的“&&&”和“!!!”都是直接输出:②条件表达式的基本格式为:a?b:c。其运算规则为:当a为非0时,整个表达式的值取b的值,当a为0时,整个表达式取c的值。printf函数中如果在格式说明符之前插入任何字符都将原样输出。本题中a>b为真,所以返回“&&&a=%d”。3、在C语言中,只有在使用时才占用内存单元的变量,其存储类型是()。A、auto和staticB、extern和registerC、auto和registerD、static和register标准答案:C知识点解析:auto:函数中的局部变量,动态地分配存储空间,数据存储在动态存储区中,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。register:为了提高效率,C语言允许将局部变量的值放在CPU中的寄存器中,这种变量叫“寄存器变量”,只有局部自动变量和形式参数可以作为寄存器变量。extem:外部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。static:静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。4、在数据处理中,其处理的最小单位是()。A、数据B、数据项C、数据结构D、数据元素标准答案:B知识点解析:数据元素是由多个数据项组成,数据是能够被计算机识别、存储和加工处理的信息载体,数据处理的最小单位是数据项。5、下面程序的运行结果是()。y=5;x=14;y--((x=3*y,x+6),x—1);printf("x=%d,y=%d",x,y);A、x=27,y=27B、x=12,y=13C、x=15,y=14D、x=y=27标准答案:C知识点解析:本题考查的是逗号表达式。逗号表达式的求解步骤是先求解表达式1,然后依次求解表达式2,直到表达式N的值。整个逗号表达式的值就是最后一个表达式N的值。表达式(x=3*y,x+6)中,x=15。表达式y=x—1=14。6、if语句的基本形式为:if(表达式)语句,其中“表达式”()。A、可以是任意合法的表达式B、必须是逻辑表达式C、必须是逻辑表达式或关系表达式D、必须是关系表达式标准答案:A知识点解析:本题考查if表达式。if(表达式)中的表达式可以为任何合法的表达式,一般情况下为逻辑、条件表达式,需要注意的是,当等号(==)误写为赋值号(=)时不会报错的,但是其值恒为1。7、有以下程序:#include<stdio.h>intfun(intX,inty){if(x==y)return(x);elsereturn((x+y)/2);}main(){inta=1,b=2,c=3;printf("%d\n",fun(2*a,fun(b,c)));}程序运行后的输出结果是()。A、2B、3C、4D、5标准答案:A知识点解析:fun(b,c)即fun(2,3),21=3,所以返回(2+3)/2=2;fun(2*a,2)即fun(2,2),2==2,所以返回2。8、数据库应用系统中的核心问题是()。A、数据库设计B、数据库系统设计C、数据库维护D、数据库管理员培训标准答案:A知识点解析:数据库应用系统中的核心问题是数据库的设计。9、以下选项中关于程序模块化的叙述错误的是()。A、可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序B、把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块C、把程序分成若干相对独立的模块,可便于编码和调试D、可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序标准答案:A知识点解析:程序模块化思想中,可以采用自顶向下、逐步细化的方法。所以选项A中“自底向上”的说法是错误的。10、C源程序中不能表示的数制是()。A、二进制B、八进制C、十进制D、十六进制标准答案:A知识点解析:C语言中整型常量可以用十进制数、八进制数、十六进制数来表示。虽然计算机只能识别二进制数,但二进制不能用来表示整型常量。11、设有定义:intk=0:以下选项的四个表达式中与其他三个表达式的值不相同的是()。A、++kB、k+=1C、k++D、k+1标准答案:C知识点解析:++k,先使k的值自增1后再使用,k++是先取得k的值再将k的值自增l,所以C选项中表达式的值为0,而其他三个表达式的值均为l,所以选择c。12、下列叙述中正确的是()。A、存储空间连续的数据结构一定是线性结构B、存储空间不连续的数据结构一定是非线性结构C、没有根结点的非空数据结构一定是线性结构D、具有两个根结点的数据结构一定是非线性结构标准答案:D知识点解析:A项错误,数据结构线性与否与存储空间是否连续没有直接关系,如二叉树可以用一片连续的空间来存储,但二叉树为非线性结构;B项错误,线性表的链式存储结构可以用不连续的空间来存储,但线性表为线性结构;C项错误,没有根结点的非空数据结构一定不是线性结构;D项正确,线性结构有且只有一个根结点,具有两个根结点的结构一定是非线性结构。13、有以下程序:#includemain(){FILE*pf;ch8r*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的使用。函数fwrite的调用形式为:intfwrite(char*pt,unsignedn,FILE*fp);其功能是把pt所指向的n*size个字节输出到fp所指文件中,第二次调用该函数时,从文件的第一个位置开始写入,之前已有的会被覆盖掉,如果第二次写入的长度没有第一次的长,则后面短出的部分保留原样。14、若有如下说明,且int类型占两个字节,则正确的叙述为()。structst{inta;intb[2];}a.A、结构体变量a与结构体成员a同名,定义是合法的B、程序只在执行到该结构体时才为结构体st分配存储单元C、程序运行时为结构体st分配8字节存储单元D、类型名structst可以通过extern关键字提前引用标准答案:A知识点解析:本题主要考查结构体的用法:①结构体变量a与结构体成员a同名,定义合法;②在程序编译的时候结构的定义并不会使系统为该结构分配内存空间,只有在说明结构变量时才分配内存空间;③inta占2个字节,intb[2]占4个字节,共6个;④类型名“structst”不可以通过extern关键字提前引用。15、下列排序方法中,最坏情况下比较次数最少的是()。A、冒泡排序B、简单选择排序C、直接插入排序D、堆排序标准答案:D知识点解析:冒泡排序,简单选择排序和直接插入排序在最坏情况下的比较次数都是O(n2),而堆排序为O(nlog2n)。16、以下叙述中错误的是()。A、非零的数值型常量有正值和负值的区分B、常量是在程序运行过程中值不能被改变的量C、定义符号常量必须用类型名来设定常量的类型D、用符号名表示的常量叫符号常量标准答案:C知识点解析:在C语言中,可以用一个标识符来表示一个常量,称为符号常量。符号常量在使用之前必须先定义,其一般形式为:#define标识符常量。17、有以下程序(strcat函数用以连接两个字符串)#include<stdio.h>#include<string.h>main(){chara[20]="ABCD\0EFG\0",b[]="IJK";strcat(a,b);printf("%s\n",a);}程序运行后的输出结果是A、IJKB、ABCDE\0FG\0IJKC、ABCDIJKD、EFGIJK标准答案:C知识点解析:字符数组a中包含两个’\0’,遇到第一个’\0’时就表示字符串a结束。字符串处理函数strcat(字符数组a,字符数组b),功能是连接两个字符数组中的字符串,把字符串b连接到a的后面,结果放在字符数组a中。连接时将字符串a后的’\0’取消,只在新串最后保留一个’\0’。本题相当于将"ABCD"和"IJK"连接。因此C选项正确。18、设有以下语句:typedefstruetTT{charc;inta[4];}CIN;则下面叙述中正确的是()。A、CIN是struetTT类型的变量B、TT是struet类型的变量C、可以用TT定义结构体变量D、可以用CIN定义结构体变量标准答案:D知识点解析:本题考查typedef重新声明一种结构体类型,其中CIN为结构体类型名,而不是结构体变量,所以D选项正确。19、设有宏定义:#defineIsDIV(k,n)((k%n==1)?1:0)且变量m已正确定义并赋值,则宏调用:IsDIV(m,5)&&IsDIV(m,7)为真时所要表达的是()。A、判断m被5和7整除是否都余1B、判断m是否能被5和7整除C、判断m被5或者7整除是否余1D、判断m是否能被5或者7整除标准答案:A知识点解析:暂无解析20、已定义以下函数:intfun(int*P){return*P;}fun函数返回值是()。A、一个整数B、不确定的值C、形参P中存放的值D、形参P的地址值标准答案:A知识点解析:返回值为指针变量指向的数据,该数据已被定义为整型。因此A选项正确。21、)有以下程序#include<stdio.h>main(){inty=9;for(;y>0;y--)if(y%3==0)printf("%",--y);}程序的运行结果是()。A、741B、963C、852D、875421标准答案:C知识点解析:y的初值为9,所以在for循环中,当y的值为9、6或3时,if语句的条件成立,执行输出语句,输出表达式一y的值。因为自减符号在y的前面,所以首先y自减l,然后再输出y的值,故输出结果为852。22、有以下程序#includemain(){unsignedchara=8,c;c=a>>3;printf("%d\n",c);}程序运行后的输出结果是()。A、1B、16C、32D、0标准答案:A知识点解析:暂无解析23、设有以下程序段:inty;y=rand()%30+1;则变量y的取值范围是()。A、0≤y≤30B、0<y≤30C、1<y<30D、1<y≤30标准答案:B知识点解析:rand()产生随机整数,任何整数对30求余得到的整数范围为0~29,则y的取值范围为1≤y≤30或者0<y≤30,y是整数,0<y≤30。24、有以下程序:#includemain(){intx,a=1,b=1;while(1){seanf(“%d”,&x);if(x>0){a*=x;break;}if(X<0){b*=x;continue;}prinff(“%d,%d\n”,a,b);}}程序运行时输入:一1—2012<回车>,则输出结果是()。A、1,2B、2,2C、一1,1D、一2,1标准答案:A知识点解析:分析程序结构,在while循环中,输入x的值后,若x的值大于0,将a的值累乘x,执行break语句跳出循环;若x的值小于0,将b的值累乘x,执行continue,进行下一个循环;当x的值等于0时,打印a、b的值,进入下一个循环;所以当输入一1、一2后,b累乘为2;输入0后,打印a、b的值为1,2,再输入1,a累乘跳出循环,程序运行结束;输出结果为1,2,故答案为A。25、以下关于字符串处理的叙述正确的是()。A、进行字符串复制时,目的串的存储空间必须足够大B、两个字符串进行比较时,短的一个必定比长的一个小C、计算一个字符串的长度时,应包含串尾的结束标志D、两个字符串连接时,对存储空间的大小没有要求标准答案:A知识点解析:两个字符串进行比较时,按照字符串中相同位置的字符ASCII码顺序进行比较,故选项B错误;字符串需要包含串尾的结束标志,但是计算字符串长度时,不包含串尾的结束标志,故选项C错误;要将字符串s2连接到s1后面,串s1所在存储空间必须可以存储字符串s1、字符串s2连接后构成新串的字符,故选项D错误。答案选A。26、设有定义和语句(假设shortint型数据占2字节)shortint*pi,*pj;pi=pj=(short,*)malloc(2);则以下叙述正确的是()。A、pi和pj指向了同一个shortint型存储单元B、pi和pj指向了2个连续的shortint型存储单元的首地址C、pi和pj分别指向了一个shortint型存储单元D、pi和pj分别指向了2个shortint型存储单元标准答案:A知识点解析:语句pi=pj=(short*)malloc(2)首先使用动态分配函数malloc分配2个字节的内存空间,然后将内仔首地址转换为short*类型并返回,赋值给pj,再将pj的值赋给pi,所以指针pi和pj的值是相的,指向同一个shortint型的仔储单元,故选项A正确。27、有以下程序:#include<stdio.h>voidfun(char*c,intd){*c=*c+1;d=d+1;printf(’’%c,%c,’’,*c,d);}main(){charb=’a’,a=’A’;fun(&b,a);printf(’’%c,%c\n’’,b,a);}程序运行后的输出结果是()。A、用户定义的函数中可以没有return语句B、用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值C、用户定义的函数中若没有return语句,则应当定义函数为void类型D、函数的return语句中可以没有表达式标准答案:B知识点解析:本题重点考察函数返回值的相关知识,函数的值只能通过return语句返回主调函数,在函数中允许有多个return语句,但每次调用只能有一个return语句被执行,因此只能返回一个函数值。不返回函数值的函数,可以明确定义为“空类型”,类型说明符为“void”。因此B选项正确。28、下面不属于需求分析阶段任务的是()。A、确定软件系统的功能需求B、确定软件系统的性能需求C、需求规格说明书评审D、制定软件集成测试计划标准答案:D知识点解析:需求分析阶段的工作有:需求获取;需求分析;编写需求规格说明书;需求评审,所以选择D。29、若有以下程序#include<stdio.h>main(){inta=6,b=0,c=0;for(;a&&(b==0);){b+=a;a-=c++;}printf("%d,%d,%d\n",a,b,c);}则程序的输出结果是A、5,6,0B、6,0,0C、6,6,1D、5,6,1标准答案:C知识点解析:本题重点考察C语言中for语句和逻辑表达式,for语句的一般形式为:for(表达式1;表达式2;表达式3)语句其循环中的"表达式1(循环变量赋初值)"、"表达式2(循环条件)"和"表达式3(循环变量增量)"都是选择项,即可以缺省,但";"不能缺省。该题目中省略了"表达式1(循环变量赋初值)"和"表达式3(循环变量增量)"。for(;a&&(b==0);){b+=a;a-=c++;}进入循环体b=b+a=6,a=a-c++=6,c=1。此时b=6不满足条件b==0循环退出。因此C选项正确。30、下列关于线性链表的描述中,正确的是()。Ⅰ、只含有一个指针域来存放下一个元素地址Ⅱ、指针域中的指针用于指向该结点的前一个或后一个结点(即前件或后件)Ⅲ、结点由两部分组成数据域和指针域。A、仅Ⅰ、ⅡB、仅Ⅰ、ⅢC、仅Ⅱ、ⅢD、全部标准答案:D知识点解析:在定义的链表中,若只含有一个指针域来存放下一个元素地址,称这样的链表为单链表或线性链表。在链式存储方式中,要求每个结点由两部分组成:一部分用于存放数据元素值,称为数据域;另一部分用于存放指针,称为指针域。其中指针用于指向该结点的前一个或后一个结点(即前件或后件)。31、读取二进制文件的函数调用形式为:fread(buffer,size,count,fp);,其中buffer代表的是()。A、一个内存块的字节数B、一个整型变量,代表待读取的数据的字节数C、一个文件指针,指向待读取的文件D、一个内存块的首地址,代表读人数据存放的地址标准答案:D知识点解析:fread(buffer,size,count,fp)功能是从一个文件流中读数据,读取count个元素,每个元素size字节,如果调用成功返回count。buffer:用于接收数据的内存地址,大小至少是size*count字节;size:单个元素的大小,单位是字节;count:元素的个数,每个元素是size字节;stream:输入流。32、在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是()。A、需求分析B、详细设计C、软件设计D、概要设计标准答案:A知识点解析:软件生命周期的主要活动阶段为:可行性研究和计划制定、需求分析、软件设计、软什实现、软件测试、运行和维护。其中需求分析是对开发软件提出的需求进行分析并给出详细定义,即准确地确定软件系统的功能,编写软件规格说明书及初步的用户手册,提交评审。33、有以下程序#include<stdio.h>main(){FILE*fp;inti,a[6]={1,2,3,4,5,6},k;fp=fopen("data.dat","w+b");fwrite(&a[0],sizeof(int),1,fp);for(i=1;i<6;i++){fseek(fp,0L,0);fread(&k,sizeof(int),1,fp);fseek(fp,0L,0);a[i]+=k;fwrite(&a[i],sizeof(int),1,fp);}rewind(fp);fread(&k,sizeof(int),1,fp);fclose(fp);printf("%d\n",k);}程序的运行结果是A、21B、6C、123456D、11标准答案:A知识点解析:程序执行过程为:以读/写方式打开一个新的二进制文件data.dat,从地址为a的数据块开始,一次输出一个整型字节的数据,只输出一次,将1写入文件中;执行for循环,将文件指针移到文件开头,将文件第一个数值读出赋给k,再将指针移动到开头,向文件内输入a[i]+k=3。for循环实现将a数组中元素累加,结果21存放在文件中。调用rewind将文件指针移动到开头,调用fread函数从文件中读出一个整型数据赋给k=21,调用fclose函数关闭文件,打印k值,A选项正确。34、下面关于编译预处理的命令行,正确的是A、#definePAI3.14B、#DefineEps0.00001C、##DEFINEFALSE0D、#defineintINT标准答案:A知识点解析:宏定义用法一般表达式为#define宏名字符串,A选项满足宏定义用法;C语言中是区分大小写的,define属于C语言的关键字,不可以大写,因此B,C选项错误;D选项中,int是代表整数类型,不满足define用法,D选项错误,因此答案为A选项。35、有以下程序#include<stdio.h>main(){inti,k=0,a[10];for(i=0;i<10;i++)a[i]=i;for(i=0;i<4;i++)k+=a[i]+i;printf("%d\n",k);}程序运行后的输出结果是A、10B、16C、6D、12标准答案:D知识点解析:第一个for循环对数组a赋初值,从0~9,第二个for循环数组前4项的a[i]+i的和。0+0,1+1,2+2,3+3,经计算的结果为12,因此答案为D选项36、以下程序拟实现计算s=1+2*2+3*3+…+n*n+…,直到s>1000为止。#include<stdio.h>main(){ints,n;s=1;n=1;do{n=n+1;s=s+n*n;}while(s>1000);printf("s=%d\n",s);}程序运行后,不能得到正确结果,以下修改方案正确的是A、把while(s>1000);改为while(s<=1000);B、把s=1;改为s=0;C、把n=1;改为n=0;D、把n=n+1;改为n=n*n;标准答案:A知识点解析:题目中程序不能实现预期功能是因为while的循环条件错误,选项B,把s=1,改为s=0,最终的结果s=4,与题目原意不同,选项C,把n=1;改为n=0;最终的结果s=2,与题目原意不同,选项D,把n=n+1;改为n=n*n;最终的结果s=2,与题目原意不同选项A,正确的修改了while循环条件,可以得到正确结果。故答案为A选项.37、有以下程序#include<stdio.h>intfun(inta,intb){if(b=0)returna;elsereturn(fun(--a,--b));}main(){printf("%d\n",fun(4,2));}程序的运行结果是()。A、1B、2C、3D、4标准答案:B知识点解析:由程序可知,函数fun(inta,intb)是一个递归函数。所以当主函数中调用“fun(4,2)”时,其执行过程如下“fun(4,2)->fun(3,1)->fun(2,0)”,其返回值为2。所以正确答案为选项B)。38、设有定义: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){c=a;a=b;b=c}标准答案:C知识点解析:C语言中if语句后面只跟一条语句时,可以省略大括号。即if语句仅作用于紧随其后的那条语句或者是复合语句的内容,所以A项执行三条语句组成的复合语句;BD两项执行大括号中的三条语句;而(、项只执行c=a;。39、设有定义:doublea[10],*s=a;,以下能够代表数组元素a[3]的是()。A、(*s)[3]B、*(s+3)C、*s[3]D、*s+3标准答案:B知识点解析:本题考查通过指针引用数组元素。比如要引用a[3],有3种引用方法,*(a+3)、*(s+3)和s[3]三者是等价的.都可以用来引用a[3]。故I{选项正确。40、有以下程序:#include<stdio.h>main()chara=4:printf("%d\n",=a<<1);程序运行的结果是()。A、40B、16C、8D、4标准答案:C知识点解析:左移一位相当于原数乘以2,右移一位相当于除以2。a<<1结果为4*2=8,没有超过char类型的范围。二、程序填空题(本题共1题,每题1.0分,共1分。)41、给定程序中,函数fun的功能是:调用随机函数产生20个互不相同的整数放在形参a所指数组中(此数组在主函数中已置0)。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!【试题源程序】#include#include#defineN20voidfun(int*a){inti,x,n=0;X=rand()%20;/***********found**********/while(n<<【1】){for(i=0;i<n;i++)/***********found**********/if(x==a[i])【2】;/***********found**********/if(i==【3】){a[n]=x;n++;}X=rand()%20;}}main(){intx[N]={0},i;fun(x);printf("Theresult:\n");for(i=0;i<N;i++){printf("%4d",x[i]);if((i+1)%5==0)printf("\n");}printf("\n\n");}标准答案:【1】N或20【2】break【3】n知识点解析:填空【1】:变量n用于存储数组的最大下标,while语句对数组进行赋值,数组的容量为20,因此循环条件应为n<20或n<N。填空【2】:通过一个for循环判断x是否与数组中已存的元素重复,若重复则跳出for循环。填空【3】:若for循环是由break语句结束的,则x与数组中的元素重复,此时i小于n;若for循环是因为循环变量i递增到某值,而不再满足循环条件结束的,说明x的值与数组中的元素不重复,则此时i的值等于n。三、程序修改题(本题共1题,每题1.0分,共1分。)42、给定程序MODI1.C中,函数fun的功能是求矩阵(二维数组)a[N][N]中每行的最小值,结果存放到数组b中。假如:若a=则结果应为1,5,9,13,请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:1#include<stdio.h>2#defineN43voidfun(inta[][N],[ntb[])4{inti,j;5for(i=0;i<N;i++)6{7/*********found*********/8b[i]=a[0][0];9/*********found*********/10for(j=1;j<N-1;j++)11/*********found*********/12if(b[i]<a[i][j])13b[i]=a[i][j];14}15}16main()17{inta[N][N]=f{1,4,3,2),{8,6,5,7),{11,10,12,9},{13,16,14,15}},b[N];18inti;19fun(a,b);20for(i=0;i<N;i++)21printf(’’%d,’’,b[i]);22printf(’’\n’’);23}标准答案:(1)b[i]=a[i][0];(2)for(j=1;ja[i][j])知识点解析:数组b存放每行的最小值,针对二维数组使用二层循环,在第一层循环的开始将每行的第1个数赋给数组b相应的元素,在第二层循环中,数组b中的元素依次与本行中的每个元素进行比较,找到一行中的最小值存人数组b。(1)b[i]存放二级数组a每一行中第1个元素值,表示为a[i][0]。(2)每行元素的第1个值要和这一行中的每个元素进行比较,条件j四、程序设计题(本题共1题,每题1.0分,共1分。)43、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最低的学生数据放在b所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数。注意:部分源程序在文件PROG1.C文件中。请勿改动丰函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#defineN16typedefstruct{charnum[10];ints;}STREC;intfun(STREC*a,STREC*b){}main(){STRECs[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},{"GA011",91},{"GA017",64},{"GA018",64},{"GA016",72}};STRECh[N];inti,n;FILE*out:n=fun(s,h);printf("The%dlowestscore:\n",n);for(i=0;i<n;i++)printf("%s%4d\n",h[i].hum,h[i].s);printf("\n");out=fopen("out.dat","w");fprintf(out,"%dha",n);for(i=0;i<n;i++)fprintf(out,"%4d\n",h[i]s);fclose(out);}标准答案:inti,j=0,minfa[0].s;for(i=o;i<N;i++){if(min>a[i].s){j=0;b[j++]=a[i]:min=a[i].s;}elseif(min==a[i].s)b[j++]=a[i];}returnj;知识点解析:(1)要把最低分数的学生数据放在数组中,首先求出最低分数,再使用一个for循环把所有的成绩进行比较,找出最低的分数来。(2)找出所有与最低分数相等的学生,并将最低分数的人数累加。国家二级(C语言)机试模拟试卷第2套一、选择题(本题共40题,每题1.0分,共40分。)1、以下函数中,findmax拟实现在数组中查找最大值并作为函数值返回,但程序中有错导致不能实现预定功能。#defineMIN—2147483647intfindmax(intx[],intn){inti,max;for(i=0;i<n;i++){max=MIN;if(max<x[i])max=x[i]:}returnmax;}造成错误的原因是()。A、定义语句inti,max;中max未赋初值B、赋值语句max=MIN;中,不应给max赋MIN值C、语句if(max<x[i])max=x[i];中判断条件设置错误D、赋值语句max=MIN;放错了位置标准答案:D知识点解析:本题中for循环中首先将MIN值赋值给max,然后用x[i]与max的值比较。每次都是将MIN值与x[i]值进行比较,所以无论x[i]的值是什么,都不会影响if的判断语句,max=[i]始终执行。所以函数返回的是数组中最后一个元素的值。本题的错误在于max=MIN的位置,for循环之前应先执行max=MIN。2、若有如下定义:char*ps[]={"aa","bb","cc","dd"};,则以下叙述中正确的是()。A、*ps[0]是字符’A’B、*ps[0]是字符串"aa"C、ps[0]是字符’A’D、ps是字符串"aa"标准答案:B知识点解析:对于指针数组,ps[0]代表的就是第一个字符串的地址。3、有以下程序:#includetypedefstruct{intb,P;}A;voidf(AC)/*注意:C是结构变量名*/{intj;c.b+=1;e.p+=2;}main(){inti;Aa={1,2};f(a);printf(“%d,%d\n”,a.b,a.P);}程序运行后的输出结果是()。A、2,4B、1,2C、1,4D、2,3标准答案:B知识点解析:结构体变量可以作为函数的参数和返回值。作为函数的实参时,可以实现函数的传值调用。当使用结构体变量作为函数的形参时,实参也应该是结构体变量名以实现传值调用,实参将拷贝副本给形参,在被调用函数中改变形参值对于调用函数中的实参没有影响。所以选择B。4、有以下程序:#include<stdio.h>main(){inti;FILE*fp;for(i=0;i<3;i++){fp=fopen("res.txt","w");fputc(’K’+i,fp);fclose(fp);}}程序运行后,在当前目录下会生成一个res.txt文件,其内容是()。A、MB、EOFC、KLMD、L标准答案:A知识点解析:通过三次循环,最后i的值定格在2,最后储存值’K’+2=’M’,所以最后保存的数值为M。注意:fclose函数,每次都关闭文件,并且重新回到文件首地址。5、结构化程序设计中,下面对goto语句使用描述正确的是()。A、禁止使用goto语句B、使用goto语句程序效率高C、应避免滥用goto语句D、以上说法均错误标准答案:C知识点解析:结构化程序设计中,要注意尽量避免goto语句的使用,故选C。6、在学校中,“班级”与“学生”两个实体集之间的联系属于()关系。A、一对一B、一对多C、多对一D、多对多标准答案:B知识点解析:一个班可以有多名学生,而一名学生只能属于一个班级,所以“班级”与“学生”两个实体集之间的联系属于一对多关系。7、下列语句组中,不正确的是()。A、char*s;s="Olympic";B、chars[]="Olympic";C、char*s;s={"Olympic"};D、chars[]={"Olympic"};标准答案:C知识点解析:S是一个字符指针变量,s代表其地址,C将字符串赋给地址,因此选项C错误。8、若函数调用时的实参为变量,以下关于函数形参和实参的叙述中正确的是()。A、函数的实参和其对应的形参共占同一存储单元B、形参只是形式上的存在,不占用具体存储单元C、同名的实参和形参占同一存储单元D、函数的形参和实参分别占用不同的存储单元标准答案:D知识点解析:在C语言中,函数的实参单元与形参单元在内存中分配不同的存储单元。在调用函数时,给形参分配临时存储单元,并将实参对应的值传递给形参,在被调用函数中对形参存储单元中的值进行运算,最后通过return语句把函数值返回调用函数。当调用结束后,形参单元被释放,实参单元仍保留并维持原值。9、以下选项中,能用作数据常量的是()。A、018B、ol1C、0.8e2.5D、25L标准答案:D知识点解析:本题考查常量定义。数据常量可有10进制、8进制、16进制、指数法等,8进制数字为0-7,第一个字符为0,而不是o,因此选项A和B)错误。为指数法时,指数部分须为整形,因此选项C错误,选项D中数字后加入L是说明此变量为长整型。10、有三个关系R、S和T如下:则由关系R和S得到关系T的操作是()。A、自然连接B、差C、交D、并标准答案:B知识点解析:关系T中的元组是R关系中有而S关系中没有的元组的集合,所以进行的是差的运算。11、关于字符常量,以下叙述正确的是()。A、空格不是一个字符常量B、字符常量能包含大于一个的字符C、单引号中的大写字母和小写字母代表的是相同的字符常量D、所有的字符常量都可以作为整型量来处理标准答案:D知识点解析:本题考查字符常量的4个知识点:①空格是一个字符常量,而且单引号中的空格不可以省略;②字符常量只能包含一个字符;③单引号中的大写字母和小写字母代表的是不相同的字符常量;④所有的字符常量都作为整型量来处理,在计算机内部,其对应的整数值就是ASCH码值。12、有以下程序:#include<stdio.h>#include<string.h>typedefstruet{charname[9];charsex;floatscore[2];}STU;voidf(STUa){STUb={"Zhao",’m’,85.0,90.0};inti;strcpy(a.name,b.name);a.sex=b.sex:for(i=0;i<2;i++)a.score[i]=b.seore[i];}main(){STUc={"Qian",’f’,95.0,92.0};f(c);printf("%s,%c,%2.0f,%2.0f\n",c.name,c.sex,c.seore[0],c.score[1]);}程序运行后的输出结果是()。A、Zhao,m,85,90B、Qian,m,85,90C、Zhao,f,95,92D、Qian,f,95,92标准答案:D知识点解析:本题考查结构体的相关操作以及传值、传址的区别,该题中调用f函数后,会生成参数c的一个副本,而不会改变c的值,所以c值维持原值,选项D正确。13、下列叙述中,不属于软件需求规格说明书的作用的是()。A、便于用户,开发人员进行理解和交流B、反映出用户问题的结构,可以作为软件开发工作的基础和依据C、作为确认测试和验收的依据D、便于开发人员进行需求分析标准答案:D知识点解析:软件需求规格说明书有以下几个方面的作用:①便于用户、开发人员进行理解和交流;②反映出用户问题的结构,可以作为软件开发工作的基础和依据:③作为确认测试和验收的依据。14、在数据库管理技术的发展中,数据独立性最高的是()。A、人工管理B、文件系统C、数据库系统D、数据模型标准答案:C知识点解析:在人工管理阶段,数据无法共享,冗余度大,不独立,完全依赖程序;在文件系统阶段,数据共享性差;在数据库系统阶段,共享性好,独立性高。15、有以下宏定义及调用#defineHA2#defineHB(a)(HA+1)*ax=HA*(HA+HB(2));则以下判断正确的是()。A、宏定义不允许嵌套B、x的值是6C、x的值是16D、宏调用不允许嵌套标准答案:C知识点解析:C语言中,宏定义和宏调用都是允许嵌套的,选项A、D错误;根据题意,将表达式x=HA*(HA+HB(2))宏展开为:x=2*(2+(2+1)*2),所以结果为x=16,选项B错误,C正确;本题答案为C。16、若有以下程序:#includemain(){intc;c=10^5;printf("%d\n",c);}则程序的输出结果是()。A、5B、15C、10000D、105标准答案:B知识点解析:本题考查位运算中的按位异或运算符。异或运算只有在两个比较的位不同时其结果是1,否则结果为D,10用二进制表示为00001010,5用二进制表示为00000l0l,异或运算后结果为00001111,即15,选项B正确。17、下述语句中,在字符串s1和s2相等时显示“theyareEqual”的是()。A、if(*s1==*s2)puts(“theyareEqual");B、if(!strcmp(s1,s2))puts("theyareEqual");C、if(s1==s2)Puts("theyareEqual");D、ifi[strcmp(s1,s2))puts("theyareEqual");标准答案:B知识点解析:字符串比较不能用两个等号(==)来进行比较,应使用strcmp(s1,s2)函数来比较。strcmp(s1,s2)函数的功能是:当字符串s1和s2相等时,返回值为0,因此,当表达式!strcmp(s1,s2)==1时,条件成立,执行后面的语句,输出theyareEqual。18、设有定义:structcomplex{intrea1,unrea1;}data1={1,8},data2;则以下赋值语句中错误的是()。A、data2={data1.rea1,data1.unrea1};B、data2=(2,6);C、data2.rea1=data1.rea1;D、data2->rea1=data1.unrea1;标准答案:C知识点解析:本题主要考查结构体变量的定义与初始化。题目中定义了complex类型的结构体变量data1和data2,并对data1进行了初始化。可以用一个结构体变量的成员对另一个结构体变量的成员赋值。19、有如下程序段:intx=12;doubley=3.141593;printf("%d%8.6f",x,y);其输出结果是()。A、123.141593B、123.141593C、12,3.141593D、123.1415930标准答案:A知识点解析:printf函数中格式字符“%8.6”的含义是:变量y的输出宽度为8(包括小数点),小数点后面保留6位小数,且右对齐。所以选择A。20、设有宏定义:#defineIsDIV(k,n)((k%n==1)?1:0)且变量m已正确定义并赋值,则宏调用:IsDIV(m,5)&&IsDIV(m,7)为真时所要表达的是()。A、判断m被5和7整除是否都余1B、判断m是否能被5和7整除C、判断m被5或者7整除是否余1D、判断m是否能被5或者7整除标准答案:A知识点解析:暂无解析21、有以下程序#include<stdio.h>main(){intx=8;for(;x>0;x--){if(x%3){printf("%d,",x--);continue;}printf("%d,",--x);}}程序的运行结果是A、7,4,2,B、8,7,5,2,C、9,7,6,4,D、8,5,4,2,标准答案:D知识点解析:coutinue的作用是跳出循环体中剩余的语句而进行下一次循环,第一次循环x的值为8,循环体中if条件成立,打印x的值8后将x减1,再执行continue语句,跳出本次循环,第二次判断循环条件时,x的值变为6,不满足循环体内if条件,执行打印--x的操作,即打印5后跳出循环,第三次判断循环条件时x的值为4,满足循环体中if条件,执行打印x--的操作,即打印4,后将x值减一,执行continue语句,跳出本次循环,第四次判断循环条件时x的为2,满足循环体中if条件,打印x--,即打印2后将x减一,执行continue语句,跳出本次循环,在进行for条件表达式中第三个表达式x--的操作后x的值为0,不满足条件结束循环,所以打印结果为8,5,4,2,。22、以下程序段完全正确的是()。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选项正确。23、以下结构体类型说明和变量定义中正确的是()。A、structREC;{intn;charc;};RECt1,t2;B、typedefstruct{intn;charc;}REC;RECt1,t2;C、typedefstructREC;{intn=0;charc=’A’;}t1,t2;D、struct{intn;charc;}REC;RECt1,t2;标准答案:B知识点解析:本题考查结构体的相关知识,选项A中structREC后面不能有分号,C选项中typedefstructREC的后面也不能有分号,选项D中REC已经是结构体变量,不能当做结构体类型来使用。24、有以下结构体说明、变量定义和赋值语句:struetSTD{charname[10];intage;charsex;}s[5],*ps;ps=&s[0];则以下scanf函数调用语句有错误的是()。A、scanf(“%s”,s[0].name);B、seanf(“%d”,&s[0].age);C、scanf(“%c”,&(ps一>sex));D、scanf(“%d”,ps一>age);标准答案:D知识点解析:本题考查结构体的相关知识,题目中需要输入一个变量,scanf要求参数为指针,而D选项中ps一>age为一个变量,不是指针,所以错误。25、有以下程序:#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正确。26、以下程序的输出结果是()。#includestructst{intx;int*y;}*p;intdt[41={1,2,3,4};structstaa[4]={2,&dt[0],3,&dt[0],4,&dt[0],5,&dt[0],);main(){p=aa;printf("%d\n",++(p->x));}A、1B、2C、3D、4标准答案:C知识点解析:程序首先将指针p指向结构体数组aa的首地址,通过p->x引用了结构体数组aa[0]的第一个成员2;++(p->x)是将p->x的值加1,所以输出结果为3。27、下面结构体的定义语句中,错误的是()。A、structord{intx;inty;intz;}structorda;B、structord{intx;inty;intz;};structorda;C、structord{intx;inty;intz;}a;D、struct{intx;inty;intz;}a;标准答案:A知识点解析:定义一个结构体的一般形式为:struct结构名{成员列表};说明结构变量有3种方法:1.先定义结构体,再说明结构变量struct结构名{成员列表};struct结构名变量名1、变量名2;故选项B正确。2.在定义结构类型的同时说明结构变量struct结构名{成员列表}变量名列表;故选项C正确。3.直接说明结构变量struct成员列表{变量名列表;故选项D正确使用方法1定义结构体时,在左括号的后面不能省略分号,故选A错误。28、以下关于C语言文件的叙述中正确的是()。A、文件南数据序列组成,其类型可以为二进制文件或文本文件B、文件由记录序列组成,其类型可以为二进制文件或文本文件C、文件由字符序列组成,其类型可以为二进制文件或文本文件D、文件由数据序列组成,其类型只能是二进制文件标准答案:A知识点解析:C语言文件是指一组相关数据的有序集合,从文件编码的方式看,文件可分为ASCII码文件和二进制文件两种,其中ASCII文件也称为文本文件,所以文件由数据序列组成,类型可以为二进制文件或文本文件,故选项A正确。29、关于C语言的符号常量,以下叙述中正确的是A、符号常量的符号名是标识符,但必须大写B、符号常量是指在程序中通过宏定义用一个符号名来代表一个常量C、符号常量在整个程序中其值都不能再被重新定义D、符号常量的符号名必须是常量标准答案:B知识点解析:在C语言中,可以用一个标识符来代表一个常量,称为符号常量,这个标识符必须在程序中进行特别的"指定",并符合标识符的命名规则,用作符号常量的标识符通常采用大写字母表示,在主函数中其值不能再被定义,所以选择B选项。30、有以下程序:#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字符串就将前五个字符覆盖,所以最终结果为Chinang,选项B正确。31、若有以下程序段:intx=10:printf(’’%d\n’’,x>>2);程序运行后的输出结果是()。A、16B、8C、4D、2标准答案:D知识点解析:>>是位操作,将操作对象的二进制数向右移动2位。10的二进制数是00001010,移动二位后是00000010,所以答案是2。32、设有定义:intx[10],*p=x,i;,若要为数组x读入数据,以下选项正确的是()。A、for(i=0;i<10;i++)scanf("%d",p+i);B、for(i=0;i<10;i++)scanf("%d",*p+i);C、for(i=0;i<10;i++)scanf("%d",*(P+i));D、for(i:O;i<10;i++)scanf("%d",x[i]);标准答案:A知识点解析:从scanf(“<格式化字符串>”。<地址表>);可知scamfi()的第二个参敦是地址,因此,从四个答案中可以判断,只有选项A是p[i]的地址,其他的均是变量本身。故答案为A选项。33、以下选项中合法的变量是A、5aB、_10_C、A%D、sizeof标准答案:B知识点解析:变量的命名要符合标识符的命名规则,即由下划线、字母或数字组成,且必须以下划线或字母开始,也不能和关键字相同,所以选择B。34、以下对联合类型叙述正确的是()。A、可以对联合变量名直接赋值B、使用联合变量的目的是为了节省内存C、任何一个联合变量可以同时引用联合中的不同成员D、联合类型定义中不能同时出现结构类型的成员标准答案:B知识点解析:由于联合体是同一存储区域由不同类型的变量共享,所以不可以直接对联合体变量名进行赋值,且联合体中的空间在某一时刻只能保持某一成员的数据;另外合体中可以出现结构类型的成员。35、下列说法正确的是()。A、auto和register将声明的对象说明为自动存储类对象,这些对象可用在函数中或函数外B、将变量其定义为static类型,则其初值默认为随机值C、typedef说明符并不会为对象预留存留空间D、如果一个对象被声明为register,则对它应用一无运算符&,意在取得其存储的地址标准答案:C知识点解析:①这种声明也具有定义的作用,并将预留存储空间。register说明的声明等价于auto说明的声明,所不同的是,register暗示了声明的对象将被频繁地访问,将尽可能存储在寄存器中。如果一个对象被声明为register,则将不能对它应用一元运算符&,声明为register但实际按照auto类型处理的对象的地址进行计算是非法的。②static将声明的对象说明为静态存储类。这种对象可以用在函数内部或者函数外部。在函数内部,该说明符将引起存储空间的分配,具有定义的作用。在函数外部,该说明符将引起声明对象为具有内部链接。另外,若将其定义为static类型,则其初值默认为0。③函数内部的extern声明表明,被声明的对象的存储空间定义在其他地方。在函数外部,说明声明的对象具有外部链接。④typedef说明符并不会为对象预留存留空间。36、软件生命周期是指A、软件产品从提出、实现、使用、维护到停止使用退役的过程B、软件的需求分析、设计与实现C、软件的开发与管理D、软件的实现和维护标准答案:A知识点解析:通常把软件产品从提出、实现、使用、维护到停止使用、退役的过程称为软件生命周期,A选项正确。37、若已有定义语句:inta,b,c;,且变量已正确赋初值,则以下选项中正确的赋值表达式是A、a=(b=c)+8;B、(a=b)=c=9;C、a=(b==c)=’A’;D、a+b=c+1;标准答案:A知识点解析:赋值运算符左边必须是一个变量,B,D选项错误;C选项中,(b==c)是个表达式,值为1,C选项相当于将’A’赋值给1,语法错误,故排除C选项,答案为A选项.38、下列处理中与队列有关的是A、操作系统中的作业调度B、执行程序中的过程调用C、执行程序中的循环控制D、二叉树的遍历标准答案:A知识点解析:队列是指允许在一端进行插入,而在另一端进行删除的线性表。由于最先进入队列的元素将最先出队,所以队列具有"先进先出"的特性,体现了"先来先服务"的原则。作业调度是指根据一定信息,按照一定的算法,从外存的后备队列中选取某些作业调入内存分配资源并将新创建的进程插入就绪队列的过程。执行程序中的过程调用一般指函数调用,需要调用时候转入被调用函数地址执行程序,与队列无关。执行程序中的循环控制是指算法的基本控制结构,包括对循环条件的判定与执行循环体,与队列无关。二叉树是一个有限的结点集合,二叉树的遍历是指不重复地访问二叉树中的所有结点,与队列无关。故本题选择A选项.39、设有一联合体变量定义如下:uniondata{longa;floatb;intc;chard;};uniondatax;执行下列语句后,正确的联合体变量x的值是()。x.a=111111;x.b=2222;x.c=2.1546;x.d=’R’;A、111111B、2222C、2.1546D、R’;标准答案:D知识点解析:本题主要考查的知识点是联合体的内存使用。联合体与结构体的定义相同,其本质区别就在于内存使用方式的不同。联合体所占用的内存空间为最长的成员所占用的空间,各个成员分量全部是从低地址方向开始使用内存单元:联合体中的空间在某一时刻只能保持某一个成员的数据,所以本题执行完一系列赋值后,只得到最后执行的字符’R’。40、有以下程序:#include<stdio.h>main(){intx[3][3]={1,2,3,4,5,6,7,8,9},i;for(i=1;i<3;i++)printf("%d",x[i][3一i]);}程序运行后的输出结果是()。A、2,4B、6,8C、3,7D、2,6标准答案:B知识点解析:二维数组的起始行标和列标均为0,即x[0][0]=l。当i=l时,for循环判断条件成立,输出x[1][2]=6;此时i自增为2,开始第二次for循环,条件成立,输出x[2][1]=8。故B选项正确。二、程序填空题(本题共1题,每题1.0分,共1分。)41、给定程序的主函数中,已给出由结构体构成的链表结点a、b、c,各结点的数据域中均存入字符,函数fun()的作用是:将a、b、c三个结点链接成一个单向链表,并输出链表结点中的数据。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdio.h>2typedefstructlist3{chardata;4structlist*next;5}Q;6voidfun(Q*pa,Q*pb,Q*pc)7{Q*p;8/*********found*********/9pa->next=【1】;10pb->next=pc;11p=pa;12while(p)13{14/*********found*********/15printf(’’%c’’,【2】);16/*********found*********/17p=【3】;18}19printf(’’\n’’);20}21main()22(Qa,b,c;23a.data=’E’;b.data=’F’;24c.data=’G’;c.next=NULL;25fun(&a,&b,&c);26}标准答案:(1)pb(2)p->data(3)p->next知识点解析:填空1:将三个结点连接起来,即将pa的指针域指向pb,pb的指针域指向pc。填空2:输出链表结点中的数据,表示为p->data。填空3:指针后移,指向下一个结点,即p=p->next。三、程序修改题(本题共1题,每题1.0分,共1分。)42、下列给定程序中,函数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循环,如果返回变量是s,那么返回的是大于q的值,而题中所要返回的是小于q的值,所以应该返回变量t。四、程序设计题(本题共1题,每题1.0分,共1分。)43、编写函数fun,其功能是:求Fibonacci数列中大于t的最小的数,结果由函数返回。Fibonacci数列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语言)机试模拟试卷第3套一、选择题(本题共40题,每题1.0分,共40分。)1、下列叙述中正确的是()。A、线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的B、线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构C、线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构D、线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性标准答案:B知识点解析:线性链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以一般要多于顺序存储结构。2、设一棵满二叉树共有15个结点,则在该满二叉树中的叶子结点数为()。A、7B、8C、9D、10标准答案:B知识点解析:在具有n个结点的满二叉树,其非叶子结点数为int(n/2),而叶子结点数等于总结点数减去非叶子结点数。本题n=15,故非叶子结点数等于int(15/2)=7,叶子结点数等于15-7=8。3、下列叙述中,正确的是()。A、软件交付使用后还需要进行维护B、软件一旦交付使用就不需要再进行维护C、软件交付使用后其生命周期就结束D、软件维护是指修复程序中被破坏的指令标准答案:A知识点解析:软件的运行和维护是指将己交付的软件投入运行,并在运行使用中不断地维护,根据新提出的需求进行必要而且可能的扩充和删改。而软件生命周期是指软件产品从提出、实现、使用维护到停止使用退役的过程。4、下列不合法的用户标识符是()。A、j2_KEYB、DoubleC、4dD、_8_标准答案:C知识点解析:在C语言程序中,合法标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须是字母或下划线。5、有以下程序:#include<stdio.h>#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,3,B、-12,-3,0,0,C、0,1,2,3,D、-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=3。所以主函数中打印y数组元素的值为A选项。6、有以下程序:#include<stdio.h>voidfun(char*c,intd){*c=*c+1;d+=1;orintf("%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并输出对应的字符;dun(&b,a)输出“g,G”,但是由于fun函数的第一个参数进行的是地址传递,而第二个参数进行的是值传递,所以main函数中的printf函数输出“F,g”。7、有以下程序:#includemain()voidfun(char*c

温馨提示

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

评论

0/150

提交评论