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

下载本文档

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

文档简介

2021年内蒙古自治区乌兰察布市全国计算机等级考试C语言程序设计真题(含答案)学校:________班级:________姓名:________考号:________

一、2.填空题(10题)1.以下程序段用于构成一个简单的单向链表。请填空。

struetSTRU

{intx,y;

floatrate;

【】p;

}a,b;

a.x=0;a.y=0;a.rate=0;a.p=&b;

b.x=0;b.y=0;b.rate=0;b.p=NULL;

2.若有如下定义,则该数组的第一维大小为【】。

intb[][4]={1,2,3,4,5,6,7,8,9}

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

charstr口="ABCD",*p=str;

printf("%d\n",*(p+3));

4.表示条件;10<x<100或x<0的C语言表达式是【】。

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

#include<stdio.h>

main()

{charb[]="Helloyou";

b[5]=0;

printf("%s\n",b);

}

6.若有以下程序:

main()

{inta[4][4]={{1,2,-3,-4},{0,-12,-13,14},{-21,23,0,-24},{-31,32,-33,0}};

inti,j,s=0;

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

{for(j=0;j<4;j++)

{if(a[i][j]<0)

continue;

if(a[i][j]==0)

break;

s+=a[i][j];

}

}

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

}

执行后的输出结果是【】。

7.在面向对象方法中,允许作用于某个对象上的操作称为【】。

8.以下程序运行后的输出结果是【】。

main()

{

chara[]="Language",b[]"Programe";

char*p1,*p2;

intk;

p1=a,p2=b;

for(k=0;k<=7;k++)

if(*(p1+k==*(p2+k))printf("%c",*(p1+k));

}

9.已定义charch='$';inti=1,j;,执行j!=ch&&i++以后,i的值为______。

10.在E-R图中,矩形表示【】。

二、单选题(10题)11.设a,b,c,d,m和n均为int型变量,且a=5,b=6,c=7,d=m=2,n=2,则逻辑表达式(m=a>b)&&(n=c>d)运算后,n的值为()

A.0B.1C.2D.3

12.有以下程序:main{inti,j;for(j=10;j<11;j++){for(i=9;i<j;i++)if(!(j%i))break;if(i==j-1)printf("%d",j);}}输出结果是()。A.11B.10C.9D.1011

13.已知a、b、c为整型变量,若从键盘输入5<空格>6<空格>7<回车>,使a的值为5,b的值为6,c的值为7,则下列选项中正确的输入语句是()。

A.scanf("%3d%3d%3d",a,b,C);

B.scanf("%d%d%d",a,b,C);

C.scanf("%d%d%d",&a,&b,&c);

D.scanf("%d%d%d",&a,&b,&c);

14.对线性表进行折半查找时,必须要求线性表()。

A.顺序方式存储B.链式方式存储C.以顺序方式存储,且结点按关键字有序排列D.以链式方式存储,且结点按关键字有序排列

15.任何一个无向图的最小生成树()。

A.只有一棵B.有一棵或多棵C.一定有多棵D.可能不存在

16.公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员。则实体部门和职员间的联系是()。

A.1:m联系B.m:n联系C.1:1联系D.m:1联系

17.对一个有A,B,C,D随机组成的序列进行哈夫曼编码,据统计,各个元素的概率分别为:P(A)=0.4,P(B)=0.35,P(C)=0.2,P(D)=0.05,请问该编码的平均期望编码长度为()bits。

A.1.45B.1.74C.1.85D.1.92

18.若有以下定义,则对a数组元素地址的正确引用是()。

inta[5],*p=a;A.A.p5B.*a1C.&a1D.&a[0]

19.有以下程序:#include<stdio.h>intshow(char*str){while(*str){putchar(*str+1);str++;}return*str+1;}main(){printf(“%d\n”,show(“ABCD”));}程序运行后的输出结果是()。

A.ABCD0B.BCDE0C.BCDE1D.ABCD1

20.以下关于简单程序设计的步骤和顺序的说法中正确的是()。

A.确定算法后,整理并写出文档,最后进行编码和上机调试

B.首先确定数据结构,然后确定算法,再编码,并上机调试,最后整理文档

C.先编码和上机调试,在编码过程中确定算法和数据结构,最后整理文档

D.先写好文档,再根据文档进行编码和上机调试,最后确定算法和数据结构

三、程序设计题(10题)21.请编一个函数voidproc(intttEM][N],intpp[N]),tt指向一个M行N列的二维数组,求出二维数组每行中最大元素,并依次放入pp所指的一维数组中。二维数组中的数已在主函数中给出。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineM3

