2023年四川省攀枝花市全国计算机等级考试C语言程序设计模拟考试(含答案)_第1页
2023年四川省攀枝花市全国计算机等级考试C语言程序设计模拟考试(含答案)_第2页
2023年四川省攀枝花市全国计算机等级考试C语言程序设计模拟考试(含答案)_第3页
2023年四川省攀枝花市全国计算机等级考试C语言程序设计模拟考试(含答案)_第4页
2023年四川省攀枝花市全国计算机等级考试C语言程序设计模拟考试(含答案)_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

2023年四川省攀枝花市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、2.填空题(10题)1.本程序用改进冒泡法对数组a[n]的元素从小到大排序,请在程序空白处填空。

voidbubble(inta[],intn)

{intj,k,jmax,temp;

jmax=【】;

do{

k=0;

for(j=0;j<jmax;j++)

if(a[j]>a[j+1])

{temp=a[j];a[j]=a[j+1];a[j+1]=temp;k=【】;

jmax=k;

}while(jmax>0);}

2.为建立如下图所示的存储结构(即每个结点两个域,p是指向结点的指针域,data用以存放整型数),请将定义补充完整。

pdata

a

structlist

{【】;intdata;}a;

3.若a是int型变量,且a的初值为4,则计算a+=a-=a*a表达式后a的值为______。

4.以下sum函数的功能是计算下列级数之和。请给函数中的各变量正确赋初值。

doublesum(doublex,intn)

{inti;doublea,b,s;

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

{a=a*x;b=b*i;s=s+a/b;}

returns;

}

5.设一棵完全二叉树共有700个结点,则在该二叉树中有【】个叶子结点。

6.下面程序的运行结果:【】。

intf(inta[],intn)

{if(n>1)returna[0]+f(&a[1],n-1);

elsereturna[o];

}

main()

{intaa[3]={1,2,3},s;

s=f(&aa[0],3);printf("%d\n",s);

}

7.在C语言中,while和do…while循环的主要区别是______的循环至少被执行一次。

8.以下程序中给指针p分配3个double型动态内存单元,请填空。

#include<stdllb.h>

main()

{double*p;

p=(double*)malloc(【】);

p[0]=1.5;p[1]=2.5;p[2]=3.5

printf("%f%f%f\n",p[0],p[1],p[2]);

}

9.软件维护活动包括以下几类:改正性维护、适应性维护、【】维护和预防性维护。

10.以下说明语句中,【】是结构体类型名。

typedefstruct

{intn;

charch[8];

}PER;

二、单选题(10题)11.有下列程序:程序执行后的输出结果是()。A.11B.43C.57D.53

12.字符组a[20]和b[20],下面正确的输出语句是()。A.put(a,b)

B.prinf(“%s,%s”,a[],b[])

C.putchar(a,b)

D.puts(a);puts(b)

13.在深度为5的满二叉树中,叶子结点的个数为()。

A.31B.32C.16D.15

14.以下不能对二维数组a进行正确初始化的语句是()。A.inta[2][3]={0};

B.inta[2][3]={{1,2},{3,4},{5,6}};

C.inta[][3]={{1,2},{0}};

D.inta[][3]={1,2,3,4,5,6};

15.C语言的逻辑表达式在特定情况下会产生“短路”现象。若有逻辑表达式“x++&&y++,”则以下叙述中正确的是()。

A.若x的值为0,则“y++”操作被“短路”,y值不变

B.若x的值为1,则“y++”操作被“短路”,y值不变

C.若y的值为0,则“&&”运算被“短路”,y值不变

D.若y或x的值为0,则表达式值为0,“x++”和“y++”均不执行

16.设有如下定义:structsk{inta;floatb;}data;int*p;若要使p指向data中的a域,正确的赋值语句是()

A.p=&a;B.p=data.a;C.p=&data.a,D.*p=data.a;

17.以下有4组用户标识符,其中合法的一组是()。

A.FOr-subCase

B.4dDOSize

C.f2_G3IFabc

D.WORDvoiddefine

18.已有定义:charc;,程序前面已在命令行中包含ctype.h文件,不能用于判断c中的字符是否为大写字堪的表达式是()。

A.isupper(c)B.A<=c<=ZC.A<=c&&c<=ZD.c<=(z-32)&&(a-32)<=c

19.若有定义int(*pt)[3];,则下列说法正确的是A.定义了基类型为int的三个指针变量

B.定义了基类型为int的具有三个元素的指针数组pt

C.定义了一个名为*pt、具有三个元素的整型数组

D.定义了一个名为pt的指针变量,它可以指向每行有三个整数元素的二维数组

20.软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是()。

A.学生成绩管理系统B.C语言编译程序C.UNIX操作系统D.数据库管理系统

三、程序设计题(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(),该函数的功能是将s所指字符串中ASCII值为偶数的字符删除,字符串中剩余字符形成一个新字符串并将其存放在t所指的数组中。例如,若s所指字符串中的内容为“ABCDEFG123456”,其中字符B的ASCII值为偶数,字符2的ASCII值为偶数,都应当删除,其他依此类推。最后t所指的字符串中的内容应是“ACEG135”。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include<stdlib.h>#include<stdio.h>#include<string.h>#include<conio.h>voidfun(char*s,chart[]){}voidmain(){ chars[100],t[100]; system(“CLS”); printf(“\nPleaseenterstrings:”); scanf(“%s”,s); fun(s,t); printf(“\nTheresultis:%s\n”,t);}

23.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,定义了NxN的二维数组,并在主函数中自动赋值。请编写函数fun(),该函数的功能是使数组上三角元素中的值乘以m。若m的值为2,a数组中的值为197238456则返回主程序后a数组中的值应为2181426164512注意:部分源程序在文件prog1.c中。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:1#include2#include3#include4#include5#defineN56voidfun(inta[][N],intm)7{89}10main()11{12inta[N][N],m,i,j;13FILE*out;14printf("***Thearray***\n");15for(i=0;i<n;i++)16{for(j=0;j<n;i++)27{for(j=0;j38{for(j=0;j<n;j++)39fprintf(out,"%4d",a[i][j]);40fprintf(out,"\n");41}42fclose(out);43/*********found********/44}1voidfun(inta[][n],intm)2{3inti,j;4for(j=0;j<n;j++)5:for(i=0;i<=j;i++)6:a[i][j]=a[i][j]*m;/*上三角元素中的值乘以m*/

24.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun(),其功能是实现B=A+AT,即将矩阵A加上A的转置,结果存放在矩阵B中。计算结果在main()函数中输出。举例如下。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#include<conio.h>#include<stdlib.h>voidfun(inta[3][3],intb[3][3]){}voidmain(){ inta[3][3]={{1,2,3},{4,5,6},{7,8,9}},t[3][3]; inti,j; system(“CLS”); fun(a,t); for(i=0;i<3;i++) { for(j=0;j<3;j++) printf(“%7d”,t[i][j]); printf(“\n”); }}

25.假定输入的字符串中只包含字母和*号。请编写函数proc(),它的功能是:使字符串中前部的*号不得多余m个;若多余m个,则删除多余的*号;若少于或等于m个,则什么也不做,字符串中间和尾部的*号不删除。例如,字符串中的内容为****A*BC*DEF*G****,若m的值为2,删除后,字符串中的内容则应当是**A*BC*DEF*G****;若m的值为4,则字符串中的内容仍为****A*BC*DEF*G****。n的值在主函数中输入。在编写函数时,不得使用c语言提供的字符串函数。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。试题程序:

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

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

28.学生的记录由学号和成绩组成,M名学生的数据已在主函数中放入结构体数组stu中,请编写函数proc(),它的功能是:把分数最低的学生数据放在h所指的数组中。注意:分数低的学生可能不止一个。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。试题程序:

29.请编写一个函数proc,它的功能是:求出1~m(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。

例如,若传给m的值为70,则程序输出:

7111421222833354244495556636670

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

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

试题程序:

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

#defineN100

voidproc(intm,int*a,int*n)

{}

voidmain

{

intarr[N],n,k;

system("CLS");

proc(70,arr,&n);

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

if((k+1)%20==0)//每行输出20个数

{printf("%4d",arr[k]);

printf("\n");

}

else

printf("%4d",arr[k]);

printf("\n");

}30.使用vc++2010打开文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun(),其功能是在一组得分中,去掉一个最高分和一个最低分,然后求平均值,并通过函数返回该值。函数形参a指向存放得分的数组,形参n中存放得分个数(n>2)。例如,若输入8.4共10个得分,则输出结果为8.687500。注意:部分源程序存放在文件prog1.c中,请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。试题程序:四、2.程序修改题(10题)31.已知一个数列从0项开始的前3项:0,0,1,以后的各项都是其相邻的前3项之和。下列给定的程序中,函数fun()的功能是:计算并输出该数列前n项的和sum。n的值通过形参传入。例如,当n=10时,程序的输出结果应为96.000000。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

doublefun(intn)

{

doublesum,S0,S1,S2,S;

intk;

sum=1.0;

if(n<=2)

sum=0.0;

s0=0.0;

s1=0.0;

s2=1.0;

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

for(k=4;k<n;k++)

{

S=S0+S1+s2;

Sum+=s;

S0=s1;

S1=s2;

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

S2=S;

returnsum;

}

main()

{

intn;

clrscr();

printf("InputN=");

scanf("%d",&n);

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

}

32.下列给定程序中函数fun()的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。例如,当s中的数为7654321时,t中的数为642。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

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

voidfun(longs,longt)

{longs1=10;

s/=10;

*t=s%10;

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

while(s<0)

{s=s/100;

*t=s%10*s1+*t;

s1=s1*10;

}

}

main()

{longs,t;

clrscr();

printf("\nPleaseenters:");scanf

("%ld",&s);

fun(s,&t);

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

}

33.下列给定程序中,函数fun()的功能是:在字符串str中找出ASCII码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。例如,调用fun()函数之前给字符串输入ABCDeFGH,调用后字符串中的内容为eABCDFGH。

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

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

试题程序:

#include<stdio.h>

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

fun(char*p)

{charmax,*q;inti=0;

max=p[i];

while(p[i]!=0)

{if(max<p[i])

{

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

p=q+i;max=p[i];

}

i++;

}

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

while(q<p)

{*q=*(q-1);

q--;

}

p[0]=max;

}

main()

{charstr[80];

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

printf("\nTheoriginalstring:");

puts(str);

fun(str);

printf("\nThestringaftermoving:");

puts(str);printf("\n\n");

}

34.给定程序MODll.C中函数fun的功能是:先将s所指字符串中的字符按逆序存放到t所指字符串中,然后把s所指串中的字符按正序连接到t所指串的后面。

例如:当s所指的字符串为:“ABCDE”时,则t所指的字符串应为:“EDCBAABCDE”。

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

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

35.给定程序MODll.C中函数fun的功能是:将十进制正整数m转换成k(2≤k≤9)进制数,并按高位到低位顺序输出。

例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。

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

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

36.下列给定程序中,函数fun()的功能是;利用插入排序法对字符串中的字符按从小到大的顺序进行排序。插入法的基本方法是:先对字符串中的头两个元素进行排序,然后把第3个字符插入到前两个字符中,插入后前3个字符依然有序;再把第4个字符插入到前3个字符中,待排序的字符串已在主函数中赋予。

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

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

试题程序:

#include<String.h>

#include<stdio.h>

#defineN80

voidinsert(char*aa)

{ihti,j,n;charch;

n=strlen(aa);

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

/**********************************/

{c=aa[i];

j=i-1;

while((j>=0)&&(ch<aa[j]))

{aa[j+l]=aa[j];

j--;

}

aa[j+l]=ch;

}

}

main()

{chara[N]="QWERTYUIOPASDFGHJKIMNBVCXZ";

inti;

printf("Theoriginalstring:%s\n",a);

insert(a);

printf("Thestringaftersorting:

%s\n\n",a);

}

37.下列给定程序中函数fun()的功能是:求出字符串中最后一次出现的子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。例如,当字符串中的内容为abcdabfabcdx,t中的内容为ab时,输出结果应是abcdx。当字符串中的内容为abcdabfabcdx,t中的内容为abd时,则程序输出未找到的信息:Notfound!

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

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

试题程序:

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

}

main()

{chars[100],t[100],,*p;

clrscr();

printf("\nPleaseenterstringS:");

scanf("%s",s);

printf("\nPleaseentersubstringt:");

scanf("%s",t);

p=fun(S,t);

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

elseprintf("\nNotfound!\n");

}

38.下列给定程序中,函数fun()的功能是:利用插入排序法对字符串中的字符按从大到小的顺序进行排序。插入法的基本方法是:先对字符串中的头两个元素进行排序,然后把第3个字符插入到前两个字符中,插入后前3个字符依然有序;再把第4个字符插入到前3个字符中,待排序的字符串已在主函数中赋予。

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

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

试题程序:

#include<string.h>

#include<stdio.h>

#defineN80

voidinsert(char*aa)

{

inti,j,n;charch;

n=strlen(aa);

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

{

ch=aa[i];

j=i-1;

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

while((j>=0)||(ch>aa[j]))

{

aa[j+1]=aa[j];

j--;

}

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

aa[j]=ch;

}

}

main()

{

chara[N]="JRTYDFKLIOPQWEGHMNBVCUASXZ";

inti;

printf("Theoriginalstring:%S\n",a);

insert(a);

printf("Thestringaftersorting:%S\n\n",a);

}

39.下列给定程序中,函数fun()的功能是:从n个学生的成绩中统计出高于平均分的学生人数,人数由函数值返回,平均分存放在形参aver所指的存储单元中。例如输入8名学生的成绩:

8565.56995.5875562.575

则高于平均分的学生人数为4(平均分为74.312500)。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

#defineN20

intfun(float*S,intn,float*aver)

{

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

intave,t=0;

intcount=0,k,i;

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

t+=s[k];

ave=t/n;

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

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

if(s[i]<ave)

count++;

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

aver=ave;

returncount;

}

main()

{

floatS[30],aver;

intm,i;

clrscr();

printf("\nPleaseenterm:");

scanf("%d",&m);

printf("\nPleaseenter%dmark:\n",m);

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

scanf("%f",s+i);

printf("\nThenumberofstudents:%d\n",

fun(S,m,&aver));

printf(“AVe=%f\n”,aver);

}

40.下列给定程序中,函数fun()的功能是找出100~n(n不大于1000)之间百位数字加十位数字等于个位数字的所有整数,把这些整数放在s所指的数组中,个数作为函数值返回。

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

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

试题程序:

#include<stdio.h>

#defineN100

intfun(int*s,intn)

{

inti,j,k,a,b,c;

j=0;

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

{

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

k=n;

a=k%10;

k/=10;

b=k%10;

c=k/10;

if(a==b+c)

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

s[j]=i;

}

returnj;

}

main()

{

inta[N],n,num=0,i;

do

{

printf("\nEntern(<=1000):”);

scanf("%d",&n);

}

while(n>1000);

num=fun(a,n);

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

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

printf("%5d",a[i]);

printf("\n\n");

}

五、程序改错题(2题)41.下列给定程序中,函数ptoc的功能是:利用插入排序法对字符串中的字符按从小到大的顺序进行排序。插入法的基本方法是:先对字符串中的头两个元素进行排序,然后把第3个字符插入前两个字符中,插入后前3个字符依然有序;再把第4个字符插入前三个字符中,待排序的字符串已

在主函数中赋予。

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

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

试题程序:

#include<strin9.h>

#include<stdi0.h>

#defineM80

voidproc(char*arr)

{inti,j,n;charch;

n=strlen(arr):

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

//****found****

{c=arr[i];

j=i-1;

while((j>=o)&&(ch<arr[j]))

{

arr[j+1]=arr[j];

j--;

}

arr[j+1]=ch;

}

}

voidmain

{

chara[M]="QWERTYUIOPASDFGHJKLMNBVCXZ";

printf("Theoriginalstring:%s\n",a);

proc(a);

printf("Thestringaftersortin9:

%s\n\n",a);

}

42.下列给定程序中,函数proc()的功能是:在字符串的最前端加入m个*号,形成新串,并且覆盖原串。例如,用户输入字符串abcd(以Enter键结束),然后输入m值为3,则结果为***abcd。注意:字符串的长度最长允许为79。请修改函数proc()中的错误,使它能得出正确的结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。试题程序:

六、操作题(2题)43.观察题目要求,可以知道以下几点:}

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.n-1jn-1\r\nj解析:此题采用了do…while循环内嵌for循环的双层循环结构来实现了数组元素的排序。数组元素通过首地址和数组下标的方式来引用的。

2.structlist*nextstructlist*next解析:定义的指针类型变量next也应该是结构体类型的。

3.-24-24解析:本题考查赋值运算符a+=b等价于a=a+b;a-=a*a等价于a=a-a*a=4-4*4=-12;a+=a,即a=a+a=-24。

4.a=1;b=1;s=1;或a=b=s=1;或a=1.b=1s=1或给abs赋1或1.0或1.a=1;b=1;s=1;或a=b=s=1;或a=1.b=1,s=1或给a,b,s赋1或1.0或1.解析:sum函数的功能是求表达式s的级数之和,该函数的大致思路是:在该函数中,定义了—个整型变量i用作循环计数器,定义一个变量a用来表示各个子项的分子,初始为第一个子项的分子,故为1,定义了一个变量b用来表示各个子项大分母,初始为第一个子项的分母,故为1,定义一个变量s存放累加和,初始为第一个子项的值即为1,然后给各个定义的变量初始化,然后通过一个for循环将题目中的数学表达式的各个子项求出来并累加到s中,所以说,在该题的空格处应该填写将a、b和s赋初值的语句,即为a=1;b=1;s=1:(说明:语句的顺序可任意)或a=b=s=1;(说明:变量的顺序可任意)或a=1,b=1,s=1(说明:赋值表达式的顺序可任意)给a,b,s赋1或1.0或1都可以。

5.350350解析:在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。在根据完全二叉树的定义,在一棵完全二叉树中,最多有1个度为1的结点。因此,设一棵完全二叉树具有n个结点,若n为偶数,则在该二叉树中有n/2个叶子结点以及n/2-1个度为2的结点,还有1个是度为1的结点:若n为奇数,则在该二叉树中有[n/2]+1个叶子结点以及[n/2]个度为2的结点,没有度为1的结点。本题中,完全二叉树共有700个结点,700是偶数,所以,在该二叉树中有350个叶子结点以及349个度为2的结点,还有1个是度为1的结点。所以,本题的正确答案为350。

6.66解析:s=f(&aa[0],3)=aa[0]+aa[1]+aa[2]=1+2+3=6。

7.do…whiledo…while解析:考查while和do…while循环的主要区别。while循环的控制出现在循环体之前,只有当while后面的表达式的值为非零时,才可能执行循环体;在do…while构成的循环体中,总是先执行一次循环体,然后再求表达式的值,因此无论表达式的值是否为零,循环体至少要被执行一次。

8.3*sizeof(double)3*sizeof(double)解析:malloc(size)函数用于申请动态存储空间,故应填3个double型变量在内存中所占的字节数。while循环的功能把字符从第二个元素开始左移一位,并将原第一个元素赋给最后一个元素。

9.完善性软件维护活动包括以下几类:改正性维护,适应性维护、完善性维护和预防性维护,完善性维护是指为了满足用户对软件提出的新功能与性能要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性。

10.PERPER解析:本题中,typedef声明新的类型名PER来代替已有的类型名,PER代表上面指定的一个结构体类型,此时,也可以用PER来定义变量。

11.D函数f是一个递归函数。当x>=2时,递归调用自身,返回值为x*f(x-l)+(x-l)*f(x-2);3x<2时,返回值为1。main函数中,调用函数f传入4,所以y的值是f(4)。f(4)等价于4*f(3)+3*f(2);f(3)等价于3*f(2)+2*f(1);f(2)等价于2*f(1)+1*f(0);f(0)、f(1)等价于1。综上:f(2)等于3,f(3)等于11,f(4)等于53。本题答案为D选项。

12.D难易程度:中

13.C解析:二叉树的一个性质是,在二叉树的第k层上,最多有2(k-1)(k>=1)个结点。对于满二叉树,每一层上的结点数都达到最大值,即在满二叉树的第k层上有2k-1个结点。所以,在深度为5的满二叉树中,所有叶子结点在第5层上,即其结点数为2(k-1)=2(5-1)=16。

14.B选项A中,将二维数组a的6个元素都赋值为0,正确;选项B中,由于a包含2个元素,每个元素都是包含3个元素的一维数组,初始化列表中包含3个元素,每个元素是包含2个元素的数组,错误;选项C中,a的每个元素是包含3个元素的一维数组,初始化列表将a[0]的3个元素初始化为1,2,0,将a[1]的3个元素初始化为0,0,0,正确;选项D中,将a[0]初始化为1,2,3,将a[1]初始化为4,5,6,正确。本题答案为B选项。

15.A题干中,“x++&&y++”属于逻辑与表达式。仅当“x++”和“y++”的结果为真,整个逻辑表达式的结果才为真,否则整个表达式的结果为假。当“x++”的结果为0时,“y”就会被短路,即不再执行“y++”表达式,整个表达式的结果为假。所以当x的值为0时,“x”的结果也是0,“y”操作被“短路”,y值不变。故本题答案为A选项。

16.C解析:data是—结构体变量,a是它的成员,因此引用a域的正确方法是:data.a,取它的地址赋值给指针变量p的语句应该是:p=&data.a。选项A,将a的地址直接赋给了p,而忽略了a为结构体内部的一个成员,而不是一单独的变量,故选项A不正确;选项B在p=data.a表达式中右边为一个结构体变量的成员不是地址,而左边为一指针应该将一地址赋给它,故选项B不正确;选项D表达式*p=data.a是将结构体变量中的成员a的值赋给指针p所指向的变量值,而不是使指针p指向data中的a域,故选项D不正确:4个选项中只有C正确。

17.C解析:选项A中for和case为C语言中的保留字,不能作为用户标志符,故A错误。选项B中的4d其开头的第一个为数字,而在C语言中规定,第一个字符必须为字母或者下划线,故B错误;选项D中void为C语言中的保留字,不能作为用户标志符,故D错误。所以,4个选项中选项C符合题意。

18.B选项B先计算关系表达式“A<=c”的值是0还是l,再比较该值与字符z之间的大小关系,不能实现题目所要求的功能。

19.D解析:定义了一个指向一维数组的指针,该一维数组具有三个int型元素,按照C语言中二维数组的定义知,二维数组先按照行排列,再按照列排列,故选D。

20.A21.voidproc(char*str){char*p=str:while(*p==*)p++;//通过P的移动来达到使P指向第一个不是*号的字符for(;*p!=\0;p++,str++)//把从第一个不是*号的字符放到a中*str=*P:*str=\0;//最后用\0作为字符串结束标志}【解析】题目中要求将字符串中的前导*号全部删除首先将指针p移动到第一个不是*的字符,将指针P之后的字符放入原来的字符串中,并为新的字符串添加结束符。22.voidfun(char*s,chart[]){ inti=0; for(;*s!=‘\0’;s++) /*找出ASCII值为奇数的字符依次存入数组t中*/ if(*s%2==1) t[i++]=*s; t[i]=‘\0’; /*在字符串的末尾加上字符串结束标志*/}本题要求将s所指字符串中ASCII值为偶数的字符删除,因此本题要求采用一个for循环来找出ASCII值为奇数的字符,将其依次存入数组t中,并使用if条件语句来判断s所指字符串中ASCII值是否为奇数。将‘\\0’加在字符串的末尾来表示字符串的结束。要删除ASCII值为偶数的字符,也就是要留下ASCII值为奇数的字符。由于最终要求出剩余字符(即ASCII值为奇数)形成的新字符串,因此本题程序的算法是对原字符串从头到尾扫描,找出ASCII值为奇数的字符,并将其依次存入数组t中。此外,还要注意数组t的下标变化和下标的初值(初值必须为0,即i=0),t[i++]的作用是先使用t[i],然后再使i自增1。

23.1voidfun(inta[][n],intm)2{3inti,j;4for(j=0;j

<="">5for(i=0;i<=j;i++)6a[i][j]=a[i][j]*m;/*上三角元素中的值乘以m*/7}本程序实现的是:矩阵上三角元素的值乘以m。上三角元素下标的特点是行下标小于等于列下标,即“i<=j”使用循环语句遍历数组元素,第1个循环用于控制列坐标,第2个循环用于控制行下标。24.voidfun(inta[3][3],intb[3][3]){ inti,j; for(i=0;i<3;i++) for(j=0;j<3;j++) b[i][j]=a[i][j]+a[j][i];/*把矩阵a加上a的转置,存放在矩阵b中*/}行列数相等的二维数组的转置就是行列互换。即转置后的第i行第j列正好对应原矩阵的第j行第i列。本题使用两层循环实现矩阵的转置,并将计算结果存入矩阵b中,外层循环控制矩阵的行下标,内层循环控制矩阵的列下标。

25.

【解析】题目中要求字符串前部的*不得多于m,首先要计算出字符串前部的*号的个数,与变量m进行比较。当字符串前部的*多于m个时,删除多余的*。规定不能用字符串函数处理,可以通过移动字符串的首指针来实现。

26.

27.

【解析】要找出低于平均分数的学生记录,首先应该算出所有学生的平均成绩,然后将每一个学生的成绩与平均成绩相比较,将低于平均成绩的学生记录放入数组below中,最后将低于平均分的人数返回给主函数。

28.

【解析】要返回分数最低的学生个数,首先要找出学生中的最低分数。然后将各个学生的成绩与最低分数相比较,最后将分数最低的学生个数返回给主函数。

29.\n\tvoidproc(intm,int*a,int*n)

\n{

\ninti,j=0;

\nfor(i=1;i<=m;i++)//进行m次循环

\nif(i%7==0||i%11==0)//能被7或11整除的所有整数

\na[j++]=i;//符合条件的数放在数组a中

\n*n=j;//返回这些数的个数

\n}

\n【解析】本题需要先判断1~m每一个整数能否被7或11整除,然后将符合条件的整数放在数组a中,最后将符合条件的数的个数通过形参n返回主函数。\n30.1doublefun(doublea[],intn)Doublesum=0,max,min;inti;max=min=a[0];for(i=0;i<n;i++){</n;i++)<n;i++)sum=sum+a[i];</n;i++)if(max<a[i])max=a[i];<n;i++)if(min>a[i])min=a[i];</n;i++)<n;i++)sum=sum-max-min;</n;i++)<n;i++)return(sum/(n-2));</n;i++)<n;i++)}</n;i++)<n;i++)设定3个变量,sum存放和值,max存放最大值,min存放最小值。max和min都赋为数组中第1个元素的值。利用循环将数组中元素累加到sum中,并找出最大值和最小值。sum值减去最大值和最小值。函数返回sum除以(元素个数减2)得平均值。</n;i++)

