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

下载本文档

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

文档简介

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

一、2.填空题(10题)1.数据独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改,称为【】。

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

#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]);

pfintf("\n",);}

3.某二叉树中度为2的结点有n个,则该二叉树中有【】个叶子结点。

4.在数据库管理系统提供的数据定义语言、数据操纵语言和数据控制语言中,【】负责数据的模式定义与数据的物理存取构建。

5.设i,j,k均为int型变量,则执行完下面的for语句后,k的值为【】。

for(i=0,j=10;i<=j;i++,j--)k=i+j;

6.在数据库的概念结构设计中,常用的描述工具是【】。

7.软件的可移植性是用来衡量软件【】的重要尺度之一。

8.若a是int型变量,则表达式(a=2*3,a*2),a+4的值为______。

9.数据字典是各类数据描述的集合,它通常包括5个部分,即数据项、数据结构、数据流、______和处理过程。

10.下面程序把从终端读入的10个整数以二进制的方式写到一个名为bi.dat的新文件中。请填空。

#include<stdio.h>

FILE*fp;

main()

{inti,j;

if((fp=fopen(【】,"wb"));=NULL)exit(0);

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

{scanf("%d",&j);

fwrite(&j,sizeof(int),1,【】);

}

fclose(fp);

}

二、单选题(10题)11.数据的存储结构是指()。

A.数据所占的存储空间

B.数据的逻辑结构在计算机中的存放形式

C.数据在计算机中的顺序存储方式

D.存储在计算机外存中的数据

12.有如下定义:structperson{charname[9];intage;}structpersonclass[10]={"John",17,"Paul",19,"Mary",18,"Adam",16};能输出字母M的是()

A.printf("%c\n",class[3].name);

B.printf("%c\n",class[3].name[1]);

C.printf("%c\n",class[2].name[1]);

D.printf("%c\n",class[2].name[0]);

13.设有定义语句“int(*f)(int);”,则下列叙述中正确的是()。

A.f是基类型为int的指针变量

B.f是指向函数的指针变量,该函数具有一个int类型的形参

C.f是指向int类型一维数组的指针变量

D.f是函数名,该函数的返回值是基类型为int类型的地址

14.数据结构通常是研究数据的及它们之间的联系______。A.存储和逻辑结构B.存储和抽象C.理想和抽象D.理想与逻辑

15.有以下程序:#include<stdio.h>main(){unsignedchara=8,C;C=a>>3:printf("%d\n",c);}程序运行后的输出结果是()。A.32B.16C.1D.0

16.按照标识符的要求,()符号不能组成标识符。

A.连接符B下划线B.大小写字母C.数字字符

17.下面函数的功能是()intfunl(char*X){char*y=X;whar(*y++);return(y-x-1);}

A.求字符串的长度B.比较两个字符串的大小C.将字符串x复制到字符串y中D.将字符串x连接到字符串y后面

18.由权值分别为3,8,6,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为________。

A.24B.48C.72D.53

19.若在定义语句:inta,b,c,*p=&c;之后,接着执行以下选项中的语句,则能正确执行的语句是()。

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

B.scanf("%d%d%d",a,b,c):

C.scanf("%d",p);

D.scanf("%d",&p);

20.下列叙述中正确的是()。

A.一个逻辑数据结构只能有一种存储结构

B.逻辑结构属于线性结构,存储结构属于非线性结构

C.一个逻辑数据结构可以有多种存储结构,且各种存诸结构不影响数据处理的效率

D.一个逻辑数据结构可以有多种存储结构,且各种存诸结构影响数据处理的效率

三、程序设计题(10题)21.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,规定输入的字符串中只包含字母和*号。编写函数fun(),其功能是删除字符串中所有的*号。编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为“****A*BC*DEF*G*******”,删除后,字符串中的内容应当是“ABCDEFG”。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>voidfun(char*a){}voidmain(){ chars[81]; printf(“Enterastring:\n”); gets(s); fun(s); printf(“Thestringafterdeleted:\n”); puts(s);}

