2023年江蘇省蘇州市全國(guó)計(jì)算機(jī)等級(jí)考試C語(yǔ)言程序設(shè)計(jì)模擬考試(含答案)_第1頁(yè)
2023年江蘇省蘇州市全國(guó)計(jì)算機(jī)等級(jí)考試C語(yǔ)言程序設(shè)計(jì)模擬考試(含答案)_第2頁(yè)
2023年江蘇省蘇州市全國(guó)計(jì)算機(jī)等級(jí)考試C語(yǔ)言程序設(shè)計(jì)模擬考試(含答案)_第3頁(yè)
2023年江蘇省蘇州市全國(guó)計(jì)算機(jī)等級(jí)考試C語(yǔ)言程序設(shè)計(jì)模擬考試(含答案)_第4頁(yè)
2023年江蘇省蘇州市全國(guó)計(jì)算機(jī)等級(jí)考試C語(yǔ)言程序設(shè)計(jì)模擬考試(含答案)_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

2023年江蘇省蘇州市全國(guó)計(jì)算機(jī)等級(jí)考試C語(yǔ)言程序設(shè)計(jì)模擬考試(含答案)學(xué)校:________班級(jí):________姓名:________考號(hào):________

一、2.填空題(10題)1.以下程序運(yùn)行后的輸出結(jié)果是【】。

#include<stdio,h>

main()

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

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

elseprintf("%d\n",b);}

2.在軟件生命周期中,【】階段是花費(fèi)最多、持續(xù)時(shí)間最長(zhǎng)的階段。

3.以下函數(shù)的功能是計(jì)算s=1+1/2!+1/3!+…+1/n!,請(qǐng)?zhí)羁铡?/p>

doublerun(intn)

{doubles=0.0,fac=1.0;

inti,k=1;

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

{【】;

fac=fac/k;

s=s+fac;

}

}

4.下列程序輸出的結(jié)果是______。

intm=17;

intfun(intx,inty)

{intm=3;

return(x*Y-m);

}

main()

{inta=5,b=7;

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

}

5.以下程序的功能是:求出數(shù)組x中各相鄰兩個(gè)元素的和依次存放到a數(shù)組中,然后輸出。請(qǐng)?zhí)羁铡?/p>

main()

{intx[10],a[9],i;

for(i=0;i<10;i++)scanf("%d",&x[i]);

for([11];i<10;i++)

a[i-1]=x[i]+[12];.

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

printf("");

}

6.以下程序運(yùn)行時(shí)若從鍵盤輸入:102030<回車>。輸出結(jié)果是【】。

#include<stdio.h>

main()

{

inti=0,j=0,k=0;

scanf("%d%*d%d",&i,&j,&k);

printf("%d%d%d\n",i,j,k);

}

7.在關(guān)系運(yùn)算中,查找滿足一定條件的元組的運(yùn)算稱之為【】。

8.下面的程序把從終端讀入的文本(用@作為文本結(jié)束標(biāo)志)輸出到一個(gè)名為bi.dat的新文件中,請(qǐng)?zhí)羁铡?/p>

#include<stdio.h>

#include<stdlib.h>

FILE*fp;

main()

{charch;

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

while((ch=getchar())!='@')fputc(ch,fp);

fclose(fp);

}

9.若x和a均是int型變量,則計(jì)算完x=(a=4,6*2)后的x值為______。

10.若x為int類型,請(qǐng)寫出與!x等價(jià)的C語(yǔ)言表達(dá)式______。

二、單選題(10題)11.給出以下定義:charx[]="abcdefg";chary[]={'a','b','c','d','e','f','g'};則正確的敘述為()。

A.數(shù)組x和數(shù)組y等價(jià)B.數(shù)組x和數(shù)組y的長(zhǎng)度相同C.數(shù)組x的長(zhǎng)度大于數(shù)組y的長(zhǎng)度D.數(shù)組x的長(zhǎng)度小于數(shù)組y的長(zhǎng)度

12.以下說法正確的是()。

A.C程序總是從第一個(gè)函數(shù)開始執(zhí)行

B.在C程序中,被調(diào)用的函數(shù)必須在main函數(shù)中定義

