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

下载本文档

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

文档简介

2023年安徽省淮北市全国计算机等级考试C语言程序设计真题(含答案)学校:________班级:________姓名:________考号:________

一、2.填空题(10题)1.函数fun的功能是:根据以下公式求p的值,结果由函数值返回。m与n为两个正数且要求m>n。

例如:m=12,n=8时,运行结果应该是495.000000。请在题目的空白处填写适当的程序语句,将该程序补充完整。

#include<conio.h>

#include<stdio.h)

floatfun(intm,intn)

{inti;

doublep=1.0;

for(i=1;i<=m;i++)【】;

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

for(i=1;i<=m-n;i++)p=p/i;

returnP;}

main()

{clrscr();

printf("p=%f\n",fun(12,8));}

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

#include<string.h>

typeaefstructstudent{

charname[10];

longsno;

floatscore;

{STU;

main()

{STUa={"zhangsan",2001,95},b={"Shangxian",2002,90},c={"Anhua",2003,95},d,*p=&d;

d=a;

if(strcmp(a.name,b.name)>0)d=b;

if(strcmp(C.name,)>0)d=C;

printf("%1d%s\n",d.sno,p->name);

}

3.有以下程序:

#include<stdio.h>

main()

{charc;

while((c=getchar())!='?')putchar(--c);

}

程序运行时,如果从键盘输入Y?N?<回车>,则输出结果为【】。

4.设有以下结构类型说明和变量定义,则变量a在内存所占字节数是【】。

structstud

{charnum[6];

ints[4];

doubleave;

}a,*p;

5.以下程序中,fun函数的功能是求3行4列二维数组每行元素的最大值。请填空。

voidfun(int,int,int(*)[4],int*);

main()

{

inta[3][4]={{12,41,36,28},{19,33,15,27),{3,27,19,1}},b[3],i;

fun(3,4,a,B);

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

printf("\n");

}

voidfun(intm,intn,intar[][4],int*br)

{inti,j,x;

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

{

x=ar[i][0];

for(i=0;j<n;j++)if(x<ar[i][j])x=ar[i][j];

______=X;

}

}

6.下面程序的功能是从键盘输入一行字符,统计有多少个单词,单词间用空格分隔。补充所缺语句。

#include<stdio.h>

main()

{charss[80],c1,c2='';

inti=0,num=0;

gets(s);

while(s[i]!='\0')

{c1=s[i];

if(i==0)c2='';

elsec2=s[i-1];

if(【】)num++;

i++;

}

printf("Thereare%dwords,\n",num);

}

7.下列程序段中循环体的执行次数是______。

a=15;

b=0;

do{b+=2;a-=2+b;}while(a>=0);

8.以下程序段打开文件后,先利用fseek函数将文件位置指针定位在文件末尾,然后调用ftell函数返回当前文件位置指针的具体位置,从而确定文件长度,请填空。

FILE*myf;longf1;

myf=【】("test,t","rb");

fseek(myf,(),SEEK_END;f1+ftell(myf);

fclose(myf);

printf("%1d\n",f1);

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

#include<stdio.h>

main()

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

if(a<b)

if(b<0)c=0;

elsec++;

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

}

10.数据模型是用来描述数据库的结构和语义的,数据模型有概念数据模型和结构数据模型两类,E-R模型是【】

二、单选题(10题)11.

12.有以下程序:#include<stdio.h>intfun(intx,inty){if(x!=y)return((x+y)/2);elsereturn(x);}main(){inta=4,b=5,c=6;printf(“%d\n”,fun(2*a,fun(b,c)));}程序运行后的输出结果是()。

A.3B.6C.8D.12

13.若有定义floata=25,b,*p=&b;,则下列对赋值语句*p=a;和p=&a;的正确解释为()。

A.两个语句都是将变量a的值赋予变量p

B.*p=a是使p指向变量a,而p=&a是将变量a的值赋予变量指针p

C.*p=a是将变量a的值赋予变量b,而p=&a是使p指向变量a

D.两个语句都是使p指向变量a

14.设x、y和z是int型变量,且x=4,y=6,z=8,则下列表达式中值为0的是()。

A.x&&yB.x<=yC.x||++y&&y-zD.!(x<y&&!z||1

15.以下四个选项,不能看作一条语句的是()。

A.{;}B.a=0,b=0,c=0;C.if(a>0);D.if(b==0)m=1;n=2;

16.若整型变量a、b、c、d中的值依次为2、2、3、4,则条件表达式a<b?a:c<d?c:d的值是()。A.1B.2C.3D.4

17.在C语言中,函数返回值的类型最终取决于()。

A.函数定义时在函数首部所说明的函数类型

B.return语句中表达式值的类型

C.调用函数时主调函数所传递的实参类型

D.函数定义时形参的类型

18.

19.下面程序运行后的输出结果是______。structabc{inta,b,c;}main(){structabcs[2]={{1,2,3},{4,5,6}};intt=s[0].a+s[1].b;printf("%d\n",t);}

A.5B.6C.7D.8

20.

A.if(x>0)y=1;elseif(x==0)y=0;elsey=-1;

B.y=0;if(x>0)y=1;elseif(x<0)y=-1;

C.y=0;if(x>=0)if(x>0)y=1;e1sey=-1;

D.if(x>=0)if(x>0)y=1;elsey=0:elsey=-1;

三、程序设计题(10题)21.请编写函数proc(),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从p到n-1(p≤n-1)的数组元素平移到数组的前面。例如,一维数组中的原始内容为1,2,3,4,5,6,7,8,9,10,11,12,13,14,P的值为4。移动后,一维数组中的内容应为5,6,7,8,9,10.11,12,13,14,1,2,3,4。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。试题程序:

22.请编写一个函数,用来删除字符串中的所有*。例如,输入abc*de*f*gh,则输出为abcdefgh。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。试题程序:

23.从键盘上输出10个整数存入一维数组中,按由大到小的顺序输出。

24.编写函数fun,其功能是:实现两个字符串的连接(不要使用库函数strcat),即把p2所指的字符串连接到

pl所指的字符串的后面。

例如,分别输入下面两个字符串:

程序输出:

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

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

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

26.某学生的记录由学号、8门课成绩和平均分组成,学号和8门课的成绩已在主函数中给出。请编写proc()函数,它的功能是:求出该学生的平均分并放在记录的ave成员中。请自己定义正确的形参。例如,若学生的成绩是65.5,75,88,90,90.5,66,64.5,89.5,则他的平均分应当是78.625。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。试题程序:

27.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。此程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(),该函数的功能是将数组下三角元素中的值全部置成0。如a数组中的值为注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>#include<stdlib.h>#defineN5voidfun(inta[][N]){}voidmain(){ inta[N][N],i,j; system(“CLS”); printf(“****Thearray****\n”); for(i=0;i<n;i++)<p=""></n;i++)<>/*产生一个随机的5×5矩阵*/ { for(j=0;j<=""p=""> { a[i][j]=rand()%10; printf(“%4d”,a[i][j]); } printf(“\n”); } fun(a); printf(“TheResult\n”); for(i=0;i<n;i++)<p=""></n;i++)<> { for(j=0;j<=""p=""> printf(“%4d”,a[i][j]); printf(“\n”); }}

28.输出1900~2000年中所有的闰年。每输出3个年号换一行。(判断闰年的条件为下面二者之一:能被4整除,但不能被100整除。或者能被400整除。)

29.函数fun的功能是:将S所指字符串中除下标为偶数同时ASCIl码值也为偶数的字符外,其余的全部删除;字符串中剩余字符所形成的新串放在t所指的数组中。例如,若s所指字符串中的内容为“ABCDEFGl23456”,其中字符A的ASCIl码值为奇数,因此应当删除;字符8的ASCIl码值为偶数,但在数组中的下标为奇数,因此也应当删除;字符2的ASCIl码值为偶数,在数组中的下标也为偶数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是‘'246”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:

30.规定输入的字符串中只包含字母和+号。编写函数fun,其功能是:除了字符串前导和尾部的母号外,将其他的*号全部删除。形参h已指向字符串中第一个字母,形参P指向字符串中最后一个字母。在编写函数时,不得使用c语言提供的字符串函数。四、2.程序修改题(10题)31.下列给定程序中,函数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));

}

