2022-2023學年湖南省婁底市全國計算機等級考試C語言程序設計預測試題(含答案)_第1頁
2022-2023學年湖南省婁底市全國計算機等級考試C語言程序設計預測試題(含答案)_第2頁
2022-2023學年湖南省婁底市全國計算機等級考試C語言程序設計預測試題(含答案)_第3頁
2022-2023學年湖南省婁底市全國計算機等級考試C語言程序設計預測試題(含答案)_第4頁
2022-2023學年湖南省婁底市全國計算機等級考試C語言程序設計預測試題(含答案)_第5頁
已閱讀5頁,還剩25頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

2022-2023學年湖南省婁底市全國計算機等級考試C語言程序設計預測試題(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.有以下程序:#include<stdio.h>main(){inta=2,b;b=a<<2;printf("%d\n",b);}程序運行后的輸出結果是()。A.2B.4C.6D.8

2.

3.在深度為5的滿二叉樹葉中,葉子結點的個數為()。

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

4.

5.在關系代數運算中,有5種基本運算,它們是()。

A.并(∪)、差(-)、交(∩)、除(÷)和笛卡兒積(×)

B.并(∪)、差(-)、交(∩)、投影(π)和選擇(σ)

C.并(∪)、交(∩)、投影(π)、選擇(σ)和笛卡兒積(×)

D.并(∪)、差(-)、投影(π)、選擇(σ)和笛卡兒積(×)

6.數據獨立性是數據庫技術的重要特點之一。所謂數據獨立性是指()

A.數據與程序獨立存放

B.不同的數據被存放在不同的文件中

C.不同的數據只能被對應的應用程序所使用

D.以上三種說法都不對

7.結構化程序由三種基本結構組成,三種基本結構組成的算法A.可以完成任何復雜的任務B.只能完成部分復雜的任務C.只能完成符合結構化的任務D.只能完成一些簡單的任務

8.若有定義和語句:inta,b;scanf("%d,%d",&a,&b);以下選項中的輸人數據,不能把值3賦給變量a、5賦給變量b的是()。A.3,5,B.3,5,4C.3,5D.3,5

9.下列敘述中,不正確的是

A.數據庫技術的根本目標是要解決數據共享的問題

B.數據庫系統中,數據的物理結構必須與邏輯結構一致

C.數據庫設計是指設計一個能滿足用戶要求,性能良好的數據庫

D.數據庫系統是一個獨立的系統,但是需要操作系統的支持

10.若執行下列的程序時,從鍵盤上輸入1和2,則輸出結果是()。

#include<stdio.h>

main()

{inta,b,s;

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

S=a;

if(a<B)s=b;

s=s*s;

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

}

A.1B.4C.2D.9

11.若有定義:typedefint*(*T[10])[10];Tb;則以下選項中所定義的a與上述定義中的b,其類型完全相同的是()。

A.int*(*a[10][10]);

B.int**a[10][10];

C.int*(a[10])[10];

D.int*(*a[10])[10];

12.以下敘述中正確的是()。

A.在switch語句中,不一定使用break語句

B.break語句只能用于switch語句

C.break語句必須與switch語句中的case配對使用

D.在switch語句中必須使用default

二、2.填空題(12題)13.下列程序的運行結果是______。

#include<stdio.h>

longfunc(intx)

{longp;

if(x==0‖x==1)

return(1);

p=x*func(x-1);

return(p);

}

main()

{printf("%d\n",func(4));

}

14.若已定義inta[10],i;以下fun函數的功能是,在第一個循環中給前10個數組元素依次賦1,2,3,4,5,6,7,8,9,10;在第二個循環中使a數組前10個元素中的值對稱拆疊,變成1,2,3,4,5,5,4,3,2,1。請填空。

fun(inta[])

{inti;

for(i=1;i<=10;i++)【】=i;

for(i=0;i<5;i++)【】=a[i];

}

15.以下程序的輸出結果是______。

#include<stdio.h>

main()

{inta[5]={2,4,6,8,10},*p;

p=a;p++;

printf("%d",*p);

}

16.下面程序的功能是輸出數組s中最大元素的下標,請填空。

#include<stdio.h>

main()

{intk,p,s[]={1,-9,7,2,-10,3};

for(p=0,k=p;p<6;p++)

if(s[p]>s[k])【】

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

}

17.要求使下列程序輸出5個整數,請填空。

for(i=0;i<=______;printf("%d\n",i+=2));

18.【】是數據庫設計的核心。

19.以下函數的功能是計算s=1+1/2!+1/3!+…+1/n!,請填空。

doublefun(intn)

{doubles=0.0,fac=1.0;

inti,k=1;

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

{【】;

fac=fac/k

s=s+fac;

}

}

20.若有以下程序

main()

{inta[4][4]={{1,2;-3,-4},{0,-12,-13,14},{21,23,0,-24},{-31,32,-33;0}};

inti,j,s=0;

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

{for(j=0;j<4;j++)

if(a[i][j]<0)continue;

if(a[i][j]==0)break;

s+=a[i][j];

}

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

}

執行后輸出結果是______。

21.若有定義語句chars[100],d[100];intj=0,i=0;且s中已賦字符串,請填空以實現拷貝。(注:不使用逗號表達式)

white(s[i]){d[j]=【】;j++;}

d[j]=0;

22.以下程序的輸出結果是【】。

main()

{charc='z';

printf("%c",c-25);}

23.關系可以有3種類型,即基本關系(又稱基本表或基表)、查詢表和【】。

24.如果兩個8位二進制數00010101與01000111相加,其結果用十進制表示為【】。

三、3.程序設計題(10題)25.假定輸入的字符串中只包含字母和*號。請編寫函數fun(),它的功能是:刪除字符串中所有的*號。在編寫函數時,不得使用C語言中提供的字符串函數。

例如,若字符串中的內容為****A*BC*DEF*G*******,刪除后,字符串中的內容則應當是ABCDEFG。

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

請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。

試題程序:

#include<conio,h>

#include<stdio,h>

voidfun(char*a)

{

}

main()

{

chars[81];

printf("Enterastring:\n");

gets(s);

fun(s);

printf("Thestringafterdeleted:\n");

puts(s);

}

26.學生的記錄由學號和成績組成,N名學生的數據已在主函數中放入結構體數組s中,請編寫函數fun(),它的功能是:函數返回指定學號的學生數據,指定的序號在主函數中輸入。若沒找到指定的學號,在結構體變量中給學號置空串,給成績置-1,作為函數值返回(用于字符串比較的函數是strcmp)。

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

請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。

試題程序:

#include<stdio.h>

#inctude<stdlib.h>

#defineN16

typedefstruct

{charnum[10];

ints;

}STREC;

STRECfun(STREC*a,char*b)

{

}

main()

{

STRECs[N]={{"GA005",85},{"GA003",76},

{"GA002",69},{"GA004",85},{"GA001",91},

{"GA007",72},{"GA008",64},{"GA006",87},

{"GA015",85},{"GA013",91},{"GA012",64},

{"GA014",91},{"GA011",77},{"GA017",64},

{"GA018",64},{"GA016",72}};

STRECh;

charre[10];

inti,n;

FILE*out;

printf("Theoriginaldata:\n");

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

{if(i%4==0)

printf("In");

/*每行輸出4個學生記錄*/

printf("%s%3d",s[i]num,s[i]s);

}

printf("\n\nEnterthenumber:");

gets(m);

h=fun(s,m);

printf("Thedata:");

printf("\n%s%4d\n",h.num,h.s);

printf("\n");

out=fopen("out80.dat","w");

h=fun(s,"GA013");

fprintf(out,"%s%4d\n",h.num,h.s);

fclose(out);

}

27.編寫函數intfun(intlim,intaa[MAX]),該函數的功能是求出小于或等于lim的所有素數并放在aa數組中,該函數返回所求出的素數的個數。

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

請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。

試題程序:

#include<conio.h>

#include<stdio.h>

#defineMAX100

intfun(intlim,intse[MAX])

{

}

main()

{

intlimit,i,sum;

intaa[MAX];

clrscr();

printf("輸入一個整數");

scanf("%d",&limit);

sum=fun(limit,aa);

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

{

if(i%10==0&&i!=0)/*每行輸出10個數*/

printf("\n");

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

}

}

28.假定輸入的字符串中只包含字母和*號。請編寫函數fun(),它的功能是:只刪除字符串前導和尾部的*號,串中字母之間的*號都不刪除。形參n給出了字符串的K度,形參h給出了字符串中前導*號的個數,形參e給出了字符山中最后*號的個數。在編寫函數時,不得使用c語言提供的字符串函數。

例如,若字符串中的內容為****A*BC*DEF*G*******,刪除后,字符串中的內容則應當是A*BC*DEF*G。

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

請勿改動主函數main和其他函數中的任何內容,儀在函數fun的花括號中填入所編寫的若干語句。

試題程序:

#include<stdio.h>

#include<conio.h>

voidfun(char*a;intn,inth,inte)

{

}

main()

{

chars[81],*t,*f;

intm=0,tn=0,fn=0;

printf("Enterastring:\n");

gets(s);

t=f=s;

while(*t)

{t++;m++;}/*m為字符串的長度*/

t--;/*指針t指身字符串尾部*/

while(*t=='*')

{t--;tn++;}

/*指針t指向最后一個字母,tn統計尾部'*'的個數*/

while(*f=='*')

{f++;fn++;}

/*指針f指向第一個字母,tn統計導'*'的個數*/

fun(s,m,fn,tn);

printf("Thestringafterdeleted:\n");

puts(s);

}

29.程序定義了NxN的二維數組,并在主函數中賦值。請編寫函數fun,函數的功能是:求出數組周邊元素的平均值并作為函數值返給主函數中的s。

例如:a數組中的值為:

則返回主程序后s的值應為:3.375。

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

請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。

30.學生的記錄由學號和成績組成,N名學生的數據已在主函數中放入結構體數組s中,請編寫函數fun(),它的功能是:把指定分數范圍之外的學生數據放在b所指的數組中,分數范圍之外的學生人數由函數值返回。

例如,輸入的分數是80和89,則應當把分數低于80和高于89的學生數據進行輸出,不包含80分和89分的學生數據。主函數中把80放在low中,把89放在heigh中。

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

請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。

試題程序

#include<stdio.h>

#defineN16

typedefstruct

{charnum[10];

ints;

}STREC;

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

{

}

main()

{

STRECs[N]={{“GA005”,55},{“GA003”,96},

{“GA002”,80},{“GA004”,68},{“GA001”,88},

{“GA007”,74},{“GA008”,85},{“GA006”,99},

{“GA015”,90},{“GA013”,53},{“GA012”,66},

{“GA014”,82},{“GA0ll”,73},{“GA017”,69},

{“GA018”,64},{“GA016”,86}};

STECh[N],tt;

FILE*out;

inti,j,n,low,heigh,t;

printf(“Enter2integernumberlow&heigh:”);

scanf(“%d%d”,&low,&heigh);

if(heigh<low)

{

t=heigh;

heigh=low;

low=t;

}

n=fun(S,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);

/*輸出指定分數范圍內的學生記錄*/

printf(“\n”);

ut=fopen(“out23.dat”,“w”);

fprintf(out,“%d\n”,n);

n=fun(s,h,70,79);

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

/*分數在70~79之外的學生記錄按分數從低到高排列*/

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

if(h[i].s>h[j].s)

{

tt=h[i];

h[i]=h[j];

h[j]=tt;

}

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

fprintf(out,“%4d\n”,h[i].s);

fprintf(out,“\n”);

fclose(out);

}

31.請編寫函數fun(),該函數的功能是:移動一維數組中的內容,若數組中有n個整數,要求把下標從p到n-1(p≤n-1)的數組元素平移到數組的前面。

例如,一維數組中的原始內容為1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,p的值為6。移動后,一維數組中的內容應為7,8,9,10,11,12,13,14,15,1,2,3,4,5,6。

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

請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。

試題程序:

#include<stdio.h>

#defineN80

voidfun(int*w,intp,intn)

{

}

main()

{

inta[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

inti,p,n=15;

printf("Theoriginaldata:\n");

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

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

printf("\n\nEnterp:");

scanf("%d",&p);

fun(a,p,n);

printf("\nThedataaftermoving:\n");

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

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

printf("\n\n");

}

32.下列程序定義了N×N的二維數組,并在主函數中自動賦值;請編寫函數fun(inta[][N]),該函數的功能是:使數組左下半三角元素中的值全部置成0。例如a數組中的值為

a=197

238

456

則返回主程序后a數組中的值應為

097

008

000

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

請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。

試題程序:

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#defineN5

intfun(inta[][N])

{

}

main()

{

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

clrscr();

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

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

/*產生—個隨機的5*5矩陣*/

{for(j=0;j<N;j++)

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

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

}

printf("\n");

}

fun(a);

printf("THERESULT\n");

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

{for(j=0;j<N;j++)

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

printf("\n");

}

}

33.已知學生的記錄由學號和學習成績構成,N名學生的數據已存入a結構體數組中。請編寫函數fun(),該函數的功能是;找出成績最高的學生記錄,通過形參返回主函數(規定只有一個最高分)。已給出函數的首部,請完成該函數。

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

請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。

試題程序:

#include<stdio.h>

#include<string.h>

#include<conio.h>

#defineN10

typedefstructss/*定義結構體*/

{charnum[10];

ints;

}STU;

fun(STUa[],STU*s)

{

}

main()

{

STUa[N]={{"A01",81},{"A02",89},

{"A03",66},{"A04",87},{"A05",77},

{"A06",90},{"A07",79},{"A08",61},

{"A09",80},{"A10",71}},m;

inti;

clrscr();

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

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

printf("No=%sMark=%d\n",a[i].hum,

a[i].s);

fun(a,&m);

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

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

}

34.請編寫函數fun(),其功能是:計算并輸出給定10個數的方差。

其中

例如,給定的10個數為95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0,則輸出為S=11.730729。

注意;部分源程序給出如下.

請勿改動主函數mam和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。

試題程序:

#include<math.h>

#include<stdio.h>

doublefun(doublex[10])

{

}

main()

{

doubles,x[i0]={95.0,89.0,76.0,65.0,

88.0,72.0,85.0,81.0,90.0,56.0};

inti;

printf("\nTheoriginaldatais:\n");

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

printf("%6.1f",x[i]);

printf("\n\n");

s=fun(x);

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

}

四、單選題(0題)35.

五、單選題(0題)36.以下程序的輸出結果是_______。main(){inti,a[10];for(i=9;i>=0;i-)a[i]=10-i;print("%d%d%d,a[2],a[5],a[8]);}

A.258B.741C.852D.369

六、單選題(0題)37.隊列的“先進先出”特性是指()。

A.最早插入隊列中的元素總是最后被刪除

B.當同時進行插入、刪除操作時,總是插入操作優先

C.每當有刪除操作時,總是要先做一次插入操作

D.每次從隊列中刪除的總是最早插入的元素

參考答案

1.D本題考查運算符“<<”,b=a<<2,是左移2位,a=2,即b=2*2*2=8。

2.A

3.C根據二叉樹的性質及定義,一棵深度為k且有2k-1個結點的二叉樹為滿二叉樹。滿二叉樹的葉子結點為最后一層的結點數,又根據滿二叉樹的性質,在滿二叉樹的第i層上至多有2i-1個結點。因此深度為5的滿二叉樹的葉子結點數為25-1=16個。

4.B本題考查標準輸入輸出函數和循環語句。gets(s)函數的作用是將輸入的字符讀入字符串s,直到遇到回車。而scanf函數接收字符串時的結束標志為回車或者空格。因此選項B)不能,選項C)和選項D)中按字符逐個讀入字符串s中,直到讀入的字符是換行符為止,因此B正確。