C.C程序總是從main函數(shù)開始執(zhí)行

D.C程序中的main函數(shù)必須放在程序的開始部分

13.

14.

15.下列敘述中錯(cuò)誤的是()。

A.用戶定義的函數(shù)中可以沒有return語(yǔ)句

B.用戶定義的函數(shù)中可以有多個(gè)return語(yǔ)句,以便調(diào)用一次返回多個(gè)函數(shù)值

C.用戶定義的函數(shù)中若沒有return語(yǔ)句,則應(yīng)當(dāng)定義函數(shù)為void類型

D.函數(shù)的return語(yǔ)句中可以沒有表達(dá)式

16.數(shù)組A中,每個(gè)元素的長(zhǎng)度為3個(gè)字節(jié),行下標(biāo)i從1到8,列下標(biāo)j從1到10,從首地址SA開始連續(xù)存放的存儲(chǔ)器內(nèi),該數(shù)組按行存放,元素A[8][5]的起始地址為()。

A.SA+141B.SA+144C.SA+222D.SA+225

17.以下敘述中錯(cuò)誤的是(

)。A.函數(shù)形參的值也可以傳回給對(duì)應(yīng)的實(shí)參

B.函數(shù)調(diào)用可以作為一個(gè)獨(dú)立的語(yǔ)句存在

C.若函數(shù)有返回值,必須通過r;mm語(yǔ)句返回

D.C程序必須由一個(gè)或一個(gè)以上的函數(shù)組成

18.有以下程序:structst{intx;int*y;}*pt;inta[]={1,2},b[]={3,4};structstc[2]={10,a,20,b};pt=c;以下選項(xiàng)中表達(dá)式值為11的是()。

A.++p->xB.pt->xC.*pt->yD.(pt++)->x

19.在存儲(chǔ)數(shù)據(jù)時(shí),通常不僅要存儲(chǔ)各數(shù)據(jù)元素的值,而且還要存儲(chǔ)()。

A.數(shù)據(jù)的處理方法B.數(shù)據(jù)元素的類型C.數(shù)據(jù)元素之間的關(guān)系D.數(shù)據(jù)的存儲(chǔ)方法

20.下列運(yùn)算符中優(yōu)先級(jí)最高的是()。

A.!B.%C.-=D.&&

三、程序設(shè)計(jì)題(10題)21.使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,請(qǐng)編寫函數(shù)fun(),該函數(shù)的功能是判斷字符串是否為回文,若是,則函數(shù)返回1,在主函數(shù)中輸出“YES”,否則返回0,在主函數(shù)中輸出“NO”?;匚淖址侵疙樧x和倒讀都一樣的字符串。例如,字符串LEVEL是回文,而字符串123312就不是回文。注意:部分源程序在文件prog1.c中。第3部分無紙化考武題庠請(qǐng)勿改動(dòng)主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號(hào)中填入你編寫的若干語(yǔ)句。試題程序:1#include2#defineN803intfun(char*str)4{56}7main()8{9chars[n];10FILE*out;11char*test[]={"1234321","123421","123321","abcdCBA"};12inti;13printf("Enterastring:");14gets(s);15printf("\n\n");16puts(s);17if(fun(s))18printf("YES\n");19else20printf("NO\n");21/******************/22out=fopen("out.dat","w");23for(i=0;i<4/i++)24if(fun(test[i]))25fprintf(out,"YES\n");26else27fprintf(out,"NO\n");28fclose(out);29/******************/30}

22.請(qǐng)編寫一個(gè)函數(shù)intproc(int*s,intt,int*k),用來求出數(shù)組的最大元素在數(shù)組中的下標(biāo)并存放在k所指的存儲(chǔ)單元中。例如,輸入如下整數(shù):876675896101999401980431451777則輸出結(jié)果為4,999。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號(hào)中填入所編寫的若干語(yǔ)句。試題程序:

23.下列程序判斷字符串s是否對(duì)稱,對(duì)稱則返回1,否則返回0;如f("abba")返回1,f("abab")返回0。

