2021年内蒙古自治区呼和浩特市全国计算机等级考试C语言程序设计测试卷(含答案)_第1页
2021年内蒙古自治区呼和浩特市全国计算机等级考试C语言程序设计测试卷(含答案)_第2页
2021年内蒙古自治区呼和浩特市全国计算机等级考试C语言程序设计测试卷(含答案)_第3页
2021年内蒙古自治区呼和浩特市全国计算机等级考试C语言程序设计测试卷(含答案)_第4页
2021年内蒙古自治区呼和浩特市全国计算机等级考试C语言程序设计测试卷(含答案)_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

2021年内蒙古自治区呼和浩特市全国计算机等级考试C语言程序设计测试卷(含答案)学校:________班级:________姓名:________考号:________

一、2.填空题(10题)1.以下程序用来输出结构体变量ex所占存储单元的字节数:

structst

{charname[20];doublescore;};

main()

{structstex;

printf("exsize:%d\n",sizeof(【】));

}

2.执行以下程序后sum的值是【】。

main()

{

inti,sum;

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

sum+=i;

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

}

3.下列表达式用于判断y是否为闰年。闰年的判断条件是:年号能被4整除但不能被100整除或年号能被400整除,请填空______。

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

f(inta)

{staticc=0;

c=a+c++;

return(c);

}

main()

{inta=2,i,k;

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

k=f(a++);

prinf("%d\n",k);

}

5.以下程序运行结果是【】。

#include<stdio.h>

main()

{intfun();fun();}

fun()

{staticinta[3]={0,1,2};

inti;

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

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

printf("\n");}

6.下面函数的功能是将一个字符串的内容颠倒过来,请填空。

voidfun(charstr[])

{inti,j,k;

for(i=0,j=【】;i<j;i++,j--)

{k=str[i];

str[i]=str[j];

str[j]=k;}}

7.以下程序中,函数fun的功能是计算x2-2x+6,主函数中将调用fun函数计算:

y1=(x+8)2-2(x+8)+6

y2=sin2(x)-2sin(x)+6

请填空。

#include"math.h"

doublefun(doublex){return(x*x-2*x+6);}

main()

{doublex,y1,y2;

printf("Enterx:");scanf("%lf",&x);

y1=fun(【】);

y2=fun(【】);

printf("y1=%lf,y2=%lf\n",y1,y2);

}

8.下面程序段的输出结果是【】。

intx=5;

do{printf("%d",x-=4);

}while(!(--x));

9.以下函数rotate的功能是:将a所指N行N列的二维数组中的最后一行放到b所指二维数组的第0列中,把a所指二维数组中的第0行放到b所指二维数组的最后一列中,b所指二维数组中其他数据不变。

#defineN4

voidrotate(inta[][N],intb[][N])

{inti,j;

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

{b[i][N-1]=a[0][i];【】=a[N-1][i];}

}

10.阅读下列程序,则程序的输出结果为【】。

#include"stdio.h"

structty

{intdata;

charc;};

main()

{structtya={30,′x′};

fun(a);

printf("%d%c",a.data,a.c);}

fun(structtyb)

{b.data=20;

b.c=′y′;}

二、单选题(10题)11.下列排序算法中,()算法可能会出现下面情况:初始数据有序时,花费的时间反而最多。

A.堆排序B.冒泡排序C.快速排序D.希尔排序

12.已知一个有序表为(15,19,30,33,49,50,65,88,93,126,164),当二分查找值为126的元素时,检索成功需进行的比较次数为()。

A.1次B.2次C.3次D.4次

13.有下列程序:#include<stdio.h>voidfun(char*a,char*B){while(*a=='*')a++;while(*b=*A){b++;a++;}}main(){char*s="*****a*b****",t[80];fun(s,t);puts(t);程序的运行结果是()。A.*****a*bB.a*bC.a*b****D.ab

14.下面哪个序列不是此图的一个拓扑排序()A.ebfgadchB.aebdgfchC.adchebfgD.Aedbfgch

15.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为()。

A.13B.33C.18D.40

16.

17.有以下程序:voidfunl(char*p)程序执行后的输出结果是()A.ProhsbnB.PrphsbnC.ProgsbnD.Program

18.若以“a+”方式打开一个已存在的文件,以下叙述正确的是()。

A.文件打开时,原有文件内容不被删除,可以进行添加和读操作

B.文件打开时,原有文件内容不被删除,位置指针移到文件开头,可以进行重写和读操作

