2022年福建省三明市全国计算机等级考试C语言程序设计测试卷(含答案)_第1页
2022年福建省三明市全国计算机等级考试C语言程序设计测试卷(含答案)_第2页
2022年福建省三明市全国计算机等级考试C语言程序设计测试卷(含答案)_第3页
2022年福建省三明市全国计算机等级考试C语言程序设计测试卷(含答案)_第4页
2022年福建省三明市全国计算机等级考试C语言程序设计测试卷(含答案)_第5页
已阅读5页,还剩28页未读, 继续免费阅读

下载本文档

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

文档简介

2022年福建省三明市全国计算机等级考试

C语言程序设计测试卷(含答案)学校: 班级: 姓名: 考号: 一、2.填空题(10题)面向对象的模型中,最基本的概念是对象和 O以下程序的输出结果是【]omain(){unsignedshorta=65536;intb;printfC%d\nu,b=a);)关系数据库管理系统能实现的专门关系运算包括选择、连接和【】。设一棵完全二叉树共有700个结点,则在该二叉树中有【】个叶子结点。软件定义时期主要包括 和需求分析两个阶段。当数据的物理结构(存储结构)改变时,不影响数据库的逻辑结构,从而不致引起应用程序的变化,这是指数据的 O以下程序的输出结果是#include<stdio.h>voidprt(int*x,int*y,int*z)(printf(n%d,%d,%d\nH,++*x,++*y,*(z++));}main(){inta=10,b=40,c=20;prt(&a,&b,&c);prr(&a,&b,&c);)在关系模型中,把数据看成一个二维表,每一个二维表称为一个设有以下结构体类型:structst{chamame[8];intnum;floats[4];)student[50];并且结构体数组student中的元素都已有值。若要将这些元素写到硬盘文件fp中,请将以下fwrite语句补充完整:fwrite(student,[],1,fp);下列程序的输出结果是 o#include<stdio.h>main(){intx=10,y=10,i;for(i=0;x>8;y=++i)printf(”%d%d",x・・,y);)以下程序的输出是【]omain()