22.下列程序定义了M×M的二维数组,并在主函数中赋值。请编写函数proc(),函数的功能是求出数组周边元素的平方和并作为函数值返回给主函数中的s。例如,若a数组中的值为则返回主程序后s的值应为310。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。试题程序:

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

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

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

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

25.假定输人的字符串中只包含字母和*号。请编写函数proc,它的功能是:将字符串中

的前导*号全部删除,中间和后面的*号不删除。

例如,若字符串中的内容为****a*bc*def*g****,删除后,字符串中的内容则

应当是a*bc*def*g****。

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

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

写的若干语句。

试题程序:

#include<stdio.h>

#include<conio.h>

voidproc(char*str)

{

}

voidmain

{

charstr[81];

printf("Enterastring:kn");

gets(str);

proc(str);

printf("Thestringafterdeleted:kn");

puts(str);}

26.三个整数a、b、c,由键盘输入,输出其中最大的数。

27.学生的记录由学号和成绩组成,M名学生的数据已在主函数中放入结构体数组S中,请编写函数proc(),它的功能是:把分数最高的学生数据放在h所指的数组中。注意:分数最高的学生可能不止一个,函数返回分数最高学生的人数。

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

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

试题程序:

28.请编写函数proc(),其功能是:利用以下所示的简单迭代方法求方程cos(x)-x=0的一个实根。

xn+1=COS(xn)

迭代步骤如下:

(1)取x1初始值为0.0;

(2)x0=x1,把?X1的值赋给x0;

(3)x1=cos(xO),求出一个新的x1;

(4)若x0-x1的绝对值小于0.000001,则执行步骤

(5),否则执行步骤(2);

(5)所求x1就是方程cos(x)-x=0的一个实根,作为函数值返回。

程序将输出结果root=0.739085。

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

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

试题程序:

29.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun(),其功能是根据以下公式求π的值(要求精度0.0005,即某项小于0.0005时停止迭代)。程序运行后,若输入精度0.0005,则程序应输出为3.140578。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#include<conio.h>#include<math.h>doublefun(doubleeps){}voidmain(){ doublex; printf(“Inputeps:”); scanf(“%lf”,&x); printf(“\neps=%lf,PI=%lf\n”,x,fun(x));}

30.编程将文件read.txt中的字符读出显示到屏幕上。

四、2.程序修改题(10题)31.下列给定程序中,函数fun()的功能是;将s所指字符串中的字母转换为按字母序列的后续字母(但Z转化为A,z转化为a),其他字符不变。

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

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

试题程序:

#include<stdio.h>

#include<ctype.h>

#include<conio.h>

voidfun(char*s)

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

{while(*s!='@')

{if(*s>='A'&*s<='z'||*s>='a'&&*s<='z')

{if(*s=='Z')*S='A';

elseif(*S=='z')*s='a';

else*s+=1;

}

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

(*s)++;

}

}

main()

{chars[80];

clrscr();

printf("\nEnterastringwithlength<80:\n\n");gets(s);

printf("\nThestring:\n\n");puts(s);

fun(s);

printf("\n\nTheCords:\n\n");puts(s);

}

32.下列给定函数中,函数fun()的功能是:统计字符串中各元音字母(即A,E,I,O,U)的个数。注意:字母不分大小写。例如,输入THIsisaboot,则应输出是10220。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

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

fun(char*s,intnum[5])

{intk,i=5;

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

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

num[i]=0;

for{;*s;s++)

{i=-l;

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

switch(s)

{case'a':case'A':{i=0;break;}

case'e':case'E':{i=1;break;}

case'i':case'I':{i=2;break;}

case'o':case'O':{i=3;break;}

case'u':case'U':{i=4;break;}

}

if(i>=0)

num[i]++;

}

}

main()

{chars1[81];intnum1[5],i;

clrscr();

printf("\nPleaseenterastring:");

gets(s1);

fun{s1,num1);

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

printf("\n");

}