24.使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,編寫函數(shù)fun(),其功能是根據(jù)以下公式求π的值(要求精度0.0005,即某項(xiàng)小于0.0005時(shí)停止迭代)。程序運(yùn)行后,若輸入精度0.0005,則程序應(yīng)輸出為3.140578。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號(hào)中填入你編寫的若干語(yǔ)句。試題程序:#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));}

25.請(qǐng)編寫函數(shù)proc(),它的功能是計(jì)算下列級(jí)數(shù)和,和值由函數(shù)值返回。sum=1-x+x2/2!-x3/31+…+(-l*x)n/n!例如,當(dāng)n=23,x=0.3時(shí),函數(shù)值為0.740818。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號(hào)中填人所編寫的若干語(yǔ)句。試題程序:

26.使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,請(qǐng)編寫一個(gè)函數(shù),用來刪除字符串中的所有空格。例如,輸入asdafaaz67,則輸出為asdafaaz67。注意:部分源程序在文件prog1.c中。請(qǐng)勿改動(dòng)主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號(hào)中填入你編寫的若干語(yǔ)句。試題程序:27.使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,請(qǐng)編寫函數(shù)fun(),該函數(shù)的功能是將M行N列的二維數(shù)組中的數(shù)據(jù),按行的順序依次放到一維數(shù)組中,一維數(shù)組中數(shù)據(jù)的個(gè)數(shù)存放在形參n所指的存儲(chǔ)單元中。例如,若二維數(shù)組中的數(shù)據(jù)為333333334444444455555555則一維數(shù)組中的內(nèi)容應(yīng)該為333333334444444455555555。注意:部分源程序在文件prog1.c中。請(qǐng)勿改動(dòng)main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號(hào)中填入你編寫的若干語(yǔ)句。試題程序:28.學(xué)生的記錄由學(xué)號(hào)和成績(jī)組成,M名學(xué)生的數(shù)據(jù)已在主函數(shù)中放人結(jié)構(gòu)體數(shù)組stu中,請(qǐng)編寫函數(shù)proc,它的功能是:把指定分?jǐn)?shù)范圍之外的學(xué)生數(shù)據(jù)放在b所指的數(shù)組中,分?jǐn)?shù)范圍之外的學(xué)生人數(shù)由函數(shù)值返回。

例如,輸入的分?jǐn)?shù)是70和79,則應(yīng)當(dāng)把分?jǐn)?shù)低于70和高于79的學(xué)生數(shù)據(jù)輸出,不包含70分和79分的學(xué)生數(shù)據(jù)。主函數(shù)中把70放在low中,把79放在heigh中。

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

請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc的花括號(hào)中填人所編寫的若干語(yǔ)句。

試題程序:

#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),

{"GA012",66},{"GA014”,82),

{"GA011",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)’

{

t=heigh:

heigh=low;

low=t;

}

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

printf("Thestudent’Sdataout

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

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

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

//輸出指定分?jǐn)?shù)范圍內(nèi)的學(xué)生記錄

printf("\n");

}

29.學(xué)生的記錄由學(xué)號(hào)和成績(jī)組成,M名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組stu中,請(qǐng)編寫函數(shù)proc(),該函數(shù)的功能是:把高于等于平均分的學(xué)生數(shù)據(jù)放在b所指的數(shù)組中,高于等于平均分的學(xué)生人數(shù)通過形參n傳回,平均分通過函數(shù)值返回。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號(hào)中填入所編寫的若干語(yǔ)句。試題程序:

30.請(qǐng)編寫函數(shù)proc(),它的功能是計(jì)算:s=(1n(1)4-1n(2)+In(3)4-…+1n(m))0.5在C語(yǔ)言中可調(diào)用log(n)函數(shù)求1n(n)。例如,若n1的值為30,則proc()函數(shù)值為8.640500。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號(hào)中填入所編寫的若干語(yǔ)句。試題程序:

四、2.程序修改題(10題)31.下列給定的程序中,函數(shù)fun()的功能是:用選擇法對(duì)數(shù)組中的n個(gè)元素按從大到小的順序進(jìn)行排序。請(qǐng)改正程序中的錯(cuò)誤,使它能得到正確結(jié)果。

注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

試題程序:

#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(“排序前的數(shù)據(jù):”);

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”);

}

