2023年四川省乐山市全国计算机等级考试C语言程序设计测试卷(含答案)_第1页
2023年四川省乐山市全国计算机等级考试C语言程序设计测试卷(含答案)_第2页
2023年四川省乐山市全国计算机等级考试C语言程序设计测试卷(含答案)_第3页
2023年四川省乐山市全国计算机等级考试C语言程序设计测试卷(含答案)_第4页
2023年四川省乐山市全国计算机等级考试C语言程序设计测试卷(含答案)_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

2023年四川省乐山市全国计算机等级考试C语言程序设计测试卷(含答案)学校:________班级:________姓名:________考号:________

一、2.填空题(10题)1.下面程序的运行结果是【】。

#include<stdio.h>

#defineSIZE12

main()

{chars[SIZE];intI;for(I=0;I<SIZE;I++)s[I]=′A′+I+321;

sub(s,7,SIZE-1);

for(I=0;I<SIZE;I++)printf("%c",s[I]);

printf("\n");}

sub(char*a,intt1,intt2)

{charch;

while(t1<t2)

{ch=*(a+t1);

*(a+t1)=*(a+t2);

*(a+t2)=ch;

t1++;t2--;}}

2.用以下语句调用库函数malloc,使字符指针st指向具有11个字节的动态存储空间,请填空。st=(char*)【】;

3.下列程序中的数组a包括10个整数元素,分别将前项和后项之和存入数组b,并按每行4个元素输出数组b。请填空。

#include<stdio.h>

main()

{inta[10],b[10],i;

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

scanf("%d",&a[i]);

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

______;

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

{if(i%4=0)printf("\n");

printf("%3d",b[i]);

}

}

4.在树形结构中,没有前件的结点是()。

5.以下程序运行后的输出结果是______。

voidfun(intx,inty)

{

x=x+y;y=x-y;x=x-y;

printf("%d,%d,",x,y);

}

main()

{

intx=2,y=3;

fun(x,y);

printf("%d,%d\n",x,y);

}

6.设y为血型变量,请写出描述“y是偶数”的表达式______。

7.【】是指一个数据对象中的各个数据元素之间存在的联系。

8.在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。其中数据独立性最高的阶段是【】。

9.请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。

【】(double,double);

main()

{doublex,y;

scanf("%1f%1f",&x,&y);

printf("%1f\n",max(x,y));

}

doublemax(doublea,doubleB)

{return(a>b?a:b);}

10.以下程序输出的最后一个值是【】

intff(intn)

{staticintf=1;

f=f*n;

returnf;

}

main()

{inti;

for(i=1;i<=5;i++)printf("%d\n",ff(i));

}

二、单选题(10题)11.有以下程序:#include<stdio.h>main(){inta=-2,b=0;while(a++++b);printf("%d,%d\n",a,b);}程序运行后的输出结果是()。A.1,3B.0,2C.0,3D.1,2

12.若已定义inta,则表达式a=10,a+10,a++的值是()。

A.20B.10C.21D.11

13.下列方法中,属于白盒法设计测试用例的方法的是()。

A.错误推测B.因果图C.基本路径测试D.边界值分析

14.

15.对n个元素的有序表A[1..n]进行顺序查找,其成功查找的平均查找长度(即在查找表中找到指定关键码的元素时,所进行比较的表中元素个数的期望值)为()

A.nB.(n+1)/2C.log2nD.n^2

16.对于如图所示二叉树采用中根遍历,正确的遍历序列应为()A.ABCDEFB.ABECDFC.CDFBEAD.CBDAEF

17.设单链表中结点的结构为非空的循环单链表first的尾结点(由p所指向)满足:______A.p->link==NULL;B.p==NULL;C.p->link==first;D.p==first;

18.成功的测试是指A.A.运行测试实例后未发现错误

B.发现程序的错误

C.证明程序正确

D.软件产生

19.快速排序在已经有序的情况下效率最差,复杂度为()

A.O(nlogn)B.O(n^2logn)C.O(n^1.5)D.O(n^2)

