2022年四川省达州市全国计算机等级考试C语言程序设计预测试题(含答案)_第1页
2022年四川省达州市全国计算机等级考试C语言程序设计预测试题(含答案)_第2页
2022年四川省达州市全国计算机等级考试C语言程序设计预测试题(含答案)_第3页
2022年四川省达州市全国计算机等级考试C语言程序设计预测试题(含答案)_第4页
2022年四川省达州市全国计算机等级考试C语言程序设计预测试题(含答案)_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

2022年四川省达州市全国计算机等级考试C语言程序设计预测试题(含答案)学校:________班级:________姓名:________考号:________

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

intm=17;

intfun(intx,inty)

{intm=3;

return(x*Y-m);

}

main()

{inta=5,b=7;

printf("%d\n",fun(a,B)/m);

}

2.数据结构分为逻辑结构与存储结构,线性链表属于【】。

3.数据结构包括数据的逻辑结构、数据的【】以及对数据的操作运算。

4.strcmp函数的功能是【】。

5.设有以下程序,为使之正确运行,请在横线中填入应包含的命令行。(注:try_me()函数在a:\myfile.txt中有定义。)

______

main()

{printf("\n");

try_me();

printf("\n");}

6.下列程序的功能是将字符串s中所有的字符c删除。请填空。

#include<stdio.h>

main()

{chars[80];

inti,j;

gets(s);

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

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

s[j]='\0';

puts(s);

}

7.下列循环的循环次数是______。

intk=2;

while(k=0)

printf["%d",k);

k--;

printf("\n");

8.设有以下定义和语句:

inta[3][2]={1,2,3,4,5},*p[3];

p[0]=a[1];

则*(p[0]+1)所代表的数组元素是【】。

9.以下sum函数的功能是计算下列级数之和:

请给函数中的各变量正确赋初值。

doublesum(douLlex,intn)

{inti;

doublea,b,s;

【】

for(i=1;i<=n;i++){a=a*x;b=b*i;s=s+a/b;}

returns;

}

10.已知“inta=2,b=2,c=3;”,则执行完语句“a*=18+(b++)-(++C);”后,a的值是()。

二、单选题(10题)11.线性链表中结点的结构为(data,next)。已知指针p所指结点不是尾结点,若在*p之后插入结点*s,则应执行下列()操作。

A.s->next=p;p->next=s;

B.s->next=p->next;p->next=s;

C.s->next=p->next;p=s;

D.p->next=s;s->next=p;

12.以下关于C语言的叙述中正确的是()。

A.C语言中的注释不可以夹在变量名或关键字的中间

B.C语言中的变量可以在使用之前的任何位置进行定义

C.在C语言算术表达式的书写中,运算符两侧的运算数类型必须一致

D.C语言的数值常量中夹带空格不影响常量值的正确表示

13.有下列二叉树.对此二叉树前序遍历的结果为()。

A.ACFXDBEYZB.ABEFXYZCDC.ABCDEFXY7D.ABDYECFXZ

14.下列标识符不是关键字的是()。

A.breakB.charC.SwithchD.return

15.假设线性表的长度为n,则在最坏情况下,冒泡排序需要的比较次数为

A.log2nB.n2C.O(n1.5)D.n(n-1)/2

16.

17.有以下程序:#include<stdio.h>main(){structSTU{charname[9];charsex;doublescore[2];};structSTUa={“Zhao”,‘m’,85.0,90.0},b={“Qian”,‘f’,95.0,92.0};b=a;printf(“%s,%c,%2.0f,%2.0f\n”,,b.sex,b.score[0],b.score[1]);}程序的运行结果是()。

A.Qian,m,85,90B.Zhao,m,85,90C.Zhao,f,95,92D.Qian,f,95,92

18.有以下程序,程序中库函数islower(ch)用以判断ch中的字母是否为小写字母:

程序运行后的输出结果是()。

A.abcdEFg!B.AbCdEFg!C.abcdEFG!D.aBcDEFG!