32.下列給定程序中,函數(shù)fun()的功能是:用下面的公式求π的近似值,直到最后一項(xiàng)的絕對(duì)值小于指定的數(shù)(參數(shù)num)為止。

π/4≈1-1/3+1/5-1/7+…

例如,程序運(yùn)行后,輸入0.0001,則程序輸出3.1414。

請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。

注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

試題程序:

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

}

33.給定程序MODll.C中函數(shù)fun的功能是:先將s所指字符串中的字符按逆序存放到t所指字符串中,然后把s所指串中的字符按正序連接到t所指串的后面。

例如:當(dāng)s所指的字符串為:“ABCDE”時(shí),則t所指的字符串應(yīng)為:“EDCBAABCDE”。

請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。

注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

34.下列給定程序中,函數(shù)fun()的功能是找出100~n(n不大于1000)之間百位數(shù)字加十位數(shù)字等于個(gè)位數(shù)字的所有整數(shù),把這些整數(shù)放在s所指的數(shù)組中,個(gè)數(shù)作為函數(shù)值返回。

請(qǐng)改正程序中的錯(cuò)誤,使它能得到正確結(jié)果。

注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

試題程序:

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

}

35.下列給定程序中,函數(shù)fun()的作用是,將字符串tt中的大寫字母都改為對(duì)應(yīng)的小寫字母,其他字符不變。例如,若輸入"Ab,cD",則輸出"ab,cd"。

請(qǐng)改正函數(shù)fun()中的錯(cuò)誤,使它能得出正確的結(jié)果。

注童:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

試題程序:

#include<stdio.h>

#include<string.h>

#include<conio.h>

char*fun(chartt[])

{

inti;

for(i=0;tt[i];i++)

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

{if(('A'<=tt[i]||(tt[i]<='z'))

tt[i]+=32;}

return(tt);

}

main()

{inti;

chartt[81];

clrscr();

printf("\nPleaseenterastring:");

gets(tt);

printf("\nTheresultstringis:\n%s",fun(tt));

}

36.已知一個(gè)數(shù)列從0項(xiàng)開始的前3項(xiàng):0,0,1,以后的各項(xiàng)都是其相鄰的前3項(xiàng)之和。下列給定的程序中,函數(shù)fun()的功能是:計(jì)算并輸出該數(shù)列前n項(xiàng)的和sum。n的值通過形參傳入。例如,當(dāng)n=10時(shí),程序的輸出結(jié)果應(yīng)為96.000000。

請(qǐng)改正程序中的錯(cuò)誤,使它能得到正確結(jié)果。

注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

試題程序:

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

}

37.給定程序MODll.C中函數(shù)fun的功能是:根據(jù)整型形參n,計(jì)算如下公式的值。

例如,若n=10,則應(yīng)輸出:0.617977。

請(qǐng)改正程序中的語(yǔ)法錯(cuò)誤,使它能得出正確的結(jié)果。

注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

38.在主函數(shù)中從鍵盤輸入若干個(gè)數(shù)放入數(shù)組中,用0結(jié)束輸入并放在最后一個(gè)元素中。下列給定程序中,函數(shù)fun()的功能是計(jì)算數(shù)組元素中值為負(fù)數(shù)的平均值(不包括0)。

例如:數(shù)組中元素的值依次為43,47,-21,53,-8,12,0,則程序的運(yùn)行結(jié)果為-25.333333。

請(qǐng)改正程序中的錯(cuò)誤,使它能得到正確結(jié)果。

注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

試題程序:

#include<conio.h>

#include<stdio.h>

doublefun(intx[])

{

doublesum=0.0;

intc=0,i=0;

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

while(x[i]==0)

{

if(x[i]<0)

{

sum=sum+x[i];

c++;

}

i++;

}

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

sum=sum\c;

returnsum;

}

main()

{

intx[1000];

inti=0;

clrscr();

printf("\nPleaseentersomedata(endwith

0):”);

do

{

scanf("%d",&x[i]);

}while(x[i++]!=0);

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

}

39.給定程序MODII.C中函數(shù)fun的功能是:將長(zhǎng)整型數(shù)s中每一位上為偶數(shù)的數(shù)依次取出,構(gòu)成一個(gè)新數(shù)放在t中。高位仍在高位,低位仍在低位。