20.下面程序的输出是()。A.17B.18C.23D.24

三、程序设计题(10题)21.请编写函数proc(),该函数的功能是:计算并输出

例如,若主函数从键盘给n输入10后,则输出为S=104.478749。

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

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

试题程序:

22.学生的记录由学号和成绩组成,M名学生的数据已在主函数中放人结构体数组stu中,请编写函数proc(),它的功能是:把指定分数范围之外的学生数据放在b所指的数组中,分数范围之外的学生人数由函数值返回。

例如,输入的分数是70和79,则应当把分数低于70和高于79的学生数据输出,不包含70分和79分的学生数据。主函数中把70放在low中,把79放在heigh中。

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

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

试题程序:

23.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,学生的记录由学号和成绩组成,N名学生的记录已在主函数中放入结构体数组s中,请编写函数fun(),其功能是把低于平均分的学生记录放入b所指的数组中,低于平均分的学生人数通过形参n返回,平均分通过函数值返回。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#defineN8typedefstruct{ charnum[10]; doubles;}STREC;doublefun(STREC*a,STREC*b,int*n){}voidmain(){ STRECs[N]={{“GA05”,85},{“GA03”,76},{“GA02”,69},{“GA04”,85},{“GA01”,91},{“GA07”,72},{“GA08”,64},{“GA06”,87}}; STRECh[N]; inti,n; doubleave; ave=fun(s,h,&n); printf(“The%dstudentdatawhichislowerthan%7.3f:\n”,n,ave); for(i=0;i<n;i++)<p=""></n;i++)<> /*输出成绩低于平均分的学生记录*/ printf(“%s%4.1f\n”,h[i].num,h[i].s); printf(“\n”);}

24.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun(),该函数的功能是判断字符串是否为回文,若是,则函数返回1,在主函数中输出“YES”,否则返回0,在主函数中输出“NO”。回文字符串是指顺读和倒读都一样的字符串。例如,字符串LEVEL是回文,而字符串123312就不是回文。注意:部分源程序在文件prog1.c中。第3部分无纸化考武题庠请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:1#include2#defineN803intfun(char*str)4{56}7main()8{9chars[n];10FILE*out;11char*test[]={"1234321","123421","123321","abcdCBA"};12inti;13printf("Enterastring:");14gets(s);15printf("\n\n");16puts(s);17if(fun(s))18printf("YES\n");19else20printf("NO\n");21/******************/22out=fopen("out.dat","w");23for(i=0;i<4/i++)24if(fun(test[i]))25fprintf(out,"YES\n");26else27fprintf(out,"NO\n");28fclose(out);29/******************/30}

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