#defineN4

voidproc(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");}

22.某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出,请编写函数,其功能是:求出该学生的平均分,并放入记录的ave成员中。例如,学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,则他的平均分应为78.875。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun部位中填入你编写的若干语句。试题程序:#include<stdio.h>#defineN8typedefstruct{charnum[10];doubles[N];doubleave;}STREC;voldfun(STREC*a){}voidmainSTRECs={"GA005",85.5,76,69.5,85,91,72,64.5,87.5};inti;fun(&s);printf("The%ssstudentdata:\n",s.num);for(i=0;i<N;i++)printf("%4.1fkn",s.s[i]);printf("\nknave=%7.3fkn",s.aVe);printf("\n");}

23.编写函数fun(),其功能是:求出1~1000中能被7或11整除,但不能同时被7和ll整除的所有整数,并将其放在a所指的数组中,通过n返回这些数的个数。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。试题程序:

24.使用VC++2010打开触文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun(),其功能是移动字符串中的内容,移动的规则是把第1~m个字符,移动到字符串的最后,把第m+1到最后的字符移动到于符串的前面。例如,字符串中原有的内容为“ABCDEFGHIJK”,m的值为3,移动后,字符串中的内容应该是“DEFGHUKABC”。注意:部分源程序在文件prog1.c中。请勿改动main()函数和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:

25.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,规定输入的字符串中只包含字母和*号。请编写函数其功能是使字符串的前导*号不得多于n个,若多于n个,则删除多余的*号;若少于或等于n个,则不做处理。字符串中间和尾部的*号不删除。例如,字符串中的内容为“*******A*BC*DEF*G****”,若n的值为4,删除后,字符串中的内容应当是“****A*BC*DEF*G****”;若n的值为8,则字符串中的内容仍为“*******A*BC*DEF*G****”。n的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#include<conio.h>voidfun(char*a,intn){}voidmain(){ chars[81];intn; printf(“Enterastring:\n”); gets(s); printf(“Entern:”); scanf(“%d”,&n); fun(s,n); printf(“Thestringafterdeleted:\n”); puts(s);}

26.编写函数fun,其功能是:将所有大于1小于整数m的非素数存人xx所指数组中,非素数的个数通过k返回。

例如,若输入l7,则应输出:46891012141516。

注意:部分源程序在文件PROGl.C中。

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

27.使用VC++2010打开考生文件夹析下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写一个函数fun(),它的功能是将ss所指字符串中所有下标为奇数的字母转换为大写字母(若该位置上不是字母,则不转换)。例如,若输入“abc4Efg”,则应输出“aBc4EFg”。注意:部分源程序在文件prog1.c中。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:

28.请编写一个函数proc(),它的功能是:求出一个4×N整型二维数组中最大元素的值,并将此值返回调用函数。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。试题程序:

29.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数其功能是移动一维数组中的内容,若数组中有n个整数,要求把下标为0~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、4。注意:部分源程序给出如下。请勿改动主函数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<=""p=""> printf(“%3d”,a[i]); printf(“\n\nEnterp:”); scanf(“%d”,&p); fun(a,p,n); printf(“\nThedataaftermoving:\n”); for(i=0;i<=""p=""> printf(“%3d”,a[i]); printf(“\n\n”);}

30.规定输入的字符串中只包含字母和*号。编写函数fun,其功能是:删除字符串中所有的*号。编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为“****A*BC*DEF*G****”,删除后,字符串中的内容应当是“ABCDEFG”。注意:部分源程序给出如下。请勿改动maini)函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>voidfun(chara){voidmain{chars[81];print{("Enterastring:\n");gets(s):fun(S);printf("Thestringafterdeleted:\n");puts(s);}四、2.程序修改题(10题)31.给定程序中,函数fun()的功能是:使数组中的元素的值缩小5倍。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

floatm[10];

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

intfun(void)

{

intj;

printf("Insubfuncaftercalling\n");

for(j=O;j<lO;j++)

{

;

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

print("%f",m[j]%5);

}

}

main()

{

inti;

printf("Inmainbeforecalling\n");

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

{

m[i]=i+20;

printf("%f",m[i]);

}

fun();

printf("\nInmainaftercalling\n");

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

printf("%f",m[i]/5);

}

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

}

33.已知一个数列从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));

}