例如,當(dāng)s中的數(shù)為:87653142時(shí),t中的數(shù)為:8642。

請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。

注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

40.給定程序MODll.C中函數(shù)fun的功能是:判斷一個(gè)整數(shù)是否是素?cái)?shù),若是返回1,否則返回0。

在mai()函數(shù)中,若fun返回1輸出YES,若fun返回0輸出NO!。

請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。

注意:不要改動(dòng)main函數(shù)。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

五、程序改錯(cuò)題(2題)41.以下程序可把輸入的十進(jìn)制數(shù)以十六進(jìn)制數(shù)的形式輸出。請(qǐng)?jiān)跈M線上填上適當(dāng)?shù)膬?nèi)容并把橫線刪除,使它能得出正確的結(jié)果。注意:不要改動(dòng)main()函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:

42.下列給定程序中,proc()函數(shù)的功能是:根據(jù)形參n。計(jì)算下列公式的值:t=1-1/2+1/3-1/4+…+(-1)(n+1)/n例如,若輸入6,則應(yīng)輸出0.616667。請(qǐng)修改程序中的錯(cuò)誤,使它能得到正確結(jié)果。注意:不要改動(dòng)main()函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:

六、操作題(2題)43.請(qǐng)編寫一個(gè)函數(shù)fun(),它的功能是:比較兩個(gè)字符串的長(zhǎng)度,(不得調(diào)用C語(yǔ)言提供的求字符串長(zhǎng)度的函數(shù)),函數(shù)返回較短的字符串。若兩個(gè)字符串長(zhǎng)度相等,則返回第1個(gè)字符串。

例如,輸入nanjing<CR>nanchang<CR>(<CR>為回車鍵),函數(shù)將返回nanjing。

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

請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語(yǔ)句。

試題程序:

#include<stdio.h>

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

{

}

main()

{

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

inti;

printf("Inputlthstring:");

gets(a);

printf("Input2thstring:");

gets(b);

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

}

44.設(shè)有如下宏定義

#defineMYSWAP(z,x,y){z=x;x=Y;Y=z;}

以下程序段通過宏調(diào)用實(shí)現(xiàn)變量a、b內(nèi)容的交換,請(qǐng)?zhí)羁铡?/p>

floata=5,b=16,c;

MYSWAP(【】,a,b);

參考答案

1.11解析:該程序要注意的是if語(yǔ)句的判斷條件“c=a”是賦值,而不是“c==a”。由于a=1,故條件c=a使c的值為1(真),所以輸出c的值1。

2.維護(hù)維護(hù)

3.k=k*ik=k*i解析:本題小通過for循環(huán)求s表達(dá)式中每一項(xiàng)的和,表達(dá)式“fac=fac/k;”求的是每一項(xiàng)的值,所以k的值應(yīng)為n!,在求n!的時(shí)候,可以用上次循環(huán)階乘的值乘i,就可以直接得此次n!,故木題填k=k*i。

4.11解析:本題考查局部變量和全局變量的區(qū)別:局部變量是指作用域在函數(shù)級(jí)和塊級(jí)的變量,全局變量是指作用域在程序級(jí)和文件級(jí)的變量。本程序首先定義了一個(gè)全局變量m=17,m=17的作用域在整個(gè)程序內(nèi)。在fun函數(shù)內(nèi)部定義了一個(gè)局部變量m=3,m=3的作用域僅在fun函數(shù)內(nèi)部,通過fun函數(shù)返回兩個(gè)形參的積再減m。在主函數(shù)中,輸出fun(a,b)/m=(5*7-3)/17=1。

5.對(duì)于10個(gè)數(shù),相鄰的兩個(gè)數(shù)相加取和,總共要進(jìn)行9次加法運(yùn)算,所以空14處應(yīng)填入i=1。相鄰的兩個(gè)數(shù)相加取和,放在數(shù)組a中,x[0]與x[1]的和存放在a[0]中,所以空15處應(yīng)填入x[i-1]。\r\n\r\n