5.D解析:關系代數運算的基本運算符有4類:集合運算符、專門的關系運算符、算術運算符和邏輯運算符。并、差、笛卡兒積、投影、選擇是5種基本的運算,其他運算可以通過基本的運算導出。

6.D解析:在數據庫系統中,通過系統提供的映象功能,使數據具有兩方面的獨立性:一是物理獨立性。即由于數據的存儲結構與邏輯結構之間由系統提供映象,使得當數據的存儲結構改變時,其邏輯結構可以不變,因此,基于邏輯結構的應用程序不必修改。二是邏輯獨立性。即由于數據的局部邏輯結構(它是總體邏輯結構的一個子集,由具體的應用程序所確定,并且根據具體的需要可以作一定的修改)與總體邏輯結構之間也由系統提供映象,使得當總體邏輯結構改變時,其局部邏輯結構可以不變,從而根據局部邏輯結構編寫的應用程序也可以不必修改。由此可知,選項A.B與C中的說法都是錯誤的。

7.A解析:C程序由順序結構、選擇結構和循環結構三種基本的結構組成,這三種結構可以組成任何復雜的C程序,即可以完成任何復雜的任務。

8.C在輸入3和5之間除逗號外不能有其他字符。

9.B解析:B選項錯誤,原因是,數據庫應該具有物理獨立性和邏輯獨立性,改變其一而不影響另一個。