26.编写函数intproc(intlim,intaa[M]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求出的素数。例如,若输入12时,则输出:235711。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。试题程序:

27.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun(),该函数的功能是统计各年龄段的人数。N个年龄通过调用随机函数获得,并放入主函数的age数组中。要求函数把0~9岁的人数存放在d[0]中,把10~19岁的人数存放在d[1]中,把20~29岁的人数存放在d[2]中,依此类推,把100岁(含100岁)以上年龄的人数都存放在d[10]中。结果在主函数中输出。注意:部分源程序在文件prog1.c中。请勿改动main()函数和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:28.请编一个函数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");}29.请编写函数proc(),其功能是:将str所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在t所指数组中。

例如,当str所指字符串中的内容为abcdefg,则在t所指数组中的内容应是bdf。

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

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

试题程序:

30.规定输入的字符串中只包含字母和*号。编写函数fun(),其功能是:删除字符串中所有的*号。编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为“****A*BC*DEF*G****”,删除后,字符串中的内容应当是“ABCDEFG”。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数fun()的花括号中填入编写的若干语句。试题程序:

四、2.程序修改题(10题)31.下列给定程序中,函数fun()的功能是根据整型形参m,计算如下公式的值。

y=1-1/(2×2)+1/(3×3)-1/(4×4)+…+(-1)(m+1)/(m×m)

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

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

doublefun(intm)

{doubley=1.0;

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

intj=1;

inti;

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

{

j=-1*j;

/****************found*******+******/

y+=1/(i*i);

}

return(y);

}

main()

{

intn=5;

clrscr();

printf("\nTheresultis%lf\n",fun(n));

}

32.下列给定程序中,函数fun()的功能是:传入一个整数m,计算如下公式的值。

t=1/2-1/3-…-1/m

例如,若输入5,则应输出-0.283333。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

doublefun(intm)

{

doublet=l.0;

inti;

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

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

t=l.0-1/i;

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

}

main()

{intm;

clrscr();

printf("\nPleaseenter1integernumbers

:In");

scanf("%d",&m);

printf("\n\nTheresultis%lfln",

fun(m));

}

33.给定程序MODll.C中函数fun的功能是:首先将大写字母转换为对应小写字母;若小写字母为a~u,则将其转换为其后的第5个字母;若小写字母为v~z,使其值减21。转换后的小写字母作为函数值返回。例如,若形参是字母A,则转换为小写字母f若形参是字母W,则转换为小写字母b。

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

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

34.下列给定程序中,函数fun()的作用是,将字符串tt中的大写字母都改为对应的小写字母,其他字符不变。例如,若输入"Ab,cD",则输出"ab,cd"。

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

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

试题程序:

#include<stdio.h>

#include<string.h>

#include<conio.h>

char*fun(chartt[])

{

inti;

for(i=0;tt[i];i++)

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

{if(('A'<=tt[i]||(tt[i]<='z'))

tt[i]+=32;}

return(tt);

}

main()

{inti;

chartt[81];

clrscr();

printf("\nPleaseenterastring:");

gets(tt);

printf("\nTheresultstringis:\n%s",fun(tt));

}

35.下列给定程序中,函数fun()的功能是:从s所指字符串中,找出t所指字符串的个数作为函数值返回。例如,当s所指字符串中的内容为abcdabfab,t所指字符串的内容为ab,则函数返回整数3。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

intfun(char*s,char*t)

{intn;char*p,*r;

n=0;

while(*s)

{p=s;

r=t;

while(*r)

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

if(*r==*p){r++;p++}

elsebreak;

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

if(r=='\0')

n++;

s++;

}

returnn;

}

main()

{chars[100],t[100];intm;

clrscr();

printf("\nPleaseenterstrings:");

scanf("%s",s);

printf("\nPleaseentersubstringt:");

scanf("%s",t);

m=fun(s,t);

printf("\nTheresultis:m=%d\n",m);

}

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

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

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

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

37.下列给定程序中,函数fun()的功能是:计算

S=f(-n)+f(-n+1)+…+f(0)+f(1)+f(2)+…f(n)的值。

例如,当n为5时,函数值应为10.407143。f(x)函数定义如下:

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

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

f(doublex)

{

if(x==0.0||x==2.0)

return0.0;

elseif(x<0.0)

return(x-1)/(x-2);

else

return(x+1)/(x-2);

}

doublefun(intn)

{

inti;doubles=0.0,y;

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

{y=f(1.0*i);s+=y;}

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

returns

}

main()

{clrscr();

printf("%f\n",fun(5));

}

38.给定程序中,函数fun()的功能是:求输入的两个数中较小的数。

例如:输入510,结果为minis5。

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

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

试题程序、

#include<stdio.h>

#include<conio.h>

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

intfun(intx,y)

{intz;

z=x<y?x:y;

return(z);

}

main()

{inta,b,c;

scanf("%d,%d\n",&a,&b);

c=fun(a,b);

printf("minis%d",c);

}

39.下列给定程序中函数fun()的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。例如,当s中的数为7654321时,t中的数为642。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

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

voidfun(longs,longt)

{longs1=10;

s/=10;

*t=s%10;

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

while(s<0)

{s=s/100;

*t=s%10*s1+*t;

s1=s1*10;

}

}

main()

{longs,t;

clrscr();

printf("\nPleaseenters:");scanf

("%ld",&s);

fun(s,&t);

printf("Theresultis:%ld\n",t);

}

40.下列给定程序中,函数fun()的功能是:先从键盘上输入一个3行3列的矩阵的各个元素的值,然后输出主对角线元素之积。

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

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

试题程序:

#include<stdio.h>

intfun()

{

inta[3][3],mu1;

inti,j;

mu1=l;

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

{

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

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

scanf(“%d”,&a[i][j]);

}

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

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

mu1=mu1*a[i][j];

printf("Mu1=%d\n",mu1);

}

main()

{

fun();

}

五、程序改错题(2题)41.以下程序可把输入的十进制数以十六进制数的形式输出。请在横线上填上适当的内容并把横线删除,使它能得出正确的结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。试题程序:

42.下列给定程序中,函数proc的功能是:读入一个字符串(长度<20),将该字符串中的所有字符按ASCII码升序排序后输出。

例如,输入opdye,则应输出deopy。

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

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

试题程序:

#include<string.h>

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

//****found****

intproc(charstr[])

{

charc;

unsignedi,j;

for(i=0;i<strlen(str)-1;i++)

for(j=i+1;j<strlen(str);j++)

if(str[i]>str[j])

{

c=str[j]:

//****found****

str[j]=str[i++];

str[i]=c;

}

}

voidmain

{

charstr[81];

system("CLS");

printf("\nPleaseenteracharacter

string:");

gets(str);

printf("\n\nBeforesorting:\n%s",str);

proc(str);

printf("\nAftersortingdecendingly:\n

%s",str);

}六、操作题(2题)43.下列程序段的运行结果是______。

intx=0,y=0;

while(x<15)y++,x+=++y;

printf("%d,%d",y,x);

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

#definePOW(r)(r)*(r)

main()

{intx=3,y=2,t;

t=POW(x+y);

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

}

参考答案

1.abcdefglkjIhabcdefglkjIh解析:本题主要考查了字符变量可参与的运算。因为字符在计算机中是以ASCII码的形式存放的,所以字符变量可看作整型变量来处理,如参与算术运算等,某字符的大写字母的ASCII码值比它对应的小写字母ASCII码值小32。

2.malloc(11)malloc函数的格式是void*(或char*)malloc(size),size表示应分配的存储区,此题要分配11字节的单元,把11代入即可。

3.b[i]=a[i]+a[i+1]b[i]=a[i]+a[i+1]解析:将数组a中元素a[i]与a[j+1]值相加后的值赋予数组b中元素b[i],即可实现将一个数组的前项和后项之和存入另一数组。

4.根结点根结点

5.32233,2,2,3解析:主函数中首先定义了整型变量x和y,并分别给它们赋初值为2和3,接着调用fun()函数,fun()函数把实参x和y的值传给形式参数x和y,实参和形参不再有联系.在fun()函数中通过运算使x和y的值交换过来,所以fun()函数中的输出结果是“3,2”。fun()函数调用返回输出x和y依旧是原来的x和y,为“2,3”原因是变量作为形参传值的,对形参的修改并不影响对应的实参。所以最后输出为3,2,2,3。

6.(y%2)==0(y%2)==0解析:因符合偶数的条件是对2取余为0,所以要描述y是偶数的表达式是(y%2)==0。

7.数据结构数据结构

8.数据库系统数据库系统解析:数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。(1)人工管理阶段。这一阶段的计算机主要用于科技计算。外存只有磁带、卡片和纸带等,软件只有汇编语言,尚无数据管理方面的软件。数据处理方式是批处理。(2)文件系统阶段。文件系统是数据库系统发展的初级阶段,它提供了简单的数据共享与数据管理能力,但是它无法提供完整的、统一的管理和数据共享的能力。由于它的功能简单,因此它附属于操作系统而不能成为独立的软件,目前一般将其看成仅是数据库系统的雏形,而不是真正的数据库系统。(3)数据库系统阶段。数据库阶段用数据模型表示复杂的数据模型,有较高的数据独立性。数据库系统为用户提供了方便的用户接口,用户可使用查询语言或终端命令操作数据库,也可以用程序方式(用COBOL、C一类高级语言和数据库语言编制的程序)操作数据库。数据库管理系统提供了数据控制功能。

9.doublemax或externdoublemaxdoublemax或externdoublemax解析:本题中main()函数需要调用max()函数,在main()之前就需要声明函数max(),并且可以用extern说明符使变量的作用域扩充到需要用到它的函数,所以,填写doublemax(或externdoublemax)。

10.120120解析:静态变量的类型说明符是static,静态局部变量属于静态存储方式,它具有以下特点:

①静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。

②对静态局部变量是在编译时赋初值的,即只赋初值—次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。

③如在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。(注意:C语言中的非静态变量在定义时,系统并不会自动给它赋初值)

④虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的。

本题中函数的功能是:与for语句一起求一个整数的阶乘。

11.D输出的结果是:-1,1\r\n0,2\r\n1,2

12.B

13.CC)【解析】白盒测试方法也称为结构测试或逻辑测试,主要方法有逻辑覆盖测试、基本路径测试等。

14.D

15.B

16.D

17.C

18.B软件测试的目的主要有以下几个方面。

(1)软件测试是为了发现错误而执行程序的过程。

(2)一个好的测试用例能够发现至今尚未发现的错误。

(3)一个成功的测试是发现了至今尚未发现的错误的测试。

另外,即使经过了最严格的测试,可能仍然还有没被发现的错误藏在程序中,测试只是找出程序中的错误,不能证明程序中没有错误。

19.D

20.B

21.

【解析】在本程序中,用S1来表示题中每个小括号内的值,第1项相当于有1个10.5。第2项相当于第1项的值加上20.5,第3项相当于第2项的值加上30.5,…,依此类推。函数pow(x,y)的功能是求出x的y次方,程序中用S来表示总和值,每循环一次加1次Sl的值,即加1项。

22.

【解析】题目要求把指定范围之外的数放到h中,将每一个学生的成绩与指定的成绩相比较,将符合条件的学生成绩放在数组b中,并将符合要求的学生个数返回给主函数。

23.doublefun(STREC*a,STREC*b,int*n){ inti,j=0; doubleav=0.0; for(i=0;i<=""p=""> av=av+a[i].s; av=av/N; /*求平均分*/ for(i=0;i<=""p=""> if(a[i].s<av)<p=""></av)<> b[j++]=a[i];/*将低于平均分的学生记录存入结构体数组b中*/ *n=j;/*传回低于平均分的学生人数*/ returnav;/*返回平均分*/}本题使用循环语句和条件判断语句来实现题目要求。第1个循环语句的作用是求出总分,然后求出平均分av。第2个循环语句的作用是将分数低于平均分的学生记录存入结构体数组b中。

24.1intfun(char*str)2{3inti,n=0,fg=1;4char*p=str;5while(*p)/*将指针p指向字符串末尾,并统计字符数*/6{7n++8P++;10}10for(i=0;i25.

voidfun(char*a){

while(*a!=’、0。)

a++:

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

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

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

【考点分析】

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

【解题思路】

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

26.

【解析】首先判断小于等于整数lim的所有整数是否为素数。然后将一个素数放入数组aa中,最后将素数的个数返回给主函数。

27.1voidfun(int*a,int*b)2{3inti,j;4for(j=0;j<M;j++)5b[j]==0;/*_且b初始化为0*/6for(i=0;i<N;i++)7if(a[i]>=100)8b[10]++;/*如果年龄大于等于100,b[lo]自增1*/9else10b[a[i]/10]++;/*如果年龄小于100,则将其分别统计到b[a[i]/10]中*/11}<m;j++)<n;i++)本题是一个分段函数的问题,用两个循环来完成。第1个循环的作用是使数组b中的所有元素值都为0。这个循环不能省略,因为若未对数组b中的元素赋初值,则它们的值将是不可预测的。第2个循环的作用是分别统计数组a中各年龄段的人数。当a[i]>100时,按题意要将其统计到b[10]中。else的作用是如果年龄小于100,则将其分别统计到b[a[i]/10]中。由运算优先级可知先进行a[i]/10的运算,所得结果作为b的下标。若a[i]为0~9,a[i]/10的值为0,且0?9岁的人数正好存入b[0]中。若a[i]为10~19,a[i]/10的值为1,且10~19岁的人数正好存入b[1]中,依此类推。</n;i++)</m;j++)28.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中,返回到主函数当中。

29.

【解析】题目要求将下标为偶数的字符删除,其余字符放在新的字符数组t中。首先取出字符串str中下标为奇数的字符,将其赋值给新的字符串t,最后用ˊ\0ˊ作为字符串结束的标志。

30.

【解析】此题是删除字符串中的星号。思路是通过for循环来完成对字符串的遍历,通过if判断,找到不是“*”的字符,将其赋值到数组a中星号前的位置,“if(a[i]!=ˊ*ˊ)”“a[j++]=a[i]”,最后返回主函数将删除*后的字符串输出即可。

31.(1)错误:intj=1正确:doublej=1.0;(2)错误:y+=1/(i*i);正确:y+=j/(i*i);(1)错误:intj=1正确:doublej=1.0;\r\n(2)错误:y+=1/(i*i);正确:y+=j/(i*i);解析:错误1:为了做后面的除法运算,j要定义为实型数,否则除得的结果将为整数。错误2:题中公式是加减相间的运算,通过来实现。

32.(1)错误:t=1.0-1/i;正确:t-=1.0/i;(2)错误:;正确:returnt;(1)错误:t=1.0-1/i;正确:t-=1.0/i;\r\n(2)错误:;正确:returnt;解析:解答类似题目的思路是我们依然先从数学思路着手,即理解数学上的规律,再分析C语言的流程,本题中分母依等差数列递增,最好用循环语句解决。我们先从第1句1/2的表达式来看起:当i从2(必须从2开始)开始循环的时候,虽然t=1.0-1/i;和t-=1.0/i;的第1个值都是相同的,但随着循环的累加,我们就能发现问题所在了!

33.(1)c=c+32;(2)c=c+5;(1)c=c+32;(2)c=c+5;解析:本题中函数的功能是将某些大写字母转换为对应小写字母之后的第五个字母。对于将字母转换的题型,首先是查找符合条件的字符,然后根据规则对字符进行转换。本题需要大家了解大小写字母是怎样通过ASCII码相互转换的。

34.错误:if(('A'<=tt[i]||(tt[i]<='Z'))正确:if((tt[i]>='A')&&(tt[i]<='Z'))错误:if(('A'<=tt[i]||(tt[i]<='Z'))正确:if((tt[i]>='A')&&(tt[i]<='Z'))解析:从ASCII码表中可以看出,小写字母的ASCII码值比对应大写字母的ASCII码值大32。将字符串中的大写字母改为小写字母的方法是,从字符串第1个字符开始,根据ASCII码值判断该字母是不是大写字母,若是,则ASCII码值加32即可;重复执行以上过程直至字符串尾。本题可利用条件选择语句和循环语句来实现。

35.(1)错误:if(*r==*p){r++;p++}正确:if(*r==*p){r++;p++;}(2)错误;if(r=='\0')正确:if(*r=='\0')(1)错误:if(*r==*p){r++;p++}正确:if(*r==*p){r++;p++;}\r\n(2)错误;if(r=='\\0')正确:if(*r=='\\0')解析:从字符串s中找出于串t的方法是:从第一个字符开始,对字符串进行遍历;若s串的当前字符等于t串的第1个字符,两字符串的指针自动加1,继续比较下一个字符;若比较至字符串t的结尾,则跳出循环;若s串的字符和t串的字符不对应相同,则继续对下一个字符进行处理。

36.(1)for(i=2;i<=m;i++)(2)y+=1.O/(i*i);(1)for(i=2;i<=m;i++)(2)y+=1.O/(i*i);解析:该题中函数功能是计算公式的值。其中,公式中涉及在循环中对各项的计算及累加求

温馨提示

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

最新文档

评论

0/150

提交评论