C.文件打开时,原有文件内容不被删除,位置指针移到文件中间,可以进行重写和读操作

D.文件打开时,原有文件内容被删除,只可进行写操作

19.已知小写母a的ASCII码为97,大写字母A的ASCII码为65,以下程序的结果是_______。main(){unsignedinta=32,b=66;printf("%c\n",a|B);}

A.66B.98C.bD.B

20.有以下程序,程序中库函数islower(ch)用以判断ch中的字母是否为小写字母:

程序运行后的输出结果是()。

A.abcdEFg!B.AbCdEFg!C.abcdEFG!D.aBcDEFG!

三、程序设计题(10题)21.假定输入的字符串中只包含字母和*号。请编写函数proc,它的功能是:将字符串中的前导*号全部删除,中间和后面的*号不删除。例如,若字符串中的内容为****a*bc*def*g****,删除后,字符串中的内容则应当是a*bc*def*g****。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。试题程序:#include<stdio.h=:{>#include<conio.h>woidproc(char*str){}voidmaincharstr[81];printf("Enterastring:\n");gets(str);proc(str):printf("Thestringafterdeleted:\n");puts(str);}

22.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun(),其功能是求斐波那契数列中大于t的最小的数,结果由函数返回。斐波那契数列F(n)的定义为F(0)=0,F(1)=1F(n)=F(n-1)+F(n-2)例如,当t=1000时,函数值为1597。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include<conio.h>#include<math.h>#include<stdio.h>intfun(intt){}main(){intn;n=1000;printf(“n=%d,f=%d\n”,n,fun(n));}

23.有一个一维数组,内放10个学生成绩,写一个函数,求出平均分。

24.请编写一个函数intproc(int*s,intt,int*k),用来求出数组的最小元素在数组中的下标并存放在k所指的存储单元中。例如,输入如下整数:27393445362489342111831527246则输出结果为4,89。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。试题程序:

25.请编写函数proc,该函数的功能是:将放在字符串数组中的M个字符串(每串的长度

不超过N),按顺序合并组成一个新的字符串。

例如,若字符串数组中的M个字符串为:

ABCD

BCDEFG

CDEFGHI

则合并后的字符串内容应该是ABCDBCDEFGCDEFGHl。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

#defineM3

#defineN20

voidproc(chararr[M][N],char*b)

{

}

voidmain

{

charstr[M][N]={"ABCD","BCDEFG","CDEFGHl"),i;

chararr[100]={"##################"};

printf(”Thestrin9:kn”);

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

puts(str[i]);

printf("\n");

proc(str,arr);

printf("TheAstring:\n");

printf("%S",arr);

printf("\n\n");

}

26.n个人的成绩存放在score数组中,请编写函数proc(),它的功能是将低于平均分的人数作为函数值返回,将低于平均分的分数放在down所指的数组中。例如,当score数组中的数据为{99,80,40,56,59,84,60,76,100}时,函数返回的人数应该是4,down中的数据应为40565960。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。试题程序:

27.请编一个函数fun(ohlr*str),该函数的功能是把字符串中的内容逆置。

例如,字符串中原有的字符串为asdf9,则调用该函数后,串中的内容为9fdsa。

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

试题程序:

#include<string.h>

#include<conio.h>

#include<stdio.h>

#defineN100

voidfun(char*str)

{

}

voidmain

{

chara[N];

FILE*out:

printf("Enterastring:");

gets(a);

printf("Theorigiralstringis:");

puts(a);

fun(a):

printf("Thestringaftermodified:");

puts(a);

strcpy(a,"Welcome!");

fun(a);

ut=fopen("outfile.dat","w");

fprintf(out,"%s".a);

fclose(out);

}

28.编写一个函数,输入n个字符串,串与串之间以Enter键分隔,找出最短字符串中第一个字符串,传回该串地址(用一个新串“*”作为结束输入的标志)。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。试题程序:

29.请编一个函数intfun(inta),它的功能是:判断a是否是素数,若a是素数,返回1;若不是素数,返回0。A的值由主函数从键盘读入。

30.某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出,请编写函数fun,其功能是:求出该学生的平均分,并放人记录的ave成员中。

例如,学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,则他的平均分应为78.875。注意:部分源程序在文件PROGl.C中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun部位中填入你编写的若干语句。

四、2.程序修改题(10题)31.下列给定程序中,函数fun()的功能是计算并输出high以内的素数之和。high由主函数传给fun()函数。

