2021年黑龙江省双鸭山市全国计算机等级考试C语言程序设计真题(含答案)_第1页
2021年黑龙江省双鸭山市全国计算机等级考试C语言程序设计真题(含答案)_第2页
2021年黑龙江省双鸭山市全国计算机等级考试C语言程序设计真题(含答案)_第3页
2021年黑龙江省双鸭山市全国计算机等级考试C语言程序设计真题(含答案)_第4页
2021年黑龙江省双鸭山市全国计算机等级考试C语言程序设计真题(含答案)_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

2021年黑龙江省双鸭山市全国计算机等级考试C语言程序设计真题(含答案)学校:________班级:________姓名:________考号:________

一、2.填空题(10题)1.以下程序的输出结果是【】。

#include<stdio.h>

main()

{inti;

for(i='a';i<'f';i++,i++)printf("%c",i-'a'+'A');

printf("\n");

}

2.在链表的运算过程中,能够使空表与非空表的运算统一的结构是______。

3.下面程序的功能是输出数组s中最大元素的下标,请填空。

main()

{intk,p,s[]={1,-9,7,2,-10,3};

for(p=0,k=p;p<6;p++)

if(s[p]>s[k])【】

printf("%d\n",k);}

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

main()

{inty=9;

for(;y>0;y--)

if(y%3==0)

{printf("%d",--y);continue;}}

5.数据流图的类型有【】和事务型。

6.函数delete(s,i,n)是作用是从字符串s中删除从第i个字符开始的n个字符,请填空。

voiddelete(chars[],inti,intn)

{intj,k,length=0;

while(s[length])

【】;

-i;

j=i

}

if(【】)

{k=i+n;

if(i+n<=length)

while(k<length)

s[j++]=s[k++];

s[j]='\0';

}

7.有如下图所示的双链表结构,请根据图示完成结构体的定义:

structaa

{intdata;

【】}node;

8.用树型结构表示实体类型及实体间联系的数据模型称为【】。

9.以下程序的输出结果是______。

intfun(int*x,int*y)

{staticintm=4;

m=*X+*y;*x-=m;*y+=m;

returnm;

}

main()

{inta=2,b=6,n;

n=fun(&a,&B);printf("%d,",n);

n=fun(&a,&B);printf("%d\n",n);

}

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

main()

{inta=1,b=2,c=3;

if(c=A)printf("%d\n",C);

elseprintf("%d\n",B);

}

二、单选题(10题)11.在C语言中,char型数据在内存中的存储形式是()。

A.补码B.反码C.原码D.ASCII码

12.下列条件语句中,功能与其他语句不同的是()。

A.if(a)printf("%d\n",x);elseprintf("%d\n",y);

B.if(a==O)printf("%d\n",y);elseprintf("%d\n",x);

C.if(a!=0)printf("%d\n",x);elseprintf("%d\n",y);

D.if(a==0)printf("%d\n",x);elseprintf("%d\n",y);

13.在“文件包含,预处理语句的使用形式中,当#include后面的文件名用(双引号)括时,寻找被包含文件的方式是()。

A.直接按系统设定的标准方式搜索目录

B.先在源程序所在的目录搜索,如没找到,再按系统设定的标准方式搜索

C.仅仅搜索源程序所在目录

D.仅仅搜索当前目录

14.广告系统为了做地理位置定向,将IPV4分割为627672个区间,并标识了地理位置信息,区间之间无重叠,用二分查找将IP地址映射到地理位置信息,请问在最坏的情况下,需要查找多少次?()

A.17B.18C.19D.20

15.C程序的基本模块为()。

A.表达式B.标识符C.语句D.函数

16.链表不具有的特点是()。

A.插入、删除不需要移动元素B.可随机访问任一元素C.不必事先估计存储空间D.所需空间与线性长度成正比

17.执行下列程序后,输出的结果是()。

#include<stdio.h>

#defineS(X)X*X

voidmain()

{ihta=9,k=3,m=2;

a/=S(k+m)/S(k+m);

printf("%d",A);

}