34.下列给定程序中,函数fun()的功能是:将字符串p中所有字符复制到字符串b中,要求每复制3个字符之后插入一个空格。例如,在调用fun()函数之前给字符串a输入ABCDEFGHIJK,调用函数之后,字符串b中的内容则为ABCDEFGHIJK。

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

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

试题程序:

#include<stdio.h>

voidfun(char*p,char*b)

{inti,k=0;

while(*p)

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

{i=l;

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

while(i<3||*P)

{

b[k]=*p;

k++;p++;i++;

}

if(*p)

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

{b[k]='';}

}

b[k]='\0';

}

main()

{chara[80],b[80];

printf("Enterastring:");gets(a);

printf("Theoriginalstring:");

puts(a);

fun(a,b);

printf("\nThestringafterinsert

space:");puts(b);printf("\n\n");

}

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

}

36.下列给定程序中,函数fun()的功能是:用递归算法计算斐波拉契级数列中第n项的值。从第一项起,斐波`拉契级数序列为1,1,2,3,5,8,13,21,……例如,若给n输入7,

该项的斐波拉契级数值为13。

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

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

试题程序:

#include<stdio.h>

longfun(intg)

{

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

switch(g);

{case0:return0;

switch(g)

case1;case2:return1;

}

return(fun(g-1)+fun(g-2));

}

main()

{

longfib;intn;

printf("Inputn:");scanf("%d",&n);

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

fib=fun(n);

printf("fib=%d\D\n",fib);

}

37.下列给定程序中,函数fun()的功能是:用冒泡法对6个字符串按由小到大的顺序进行排序。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#defineMAXLINE20

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

fun(char*pstr[6])

{inti,j;

char*p;

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

{for(j=i+l;j<6;j++)

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

{if(strcmp(*(pstr+i),pstr+j)>0)

{

p=*(pstr+i);

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

*(pstr+i)-pstr+j;

*(pstr+j)=p;

}

}

}

}

main()

{inti;

char*pstr[6],str[6][MAXLINE];

clrscr();

for(i=0;i<6;i++)pstr[i]=str[i];

printf("\nEnter6string(1stringateach

line):\n");

for(i=0;i<6;i++)scanf("%s",pstr[i]);

fun(pstr);

printf("Thestringsaftersorting:\n");

for(i=0;i<6;i++)printf("%s\n",pstr[i]);

}

38.给定程序MODll.C中函数fun的功能是:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。

例如,当s中的数为:87653142时,t中的数为:7531。

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

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

39.下列给定程序中,函数fun()的功能是:用下面的公式求π的近似值,直到最后一项的绝对值小于指定的数(参数num)为止。

π/4≈1-1/3+1/5-1/7+…

例如,程序运行后,输入0.0001,则程序输出3.1414。

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

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

试题程序:

#include<math.h>

#include<stdio.h>

floatfun(floatnum)

{ints;

floatn,t,pi;

t=1;pi=0;n=1;s=1;

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

while(t>=num)

{

pi=pi+t;

n=n+2;

s=-s;

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

t=s%n;

}

pi=pi*4;

returnpi;

}

main()

{floatn1,n2;

clrscr();

printf("Enterafloatnumber:");

scanf("%f",&n1);

n2=fun(n1);

printf("%6.4f\n",n2);

}

40.给定程序MODll.C中函数fun的功能是:判断一个整数是否是素数,若是返回1,否则返回0。

在mai()函数中,若fun返回1输出YES,若fun返回0输出NO!。

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

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

五、程序改错题(2题)41.下列给定的程序中,proc()函数的功能是:将str所指字符串中每个单词的最后一个字母改成大写(这里的“单词”是指有空格隔开的字符串)。

例如,若输人:Howdoyoudo,则输出:HoWdOyoUd0。

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

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

试题程序:

42.下列给定程序中,函数fun()的功能是:求两个非零正整数的最大公约数,并作为函数值返回。例如,若num1和num2分别为49和21,则输出的最大公约数为7;若num1和num2分别为27和81,则输出的最大公约数为27。请改正程序中的错误,使它能得出正确结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构!试题程序:

六、操作题(2题)43.设有如下宏定义

#defineMYSWAP(z,x,y){z=x;x=Y;Y=z;}

以下程序段通过宏调用实现变量a、b内容的交换,请填空。

floata=5,b=16,c;

MYSWAP(【】,a,b);

44.fun1函数的功能是将3个整数按由大到小的顺序调整后依次放入a、b、c3个变量中,a中放最大数,fun2函数的功能是交换两个变量中的值。补足所缺语句。

fun2(int*x,int*y)

{intt;

t=*x;*x=*y;*y=t;

}

fun1(int*p1,int*p2,int*p3)

{if(*p3>*p2)fun2(*P2,*p3);

if(*p1<*p3)fun2(______);

if(*p1<*p2)fun2(______);

}

main()

{inta,b,c;

scanf("%d%d%d",&a,&b,&c);

fun1(&a,&b,&c);

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

}

参考答案

1.structSTRU*

2.3

3.6868解析:本题考查如何用指针引用数组元素。本题先定义了一个指向字符型数组str的指针p,指针p指向数组str的首地址,p+3将指针指向str[3],*(p+3)指的是字符“D”,输出时是以“%d,格式输出的,即输出其相应ASCII码值68。

4.(x>10&&x<100)||x<0

5.HelloHello解析:语句b[5]=0;相当于语句b[5]='\\0';且'\\0'为字符串结束标志,输出时遇到'\\0'就停止输出。

6.5858解析:for循环语句中continue语句的作用是当数组元素值小于0时,结束本次j循环,break语句的作用是当数组元素值等于0时,结束j循环,所以for循环语句的功能是计算数组元素a[0][0]、a[0][1]、a[2][1]和a[3][1]之和,即s=1+2+23+32=58。

7.方法方法解析:在面向对象方法中,方法是指允许作用于某个对象上的各种操作。

8.gaegae解析:本题定义了两个字符串数组a[],b[],字符型指针变量p1和p2,且分别指向字符串数组a和b,执行for循环,当if(*p1+k)=*(p2+k))条件为真,执打输出*(p1+k)对应的字符。即当k=0时,*(p1+k)对应的字符串数组a中的字符L,*(p2+k)对应的字符串数组b中的字符P,因此if(*(p1+k)=*(p2+k))条件为假,不执行printf语句,依此类推,将字符串数组a和b中对应位置上的字符一一比较,如果对应位置上的字符相同,则输出该字符。

9.11解析:在执行逻辑表达式“j=!ch&&i++”时,首先判断j=!ch的值,因为“ch='$'”不为0,所以“j=!ch=0”,编译系统便不再计算表达式“i++”的值,i的值不变,仍为1。

10.实体实体解析:E-R模型中,有3个基本的抽象概念:实体、联系和属性。在E-R图中,用矩形框表示实体,菱形框表示联系,椭圆形框表示属性。

11.C

12.B本题考多循环的使用,当j=10,i=9时,循环成立,第一个if条件为假,第二个if条件i==j-1成立,则输出j的值为10,接者执行i++后,i为10;当i为10,for循环不成立,退出内层循环,此时执行j++后,j为11,循环不成立,退出循环。

13.C解析:通过scanf()函数从键盘读入数据时,接收参数的使用变量的地址值,所以选项A和B是错误的。选项D要求输入时以逗号间隔,故按题目要求的输入方式不能正确读取到3个数,也是错误的。所以正确答案是C。

14.C

15.B

16.A部门到职员是一对多的,职员到部门是多对一的,因此,实体部门和职员间的联系是l:m联系。

17.C

18.D本题考查如何引用数组元素的地址。选项A)中,p5引用的是af51的地址,而数组a只有5个元素,即a[0]、a[1]、a[2]、a[3]、a[4],所以引用错误;选项B)中,*a1指的是将数组a的第一个元素加1;选项C)中,这种引用方式错误;选项D)中,&a[0]引用的是数组的首地址。

19.C函数putchar每次输出一个字符。表达式“*str+1”将对字符加1,因此字符串“ABCD”的每个字符都加1,字符串结束标识‘\\0’也会加1,输出1,结果为BCDE1。故本题答案为C选项。

20.B\n选项C和D可直接排除,程序是数据结构和算法的组合体,所以是先选择数据结构,然后继而选择相对应的算法,编码并上机调试,最后整理文档。

\n21.\r\n\tvoidproc(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中,返回到主函数当中。22.voidfun(STREC*a){inti;a->ave=0.0;for(i=0;i<N;i++)a->ave=a->ave+a->s[i];/*求各门课程成绩的总和*/a->ave=a->ave/N;/*求平均分*/}【解析】本题考查的是指向结构体类型的指针变量做参数和结构体类型成员的运算。fun函数中求出平均成绩,要带回主函数则必须定义一个指针类型的形参STREC*a,同时引用成员使用指向运算符,a->ave和a->s[i]。

23.

【解析】根据题意,所写函数要用for循环实现对整数1~1000的遍历;通过if语句找出能被7或11整除,但不能同时被7和11整除的所有整数,因为同时被7和11整除的整数一定能被77整除,且不能被77整除的数不一定就是能被7或11整除,可得出表达式“(i%7==0||i%11==O)&&i%77!=0”;再按题目要求,将找出来的整数放在a所指的数组中,通过n返回这些数的个数即可。

24.Voidfun(char*w,intm)chart;for(i=1;i<=m;i++)/*进行m次的循环左移*/{t=w[o];for(j=1;w[j]!='\0';j++)/*从第2个字符开始以后的每个字符都依次前移一个字符*/w[j-l]=w[j];9w[j-l]=t;/*将第1个字符放到最后一个字符中*/10}}本题应采用“循环左移”的算法。外层循环用于控制移动的字符的个数,即需进行多少次循环。内层循环的作用是将第2个字符以后的每个字符依次前移一个位置,最后将第1个字符放到最后一个字符中。25.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]=‘\0’; /*在字符串最后加上字符串结束标志*/ }}字符串中前导*号不能多于n个,多余的应删除。首先需要通过while循环统计字符串前导*号的个数,然后通过if条件语句完成前导*号的个数和n的比较,如果前导*号多于n个,则需要把n个*号和其余字符重新保留。26.【参考答案】

【考点分析】

本题考查:如何判断非素数;循环判断结构;数组的引用。

【解题思路】

题目要求将l~m之间的非素数存人数组中,应使用循环判断结构。循环语句用来遍历1~m之间的每个数,判断语句用来判断该数是否素数,若不是素数,则将其存人数组中。这道题目是考查一个数是否为素数的简单延伸,只要掌握了判断素数的方法,问题便能顺利解决。

【解题宝典】

判定一个数是否为素数,即该数除了能被l和它本身外,不能被任何数整除。

代码实现为:

此语句需要熟记,很多判断素数的题目也可通过此法解决。27.1voidfun(char*ss)2{3inti;4for(i=0;ss[i]!='\\0';i++)/*将ss所指字符串中所有下标为奇数的字母转换为大写字母*/5if(i%2==1&&ss[i]>='a'&&ss[i]<='z')6ss[i]=ss[i]-32;7}本题要求将给定字符串ss中下标为奇数的字母转换为大写字母。需要先判断下标为奇数的字母是否是小写字母,如果是再通过其转换方法进行转换。从C语言的学习中知道,只要将小写字母减去32即转换成大写宇母,将大写字母加上32即换转成小写字母。本程序用if语句实现转换功能。

28.

【解析】要求出二维数组中最大元素的值,需要比较二维数组中每一个元素的值。首先,定义变量max用来存放最大元素的值,将其初始化为二维数组中第一个元素的值。然后将其与后面的每一个元素进行比较,将二维数组中最大元素的值放到变量max当中,并将其返回给主函数。

29.voidfun(int*w,intp,intn){ intX,j,ch; for(x=0;x<=p;x++) { ch=w[0]; for(j=1;j /*通过for循环语句,将p+1~n-1(含n-1)之间的数组元素依次向前移动p+1个存储单元*/ { w[j-1]=w[j]; } w[n-1]=ch; /*将下标为0~p的数组元素逐一赋给数组w[n-1]*/ }}本题要求把下标为0~p(含p,p小于等于n-1)的数组元素平移到数组的最后。可以根据输入的p值,通过for循环语句,将p+1~n-1(含n-1)之间的数组元素依次向前移动p+1个存储单元,即w[j-1]=w[j];。同时将下标为0~p的数组元素逐一赋给数组w[n-1],也就是通过语句w[n-1]=ch;来实现此操作。30.voidfun(char*a){inti,j=0;for(i=0;a[i]!=\0;i++)if(a[i]!=*)a[j++]=a[i];//若不是要删除的字符*则保留a[j]=\0;//最后加上字符串结束符\0}【解析】此题是删除字符串中的星号。思路是通过for循环完成对字符串的遍历,通过if判断,找到不是“*”的字符,将其赋值到数组a中星号前的位置,“if(a[i]!=*)”“a[i++]=a[i]”,最后返回主函数将删除*后的字符串输出即可。

31.(1)错误:intfun(void)正确:voidfun(void)(2)错误:printf("%f"m[j]%5);正确:printf("%f"m[j]/5);(1)错误:intfun(void)正确:voidfun(void)\r\n(2)错误:printf('%f',m[j]%5);正确:printf('%f',m[j]/5);解析:错误1:函数fun()没有返回值,所以定义函数类型为void。错误2:此处考查的是除法运算符和取余运算符的区别。

32.(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。

33.(1)错误:fun(intn)正确:doublefun(intn)(2)错误:returnsum正确:returnsum;(1)错误:fun(intn)正确:doublefun(intn)\r\n(2)错误:returnsum正确:returnsum;解析:ANSI新标准允许使用这样一种方法对形参类型做说明,即在列出“整型表列”时,同时说明参数类型。如:

intmax(intx,inty)

{...}

相当于:

intmax(x,y)

intx,y;

{...}

又如:

floatfun(array,n)

intarray[10],n;

可以写成

floatfun(intarray[10],intn)

34.(1)错误:i=1;正确:i=0;(2)错误:while(i<3||*p)正确:while(i<3&&*p)(3)错误:b[k]='';正确:b[k++]='';(1)错误:i=1;正确:i=0;\r\n(2)错误:while(i<3||*p)正确:while(i<3&&*p)\r\n(3)错误:b[k]='';正确:b[k++]='';解析:该题考查字符串复制程序的构造方法,题中插入空格字符的定义条件是while(i<3||*p),当然要同时满足i<3和*p这两个

温馨提示

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

评论

0/150

提交评论