例如:若high的值为100,则函数的返回值为1060。

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

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

[试题源程序]

#include<conio.h>

#include<stdio.h>

#include<math.h>

intfun(inthigh)

{

intsum=0,n=0,j,yes;

while(high>=2)

{

yes=1;

for(j=2;j<=high/2;j++)

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

ifhigh%j==0

{

yes=0;

break;

}

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

if(yes==0)

{

sum+=high;

n++;

}

high--;

}

returnsum;

}

main()

{

clrscr();

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

}

32.给定程序MODll.C中函数fun的功能是:计算n的5次方的值(规定n的值大于2、小于8),通过形参指针传回主函数;并计算该值的个位、十位、百位上数字之和作为函数值返回。

例如,7的5次方是16807,其低3位数的和值是15。

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

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

33.以下程序可把输入的十进制数以十六进制数的形式输出。

请在横线上填上适当的内容并把横线删除,使它能得出正确的结果。

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

试题程序;

main()

{

charb[17]={"0123456789ABCDEF"};

intc[64],d,i=0,base=16;

longn;

printf("Enteranumber:\n");

scanf("%ld",&n);

do{

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

c[i]=______;i++;n=n/base;}

while(n!=0);

printf("Transmitenewbase:\n");

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

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

{d=c[i];printf("%c",b______);}

printf("\n");

}

34.给定程序中,函数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);

}

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

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

36.下列给定的程序中,函数hn()的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。

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

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

试题程序:

#include<stdio.h>

#include<math.h>

voidfun(inta,int*b,int*c)

{inti,j,d,y;

for(i=3;i<=a/2;i=i+2)

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

{y=0;

for(j=2;j<=sqrt((double)i);j++)

if(i%j==0)y=0;

if(y==1)

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

{d=i-a;

for(j-2;j<=sqrt((double)d);

j++)

if(d%j==0)y=0;

if(y=-1)

{*b=i;*c=d;}

}

}

}

main()

{inta,b,c;

do

{printf("\nInputa:");

scanf("%d",&a);}

while(a%2);

fun(a,&b,&c);

printf("\n\n%d=%d+%d\n",a,b,c);

}

37.下列给定的程序中,函数fun()的功能是:用选择法对数组中的n个元素按从大到小的顺序进行排序。请改正程序中的错误,使它能得到正确结果。

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

试题程序:

#include<stdio.h>

#defineN20

voidfun(inta[],intn)

{

inti,j,t,p;

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

for(j=0;j<n-1;j++);

{

p=j;

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

if(a[i)>a[p])

p=i;

t=a[p];

a[p]=a[i];

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

a[p]=t;

}

}

main()

{

inta[N]={11,32,-5,2,14},i,m=5;

printf(“排序前的数据:”);

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

printf(“%d”,a[i]);

printf(“\n”);

fun(a,m);

printf(“排序后的顺序:”);

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

printf(“%d”,a[i]);

printf(“\n”);

}

38.给定程序MODll.C中fun函数的功能是:求出以下分数序列的前n项之和。

和值通过函数值返回main函数。

例如,若n=5,则应输出:8.391667。

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

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

39.下列给定程序中,函数fun()的功能是:从3个红球,5个白球,6个黑球中任意取出8个作为一组,进行输出。在每组中,可以没有黑球,但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是15。程序中i的值代表红球数,j的值代表白球数,k的值代表黑球数。

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

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

试题程序:

#include<stdio.h>

intfun()

{inti,j,k,sum=0;

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

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

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

{for(j=1;j<=5;j++)

{k=8-i-j;

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

if(k>=1&&k<=6)

{sum=sum+1;

printf("red:%4dwhite:%4d

black:%4d\n",i,j,k);

}

)

}

returnsum;

}

main()

{intsum;

sum=fun();

printf("sum=%4d\n\n",sum);

}

40.下列给定程序中,函数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));

}

五、程序改错题(2题)41.下列给定程序中,函数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);

}42.下列给定程序中,函数proc的功能是:先将字符串s中的字符按顺序存放到t中,然后把S中的字符按正序连接到t的后面。例如,当s中的字符串为WXYZ时,则t中的字符串应为WXYZWXYZ。

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

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

试题程序:

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidproc(char*s,char*t)

{

inti,s1;

s1=strlen(s);

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

//****found****

t[i]=s[s1];

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

t[s1+i]一s[i];

t[2*s1]=\O0;

}