32.下列给定程序中,函数fun()的功能是;求S的值。设S=(22/1*30))*(42/(3*5))*(62/(5*7))*…*(2k)2/((2k-1)*(2k+1))

例如,当k为10时,函数的值应为1.533852。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

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

fun(intk)

{ihtn;floats,w,p,q;

n=1;

s=1.0;

while(n<=k)

{w=2.0*n;

p=w-1.0;

q=w+1.0;

s=s*w*w/p/q;

n++;

}

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

returns

}

main()

{clrscr();

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

}

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

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

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

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

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

}

35.给定程序MODllC中函数fun的功能是:输出M行M列整数方阵,然后求两条对角线上各元素之和,返回此和数。

#inClude<coMo.h>

#inClude<stdio.h>

#dehneM5

/************fOUnd************/

intfun(intn,intxx[][])

{inti,j,sum=0;

printf("\nThe%dx%dmatrix:\n"M,M);

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

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

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

printf("%f",xx[i][j]);

printf("\n");

}

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

sum+=xx[i][i]+XX[i][[n-i-1];

return(sum);

}

main()

{intaa[M][M]={{1,2,3,4,5),{4,3,2,1,0),

{6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};

clrscr();

printf("\nThesumOfallelementsOn2diagnalsis%d."fun(M,aa));

}

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

}

