2022年河南省南阳市全国计算机等级考试C语言程序设计真题(含答案)_第1页
2022年河南省南阳市全国计算机等级考试C语言程序设计真题(含答案)_第2页
2022年河南省南阳市全国计算机等级考试C语言程序设计真题(含答案)_第3页
2022年河南省南阳市全国计算机等级考试C语言程序设计真题(含答案)_第4页
2022年河南省南阳市全国计算机等级考试C语言程序设计真题(含答案)_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

2022年河南省南阳市全国计算机等级考试C语言程序设计真题(含答案)学校:________班级:________姓名:________考号:________

一、2.填空题(10题)1.设有以下定义和语句,则*(*(p+2)+1)的值为【】。

inta[3][2]={10,20,30,40,50,60},(*p)[2];

p=a;

2.若有语句:

inti=-19,j=i%4;

printf("%d\n",j);

则输出结果是【】。

3.某二叉树中度为2的结点有18个,则该二叉树中有【】个叶子结点。

4.下列程序的输出结果是【】。

intt(intx,inty,intcp,intdp)

{cp=x*x+y*y;

dp=x*x-y*y;

}

main()

{inta=4,b=3,c=5,d=6;

t(a,b,c,d);

printf("%d%d\n",c,d);

}

5.以下程序的功能是:利用指针向三个整型变量,并通过指针运算找出三个数中最大值,输出到屏幕上。请填空

main()

{intx,y,z,max,*px,*py,*pz,*pmax;

scanf("%d%d%d",&x,&y,&z);

px=&x;py=&y;pz=&z;pmax=&max;

if(*pmax<*py)*pmax=*py;

if(*pmax<*pz)*pmax二*pz;

printf("max=%d\n",max);}

6.已知字符A的ASCⅡ代码值为65,以下程序运行时若从键盘输入:B33<回车>.则输出结果是()。

#include

main()

{chara,b;

a=getchar();scanf("%d",&B);

a=a-'A'+'0';b=b*2;

printf("%c%c\n",a,B);

}

7.以下程序运行后的输出结果是()。main(){inta=3,b=4,c=5,t=79;if(b<a&&a<C)t=a;a=c;c=t;if(a<c&&b<C)t=b;b=a;a=t;printf("%d%d%d\n",a,b,C);}

8.下列程序的运行结果是______。

#include<stdio.h>

main()

{inta=10,b=3;

printf("%d,",a%b);

printf("%d,",(a-h,a+b));

printf("%d\n",a-b?a-b:a+b);

}

9.以下程序的运行结果是______。

structexmp{charname[10];

intnumber;

};

structexmptest[3]={{"WangXi",1},{"QiYu",2},{"HuHua",3}};

main()

{printf("%c,%s\n",test[0].name[1],test[2].name+3);

}

10.下面程序执行后输出的结果是【】。

intm=13;

intfun(intx,inty)

{intm+3;

return(x*y-m);

}

main()

{inta=7,b,5;

prntf("%d\n",fun(a,B)/m);

}

二、单选题(10题)11.在一个有头结点的链队列中,假设f和r分别为队首和队尾指针,则插入s所指的结点的运算是()。

A.f->next=s;f=s;

B.r->next=s;r=s;

C.s->next=r;r=s;

D.s->next=f;f=s;

12.下列叙述中正确的是()。

A.栈是一种先进先出的线性表B.队列是一种后进先出的线性表C.栈与队列都是非线性结构D.以上三种说法都不对

13.以下程序运行时若要正确输出函数的入口地址和输入数的绝对值,应在程序空缺处填入的正确选项是

abs(intx)

{if(x>=0)returnx;

elsereturn-x;}

main()

{inty,z,(*p)(intx)=abs;

scanf("%d",&y);

z=(*p)(y);

;}

A.printf("%d%d\n",&p,z)

B.printf("%d%d\n",p,z)

C.printf("%d%d\n",*p,z)

D.printf("%d%d\n",p,*z)

14.

15.程序运行后的输出结果是()。A.10B.30C.0D.64

16.在有向图G的拓扑序列中,若顶点Vi在顶点Vj之前,则下列情形不可能出现的是()。