voidmain

{

chars[100],t[100];

system("CLS");

print{("\nPleaseenterstrings:");

scanf("%s",s);

proc(s,t);

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

}六、操作题(2题)43.使用VC++打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun()的功能是求出s所指字符串中最后一次出现的t所指字符串的地址,并将此地址通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。例如,当字符串中的内容为“abcdabfabcdx”,t中内容为“ab”时,输出结果应是“abcdx”。当字符串中的内容为“abcdabfabcdx”,t中内容为“abd”时,则程序输出未找到信息“Notfound!”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdlib.h>#include<stdio.h>#include<conio.h>#include<string.h>char*fun(char*s,char*t){ char*p,*r,*a;/*********found*********/ a=Null; while(*s) { p=s;r=t; while(*r)/*********found*********/ if(r==p) {r++;p++;} elsebreak; if(*r=='\0')a=s; s++;} returna;}voidmain(){ chars[l00],t[100],*p; system(“CLS”); printf(“\nPleaseenterstrings:”); scanf(“%s”,s); printf(“\nPleaseentersubstringt:”); scanf(“%s”,t); p=fun(s,t); if(p) printf(“\nTheresultis:%s\n”,p); else printf(“\nNotfound!\n”);}

44.下列给定程序中,函数fun()的功能是:按顺序给s所指数组中的元素赋予从2开始的偶数,然后再按顺序对每5个元素求一个平均值,并将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元素求平均值。

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

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

试题程序:

#include<stdio.h>

#defineSIZE20

fun(double*s,double*w)

{intk,i;doublesum;

for(k=2,i=0;i<SIZE;i++)

{s[i]=k;k+=2;}

sum=0.0;

for(k=0,i=0;i<SIZE;i++)

{sum+=s[i];

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

if(i+1%5==0)

{w[k]=sum/5;Sum=0;k++;}

}

returnk;

}

main()

{doublea[SIZE],b[SIZE/5];

inti,k;

k=fun(a/b);

printf("Theoriginaldata:\n");

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

{

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

printf("%4.0f"/a[i]);

}

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

for(i=0;i<k;i++)printf("%6.2f",b[i]);

printf("\n\n");

}

参考答案

1.ex或structstex或structst解析:求一个变量所占的存储单元数,用sizeof函数,参数为该变量名或其变量类型。

2.1515解析:程序的功能是求1、2、3、4、5的和即15。

3.(y%4==0)&&(y%100!=0)||(y%400==0)(y%4==0)&&(y%100!=0)||(y%400==0)解析:考查逻辑表达。年号能被4整除(y%4==0)但不能被100整除(y%100!=0),两者是与的关系,年号能被400整除即y%400==0,与前两项是或的关系。

4.77解析:在程序执行时,static变量仅初始化一次,下次使用时将使用上次保存的值。

5.0240480,2,4\r\n0,4,8解析:本题主要考查了for循环语句的使用以及静态局部变量的特点。

6.strlen(str)-1strlen(str)-1解析:程序中的for循环就是用来完成串反序的,所以应该对循环的条件进行初始化,所以在[18]应该填入strlen(str)-1。注意,在串反序的时候,不应该把串结束符‘\\0’也反序。

7.x+8sin(x)x+8,sin(x)解析:考查考生对函数调用相关知识的了解。用x+8代替函数fun(doublex)中形式参数x;用sin(x)代替函数fun(doublex)中形式参数x。

8.1-41-4解析:题目中首先让x=5,然后进入do-while循环体,输出x-4的值1,此时x为1,表达式!(--x)的值为!(0)为真(此时x变为0),所以再次执行循环体,输出x-4的值-4,此时x为-4,表达式!(--x)的值为!(—5)为假,退出循环。故输出结果是1-4。

9.b[i][0]b[i][0]解析:因为要将a的最后一行放在b的第0列中,【】应填b的第0列的元素。

10.30x30x解析:本题的参数传递属于值传递,所以被调用函数内不能改变调用函数中的数据。

11.C

12.C

13.C解析:主函数main()定义了指向字符串的指针和一个字符数组,接着调用fun(s,t)函数,进行实参向形参传递,函数fun()第一个while语句判断*a中的值为“*”时继续扫描,当遇到不是“*”时结束,接着第二个while循环语句,将*a中从“a”开始的后续所有字符都赋予*b,也就是t[80]中的内容为“a*b****”,所以此题的运行结果为选项C)。