37.下列给定程序中,函数fun()的功能是;求出两个数的最大公约数,并作为函数值返回。例如,若给num1和num2输入49和21,则输出的最大公约数为7:若给num1和num2分别输入27和81,则输出最大公约数为27。

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

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

试题程序:

#include<stdio.h>

intfun(inta,intb)

{intr,t;

if(a<b)

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

{t=a;b=a;a=t;}

r=a%b;

while(r!=0)

{a=b;b=r;r=a%b;}

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

return(a);

}

main()

{intnum1,num2,a;

printf("Inputnum1num2:");scanf("%d%d",&num1,&num2);

printf("num1=%dnum2=%d\n\n",num1,num2);

a=fun(num1,num2);

printf("Themaximuncommondivisoris%d\n\n",a);

}

38.下列给定程序中,函数fun()的功能是:从字符串s中,删除所有大写字母'F'。

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

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

试题程序:

#include<stdio.h>

voidfun(char*s)

{

inti,j;

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

for(i=j=0;s[i]!='0';i++)

if(s[i]!='F')

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

s[j]=s[i];

s[j]='\0';

}

main()

{

chars[80];

printf("\nEnterastring:");

gets(s);

printf("Theoriginalstring:");

puts(s);

fun(s);

printf("Thestringafterdeleted:");

puts(s);

printf("\n\n");

}

39.假如整数数列中的数不重复,并存放在数组中。下列给定的程序中,函数fun()的功能是:删除数列中值为X的元素。N中存放的是数列中元素的个数。

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

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

试题程序:

#include<stdio.h>

#defineN20

fun(int*a,intn,intx)

{intp=0,i;

a[n]=x;

while(x!=a[p])

p=p+1;

if(p==n)return-1;

else

{for(i=p;i<n;i++)

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

a[i+1]=a[i];

returnn-1;

}

}

main()

{intw[N]={-3,0,1,5,7,99,10,15,30,90},

x,n,i;

n=10;

printf("Theoriginaldata:\n");

for(i=0;i<n;i++)printf("%5d",w[i]);

printf("\nInputx(todelete):");

scanf("%d",&x);

printf("Delete:%d\n",x);

n=fun(w,n,x);

if(n==-1)printf("***Nobefound!

***\n\n");

else

{printf("Thedataafterdeleted:\n");

for(i=0;i<n;i++)printf("%5d",

w[i]);printf("\n\n");

}

}

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

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

注意:不要改动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");

}

五、程序改错题(2题)41.下列给定程序中,函数proc()的功能是:求S的值。

例如,当n为100时,函数的值应为1.566893。

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

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

试题程序:

42.下列给定程序中,proc()函数的功能是:根据形参m,计算下列公式的值。t=1+1/2+1/3+1/4+…+1/m例如,若输入10,则应输出2.928968。请修改程序中的错误,使它能计算出正确的结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。试题程序:

六、操作题(2题)43.以下程序的功能是输出如下形式的方阵:

13141516

9101112

5678

1234

请填空。

main()

{inti,j,x;

for(j=4;j>0;j--)

{for(i=1;i<=4;i++)

{x=(j-1)*4+【】;

printf("%4d",x);

}

printf("\n");

}

}

44.某学生的记录由学号、8门课成绩和平均分组成,学号和8门课的成绩已在主函数中给出。请编写fun()函数,它的功能是:求出该学生的平均分放在记录的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;

voidfun()

{

}

main()

{

STRECs={"GA005",85.5,76,69.5,85,91,72,64.5,87.5);

inti;

fun(&s);

printf("The%s'sstudentdata:\n",s.num)//*输出学号*/

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

printf("%4.1f\n",s.s[i]);

/*输出各科成绩*/

printf("\nave=%7.3f\n",s.ave);

/*输出平均分*/

}

参考答案

1.p=p*Ip=p/ip=p*I\r\np=p/i解析:本题中,欲求p的值,需要先求m,n,m-n的阶乘值,可用循环语句实现。

2.2002Shanxian2002Shanxian解析:本题中第一个if语句将结构体变量a.name和结构体变量b.name中较小的那个赋值给结构体变量d,第二个if语句将结构体变量c.name和结构体变量d.name较大的那个赋给结构体变量d。通过函数strcmp比较。strcmp()函数有两个参数,分别为被比较的两个字符串。如果第一个字符串大于第二个字符串返回值大于0,若第一个小于第二个返回值小于0,相等时返回值为0。字符串比较大小的标准是从第一个字符开始依次向右比较,遇到某一个字符大,该字符所在的字符串就是较大的字符串,如果遇到某一个字符小,该字符所在的字符串就是较小的字符串。本程序中第一个if语句strcmp(a.name,b.name)>0为真,故将b的值赋给d,第二个if语句strcmp(c.name,d.name)>0为假,故不执行后面的语句,最后d的值为b的值,因此d.sno和p->name的值为2002Shangxian。

3.XX解析:程序是从键盘缓冲区循环接收字符,并输出接收到的字符在ASCII码表中的前一个字符,直到接收到‘?’为止。

4.22

5.br[i]或*(br+i)br[i]或*(br+i)解析:求最大值算法要求输入的一般是一系列数,例如一个数组,而输出只有一个值。计算时通常的做法是,首先将这一系列数的笫1个值保存到结果变量中,然后用一个指针或循环变量从头(或从第2个值)至尾遍历这一系列数,每次比较结果变量和被遍历的值,如果该值比结果大,则将该值保存到结果中。本题中,3行4列二维数组a显然是算法的输入值,而传给函数fun()的3和4在函数中起到限制循环次数的作用,所以它们代表输入数据的行列数.而传递给函数的一维数组b即没有初始化,最后又要输出它,所以数组b肯定是用来保存每行的最大值。在函数中是一个二重循环,外循环首先将ar[i][0]赋给x,然后内循环中比较x和ar[il刚,若x比较小就让x=ar[i][j],这就说明x是保存结果的临时变量.最后应该将x的值输出到数组b中,也就是形参br的相应位置。故在空格处应该填的内容为br[i]或者写成指针方式*(br+i)。

6.c1!==''&&c2==''

7.33解析:本题考查do…while语句形式:

do循环体

while表达式

首先执行循环体语句,然后检测循环控制条件表达式的值,若为真,则重复执行循环体语句,否则退出循环。第1次循环:b+=2,b=2,a-=2+b,a=11;第2次循环:b=4,a=5;第3次循环:b=6,a=-3,此时再判断循环条件不满足,退出循环。

8.fopenfopen解析:C语言中的文件分为:ASCII文件与二进制文件。文件在使用前打开,使用后要关闭。打开文件的函数为:fopen(),调用形式为:fp=fopen(“文件名”,“使用文件方式”);关闭文件的函数为:fclose(),调用形式为:fclose(fp);其中fp为文件指针。

9.22解析:分析程序,a=2,b=-1,c=2时,if语句的表达式a<b不成立,不再往下判断,直接退出if语句,执行后面的输出语句,程序结束。在这个程序中a、b、c的值没做任何改变。

10.概念数据模型概念数据模型

11.A

12.Bfun函数的功能是获取2个数的平均值,注意平均值是整型数,小数会被截断。调用函数“fun(2*4,fun(5,6))”相当于调用函数“fun(8,5)”,平均值是6。故本题答案为B选项。

13.C解析:“p”是指针变量,指向一个地址:“*p”,为p指针所指向地址的内容。

14.D本题考查逻辑运算符的使用。当“&&”的两个运算对象都是逻辑1时,表达式返回值才是1;“||”的两个运算对象至少有一个是逻辑1时,表达式返回值也是1,x<y为1,!z为0,1&&0为1,0||为1,因此,!1为0。

15.D解析:在if后面只能有一条语句,或一条复合语句,即用花括号将多条语句括起来。选项D)中没有将两条语句括起来,不能看成一条语句。

