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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷37(共9套)(共67题)国家二级(C语言)机试模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新的数,并作为函数值返回。例如。输入一个整数:27638496,函数返回值为:64862。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKI.C中。不得增行或删行,也不得更改程序的结构!#includeunsignedlongfun(unsignedlongn){unsignedlongx=0;intt;while(n){t=n%10;/************found************/if(t%2==【1】)/************found************/x=【2】+t;/************found************/n=【3】;}returnx;}main(){unsignedlongn=-1;while(n>99999999||n<0){printf("Pleaseinput(0标准答案:(1)0(2)10*x(3)n/10知识点解析:第一空:“if(t%2==【1】)"是判断t是否是偶数,t是偶数的时候t%2等于0,故第一空处应填“0"。第二空:假设第一次得到的偶数是t=2,那么x=2第二次得到的偶数是t=4,那么x=2*10+4;第三次得到的t=6,那么x=24*10+6。由此可知,x每次是在前面一次的基础上乘以l0然后加上t,故第二处应填“10*x"。第三空:在while循环内逐个判断n的每一位,n%lO得到个位数,n/10之后n缩小10倍,下次n%10得到十位数,依此类推可求得n的每一位数字,故第三空处应将n缩小10倍,准备下次求整除10的余数,即第三空处应为“n/10"。二、程序修改题(本题共1题,每题1.0分,共1分。)2、在主函数中从键盘输入若干个数放入数中,用0结束输入并放在最后一个元素中。给定程序MODll.C中函数fun的功能是:计算数组元素中值为正数的平均值(不包括0)。例如:数组中元素中的值依次为:39,-47,21,2,-8,15,0,则程序的运行结果为:19.250000。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#includedoublefun(intx[]){/************found************/intsum=0.0;intc=0,i=0;while(x[i]!=0){if(x[i]>0){sum+=x[i];c++;}i++;}/************found************/sum\=c;returnsum;}main(){intx[1000];inti=0;printf("\nPleaseentersomedata(endwith0):");do{scanf("%d",&x[i]);}while(x[i++]!=0);printf("%f\n",fun(x));}标准答案:doublesum=0.0;sum/=c;知识点解析:(1)fun函数的返回值是double型,返回值sum的定义类型原题定义为int型,与fun的定义类型不符,所以将“intsum=0.0;”改为“doublesum=0.0;”。(2)第二个标识下的“sum\=c;”语句中的“\”符号是非法符号,这里应该是除号。所以,第二个标识下“sum\=c;”应该改为“sum/=c;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、编写函数fun,函数的功能是:从s所指的字符串中删除给定的字符。同一字母的大、小写按不同字符处理。若程序执行时输入字符串为:turbocandborlaMc++从键盘上输入字符:n,则输出后变为:turbocadborladC++如果输入的字符在字符串中不存在,则字符串照原样输出。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#includevoidfun(chars[],charc){}s[i]=’\0’;}NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;chars[81],ch,w;intlen;rf=fopen("in.dat","r");wf=fopen("out.dat","w");fgets(s,80,rf);fscanf(rf,"%c",&ch);len=strlen(s)-1;w=s[len];if(w==’\n’||w==0x1a)s[len]=0;fun(s,ch);fprintf(wf,"%s",s);fclose(rf);fclose(wf);}main(){staticcharstr[]="turbocandborlandc++";charch;printf("原始字符串:%s\n",str);printf("输入一个字符:");scanf("%c",&ch);fun(str,ch);printf("str[]=%s\n",str);NONO();}标准答案:{char*p=s;inti=0;while(*p){if(*p!=c)s[i++]=*p;p++;}知识点解析:进入fun函数,根据前面的分析:(1)首先,设置一个指针变量指向字符串的头位置,并使用循环,依次查找字符串中的指定字符。(2)若找到指定字符,则将后面位置的第一个非指定字符移到当前位置,并将其后的字符也依次前移。(3)最后将处理的字符串输出。国家二级(C语言)机试模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充函数fun(),该函数的功能是:把数给aa中元素下标为奇数的元素按从大到小的顺序重新保存在原数组中,其它元素位置不变。例如,输入“33,67,42,58,25,76,85,16,41,56”,则输出“33,76,42,67,25,58,85,56,41,16”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#defineN10voidfun(intaa[]){inti,j,t;for(【】;i<N;i=i+2){for(j=i;j<N;j=j+2)if(aa[i]<aa[j]){【】;aa[j]=aa[i];【】;}}}main(){inti;intaa[N]={33,67,42,58,25,76,85,16,41,56};clrscr();printf("\n***originallist***\n");for(i=0;i<N;i++)printf("%4d",aa[i]);fun(aa);printf("\n***newlist***\n");for(i=0;i<N;i++)printf("%4d",aa[i]);}标准答案:i=1t=aa[j]aa[i]=t知识点解析:第一空:本题采用选择法进行排序。因为题目要求将下标为奇数的元素进行排序,所以下标为0的元素不用考虑,从下标为1的元素开始。第二空:借助第三个变量t交换两数。首先将aa[j]赋给t暂存。第三空:然后将aa[i]赋给aa[j]此时aa[j]中的数已经发生变化,而t中暂存了a[j]原来的值,所以最后将t赋给aa[i]。二、程序修改题(本题共1题,每题1.0分,共1分。)2、已知一个数列从0项开始的前3项:0,0,1,以后的各项都是其相邻的前3项之和。下列给定的程序中,函数fun()的功能是:计算并输出该数列前。项的平方根之和sum。n的值通过形参传入。例如,当n=10时,程序的输出结果应为23.197745。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.试题程序:#include<conio.h>#include<stdio.h>#include<math.h>/***************found*******************/fun(intn){doublesum,s0,s1,s2,s;intk;sum=1.0;if(n<=2)sum=0.0;s0=0.0;sl=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;clrscr();printf("InputN=");scanf("%d",&n);printf("%f\n",fun(n));}标准答案:(1)错误:fun(intn)正确:doublefun(intn)(2)错误:returnsum正确:returnsum;知识点解析:ANSI新标准允许使用这样一种方法对形参类型做说明,即在列出“整型表列”时,同时说明参数类型。如:intmax(intx,inty){...}相当于:intmax(x,y)intx,y;{...}又如:floatfun(array,n)intarray[10],n;可以写成floatfun(intarray[10],intn)三、程序设计题(本题共1题,每题1.0分,共1分。)3、编写一个函数,从传入的num个字符中找出最长的一个字符串,并通过形参指针max传回该串地址(用****作为结束输入的标志)。注意:部分源程序给出如下.请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>#include<string.h>fun(char(*a)[81],intnum,char*max){}main(){charss[l0][81],*ps;intn,i=0;clrscr();prlntf("输入若干个字符串");gets(ss[i]);puts(ss[i]);while(!strcmp(ss[i],"****")==0)/*用****作为结束输入的标志*/{i++;gets(ss[i]);puts(ss[i]);}n=i;ps=fun(ss,n,&ps);print~("\nmax=%s\n",ps);}标准答案:fun(char(*a)[81],intnum,char*max){inti=0;max=a[0];for(i=0;i<num;i++)/*找出最长的一个字符串*/if(strlen(max)<strlen(a[i]))max=a[i];returnmax;/*传回最长字符串地址*/}知识点解析:做本题之前,我们先应该明白ss是一个指向一维数组的指针变量,max是指向指针变量的指针变量。所以引用时要注意加上*。我们不可能只用max,因为ss[0]是一个数组地址而不是一个指针的地址。国家二级(C语言)机试模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是计算下式例如:若形参e的值为1e-3,函数的返回值为0.551690。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!标准答案:(1)3.(2)>(3)(2*i+1)知识点解析:函数劬的功能是求级数和,观察可知,级数项有规律变化,可以用循环来累加求和。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:判断一个整数是否是素数,若是返回1,否则返回0。在mai()函数中,若fun返回1输出YES,若fun返回0输出NO!。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数。不得增行或删行,也不得更改程序的结构!标准答案:(1)k++;(2)if(m==k)知识点解析:本题中函数的功能是判断一个整数n是否是素数。素数是只能被1和本身整除的正整数(>1),所以判别n是否为素数,只要用2、3、…、n-1这些数逐个去除n,观察余数是否为0即可,只要有一次相除余数为0,n就不是素数,否则n为素数。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数,函数的功能是删除字符串中的所有空格。例如,主函数中输入“asdafaaz67”,则输出为“asdafaaz67”。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。标准答案:知识点解析:该程序功能是删除字符串中的所有空格。本题的解题思路是首先利用一个指向字符串的指针,查找不是空格的字符,然后将不是空格的字符赋值到字符串,如果是空格,则跳过该字符,这样就实现了空格字符的删除。国家二级(C语言)机试模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:将形参s所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。例如,形参s所指的字符串为:abs5defl26jkm8,程序执行后的输出结果为:22。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#include#includeintfun(char*s){intsum=0;while(*s){/************found/***********/if(isdigit(*s))sum+=s【1】;/**************found************/【2】;}/**************found*************/return【3】;}main(){chars[81];intn;printf("\nEnterastring:\n\n");gets(s);n=fun(s),printf("\nTheresultis:%d\n\n",n);}标准答案:(1)48或’/0’(2)s++(3)sum知识点解析:第一空:“if(isdigit(*s))sum+=*s【1】;"如果*s是数字字符的话,sum累加其对应的数字的和,第一空处是将*s转化为对应的数字,由审题分析可知,第一空为"’0’"或“48",’0’的ASCⅡ码值为48。第二空:“while(*s)"循环的终止条件是达到s字符串的结束,因此在循环体内s应该不断往字符串尾移动,故第二空处应为“s++"。第三空:“return【3】:"是返回累加和sum,故第蔓空处为“sum"。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:根据整型形参m,计算如下公式的值。例如,若m=2000,则应输出:0.000160。请改正程序中的语法错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#inclucle/****************found**************/fun(intm){doubley=0,d;inti;/****************found**************/for(i=100,i<=m,i+=100){d=(double)i*(double)i;y+=1.0/d;}return(y);}mein(){intn=2000;printf("\nTheresultis%lf\n",fun(n));}标准答案:(1)doublefun(in七m)(2)for(i=100;i<=m;i+=100)知识点解析:(1)第一个标识下的fun函数的定义,根据题干中给出的公式中的分数部分。可知应该具有double类型返回值。所以应将“。fun(intm)"改为“doublefun(intm)"。(2)第二个标识下的for循环过程是实现对公式的求解,C语句中for循环中的多个循环条件表达式是以分号为分隔符,所以第二个标识下“for(,净100,i<=m,i+=100)"改为“for(i=100;i<=m;i+=100)"。三、程序设计题(本题共1题,每题1.0分,共1分。)3、编写函数fun,其功能是:根据以下公式求p的值,结果由函数值带回。m与n为两个正整数且要求m>n。例如:m=12,n=8时,运行结果为495.000000。注意:部分源程序在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includefloatfun(intm,intn){}main()/*主函数*/{voidNONO();pzintf("p=%f\n",fun(12,8));NONO();}VOidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti,m,n;floats;fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(fp,"%d,%d",&m,&n);s=fun(m,n);fprintf(wf,"%f\n",s);}fclose(fp);fclose(wf);}标准答案:floatresult,temp=1.0;inti;for(i=1;i<=m;i++)temp=temp*i;//求m!result=temp;//result=m!for(temp=1.0,i=l;i<=n;i++)temp=temp*i;//求n!result=result/temp;//求m!/n!for(temp=1.0,i=1;i<=m—n;i++)temp=temp*i;//求(m—n)!result=result/temp;//求m!知识点解析:进入fun函数,根据前面的分析:首先,计算m!的值,先定义一个放阶乘值的变量temp,初值为1.0,通过循环的方法,用累乘器"temp=temp*i;"实现n!。同理可以求得n!、(m-n)!。其中,result用来存放计算结果。最后,根据题意,函数fun的函数体以return语句结束。国家二级(C语言)机试模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:找出N×N矩阵中每列元素中的最大值,并按顺序依次存放于形参b所指的一维数组中。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#defineN4voidfun(int(*a)[N],int*b){inti,j;for(i=0;i标准答案:(1)a[0][i](2)<(3)x,y知识点解析:第一空:第二个循环是寻找每列的最大值,方法是用最大值变量b[i]标记第一个待找数据,逐个把所有待找数据和b[i]进行比较,并用b[i]标记其当前最大值,从而找出最大值。故第一空处为第一个待找数据“a[0][i]。第二空:由上述的分析可知,如果b[i]小于a[j][i],那么用b[i]标记其当前最大值,故第二空处为“<"。第三空:fun函数的声明为:voidfun(int(*a)[N],int*b),函数的两个参数均是指针。故在主函数内fun函数的调用形式为“fun(x,y)",x是二维数组首地址,y是一维数组首地址。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:先从键盘上输入一个3行3列矩阵的各个元素的值,然后输出主对角线元素之和。请改正函数fun中的错误或在横线处填上适当的内容并把横线删除,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#includevoidfun(){inta[3][3],sum;inti,j;/***********found************/_________;printf("Inputdata:");for(i=0;i<3;i++){for(j=0;j<3;j++)/***********found************/scanf"%d",a[i][j]);}for(i=0;i<3;i++)sum=sum+a[i][i];printf("sum=%d\n",sum);}main(){fun();}标准答案:(1)sum=0(2)scanf("%d,",&a[i][j]);知识点解析:(1)根据题意计算元素求和,所以函数fun中不仅要有用于存储累加和的变量sum,而且要给sum赋初值。因此,填空处填上“sum=0"。(2)scanf()语句中的实参必须是地址型的,而下标a[i][j]却是整型的变量。因此第二个标识下“a[i][j]"应改为“&a[i][j]"。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,函数的功能是:将大于形参m且紧靠m的k个素数存入xx所指的数组中。例如,若输入17,5,则应输出:19,23,29,31,37。注意:部分源程序在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includevoidfun(inLm,intk,intxx[]){}Nain(){intIn,n,zz[1000];voidNONO();printf("\nPleaseentertwointegers:");scanf("%d%d",&m,&n);fun(m,n,zz);for(m=0;m标准答案:intr=0,temp,P,sign=1;for(temp=m+1;temp=temp)知识点解析:进入fun函数,根据前面的分析:首先,定义、初始化变量sign,作为素数的标志;定义r,初始化为存储素数数组的起始位。然后,每判断一次temp中的值是否为素数后,使temp的值增1,再次对temp中新的值进行判断其是否为素数,不断循环此过程,直到m的值等于指定的个数,即函数中的k个数。国家二级(C语言)机试模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:计算下式前n项的和作为函数值返回。例如,当形参n的值为10时,函数返回:-0.204491。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意;源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#includedoublefun(intn){inti,k;doubles,t;s=0;/**********found***********/k=【1】;for(i=1;i<=n;i++){/**********found***********/t=【2】;s=s+k*(2*i-1)*(2*i+1)/(t*t);/*********found************/k=k*【3】;}returns;}main(){intn=-1;while(n<0){print;f("Pleaseinput(n>0):");scarlf("%d",&n);)printf("\nTheresultis:%f\n",fun(n));}标准答案:(1)1(2)2*i(3)(一1)知识点解析:第一空:由“s=s+k*(2*i-1)*(2*i+1)/(t*t);"可知t*t表示的是级数项的分母,t=2*i,t=2,4,6…,故t的初始化值应为1,因此第一空处应为“1"。第二空:由第一空的分析可知,第二空处应为“2*i"。第三空:由“s=s+k*(2*i-1)*(2*i+1)/(t*t);"可知,k是级数项的(-1)n-1部分,所以在循环中k是每次都乘以-1,故第三处应为“(-1)"。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:将字符串中的字符按逆序输出,但不改变字符串中的内容。例如,若字符串为abed,则应输出:dcba。请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include/*****************found****************/fun(chara){if(*a){fun(a+1);/***************found*****************/printf("%c"*a);}}main(){chars[10]="abed";printf("处理前字符串=%s\n处理后字符串=",s);fun(s);printf("\n");}标准答案:(1)voidfun(char*a)(2)printf("%c",*a);知识点解析:(1)主函数中“fun(s);"语句中的s是数组名,所以在:fun函数中参数的定义应该是指针型,“fun(chara)"改为“voidfun(char*a)"。(2)pdntf函数的调用形式是:pfintf(格式字符串,输出项表),在格式字符串和输出项表之间有“,",因此第二个标识处应该是“printf("%c",*a);"。三、程序设计题(本题共1题,每题1.0分,共1分。)3、编写函数fun,它的功能是计算:s作为函数值返回。在C语言中可调用log(n)函数求ln(n).log函数的引用说明是:doublelog(doublex1。例如,若m的值为:20,fun函数值为:6.506583。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#includedoublefun(intm){}main(){voidNONO();printf("%f\n",fun(20));NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti,n;doubles;fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(fp,"%d",&n);s=fun(n);fprintf(wf,"%f\n",s);}fclose(fp);fclose(wf);}标准答案:{doubles=0.0;inti;for(i=1;i<=m;i++)s+=log(1.0*i);s=sqrt(s);returns;}知识点解析:(1)调用log(n)函数求ln(n)。(2)对调用log(n)进行累加求和,求得根号里的内容。(3)最后调用C语言的库函数sqrt计算(2)中求得值的平方根。国家二级(C语言)机试模拟试卷第7套一、选择题(本题共40题,每题1.0分,共40分。)1、算法的时间复杂度是指()。A、算法的长度B、执行算法所需要的时间C、算法中的指令条数D、算法执行过程中所需要的基本运算次数标准答案:D知识点解析:算法的时间复杂度,是指执行算法所需要的工作量,可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。2、以下数据结构中,属于非线性数据结构的是()。A、栈B、线性表C、队列D、二叉树标准答案:D知识点解析:二叉树属于非线性结构。栈是一种特殊的线性表,这种线性表只能在固定的一端进行插入和删除操作;队列可看作是插入在一端进行,删除在另一端进行的线性表。3、数据结构中,与所使用的计算机无关的是数据的()。A、存储结构B、物理结构C、逻辑结构D、线性结构标准答案:C知识点解析:数据的逻辑结构反映的是数据元素之间的逻辑关系,与使用的计算机无关。4、内聚性是对模块功能强度的衡量,下列选项中,内聚性较弱的是()。A、顺序内聚B、偶然内聚C、时间内聚D、逻辑内聚标准答案:B知识点解析:内聚是从功能角度来衡量模块的联系,它描述的是模块内的功能联系。内聚有如下种类,它们之间的内聚度由弱到强排列:偶然内聚——模块中的代码无法定义其不同功能的调用。但它使该模块能执行不同的功能,这种模块为巧合强度模块。逻辑内聚——这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的参数来确定该模块应完成哪一种功能。时间内聚——这种模块顺序完成一类相关功能,比如初始化模块,它顺序地为变量置初值。过程内聚——如果一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚。通信内聚——这种模块除了具有过程内聚的特点外,还有另外一种关系,即它的所有功能都通过使用公用数据而发生关系。顺序内聚——如果一个模块内各个处理元素和同一个功能密切相关,而且这些处理必须顺序执行,处理元素的输出数据作为下一个处理元素的输入数据,则称为顺序内聚。功能内聚——如果一个模块包括为完成某一具体任务所必需的所有成分,或者说模块中所有成分结合起来是为了完成一个具体的任务,此模块则为功能内聚模块。5、在关系中凡能惟一标识元组的最小属性集称为该表的键或码。二维表中可能有若干个键,它们称为该表的()。A、连接码B、关系码C、外码D、候选码标准答案:D知识点解析:在关系中凡能惟一标识元组的最小属性集称为该表的键或码。二维表中可能有若干个键,它们称为该表的候选码或候选键。从二维表的所有候选键中选取一个作为用户使用的键称为主键或主码。6、检查软件产品是否符合需求定义的过程称为()。A、确认测试B、需求测试C、验证测试D、路径测试标准答案:A知识点解析:确认测试的任务是验证软件的功能和性能,以及其他特性是否满足需求规格说明中确定的各种需求。7、数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下列图符名标识的图符不属于数据流图合法图符的是()。A、控制流B、加工C、存储文件D、源和潭标准答案:A知识点解析:数据流图用于抽象描述一个软件的逻辑模型,它由一些特定的图符构成,包括4个方面,即加工、数据流、存储文件、源和潭。8、待排序的关键码序列为(15,20,9,30,67,65,45,90),要按关键码值递增的顺序排序,采取简单选择排序法,第一趟排序后关键码15被放到第()个位置。A、2B、3C、4D、5标准答案:A知识点解析:选择排序的基本思想是扫描整个线性表,从中选出最小的元素,将它交换到表的最前面,然后对剩下的子表采用同样的方法,直到子表为空。所以第一趟排序后,将选出最小的元素9放在第一个位置,元素15则放在第二个位置。9、对关系S和关系R进行集合运算,结果中既包含关系S中的所有元组也包含关系R中的所有元组,这样的集合运算称为()。A、并运算B、交运算C、差运算D、除运算标准答案:A知识点解析:关系的并运算是指,由结构相同的两个关系合并,形成一个新的关系,其中包含两个关系中的所有元组。10、下列选项中,不属于数据管理员(DBA)职责的是()。A、数据库维护B、数据库设计C、改善系统性能,提高系统效率D、数据类型转换标准答案:D知识点解析:数据库管理员(DataBaseAdministrator,DBA)是指对数据库的规划、设计、维护、监视等的人员,其主要工作如下:数据库设计。DBA的主要任务之一是数据库设计,具体地说是进行数据模式的设计。数据库维护。DBA必须对数据库中的数据安全性、完整性、并发控制及系统恢复、数据定期转储等进行实施与维护。改善系统性能,提高系统效率。DBA必须随时监视数据库的运行状态,不断调整内部结构,使系统保持最佳状态与效率。11、C语言规定,在一个C程序中,main()函数的位置()。A、必须在系统调用的库函数之后B、必须在程序的开始C、必须在程序的最后D、可以在任意位置标准答案:D知识点解析:每个C程序有且只有一个主函数(main),且程序必须从main()函数开始执行,而且main()函数可以放在程序中的任意位置。12、以下叙述中正确的是()。A、C语言比其他语言高级B、C语言可以不用编译就能被计算机识别执行C、C语言以接近英语国家的自然语言和数学语言作为语言的表达形式D、C语言出现的最晚,具有其他语言的一切优点标准答案:C知识点解析:此题考查的是C语言的基本特点。C语言是一种高级编程语言,但并不是比其他语言高级;C语言源程序必须经过编译生成目标文件才能被计算机识别执行;C语言出现比较晚,它既有优点也有缺点,而并不是具有其他一切语言的优点。13、已知inta=6;则执行a+=a-=a*a;语句后,a的值为()。A、36B、0C、-24D、-60标准答案:D知识点解析:此题考查的是赋值表达式。执行语句“a+=a*a*a;”时,首先执行a=a-a*a=-30,然后执行a=a+a=-60。14、下列叙述中错误的是()。A、C语句必须以分号结束B、复合语句在语法上被看作一条语句C、空语句出现在任何位置都不会影响程序运行D、赋值表达式末尾加分号就构成赋值语句标准答案:C知识点解析:C语言规定每条语句和数据定义的最后必须有一个分号,分号是C语句的必要组成部分。复合语句也称为“语句块”,其形式如下:{语句1;语句2;……语句n;},即用一对大括号把若干语句括起来构成一个语句组。一个复合语句在语法上视为一条语句,在一对花括号内的语句数量不限。一个赋值表达式的最后加一个分号就成为一条语句,即赋值语句。空语句是只有一个分号的语句,它什么也不做,程序设计中有时需要加一个空语句来表示存在一条语句,但随意加分号会导致逻辑上的错误,而且这种错误十分隐蔽,编辑器也不会提示逻辑错误,需要慎用。15、若有定义:inta=7;floatx=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是()。A、2.5B、2.75C、3.5D、0标准答案: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。16、若下列选项中的各变量均为整型且已有值,其中不正确的赋值语句是()。A、++i;B、n1=(n2/(n3=2));C、k=i=j;D、a=b+c=2;标准答案:D知识点解析:本题考查赋值表达式。赋值表达式的一般形式是:变量名=表达式。C语言规定,不能给变量表达式赋值。17、下列关于逻辑运算符两侧运算对象的叙述中正确的是()。A、只能是整数0或1B、只能是整数0或非0整数C、可以是结构体类型的数据D、可以是任意合法的表达式标准答案:D知识点解析:逻辑运算符两侧的运算对象可以是任意合法的表达式。逻辑表达式的运算结果或者为1(“真”),或者为0(“假”)。18、若有说明inta[3][4];则a数组元素的非法引用是()。A、a[0][2*1]B、a[1][3]C、a[4-2][0]D、a[0][4]标准答案:D知识点解析:此题考查的是数组元素的引用。对于已定义的数组a[M][N],数组元素的正确引用必须满足行下标小于M,列下标小于N且为正整数。此题中,选项D)中列下标值出现溢出。19、下列说法不正确的是()。A、int*ptr;//指针指向整形数据B、char*ptr;//指针的类型是字符型指针C、int**ptr;//指针的类型是双重指针D、int(*ptr)[3];//是一个指针数组,数组共有三个元素,而三个元素是int型指针标准答案:D知识点解析:int(*ptr)[3]是一个数组指针,指针指向一个有3个int型变量的数组。20、有以下程序#include<stdio.h>voidmain(){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。21、有以下程序:#include<stdio.h>main(){inta[]={1,2,3,4),y,*p=&a[3];--p;y=*p;printf("y=%d\n",y);}程序的运行结果是()。A、y=0B、y=1C、y=2D、y=3标准答案:D知识点解析:程序首先定义了一个一维数组和指针,接着将数组第4个元素的地址赋给*p,进行--p使指针p指向了数组的第3个元素;通过y=*p,将数组第3个元素的值3赋给了y,所以选项D)正确。22、下面的for语句的循环次数为()。for(x=1,y=0;(y!=19)&&(x<6);x++);A、是无限循环B、循环次数不定C、最多执行6次D、最多执行5次标准答案:D知识点解析:本题考查for循环。只考虑x的取值变化,x从1取到5,可以循环5次,但是并不知道y是如何变化的,有可能出现y=19提前跳出循环的情况,所以是最多执行了5次。23、下列程序的输出结果是()。#include<stdio.h>voidmain(){inta=0,b=1,c=2;if(++a>0‖++b>0)++c;printf("%d,%d,%d",a,b,c);}A、0,1,2B、1,2,3C、1,1,3D、1,2,2标准答案:C知识点解析:本题考查if语句。先判断if语句的条件是否成立,因为++a=1>0,所以条件成立,又因为是进行逻辑或运算,在已知其中一个运算对象为真的情况下,不必判断另外一个运算对象的真假,即不进行++b操作,就可以直接得出整个表达式的值为逻辑1,执行下面的++c。24、有以下程序:#include<stdio.h>main(){intc;while((c=getchar())!=’\n’){switch(c-’3’){case0:case1:putchar(c+4);case2:putchar(c+4);break;case3:putchar(c+3);case4:putchar(c+3);break;}}printf("\n");}从第一列开始输入数据(<CR>代表一个回车符):3845<CR>,则程序输出结果为()。A、77889B、77868C、776810D、7.78866e+007标准答案:A知识点解析:题中while循环的条件是:当从键盘读入的字符不是’\n’时,执行,while循环。输入第一个字符3时:执行case0,什么也不输出;case1,输出7;case2,输出7;遇到break语句,跳出switch语句。输入第二个字符8时:c-’3’=5,不执行任何语句。输入第三个字符4时:c-’3’=1,执行case1。输出8;case2,输出8;遇到break语句,跳出switch语句。输入第四个字符5时:c-’3’=2,执行case2,输出9;遇到break语句,跳出switch语句。25、C语言规定,函数返回值的类型是()。A、由调用该函数时的主调函数类型所决定B、由return语句中的表达式类型所决定C、由调用该函数时系统临时决定D、由定义该函数时所指定的数值类型决定标准答案:D知识点解析:本题考查函数调用时的数值类型。函数调用时,函数返回值的类型既不由主调函数类型所决定,也不由return语句中的表达式类型所决定,更不是由系统临时决定,而是由定义该函数时所指定的数值类型所决定。26、执行下列程序时输入456<空格>789<空格>123<回车>,输出结果是()。#include<stdio.h>main(){charm[80];intc,i;scanf("%c",&c);scanf("%d",&i);scanf("%s",&m);printf("%c,%d,%s\n",c,i,m);}A、4.56789e+008B、4.78912e+006C、4,56,789,123D、4,56,789标准答案:D知识点解析:scanf函数中的“%c”表示通过键盘只读入一个字符型的数据,“&c”表示将该数据赋值给c,所以c=4。另外,以“%d”格式读入数据时,只有遇到空格或者换行等间隔时符才停止读入,所以i=56,m=789。27、已知下列函数定义:fun(int*b,intc,intd){intk;for(k=0;k<c*d;k++){*b=c+d;b++;}}则调用此函数的正确写法是(假设变量a的说明为inta[10])()。A、fun(*a,6,14);B、fun(&a,6,8);C、fun(a,8,4);D、fun((int)a,8,6);标准答案:C知识点解析:本题考查函数调用时的参数传递。fun函数的调用形式为fun(int*b,intc,intd)。调用数组时,用数组名表示一个指向数组的第一个元素的指针,因此调用时的形式为fun(a,8,4)。28、设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。29、有以下程序:#include<stdio.h>intflintt[],intn);main(){inta[4]={1,2,3,4},s;s=f(a,2);printf("%d\n",s);}intflintt[],intn){if((n>0)&&(n<5))returnt[n+1]+f(t,n-1);elsereturn0:}程序运行后的输出结果是()。A、4B、7C、10D、6标准答案:B知识点解析:本题主要考查的是函数的递归调用,子函数f是一个递归函数,所以主函数中执行f(a,2)时,其执行过程是a[3]+f(a,1)=a[3]+a[2]+f(a,0)=7。30、以下语句定义正确的是()。A、inta[1][4]={1,2,3,4,5);B、floata[3][]={{1,2},{2,3},{3,1}};C、longa[2][3]={{1},{1,2},{1,2,3},{0,0}};D、doublea[][3]={8);标准答案:D知识点解析:本题考查如何对二维数组的元素赋值。选项A),数组第二维的大小是4,但是却赋值了5个元素,数组溢出;选项B),C语言规定,对于二维数组,只可以省略第一个方括号中的常量表达式,而不能省略第二个方括号中的常量表达式;选项C),数组第一维的大小是2,但是赋值超过了2;选项D),在对二维数组元素赋初值时,可以只对部分元素赋初值,未赋初值的元素自动取0。31、下列一维数组说明中,不正确的是()。A、intN;scanf("%d",&N);intb[N];B、floata[]={1,6,6,0,2};C、#defineS10D、inta[S+5];标准答案:A知识点解析:本题考查一维数组的赋值。一维数组的一般定义格式为:类型说明符数组名[常量表达式]。其中,“[]”中的内容可以是整型常量,也可以是整型表达式。选项A)中的N是一个变量,所以错误。32、下面函数的功能是()。SSS(S,t)char*s,*t;{while((*s)&&(*t)&&(*t++==*s++));return(*s-*t);}A、将字符串s复制到字符串t中B、比较两个字符串的大小C、求字符串的长度D、将字符串S接续到字符串t中标准答案:B知识点解析:*s-*t的输出实际是比较两个字符的ASCII码值,比较两个字符串的大小。33、有以下程序:#include<stdio.h>#include"string.h"voidfun(char*s[],intn){char*t;intid;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(strlen(s[i])>strlen(s[j])){t=s[i];s[i]=s[j];s[j]=t;}}main(){char*ss[]={"bcc","bbcc","xy","aaaacc","aabcc"};fun(ss,5);printf("%s,%s\n",ss[0],ss[4]);}程序的运行结果是()。A、xy,aaaaccB、aaaacc,xyC、bcc.aabCCD、aabcc,bcc标准答案:A知识点解析:从main函数入手,定义了一个一维数组并赋初值,接着调用函数fun(),函数的功能是:比较数组中各元素的长度,按元素长度从小到大的顺序排列元素,所以执行fun(ss,5)函数后,*ss[]={"xy","bcc","bbcc","aabcc","aaaacc"),所以调用printf函数输出ss[0],ss[4]的值分别为xy,aaaacc。34、若已定义: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)中下标值出现溢出。35、以下选项中可用作C程序合法实数的是()。A、0.1B、3.0e0.2C、E9D、9.12E标准答案:A知识点解析:C程序的合法实数有两种表示形式,一种是小数形式,另一种是指数形式,对于用指数形式表示的实数来说,需要注意的是字母e或E之前必须要有数字,且字母e或E后面的指数必须为整数,所以选项A)为正确答案。36、以下叙述中不正确的是()。A、预处理命令行都必须以#号开始,结尾不加分号B、在程序中凡是以#号开始的语句行都是预处理命令行C、C程序在执行过程中对预处理命令进行处理D、预处理命令可以放在程序中的任何位置标准答案:C知识点解析:本题考查预处理命令的特点。编译预处理命令的特点有:①为了区分一般的语句,预处理命令行都必须以#开始,结尾不加分号;②预处理命令可以放在程序中的任意位置;③在程序中凡是以撑开始的语句都是预处理命令行。37、以下程序的输出结果是()。#include<stdio.h>#defineF(x)2.84+x#definew(y)printf("%d",(int)(y))#defineP(y)w(y)main(){intx=2;P(F(5)*x);}A、12B、13C、14D、16标准答案:A知识点解析:本题考查带参数的宏定义及相关运算。P(F(5)*x)=P(2.84+5*2)=P(12.84),调用w(12.84),输出(int)(12.84)=12。38、设有下面的定义:structst{inta;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。39、交换两个变量的值,不允许用临时变量,应该使用下列()位运算符。A、&B、^C、‖D、~标准答案:B知识点解析:按逻辑位运算的特定作用主要有3点:①用按位与运算将特定位清0或保留特定位;②用按位或运算将特定的位置设置为1;③用按位异或运算将某个变量的特定位翻转或交换两个变量的值。40、如果需要打开一个已经存在的非空文件“FILE”并进行修改,正确的语句是()。A、fp=fopen("FILE","r");B、fp=fopen("FILE","a+");C、fp=fopen("FILE","w");D、fp=fopen("FILE","r+");标准答案:D知识点解析:本题考查打开文件函数fopen(),打开文件函数fopen()的调用形式为:fp=fopen(文件名,文件使用方式)。“文件使用方式”说明:方式“r”为以输入方式打开一个文本文件;方式“a+”为以读/写方式打开一个文本文件,保留文件中原有的数据;方式“w+”为以读/写方式建立一个新的文本文件;方式“r+”为以读/写方式打开一个文本文件。二、程序填空题(本题共1题,每题1.0分,共1分。)41、用筛选法可得到2~n(n<10000)之间的所有素数,方法是:首先从素数2开始,将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0);接着从数表中找下一个非0数,并从数表中删去该数的所有倍数;依此类推,直到所找的下一个数等于n为止。这样会得到一个序列:2,3,5,7,1l,13,17,19,23,••••••函数fun用筛选法找出所有小于等于n的素数,并统计素数的个数作为函数值返回。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include<stdio.h>intfun(intn){inta[10000],i,j,count=0;for(i=2;i<=n;i++)a[i]=i;i=2;while(i<n){/**********found**********/for(j=a[i]*2;j<=n;j+=____1____)a[j]=0;i++;/**********found**********/while(____2____==0)i++;}printf("\nTheprimenumberbetween2to%d\n",n);for(i=2;i<=n;i++)/**********found**********/if(a[i]!=____3____){count++;printf(count%15?"%5d":"\n%5d",a[i]);}returncount;}main(){intn=20,r;r=fun(n);printf("\nThenumberofprimeis:%d\n",r);}标准答案:(1)a[i](2)a[i](3)0知识点解析:第一空:循环“for(j=a[i]*2;j<=n;j+=___1___)”中,循环变量j的初始值从a[i]的2倍开始,下一次进入循环j就是a[i]的3倍,第一空处是补充J的变化情况,而j每次都增加一个a[i],即第一空处应为“a[i]。第二空:根据题意第二空处是从数表中找下一个非0数,即在循环中比较a[i]是否为,如果为0的话,i++指向后一个数表元素,故第二空处应为“a[i]”。第三空:根据语句“{count++;printf(count%15?"%5d"\n%5d",a[i]);}”可知在满足条件之后计数变量count自增,并且输出a[i],可知a[i]是一个素数,由审题分析可知,经过筛选之后数表中非0的元素就是素数,故第三空处应为“0”,即a[i]不为0的话就是素数。三、程序修改题(本题共1题,每题1.0分,共1分。)42、给定程序MODI1.C中函数fun的功能是:根据以下公式求x值,并作为函数值返回。例如,给指定精度的变量eps输入0.0005时,应当输出Pi=3.141480。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#ihclude<math.h>#include<stdio.h>doublefun(doubleeps){doubles,t;intn=1;s=0.0;/**********found**********/t=0;while(t>epS){s+=t;t=t*n/(2*n+1);n++;}/**********found**********/return(s);}main(){doublex;printf("\nPleaseenteraprecision:");scanf(¨%1f¨,&x);printf("\neps=%1f,Pi=%if\n\n¨,x,fun(x));}标准答案:(1)t=1;(2)return(2*s);知识点解析:(1)根据题目中的公式,应该从1开始加。如果t起始为0,结果就少加一个1。又由于t定义为浮点数,所以,第一个错误标识下应该将“t=0;”改为“t=1;”。(2)根据公式计算出来的s是π/2,因此π=2*s,故第二标识下应改成“return(2*s);”。四、程序设计题(本题共1题,每题1.0分,共1分。)43、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组S中,请编写函数fun,它的功能是:把分数最高的学生数据放在h所指的数组中,注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include<stdio.h>#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",77},{"GA017",64},{"GA018",64},{"GA016",72}};STRECh[N];inti,n;FILE*out;n=fun(s,h);printf("The%dhighestscore:\n",n);for(i=0;i<n;i++)printf("%s%4d\n",h[i].num,h[i].S);printf("\n");out=fopen("out.dat","w");fprintf(out,"%d\n",n);for(i=0;i<n;i++)fprintf(out,"%4d\n",h[i].s);fclose(out);}标准答案:inti,max=a[0].s,n=0;for(i=1;i<N;i++)if(max<a[i].s)max=a[i].s;/*找出最高成绩*/for(i=0;i<N;i++)if(max==a[i].s)b[n++]=a[i];/*找相等的最高成绩并存入数组b中*/returnn;/*返回符合条件的人数*/知识点解析:(1)要把最高分数的学生数据放在数组中,首先求出最高分数,再使用一个for循环把所有的成绩进行比较,找出最高的分数来。(2)找出所有与最高分数相等的学生,并将最高分数的人数累加。国家二级(C语言)机试模拟试卷第8套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是将不带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include#include#defineN6typeclefstructnode{intdata;structnode*next;}NODE;voidfun(NODE*h){NODE*p,*q,intt;p=n;while(p){/**************found***************/q=【1】;/**************found***************/while(【2】){if(P一>data>q一>data){t=P一>data;P->data=q->data;q一>data=t;)q=q一>next;}/**************found***************/P=【3】;}}NODE*creatlist(inta[]){NODE*h,*p,*q;*nti;h=NULL;for(i=0;idata=a[i];q一>next=NULL;if(h==NULL)h=P=q;else{p一>next=q;p=q;}}returnh;}voidoutlist(NODE*h){NODE*p;p=h;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]={0,10,4,2,8,6};head=creatliSt(a);printf(”\nTheoriginallist:\n”);outlist(head);fun(head);printf("\nThelistafterinverting:\n”);outlist(head);}标准答案:(1)p一>next(2)q(3)p一>next知识点解析:第一空:由审题分析可知,q从p的下一个元素开始寻找最小值,故第一空为"p->next"。第二空:由审题分析可知,“while(【2】)"是在剩下的元素当中找最小值,剩下的结点是由q指向的链表,故第二空处的循环条件足q不为NULL链表就存在元素继续往后搜索,故第二空处为“q"。第三空:由审题分析可知。q指向p的下一个结点,下次外循环进入的继续寻找剩余结点的最小值,故第三空处应为“p->next"。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODII.C中函数fun的功能是:判断一个整数是否是素数,若是返回1,否则返回0。在main()函数中,若fun返回1输出YES,若fun返回0输出NO!。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数。不得增行或删行,也不得更改程序的结构!#includeintfun(intm){intk=2;while(k<=m&&(m%k))/*************found*************/k++/************found*************/if(m=k)return1;elsereturn0;}main(){intn;printf("\nPleaseentern:");scanf("%d",&n);if(fun(n))printf("YES\n");elseprintf("NO!\n");}标准答案:(1)k++;(2)if(m==k)知识点解析:(1)第一个标识下“k++"语句没有结束符分号,所以将“k++"改为“k++;"。(2)第二个标识下的“if(m=k)"语句应该是判断m是否素数,而原题中是将k的值赋给m,并不表示是m等于k,所以第二个标识下“if(m=k)"应该改为“if(m==k)"。三、程序设计题(本题共1题,每题1.0分,共1分。)3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。注意:部分源程序在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#defineN16typedefstruct{charnum[10];ints;}STREC;voidfun(STRECa[]){}main(){STRECs[N]={{"GA005",85),{"GA003",76},{"GA002",69),{"GA004",85},{"GA001",91},{"GA007",72),{"GA008",64),{"GA006",87},{"GA015",85),{"GA013",91},{"GA012",64},{"GA014",91},{"GA011",66),{"GA017",64),{"GA018",64),{"GA016",72}};inti;FILE*out;fun(s);print

温馨提示

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

评论

0/150

提交评论