A.G中有弧

B.G中有一条从Vi到Vj的路径

C.G中没有弧

D.G中有一条从Vj到Vi的路径

17.下列叙述中正确的是()。

A.对长度为n的有序链表进行查找,最坏情况下需要的比较次数为n

B.对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为n/2

C.对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为log2n

D.对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为nlog2n

18.在一个带头结点的单链表HL中,若要在第一个元素之前插入一个由指针p指向的结点,应该使用的语句为()

A.HL=p;p->next=HL;

B.p->next=HL;HL=p;

C.p->next=HL->next;HL->next=p;

D.p->next=HL;p=HL;

19.算法应该是()

A.程序B.问题求解步骤的描述C.要满足五个基本特性D.B和C

20.若有说明语句:double*p,a;则通过scanf语句正确给输入项读人数据的程序段是()。

A.*p=&a;scanf("%1f”,p);

B.*p=&a;scanf("%f",p);

C.p=&a;scanf("%",*p);

D.p=&a;scanf("%1f",p);

三、程序设计题(10题)21.

22.假定输入的字符串中只包含字母和*号。请编写函数proc(),它的功能是:除了尾部的*号之外,将字符串中其他*号全部删除。形参P已指向字符串中最后一个字母。在编写函数时,不得使用C语言的字符串函数。例如,若字符串中的内容为****a*bc*def*g****,删除后,字符串中的内容应当是abcdefg****。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填人所编写的若干语句。试题程序:

23.请编写函数proc(),它的功能是计算下列级数和,和值由函数值返回。sum=1-x+x2/2!-x3/31+…+(-l*x)n/n!例如,当n=23,x=0.3时,函数值为0.740818。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填人所编写的若干语句。试题程序:

24.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,函数fun()的功能是将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s所指字符串中剩余的字符形成的新字符串存放在t所指的数组中。例如,若s所指字符串中的内容为“ABCDEFG12345”,其中字符C的ASCⅡ值为奇数,在数组中的下标为偶数,因此必须删除;而字符1的ASCⅡ值为奇数,在数组中的下标为奇数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是“BDH2345”。注意:部分源程序在文件prog1.c中。请勿改动main()函数和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序::25.请编写函数proc(),其功能是:利用以下所示的简单迭代方法求方程cos(x)-x=0的一个实根。

xn+1=COS(xn)

迭代步骤如下:

(1)取x1初始值为0.0;

(2)x0=x1,把?X1的值赋给x0;

(3)x1=cos(xO),求出一个新的x1;

(4)若x0-x1的绝对值小于0.000001,则执行步骤

(5),否则执行步骤(2);

(5)所求x1就是方程cos(x)-x=0的一个实根,作为函数值返回。

程序将输出结果root=0.739085。

注意:部分源程序给出如下。

请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。

试题程序:

26.请编一个函数voidproc(intttEM][N],intpp[N]),tt指向一个M行N列的二维数组,求出二维数组每行中最大元素,并依次放入pp所指的一维数组中。二维数组中的数已在主函数中给出。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#include<conio.h>#include<stdlib.h>#defineM3#defineN4voidproc(intttrM3rN]。intpp[N]){ }voidmain{intstr[M][N]={{34,56,84,78},{23,84,93,12),{28,38,39,93}};intp[N],i,j,k;system("CLS");printf("Theriginaldatais:\n");for(i=0;i<M;i++){for(j=0;j<N;j++)printf("%6d",str[i][j]);printf("\n");}proc(str,p);printf("\nTheresultis:\n");for(k=0:k<M;k++)printf("%4d",p[k]);printf("n");}

27.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun(),该函数的功能是将s所指字符串中ASCII值为偶数的字符删除,字符串中剩余字符形成一个新字符串并将其存放在t所指的数组中。例如,若s所指字符串中的内容为“ABCDEFG123456”,其中字符B的ASCII值为偶数,字符2的ASCII值为偶数,都应当删除,其他依此类推。最后t所指的字符串中的内容应是“ACEG135”。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include<stdlib.h>#include<stdio.h>#include<string.h>#include<conio.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);}