14.C

15.B

16.D

17.A本题中使用了函数的调用,由funl函数中的while循环可知,循环的作用是为了把q所指向的内容增加1,而从主函数传到函数时是从下标为3开始传,因此当调用函数执行完后,传过去的字符串为hsbn,前面不变。

18.AC语言中,文件打开方式“a+”表示打开一个文本文件,从文件开始位置读,在文件尾部添加数据,如果指定的文件不存在,系统将使用调用fopen时指定的文件名创建一个新的文件;如果指定的文件存在,那么文件原有内容将被保存,新的数据追加到原有文件之后。故本题答案为A选项。

19.C解析:位运算符“|”的作用是按位或,即两个二进制数的相应位中只要有一个为1,该位的结果值为1。最后以字符型输出,98对应的字符“b”

20.D调用缸函数后,实参数组名sl传给形参指针P,P也指向数组sl。m函数的功能是遍历字符数组中的所有字符,如果某一个字符是空格并且前一个字符是小写字母的话,就把前一个字符转换为大写。程序中语句P[i一1]=P[i—1]一ga’+-A‘;即P[i一1]=P[i一1]一32,意思是将P[i一1]中的字符转换为大写。因此D选项正确。

21.\n\tvoidproc(char*str)\n\n\n\t{\n\n\n\tchar*p=str:\n\n\n\twhile(*p==*)p++;//通过P的移动来达\n\n\n\t到使P指向第一个不是*号的字符\n\n\n\tfor(;*p!=\0

;p++,str++)//把从第一个\n\n\n\t不是*号的字符放到a中‘\n\n\n\t*str=*P:\n\n\n\t*str=\0

;//最后用\0作为字符串结束标志\n\n\n\t}\n\n\n\t【解析】题目中要求将字符串中的前导*号全部删除首先将指针p移动到第一个不是*的字符,将指针P之后的字符放入原来的字符串中,并为新的字符串添加结束符。\fun(intt){intf0=0,f1=1,f;do{/*根据斐波那契数列的定义求数值*/f=f0+f1;f0=f1;f1=f;}while(f<t);/*如果求的数值小于t则继续*/</t);returnf;}根据斐波那契数列定义不难发现,该数列最终的结果由两个数列之和组成,所以可以在循环内部始终把f看成前两项之和,而f0始终代表第n-2项,f1代表第n-1项。退出循环时得到的数f,就是大于指定数的最小的数。

23.\nfloataverage(floatarray[],intn)