A.1B.4C.9D.0

18.

读取二进制文件的函数调用形式为:fread(buffersize,count,fp);,其中buffer代表的是()。

A.一个文件指针,指向待读取的文件

B.一个整型变量,代表待读取的数据的字节数

C.一个内存块的首地址,代表读人数据存放的地址

D.一个内存块的字节数

19.有以下程序:#include<stdio.h>main(){inta=0,b=0,c=0,d=0;if(a=1)b=1;c=2;elsed=3;printf(“%d,%d,%d,%d\n”,a,b,c,d);}程序输出为()。

A.编译有错B.0,0,0,3C.1,1,2,0D.0,1,2,0

20.

三、程序设计题(10题)21.请编写函数fun,其功能是:找出2×M整型二维数组中最大元素的值,并将此值返回调用函数。

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

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

22.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun(),其功能是将一个数字字符串转换成与其面值相同的长整型整数。可调用strlen函数求字符串的长度。例如,在键盘输入字符串2345210,函数返回长整型整数2345210。注意:部分源程序存放在文件prog1.c中,请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()指定的部位填入所编写的若干语句。试题程序:

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

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

例如,学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,则他的平均分应为78.875。

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

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

试题程序:

#include<stdio.h>

#defineN8

typedefstruct

{

charnum[10];

doubles[N];

doubleave;

}STREC;

voldfun(STREC*a)

{

}

voidmain

STRECs={"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");

}

25.请编一个函数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);

}

26.请编写一个函数voidproc(intm,intk,intxxE3),该函数的功能是:将大于整数m且紧靠m的k个素数存入所指的数组中。例如,若输入206,则应输出232931374143。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。试题程序:

27.使用VC++2010打开考生文件夹析下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写程序,实现矩阵(3行、3列)的转置(即行列互换)。例如,若输入下面的矩阵:100200300400500600700800900则程序输出:100400700200500800300600900注意:部分源程序在文件prog1.c中。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:11#include<stdio.h>2#include<conio.h>3#include<stdlib.h>4voidfun(intarray[3][3])5{67}8voidmain()9{10FILE*wf;11inti,j;12intarray[3][3]={{100,200,300},{400,500,600},{700,800,900}};13system("CLS");14for(i=0;i<3;i++)15{for(j=0;j<3;j++)16printf("%7d",array[i][j]);17printf("\n");18}19fun(array);20printf("Convertedarray:\n");21for(i=0;i<3;i++)22{for(j=0;j<3;j++)23printf("%7d",array[i][j]);24printf("\n");25}26/*********found*********/27wf=fopen("out.datn,"w");28for(i=0;i<3;i++)29{for(j=0;j<3;j++)30fprintf(wf,"%7dn,array[i][j]);31fprintf(wf,"\n");32}33fclose(wf);34/*********found********/35}28.使用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));}29.使用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()的花括号中填入你编写的若干语句。试题程序:

30.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun(),其功能是将两个两位数的正整数a、b合并成一个整数放在c中。合并的方式是将a中的十位数和个位数依次放在c的个位和百位上,b中的十位数和个位数依次放在c的十位和千位上。例如,当a=45,b=12时,调用该函数后c=2514。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>voidfun(inta,intb,long*c){}main(){ inta,b; longc; printf(“Inputa,b:”); scanf(“%d%d”,&a,&b); fun(a,b,&c); printf(“Theresultis:%ld\n”,c);}

四、2.程序修改题(10题)31.给定程序MODll.C中函数fun的功能是:将p所指字符串中的所有字符复制到b中,要求每复制三个字符之后插入一个空格。

例如,在调用fun函数之前给a输入字符串:ABCDEFGHIJK,调用函数之后,字符数组b中的内容则为:ABCDEFGHIJK。

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

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

32.下列给定程序中函数fun()的功能是;先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。例如:当s中的字符串为ABCDE时,则t中的字符串应为EDCBAABCDE。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*s,char*t)