19.下列程序的输出结果是()。

intf1(intx,inty){returnx>y?x:y;}

intf2(intx,inty){returnx>y?y:x;}

main()

{inta=4,b=3,c=5,d=2,e,f,g;

e=f2(f1(a,B),f1(c,D));

f=f1(f2(a,B),f2(c,D));

g=a+b+C+d-e-f;

phntf("%d,%d,%d\n",e,f,g);

}

A.4,3,7B.3,4,7C.5,2,7D.2,5,7

20.

三、程序设计题(10题)21.使用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”); }}

22.

23.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun(),该函数的功能是统计一行字符串中单词的个数,并将其作为函数值返回。字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。注意:部分源程序在文件prog1.c中。请勿改动main()函数和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:1#include<string.h>2#include<stdio.h>3#defineN804intfun(char*s)5{67}8voidmain()9{10FILE*wf;11charline[N];12intnum=0;13printf("Enterastring:\n");14gets(line);15num=fun(line);16printf("Thenumberofwordsis:%d\n\n",num);17/*********found*********/18wf=fopen("out.dat","w");19fprintf(wf,"%d",fun("abigcar"));20fclose(wf);21/*********found*********/22}

24.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun(),该函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。例如,若二维数组中的值为13579299946999813570则函数值为61。注意:部分源程序在文件prog1.c中。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:1#include2#include3#include4#defineM45#defineN56intfun(inta[m][n])7{89}10voidmain()11{12FILE*wf;13intaa[M][N]={{1,3,5,7,9},{2,9,9,9,4},{6,9,9,9,8},{1,3,5,7,0}};14inti,j,y;15system("CLS");16printf("Theoriginaldatais:\n");17for(i=0;i<m;i++)18{for(j=0;j<n;j++)19printf("%6d",aa[i][j]);20printf("\n");21}22y=fun(aa);23printf("\nThesum:%d\nM,y);24printf("\n");25/******************/26wf=fopen("out.dat","w");27fprintf(wf,"%d",y);28fclose(wf)29/******************/30}

25.请编写一个函数voidproc(chara[],charbE3,intn),其功能是:删除一个字符串中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。例如,输入一个字符串student,然后输入5,则调用该函数后的结果为studet。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。试题程序:

26.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun(),其功能是将M行N列的二维数组中的数据,按列的顺序依次存放到一维数组中,将一维数组中数据的个数存放在形参n所指的存储单元中。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>voidfun(int(*s)[10],int*b,int*n,intmm,intnn){}main(){intw[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j;inta[100]={0},n=0;printf(“Thematrix:\n”);for(i=0;i<3;i++){for(j=0;j<4;j++)printf(“%3d”,w[i][j]);printf(“\n”);}fun(w,a,&n,3,4);printf(“TheAarray:\n”);for(i=0;i<n;i++)<p=""></n;i++)<>printf(“%3d”,a[i]);}

27.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun(),其功能是找出一维整型数组元素中最大的值及其所在的下标,并通过形参传回。数组元素中的值已在主函数中赋予。主函数中x是数组名,n表示x中的元素个数,max存放最大值,index存放最大值所在元素的下标。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:#include<time.h>#include<stdlib.h>#include<stdio.h>voidfun(inta[],intn,int*max,int*d){}voidmain(){ inti,x[20],max,index,n=10; srand((unsigned)time(NULL)); for(i=0;i<=n;i++) { x[i]=rand()%50; printf(“%4d”,x[i]); /*输出一个随机数组*/ } printf(n\nH); fun(xfnf&max,&index); printf(“Max=%5d,Index=%4d\n”,max,index);}

28.请编写函数fun,其功能是:找出2×M整型二维数组中最大元素的值,并将此值返回调用函数。

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

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

29.请编写函数proc,其功能是将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数个位和十位上,b数的十位和个位数依次放在c数的百位和千位上。例如,当a=25,b=43,实际输入时个数之间以Enter键分隔,调用该函数后,c=3452。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。试题程序:

30.请编写fun函数,其功能是:计算并输出3~m所有素数的平方根之和。

例如,若主函数从键盘给m输入50后,则输出为s=68.665791。

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

注意:m的值要大于2但不大于100。部分源程序给出如下。

试题程序:

#include<math.h>

#include<stdio.h>

doublefun(intm)

{}

voidmain

{

intm;

doubles;

FILE*out:

printf("\n\nInputm:");

scanf("%d",&m);

s=fun(m);

printf("\n\ns=%f\n\n",s);

ut=fopen("outfile.dat","w");

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

fprintf(out,"%f\n",fun(m+80));

felose(out);

}四、2.程序修改题(10题)31.下列给定程序中,函数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);

}

32.给定程序MODll.C中函数fun的功能是:求三个数的最小公倍数。

例如,给主函数中的变量x1、x2、x3分别输入15112,则输出结果应当是:330。

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

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

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

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#defineMAXLINE20

voidfun(char*pstr[6])

{

inti,j;

char*p;

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

for(j=i+1;j<6;j++)

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

if(strcmp((pstr+i),(pstr+j))<0)

{

p=*(pstr+i);

*(pstr+i)=*(pstr+j);

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

*(pstr+j)=*p;

}

}

main()

{

inti;

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

clrscr();

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

pstr[i]=str[i];

printf("/nEnter6string(1stringateachline):\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]);

}

34.下列给定的程序中,函数fun()的功能是:用选择法对数组中的n个元素按从大到小的顺序进行排序。请改正程序中的错误,使它能得到正确结果。

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

试题程序:

#include<stdio.h>

#defineN20

voidfun(inta[],intn)

{

inti,j,t,p;

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

for(j=0;j<n-1;j++);

{

p=j;

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

if(a[i)>a[p])

p=i;

t=a[p];

a[p]=a[i];

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

a[p]=t;

}

}

main()

{

inta[N]={11,32,-5,2,14},i,m=5;

printf(“排序前的数据:”);

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

printf(“%d”,a[i]);

printf(“\n”);

fun(a,m);

printf(“排序后的顺序:”);

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

printf(“%d”,a[i]);

printf(“\n”);

}

35.下列给定程序中,函数fun()的功能是:依次取出字符串中所有的字母,形成新的字符串,并取代原字符串。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

voidfun(char*S)

{

inti,j;

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

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

if((s[i]>='A'&&s[i]<='Z')&&(s[i]>='a'&&S[i]<='z',))

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

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

s[j]=“\0”;

}

main()

{

charitem[80];

clrscr();

printf(“\nEnterastring:”);

gets(item);

printf(“\n\nThestringis:\%S\n",item);

fun(item);

printf("\n\nThestringofchanging

is:\%S\n",item);

}

36.下列给定程序中,函数fun()的功能是:统计字符串substr在字符串srt中出现的次数。例如,若字符串为aaas1kaaas,子字符串为as,则应输出2。

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

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

试题程序:

#include<stdio.h>

fun(char*str,char*substr)

{inti,j,k,num=0;

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

for(i=0,str[i],i++)

for(j=i,k=O;substr[k]==str[j];k++,j++)

if(substr[k+l]=='\0')

{num++;

break;

}

returnnum;

}

main()

{charstr[80],substr[80];

printf("Inputastring:");

gets(str);

printf("Inputasbustring:");

gets(substr);

printf("%d\n",fun(str,substr));

37.下列给定程序中,函数fun()的功能是:从3个红球,5个白球,6个黑球中任意取出8个作为一组,进行输出。在每组中,可以没有黑球,但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是15。程序中i的值代表红球数,j的值代表白球数,k的值代表黑球数。

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

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

试题程序:

#include<stdio.h>

intfun()

{inti,j,k,sum=0;

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

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

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

{for(j=1;j<=5;j++)

{k=8-i-j;

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

if(k>=1&&k<=6)

{sum=sum+1;

printf("red:%4dwhite:%4d

black:%4d\n",i,j,k);

}

)

}

returnsum;

}

main()

{intsum;

sum=fun();

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

}

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

}

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.下列给定程序中,函数fun()的功能是:根据整型形参m的值,计算如下公式的值。

t=1-1/(2×2)-1/(3×3)-…-l/(m×m)

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

doublefun(intm)

{doubley=1.O;

inti;

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

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

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

y-=1/(i*i);

return(y);

}

main()

{intn=5;

clrscr();

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

}

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

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

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

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

试题程序:

42.写出下列程序的运行结果。

fun(inta,intb)

{if(a>b)return(a);

Elsereturn(b);}

main

{intx=3,y=8,z=6,r;

r=fun(fun(x,y),2*z);printf(“%d\n”,r);}

六、操作题(2题)43.某学生的记录由学号、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);

/*输出平均分*/

}

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.11解析:本题考查局部变量和全局变量的区别:局部变量是指作用域在函数级和块级的变量,全局变量是指作用域在程序级和文件级的变量。本程序首先定义了一个全局变量m=17,m=17的作用域在整个程序内。在fun函数内部定义了一个局部变量m=3,m=3的作用域仅在fun函数内部,通过fun函数返回两个形参的积再减m。在主函数中,输出fun(a,b)/m=(5*7-3)/17=1。

2.存储结构

3.存储结构数据结构包括3个方面,即数据的逻辑结构、数据的存储结构及对数据的操作运算。

4.字符串的比较strcmp函数的原型是intstrcmp(char*s1,char*s2);功能是对s1和s2所指字符串进行比较,若s1<s2返回负数,若s1==s2返回0,若s1>s2返回正数。

5.#include<a:\myfile.txt>#include<a:\\myfile.txt>解析:本题考查了函数的存储分类的概念。如果没有特别说明,函数的存储范围是从定义函数的位置到文件的结尾,如果其他文件想使用这个函数,需要用ginclude文件包含命令将定义函数的文件包含进来。

6.S[j++]=s[i]S[j++]=s[i]解析:循环开始后如果数组s中储存值与字符c相同,则i++直接跳过当前值;如果不相同,则将当前值赋予数组指定位置,并通过j++将下标加1,指向下一元素要存储的位置。

7.00解析:解答本题需要注意表达式“k=0”,它是赋值表达式而不是关系表达式,不论k为何值,表达式k=0总会使k为0,所以不能进入循环。

8.a[1][1]a[1][1]解析:p是一个指针数组,p[0]指向数组a[1][0]。*(p[0]+1)代表数组a[1][1]。

9.a=1.0;b=1.0;s=1.0;a=1.0;b=1.0;s=1.0;解析:各种数值型数据间进行混合运算时,不同类型的数据要先转换成同一类型,再进行运算。本题的结果为double型。

10.32

11.B

12.B解析:C语言中注释可以放在任何位置,选项A错误;C语言中的变量只要在使用之前定义即可,位置可以是使用前的任何位置,故选项B正确;C语言中两侧数据类型可以不一致,系统可进行强制类型转换,选项C错误;C语言数值常量中不允许存在空格,选项D错误。

13.D

\n所谓二叉树的前序遍历是指先访问根结点,访问左子树,最后访问右子树,本题中序为DYBEAFCZX,后序为YDEBFZXCA。

\n

14.C在C语言中,字母区分大小,所以break、char、return、switch都是C语言中的关键字,而Swithch不是。

15.D解析:假设线性表的长度为n,则在最坏情况下,冒泡排序要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n-1)/2。

16.D

17.B在main函数中将结构体变量a赋值给变量b。输出结构体变量b的值为:Zhao,m,85,90。故本题答案为8选项。

18.D调用缸函数后,实参数组名sl传给形参指针P,P也指向数组sl。m函数的功能是遍历字符数组中的所有字符,如果某一个字符是空格并且前一个字符是小写字母的话,就把前一个字符转换为大写。程序中语句P[i一1]=P[i—1]一ga’+-A‘;即P[i一1]=P[i一1]一32,意思是将P[i一1]中的字符转换为大写。因此D选项正确。

19.A解析:根据函数intf1(intx,inty){returnx>y?x:y;}和int馒(intx,inty){retumx>y?y:x;}的定义可知,如果x>y成立,则函数n返回x的值,函数C返回y的值。所以n(a,B=4,n(c,d)=5,C(a,B=3,f2(c,d)=2,故e=f2(4,5)=4,f=n(3,2)=3,g=4+3+5+2-4-3=7。

20.C

21.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。

22.23.Intfun(char*s){Inti,j=0;for(i=0;s[i]!=’\\o’/i++)if(s[i]!=’'&&(s[i+i]==’’||s[i+1]=='\\0'))/*如果一个字母的下一个字符为空格或者结束标记,则表示一个单词结束*/J++;_returnj;/*返回单词个数*/}要判断单词的个数,首先考虑怎样识别一个单词。如果一个字母的下一个字符为空格或者字符串结束标志,则表示一个单词结束。因此程序使用for循环语句遍历整个字符串,用if条件语句判断当前字符是否表示一个单词的结束。如果当前字符表示一个单词结束,则存放单词个数的变量加1,最后返回单词的个数。

24.1intfun(inta[M][N])2{3inti,j,sum=0;4for(i=0;i<m;i++)5for(j=0;j<n;j++)6if(i==o||i==M-1||j==0||j==N-1)/*只要下标中有一个为。或M-1或N-1,则它一定是周边元素*/7sum=sum+a[i][j];/*将周边元素相加*/8returnsum;9}本题采用逐一判断的方式求数组周边元素和。二维数组周边元素的规律是,其两个下标中一定有一个是0或M-1或N-1。程序中循环语句用来控制数组的行和列,条件语句用来判断数组元素是否为周边元素。

25.

【解析】按照题目中的要求,删除一个字符串中指定下标的字符。首先,将指定下标之前的字符放入字符数组b中,然后将指定下标之后的字符也放入字符数组b中,最后为新的字符数组b添加结束符。

26.voidfun(int(*s)[10],int*b,int*n,intmm,intnn){inti,j;for(j=0;j<nn;j++)/*将二维数组中的数据按列的顺序依次存入一维数组中*/for(i=0;i<=""p="">{b[*n]=*(*(s+i)+j);*n=*n+1;/*通过指针返回元素个数*/}}题目要求实现将二维数组元素存入一维数组。使用for循环语句来控制二维数组元素的下标,同时使用指针变量配合操作。可以用两个循环来处理问题,由于是按列的顺序取出,因此第1个循环用于控制列下标,第2个循环用于控制行下标。27.voidfun(inta[],intn,int*max,int*d){ inti; *max=a[0]; *d=0; for(i=l;i<=""p=""> if(*max<a[i]) {*max=a[i];*d=i;}}fun()函数形参max用来存放最大值,形参d用来存放最大值的下标。由于它们都是指针变量,因此在引用所指向的变量时,要进行指针运算。循环语句用来遍历数组元素,找出最大值。条件语句用来判断该数组元素是否最大。28.

【考点分析】

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

【解题思路】

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

【解题宝典】

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

29.

【解析】按题目中的要求,要得到整数c,首先要得到整数a和b的个位和十位上的数,可以通过取余和整除来实现,再将其分别乘以1000,100,10,1就可以得到所要求的整数c。

30.\r\n\tintn,k,i;

doublesum=0.0;

for(n=3;n<=m;n++)//判断n是否为素数

{

k=sqrt(n);//求n平方根

for(i=2;i<=k:i++)

if(n%i==0)break;//如果n不是素数,跳出

if(i>=k+1)

sum+=sqrt(n);//求平方根的和

}

returnsum;

【解析】首先判断循环中n是否为素数,如果不是素数,求其平方根的累加和,并返回计算结果,否则跳出判断循环。其中,对于平方根的求解可以使用C语句中的sqrt函数。

31.(1)错误:while((j>=0)||(ch>aa[j]))正确:while((j>=0)&&(ch>aa[j]))(2)错误:aa[j]=ch;正确:aa[j+1]=ch;(1)错误:while((j>=0)||(ch>aa[j]))正确:while((j>=0)&&(ch>aa[j]))\r\n(2)错误:aa[j]=ch;正确:aa[j+1]=ch;解析:错误1:此处的两个条件要同时满足,是“与”的关系,而不是“或”的关系。错误2:对长度为n的数组元素进行排列,可先对数组的前m-1项进行排序,之后再对前m项进行排序,如此循环直到数组全部元素完成排序。对前m项的子数列进行排序的方法是,将该子数列的末尾元素与前m-1项的元素相比较,由于前m-1项已经完成排序,可以找到某一位置,使得将该末尾元素插入该位置之后,前m项仍然保持降序。这样循环后,就可以得到全部元素的排序。掌握了这个方法,这行的错误就很容易找出来了。

32.(1)intfun(intxintyintz)(2)returnj;(1)intfun(intx,inty,intz)(2)returnj;解析:本题中函数的功能是求三个数的最小公倍数。fun函数辛接收的值能同时被x、y、z除尽的最小数就是它们的最小公倍数。

33.(1)错误:if(strcmp((pstr+i)(pstr+j))<0)正确:if(strcmp(*(pstr+i)*(pstr+j))<0)(2)错误:*(pstr+j)=*p;正确:*(pstr+j)=p;(1)错误:if(strcmp((pstr+i),(pstr+j))<0)正确:if(strcmp(*(pstr+i),*(pstr+j))<0)\r\n(2)错误:*(pstr+j)=*p;正确:*(pstr+j)=p;解析:错误1:本题旨在考查指针的引用方法。*(pstr+i)指字符串中下标为i的字符。错误2:*p是字符类型,而*(pstr+j)是指针类型,二者不能进行赋值运算。

34.(1)错误:for(j=0;j<n-1;j++);正确:for(j=0;j<n-1;j++)(2)错误:a[p]=t正确:a[j]=t;(1)错误:for(j=0;j<n-1;j++);正确:for(j=0;j<n-1;j++)\r\n(2)错误:a[p]=t正确:a[j]=t;解析:错误1:根据C语言语法,for循环中循环条件后不加分号,除非做空操作。错误2:将两数进行交换的常用语句,借助第三个变量。

35.(1)错误:if(s[i]>='A'&&s[i]<='Z')&&(s[i]>='a'&&s[i]<='z'))正确:if((s[i]>='A'&&s[i]<='Z')||s[i]>='a'&&s[i]<='z'))(2)错误:s[j]="\0"正确:s[j]='\0'(1)错误:if(s[i]>=\'A\'&&s[i]<=\'Z\')&&(s[i]>=\'a\'&&s[i]<=\'z\'))\r\n正确:if((s[i]>=\'A\'&&s[i]<=\'Z\')||s[i]>=\'a\'&&s[i]<=\'z\'))\r\n(2)错误:s[j]='\\0'\r\n正确:s[j]=\'\\0\'解析:错误1:字母包括小写字母和大写字母,这里是“或”的关系,所以用“||”运算符。错误2:字符串的结束标志符为字符,而不是字符串。

36.错误:for(i=0srt[i]i++)正确:for(i=0;str[i];i++)错误:for(i=0,srt[i],i++)正确:for(i=0;str[i];i++)解析:从字符串s中找出子字符串的方法是:从第1个字符开始,对字符串进行遍历;若s串的当前字符等于t串的第1个字符,两字符串的

温馨提示

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

评论

0/150

提交评论