10.B解析:本題考查if語句。scanf函數通過鍵盤讀入a、b的值,a=1,b=2。第一個if語句,先判斷條件,發現a<b條件成立,則s=b=2,s=s*s=4。

11.D“typedefint*(*T[10])[10];”使用typedef定義一種新類型名T,T的類型是二維數組指針,指向10個元素的數組。其中數組元素類型為int*[10],即數組的每個元素又是包含10個元素的數組,數組的元素是整型指針類型。故本題答案為D選項。

12.Aswitch語句中不一定使用break語句,選項A正確;break語句除了用于switch語句,還可以用于循環語句中,選項B、C錯誤;switch語句不一定需要使用default語句,選項D錯誤。本題答案為A選項。

13.2424解析:本題考查函數的循環調用。p=x*func(x-1),當x=4時,不滿足if語句的條件,p=4*func(3),x=3也不滿足條件,則func(3)=3*func(2),func(2)=2*func(1),x=1滿足條件return(1),則輸出結果為4*3*2*1-24。

14.a[i-1]或a[-1+i]a[9-i]或a[-i+9]a[i-1]或a[-1+i]\r\na[9-i]或a[-i+9]

15.指針P指向數組a的首地址,執行語句p++;后p指向數組a的第2個元素的地址,即a[1]的地址,因此*p=a[1]=4。\r\n\r\n