28.请编写函数proc,其功能是:将str所指字符串中除下标为偶数、同时ASCIl码值为奇数的字符外,其余的字符都删除,串中剩余字符所形成的一个新串放在t所指的数组中。例如,若str所指字符串中的内容为ABCDEFGl2345,其中字符B的ASCIl码值为偶数,所在元素的下标为奇数,因此必须删除;而字符A的ASCIl码值为奇数,所在数组中的下标为偶数,因此不应当删除。依此类推,最后t所指的数组中的内容应是ACEG。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填人所写的若干语句。试题程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>#include<string.h>voidproc(char*str,chart[]){}voidmain{charstr[100],t[100];system("CLS");printf("\nPleaseenterstringstr:");scanf("%S",str);proc(str,t);printf("\nTheresultiS:%s\n",t);

29.规定输入的字符串中只包含字母和。号。请编写函数fun,其功能是:将字符串尾部的。号全部删除,前面和中间的*号不动。

30.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,定义了NxN的二维数组,并在主函数中自动赋值。请编写函数fun(),该函数的功能是使数组上三角元素中的值乘以m。若m的值为2,a数组中的值为197238456则返回主程序后a数组中的值应为2181426164512注意:部分源程序在文件prog1.c中。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:1#include2#include3#include4#include5#defineN56voidfun(inta[][N],intm)7{89}10main()11{12inta[N][N],m,i,j;13FILE*out;14printf("***Thearray***\n");15for(i=0;i<n;i++)16{for(j=0;j<n;i++)27{for(j=0;j38{for(j=0;j<n;j++)39fprintf(out,"%4d",a[i][j]);40fprintf(out,"\n");41}42fclose(out);43/*********found********/44}1voidfun(inta[][n],intm)2{3inti,j;4for(j=0;j<n;j++)5:for(i=0;i<=j;i++)6:a[i][j]=a[i][j]*m;/*上三角元素中的值乘以m*/

四、2.程序修改题(10题)31.给定程序MODll.C中函数fun的功能是:将十进制正整数m转换成k(2≤k≤9)进制数,并按高位到低位顺序输出。

例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。

请改正fun函数中的错误,使它能得出正确的结果。

注意:不要改动main函数。不得增行或删行,也不得更改程序的结构!

32.下列给定程序中,函数fun()的功能是:首先把b所指字符串中的字符按逆序存放,然后将a所指字符串中的字符和b所指字符串中的字符,按排列的顺序交叉合并到c所指数组中,过长的剩余字符接在c所指数组的尾部。例如,当a所指字符串中的内容为abcdefg,b所指字符串中的内容为1234时,c所指数组中的内容应该为a4b3c2dlefg;而当a所指字符串中的内容为1234,b所指字符串中的内容为abcdefg时,c所指数组中的内容应改为1g2f3e4dcba。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*a,char*b,char*c)

{

inti,j;charch;

i=0;j=strlen(b)-1;

/*************found**************/

while(i>j}

{ch=bill;b[i]=b[j];b[j]=ch;

i++;j--;

}

while(*a||*b)

{if(*a){*c=*a;c++;a++;}

if(*b){*c=*b;c++;b++;}

}

/*************found**************/

*c=0;

}

main()

{

chars1[100],s2[100],t[200];

clrscr();

printf("\nEnters1string:");

scanf("%s",s1);

printf("\nEnters2string:");

scanf("%s",s2);

fun(s1,s2,t);

printf("\nTheresultis:%s\n",t);

}

33.下列给定的程序中,函数fun()的功能是:计算并输出k以内最大的6个能被7或11整除的自然数之和。K的值由主函数传入,若k的值为500,则函数的值为2925。

请改正程序中的错误,使它能得到正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include<stdio.h>

#include<conio.h>

intfun(intk)

{

intm=0,mc=0,j;

/*************found*************/

while(k>=2)&&(mc<6)

{

/*************found*************/

if((k%7=0)||(k%ll=0))

{

/*************found**************/

m=k;

mc++;

}

k--;

}

returnm;

}

main()

{

clrscr();

printf("%d\n",fun(500));

}

34.给定程序MODll.C中函数fun的功能是:交换主函数中两个变量的值。例如:若变量a中的值原为8,b中的值为3。程序运行后a中的值为3,b中的值为8。请改正程序中的错误,使它能计算出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