\n{intI;

\nfloataver,sum=array[0];

\nfor(I=1;Isum=sum+array[I];

\naver=sum/n;

\nreturn(aver);}

\nmain

\n{floatave,score[10];

\nintI;

\nfor(I=0;I<10;I++)

\nscanf('%f',&score[I]);

\nave=average(score,10);

\nprintf('%f\\n',ave);}

\n

24.

【解析】要求出数组中最小的数,需要比较数组中的每一个元素。将最小的元素的下标存放在变量k中,通过形参返回到主函数中。

25.voidproc(chararr[M][N],char*b)

\n{

\ninti,j,k=0;

\nfor(i=0;i<M;i++)//i表示其行下标

\nfor(j=0;arr[i][j]!=\0;j++)//由于每行的个数不等,因此用a[i][j]!=\0来作为循环结束

\n的条件

\nb[k++]=arr[i][j];//把二维数组中的元素放到b的一维数组中,

\nb[k]=\0;//最后把b赋\0作为字符串结束的标志

\n)

\n【解析】字符串数组中每一行都是一个一个完整的字符串,其结束标志为\0。因此通过字符串的结束标志来判断每一个字符串是否结束,将字符串数组中的所有字符串均赋值新的一维数组b来完成字符串的合并。

\n

26.

【解析】要找到所有学生中成绩低于平均分数的人数,首先需要算出所有学生的平均成绩。然后将所有学生的成绩与平均成绩相比较。将低于平均分数学生的记录存放在新的数组中,并将低于平均分数的学生数返回给主函数。

27.\n\tcharch;

\ninti,m,n;

\ni=0:

\nm=n=strlen(str)-1;//求字符串str长度

\nwhile(i<(n+1)/2)//循环逆置交换

\n{

\nch=str[i];

\nstr[i]=str[m];

\nstr[m]=ch:

\ni++;

\nm--;

\n}

\n【解析】在fun函数中,首先求行字符串的长度,然后通过循环进行字符交换。要注意的是,如果字符串长度是奇数,则最中间的元素在逆置前后的位置是没有改变的。\n

28.

【解析】首先指定第一个字符串为长度最小的字符串,然后在循环过程中将其与其他的所有串的长度进行比较,求出最小的串。设置一个指针变量min,使它的初值为第一个字符串,再使其他的所有串的长度与min的长度进行比较,若其他字符串的长度小于min.则将其他字符串的首地址赋值给min。最后使用返回语句,返回最短长度min的字符串的地址。

29.\n#include”stdio.h”

\nintfun(inta)

\n{intI;

\nif(a==2)return1;I=2;

\nwhile((a%I)!=0I<=sqrt((float)a))

\nI++;

\nif(a%I==0)

\n{printf(“%disnotaprime!”,a);

\nreturn0;}

\nprintf(“%disaprime!”,a);

\nreturn1;}

\nmain

\n{intx;

\nprintf(“\\npleaseenteranumber:”);

\nscanf(“%d”,&x);

\nprintf(“%d\\n”,fun(x));}

\n30.

【考点分析】

本题考查:结构体类型成员运算,指向结构体类型的指针变量作函数参数。

【解题思路】

本题考查自定义形参的相关知识点,程序流程是这样的:在fun函数中求出平均分后,返回到主函数时平均分也要带回,所以只能定义一个指针类型的形参STREC*a,此时,引用成员的方式可以使用指向运算符,即a一>ave和a一>s[i],当然也可用(*a).ave和(*a).s[i]。

31.(1)错误:ifhigh%j==0正确:if(high%j==0)(2)错误:if(yes==0)正确:if(yes)(1)错误:ifhigh%j==0\r\n正确:if(high%j==0)\r\n(2)错误:if(yes==0)\r\n正确:if(yes)解析:fun函数的功能是:用while循环查找high以内的素数;用for循环判断一个数是否为素数;用变量n记录找到的素数的个数:用return返回素数之和sum。

错误1:这个错误比较明显,if语句的两侧要加括号。

错误2:yes为1时,说明被判断的数是素数,要累加到sum。

32.(1)d=1;s=0;(2)d=d/10;(1)d=1;s=0;(2)d=d/10;解析:本题中函数的功能是计算n的5次方的值(规定n的值大于2、小于8),通过形参指针传回主函数;并计算该值的个位、十位、百位上数字之和作为函数值返回。本题解题过程首先是求5次方,然后对结果进行截取以及求和。

33.(1)错误:缺少语句正确:应填入n%base或%16(2)错误:缺少语句正确:应填入[d](1)错误:缺少语句正确:应填入n%base或%16\r\n(2)错误:缺少语句正确:应填入[d]解析:在该程序中,字符数组b存储十六进制的16个数字符,整型数组c存储译出的十六进制数的各位数值。从整数n译出它的各位十六进制数值,需采用除16取余的方法,即求n除16的余,得到它的十六进制的个位数,接着将n除以16。在n不等于0的情况下循环,能顺序求出n的十六进制的个位数、十位数、百位数等。程序中变量base已预置16,所以在第1个空框处可填代码n%base或n%16。当n的十六进制数的个位、十位、百位等依次存放于数组c中后,就从最高位至最低位,参照数组c[i]的内容d(以其内容为下标),取十六进制数字符表中的字符b[d]输出。所以在第2个空框处可填入代码[d]。

34.错误:intfun(intxy)正确:intfun(intxinty)错误:intfun(intx,y)正确:intfun(intx,inty)解析:C语言中规定,在函数的形参中不允许出现intx,y之类的语句,必须指定每一个参数的类型,所以在做类似题目时一定要谨慎。

35.(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;解析:本题中函数的功能是交换主函数中两个变量的值。利用临时变量存放临时交换值,实现两个变量的交换。

36.(1)错误:y=0;正确:y=1:(2)错误:d=i-a;正确:d=a-i;(1)错误:y=0;正确:y=1:\r\n(2)错误:d=i-a;正确:d=a-i;解析:这道题是历年的考题经典。也就是验证哥德巴赫猜想之变体,原来的思路是(任意一个大于等于6的偶数都可以分解为两个素数之和)n为大于等于6的任一偶数,可分解为n1和n2两个数,分别检查n1和n2是否为素数,如都是,则为一组解。如n1不是素数,就不必再检查n2是

温馨提示

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

评论

0/150

提交评论