16.k=p;k=p;解析:要找數組中最大元素的下標,首先預設數組首元素下標為臨時最大元素的下標,從首元素開始順序向后繼元素逐一比較,當發現當前元素比臨時最大元素更大時,就用當前元素的下標更新臨時最大元素下標,直至比較了數組的全部元素后,臨時最大元素下標就是數組中最大元素的下標。程序中,變量k用于存儲臨時最大元素下標,變量p控制順序比較的循環變量。當發現當前元素s[p]比臨時最大元素s[k]更大時,用p更新k。所以在下劃線處應填入代碼“k=p;”。

17.88解析:本題考查基本的for循環條件,i+=2表示i每次遞增2,從0開始,輸出5個整數則需要的條件是i<=8。

18.數據模型數據模型

19.k=k*ik=k*i解析:本題中通過for循環求s表達式中每一項的和,表達式“fac=fac/k;”求的是每一項的值,所以k的值應為n!,在求n!的時候,可以用上次循環階乘的值乘i,就可以直接得此次n!,故本題填k=k*i。

20.5858解析:本題中處理二維數組元素用了兩重循環,外循環變量i表示數組的行,內層循環變量j表示數組的列。在第二重循環中首先判斷數組元素的值是否小于0,若是則處理該行的下一個元素:若不是則判斷a[i][j],田的值是否等于0,若等于0則退出內層循環開始處理下一行;其他情況下,把a[i][j]的值加到變量s中。所以本程序段的功能是把每行值為0的元素前面的所有大于。的元素值加到變量s中。