6.1030010300解析:本題的scanf()函數(shù)要求用戶輸入三個(gè)十進(jìn)制整數(shù),但只接受第一和第三個(gè)到函數(shù)的第二和第三個(gè)參數(shù)所指的內(nèi)存地址中。所以本題的輸出為:10300。

7.選擇選擇解析:在關(guān)系數(shù)據(jù)庫(kù)中,選擇運(yùn)算也是一個(gè)元運(yùn)算,關(guān)系R通過選擇運(yùn)算(并由該運(yùn)算給出所選擇的邏輯條件)后仍為一個(gè)關(guān)系。這個(gè)關(guān)系是由R中的那些滿足邏輯條件的元組所組成。

8.bi.dat"w"或"bi.dat""w+"bi.dat,'w'或'bi.dat','w+'解析:根據(jù)fopen函數(shù)的調(diào)用方式fopen(文件名,使用文件方式)和題意可得結(jié)果。

9.1212解析:x=(表達(dá)式1,表達(dá)式2,…)的形式,結(jié)果為最后一個(gè)表達(dá)式的值:x=(a=4,6*2)=2*6=12。

10.x==0x==0解析:!x的邏輯意思就是x為非,即x==0。

11.C解析:在C語(yǔ)言中,字符串以'\\0'作為結(jié)束符,因此數(shù)組x的長(zhǎng)度為7+1=8,而數(shù)組y的長(zhǎng)度等于7。

12.C解析:C程序是由main函數(shù)開始運(yùn)行,通過main函數(shù)調(diào)用其他函數(shù),所以,選項(xiàng)A)錯(cuò)誤;在C程序中,函數(shù)不能嵌套定義,即不能在一個(gè)函數(shù)中定義另一個(gè)函數(shù),選項(xiàng)B)錯(cuò);C程序總是從main函數(shù)開始執(zhí)行,但main函數(shù)不必放在最前面,故選項(xiàng)D)錯(cuò)。

13.D

14.C

15.B函數(shù)的值只能通過return語(yǔ)句返回主調(diào)函數(shù)。函數(shù)中允許有多個(gè)return語(yǔ)句,但每次只能調(diào)用一個(gè)return語(yǔ)句,因此只能返回一個(gè)函數(shù)值。不返回函數(shù)值的函數(shù),可以明確定義為“空類型”,類型說明符為void。故本題答案為B選項(xiàng)。

16.C

17.A函數(shù)參數(shù)傳遞是個(gè)不可逆的過程,形參不會(huì)把值傳回實(shí)參,所以A)選項(xiàng)(24)[答案]A)[解析]c的值為a乘以b的值,為3。所以答案選擇A)。

18.A題目中定義了一個(gè)結(jié)構(gòu)體數(shù)組c并初始化,指針pt指向c的第1個(gè)元素。則“++pt->x”為11,“pt->x”為10,“*pt->y”為1,“(pt++)->x”為20。故本題答案為A選項(xiàng)。

19.C

20.A