33.下列给定程序中函数fun()的功能是:将长整型数中每一位上为偶数的数依次逆向取出,构成一个新数放在t中。高位在低位,低位在高位。例如当s中的数为25846513时,t中的数为6482。请改正函数fun()中的错误,使它能得出正确的结果。

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

试题程序:

#include<stdio.h>

#include<conio.h>

voidfun(longS,long*t)

{

intd;

longsl=l,i=1;

*t=0;

while(s/i>0)

i=i*10;

i=i/10;

while(s>0)

{

d=s/i

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

if(d%2!=0)

{

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

t=d*sl+t;

sl*=l0;

}

S=S%i;

i=i/10;

}

}

main()

{

longS,t;

clrscr();

printf("\nPleaseenterS:");

scanf("%ld",&s);

fun(S,&t);

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

}

34.下列给定程序中,函数fun()的功能是:计算整数n的阶乘。

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

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

试题程序:

#include<stdio.h>

doublefun(intn)

{

doubleresult=l.0;

whil(n>l&&n<170)

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

result*=--n;

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

return;

main()

{int.n;

clrscr();

printf("Enteraninteger:");

scanf("%d",&n);

printf("\n\n%d!=%lg\n\n",n,fun(n));

}

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

}

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

}

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

}

38.下列给定的程序中,函数fun()的功能是:计算并输出k以内最大的6个能被7或11整除的自然数之和。K的值由主函数传入,若k的值为500,则函数的值为2925。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

intfun(intk)

{

intm=0,mc=0,j;

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

while(k>=2)&&(mc<6)

{

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

if((k%7=0)||(k%ll=0))

{

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

m=k;

mc++;

}

k--;

}

returnm;

}

main()

{

clrscr();

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

}

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

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

则输出:|则输出:

12|1234

24|2468

|36912

|481216

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

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

40.给定程序MODll.c中函数fun的功能是;由形参给定n个实数,输出平均值,并统计在平均值以上(含平均值)的实数个数。

例如,n=8时,输入:193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763

所得平均值为:195.838745,在平均值以上的实数个数应为:5

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

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