35.下列给定程序中,函数fun()的功能是:将m(1≤m≤10)个字符串反着连接起来,组成一个新串,放入pt所指字符串中,例如:把3个串DEG,ac,df反着串联起来,结果是dfacDEG。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main()函数,不得增行或者删行,也不得改变程序的结构!

试题程序:

#include<conio.h>

#include<string.h>

#include<stdio.h>

voidfun(charstr[][10],intm,char*pt)

{

intk,q,i,j=0;

/*************found*************/

for(k=m;k>0;k--)

{

q=strlen(str[k]);

j+=q;

for(i=0;i<q;i++)

pt[i]=str[k][i];

pt+=q;

pt[0]=0;

}

/*************found**************/

pt=j;

}

main()

{intm,h;

chars[10][10],p[120];

clrscr();

printf("\nPleaseenterm:");

scanf("%d",&m);

printf("\nPleaseenter%dstring:\n",m);

gets(s[0]);

for(h=0;h<m;h++)

gets(s[h]);

fun(S,m,p);

printf("/nTheresultiS:%s\n",p);

}

36.给定程序MODll.C中函数fun的功能是:统计substr所指子字符串在str所指字符串中出现的次数。

例如,若字符串为aaaslkaaas,子字符串为as,则应输出2。

请改正程序中的错误,使它能计算出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

37.给定程序MODll.C中fun函数的功能是:分别统计字符串中大写字母和小写字母的个数。

例如,给字符串s输入:AAaaBBb123CCccccd,则应输出结果:upper=6,lower=8。

请改正程序中的错误,使它能计算出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

38.下列给定程序中,函数fun()的功能是:给一维数组a输入任意4个整数,并按如下的规律输出。例如输入1,2,3,4,程序运行后输出以下方阵:

4123

3412

2341

1234

请改正程序中的错误,使它能得出正确的结果。

注意;不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序;

#include<stdio.h>

#defineM4

/*******************************/

voidfun(inta)

{inti,j,k,m;

printf("Enter4number:");

for(i=0;i<M;i++)scanf("%d",&a[i]);

printf("\n\nTheresult:\n\n");

for(i=M;i>0;i--)

{k=a[M-1];

for(j=M-1;j>0;j--)

/**********************************/

a[j]=a[j+1];

a[0]=k;

for(m=0;m<M;m++)printf("%d",a[m]);

printf("\n");

}

}

main()

{inta[M];

fun(a);printf("\n\n");

}

39.给定程序MODll.C中函数。fun的功能是:从3个红球,5个白球,6个黑球中任意取出8个作为一组,进行输出。在每组中,可以没有黑球,但必须要有红球和白球。

组合数作为函数值返回。正确的组合数应该是15。程序中i的值代表红球数,j的值代表白球数,k的值代表黑球数。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

40.给定程序中函数fun的功能是:根据整型形参m,计算如下公式的值。

例如,若m中的值为5,则应输出:1.463611。

请改正程序中的错误,使它能得到正确结果。

[注意]不要改动main函数,不得增行或删行,也不得更改程序的结构。

[试题源程序]

#include<stdi0.h>

doublefun(intm)

{

doubley=1.0;

inti;

/*************found*************/

for(i=2;i<m;i++)

/*************found*************/

y+=1/(i*i);

return(y);

}

main()

{

intn=5;

printf("\nTheresultis%1f\n",fun(n));

}

五、程序改错题(2题)41.下列给定程序中,函数ptoc的功能是:利用插入排序法对字符串中的字符按从小到大的顺序进行排序。插入法的基本方法是:先对字符串中的头两个元素进行排序,然后把第3个字符插入前两个字符中,插入后前3个字符依然有序;再把第4个字符插入前三个字符中,待排序的字符串已

在主函数中赋予。

请修改程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include<strin9.h>

#include<stdi0.h>

#defineM80

voidproc(char*arr)

{inti,j,n;charch;

n=strlen(arr):

for(i=1;i<n;i++)

//****found****

{c=arr[i];

j=i-1;

while((j>=o)&&(ch<arr[j]))

{

arr[j+1]=arr[j];

j--;

}

arr[j+1]=ch;

}

}