21.s[i++]s[i++]解析:本題中為了能實現字符串的拷貝,需要使字符數組s從頭到尾依次遍歷其有元素。本題應使用i舶自增后置來實現。

22.aa解析:“z”的ASCII碼值為122,經過c-25運算后得97,以字符形式輸出是a。

23.視圖表視圖表解析:關系數據庫中通常有3種關系,即基本關系(又稱基本表或基表)、查詢表和視圖表。基本表是在機器中實際存儲數據的表。查詢表是查詢的結果所對應的臨時表。視圖表是由基本表或其他視圖表導出的表,是不實際存儲數據的表。視圖表是一個虛表。

24.92

25.voidfun(char.*a){intij=0;for(i=0;a[i]!='\0';i++)if(a[i]1='*')a[j++]=a[i];/*若不是要刪除的字符'*'則留下*/a[j]='\0';/*最后加上字符結束符'*'/}voidfun(char.*a)\r\n{\r\ninti,j=0;\r\nfor(i=0;a[i]!='\\0';i++)\r\nif(a[i]1='*')\r\na[j++]=a[i];/*若不是要刪除的字符'*'則留下*/\r\na[j]='\\0';/*最后加上字符結束符'*'/\r\n}解析:同樣的問題我們在前面也碰到過,本題中是刪除多余字符('*')。所以用循環從字符串的開始往后一個一個進行比較,若不是要刪除的字符(用ifa[i]!='*')來控制)則留下。注意下標變量j要從0開始,最后還要加上字符串結束符'\\0'。

26.STRECfun(STREC*achar*b){inti;STRECstr={"\0"-1};/*若沒找到摜定的學號在結構體變量中給學號置空串給成績置-1*/for(i=0;i<N;i++)if(strcmp(a[i].numb)==0)/*找到指定學號的學生數據*/str=a[i];returnstr;/*返回學生記錄*/}STRECfun(STREC*a,char*b)\r\n{\r\ninti;\r\nSTRECstr={'\\0',-1};/*若沒找到摜定的學號,在結構體變量中給學號置空串,給成績置-1*/\r\nfor(i=0;i<N;i++)\r\nif(strcmp(a[i].num,b)==0)/*找到指定學號的學生數據*/\r\nstr=a[i];\r\nreturnstr;/*返回學生記錄*/\r\n}解析:本程序一開始先使結構體變量str的學號為空串,成績為-1。題中循環體的功能是搜索所有學生的學號并判斷是否有學號與b所指字符串相同的(即找到),若找到則給str重新賦值(str=a[i]),若沒找到則str成員的值還是原有值(即未找到時學號返回空串,成績返回-1)。

