2022年山西省晋城市全国计算机等级考试C语言程序设计真题(含答案)_第1页
2022年山西省晋城市全国计算机等级考试C语言程序设计真题(含答案)_第2页
2022年山西省晋城市全国计算机等级考试C语言程序设计真题(含答案)_第3页
2022年山西省晋城市全国计算机等级考试C语言程序设计真题(含答案)_第4页
2022年山西省晋城市全国计算机等级考试C语言程序设计真题(含答案)_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

2022年山西省晋城市全国计算机等级考试

C语言程序设计真题(含答案)

学校:班级:姓名:考号:

一、2.填空题(10题)

1.以下程序的输出结果是____O

main()

{chars[]="abcdef";

s[3]='\0';

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

)

2.设有以下定义变量的语句,并且已赋确定的值,则表达式“W*X+Z-y”

所求得的数据类型为【】。

charw;intx;floaty;double2;

3.以卜函数sstrcat。的功能是实现宁符串的连接,即将t所指字符串复

制到s所指字符串的尾部。例如:s所指字符串为abed,t所指字符申为

efgh,函数调用后s所指字符串为abcdefgh。请填空。

#include<string.h>

voidsstrcat(char*s,char*t)

{intn;

n=strlen(s);

while(*(s+n)=){s++;t++;}

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

#include<stdio.h>

main()

inta[3][3]={{l,2,9},{3,4,8},{5,6,7}},i,s=0;

for(i=0;i<3;i++)s+=a[i][i]+a[i][3-i-l];

pfintf("%d\n",s);

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

main()

{inta=5,b=4,c=3,d;

d=(a>b>C);

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

)

6.若x为int类型,请写出与!x等价的C语言表达式o

7.下列程序的输出结果是____o

main()

{inta[]={31,27,20,12,6,l),*P=a;

P++;

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

}

8.设有定义:FILE*fw;,请将以下打开文件的语句补充完整,以便

可以向文本文件readme.txt的最后续写内容。

fw=fopen("readme.txt",[]);

9.下面程序的运行结果是【】。

#include<stdio.h>

#defineSIZE12

main()

{chars[SIZE];intI;fbr(I=O;I<SIZE;I++)s[I尸A,+I+321;

sub(s,7,SIZE-1);

for(I=0;I<SIZE;I++)printf("%c",s[I]);

printf("\n");}

sub(char*a,inttl,intt2)

{charch;

while(tl<t2)

{ch=*(a+tl);

*(a+tl)=*(a+t2);

*(a+t2)=ch;

tl++;t2—;}}

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

typedefstruct

{intn;

charch[8];

}PER;

二、单选题(10题)

H.程序中已构成如下不带头节点的单向链表结构,指针变量s、p、q均

已正确定义,并用于指向链表节点,指针变量s总是作为指针指向链表

的第1个节点。

datenext___________

s->a-------------»b---------»cNULL

若有以下程序段:

q=s;

s=s->next;

P=s;

while(p->next)p=p->next;

p->next=q;

q->next=NULL;

该程序段实现的功能是OO

A.删除尾节点B.使尾节点成为首节点C.删除首节点D.使首节点成为

尾节点

12.在一个无向图中,所有顶点的度数之和等于所有边数的。倍。

A.1/2B.1C,2D.4

13.有以下程序:

#include<stdio.h>

main()

{chara[5][10]={"China","beijing","very","welcome","you"};

char*p[5];inti;

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

{p[i]=*(a+i);

printf("%s”,p[i]);

printf("%c”,*p[i]);

)

)

程序运行后的输出结果是OO

A.wwyyB.ChinaCbeijingbC.veryvwelcomewD.welcomewyouy

14.有如下程序:

longfib(intn)

{if(n>2)return(fib(n-1)+fib(n-2));

elsereturn(2);

main()

{printf("%d\n",fib(3));}

该程序的输出结果是

A.A.2B.4C.6D.8

15.若有"doublea;",则正确的输入语句是()。

A.scanf("%lf",a);

B.scanf("%f',&a);

C.scanf("%lf',&a)

D.scanf("%le",&a);

16.有如下程序main(){inty=3,x=3,z=l

printf("%d%d\n",(++x,y++),z+2);}运行该程序的输出结果是一

A.34B.42C.43D.33

(1)算法的时间复杂度是指()。

A)算法的长度

B)执行算法所需要的时间

C)算法中的指令条数

17.D)算法执行过程中所需要的基本运算次数

18.有以下程序

#include<stdio.h>

intfun(intx,inty)

{if(x==y)return(x);

elsereturn((x+y)/2);

main()

{inta=4,b=5,c=6;

printf("%d\n",fun(2*a,fun(b,c)));

程序运行后的输出结果是

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

19.下列程序段的时间复杂度为()。

for(i=l,t=l,s=0;i<=n;i++){t=t*i;s=s+t;}

A.O(n)B.O(log2n)C.O(n3)D.O(n2)

20.设有定义“intk=0;”,以下选项的4个表达式中与其他3个表达式的

值不相同的是()。

A.++kB.k+—1C.k++D.k+1

三、程序设计题(10题)

21.学生的记录由学号和成绩组成,M名学生的数据已在主函数中放

人结构体数组stu中,请编写函数proc,它的功能是:把指定分数范围

之外的学生数据放在b所指的数组中,分数范围之外的学生人数由函

数值返回。

例如,输入的分数是70和79,则应当把分数低于70和高于79的学生

数据输出,不包含70分和79分的学生数据。主函数中把70放在low

中,把79放在heigh中。

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

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

号中填人所编写的若干语句。

试题程序:

#include<stdio.h>

#defineM16

typedefstruct

(

charnum[10];

ints:

)

STREC;

intproc(STREC*a,STREC*b,int1,inth)

(

)

voidmain

(

STRECstu[M]={{"GA005",55),{"GA003",96},

{"GA002",80),{"GA004",68),

{"GA001",88},{"GA007",74},

{"GA008",85),{"GA006",89},

{"GA015",90),{"GA013”,53),

{"GAO12",66},{"GAO14”,82),

{"GAOH",73},{"GA017",69),

{"GA018",64),{"GA016",86}};

STRECh[M];

inti,n,low,heigh,t;

printf("Enter2integernumberlow&

heigh:");

scanf("%d%d",&low,&heigh);

if(heigh<low)9

(-

t=heigh:

heigh=low;

low=t;

)

n=proc(stu,h,low,heigh);

printf("ThestudenfSdataout

%d—%d:\n",low,heigh);

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

printf("%S%4d\n",h[i].num,h[i].s);

//输出指定分数范围内的学生记录

printf("\n");

)

22.使用VC++2010打开考生文件夹下progl中的解决方案。此解决方

案的项目中包含一个源程序文件progl.c。在此程序中,请编写函数

fun(),它的功能是求出能整除x且不是偶数的整数,并将这些整数按从

小到大的顺序放在PP所指的数组中,总个数通过形参n返回。如x中

的值为30,则有4个数符合要求,它们是1、3、5、15。注意:部分源

程序在文件progl.c中。请勿改动主函数main()和其他函数中的任何内

容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:

1#include<conio.h>

2#include<stdio.h>

3#include<stdlib<h>

4voidfun(intxrintpp[],int*n)

6

噩}

8voidmain()

9{

10FILE♦wf;

11intxraa[1000],nri;

12system(WCLSM);

13printf(w\nPleaseenteran

integernumber:\nf,);

wn

14scanf(%dz&x);

15fun(x,aa,&n);

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

17printf("%d",aa[i]);

18printf(M\n");

19/♦♦*♦*♦♦♦♦found*♦♦**♦♦♦♦/

20wf=fopen("out.datM,MwM);

21fun(301aa,&n);

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

w

23fprintf(wfr%daa[i]);

24fclose(wf);

25/♦♦**♦*♦**found**♦♦♦**♦♦/

26}

23.

函数fun的功能是:将s所指字符串中下标为偶数同时ASCII值为奇数

的字符删除,S所指串中剩余的字符形成的新串放在t所指的数组中。

例如,若s所指字符串中的内容为“ABCDEFG12345”,其中字符C的

ASCII码值为奇数,在数组中的下标为偶数,因此必须删除;而字符1的

ASCII码值为奇数,在数组中的下标为奇数,因此不应当删除,其他依

此类推。最后t所指的数组中的内容应是"BDF12345"o

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

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号

中填入你编写的若干语句。

试题程序:

#include<stdio.h>

#include<string.h>

voidfun(char*s,chart[])

mmn()

charg[100],t[100];

printf(n\nPleaseenterstringS:");

s);

fun(s»t);

printf("\nThere«ultis:%s\n*\t);

24.

编写函数fun,其功能是:从字符串中制除指定的字符,同字母的大、小写按不同字符处理.

例如,若程序执行时输入字符串为:

MlurbocandBorland’

从键盘上输入字符n,则输出为:

,urhocadIxirladC++”

如果输入的字符在字符串中不存在,则字符串照原样输出。

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

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

试题程序:

#inrlude<stdio.h>

voidfun(chars(]jnt葡

f

).

main()

{staticcharstrfJ="turbocandboHandC++”;

rharrh:

charch:

printf(M原始字符串:%s\n,,.str);

printfr输入一个字符An”);

scanf「%c",&ch);

printf(Mstr[]=%s\n”str):

fitrepy(str,,rtuibocandIxirland(:++");

fun(str/a'):

25.请编写一个函数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+l)%20==0)//每行输出20个数

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

printf("\n");

1

else

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

printf("\n");

)

26.使用VC++2010打开考生文件夹下progl中的解决方案。此解决方

案的项目中包含一个源程序文件progl.c。在此程序中,请编写函数

fun(),其功能是统计s所指字符串中的数字字符个数,并将其作为函

数值返回。例如,s所指字符串中的内容是

2def35adh253kjsdf7/kj8655x,函数fun()返回值为11注意:部分源程序在

文件progl.c中。请勿改动主函数main。和其他函数中的任何内容,仅在

函数fun()的花括号中填入你编写的若干语句。试题程序:

tinclude<stdio.h>

voidNONO();

intfun(char*s)

(

)

main()

{char*s=H2def35adh253kjsdf

7/kj8655x";

w

printf(•,%s\nrs);

printf(M%fun(s));

NONO();

)

voidNONO()

{/♦本函数用于打开文件、输入数据、调

用函数、输出数据及关闭文件0*/

FILE*fp,♦wf;

inti;

chars[256];

MHnn

fp=fopen(in.datrr);

19wf=fopen(Mout.daf\Hww);

20

21for(i-0;i<10;i++){

22fgets(sf2559fp);

23

24fprintf(wf,fun(s));

25)

26

fclose(fp);

fclose(wf);

)

27.请编一个函数fun(ohlr*str),该函数的功能是把字符串中的内容逆置。

例如,字符串中原有的字符串为asdf9,则调用该函数后,串中的内容为

9fdsao

请勿改动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);

28.编程计算下列表达式:s=n!(n从键盘上输入)

29.输出1900〜2000年中所有的闰年。每输出3个年号换一行。(判断闰

年的条件为下面二者之一:能被4整除,但不能被100整除。或者能被

400整除。)

30.使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案

的项目中包含一个源程序文件progl.co此程序定义了NXN的二维数

组,并在主函数中自动赋值。请编写函数该函数的功能是使数组下三角

元素中的值乘以no

例如,若n的值为3,a数组中的值为

197

238

456

则返回主程序后,a数组中的值应为

397

698

121518

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

请勿改动函数main()和其他函数中的任何内容,仅在函数fun()的花括

号中填入你编写的若干语句。

试题程序:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineN5

voidfun(inta[][N],intn)

(

)

main()

{

inta[N][N],n,i,j;

printf("*****Thearray*****\n");

for(i=0;i<n;i++)<p=""x/n;i++)<>

(

for(j=0;j<=""p="">

(

a[i][j]=rand()%10;

printf("%4d'',a[i][j]);

}

printfCt\n^^);

)

n=rand()%4;

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

fun(a,n);

printf("*****TheResult*****\n");

for(i=0;i<=""p="">

for(j=0;j<=""p="">

printf("%4d”,a[i][jD;

printf

四、2.程序修改题(10题)

31.下列给定程序中,函数fun。的功能是:求整数x的y次方的低3位

值。例如,整数5的6次方为15625,此值的低3位值为6250

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

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

试题程序:

#include<stdio.h>

longfun(intx,inty,long*p)

{inti;

longt=l;

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

for(i=l;i<y;i++)

t=t*x;

*p=t;

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

t=t/1000;

returnt;

main()

{longt,r;intx,y;

printf("\nlnputxandy:");scanf

("%ld%ld",&x,&y);

t=fun(x,y,&r);

printf("\n\nx=%d,y=%d,r=%ld,last=

%ld\n\n",x,y,r,t);

32.给定程序中函数fun的功能是:根据整型形参m,计算如下公式的

值。

例如,若m中的值为5,则应输出:1.463611。

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

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

[试题源程序]

#include<stdiO.h>

doublefun(intm)

doubley=1.0;

inti;

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

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

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

y+=l/(i*i);

return(y);

main()

intn=5;

printf("\nTheresultis%lRn",fun(n));

33.给定程序中,函数fun()的功能是:使数组中的元素的值缩小5倍。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

floatm[10];

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

intfun(void)

(

intj;

printf("Insubfuncaftercalling\n");

for(j=O;j<10;j++)

print("%f",m[j]%5);

main()

(

inti;

printf("Inmainbeforecalling\n");

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

(

m[i]=i+20;

printf("%f",m[i]);

)

fun();

printf("\nlnmainaftercalling\n");

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

printf("%f",m[i]/5);

)

34.给定程序M0D11.C中函数。fun的功能是:从3个红球,5个白

球,6个黑球中任意取出8个作为一组,进行输出。在每组中,可以没

有黑球,但必须要有红球和白球。

组合数作为函数值返回。正确的组合数应该是15。程序中i的值代表红

球数,j的值代表白球数,k的值代表黑球数。

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

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

1♦include<stdio.h>

2intfun()

3(intifjrsum*0;

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

5♦♦♦fOuncj********♦***♦/

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

7(for(j»l;j<=5;j++)

8{k«8-i-j;

9/…★………found…………•/

10if(K>»0&&K<-6)

11{sum*sum4-l;

12printf("red:%4dwhite:

N

%4dblack:l4d\n,irjrk);

13

14

15

16returnsum;

17)

18main()

19{intsum;

20sum=fun();

M

21printf("sum»%4d\n\nrsum);

22

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)

{y=o;

for(j=2;j<=sqrt((double)i);j++)

if(i%j==0)y=0;

if(y==l)

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

{d=i-a;

for(j-2;j<=sqrt((double)d);

j++)

if(d%j==O)y=0;

if(y=-i)

{*b=i;*c=d;}

main()

{inta,b,c;

do

{printf("\nlnputa:");

scanf("%d",&a);}

while(a%2);

fun(a,&b,&c);

printf("\n\n%d=%d+%d\n",a,b,c);

36.给定程序M0D11.C中函数fun的功能是:求整数x的y次方的低

3位值。例如,整数5的6次方为15625,此值的低3位值为625。

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

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

;linclude<stdio.h>

2!longfun(intxrinty,long*p)

3i{inti;

4longt«l;

5I/*****★★♦♦♦*♦♦found*************/

i

6for(i-1;i<y;i++)

7

8*p-t;

9;/……•……found…………•/

10t-t/1000;

11returnt;

12

13main()

14{longt,r;intx,y;

15printf(M\nlnputxandy:H);

scanf(w%ld%ldw,&x,&y);

16t-fun(xry,&r);

H

17printf(\n\nx-»%dry-%d,r-%ldr

w

last«%ld\n\nrxryrr,t);

18

37.下列给定程序中,函数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]='\O';

main()

(

chars[80];

printf("\nEnterastring:");

gets(s);

printf("Theoriginalstring:");

puts(s);

fun(s);

printf("Thestringafterdeleted:");

puts(s);

printf("\n\n");

)

38.下列给定程序中,函数fun()的功能是:通过某种方式实现两个变量

值的交换,规定不允许增加语句和表达式。例如变量a中的值原为8,

b中的值原为3,程序运行后a中的值为3,b中的值为8。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

intfun(int*x,inty)

(

intt;

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

t=x;x=y;

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

return(y);

main()

{inta=3,b=8;

clrscr();

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

b=fun(&a,b);

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

39.给定程序MOD11.C中函数fun的功能是:计算n!。

例如,给n输入5,则输出120.000000。

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

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

1*include<stdio.h>

2doublefun(intn)

3{doubleresult-1.0;

4/************found****w******w/

5ifn-»0

6return1.0;

7while(n>14&n<170)

8/*♦♦******w**found************/

9result*■n--

10returnresult;

11)

12main()

13{intn;

14printf("InputN:w);

w

15scanf("%dr&n);

ww

16printf(\n\n%d!-%lf\n\nrnrfun(n));

17

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+l)/n;

n++;

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

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

returns;

main()

{clrscr();

printf("%Rn",fun(50));

五、程序改错题(2题)

41.

下列给定程序中,函数proc()的功能是:先从键盘上输入一个3行3

列的矩阵的各个元素的值,然后输出主对角线元素之和。

例如:检入123456789,则矩阵为123

456

789

的出为&jm=15.

请修改函数proc()中的错误,使它能得出正确的结果。注意:不要改

动main()函数,不得增行或删行,也不得更改程序的结构。试题程

序:

#include<stdio.h>

voidproc()

<

intarr[3j[3].sumi

inti.ji

//••••found••••

sum=Is

printf("pleaseinput3*3array:\n")i

for(i=0siV3si++)

(

for(j=O«j<3ij++)

//••••found••*•

M?anf(*%dH»arr[i][j])।

>

for(i=0ji<3<i-F+)

5um=xum+arr[i][i]i

printfC"Sum=%d\n"»sum>i

voidmain()

proc()i

42.

下列给定程序中,函数proc()的功能是:求S的值。设

$-(22/(1•3)>•(42'(3•$))•(62(S•7>>

•••••-1)•(2k♦

例如,当k为20时,函数的值应为1.551759。请修改程序中的错误,

使它能得出正确的结果。注意:不要改动main()函数,不得增行或

删行,也不得更改程序的结构。试题程序:

stfiduJeVstdio.h>

=mcludeVconeo.h>

9mclu4eVIL>

:includeVaih.h>

••found••

proHintk)

mtmfloat»•w«p.Q,

l.Ot

wtiikrCn<

2,0•m

p■■-LOi

q-w

w•wpqi

••found••

rrtum%

fvMMni*CI

ptmtlC

六、操作题(2题)

43.使用VC++2010打开考生文件夹下progl中的解决方案。此解决方

案的项目中包含一个源程序文件progl.c。在此程序中,已知学生的记

录由学号和学习成绩构成,N名学生的记录已存入a结构体数组中。

请编写函数fun(),该函数的功能是找出成绩最高的学生记录,通过形

参将其返回主函数(规定只有一个最高分)。已给出函数的首部,请

完成该函数。

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

请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花

括号中填入你编写的若干语句。

试题程序:

#include<stdlib.h>

#include<stdio.h>

#include<string.h>

#include<conio.h>

#defineN10

typedefstructss/*定义结构体*/

{charnum[10];

ints;

}STU;

fun(STUa[],STU*s)

voidmain()

(

STUa[N]={{“A01”,81},{“A02”,89},{“A03”,66},

{“A04”,87},{“A05”,77},{“A06”,90},{“A07”,79},

{“A08”,61},卜A09”,80},{“A10,,,71}},m;

inti;

system(“CLS”);

printf("****Theoriginaldata****");

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

printf("No=%sMark=%d\n”,a[i].num,a[i].s);

fun(a,&m);

printf("****THERESULT****\n");

printf("Thetop:%s,%d\n”,m.num,m.s);

44.请编写一个函数fun(),它的功能是:比较两个字符串的长度,(不

得调用C语言提供的求字符串长度的函数),函数返回较短的字符串。

若两个字符串长度相等,则返回第1个字符串。

例如,输入nanjing<CR>nanchang<CR>(<CR>为回车键),函数将

返回nanjingo

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

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括

号中填入所编写的若干语句。

试题程序:

#include<stdio.h>

char*fun(char*S,char*t)

(

)

main()

(

chara[20],b[10],*p,*q;

inti;

printf("Input1thstring:");

gets(a);

printf("Input2thstring:");

gets(b);

printf("%s”,fun(a,b));

)

参考答案

l.abcabc解析:字符串的结束标记'\\01,当输出一个存放在字符数组中

的字符串时,只需输出到‘\\0’为止,而不管其后有什么数据。本题给字符

数组S的元素s[3]赋值为NO1故只能输出3个字符“abc”。

2.double或双精度型double或双精度型

3.*t*t解析:函数中首先让n=stxlen(s)所以while循环的循环条件表达

式中*(s+n)指向字符串s的结束标志U,处,而该处应该等于字符串t的

第1个字符,另外循环体中让s和t指向下一个字符,即s+n和t同时

被移动到下一个位置,所以该处应该填*t,即t所指内容.当t指向字符

串结束标志'\\0'的时候,整个循环条件表达式的值也为0(“假”)了,循环

结束.正好满足将t所指字符串复制到s所指的字符串的尾部。

4.3030解析:当i=0时,s=0+a[0][0]+a[0][2]=10;i=l时,s=10+a[l][l]+

a[l][l]=18;i=2时,s=18+a[2][2]+a[2][0]=30o

5.00解析:关系运算符“>”的结合方式是从左向右的,所以在本题中的

表达式a>b=c;从左向右开始计算,a>b的结果为“1”,接着1和c比

较假,该空格处应该填0。

6.x==0x==0解析:!x的逻辑意思就是x为非,艮[]x==0o

7.1212解析:本题考查如何用指针引用数组元素。分析程序,首先定义

了一个指向数组a的指针p,p指向数组的首地址,通过P++,将p指

向a[l],p+2是将指针后移2位指向a[3],*(p+2)即是取a[3]的值12o

8.a

a解析:本题考查的是文件的打开方式。要向文本文件的末尾续写内

容,需要使用方式“a”(追加)打开文件。

9.abcdefglkjlhabcdefglkjlh解析:本题主要考查了字符变量

可参与的运算。因为字符在计算机中是以ASCII码的形式存放的,所以

字符变量可看作整型变量来处理,如参与算术运算等,某字符的大写字母

的ASCII码值比它对应的小写字母ASCII码值小32O

10.PERPER解析:本题中,typedef声明新的类型名PER来代替已有的

类型名,PER代表上面指定的一个结构体类型,此时,也可以用PER来

定义变量。

H.D程序中,指针s指向了它的下一个节点。题目中说明了s总是指向

链表的第1个节点。然后while循环找到链表的最后一个元素,最后一

个元素指向了之前链表的头节点,之前头节点指向了空节点。所以本题

实现的是使首节点成为尾节点。故本题答案为D选项。

12.C

13.Dmain函数定义一个二维字符数组a,它包含5个字符串,每个字符

串存放在一个长度为10的一维数组中。指针数组P包含5个字符指针

元素。for循环中,每次将*(a+i)赋给P[i],再输出P国和*P[i]。由于*(a+i)

等价于a田,因此每次都是将下标为i的字符串首地址赋给p[i],再输出

该字符串和该字符串的首字符。i=3时,输出字符串“welcome”和首字符

“W";i=4时,输出字符串“you”和首字符“歹。综上,输出结果为

welcomewyouyo故本题答案为D选项。

14.B

15.D解析:函数scanf()的调用形式是:scanf(格式字符串,输入项地址

表)。其中,“格式字符串”是要输入的变量的格式符;“输入项地址表”是

要输入的变量的地址。本题中定义变量a为双精度型变量,双精度变量

的格式符为“le”;变量的地址用取地址符加变量名表示,如变量a的

地址为“&a”。

16.D解析:逗号表达式(++x,y++)的值应该是y++的值,由于y++是先

引用后自增,所以y++的值是3。

17.D

18.B

19.A

20.C表达式“++k”是先使得k的值自增1后再使用。表达式“k++”是先

取得k的值再将k的值自增1。所以C选项中表达式的值为0,而其他

3个选项中表达式的值均为lo故本题答案为C选项。

21.\n\tintproc(STREC*a,STREC*b,inti,inth)\n

\n

\n\t{\n

\n

\n\tinti,j=0;\n

\n

\n\tfor(i=0;i<M;i++)\n

\n

\n\tif((a[i].s>=0&&a[i].s<l)||(a[i].s>h&&a\n

\n

\n\t[i].s<=100))//通过if语句,来判断指定范围⑦

\n

\n\t之外的数\n

\n

\n\tb[j++]=a[i];//放到b数组中\n

\n

\n\treturnj;//最后把其个数返回到主函数中\n

\n

\n\t}\n

\n

\n\t【解析】题目要求把指定范围之外的数放到b中,将每一个学生的

成绩与指定的成绩相比较,将符合条件的学生成绩放在数组b中,并

将符合要求的学生个数返回给主函数。\n

22.lvoidfun(intx,intpp[],int*n)

21

3inti,j=0;

4for(i=l;i<=x;i=i+2)/*i的初值为1,步长为2,确保i为奇数

*/5if(x%i==0)/*将能整除x的数存入数组pp中*/6pp[j++]=i;7*n=j;/*传

回满足条件的数的个数*/8}本题考查:偶数的判定方法;整除的实现。本

题题干信息:能整除X且不是偶数的所有整数。循环语句中变量i从1

开始且每次递增2,所以i始终是奇数。将能整除x的i值存放到数组

PP中,整除采用求余运算符“%”,即“x%i==O"。最后将数据元素个数j

保存到n中。

23.

【答案】

voidfun(char*s,chart(])

1“

inti,j=0;

for{i=0;i<strleti(s);i++)

优(。%2)=0&&(中]%2)))

币++广而];

肛=0;

I

【解析】

使用循环遍历字符串,将下标和ASCII码值满足要求的元素赋给新的字符串s

24.

【答案】

vnidfun(cha-s[),intc)

1.

inti=0;

char*p;

P=s;

while(*p)/*判断是否为结束标识符*/

{,

if(*p!=c)/*判断字符串中字符是否与指定字符相同*/

(

<s(i>*P;/*如不同,将重新组合字符串*/

i++;

)/•如相同,则处理下一个字符*/

p++;}

s[i]=(M)';

)

【解析】

通过循环将非指定字符重新保存,字符串末尾加上结束标识符。

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

\n(

\ninti,j=0;

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

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

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

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

\n}

\n【解析】本题需要先判断1〜m每一个整数能否被7或11整除,然

后将符合条件的整数放在数组a中,最后将符合条件的数的个数通过

形参n返回主函数。\n

26.intfun(char*s)

2;{intn=0;

3char*p;

4:;for(p=s;*p!=,\\0';p_L+)

if((*p>,o,)&&(<,9,))

6n++;

7retumn;

8}要统计字符串中数字字符的个数,首先应定义变量n,并将其初始化

为0,然后遍历字符串,逐个判断字符是否为数字字符,判断条件为该

元素的ASCII值在字符。和9的ASCII值之间,若判断条件成立,则

使n的值加1,否则,继续判断下一个字符,直到字符串结束。

27.\n\tcharch;

\ninti,m,n;

\ni=0:

\nm=n=strlen(str)-1;//求字符串str长度

\nwhile(i<(n+l)/2)//循环逆置交换

\n(

\nch=str[i];

\nstr[i]=str[m];

\nstr[m]=ch:

\ni++;

\nm—;

\n}

\n【解析】在fun函数中,首先求行字符串的长度,然后通过循环进行

字符交换。要注意的是,如果字符串长度是奇数,则最中间的元素在

逆置前后的位置是没有改变的。\n

28.\n\t#include'stdio.h'

\nmain

\n{longt=l;

\ninti;

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

\nt=t*i;

\nprintfC%ld',t);}

\n

29.\n#include,,stdio.h"

\nmain

\n{intl,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

30.voidfun(inta[][n],intn)

(

inti,j;

for(i=0;i<=""p="">

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

/*矩形的下三角时,积相乘*/

a[i][j]=a[i]0]*n;

}

首先从数组中找出要乘以n的元素。这其实就是找出将被挑出的元素在

原数组中的分布规律的过程。通过观察得出,要被处理的元素下标的范

围是从每行中第1个元素开始,直到列数等于该行行数为止。即数组下

三角元素的列下标①小于等于(<=)行下标0)。找到这个规律后,依次从

数组中取得符合要求的元素,然后乘以n。

31.(1)错误:for:(i=l;i<y;i++)正确:for(i=l;i<=y;i++)(2)错误:

t=t/1000;正确:t=t%1000;⑴错误:for:(i=l;i<y;i++)正确:for(i=l;i

<=y;i++)\r\n⑵错误:t=t/1000;正确:t=t%1000;解析:我们先用

简单的思想理解一下该程序,如果当x=y=l时,程序的问题出在哪儿?

很简单吧,所以for(i=l;i<y;i++)的循环条件应该是for(i=l;i++),

另外,t=t/1000;中的错误是混淆了“/”和“%”的定义对这样的细节问题

务必注意。

32.(1)错误:for(i=2;i<m;i++)正确:for(i=2;i<=m;i++)(2)错误:

y+=l/(i*i)正确:y+=l./(i*i)错误2:在除法运算中如果除数和被除数都

是整数所以所除结果也是整数因此应改为y+=l./(i*i)o⑴错误:for(i=2;

i<m;i++)\r\n正确:for(i=2;i<=m;i++)\r\n⑵错误:y+=l/(i*i)\r\n正确:

y+=L/(i*i)\r\n错误2:在除法运算中,如果除数和被除数都是整数,所

以所除结果也是整数,因此应改为y+=L/(i*i)。

33.(1)错误:intfun(void)正确:voidfun(void)(2)错误:

printf("%f'm[j]%5);正确:printf("%f"m[j]/5);⑴错误:intfun(void)正

确:voidfun(void)\r\n(2)错误:printf('%f,m[j]%5);正确:

printf('%f,m[j]/5);解析:错误1:函数fun()没有返回值,所以定义函

数类型为void。错误2:此处考查的是除法运算符和取余运算符的区别。

34.(l)for(i=1;i<=3;i++)(2)if(k>=0&&k<=6)(l)for(i=1;i<=

3;i++)(2)if(k>=0&&k<=6)解析:本题中函数的功能是从3个红

球、4个白球、5个黑球中任意取出8个作为一组,进行输出。在每组

中,可以没有黑球,但必须要有红球和白球。其实就是实现这三种球的

组合取值。

35.⑴错误:y=0;正确:y=l:(2)错误:d=i-a;正确:d=a-i;(1)错误:

y=0;正确:y=l:\r\n(2)错误:d=i-a;正确:d=a-i;解析:这道题是

历年的考题经典。也就是验证哥德巴赫猜想之变体,原来的思路是(任意

一个大于等于6的偶数都可以分解为两个素数之和)n为大于等于6的

任一偶数,可分解为nl和n2两个数,分别检查nl和n2是否为素数,

如都是,则为一组解。如nl不是素数,就不必再检查n2是否素数。先

从nl=3开始,检验nl和n2(n2=N-nl)是否素数。然后使nl+2再检验

温馨提示

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

评论

0/150

提交评论