voidmain

{

chara[M]="QWERTYUIOPASDFGHJKLMNBVCXZ";

printf("Theoriginalstring:%s\n",a);

proc(a);

printf("Thestringaftersortin9:

%s\n\n",a);

}42.下列给定程序中,函数proc()的功能是:判断一个整数m是否是素数,若是返回1,否则返回0。在main()函数中,若proc()返回1,则输出″YES″;若proc()返回0,则输出″NO″!

请修改程序中的错误,使它能得出正确的结果。

注意:不要改动main)函数,不得增行或删行,也不得,t更改程序的结构。

试题程序:

六、操作题(2题)43.以下程序的输出结果为【】。

main()

{intk=1;

white(k<=15)

if(++k%3!=2)continue;

elseprintf("%d",k);

printf("\n");

}

44.以下程序运行后的输出结果是【】。(注:如果结果中含有回车,可加一空格写在一行,例如:

111

111

111

可以写成:111111111。

#include<stdio.h>

mala()

{inti,j,a[][3]={1,2,3,4,5,6,7,8,9};

for(i=0;i<3;i++)

for(j=i+1;j<3;j++)a[j][i]=0;

for(i=0;i<3;i++)

{for(j=0;j<3;j++)printf("%d",a[i][j]);

printf("\n");

}

}

参考答案

1.6060解析:程序中定义a是一个3行2列的二维数组,p是指向两个元素的一维数组指针,并让p指向二维数组a的首行。则代码*(*(p+2)+1)中的p+2指向二维数组a的第三行a[2],*(p+2)指向a[2[]0],*(p+2)+1指向a[2][1],*(*(p+2)+1)是引用a[2][1],其值是60。

2.-3-3解析:%运算符是求两个数相除的余数,其结果与被除数的符号一致,本题中“-19%4”的值为“-3”。

3.1919解析:根据二叉树的性质:在任意一棵二叉树中,度为。的结点(即叶子结点)总是比度为2的结点多一个。本题中度为2的结点数为18,故叶子结点数为18+1=19个。

4.5656解析:本题中a,b,c,d足实参,x,y,cp,dp是形参。C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。因此,程序的输出结果是56。

5.

6.1B

7.45794579解析:本题考查的是条件判断语句。本题特别需要注意的是“;”的问题,不能把“t=a;a=c;c=t;”误认为是第一个if的语句,实际上,只有“t=a;”才是第一个if的语句。所以判断第一个if语句的表达式不成立后,执行的是“a=c;c=t;”,此时a=5,c=79。然后判断第二个if语句的条件表达式,表达式成立,执行后面的3条语句,让a、b、c分别为4、5和79。

8.11371,13,7解析:本题考查3个知识点:①余数的计算,题中的a=10,b=3,a%b=1:②(表达式1,表达式2)形式的结果为最后一个表达式的值,题中的a=10,b=3,(a-b,a+b)=a+b=13;③条件运算符的使用,题中的a-b?a-b:a+b,判断语句a-b=7不为0,所以执行a-b,结果为7。

9.aua。a,ua。解析:test是结构体数组,每个元素均可看作是一个结构体变量,主函数将结构体数组元素test[0]中的name域下标为1的元素以字符形式输出,将结构体数组元素test[2]中的name域从地址name+3开始以字符串的形式输出。

10.22解析:本题变量m既是外部变量(值是13),又是fun函数的局部变量(值为3)。函数fun(x*y-m)的值为7*5-3=32,在main函数中,fun(a,b)/m中的m应取外部变量的值13,因此输出2。

11.B

12.D【答案】:D

【知识点】:栈和队列

【解析】:栈和队列都是线性结构,所以选项C错误;栈是一种先进后出的线性表,故选项A错误;队列是一种先进先出的线性表,故选项B错误,所以选D。

13.B解析:考查函数指针的使用方法。可以使用函数指针来调用函数。调用形式为:(*指针变量)(实参表列)。

14.B

15.D[解析]本题目中静态局部变量x,在静态存储区内分配存储单元。在程序整个运行期间都不释放。所以第一次循环s的值为2.第二次循环中,返回的x的值为4.所以s的值为8.第三次循环,返回的x的值为8.所以s的值为64.

16.D若G中有一条从Vj到Vi的路径,则图的拓扑序列中顶点Vj在顶点Vi之前。设G(V,E)是一个具有n个顶点的有向图,V中顶点的序列v1,v2,…,vn称为一个拓扑序列,当且仅当该顶点满足下列条件:若在有向图G中,从顶点vi在vj有一条路径,则在拓扑序列中顶点vi必须排在顶点vj之前。

17.C\n\tC。【解析】二分法查找只适用于顺序存储的有序表,对于长度为n的有序线性表,最坏情况只需比较log2n次。

18.C

19.B

20.Ddouble*p,a定义了一个指向双精度型的指针变量P和双精度型变量a,p=&a表示将变量a的地址赋给指针变量p;scanf("%If",p)表示用键盘输入的数赋给指针变量P所指向的地址单元中,scanf函数要求在输入double型数据,格式控制符必须用%1f。否则,数据不能正确输入。所以选项D正确。

21.

22.

题目中要求除了尾部的*号之外,将字符串中其他*号全部删除。首先将所有不是*的字符放在字符串str中,然后将尾部的*接在字符的后面,最后为字符串str加上结束符。

23.

【解析】首先定义两个变量分别用来存储级数的和与每一项的分母。观察级数的特点,其每一项的正负号是交替变化的。根据这些特点,每增加一项都需要变换符号。最后求出级数的和。

24.1voidfun(char*s,chart[])2{3inti,j=0;4for(i=0;i<strlen(s);i++)5if(!((i%2)==0&&(s[i]%2)))6t[j++]=s[i];7t[j]=0;8}按题目要求,将字符串S中符合要求的字符存放到字符数组t中。我们使用for循环语句来解决这个问题。在赋值之前,先对字符串s的元素下标和ASCⅡ值进行判断,将满足要求的元素赋给数组t,将数组t的最后一个字符赋值为'\\0',即ASCⅡ值为0。

25.

【解析】本题比较简单,因为题目中已经给出了算法,只要把题目中的说法转换成C语言表达式基本上就出来了,本题最好用do-while循环来做,但要注意循环终止的条件。

26.voidproc(inttt[M][N],intpp[N])inti,j,max;for(i=0;i<M;i++)//i控制行的下标{max=tt[i][c];//max存放每行中最大的数for(j=0;j<N;j++)if(tt[i][j]>max)max=tt[i][j];pp[i]=max;//把大的数放到PP数组中,经过i来控制pp数组的下标}}【解析】按照题目中要求,求出二维数组每行中最大元素,并依次放入PP所指的一维数组中。首先比较二维数组中每一行的元素,找出每一行中的最大元素,放入一维数组pp中,返回到主函数当中。27.voidfun(char*s,chart[]){ inti=0; for(;*s!=‘\0’;s++) /*找出ASCII值为奇数的字符依次存入数组t中*/ if(*s%2==1) t[i++]=*s; t[i]=‘\0’; /*在字符串的末尾加上字符串结束标志*/}本题要求将s所指字符串中ASCII值为偶数的字符删除,因此本题要求采用一个for循环来找出ASCII值为奇数的字符,将其依次存入数组t中,并使用if条件语句来判断s所指字符串中ASCII值是否为奇数。将‘\\0’加在字符串的末尾来表示字符串的结束。要删除ASCII值为偶数的字符,也就是要留下ASCII值为奇数的字符。由于最终要求出剩余字符(即ASCII值为奇数)形成的新字符串,因此本题程序的算法是对原字符串从头到尾扫描,找出ASCII值为奇数的字符,并将其依次存入数组t中。此外,还要注意数组t的下标变化和下标的初值(初值必须为0,即i=0),t[i++]的作用是先使用t[i],然后再使i自增1。28.voidproc(char*str。chart[3]){inti,j=0;for(i=0;str[i]!=\\O;i++)//从数组的第一个元素开始,到其最后一个{if(i%2==0str[i]%21=o)//下标为偶数、同时ASCIl码值为奇数的字符t[j++]=str[i];}//如果成立,则把它放到t数组中t[i]=\\o;//字符串结束标志为\\0}【解析】题目中要求将字符串str中下标为偶数,同时ASCIl码值为奇数的字符放在数组t中。首先,需要检查字符串str中下标为偶数的字符其ASCIl码值是否为奇数,将符合要求的字符放在数组t中。最后,为新的字符串数组添加结束符。29.

voidfun(char*a){

while(*a!=’、0。)

a++:

a一一;/*指针a指向字符串的尾部*/while(}a==’*。)

a一一;/·指针a指向最后一个字母*/

*(a+1)=’、0’;/*在字符串最后加上结束标志符·/

【考点分析】

本题考查:删除字符串尾部*号;删除的主要思想是把不删除的字符保留起来。

【解题思路】

对于一个字符串要删除其尾部的*号,只需要在最后一个不是*号的字符后面加上结束符号‘、0’。具体操作为:首先找到字符串的结尾,然后从最后一个字符开始往前逐个判断是否为*号,直到找到非·号字符为止。最后在该字符后面加上结束符号’\0。

30.1voidfun(inta[][n],intm)2{3inti,j;4for(j=0;j

<="">5for(i=0;i<=j;i++)6a[i][j]=a[i][j]*m;/*上三角元素中的值乘以m*/7}本程序实现的是:矩阵上三角元素的值乘以m。上三角元素下标的特点是行下标小于等于列下标,即“i<=j”使用循环语句遍历数组元素,第1个循环用于控制列坐标,第2个循环用于控制行下标。