題中已經給出字符串的比較只能用strcmp()函數,而不能直接進行比較,我們在改錯題分析中已經詳細講述了字符串操作函數,如strcmp(),strcat(),strcpy()和strlen()等,希望學習者能熟練掌握。

27.intfun(intlimintaa[MAX]){intijk=0;for(i=2;i<=lim;i++)/*求出小于或等于lim的全部素數*/{for(j=2;j<i;j++)if(i%j==0)break;if(j>=i)aa[k++]=i;;/*將求出的素數放入數組aa中*/}returnk;/*返回所求出的素數的個數*/}intfun(intlim,intaa[MAX])\r\n{\r\ninti,j,k=0;\r\nfor(i=2;i<=lim;i++)/*求出小于或等于lim的全部素數*/\r\n{for(j=2;j<i;j++)\r\nif(i%j==0)break;\r\nif(j>=i)\r\naa[k++]=i;;/*將求出的素數放入數組aa中*/\r\n}\r\nreturnk;/*返回所求出的素數的個數*/\r\n}解析:在做這道題時,我們只需掌握素數的基本算法就可以了,一般表示素數的方法如下:

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

if(i%j==0)break;

if(j>=i)

28.voidfun(char*aintninthinte){intij=0for(i=h;i<n-e;i++)/*第一個字母和最后一個字母之間的字符全不刪除*/a[j++]=a[i];a[j]='\0;/*在字符串最后加上結束標記*/}voidfun(char*a,intn,inth,inte)\r\n{\r\ninti,j=0\r\nfor(i=h;i<n-e;i++)/*第一個字母和最后一個字母之間的字符全不刪除*/\r\na[j++]=a[i];\r\na[j]='\\0;/*在字符串最后加上結束標記*/\r\n}解析:注意循環變量i的初值(h)和終止值(n-e),由于h和e分別是a中的前導*和尾部*的個數,n是字符串的長度,所以從a[h])到a[n-e-1]之間的所有字符都要留下,而其他字符均刪除。刪除操作(即留下相應字符)現己由循環完成。