21.1intfun(char*str)2{3inti,n=0,fg=1;4char*p=str;5while(*p)/*將指針p指向字符串末尾,并統(tǒng)計(jì)字符數(shù)*/6{7n++8P++;10}10for(i=0;i22.

【解析】要得到數(shù)組中的最大元素的下標(biāo),需要比較數(shù)組中的每一個(gè)元素。將最大的元素返回給主函數(shù),最大元素的下標(biāo)通過形參返回給主函數(shù)。

23.24.doublefun(doubleeps){ doubles=0.0,s1=1.0; intn=1; while(s1>=eps) /*當(dāng)某項(xiàng)大于精度要求時(shí),繼續(xù)求下一項(xiàng)*/ { s=s+s1; /*求和*/ s1=s1*n/(2*n+1);/*求多項(xiàng)式的每一項(xiàng)*/ n++; } return2*s;}該題考核的是通過迭代法求給定多項(xiàng)式的值。迭代法是讓計(jì)算機(jī)對(duì)一組指令(或一定步驟)進(jìn)行重復(fù)執(zhí)行,在每次執(zhí)行這組指令(或這些步驟)時(shí),都從變量的原值推出它的一個(gè)新值。需要注意變量的數(shù)據(jù)類型和賦初值操作。定義double類型變量s,并為其賦初值,用來存放多項(xiàng)式的某一項(xiàng)和最后的總和。從第2項(xiàng)開始,以后的每一項(xiàng)都是其前面一項(xiàng)乘以n/(2*n+1)。程序用s1來表示每一項(xiàng),用s表示求和后的結(jié)果。需注意變量s1和s的初值都為1.0,因?yàn)檠h(huán)變量從第2項(xiàng)開始累加。

25.

【解析】首先定義兩個(gè)變量分別用來存儲(chǔ)級(jí)數(shù)的和與每一項(xiàng)的分母。觀察級(jí)數(shù)的特點(diǎn),其每一項(xiàng)的正負(fù)號(hào)是交替變化的。根據(jù)這些特點(diǎn),每增加一項(xiàng)都需要變換符號(hào)。最后求出級(jí)數(shù)的和。

26.1voidfun(char*str)2{3inti=0;4char*p=str;5while(*p)6{7if(*p!='')/*刪除空格*/8{9str[i++]=*p;10}11p++;12}13str[i]='\\0';/*加上結(jié)束符*/14}本題要求刪除所有空格,即保留除了空格以外的其他所有字符。由于C語(yǔ)言中沒有直接刪除字符的操作,因此對(duì)不需要?jiǎng)h除的字符采用“保留”的操作。用指針P指向字符串中的每一個(gè)字符,每指向一個(gè)字符都判斷其是否為空格,若不是空格則將其保存到數(shù)組Str。27.1voidfun(int(*s)[10],intint*n,intmm,intnn)2{3inti,j,k=0;4for(i=0;i<mm;i++)/*將二維數(shù)組s中的數(shù)據(jù)按行的順序依次存放到一維數(shù)組b中*/5for(j=0;j<nn;j++)6b[k++]=s[i][j];7*n=k;/*通過指針返回元素個(gè)數(shù)*/8}本題可以用兩個(gè)循環(huán)來處理。由于是按行的順序取出,因此第1個(gè)for循環(huán)用于控制行下標(biāo),第2個(gè)循環(huán)用于控制列下標(biāo)。若改成按列的順序取出,則循環(huán)應(yīng)改成:for(i=0;i<mm;jp)b[k++]=s[j][i];要注意s[j][i]的下標(biāo),不能用s[i][j]。若按行取出則列下標(biāo)變化較快,若按列取出則行下標(biāo)變化較快,即循環(huán)嵌套時(shí),越在內(nèi)層的循環(huán),其循環(huán)變量變化就越快。<mm;jp)28.\n\tintproc(STREC*a,STREC*b,intl,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<1)||(a[i].s>h&&a\n\n\n\t[i].s<=l00))

//通過if語(yǔ)句,來判斷指定范圍\n\n\n\t之外的數(shù)\n\n\n\tb[j++]=a[i];//放到b數(shù)組中\(zhòng)n\n\n\treturnj;//最后把其個(gè)數(shù)返回到主函數(shù)中\(zhòng)n\n\n\t}\n\n\n\t【解析】題目要求把指定范圍之外的數(shù)放到b中,將每一個(gè)學(xué)生的成績(jī)與指定的成績(jī)相比較,將符合條件的學(xué)生成績(jī)放在數(shù)組b中,并將符合要求的學(xué)生個(gè)數(shù)返回給主函數(shù)。\n

29.

【解析】要得到成績(jī)高于等于平均分的學(xué)生數(shù)據(jù),首先要得到所有學(xué)生的平均分,然后把每個(gè)學(xué)生的成績(jī)與平均分相比較。把符合條件的學(xué)生數(shù)據(jù)放在數(shù)組b中,學(xué)生個(gè)數(shù)通過形參中的指針變量返回,平均分?jǐn)?shù)由函數(shù)值返回。

30.

【解析】由題目中所給表達(dá)式可知,表達(dá)式的值為m項(xiàng)表達(dá)式的和然后開平方。可以首先通過m次循環(huán)求得m項(xiàng)表達(dá)式的和,然后將其和開平方并返回到主函數(shù)當(dāng)中。

