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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷4(共9套)(共261题)国家二级(C语言)机试模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是将带头节点的单向链表逆置,即若原链表中从头至尾节点数据域依次为2、4、6、8、10,逆置后,从头至尾节点数据域依次为10、8、6、4、2。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<stdlib.h>#defineN5typedefstructnode{intdata;structnode*next;}NODE;voidfun(NODE*h){NODE*p,*q,*r;/*********found*********/p=h->【1】;/*********found*********/if(p==【2】)return;q=p->next;p->next=NULL;while(q){r=q->next;q->next=p;/*********found*********/p=q;q=【3】;}h->next=p;}NODE*creatlist(inta[]){NODE*h,*p,*q;inti;h:(NODE*)malloc(sizeof(NODE));h->next=NULL:for(i=0;i<N;i++){q=(NODE*)malloc(sizeof(NODE));q->data=a[i];q->next=NULL:if(h->next==NULL)h->next=p=q;else{p->next=q;p=q;)}returnh;}voidoutlist(NODE*h){NODE*p;p=h->next;if(p==NULL)printf("ThelistisNULL!\n");else(printf("\nHead");do{printf("->%d",p->data);p=p->next;)while(p!=NULL);printf("->End\n");}}main(){NODE*head;inta[N]={2,4,6,8,10};head=creatlist(a);printf("\nTheoriginallist:\n");outlist(head);fun(head);printf("\nThelistafterinverting:\n");outlist(head);}标准答案:(1)next(2)NULL(3)r知识点解析:填空1:本空考查了为p赋初值,根据题目的要求是将带头节点的单向链表逆置可知,p的初值应该为h->next。填空2:if判断语句表明当p等于什么时就要返回,因此只能当p等于NULL时返回,不用做后面的链表的逆置了。填空3:把q的指针向后移动,才能实现将带头节点的单向链表逆置。因此本空填写r。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。请改正程序中的错误或在下划线处填上正确的内容并把下划线删除,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdlib.h>#include<conio.h>#include<string.h>#include<stdio.h>#defineN80intfun(char*s,char*t){intn;char*p,*r;n=0;/*********found*********/*r=t:while(*s){p=s;while(*r){if(*r==*p){r++;p++;}elsebreak;if(*r==’\0’)n++;}/*********found*********/<u>1</u>;s++;}returnn;}voidmain(){chara[N],b[N];intm;printf("\nPleaseenterstringa:");gets(a);printf("\nPleaseentersubstringb:");gets(b);m=fun(a,b),printf("\nTheresultis:m=%d\n",m);}标准答案:(1)r=t;(2)r=t;或r=&t[0];知识点解析:从字符串s中找出子字符串的方法是:从第一个字符开始,对字符串进行遍历,若s串的当前字符等于t串的第一个字符,两字符串的指针自动加1,继续比较下一个字符;若比较至字符串t的末尾,则跳出循环;若s串的字符与t串的字符不对应相同,则继续对s串的下一个字符进行处理。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun,其功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。例如,若字符串数组中的M个字符串为{“AAAA”,“BBBBBBB”,“CC”},则合并后的字符串内容应该是“AAAABBBBBBBCC”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#include<conio.h>#defineM3#defineN20voidfun(charaIM][N],char*b){}voidmain(){charw[M][N]={"AAAA","BBBBBBB","CC"};chara[100]={"##################");inti;printf("Thestring:\n");for(i=0;i<M;i++)puts(w[i]);printf("\n");fun(w,a);printf("TheAstring:\n");printf("%s",a);printf("\n\n");}标准答案:voidfun(chara[M][N],char*b){inti,j,k=0;for(i=0;i知识点解析:本题考查:字符串连接操作。本程序中第1个for循环的作用是对二维数组行的控制,第2个循环的作用是从同一行中取出字符并存放到一维数组b中,语句是b[k++]=a[i][j];。国家二级(C语言)机试模拟试卷第2套一、选择题(本题共38题,每题1.0分,共38分。)1、若有定义:inta=0,b=0,c=0,d=0;,有C语言表达式(a++&&b++)?c++:d++,以下关于其执行顺序的叙述中正确是()。A、先执行a++,表达式a++的值为0,由此即可确定(a++&&b++)值为0,因此执行d++B、先执行a++,表达式a++的值为0;再执行b++,表达式b++的值为0,由此可确定(a++&&b++)值为0,因此执行d++C、先执行a++,表达式a++的值为1;再执行b++,表达式b++的值为1,由此可确定(a++&&b++)值为1,因此执行c++D、先执行b++,表达式b++的值为1;再执行a++,表达式a++的值为1,由此可确定(a++&&b++)值为1,因此执行c++标准答案:A知识点解析:把握前置运算和后置运算的基本运算规则。2、下面是有关C语言字符数组的描述,其中错误的是()。A、不可以用赋值语句给字符数组名赋字符串B、可以用输入语句把字符串整体输入给字符数组C、字符数组中的内容不一定是字符串D、字符数组只能存放字符串标准答案:D知识点解析:字符数组可以用来存放单个的字符或者字符串。3、有以下程序:#include<stdio.h>voidfun(intp){intd=2:p=d++;printf("%d",p);}main(){inta=1:fun(a);printf("%d\n",a);}程序运行后的输出结果是()。A、32B、12C、21D、22标准答案:C知识点解析:C语言中函数参数传递满足“单向传递”,实现传递值的功能,实参能传给形参,形参却不能传回给实参。fun函数体内输出p的值为2,并不影响到fun函数外a的值,a的值在main函数内依然为1。4、下面程序的运行结果是()。#include<stdio.h>voiddel(char*s){inti,j;char*a;a=s;for(i=0,j=0;a[i]!=’\0’;i++){if(a[i]>=’0’&&a[i]<=’9’){s[j]=a[i];j++;}s[j]=’\0’;}}main(){chars[]="aa89gggh";del(s);printf("\n%s",s);}A、aaB、89C、ggghD、aa89gggh标准答案:B知识点解析:本题中del(char*s)函数实现的功能是:逐个读入s数组中的字符,如果遇到数字,则将其重新存在s中,遇到非数字字符则跳过。所以最后输出的应该是字符串s中的所有数字。5、下述程序的输出结果是()。#include<stdio.h>voidmain(){inta[20],*p[4];inti,k=0;for(i=0;i<20;i++)a[i]=i;for(i=0;i<4;i++)p[i]=&a[i*i+1];for(i=0;i<4;i++){k=k+*p[i];}printf("%d",k);}A、10B、18C、6D、数组元素引用不合法,输出结果不定标准答案:B知识点解析:第一个for循环,给数组a的20个元素分别赋值0~19;第二个for循环,给数组p赋值,p[0]=a[1]=1,p[1]=a[2]=2,p[2]=a[5]=5,p[3]=a[10]=10;第三个for循环,将数组p中元素的值进行累加,k=1+2+5+10=18。6、以下程序中c的二进制值是()。chara=2,b=4,c;c=a^b>>2A、00000011B、00010100C、00011100D、00011000标准答案:A知识点解析:本题主要考查按位异或和右移运算。b=4的二进制为00000100,b>>2后为00000001,a=2的二进制为00000010,两者异或为00000011。7、设有定义:intx=2;,以下表达式中,值不为6的是()。A、2*x,x+=2B、x++,2,xC、x*=(1+x)D、x*=x+1标准答案:A知识点解析:A选项中逗号表达式先计算第一表达式2*x,然后计算表达式x+=2的值,即x=x+2即4,整个逗号表达式为第二个表达式的值4,所以选择A。B选项中首先计算逗号表达式中第一表达式x++,此时x为3,在执行第二个表达式2*x=2*3=6,所以逗号表达式为第二个表达式的值6。C选项的赋值表达式可以表示为x=x}(1+x)=2*(1+2)=6。D选项中的表达式可以表示为x=x*(x+1)=2*3=6。8、在源程序的开始处加上“#include<stdio.h>”进行文件引用的原因,以下叙述正确的是()。A、stdio.文件中包含标准输入输出函数的函数说明,通过引用此文件以便能正确使用printf、scanf等函数B、将stdio.h中标准输入输出函数链接到编译生成的可执行文件中,以便能正确运行C、将stdio.h中标准输入输出函数的源程序插入到引用处,以便进行编译链接D、将stdio.h中标准输入输出函数的二进制代码插入到引用处,以便进行编译链接标准答案:A知识点解析:“stdio.h”文件中包含标准输入输出函数的函数说明,预处理指令#include<stdio.h>是指程序可以在该文件中找到printf、scanf等函数。9、下面程序的输出结果是()。typedefunion{longx[1];inty[4];charz[10];}M;Mt:main(){printf("%d\n",sizeof(t));}A、32B、26C、10D、4标准答案:C知识点解析:“联合体”所占用的内存空间为最长的成员所占用的空间。题中联合体的z[10]成员是联合体中占空间最长的成员。10、软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是()。A、编译程序B、操作系统C、教务管理系统D、汇编程序标准答案:C知识点解析:编译软件、操作系统、汇编程序都属于系统软件,只有C教务管理系统才是应用软件11、在软件生产过程中,需求信息的来源是()。A、程序员B、项目经理C、设计人员D、软件用户标准答案:D知识点解析:软件需求是指用户对目标软件系统在功能、性能、设计约束等方面的要求,是由用户提出的。12、对关系S和R进行集合运算,结果中既包含S中的所有元组也包含R中的所有元组,这样的集合运算称为()。A、并运算B、交运算C、差运算D、积运算标准答案:A知识点解析:关系的并运算是指由结构相同的两个关系合并,形成一个新的关系,新关系中包含两个关系中的所有元组。13、开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做()。A、软件矛盾B、软件危机C、软件藕合D、软件产生标准答案:B知识点解析:随着计算机软件规模的扩大,软件本身的复杂性不断增加,研制周显著变长,正确性难以保证,软件开发费用上涨,生产效率急剧下降,从而出现了人们难以控制软件发展的局面,即所谓的“软件危机”。14、下列4个程序中,完全正确的是()。A、#include<stdio.h>main();{/*programming*/printf(”programming!\n’’);}B、#include<stdio.h>main(){/*/programming/*/printf(’’programming!\h’’);}C、#include<stdio.h>main(){/*/programming*/*/printf(’’programming!\n’’);}D、include<stdio.h>main(){/*programming*/printf(’’programming!\n’’);}标准答案:B知识点解析:选项A中,main()函数后面的分号是错误的,C语言在函数名后面不能有分号;在C语言中注释内容必须放在“/*”和“*/”之间,“/#”和“*/”必须成对出现,按语法规定在注释之间不可再嵌套“/*”和“*/”,选项C的程序段中注释语句之间有嵌套;C语言用#include命令行来实现文件包含的功能。#include命令行的形式为:#include“文件名”,选项D中的include前面少了一个#符号。15、软件详细设计产生的图如下:该图是()。A、N-S图B、PAD图C、程序流程图D、E-R图标准答案:C知识点解析:程序流程图基本图符有3种:控制流(用箭头表示)、加工步骤(用方框表示)、逻辑条件(用菱形表示)。控制结构有5种:①顺序结构;②选择结构;③多分支选择结构;④后判断重复型结构;⑤先判断重复型结构。因此该图是选择结构的程序流程图。16、有以下程序#include<stdio.h>main(){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正确。17、开发大型软件时,产生困难的根本原因是()。A、大型系统的复杂性B、人员知识不足C、客观世界千变万化D、时间紧、任务重标准答案:A知识点解析:随着计算机软件规模的扩大,软件本身的复杂性不断增加,研制周期显著变长,正确性难以保证,软件开发费用上涨,生产效率急剧下降,从而出现了人们难以控制软件发展的局面,即所谓的“软件危机”。18、若有定义:inta=7;floatx=2.5,y=4.7;则表达式“x+a%3*(int)(x+y)%2/4”的值是()。A、2.500000B、2.750000C、3.500000D、0.000000标准答案:A知识点解析:此题考查的是变量的类型转换。表达式中“(int)(x+y)把x+y=(7.2)”的值强制转化成整型即得到7,那么“a%3*(int)(x+y)%2”的值为整型常量1,所以“a%3*(int)(x+y)%2/4”的值为0;因为变量x是浮点型变量,所以表达式“x+a%3*(int)(x+y)%2/4”的结果也是浮点型,得到2.500000。19、有以下程序:#includemain(){inta=1,b=0;printf("%d,",b=a+b);printf("%d\n",a=2*b;}A、1,2B、1,0C、3,2D、0,0标准答案:A知识点解析:首先打印b=a+b=1+0=1的值1,此时已给b赋值为l。然后打印a=2*b=2*1=2的值2。所以结果是1,2。20、若有以下定义:intx[10],*pt=x;则对x数组元素的正确引用是()。A、*&x[10]B、*(x+3)C、*(pt+10)D、pt+3标准答案:B知识点解析:数组的下标是从0开始的,故x[10]实际上具体为x[0],x[1],…,x[9],而若使用x[10]就会溢出,编译出错,所以AC两项错误;D项,pt+3指向地址,并未引用到元素;B项的表达正确,引用x[3]。21、程序调试的任务是()。A、设计测试用例B、验证程序的正确性C、发现程序中的错误D、诊断和改正程序中的错误标准答案:D知识点解析:程序调试的任务是诊断和改正程序中的错误。22、有以下程序段:charname[20];intnum;scanf(’’name=%snum=%d’’,name,&num);当执行上述程序段,并从键盘输入:name=Lilinum=1001<回车>后,name的值为()。A、IJKB、ABCDE\OFG\OIJKC、ABCDIJKD、EFGIJK标准答案:C知识点解析:字符数组a中包含两个’\0’,遇到第一个’\0’时就表示字符串a结束。字符串处理函数strcat(字符数组a,字符数组h),功能是连接两个字符数组中的字符串,把字符串b连接到a的后面,结果放在字符数组a中。连接时将字符串a后的’0’取消,只在新串最后保留一个’\0’。本题相当于将“ABCD”和“IJK”连接。因此C选项正确。23、有以下程序#include<stdio.h>#include<stdlib.h>voidfun(int*p1,int*p2,int*s){s=(int*)malloc(sizeof(int));*s=*p1+*(p2++);}main(){inta[2]={1,2},b[2]={10,20},*s=a;fun(a,b,s);printf("%d\n",*s);}程序运行后的输出结果是A、11B、10C、1D、2标准答案:C知识点解析:本题考查把数组名作为函数参数,执行fun函数后,s的值并没有发生变化,仍然是指向a,所以输出结果为1,选项C正确。24、下列关于C语言数据文件的叙述中正确的是()。A、文件由ASCⅡ码字符序列组成,C语言只能读写文本文件B、文件由二进制数据序列组成,C语言只能读写二进制文件C、文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件D、文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件标准答案:B知识点解析:本程序首先定义了静态字符数组a,然后将指针p指向数组a的首地址,第一次for循环,p=a,p指向数组的第一个元素,*p是取指针p所指地址的内容,输出p;第二次for循环,p=p+2,则p指向数组的第三个元素,*p是取指针p所指地址的内容,输出o;第三次for循环,p=p+2,则p指向数组的第5个元素,*p是取指针p所指地址的内容,输出r;第四次for循环,p=p+2,则p指向数组的第7个元素,*p是取指针p所指地址的内容,输出m;结束循环。25、在数据管理技术发展的三个阶段中,数据共享最好的一个阶段是()。A、人工管理阶段B、文件系统阶段C、数据库系统阶段D、三个阶段相同标准答案:C知识点解析:数据管理技术的三个发展阶段为人工管理阶段、文件系统阶段和数据库管理阶段。只有在数据库管理阶段实现数据的自由分享更加容易和方便。26、有以下程序#include<stdio.h>main(){inta=-2,b=0;while(a++&&++b);printf("%d,%d\n",a,b);}程序运行后输出结果是A、0,2B、0,3C、1,3D、1,2标准答案:D知识点解析:本题重点考察while语句,变量a和b分别赋初值为-2和1,while语句的语义是:计算表达式的值,当值为真(非0)时,执行循环体语句。a++即a参与运算后,a的值再自增1。++b即b自增1后再参与其它运算。当表达式的值为0时,退出循环,最后输出a和b的值为1和2。因此D选项正确。27、下列不合法的用户标识符是()。A、j2_KEYB、DoubleC、4dD、_8_标准答案:C知识点解析:在C语言程序中,合法标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须是字母或下划线。28、若要求从键盘读入含有空格字符的字符串,应使用函数()。A、getc()B、gets()C、getchar()D、scanf()标准答案:B知识点解析:scanf()语句中用“空格”间隔不同的字符串,空格将被全部忽略掉,所以用scanf()函数不能输入空格;getchar()函数用于输入字符,其调用形式为:ch=getchar(),getehar()函数从终端读入一个字符作为函数值,把读入的字符赋给变量ch。在输入时,空格、回车符都将作为字符读入,而且只有在用户敲入。Enter键时,读入才开始执行。gets()函数的调用形式为:gets(str_adr,),其中str_adr是存放输入字符串的起始地址,可以是字符数组名、字符数组元素的地址或字符指针变量。gets函数用来从终端键盘读入字符串(包括空格符),直到读入一个换行符为止。getc()函数的调用形式为:ch=gete(pf)其中pf是文件指针。函数的功能是从pf指定的文件中读入一个字符,并把它作为函数值返回。29、以下选项中,合法的实数是A、4.5E2B、E1.3C、7.11ED、1.2E1.2标准答案:A知识点解析:实型常量用带小数点的数字表示,其值有两种表达形式,分别为十进制小数形式和指数形式。十进制小数形式由数字和小数组成,必须有小数点,且小数点的位置不受限制。指数形式由十进制数加阶码标志"e"或"E"以及阶码(只能为整数,可以带符号)组成。4.5E2为指数形式实数,A选项正确。E1.3阶码标志前缺少十进制数,并且阶数不是整数,B选项错误。7.11E缺少阶数,C选项错误。1.2E1.2阶数不是整数,D选项错误。30、设有n个数按从大到小的顺序存放在数组x中,以下能使这n个数在x数组中的顺序变为从小到大的是A、for(i=0;i<n/2;i++){t=x[i];x[i]=x[n-i-1];x[n-i-1]=t;}B、for(i=0;i<n;i++){t=x[i];x[i]=x[n-i-1];x[n-i-1]=t;}C、for(i=0;i<n/2;i++){t=x[i];x[i]=x[n-i+1];x[n-i+1]=t;}D、for(i=0;i<n/2;i+=2){t=x[i];x[i]=x[n-i-1];x[n-i-1]=t;}标准答案:A知识点解析:本题使用for循环实现数组元素首尾倒置。A选项中控制变量上限为n/2,用变量t实现数下标值i与n-i-1的元素交换,使数组元素首尾倒置,从而实现从小到大排列,A选项正确。B选项控制变量上限为n,用变量t实现数下标值i与n-i-1的元素交换,当i=n/2时,已经实现数组首尾倒置,而继续运行至i=n,将再次将新的数组首尾倒置,与原数组相比没有发生变化,依然是从大到小排列,B选项错误。C选项数组越界,i=0时x[n+1]不存在,C选项错误。D选项控制变量每次加2,实现数组偶数下标值的元素首尾倒置,奇数下标值元素不变,不能实现整个数组从小到大排列,D选项错误。31、有以下程序#include<stdio.h>main(){chars[10]="verygood",*ps=s;ps="too";s[4]=’\0’;puts(ps);}程序的运行结果是A、tooB、verygoodC、veryD、good标准答案:A知识点解析:程序中定义指针ps后,将数组s首地址赋给ps初始化后,再使指针ps指向字符串"too"的首地址,修改s[4](即字符g)不会改变ps的值,所以输出ps的结果是"too",答案为选项A。32、有以下程序#include<stdio.h>main(){FILE*fp;inti,a[6]={1,2,3,4,5,6},k;fp=fopen("data.dat","w+");fprintf(fp,"%d\n",a[0]);for(i=1;i<6;i++){rewind(fp);fprintf(fp,"%d\n",a[i]);}rewind(fp);fscanf(fp,"%d",&k);fclose(fp);printf("%d\n",k);}程序运行后的输出结果是A、6B、21C、123456D、654321标准答案:A知识点解析:本题首先定义文件指针变量fp和一个数组a[],再打开一个文件"data.dat",随后先给文件写入数据a[0],由于rewind函数是将文件指针从当前位置重新指向文件开始位置,所以for循环依次将数组a中的数据写入文件开始位置,退出循环后,文件中的数据顺序为:654321,重新使指针指向文件开始位置,将此时fp指向的数据(即文件中第一个数据6)写入变量k中,关闭文件,输出k值,答案为A选项。33、一棵完全二叉树共有360个结点,则在该二叉树中度为1的结点个数为A、0B、1C、180D、181标准答案:B知识点解析:在二叉树中,一个结点所拥有的后件个数称为该结点的度。完全二叉树指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干结点。由定义可以知道,完全二叉树中度为1的结点个数为1或者0。若结点总数为偶数,则有1个度为1的结点;若结点总数为奇数,没有度为1的结点。由于题目中的完全二叉树共有360个结点,则度为1的结点个数为1。故选择B选项34、有以下程序#include<stdio.h>main(){inta[3][3]={{1,3,5,},{7,9,11,},{13,15,17}};int(*p)[3]=a,i,j,n=0;for(i=0;i<3;i++)for(j=0;j<2;j++)n+=*(*(p+i)+j);printf("%d\n",n);}程序运行后的输出结果是A、54B、60C、36D、48标准答案:D知识点解析:for循环的作用是求数组各行前二列的数字之和。*(*(p+i)+j)?p[i][j]1+3+7+9+13+15=48,因此答案为D选项.35、设循环队列存储空间为Q(1:50),初始状态为front=rear=50。经过一系列入队和退队操作后,front=rear=25,则该循环队列中元素个数为A、26B、25C、24D、0或50标准答案:D知识点解析:循环队列是队列的一种顺序存储结构,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。循环队列长度为50,由初始状态为front=rear=50可知此时循环队列为空。入队运算时,首先队尾指针rear进1(即rear+1),然后在队尾指针rear指向的位置插入新元素。特别的,当队尾指针rear=50+1时,置rear=1。退队运算时,排头指针front进1(即front+1),然后删除front指针指向的位置上的元素,当排头指针front=50+1时,置front=1。若经过运算,front=rear可知队列空或者队列满,则队列中有0或者50个元素。故选D选项36、有以下程序段charch;intk;ch=’a’;k=12;printf("%c,%d,",ch,ch,k);printf("k=%d\n",k);已知字符a的ASCII十进制代码为97,则执行上述程序段后输出结果是()。A、因变量类型与格式描述符的类型不匹配输出无定值B、输出项与格式描述符个数不符,输出为零值或不定值C、a,97,12k=12D、a,97,k=12标准答案:D知识点解析:在用基本输出函数printf时,格式说明与输出项的个数应该相同。如果格式说明的个数少于输出项的个数,多余的输出项不予输出;如果格式说明个数多于输出项个数,则对于多余的格式项输出不定值或0。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、在结构化方法中,软件功能属于软件开发中的()阶段。A、详细设计B、需求分析C、总体设计D、编程调试标准答案:C知识点解析:总体设计过程通常由两个主要阶段组成:系统设计,确定系统的具体实现方案;结构设计,确定软件结构。为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。分析员结合算法描述仔细分析数据流图中的每个处理,如果一个处理的功能过分复杂,必须把它的功能适当地分解成一系列比较简单的功能。二、程序填空题(本题共1题,每题1.0分,共1分。)39、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:统计形参S所指的字符串中数字字符出现的次数,并存放在形参t所指的变量中,最后在主函数中输出。例如,若形参s所指的字符串为“abcdef35adgh3kjsdf7”,则输出结果为4。请在程序的下画线处填入正确内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>voidfun(char*s,int*t){inti,n;n=0;/*********found*********/for(i=0;【1】!=0;i++)/*********found*********/if(s[i]>=’0’&&s[i]<=【2】)n++;/*********found*********/【3】;}main(){chars[80]="abcdef35adgh3kjsdf7";intt;printf("\nTheoriginalstringis:%s\n",s);fun(s,&t);printf("\nTheresultis:%d\n",t);}标准答案:(1)s[i](2)’9’(3)*t=n知识点解析:填空1:通过for循环语句来判断是否到字符型结尾,变量i用来存放字符型数组下标,则应填入s[i]。填空2:题目要求判断数字字符,所以此处应填入‘9’。填空3:将数字字符个数存入变量t中,此处需注意变量t是指针变量。三、程序修改题(本题共1题,每题1.0分,共1分。)40、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:用递归算法计算斐波拉契数列中第n项的值。从第1项起,斐波拉契数列为:1,1,2,3,5,8,13,21.…例如,若给n输入7,则该项的斐波拉契数值为13。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>longfun(intg){/*********found*********/switch(g);{case0:return0;/*********found*********/case1;case2:return1;}return(fun(g-1)+fun(g-2));}voidmain(){longfib;intn;printf("Inputn:");scanf("%d",&n);printf("n=%d\n”,n);fib=fun(n);printf("fib=%d\n\n",fib);}标准答案:(1)去掉分号(2)case1:case2:return1;知识点解析:C语言中,switch语句之后不能有分号,并且case语句常量后应用的是冒号。四、程序设计题(本题共1题,每题1.0分,共1分。)41、函数fun的功能是:将s所指字符串中除下标为偶数同时ASCII码值也为偶数的字符外,其余的全部删除;字符串中剩余字符所形成的新串放在t所指的数组中。例如,若S所指字符串中的内容为“ABCDEFG123456”,其中字符A的ASCII码值为奇数,因此应当删除;字符B的ASCII码值为偶数,但在数组中的下标为奇数,因此也应当删除;字符2的ASCII码值为偶数,在数组中的下标也为偶数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应足“246”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,chart[]){}voidmain(){charS[100],t[100];system(“CLS”);printf(“\nPleaseenterstringS:”);scanf(“%S”,S);fun(s,t);printf(“\nTheresultis:%s\n”,t);}标准答案:voidfun(char*s,chart[]){inti,j=0;for(i=0;s[i]!=‘\0’;i++)if(i%2==0&&s[i]%2==0)/*将s所指字符串中下标和ASCII码值都为偶数的字符放入数组t中*/t[j++]=s[i],t[j]=‘\0’;/*在字符串最后加上结束标识*/}知识点解析:本题要求删除除了下标为偶数同时ASCII码值也为偶数的字符,即保留下标为偶数同时ASCII码值也为偶数的字符。循环语句用于遍历字符串,条件语句用于判断当前字符是否符合要求。注意判断条件是下标为偶数,同时ASCII码值也为偶数,所以应使用逻辑与“&&”运算符。国家二级(C语言)机试模拟试卷第3套一、选择题(本题共38题,每题1.0分,共38分。)1、下列哪一条不属于数据库设计的任务?()A、设计数据库应用结构B、设计数据库概论结构C、设计数据库逻辑结构D、设计数据库物理结构标准答案:A知识点解析:数据库设计工作量大而且过程复杂,既是一项数据库工程也是一项庞大的软件工程。考虑数据库及其应用系统开发全过程.将数据库设计分为以下6个阶段:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施和数据库的运行和维护。2、有以下程序:#inlude<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个字节。3、设有定义:chars[81];inti=0;以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是()。A、gets(s);B、while((s[i++]=getchar())!=’\n’);s[i]=’\0’;C、scanf("%s",s);D、do{scanf("%c",&s[i]);}while(s[i++]!=’\n’);s[i]=’\0’;标准答案:C知识点解析:字符串的输入不能使用scanf("%s",s);而应该使用gets(s)。4、字符串"\\\"ABCDEF\"\"的长度是()。A、11B、10C、5D、3标准答案:B知识点解析:本题涉及字符串的两个最基本的概念。①字符串的长度是指字符串中字符的个数,但不包含字符串结束符;②以反斜线“\”开头的特殊字符序列,意思是把反斜线后面的字符序列转换成特定的含义,而不是原来的含义,不包含在字符串长度之内,“\”连同后面的字符为一个长度。5、有以下程序:#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函数,每次都关闭文件,并且重新回到文件首地址。6、以下叙述错误的是()。A、C语言区分大小写B、C程序中的一个变量,代表内存中一个相应的存储单元,变量的值可以根据需要随时修改C、整数和实数都能用C语言准确无误地表示出来D、在C程序中,正整数可以用十进制、八进制和十六进制的形式来表示标准答案:C知识点解析:本题涉及C语言最基本的3个概念:①C语言是区分大小写的,q和Q是两个不同的变量;②变量的实质就是在内存中占据一定的存储单元,存储单元里存放的是该变量的值,变量的值可以根据需要进行修改;③整数在允许的范围内可以准确的表示出来,但不可能表示无限度的实数。正整数可用二进制、十进制、八进制和十六进制表示。7、有以下程序:#include<stdio.h>main(){intn,*p=NULL;*p=&n;printf("Inputn:");seanf("%d",&p);prinff("outputn:");printf("%d\n",p);}该程序试图通过指针p为变量n读入数据并输出,但程序有多处错误,以下语句正确的是()。A、intn,*P=NULL;B、*p=&n;C、scanf("%d",&p)D、printf("%d\n",p);标准答案:A知识点解析:选项B的正确写法应为p=&n;选项C的正确写法应为scanf("%d",p);选项D的正确写法应为printf("%d\n",*p)。8、数据库应用系统中的核心问题是()。A、数据库设计B、数据库系统设计C、数据库维护D、数据库管理员培训标准答案:A知识点解析:数据库应用系统中的核心问题是数据库的设计。9、检查软件产品是否符合需求定义的过程称为()。A、确认测试B、需求测试C、验证测试D、路径测试标准答案:A知识点解析:确认测试的任务是验证软件的功能和性能,以及其他特性是否满足需求规格说明中确定的各种需求。10、有以下程序#includevoidmain(){chars[][={"01aXy");inti,n=0;for(i=0;s[i]!=0;i++)if(s[i]<=’a’&&s[i]>=’z’)n++;printf("%d、n",n);}程序运行后的输出结果是()。A、0B、2C、3D、5标准答案:A知识点解析:这段程序的功能求出字符串s中字符的ASCII码小于小写字符a并且大于小写字符z的字符的个数。因为小写字符z的ASCII码大于小写字符a的ASCII码,所以满足a的ASCII码并且大于z的的ASCII码的字符是不存在的,所以输出0。11、以下程序运行后的输出结果是()。#includemain()voidreverse(inta[],intn){intb[10]={10,9,8,7,6,5,4,3,2,1};inti,s=0;{inti,t;reverse(b,10);for(i=0;iA、27B、6c)25C、30标准答案:B知识点解析:本题考查函数调用时的参数传递。函数reverse将数组b进行了逆置,此时b[10]={10,9,8,7,6,5,4,3,2,1},后面for语句的功能是将b中的后3个数累加,并将结果放在s中,最后将s输出,结果s=1+2+3=6。12、下列不属于软件工程3个要素的是()。A、工具B、过程C、方法D、环境标准答案:D知识点解析:软件工程包括3个要素,即方法、工具和过程。方法是完成软件工程项目的技术手段;工具支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。13、下面的程序在编译时产生错误,其出错原因是()。#inc1udemain(){int1_case;floatprintF;printf("请输入2个数:");scanf("%d%f",&1_case,&printF);printf("%d%f\n",1_case,printF);}A、定义语句出错,1case不能作为变量名B、定义语句出错,printF不能用作用户自定义标识符C、定义语句无错,scanf不能作为输入函数使用D、定义语句无错,printf不能输出1case的值标准答案:A知识点解析:C语言变量名可由数字,字母,下划线构成,但首字符不能为数字。14、对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是()。A、快速排序B、冒泡排序C、直接插入排序D、堆排序标准答案:D知识点解析:在最坏的情况下,堆排序需要比较的次数为O(nlog2n),所以选择D)。15、若a、b、c、d都是int型变量且都已经正确赋初值,则以下不正确的赋值语句是()。A、a+d;B、a++;C、a=b=c=d=100;D、a=(b=3)+(d=5);标准答案:A知识点解析:C语言规定,赋值号的右边可以是一个赋值表达式,因此选项C)、选项D)正确;在选项B)中,a++是一个自加1的表达式,a被重新赋值,因此它是一个合法的赋值表达式;选项A)中,a+d是一个算术表达式,虽然最后有一个分号,但这个表达式中没有赋值操作,因此它不是一条赋值语句。16、设有以下说明,则不正确的叙述是()。unionun{inta;charb:floatc;}art;A、arr所占的内存长度等于成员c的长度B、arr的地址和它的各成员的地址都是同一地址C、arr可以作为函数参数D、不能在定义arr时对它初始化标准答案:C知识点解析:本题主要考查联合体的内存使用:联合体所占用的内存空间为最长的成员所占用的空间,int占2个字节,char占1个字节,float占4个字节,所以arr所占的内存长度等于成员c的长度;arr的地址和它的各成员的地址都是同一地址;不能直接对arr赋值,即不能在定义arr时对它初始化;arr也不可以作为函数参数。17、有以下程序:#include<stdio.h>main(){inta=1,b=2,c=3,x;x=(a^b)&c;printf("%d\n",x);}程序运行后的输出结果是()。A、3B、1C、2D、0标准答案:A知识点解析:本题考查位运算符以及相关运算,^为按位或,&为按位与,那么a^b为3,再与c按位与仍然为3,所以答案为A选项。18、软件按功能可以分为:应用软件、系统软件、支撑软件(或工具软件),下面属于应用软件的是()。A、编译程序B、操作系统C、教务管理系统D、汇编程序标准答案:C知识点解析:系统软件主要包括:①操作系统软件;②各种语言的解释程序和编译程序;③各种服务性程序;④各种数据库管理系统。操作系统、编译程序与汇编程序属于系统软件,编译程序与汇编程序属于支撑软件,教务管理系统属于应用软件。19、有以下程序:#includeintfun(inta,intb){if(b==0)returna;elsereturn(fun(--a,--b));}main(){printf("%d/n",fun(4,2));}程序运行的结果是()。A、1B、2C、3D、4标准答案:B知识点解析:fun函数是一个递归函数,其功能是:当b的值为零时,返回此时a的值;否则,返回fun(--a,--b),即将a和b的值分别减1后返回fun(a,b)。当b不断递减时,a也不断递减,直到b为零。执行过程为:执行fun(4,2),b=2,返回fun(3,1),此时b=1,返回fun(2,0),b=0,返回a的值2。20、有以下程序:#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选项正确。21、若变量已正确定义,有以下程序段:i=0:doprintf("%d,",i);while(i++);printf("%d\n",i);其输出结果是()。A、0,0B、0,1C、1,1D、程序进入无限循环标准答案:B知识点解析:do…while循环的执行过程如下:①执行do后面的循环体中的语句。②计算while后一对圆括号中表达式的值。当值为非O时,转去执行步骤①;当值为0时,执行步骤③。③退出do…while循环。对于本题变量i的初始值等于“0”,接着执行do后面的循环体中的语句,输出变量i的值0。再判断while后面括号中表达式i++的值,其值为0,所以循环结束。此时变量i的值经过自加已经变为1,所以再次输出i的值“1”。22、有以下程序:#include#definePT3.5;#defineS(x)PT*x*x;main(){inta=1,b=2;printf("%4.1f\n",S(a+b));}程序运行后的输出结果是()。A、7.5B、31.5C、程序有错无输出结果D、14.0标准答案:C知识点解析:宏定义不是c语句,末尾不需要分号。所以语句“printf("%4.1f、n",S(a+b));”展开后为“printf("%4.1f\n",3.5;*a+b*a+b;);”所以程序会出现语法错误。23、有以下程序:#includestruetord{intx,y;}dt[2]={1,2,3,4};main(){struetord*P=dt;prinff(“%d,”,++(P一>x));prinff(“%d\n”,++(P一>y));}程序运行后的输出结果是()。A、3,4B、4,1C、2,3D、1,2标准答案:C知识点解析:本题考查结构体数组的相关操作,dt为结构体数组,那么指针p指向了结构体数组的一个元素,所以p一>x为1,p一>y为2,结果为2,3。选项C正确。24、有以下程序:#inelude<stdio.h>intfun(inta[],intn,intx){int*p=a;while(p<a+n&&*p!=x)p++;if(p<a+n)returnp-a;elsereturn-1;}main(){inta[10]={1,2,3,4,5,6,7,8,9,10};printf("%d\\n",fun(a,10,10));}程序运行后的输出结果是()。A、9B、-1C、10D、0标准答案:A知识点解析:while(p<a+n&&*p!=x)p++;当p=a;n=10,x=10;时while循环条件成立,直到p=a+9,结束循环,执行下一条语句,if条件成立,返回p-a,此时执行p-a=a+9-a=9;因此,输出9。故答案为A选项。25、有以下程序:#includemain(){FILE*fp;inta[10]={1,2,3},i,n;fp=fopen("d1.dat","w");for(i=0;i<3;i++)fprintf(fp,"%d",a[i]);fprintf(fp,"\n");fclose(fp);fp=fopen("d1.dat","r");fscanf(fp,"%d",&n);fclose(fp);printf("%d\n",n);}程序的运行结果是()。A、321B、12300C、1D、123标准答案:D知识点解析:程序首先将数组a[10]中的元素l、2、3分别写入了文件d1.dat文件中,然后又将d1.dat文件中的数据“123”整体写入到了变量n的空间中,所以打印n时输出的数据为123。26、有定义语句:inti;chars1[10],s2[10]=“Program”;则能正确给sl数组赋字符串的语句是()。A、for(i=0;i<=7;i++)s1[i]=s2[i];B、s1=s2;C、while(s2)s1++=s2++;D、for(i=0;s2[i];i++)s1[i]=s2[i];标准答案:A知识点解析:首先字符数组只有在初始化的时候整体赋值,否则只能对字符数组逐个赋值,所以选项B错误;字符数组名s1、s2是常量,不能改变,故选项C错误;字符串“Program”包含结尾的‘\0’,选项D中在处理到s2[i]=’\0’时,跳出循环,未将’\0’赋给s1,所以选项D也是错误的;由于“Program”包含结尾的’\0’总共有8个字符,所以选项A是正确的,答案为A。27、以下叙述中正确的是A、数组下标的下限是1B、数组下标的下限由数组中第一个非零元素的位置决定C、数组下标的下限由数组中第一个被赋值元素的位置决定D、charc1,c2,*c3,c4[40];是合法的变量定义语句标准答案:D知识点解析:数组下标的下限是0。因此D选项正确。28、在以下选项中,按照C语言规定,不能出现在标识符中的是()。A、大写字母B、下划线C、数字字符D、连接符标准答案:D知识点解析:按照C语言规定,标识符由字母、数字和下划线组成,且开头必须是字母或下划线,所以选项D不合法。29、有以下程序:intf1(doublea){returna*a;)intf2(intx,inty){doublea,b;a=f1(x);b=f1(y);returna+b;}main(){doublew;w=f2(2.1,4.0);}程序执行后,变量W的值是()。A、20.21B、20C、20.0D、0.0标准答案:C知识点解析:本题考查函数调用的使用。计算w的时候,先调用f2函数,f2函数的公式是“a+b”,计算a和b的时候又调用到f1函数,f1的函数是“a*a”,因此,w的计算公式为:w=(double)[(int)(2.1*2.1)+(int)(4.0*4.0)]=20.0。30、有三个关系表R、S和T如下,其中三个关系对应的关键字分别为A,B和复合关键字(A,B)。表T的记录项(b,q,4)违反了A、实体完整性约束B、参照完整性约束C、用户定义的完整性约束D、关系完整性约束标准答案:B知识点解析:关系模型中可以有3类完整性约束:实体完整性约束、参照完整性约束和用户定义的完整性约束。实体完整性约束是指,若属性M是关系的主键,则属性M中的属性值不能为空值。T中主键不为空,A选项错误。参照完整性约束是指,若属性(或属性组)A是关系M的外键,它与关系M的主码相对应,则对于关系M中的每个元组在A上的值必须为:要么取空值;要么等于关系M中某个元组的主码值。属性B为关系S的外键,它与关系S的主键相对应,则T中元组在B上应该为空或者与S中主键值相等,题目中不相等,违反参照完整性约束,B选项正确。此题关系中无语义要求,C选项错误。31、有如下程序#include<stdio.h>main(){char*p,old_str[10]="wind";intpassword;scanf("%d",&password);p=old_str;while(*p){printf("%c",*p+password);p++;}printf("\n");}程序运行时,从键盘输入2<回车>,输出结果是A、ykpfB、windC、xjoeD、2222标准答案:A知识点解析:程序执行过程为:定义字符数组str并且初始化为:"wind",定义password并通过scanf函数从键盘为其赋值2。定义指针p并使其指向字符串。通过while循环,将字符数组中每一个字符的ASCII码加2,并且按字符格式输出每一个字符。程序运行后输出结果是:ykpf,A选项正确。32、设有定义:intn=1234;doublex=3.1415;则语句printf("%3d,%1.3f\n",n,x);的输出结果是A、1234,3.142B、123,3.142C、1234,3.141D、123,3.141标准答案:A知识点解析:函数printf()中,%md指输出带符号的十进制整数,给定最小宽度为m位,不足m位左端补空格,超过m位按实际位数输出,%.nf表示以小数形式输出实数,小数占n位,对应题目,答案为A选项。33、有以下程序#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、EOFB、MC、KLMD、L标准答案:B知识点解析:for循环中,每次都执行打开文件res.txt、写入文件、再关闭文件的操作,由于fopen函数使用’w’模式写文件,所以每次打开res.txt后,都删除文件中的原有数据,再重新写入新数据。所以文件最终的内容只与最后一次for循环有关,最后一次for循环是向文件res.txt写入’K’+2,即M,正确答案是B选项。34、以下程序拟实现计算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选项.35、有以下程序#include<stdio.h>main(){inti;charc;scanf("%c",&c);for(i=0;i<5;i++){if(i>c)continue;printf("%d,",i);}}执行时输入:0<回车>后,则输出结果是A、5B、0,0,0,0,0,C、0,1,2,3,4,D、0,1,标准答案:C知识点解析:scanf("%c",&c),输入的字符,题目中输入了0,是字符,对应于ASCII码为48,因此for循环,i的范围从0~5,均小于48,if条件不成立,直接执行下一条语句,因此执行printf,因此得到的结果是0,1,2,3,4。故答案为C选项36、设循环队列存储空间为Q(1:50),初始状态为front=rear=50。经过一系列入队和退队操作后,front=rear=25,则该循环队列中元素个数为A、26B、25C、24D、0或50标准答案:D知识点解析:循环队列是队列的一种顺序存储结构,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。循环队列长度为50,由初始状态为front=rear=50可知此时循环队列为空。入队运算时,首先队尾指针rear进1(即rear+1),然后在队尾指针rear指向的位置插入新元素。特别的,当队尾指针rear=50+1时,置rear=1。退队运算时,排头指针front进1(即front+1),然后删除front指针指向的位置上的元素,当排头指针front=50+1时,置front=1。若经过运算,front=rear可知队列空或者队列满,则队列中有0或者50个元素。故选D选项37、下列叙述中错误的是()。A、C语句必须以分号结束B、复合语句在语法上被看作一条语句C、空语句出现在任何位置都不会影响程序运行D、赋值表达式末尾加分号就构成赋值语句标准答案:C知识点解析:C语言规定每条语句和数据定义的最后必须有一个分号,分号是C语句的必要组成部分。复合语句也称为“语句块”,其形式如下:{语句1;语句2;……”语句n;},即用一对大括号把若干语句括起来构成一个语句组。一个复合语句在语法上视为一条语句,在一对花括号内的语句数量不限。一个赋值表达式的最后加一个分号就成为一条语句,即赋值语句。空语句是只有一个分号的语句,它什么也不做,程序设计中有时需要加一个空语句来表示存在一条语句,但随意加分号会导致逻辑上的错误,而且这种错误十分隐蔽,编辑器也不会提示逻辑错误,需要慎用。38、以下叙述中正确的是()。A、在C语言中,预处理命令行都以#开头B、预处理命令行必须位于C源程序的起始位置C、#include<stdio.h>必须放在C程序的开头D、C语言的预处理不能实现宏定义和条件编译的功能标准答案:A知识点解析:C语言中。凡是以#开头的都被称为编译预处理行,选项A正确;预处理行可以放在C源程序的任何位置,习惯放在起始位置,选项B错误;语句#include<stdio.h>必须放在使用文件stdio.h中相关方法的语句之前,但是不一定非要放在C程序开头.选项C错误;预处理包括宏定义、文件包含和条件编译等,选项D错误。二、程序填空题(本题共1题,每题1.0分,共1分。)39、给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至x所指数组的后部,平均值作为函数值返同,在主函数中输出平均值和移动后的数据。例如,有10个正数:47、30、32、40、6、17、45、15、48、26,其平均值为30.500000。移动后的输出为:30、6、17、15、26、47、32、40、45、48。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdlib.h>2#include<stdio.h>3#define.N104doublefun(double*x)5{inti,j;doubleav,y[N];6av=0;7for(i=0;i<N;i++)8/*********found*********/9av+=【1】;10for(i=j=0;i<N;i++)11if(x[i]<av){12y[j]=x[i];x[.i]=-1;13/*********found*********/14【2】;15}16i=0;17while(i<N)18{if(x[i]!=-1)y[j++]=x[i];19/*********found*********/20【3】;21}22for(i=0;i<N;i++)x[i]=y[i];23returnav;24}25main()26{inti;doublex[N];27for(i=0;i<N;i++)28{x[i]=rand()%50;29printf(’’%4.0f’’,x[i]);}30printf(’’\n’’);31printf(’’\nTheaverageis:%f\n’’,fun(x));32printf(’’\nTheresult:\n’’,fun(x));33for(i=0

温馨提示

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

评论

0/150

提交评论