本題技巧部分:

voidfun(char*a,intn,inth,inte)

{a[n-e]='\\0;

strcpy(a,a+h);}

另外,請注意,a(n-e]的作用是使最后一個字母后出現字符串結束符。木程序采用了strcpy()庫函數。

29.

解析:該程序功能是求出數組周邊元素的平均值。其中周邊元素是指第一行的元素的行下標為0,或者第n行的元素行下標為n-1,或者第一列元素的元素列下標為0,或者第n列的元素的列下標為n-1。

30.intfun(STREC*aSTREC*bintlinth){intij=0;for(i=0;i<N;i++)if((a[i].s>=0&&a[i].s<1)||(a[i].s>h&&a[i].s<=100))/*將各分數低于1高于h的學生記錄存于結構體數組b中*/b[j++]=a[i];returnj;/*返回分數范圍內的學生人數*/}intfun(STREC*a,STREC*b,intl,inth)\r\n{\r\ninti,j=0;\r\nfor(i=0;i<N;i++)\r\nif((a[i].s>=0&&a[i].s<1)||(a[i].s>h&&a[i].s<=100))/*將各分數低于1,高于h的學生記錄存于結構體數組b中*/\r\nb[j++]=a[i];\r\nreturnj;/*返回分數范圍內的學生人數*/\r\n}解析:處理此類分段統計問題,可采用多分支選擇語句或條件選擇語句。此處采用條件選擇語句解答,具體見參考答案。使用條件選擇語句進行分段統計時應當注意分段范圍。

31.voidfun(int*wintpintn){inti.jt;for(i=p;i<=n-1;i++)/*循環右移n-p次*/{t=w[n-11;for(j=n-2;j>=0;j--)/*實現循環右移*/w[j+1]=w[j];w[0]=t;}voidfun(int*w,intp,intn)\r\n{\r\ninti.j,t;\r\nfor(i=p;i<=n-1;i++)/*循環右移n-p次*/\r\n{t=w[n-11;\r\nfor(j=n-2;j>=0;j--)/*實現循環右移*/\r\nw[j+1]=w[j];\r\nw[0]=t;\r\n}解析:本題采用“循環右移”的算法。和我們在前面分析的稍有不

溫馨提示

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

評論

0/150

提交評論