{

inti,sl;

sl=strlen(s);

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

t[i]=s[sl-1];

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

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

t[sl+i]=s[i];

t[2*sl]-'\0';

}

main()

{chars[100],t[100];

clrscr();

printf("\nPleaseenterstrings:");

scanf("%s",s);

fun(s,t);

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

}

33.给定程序MODll.C中函数fun的功能是:根据形参m的值(2≤m≤9),在m行m列的二维数组中存放如下所示规律的数据,由main函数输出。

例如,若输入2|若输入4

则输出:|则输出:

12|1234

24|2468

|36912

|481216

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

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

34.已知一个数列从第0项开始的前三项分别为0,0,1,以后的各项都是其相邻的前三项之和。给定程序MODll.C中函数fun的功能是:计算并输出该数列前n项的平方根之和。n的值通过形参传入。

例如,当n=10时,程序的输出结果应为:23.197745。

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

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

35.下列给定程序中,函数fun()的功能是将字符串s中位于偶数位置的字符或ASCII码为奇数的字符放入字符串t中(规定第一个字符放在第0位中)。

例如:字符串中的数据为ADFESHDI,则输出应当是AFESDI。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

#defineN80

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

voidfun(chars,chart[])

{

inti,j=0;

for(i=0;i<strlen(s);i++)

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

if(i%2=0||s[i]%2!=0)

t[j++]=s[i];

t[j]='\0';

}

main()

{

chars[N],t[N];

clrscr();

printf("\nPleaseenterstrings:");

gets(s);

fun(s,t);

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

}

36.下列给定程序中,函数fun()的功能是逐个比较a,b两个字符串对应位置中的字符,把ASCII值小或相等的字符依次存放到c数组中,形成一个新的字符串。

例如:a中的字符串为fshADfg,b中的字符串为sdAEdi,则c中的字符串应为fdAADf。

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

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

试题程序:

#include<stdio.h>

#include<strinq.h>

voidfun(char*p,char*q,char*c)

{intk=0;

while(*p||*q)

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

{if(*p<=*q)

c[k]=*q;

elsec[k]:*p;

if(*p)p++;

if(*q)q++;

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

k++

}

}

main()

{chara[10]="fshADfg",b[10]="sdAEdi",

c[80]={'\0');

fun(a,b,c);

printf("Thestringa:");puts(a);

printf("Thestringb:");puts(b);

printf("Theresult:");puts(c);

}

37.给定程序MODll.C中函数fun的功能是:将s所指字符串的正序和反序进行连接,形成一个新串放在t所指的数组中。

例如,当s所指字符串为:“ABCD”时,则t所指字符串中的内容应为:“ABCDDCBA”。

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

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

38.下列给定程序中,函数fun的功能是按以下递归公式求函数值。

例如:当给n输入5时,函数值为240;当给n输入3时,函数值为60。

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

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

试题程序:

#include<stdio.h>

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

fun(intn);

{

intc;

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

if(n=1)

c=15;

else

c=fun(n-1)*2;

return(c);

}

main()

{

intn;

printf("Entern:");

scanf("%d",&n);

printf("Theresult:%d\n\n",fun(n));

}

39.给定程序MODll.C中函数fun的功能是:根据以下公式求π值,并作为函数值返回。

例如,给指定精度的变量eps输入0.0005时,应当输出Pi=3.141480。

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

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

40.下列给定程序中,函数fun()的功能是:计算并输出下列级数的的N项之和SN,直到SN+1大于q为止,q的值通过形参传入。

SN=2/1+3/2+4/3+(N+1)/N

例如,若q的值为50.0,则函数值为49.394948。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

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

doublefun(doubleq)

{intn;doubles,t;

n=2;

s=2.0;

while(s<=q)

{

t=s

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

s=s+(n+1)/n;

n++;

}

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

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

returns;

}

main()

{clrscr();

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

}

五、程序改错题(2题)41.下列给定程序、中,函数proc()的功能是:先将字符串s中的字符按顺序存放到t中,然后把s中的字符按正序连接到t的后面。例如,当s中的字符串为WXYZ时,则t中的字符串应为WXYZWXYZ。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。试题程序:

42.下列给定程序中函数fun的功能是:逐个比较P.q所指两个字符串对应位置上的字符,并把ASCIl值大或相等的字符依次存放到C所指的数组中,形成一个新的字符串。

例如,若主函数中a字符串为“aBCDeFgH”,b字符串为“Abed”,则C中的字符串应为“aBcdeFgH”。请改正程序中的错误,使它能得出正确的结果。

注意:部分源程序在文件MODll.C中,不得增行或删行,也不得更改程序的结构!

六、操作题(2题)43.下列给定程序中,函数fun()的功能是:应用递归算法求某数a的平方根。求平方根的迭代公式如下:

例如,2的平方根为1.414214。

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

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

试题程序:

#include<math.h>

#include<stdio.h>

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

fun(doublea,doublex0)

{doublexl,y;

xl=(x0+a/x0)/2.0;

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

if(fabs(xl-x0)>0.00001)

y=fun(a,xl);

elsey=x1;

returny;

}

main()

{doublex;

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

printf("Thesquarerootof%1fis%1f\n",

x,fun(x,l.O));

}

44.有以下语句段:

intn1=10,n2=20;

printf("【】",n1,n2);

要求按以下格式输出n1和n2的值:

n1=10

n2=20

每个输出行从第一列开始,请填空。

参考答案

1.ACEACE解析:在本题中,for循环体每执行完一次,变量i的值自加两次。i的初值为“a”,执行一次循环后变为“c”,之后再变成“e”,当其变为“g”时,循环条件若不满足,循环终止,故本题共输出3个字符。表达式“i-'a'+'A'”即表示输出i对应的大写字母,结果为ACE。

2.循环链表循环链表解析:在循环链表中,由于设置了一个头结点,因此在任何情况下,循环链表中至少有一个结点存在,从而使空表与非空表的运算统一。

3.k=p;k=p;解析:为要寻找数组中的最大元素的下标,需先预设1个临时最大元素的下标,并顺序逐一考查数组的元素,当发现当前元素比临时最大元素更大时,就用当前元素的下标更新临时最大元素下标。直至考查了数组的全部元素后,这临时最大元素下标就是数组的最大元素下标。通常预设的最大元素下标是数组的首元素下标,考查是从首元素开始顺序向后继元素考查。程序中,存储临时最大元素下标的变量是k,变量p控制顺序考查的循环控制变量。当发现当前元素s[p]比临时最大元素s[k)更大时,应该用p更新k。所以在空框处应填入代码“k=p;”。

4.852852解析:循环前,变量y的值为9,其中,循环语句在y大于0情况下循环,每次循环后y的值都减1。循环体是当y能被3整除时输出表达式--y,输出的是减1后的y值。这样,第一次循环因y为9,能被3整除,输出8,y也变成8。又经两次循环,y的值变为6,又让y减1变成5,并输出5;又经两次循环,y的值变成3,让y减1变成2,输出2;再经两次循环后,y的值变成0,结束循环,所以程序输出852。

5.变换型典型的数据流类型有两种:变换型和事务型。变换型是指信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统;在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处理,这些处理能够完成该作业要求的功能,这种数据流就叫做事务。

6.length++i<lengthlength++\r\ni<length解析:第一个循环极有可能是计算串的长度,在i<=length时字符才被删除,被删除的是从第i个到第i+n或最后一个间的所有字符。删除前,应判断i<=length。由于已经进行了-i运算,故实际应填入i<length。

7.structaa*lhead*rchild;structaa*lhead,*rchild;解析:结构体对链表的定义。

8.层次模型用树型结构表示实体类型及实体间联系的数据模型称为层次模型,用有向图结构表示实体类型及实体间联系的数据模型称为网状模型,用二维表格结构表示实体及其联系的数据模型称为关系模型。

9.88。8,8。解析:本题考查静态局部变量值的特点,请参考第10章有关习题的解析。