16.C本题考查三目运算符a<b?a:c<d?c:d也可写成a<b?a:(c<d?c:d),所以根据优先级,先算括号内的,c小于d为真取C的值,再看a小于b为假,所以取C的值。

17.A解析:在C语言中,应当在定义函数时指定函数值的类型。凡不加类型说明的函数,默认按整型处理。在定义函数时对函数值说明的类型一般应该和return语句中的表达式类型一致。如果函数值的类型和return语句中的表达式类型不一致,则以函数值的类型为准,由系统自动进行转换,即函数类型决定返回值的类型。

18.B

19.B解析:在main函数中定义了一个structabc类型的数组,同时分别利用{1,2,3}及{4,5,6}对数组中两个元素进行初始化。在该结构体,依次对其中的a,b,c三个变量进行初始化。故s[0].a=1,s[1].b=5,所以本题输出为6。

20.C解析:选项A的意思是:在x>O情况下,y为1,否则,在x=O时,y为0,剩下x<O时,y为-1,满足本题中函数的要求。选项B描述的意思是:初始化y的值为0,在x>O时,给y重新赋值为1,否则,在x<O时,给y重新赋值为-1,满足本题中函数的要求。选项C描述的意思是:在x>=0情况下,如果x>O,则y为1,否则,即x==0时,y为-1;剩下的x<O时,y为0。可见答案C实现的结果不是给定的表达式。选项D中描述的意思是:在x>=0的情况下,如果x>O,就给y赋值为1,否则即x==0时给y赋值为0,在不是x>=0的其他情况下,就给y赋值为-1,满足本题中函数的要求。所以4个选项中C为所选。

21.

【解析】题目中要求把下标从p到n-1的数组元素平移到数组的前面,可以通过每一次循环将最后一个元素放在第一个位置上,使其成为第一个元素,其余元素后移一个位置。通过n-1-p次循环实现将从p到n-1的数组元素平移到数组的前面。

22.

【解析】根据题目中要求删除字符串中所有的*号,需要检查字符串中的每一个字符,将不是*号的字符放入原来的字符串中,形成新的字符串,最后在新的字符串的末尾加上结束符。

23.\n#include'stdio.h'

\nmain

\n{inti,j,a[10];

\nfor(i=1;i<=10;i++)

\nscanf('%d',&a[i]);

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

\nfor(j=9;j>i;j--)

\nif(a[j-1]{t=a[j-1];

\na[j-1]=a[j];

\na[j]=t;}

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

\nprintf('%d',a[i]);

\n}

\n24.

【考点分析】

【解题思路】

本题用两个循环完成操作,第1个循环的作用是求出第1个字符串的长度,即将i指到第1个字符串的末尾。第2个循环的作用是将第2个字符串的字符连到第1个字符串的末尾。

25.

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

26.

【解析】要求该学生的平均成绩,首先要求出其各科成绩之和,然后求出其平均成绩并放在成员变量ave中。

27.voidfun(inta[][n]){ inti,j; for(i=0;i<=""p=""> for(j=0;j<=i;j++) a[i][j]=0; /*将数组下三角元素中的值全部置成0*/}对于N×N二维数组,表示其下三角元素,可以通过以下语句实现。for(i=0;i<n;i++)<p=""></n;i++)<>\tfor(j=0;j<=i;j++)外层循环用来控制矩阵的行下标,内层循环用来控制矩阵的列下标。注意列下标的取值范围,因为要表示下三角元素,所以j的范围是0~i。

28.\n#include”stdio.h”

\nmain

\n{intI,n;

\nfor(n=0,I=1900;I<=2000;I++)

\n{if(I%4==0I0!=0||I@0==0)

\n{printf(“%d”,I);n++;}

\nif(n%3==0)

\nprintf(“\\n”);}}}