五、程序改错题(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()的功能是:将m(1≤m≤10)个字符串连接起来,组成一个新串,放入pt所指字符串中,例如,把2个字符串abc、CD串联起来,结果是abcCD。请修改程序中的错误,使它能得出正确的结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。试题程序:

六、操作题(2题)43.设有下列程序:

#include<stdio.h>

#include<string.h>

main()

{inti;

chars[10],t[10];

gets(t);

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

{gets(s);

if(strcmp(t,s)<0)strcpy(t,s);

}

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

}

程序运行后,从键盘上输入(<CR>代表回车符):DEF<CR>BADEP<CR>QTHRG<CR>,则程序的输出结果是______。

44.若有以下程序:

main()

{int,p,a=5;

if(P=a!=0)

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

else

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

}

执行后输出结果是【】。

参考答案

1.物理独立性物理独立性解析:数据独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改,称为物理独立性。

2.本题主要考查for循环语句的使用以及静态局部变量的特点。

3.n+1n+1解析:在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为0的结点多一个。

4.数据定义语言数据定义语言解析:在数据库管理系统提供的数据定义语言,数据操纵语言和数据控制语言中,数据定义语言负责数据的模式定义与数据的物理存取构建,数据操纵语言负责数据的操纵,包括查询及增、删、改等操作,数据控制语言负责数据完整性、安全性的定义与检查以及并发控制、恢复等功能。

5.1010解析:该for语句以i为0,j为10作为初始值,循环条件是i<=j,每次循环后i增1、j减1,循环体是将i与j的和赋给k,这样变量k将保存的是最后一次赋给它的值。一次循环后i为1、j为9,二次循环后i为2、j为8,……,五次循环后i为5、j为5,第六次循环,将i与j的和10赋给k后,i为6、j为4,循环结束,k值为10。

6.E-R图E-R图解析:E-R图是设计概念模型的有力工具。

7.质量质量

8.此题考查逗号表达式。逗号表达式的值是最后一个表达式的值,所以本题的返回值是a+4。前面已经给a赋值6,所以返回值a+4=6+4=10。

9.数据存储数据存储

10."bi.dat"fp

11.B解析:数据的存储结构,又称为数据的物理结构,是数据的逻辑结构在计算机中的存放形式,数据的存储结构有顺序结构、链式结构、散列结构和索引结构等。

12.D

13.B此定义语句“int(*f)(int);”为指向函数的指针变量的定义方法,其中f为指向函数的指针变量,第1个int为函数返回值类型,第2个int为函数的形参类型。故本题答案为B选项。

14.A

15.C题中定义了无符号数,c=a>>3;是指右移3位,然后输出。结果为C。

16.A

17.A

18.D

19.C

\n题中整型指针变量P存放的是变量C的地址。所以本题答案为C。

\n

20.D数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式,一种数据结构可以根据需要采用不同的存储结构,用的存储结构有顺序和链式结构。用不同的存储结构,其处理的效率是不同的。21.voidfun(char*a){ inti,j=0; for(i=0;a[i]!=‘\0’;i++) if(a[i]!=‘\*’) a[j++]=a[i];/*若不是要删除的字符‘*’则保留*/ a[j]=‘\0’;/*最后加上字符串结束标志‘\0’*/}该题考核的是删除字符串中所有*,需用循环语句遍历字符串,用判断语句判断字符是否为*,由此可以决定该程序应使用循环判断结构。用循环操作从字符串开始向后逐个进行比较,若不是要删除的字符(用if(a[i]!=‘*’)来控制)则保留。变量i和j用来表示原字符串的下标和删除*后新字符串的下标。注意,下标变量j要从0开始,最后还要加上字符串结束标志‘\\0’。

22.

【解析】要求出数组周边元素的平方和,首先要找到二维数组所有的周边元素。二维数组的周边元素的特点为行下标或列下标为0或M一1。根据这个特点,找出二维数组中所有的周边元素,求出其平方和放在变量s中。最后将变量s返回到主函数中。

23.

【考点分析】

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

【解题思路】

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

24.

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

25.voidproc(char*str)

\n{

\nchar*p=str;

\nwhile(*p==*)p++;//通过p的移动来达到使p指向第一个不是*号的字符

\nfor(;*p!=\0;p++,str++)//把从第一个不是*号的字符放到a中

\n*str=*P:

\n*str=\0;//最后用\0作为字符串结束标志

\n}

\n【解析】题目中要求将字符串中的前导*号全部删除,首先将指针P移动到第一个不是*的字符,将指针P之后的字符放入原来的字符串中,并为新的字符串添加结束符。

\n

26.main

\n{inta,b,c;

\nprintf(“请输入三个整数:”);scanf(“%d,%d,%d”,&a,&b,&c);

\nif(aif(belseprintf(“max=%d\\n”,b);

\nelseif(aelseprintf(“max=%d\\n”,a);}

\n

27.

【解析】要得到分数最高的学生数据,首先应检查每一个学生的数据,得到学生的最高成绩。成绩最高的学生不止一个,将每一个学生的成绩与最高成绩相比较,得出最高成绩学生的个数,将成绩最高的学生记录放在指定数组中通过形参返回。成绩最高的学生个数由函数值返回给主函数。

28.

【解析】本题比较简单,因为题目中已经给出了算法,只要把题目中的说法转换成C语言表达式基本上就出来了,本题最好用do-while循环来做,但要注意循环终止的条件。

29.doublefun(doubleeps){ doubles=0.0,s1=1.0; intn=1; while(s1>=eps) /*当某项大于精度要求时,继续求下一项*/ { s=s+s1; /*求和*/ s1=s1*n/(2*n+1);/*求多项式的每一项*/ n++; } return2*s;}该题考核的是通过迭代法求给定多项式的值。迭代法是让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。需要注意变量的数据类型和赋初值操作。定义double类型变量s,并为其赋初值,用来存放多项式的某一项和最后的总和。从第2项开始,以后的每一项都是其前面一项乘以n/(2*n+1)。程序用s1来表示每一项,用s表示求和后的结果。需注意变量s1和s的初值都为1.0,因为循环变量从第2项开始累加。

30.\n#include'stdio.h'

\nmain

\n{intc;

\nFILE*fp;

\nfp=open('read.txt','r');

\nc=fgetc(fp);

\nwhile(c!=\\n)

\n{putchar(c);

\nc=fgetcr(fp);

\n}}

\nfclose;}\n

31.(1)错误:while(*s!='@')正确:while(*s)(2)错误:(*s)++;正确:s++;(1)错误:while(*s!='@')正确:while(*s)\r\n(2)错误:(*s)++;正确:s++;解析:根据题目要求,可对字符串所有字母进行遍历。对每一个字母,若该字母为'z'或'Z',将该字母改成'a'或'A',即ASCII码值减25,当然也可以用题目中的if语句来实现转换。若该字母不是'z'或'Z',则该字母的ASCII码值加1;对字符串所有字符重复以上过程即可得到题目要求的结果,可用循环语句和条件语句来实现。

32.(1)错误:fun(char*sintnum[5])正确:voidfun(char*sinthum[5])(2)错误:num[i]=0;正确:num[k]=0;(3)错误:switch(s)正确:switch(*s)(1)错误:fun(char*s,intnum[5])正确:voidfun(char*s,inthum[5])\r\n(2)错误:num[i]=0;正确:num[k]=0;\r\n(3)错误:switch(s)正确:switch(*s)解析:switch语句说明:

(1)switch后的表达式,可以是整型或字符型,也可以是枚举类型的。在新的ANSIC标准中允许表达式的类型为任何类型。

(2)每个case后的常量表达式只能是常量组成的表达式,当switch后的表达式的值与某一个常量表达式的值一致时,程序就转到此case后的语句开始执行。如果没有一个常量表达式的值与swish后的值一致,就执行default后的语句。

(3)各个case后的常量表达式的值必须互不相同,不然的话程序就不知该跳到何处开始执行。

(4)各个case的次序不影响执行结果,一般情况下,尽量使用出现机率大的case放在前面(为什么,等学到《数据结构》就知道了)。

(5)在执行完一个case后面的语句后,程序流程转到下一个case后的语句开始执行。千万不要理解成行完一个case后程序就转到switch后的语句去执行了。

在本例中,其他错误都比较简单,而且我们在前面已经介绍过了。

33.(1)错误:if(d%2!=0)正确:if(d%2==0)(2)错误:t=d*s1+t;正确:*t=d*s1+*t;(1)错误:if(d%2!=0)正确:if(d%2==0)\r\n(2)错误:t=d*s1+t;正确:*t=d*s1+*t;解析:错误1:偶数是能被2整除,而奇数是不能被2整除,题目要求找出偶数。错误2:t为指针类型,所以进行运算时要加‘*’号。

34.(1)错误:result*=--n;正确:result*=n--;(2)错误:return;正确:returnresult;(1)错误:result*=--n;正确:result*=n--;\r\n(2)错误:return;正确:returnresult;解析:该题采用循环语句计算n的阶乘。当n大于1且小于170时,令result与n相乘,同时n自动减1,循环至n=2(n=1时无需相乘):注意:o和1的阶乘都等于1,可用条件语句和循环语句实现上述功能。

35.(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是否素数。先从n1=3开始,检验n1和n2(n2=N-n1)是否素数。然后使n1+2再检验n1,n2是否素数,…直到n1=n/2为止。该题思路是与“经典猜想”是相同的。

36.(1)错误;(1)f(doublex)正确:doublef(doublex)(2)错误;returns正确:returns;(1)错误;(1)f(doublex)正确:doublef(doublex)\r\n(2)错误;returns正确:returns;解析:该程序的流程是,fun()程序对f(n)项循环累加,fun()程序采用条件选择语句计算函数f(x)的值。本题错误在于未定义函数f(doublex)的返回值类型。C语言规定,在未显式声明的情况下,函数返回值默认为int型。

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

intmax(intx,inty)

{...}

相当于:

温馨提示

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

评论

0/150

提交评论