10.11解析:本题是一个陷阱题。在if语句的判断表达式中,使用的不是逻辑运算符==而是赋值运算符=,使该表达式返回的结果正好相反。如果是c==a,则结果为假。但是c=a则是将a赋给c,且表达式的结果是赋值之后的c的值,因此结果为1是真.故最后输出c的值1。

11.D解析:在C语言中,将一个字符常量放到一个字符变量中,实际并不是把该字符本身放到内存单元中,而是将与该字符相对应的ASCII码放到存储单元中。

12.D解析:选项A、选项B和选项C都是在a的值为0的时候输出y,a不为0的时候输出x,而选项D是在a为0的时候输出x,a不为0的时候输出y。所以,4个选项中选项D符合题意。

13.B#include”文件名”,预处理程序首先在引用被包含文件的源文件所在的目录下搜索指定的文件,如没找到,再按系统指定的标准目录搜索。

14.D

15.D

16.BB选项的特点是顺序存储结构的特点,即数组的特点。

17.D解析:本题主要是考查带参数的宏定义及其相关运算。本题中宏运算过程如下:a=a/(S(k+m)/S(k+m))=a/(k+m*k+m/k+m*k+m)=9/(3+2*3+2/3+2*3+2)=0。

18.Cfread函数中的参数buffer是内存块的首地址,输入的数据存入此内存块中。

19.AC语言中规定else总是和之前与其最近的且不带else的if配对。题目中,“if(a=1)b=1;c=2;”默认省略了else,导致下一句else没有匹配语句。故本题答案为A选项。

20.D

21.

【考点分析】

本题考查:求数组的最大值,需要运用循环语句,因为数组是二维数组,所以应使用二层for循环嵌套。使用for循环语句时需要注意循环变量的取值范围。

【解题思路】

此类求最大值或最小值的问题,我们可以采用逐个比较的方式,要求对数组中所有元素遍历一遍,并且从中找出数组最大值或最小值。首先定义变量max存放数组中的第一个元素的值,然后利用for循环逐个找出数组中的元素,并与max比较,如果元素值大于max,则将该值赋予max,循环结束后max的值即为数组最大值,最后将该值返回。

【解题宝典】

该类题目考查较多,要掌握逐行比较的方法。对于m*n二维数组,如采用逐行查找方法,代码实现为:

22.longfun(char*s)}inti,len;Longsum=0;len=strlen(s);for(i=0;i<len;i++){sum=sum*10+*s-'0's++;}returnsum;}<len;i++)要把一个数字字符转为相应的数字,只要将它的ASCII值减去48(或D1)即可。要把数字字符串转为相应的数字,则要从左到右依次取出字符转为相应数字,乘10再加上下一位数字。</len;i++)

23.

【解析】此题考查的是数组的查找算法。使用for循环嵌套完成对二维数组的遍历。题目要求出最大值,则应采用将所有元素遍历一遍,逐个比较的方式完成。定义变量max,将第一个元素赋值max,然后通过for循环将元素逐个与max比较,遇到比max大的则赋值max,替换原有数据,当嵌套的for循环结束后,max即为二维数组中的最大值。

24.voidfun(STREC*a)

\n{

\ninti;

\na->ave=0.0;

\nfor(i=0;i<N;i++)

\na->ave=a->ave+a->s[i];

\n/*求各门课程成绩的总和*/

\na->ave=a->ave/N;/*求平均分*/

\n}

\n【解析】本题考查的是指向结构体类型的指针变量做参数和结构体类型成员的运算。fun函数中求出平均成绩,要带回主函数则必须定义一个指针类型的形参STREC*a,同时引用成员使用指向运算符,a->ave和a->s[i]。

\n25.\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

26.

【解析】要将大于整数m且紧靠m的k个素数存入所指的数组中,首先应该判断大于整数m且紧靠m的整数是否为素数。将紧靠m且为素数的k个整数放入数组xx中。