\n

29.

30.

31.(1)错误:doublefun(doubleq)正确:doublefun(intq)(2)错误:s=s+(n+1)/n;正确:s=s+(double)(n+1)/n;(3)错误:returns;正确:returnt;(1)错误:doublefun(doubleq)正确:doublefun(intq)\r\n(2)错误:s=s+(n+1)/n;正确:s=s+(double)(n+1)/n;\r\n(3)错误:returns;正确:returnt;解析:该程序中多次出现了函数调用过程中定义混乱的错误,关于类似问题,我们在前面的试题中已经做过比较详细的解释,主要是对基础知识的把握。在这里我们再对函数调用规则做一简单说明。

C语言规定,在以下几种情况下可以不在调用函数前对被调用函数做类型说明。

(1)如果函数的值(函数的返回值)是整型或字符型,可以不必进行说明,系统对它们自动按整型说明。但为清晰起见,建议都加以说明为好。

(2)如果被调用函数的定义出现在主调函数之前,可以不必加以说明。因为编译系统已经先知道了已定义的函数类型,会自动处理的。也就是说,将被调用的函数的定义放在主调函数之前,就可以不必另加类型说明。

(3)如果已在所有函数定义之前,在文件的开头,在函数的外部已说明了函数类型,则在各个主调函数中不必对所调用的函数再做类型说明。

除了以上3种情况外,都应该按上述介绍的方法对所调用函数的返回值做类型说明,否则编译时就会出现错误。

32.(1)错误:fun(intk)正确:doublefun(intk)(2)错误:returns正确:returns;(1)错误:fun(intk)正确:doublefun(intk)\r\n(2)错误:returns正确:returns;解析:这样一道数学题要是用C程序来实现,真的挺简单,但我们还是需要注意细节问题上出的错误,该题便是如此。一个是简单的函数调用的定义,另一个是语法错误。

33.(1)if(d%2==0)(2)s/=10;(1)if(d%2==0)(2)s/=10;解析:本题中函数的功能是将长整型数s中每一位上为偶数的数依次取出,构成一个新数放在t中。首先在函数中对长整型数的每一位来进行截取,然后对其进行判断,最后根据判断结果进行操作。

34.(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)

35.intfun(intnintxx[][])改为intfun(intnintxx[][M))printf("%fxx[i][j]);改为printf("%d"xx[i][j]);intfun(intn,intxx[][])改为intfun(intn,intxx[][M))\r\nprintf('%f,xx[i][j]);改为printf('%d,'xx[i][j]);解析:二维数组作为函数形参时,二维长度不可缺省,只能省略一维的长度。在格式输出函数中,血型数据输出时对应的控制符是%d.

36.错误: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];。

37.(1)错误:{t=a;b=a;a=t;}正确:{t=a;a=b;b=t;}(2)错误:return(a);正确:return(b);(1)错误:{t=a;b=a;a=t;}正确:{t=a;a=b;b=t;}\r\n(2)错误:return(a);正确:return(b);解析:若求两个数的最大公约数,如果b除a的非零余数能够整除a,那么该余数就是最大公约数;若余数为0,则最大公约数为a。该题程序中采用了循环语句,若b除以a的余数不等于0,则继续用a除以所得余数,直至余数为0,如此可以得到a,b的最大公约数。关于“交换原则”我们在前面已经讲述过了,这里就不再赘述。

38.(1)错误:for(i=j=0;s[i]!='0';i++)正确:for(i=j=0;s[i]!'\0';i++)(2)错误:s[j]=

温馨提示

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

评论

0/150

提交评论