31.(1)错误:for(k=4;k<n;k++)正确:for(k=4;k<=n;k++)(2)错误:s2=s;正确:s2=s;}(1)错误:for(k=4;k<n;k++)正确:for(k=4;k<=n;k++)\r\n(2)错误:s2=s;正确:s2=s;}解析:错误1:循环中包括k=n的情况,所以k要取到n之后才结束循环。错误2:for循环的语句要用大括号,在此处少了“}”,应添上。

32.(1)错误:voidfun(longslongt)正确:voidfun(longslong*t)(2)错误:while(s<0)正确:while(s>0)(1)错误:voidfun(longs,longt)正确:voidfun(longs,long*t)\r\n(2)错误:while(s<0)正确:while(s>0)解析:本题考查函数调用方式和while循环语句中条件限制的方法。主函数中fun()的调用方式说明fun()函数的参数应当为指针类型,所以voidfun(longs,longt)正确的写法应该是voidfun(longs,long*t)。

33.(1)错误:fun(char*p)正确:voidfun(char*p)(2)错误:p=q+i;正确:q=p+i;(3)错误:while(q<p)正确:while(q>p)(1)错误:fun(char*p)正确:voidfun(char*p)\r\n(2)错误:p=q+i;正确:q=p+i;\r\n(3)错误:while(q<p)正确:while(q>p)解析:本题解答需要3个步骤:

(1)找到字符串中ASCII码值最大的字符,并保存。

(2)将该字符复制,并将该字符前面的字符串顺次后移。

(3)将ASCII码值最大的字符赋给字符串的第1个字符。找到ASCII码值最大的字符可以通过定义一个字符max,该字符初始时等于字符串的第1个字符,若字符串的下一个字符大于max,则将下一个字符赋给max,如此循环到字符尾,即可得到ASCII码值最大的字符,同时令指针q指向最大字符。之后对最大字符前面的子串顺次后移,可采用while语句实现。

此题需要熟练掌握和灵活应用C语言的字符与整型变量的关系以及字符串操作。

34.(1)intisl;(2)t[i]=s、[sl-i-1];(1)inti,sl;(2)t[i]=s、[sl-i-1];解析:本题中函数的功能是先将字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。解题思路是首先对字符串进行逆序存放,然后再把字符串正序连接在串后。

35.(1)aa[i]=m%k;(2)printf("%d"aa[i-1]);(1)aa[i]=m%k;\r\n(2)printf("%d",aa[i-1]);解析:本题中函数的功能是将十进制正整数m转换成k(2≤k≤9)进制数。对于十进制转换成k进制数的一般算法是将这个数除以进制,取余反序输出。

36.错误:c=aa[i]正确:ch=aa[i];错误:c=aa[i]正确:ch=aa[i];解析:对长度为n的数组元素进行排列,可先对数组的前m-1项进行排序,之后再对前m项进行排序,如此循环直到数组全部元素完成排序。对

温馨提示

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

评论

0/150

提交评论