31.(1)錯(cuò)誤:for(j=0;j<n-1;j++);正確:for(j=0;j<n-1;j++)(2)錯(cuò)誤:a[p]=t正確:a[j]=t;(1)錯(cuò)誤:for(j=0;j<n-1;j++);正確:for(j=0;j<n-1;j++)\r\n(2)錯(cuò)誤:a[p]=t正確:a[j]=t;解析:錯(cuò)誤1:根據(jù)C語(yǔ)言語(yǔ)法,for循環(huán)中循環(huán)條件后不加分號(hào),除非做空操作。錯(cuò)誤2:將兩數(shù)進(jìn)行交換的常用語(yǔ)句,借助第三個(gè)變量。

32.(1)錯(cuò)誤:while(t>=num)正確:while(fabs(t)>=num)(2)錯(cuò)誤;t=s%n;正確:t=s/n;(1)錯(cuò)誤:while(t>=num)正確:while(fabs(t)>=num)\r\n(2)錯(cuò)誤;t=s%n;正確:t=s/n;解析:函數(shù)fun()中while語(yǔ)句的含義是,當(dāng)新的一項(xiàng)大于給定參數(shù)時(shí),循環(huán)累計(jì),計(jì)算s的值。而題目要求是最后一項(xiàng)的絕對(duì)值小于給定參數(shù),因此循環(huán)條件應(yīng)當(dāng)為while(fabs(t)>=num),而非while(t>=num)。

33.(1)intisl;(2)t[i]=s、[sl-i-1];(1)inti,sl;(2)t[i]=s、[sl-i-1];解析:本題中函數(shù)的功能是先將字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序連接到t串的后面。解題思路是首先對(duì)字符串進(jìn)行逆序存放,然后再把字符串正序連接在串后。

34.(1)錯(cuò)誤:k=n;正確:k=i;(2)錯(cuò)誤:s[j]=i;正確:s[j++]=i;(1)錯(cuò)誤:k=n;正確:k=i;\r\n(2)錯(cuò)誤:s[j]=i;正確:s[j++]=i;解析:錯(cuò)誤1:k就是當(dāng)前要被判斷的數(shù),是隨著i值的變化而變化的。錯(cuò)誤2:在循環(huán)中,j是數(shù)組的下標(biāo)要遞增。

35.錯(cuò)誤:if(('A'<=tt[i]||(tt[i]<='Z'))正確:if((tt[i]>='A')&&(tt[i]<='Z'))錯(cuò)誤:if(('A'<=tt[i]||(tt[i]<='Z'))正確:if((tt[i]>='A')&&(tt[i]<='Z'))解析:從ASCII碼表中可以看出,小寫字母的ASCII碼值比對(duì)應(yīng)大寫字母的ASCII碼值大32。將字符串中的大寫字母改為小寫字母的方法是,從字符串第1個(gè)字符開始,根據(jù)ASCII碼值判斷該字母是不是大寫字母,若是,則ASCII碼值加32即可;重復(fù)執(zhí)行以上過程直至字符串尾。本題可利用條件選擇語(yǔ)句和循環(huán)語(yǔ)句來實(shí)現(xiàn)。

36.(1)錯(cuò)誤:for(k=4;k<n;k++)正確:for(k=4;k<=n;k++)(2)錯(cuò)誤:s2=s;正確:s2=s;}(1)錯(cuò)誤:for(k=4;k<n;k++)正確:for(k=4;k<=n;k++)\r\n(2)錯(cuò)誤:s2=s;正確:s2=s;}解析:錯(cuò)誤1:循環(huán)中包括k=n的情況,所以k要取到n之后才結(jié)束循環(huán)。錯(cuò)誤2:for循環(huán)的語(yǔ)句要用大括號(hào),在此處少了“}”,應(yīng)添上。

37.(1)floatfun(intn)(2)for(i=2;i<=n;i++)(1)floatfun(intn)(2)for(i=2;i<=n;i++)解析:本題中函數(shù)的功能是計(jì)算公式的值。其中,每一項(xiàng)的分母是前一項(xiàng)的值加1。

38.(1)錯(cuò)誤:while(x[i]==0)正確:while(x[i]!=0)(2)錯(cuò)誤

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論