charstrl[]="Howdoyoudo",*pl=strl;strcpy(strl+strlen(strl)/2,"esshe");intf(n%s\n",pl);二、单选题(10题)以下叙述中正确的是0。结构体变量中的成员可以是简单变量、数组或指针变量不同结构体的成员名不能相同C.结构体定义时,其成员的数据类型可以是本结构体类型D.C.结构体定义时,其成员的数据类型可以是本结构体类型D.结构体定义时,类型不同的成员项之间可以用逗号隔开12.若有定义语句:char*sl=nOKu,*s2=”ok”;12.若有定义语句:出“OK”的语句是A.if(strcmp(sl,s2)==0)puts(sl);if(strcmp(sl,s2)!=0)puts(s2);if(strcmp(s1,s2)==1)puts(s1);if(strcmp(sl,s2)!=0)puts(sl);以下对C语言函数的有关描述中,正确的是在C语言中调用函数时,只能把实参的值传给形参,形参的值不能传送给实参C函数既可以嵌套定义又可以递归调用函数必须有返回值,否则不能使用函数函数必须有返回值,返回值类型不定若变量x、y已正确定义并赋值,以下符合C语言语法的表达式是()oA.X+l=yB.++X.Y=X——C.X=X+10=X+YD.double(X)/10查找较快,且插入和删除操作也比较方便的查找方法是A.分块查找B.二分查找C.顺序查找D.折半查找有以下程序:#include<stdio.h>int*f(int*s){s[l]+=6;*s=7;s+=2;returns;)main(){inta[5]={1,2,3,4,5},*p=a;P=f(P);printf(“%d,%d,%d\n”,a[0],a[l],*p);1程序运行后的输出结果是()。A.9,8,9B.7,8,7C.7,8,3D.1,2,1对一个满二叉树,m个叶子,n个结点,深度为h,则()。A.n=h+mB.h+m=2nC.m=h-1D.n=2h-1设char型变量x中的值为10100111,则表达式(2+x)(,的值为 o10101001B.1O1O1OOOC.111111O1D.1010101在下列运算符中,优先级最低的是()。A.||B.!=C.<D.+下列选项中,能够满足“若字符串si等于字符串s2,则执行ST”要求的是()。if(strcmp(s2,sl)==O)ST;if(sl===s2)ST;if(strcpy(sl,s2)==l)ST;if(sl,s2==0)ST;三、程序设计题(10题)21.请编写函数proc(),它的功能是计算下列级数和,和值由函数值返回。sum=l-x+x2/2!-x3/31+...+(-l*x)n/n!例如,当n=23,x=0.3时,函数值为0.740818。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填人所编写的若干语句。试题程序:5皿心<&心>«include<conk>.h>«indutk<Btd>o.h><incl««k<BMih.h>doubleprac<doublei.mt■>tvx>idmain“,•yBtrm(-CLS-)ipnndCMIa.prDHO.3.23>>i>22.编写函数fun,其功能是:求ss所指字符串中指定字符的个数,并返回此值。例如,若输入字符串123412132,输入字符为1,则输出3。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。•include<sldio.h>■include<string.*h>«<kGneM81in!fuii(rhju*•m.charc)main()Ichara[MJ.ch;voidNONO():printf("\nPlc«eenterosiring:"):Es(・):printf("\nPlcascenterachar:"t;ch=gelchar();printf("\nThcnumberoflhechnris:%d\n".fun(a.ch)):NONO():voidNONO()I/.本函数用亍打开文件•输入圈试数虬调用fun函敬.首岀数虬关闭文件.•/intiIFILE•»<.•wfichara(M].b(M].ch;rf=!bpen("in.ilat","r");wf=(open("oul.dal"w");for(i=0:i<10;.♦+)|rf.«)(rf.H%s".b);ch=•b;fprintf(wf,"%c=%d\n".ch.fun(a.ch));fcla»e(ff):fclwe(wf):23.使用VC++2010打开触文件夹下progl中的解决方案。此解决方案的项目中包含一个源程序文件progl.Co在此程序中,请编写函数fun(),其功能是移动字符串中的内容,移动的规则是把第l~m个字符,移动到字符串的最后,把第m+1到最后的字符移动到于符串的前面。例如,字符串中原有的内容为“ABCDEFGHIJK”,m的值为3,移动后,字符串中的内容应该是“DEFGHUKABC”。注意:部分源程序在文件progl.c中。请勿改动main。函数和其他函数中的任何内容,仅在函数fim()的花括号中填入你编写的若干语句。试题程序:iinclude<stdio.h>#include<string.h>♦defineN80voidfun(char*w,intm)voidmain(){FILE♦wf;chara[N]=”ABCDEFGHIJK”,b[N]«="ABCDEFGHIJK";intm;printf(MTheoriginalstring:\nn);puts(a);printf("\n\nEnterm:");scanf("%dMr&m);fun(a,m);printf("\nThestringaftermoving:\n");puts(a);printf("\n\n");/*•♦•♦♦*♦»found♦♦♦♦♦♦♦♦♦/wf=fopen("out.dat","w");fun(b,3);fprintf(wfr"%s'\b);fclose(wf);/*********found*********/24.学生的记录由学号和成绩组成,M名学生的数据已在主函数中放入结构体数组stu中,请编写函数proc(),它的功能是:把分数最低的学生数据放在h所指的数组中。注意:分数低的学生可能不止一个。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。试题程序:0includeSdefinrMUtypedefstrwldiartMimf10:iSTRWI»ntproc(STREC・STREl,•b>STRH'-:•<;AOOS*.«.f<iA0iXI*.75UCGAOor.tSh*GAW.7a.I•GAoor.nni*GAoor.M).CGA0M-.60d*GAOO6\R5l.(*GA0i5a.*3F.{*GA0l3a.94:.<*GAOi2*.7«:,l-GA0U\»7>.l*GAOir.K)H{*GAO17*.<5Kl-GAOIB-.W^CGAOie-.yiH.STRah(M]imii.mn-proc<*iu«h>(pnntfl,"nieHdI*—»cnrrt\n*»n>i(or(i~0ii<««汁♦)prurt«aK*K4rf\n*.l<Cnim.Mil•)■岀■!!分学1的学91#|<1«pnnd<a\na)i使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案的项目中包含一个源程序文件progl.co此程序定义了NxN的二维数组,并在主函数中自动赋值。请编写函数该函数的功能是使数组下三角元素中的值乘以no例如,若n的值为3,a数组中的值为TOC\o"1-5"\h\z9 73 84 5 6则返回主程序后,a数组中的值应为9 76 9 812 15 18注意:部分源程序给出如下。请勿改动函数main。和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#include<conio.h>#include<stdlib.h>#defineN5voidfun(inta[][N],intn)()main()(inta[N][N],n,i,j;printf(“*****Thearray*****\n“);for(i=0;ivn;i++)<p=,'"x/n;i++)<>(for(j=0;j<=nnp=nn>(a[i][j]=rand()%10;printf(“%4d”,a[i][j]);}printf("\n");)n=rand()%4;printf(“n=%4d\n",n);fun(a,n);printf(“*****TheResult*****\n");for(i=0;i<=nnp=nn>(for(j=O;j<=nnp=””>printf(“%4d”,a[i][j]);printf}}编程计算下列表达式:s=n!(n从键盘上输入)假定输入的字符串中只包含字母和*号。请编写函数proc(),它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。例如,若字符串中的内容为****a*bc*def*g。***,删除后,字符串中的内容则应当是****a*bc*def*g。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。试题程序:minclineVcomo.h>voidpraHchu•«ir)pnntf("Entera«trifMlAna)i(«(■(■>Ipradgpnnt(<"Th**trtn<afterdelrtrdAn")i使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案的项目中包含一个源程序文件progl.co在此程序中,请编写函数其功能是移动一维数组中的内容,若数组中有n个整数,要求把下标为。〜P(含P,P小于等于n-1)的数组元素平移到数组的最后。例如,一维数组中的原始内容为1、2、3、4、5、6、7、8、9、10;P的值为3。移动后,一维数组中的内容应为5、6、7、8、9、10、1、2、3、4o注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#defineN80voidfun(int*w,intp,intn)(}main()(inta[N]二{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};inti,p,n=15;printf("Theoriginaldata:\n”);for(i=0;i<=,M,p=,M,>printf(“%3d”,a[i]);printfr\n\nEnterpf,);scanf("%d",&p);fun(a,p,n);printf("\nThedataaftermoving:\n,,);for(i=0;i<=,M,p=,M,>printf(“%3d”,a[i]);printf("\n\n");请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构试题程序:#include<conio.h>#include<stdio.h>doublefun(intn)doublesum,SO,SI,S2,Sintk;sum=1.0;if(n<=2)sum=0.0;s0=0.0;si=0.0;s2=1.0;/*************必und*************/for(k=4;k<n;k++)S=S0+Sl+s2;Sum+=s;S0=sl;Sl=s2;/*************必und*************/S2=S;returnsum;}main()intn;clrscr();printf(ulnputN=”);scanf(”%d”,&n);prmtf(,,%f\n,,Ifun(n));下列给定程序中,函数fun()的功能是:应用递归算法求某数a的平方根。求平方根的迭代公式如下:X,=(j0+—)/2例如,2的平方根为1.414214。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<math,h>#include<stdio.h>fun(doublea,doublexO){doublexl,y;xl=(x0+a/x0)/2.0;if(fabs(xl-xO)>0.00001)y=fun(a,xl);elsey=xl;returny;}main(){doublex;printf(uEnterx:");scanf(”%lf',&x);printf("Thesquarerootof%Ifis%lf\n",x,fun(x,l.O));给定程序中函数fun的功能是:根据整型形参m,计算如下公式的值。例如,若m中的值为5,则应输出:1.463611。请改正程序中的错误,使它能得到正确结果。[注意]不要改动main函数,不得增行或删行,也不得更改程序的结构[试题源程序]#include<stdiO.h>doublefun(intm)(doubley=l.0;inti;for(i=2;i<m;i++)y+=l/(i*i);return(y);)main(){intn=5;printf("\nTheresultis%lf\n",fun(n));给定程序M0D11.C中函数fun的功能是:根据整型形参n,计算如下公式的值。4=1.4=~~~-—,…,4=—-—多1+x,if-!+<,例如,若n=10,则应输出:0.617977。请改正程序中的语法错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!•♦include<stdio.h>;/…………End…………/!intfun(intn)!(floatA-l;inti;;/***♦♦•**•***fOuncj«*\ for(i-2;i<n;!.+♦)• A-1/(1+A);I;returnA;9,'main();{intn;\printf("\nPleaseentern:");!scanf("%dwr&n);•printf("A%d-%f\n"rn,fun(n));i}下列给定程序中,函数fun()的功能是:计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<conio.h>#include<string.h>#include<stdio.h>#defineN80intfun(char*s,char*t){intn;char*p,*r;n=0;while(*s){P=s;while(*r)if(*r==*p){r++;p++;)elsebreak;if(*r=0)n++;s++;}returnn;}main()(chara[N],b[N];intm;clrscr();printf("\nPleaseenterstringa:");gets(a);printf("\nPleaseentersubstringb:");gets(b);m=fun{a,b);printf("\nTheresultis:m=%d\nH,m);}36.下列给定程序中,函数fun()的功能是:输出M行N列整数方阵,然后求两条对角线上的各元素之和,返回此和数。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.试题程序:#include<conio.h>#include<stdio.h>#defineM5/**********************************/ihtfun(intn,intxx[][])(inti,j,sum=0;printf(u\nThe%dx%dmatrix:\nu,M,M);for(i=0;i<M;i++)(for(j=0;j<M;j++)/**********************************/printf("%4仁xx[i][j]);printf(”\n”);for(i=0;i<n;i++)sum+=xx[i][i]+xx[i][n-i-1];return(sum);}main(){intaa[M][M]={{1,2,3,4,5},{4,3,2,1,0},{6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};clrscr();printf("\nThesumofallelementson2diagnalsis%d",fun(M,aa));)scanf(”%d”,&n);printf(”A%d=%lf\n",n,fun(n));39.下列给定程序中,函数fun()的功能是:统计字符串substr在字符串srt中出现的次数。例如,若字符串为aaas1kaaas,子字符串为as,则应输出2。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>fun(char*str,char*substr){inti,j,k,num=0;for(i=0,str[i],i++)for(j=i,k=O;substr[k]==str[j];k++,j++)if(substr[k+l]==,\0,){num++;break;}returnnum;)main(){charstr[80],substr[80];printf("Inputastring:");gets(str);printf("Inputasbustring:");gets(substr);printf("%d\n",fun(str,substr));40.下列给定的程序中,函数fun()的功能是;将s所指字符串中出现的n所指字符串全部替换成t2所指字符串,所形成的新的字符串放在w所指的数组中。在此处,要求tl和t2所指字符串的长度相同。例如:当s所指字符串中所指的内容为abcdabfab.tl所指字符串中的内容为ab,t2所指字符串中的内容为99时,结果在w所指的数组中的内容应为99cd99f99o请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<conio.h>#include<stdio.h>#include<string.h>intfun(char*s,char*tl,char*t2,char*w){inti;char*p,*r,*a;strcpy(w,s);while(*w){p=w;r=tl;while(r)if(*r==*p){r++;p++;}elsebreak;if(*r==,\(y){a=w;r=t2;while(*r)(*a=*r;a++;r++)w+=strlen(t2);}elsew++;main()(chars[100],tl[100],t2[100],w[100];clrscr();Stinclude<stdio.h>//・・・・found••••voidproc(charl)(charnuix.・qiinii=0imax=while(t[i]!=O){if<max<i[i]>I//••••found••••Lq+hmax—([如}i++i)whilc(q>t).q・•<q-l>iq I}}voidmain()<charstr[8O]iprintf("Enterastring,")igcts(str)tprintF("\nTheoriginalstring:")»puts(str)iproc(Mr)iprintf("\nThcHiringaftermoving;")ipuK(«tr)iprind("\n\n")«42.下列给定的程序中,函数proc()的功能是:计算并输出m以内最大的6个能被7或11整除的自然数之和。m的值由主函数传人。例如,Em的值为600,则函数的值为3515。请修改程序中的错误,使它能得到正确结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。试题程序:UaiVfh>9mdudeh>Htacludr<como.h>miproHmik)mtm—O.mc"«O»〃••••found..••whk4k>*2)&^&><tM>«>//••••found■•••tf<<kH7*0):(kKll-0»//••••Comm!••••mwkirvinraanZfMMO,E«m《・CLS*>8六、操作题(2题)43.请补充main()函数,该函数的功能是:从键盘输入一个长整数,如果这个数是负数,则取它的绝对值,并显示出来。例如,输入>123456,结果为:123456。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在横线上填入所编写的若干表达式或语句。试题程序:9mcludrV&r.h>0mclude<mio.h>voidmainC)longintnum*•y»Kin(-CLS">.priBt«aEmcfthc<htai\Ba)i(>rinl(<,•••theab^lwieraJvr•••\«")|il(nMOi<0)J3LpriatfC*\B\n")ipnntfl”】>•44.funl函数的调用语句为funl(&a,&b,&c);。它将3个整数按由大到小的JI匣序调整后依次放入a,b,c三个变量中,a中放最大数,请填空。voidfun2(int*x,int*y){intt;t=*x;*x;*y;*y=t;}voidfunl(int*pa,int*pb,int*pc){if(*pc>*pb)fun2([]);if(*pa<*pc)fun2(【】);if(*pa<*pb)fun2(【]);}参考答案1.类类2.00解析:对于一个unsignedshort来说,它能取的最大值是65535o这里给a赋值65536,已经超出了它的取值范围,这样它的高位将被截掉,只把低位赋给它(全零)。所以a的值实际为0。3.投影专门关系运算包括对单个关系进行垂直分解(投影操作)或水平分解(选择操作)和对多个关系的结合(连接操作)等。4.350350解析:在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。在根据完全二叉树的定义,在一棵完全二叉树中,最多有1个度为1的结点。因此,设一棵完全二叉树具有n个结点,若n为偶数,则在该二叉树中有n/2个叶子结点以及n/2-l个度为2的结点,还有1个是度为1的结点若n为奇数,则在该二叉树中有[n/2]+l个叶子结点以及[n/2]个度为2的结点,没有度为1的结点。本题中,完全二叉树共有700个结点,700是偶数,所以,在该二叉树中有350个叶子结点以及349个度为2的结点,还有1个是度为1的结点。所以,本题的正确答案为350。可行性研究可行性研究解析:软件生命周期一般包括可行性研究与需求分析、设计、实现、测试、交付使用及维护等,还可以将软件生命周期分为三个阶段:①软件定义阶段:可行性研究和需求分析;②软件开发阶段:设计、实现和测试;③软件运行维护阶段:交付使用和维护。B关系关系解析:关系模型用,•维表表示,则每个;维表代表一种关系。sizeof(structst)*50sizeof(structst)*50解析:fwrite函数的一般调用形式为:fwrite(buffer,size,count,fp);其中:buffer是一个指针变量,是要输出数据的起始地址;size是要写的字节数;count是要写多少个size字节的数据项;fp是文件指针。9.101091101091解析:for(表达式1;表达式2:表达式3)语句的功能是:首先计算表达式1的值,然后检测表达式2的值,若其值为真,则执行循环体语句,执行完毕后,再计算表达式3的值。然后再检测表达式2的值是否为真,若为真,继续执行循环体语句,若为假,贝腿出循环:第1次循环x>8成立,输出x=10,y=10后,x的值减1,i=l,执行y=++i操作,y的值变为1;判断条件还成立,输出x=9,y=l,然后x的值减1,循环条件不成立,则退出循环。lO.HowdoessheHowdoesshe解析:strcpy(strl,si):字符串拷贝函数,作用是将字符串si拷贝到字符数组strl中去。strlen(str):测试字符串str的长度,函数的值为字符串中实际长度,不包括、\0'在内。本题中strlen(strl)的值为13,则strcpy(strl+strlen(strl)/2,,esshe*);相当于strqoy(strl+6,'esshe');因此可得答案为HowdoessheoU-A结构体变量中的成员可以是简单变量、数组、指针变量或者结构体变量,选项A正确;不同结构体成员名可以相同,选项B错误;结构体定义时,其成员的数据类型不能是本结构体类型,选项C错误;结构体定义时,类型不同的成员项之间使用分号隔开,选项D错误。本题答案为A选项。D解析:strcmp(sl,s2)的作用是比较字符串si和s2。参数strl,str2如果相同,则返回0,如果strl大于str2则返回一个正整数,如果strl小于str2则返回一个负整数。本题中si,s2不相同,A)选项不会输出任何字符,B)选项输出ok,C)选项不输出任何字符,D)选项会输岀OKoA解析:C语言中的函数可以进行递归调用,但不能在函数中定义函数,即函数不能嵌套定义。函数可以没有返回值,若有返回值,则返回值类型必须确定。BA选项中不能将变量Y赋给表达式,c选项中错误与A选项一样,D选项中强制类型转换表达式应写成(double)x/10oA分块查找是折半查找和顺序查找的一种改进方法,分块查找要求索引表是有序的,对块内节点没有排序要求,因此查找较快,且插入和删除操作也比较方便。C在main函数中调用了f函数使形参s指向数组a。执行⑶1]+=6”;语句,则%[1]=8;”执行“*s=7;”语句,贝怜[0]=7”;执行“s+=2;”语句,则s指向数组的第3个元素并返回s。调用后,函数返回值赋给指针P,则*P=3,因此输出的结果为7,8,3。故本题答案为C选项。DD解析:异或运算符(八)的运算规则是:参加运算的两个相应位同号,则结果为0(假);异号则为1(真)。取反运算符(-)的运算规则是:对一个二进制数按位取反,即将0变为1,1变为0。本题(-3)是对3(二进制形式为00000011)按位取反即11111100。表达式(2+x)3)的值就等价于(00000010+10100111)A11111100,结果为01010101。AA解析:strcmp(char*,char*),函数strcmp用于比较两个字符串的长度,长者为大,若字符个数也一样,则从左至右依次比较相同位上的字符,字符大小按ASCII表值计算,直到最后一个字符,若还相同,则两个字符串相等,返回值Oo选项A中if(strcmp(s2,sl)=0)ST,若s2等于si,则返回值0,。等于0,所以逻辑表达式strcmp(s2,sl)=0为真执行ST。21.【解析】首先定义两个变量分别用来存储级数的和与每一项的分母。观察级数的特点,其每一项的正负号是交替变化的。根据这些特点,每增加一项都需要变换符号。最后求出级数的和。22.【考点分析】本题考查:for循环语句遍历字符串,并通过if条件语句,判断字符串是否结束。【解题思路】从字符串中查找指定字符,需要使用循环判断结构,循环语句用来遍历字符串,循环条件为字符串没有结束,即当前字符不是,\0',判断语句用来判断当前字符是否为指定字符。最后返回指定字符的个数。Vdidfun(char*w,intm)chart;for(i=l;iv=m;i++)/*进行m次的循环左移*/{t=w[o];for(j=l;wU]!='\0';j++)/*从第2个字符开始以后的每个字符都依次前移一个字符*/w[j.l]=w|J];9w|j.l]=t;/*将第1个字符放到最后一个字符中*/10}}本题应采用“循环左移”的算法。外层循环用于控制移动的字符的个数,即需进行多少次循环。内层循环的作用是将第2个字符以后的每个字符依次前移一个位置,最后将第1个字符放到最后一个字符中。24.【解析】要返回分数最低的学生个数,首先要找出学生中的最低分数。然后将各个学生的成绩与最低分数相比较,最后将分数最低的学生个数返回给主函数。voidfun(inta[][n],intn){inti,j;for(i=0;iv="p=,,H>for(j=0;j<=i;j++)/*矩形的下三角时,积相乘*/a[i][j]=a[i][j]*n;}首先从数组中找出要乘以n的元素。这其实就是找出将被挑出的元素在原数组中的分布规律的过程。通过观察得出,要被处理的元素下标的范围是从每行中第1个元素开始,直到列数等于该行行数为止。即数组下三角元素的列下标①小于等于(v=)行下标①。找到这个规律后,依次从数组中取得符合要求的元素,然后乘以n。\n\t#include'stdio.h'\nmain\n{longt=l;\ninti;\nfor(i=l;i<=10;i++)\nt=t*i;\nprintf('%ld',t);}\n27.【解析】要删除字符串尾部的所有*,只要将尾部所有*中的第一个改为字符串结束符即可。首先,将字符串指针移动到字符串最后一个位置,检查最后一个字符,是*则将指针前移,否则将指针后移一个位置赋值作为结束符。voidfun(int*w,intp,intn){intX,j,ch;for(x=0;x<=p;x++){ch=w[0];for(j=l;j/*通过for循环语句,将p+1〜n-1(含n-1)之间的数组元素依次向前移动p+1个存储单元*/(w[j・l]=w[jl;}w[n-l]=ch;/*将下标为0~p的数组元素逐一赋给数组wfn-1]*/})本题要求把下标为。〜P(含p,p小于等于n・l)的数组元素平移到数组的最后。可以根据输入的P值,通过for循环语句,将p+l〜n.l(含n.l)之间的数组元素依次向前移动P+1个存储单元,即wU-l]=wU];o同时将下标为0〜P的数组元素逐一赋给数组w[n.l],也就是通过语句w[n・l]=ch;来实现此操作。29.【解析】首先我们应定义一个变量来表示其和,另一个来表示其项数,然后通过循环,求得其差值,最后把和的平方返回到主函数中。voidfun(char*a,intn){inti=0,k=0;char*p,*t;p=t=a;/*开始时,p与t同时指向数组的首地址*/while(*t=*)/*用k来统计前导星号的个数*/{k++;t++;}if(k>n)/*如果k大于n,则使p的前导保留n个星号,其后的字符依次存入数组a中*/{while(*p){a[i]=*(p+k-n);i++;P++;}a[i]=4\09;/*在字符串最后加上字符串结束标志*/)}字符串中前导*号不能多于n个,多余的应删除。首先需要通过while循环统计字符串前导*号的个数,然后通过if条件语句完成前导*号的个数和n的比较,如果前导*号多于n个,则需要把n个*号和其余字符重新保留。(1)错误:for(k=4;k<n;k++)正确:for(k=4;k<=n;k++)(2)错误:s2=s;正确:s2=s;}⑴错误:for(k=4;k<n;k++)正确:for(k=4;k<=n;k++)\r\n⑵错误:s2=s;正确:s2=s;)解析:错误1:循环中包括k=n的情况,所以k要取到n之后才结束循环。错误2:for循环的语句要用大括号,在此处少了应添上。(1)错误:fun(doubleadoublexO)正确:doublefun(doubleadoublexO)(2)错误:if(fabs(xl-xO)>0.00001)正确:if(fabs(xl-xO)>=0.00001)(1)错误:fun(doublea,doublex0)正确:doublefun(doublea,doublex0)\r\n⑵错误:if(fabs(xl-xO)>0.00001)正确:if(fabs(xl-xO)>=0.00001)解析:用C语言求平方根的方法一般有两种经典的算法,它们分别是迭代法和递归法,本题要求用递归法。该程序采用了if语句,错误在于if语句的判断条件,程序的含义是当迭代结果差小于误差时进行循环,故正确的应该是if(fabs(xl-x0)>=0.00001)o(1)错误:for(i=2;i<m;i++)正确:for(i=2;i<=m;i++)(2)错误:y+=l/(i*i)正确:y+=l・/(i*i)错误2:在除法运算中如果除数和被除数都是整数所以所除结果也是整数因此应改为y+=l./(i*i)。(1)错误:for(i=2;i<m;i++)\r\n正确:for(i=2;i<=m;i++)\r\n⑵错误:y+=l/(i*i)\r\n正确:y+=l・/(i*i)\r\n错误2:在除法运算中,如果除数和被除数都是整数,所以所除结果也是整数,因此应改为y+=l./(i*i)。(l)floatfun(intn)(2)for(i=2;i<=n;i++)(l)floatfun(intn)⑵for(i=2;i<=n;i++)解析:本题中函数的功能是计算公式的值。其中,每一项的分母是前一项的值加1。(1)错误:r=p;正确;r=t;(2)错误:if(*r=O)正确:if(*r=湖)(1)错误:r=p;正确;r=t;\r\n⑵错误:if(*r=O)正确:if(*r==,\\O,)解析:从字符串s中找出子字符串的方法是:从第1个字符开始,对字符串进行遍历;若s串的当前字符等于t串的第1个字符,两字符串的指针自动加1,继续比较下一个字符:若比较至字符串的结尾,则跳出循环:若s串的字符和t串的字符不对应相同,则继续对s串的下一个字符进行处理。(1)错误:intfun(ihtnintxx[][])正确:intltm(ihtmintr.x[J[M])(2)错误:printf(u%4ffxx[i]fj]);正确:printf(,,%4d,,xx[i][j]);(l)错误:intfun(ihtn,intxx[][])正确:intltm(ihtmintr.x[][M])\r\n(2)错误:printfC%4f,f\\xx[i]fj]);正确:printfC%4d\xx[i]|j]);解析:该题错误比较隐蔽,一般的C语言上机考试很少涉及printfM数中的错误,在这里,我们只要明白“d”和T的区别就0K了。格式字符d表示:以带符号的十进制形式输出整数(正整数不输出符号);格式字符f表示;以小数形式输出单、双精度,隐含输出6位小数。(1)错误:voidfun(inta)正确:intfim(int*a(2)错误:a|j]=a|j+l];正确:a[j]=a|j-l]

温馨提示

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

评论

0/150

提交评论