27.1voidfun(intarray[3][3])2{3inti,j,t;4for(i=0;i<3;i++)/*将上三角和下三角对换,实现行列互换*/5for(j=i+l;j<3;j++)6{t=array[i][j];7array[i][j]=array[j][i];8array[j][i]=t;9}10}要实现矩阵转置,即将上三角数组元素和下三角数组元素对换,本题通过数组元素交换方法,完成矩阵转置操作。因为对矩阵转置后仍然存回其本身,所以只能循环矩阵中的一本程序选择的是上三角)。控制上三角的方法是在内层循环中从i+1或i开始循环变量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,就是大于指定数的最小的数。29.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++)30.voidfun(inta,intb,long*c){/*b%10获取b的个位数,a/10获取a的十位数,a%10获取a的个位数,b/10获取b的十位数*/ *c=a/10+(b/10)*10+(a%10)*100+(b%10)*1000;}本题主要考如何取出a和b的个位数和十位数,取出后如何将其表示成c中相应的位数。由于a和b都是只有两位的整数,因此分别对它们除以10可得到它们的十位数,分别用10对它们求余可得到它们的个位数。将得到的数对应乘以1000、100、10、1,即可得到c的千位数、百位数、十位数、个位数。注意使用c时要进行指针运算。

31.(1)b[k]=*p;(2)b[k++]=’’;(1)b[k]=*p;(2)b[k++]=’’;解析:本题中函数的功能是将字符串p中的所有字符复制到字符串b中,要求每复制三个字符之后插入一个空格。本题可以利用一个计算数器统计复制字符的个数,根据计数器的值决定什么时候输入空格。

32.错误:t[i]=s[s1-1];正确:t[i]=s[s1-1-i];错误:t[i]=s[s1-1];正确:t[i]=s[s1-1-i];解析:该题也是几个循环语句的嵌套使用,难度并不大,重要的足要读懂程序,题目中赋值语句t[i]=s[]s1-1;并不能完成累计循环,所以正确的应该是t[i]=s[s1-1-i];。

33.(1)voidfun(inta[][M]intm)(2)a[j][k]=(k+1)*(j+1);(1)voidfun(inta[][M],intm)(2)a[j][k]=(k+1)*(j+1);解析:本题中函数的功能是根据形参m的值(2≤m≤9),在m行m列的二维数组中存放有规律的数据,规律就是,i和j代表二维数组的行和列,则a啪[k]=(k+1)*(j+1)。

34.(1)doublefun(intn)(2)returnsum;(1)doublefun(intn)(2)returnsum;解析:本题中函数的功能是计算并输出该数列前n项的平方根之和sum。解题思路首先根据题干求得每一项的值,然后再计算数列前n项的平方根之和。

35.(1)错误:voidfun(charschart[])正确:voidfun(char*schart[])(2)错误:if(i%2=0||s[i]%2!=0)正确:if(i%2=0||s[i]%2!=0)(1)错误:voidfun(chars,chart[])正确:voidfun(char*s,chart[])\r\n(2)错误:if(i%2=0||s[i]%2!=0)正确:if(i%2=0||s[i]%2!=0)解析:错误1:由于本题中函数的功能是对字符串进行处理,而不是对单个字符进行处理,因此,函数的参数应为字符串指针。错误2:if语句中要用关系运算符,而不是赋值运算符。

36.(1)错误:{if(*P<=*q)正确:{if(*p>=*q)(2)错误:k++正确:k++;(1)错误:{if(*P<=*q)正确:{if(*p>=*q)\r\n(2)错误:k++正确:k++;解析:错误1:依题意,把ASCII值小或相等的字符存放到c数组中,故if语句的关系运算符应为“>=”。错误2:C语言规定,每个语句要用分号结束。

37.(1)voidfun(char*schar*t)(2)t[2*d]=‘\0’;(1)voidfun(char*s,char*t)(2)t[2*d]=‘\0’;解析:本题中函数的功能是将字符串的正序和反序进行连接。题目中首先由字符串的起始位置正序取字符,然后再由串尾逆序取字符,实现正序和逆序的连接。

38.

温馨提示

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

评论

0/150

提交评论