31.(1)aa[i]=m%k;(2)printf("%d"aa[i-1]);(1)aa[i]=m%k;\r\n(2)printf("%d",aa[i-1]);解析:本题中函数的功能是将十进制正整数m转换成k(2≤k≤9)进制数。对于十进制转换成k进制数的一般算法是将这个数除以进制,取余反序输出。

32.(1)错误:while(i>j)正确:while(i<j)(2)错误:*c=0;正确:*c='\0'(1)错误:while(i>j)正确:while(i<j)\r\n(2)错误:*c=0;正确:*c='\\0'解析:这是一个字符串处理的较为混合的程序,将字符串倒序存放的方法一般是以字符串中央为中心,将两边对称位置的字符互相交换。可利用循环语句实现,但必须要注意两边对称位置元素的下标。该题是用指针配合循环的嵌套实现解题目的。

33.(1)错误:while(k>=2)&&(mc<6)正确:while((k>=2)&&(mc<6))(2)错误:if((k%7=0)||(k%11=0))正确:if((k%7==0)||(k%11=0))(3)错误:m=k正确:m=m+k;(1)错误:while(k>=2)&&(mc<6)正确:while((k>=2)&&(mc<6))\r\n(2)错误:if((k%7=0)||(k%11=0))正确:if((k%7==0)||(k%11=0))\r\n(3)错误:m=k正确:m=m+k;解析:错误1:C语言规定while语句后的表达式两侧必须要有圆括号。错误2:if语句的判断条件应用关系运算符,而不是赋值运算符。错误3:根据题意,将满足条件的数求累加和。

34.(1)voidfun(int*xint*y)(2)t=*x;*x=*y;*y=t;(1)voidfun(int*x,int*y)(2)t=*x;*x=*y;*y=t;解析:本题中函数的功能是交换主函数中两个变量的值。利用临时变量存放临时交换值,实现两个变量的交换。

35.(1)错误:for(k=m;k>0;k--)正确:for(k=m-1;k>=0;k--)(2)错误:pt=j;正确:pt-=j;(1)错误:for(k=m;k>0;k--)正确:for(k=m-1;k>=0;k--)\r\n(2)错误:pt=j;正确:pt-=j;解析:错误1:本题旨在考查二维数组下标的灵活使用,如果二维数组有m行,则行下标取值从0到m-1。错误2:此时指针pt指向字符串的尾部,而函数返回的应是字符串的首地址,所以pt向前移动j个字符,则到达字符串的首部。

36.(1)for(i=0;

温馨提示

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

评论

0/150

提交评论