2021-2022學年廣東省河源市全國計算機等級考試C語言程序設計模擬考試(含答案)_第1頁
2021-2022學年廣東省河源市全國計算機等級考試C語言程序設計模擬考試(含答案)_第2頁
2021-2022學年廣東省河源市全國計算機等級考試C語言程序設計模擬考試(含答案)_第3頁
2021-2022學年廣東省河源市全國計算機等級考試C語言程序設計模擬考試(含答案)_第4頁
2021-2022學年廣東省河源市全國計算機等級考試C語言程序設計模擬考試(含答案)_第5頁
已閱讀5頁,還剩54頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

2021-2022學年廣東省河源市全國計算機等級考試C語言程序設計模擬考試(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.

2.有以下程序

main()

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

for(i=0;i<9;i+=2)s+=*(t+i);

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

}

程序執行后的輸出結果是A.A.45B.20C.25D.36

3.

4.有以下程序

#include<stdio.h>

main()

{charc1,c2,c3,c4,c5,c6;

scanf("%c%c%c%c",&c1,&c2,&c3,&c4);

c5=getchar();c6=getchar();

putchar(c1);putchar(c2);

printf("%c%c\n",c5,c6);

}

程序運行后,若從鍵盤輸入(從第1列開始)

123<回車>

45678<回車>

則輸出結果是A.A.1267B.1256C.1278D.1245

5.fscanf函數的正確調用形式是()

A.fscanf(fp,格式字符串,輸出表列);

B.fscanf(格式字符串,輸出表列,fp);

C.fscanf(格式字符串,文件指針,輸出表列),

D.fscanf(文件指針,格式字符串,輸入表列);

6.有以下程序:#include<stdio.h>voidfun(char*a,charB){while(*(a++)!=‘0’);while(*(a-1)<B)*(a--)=*(a-1);*(a--)=b;}main(){chars[8]=“pmfc”,r,c;c=getchar();fun(s,c);puts(s);}程序運行時輸入k并按<Enter>鍵,則輸出結果為()。

A.pmfkcB.pmfckC.kpmfcD.pmkfc

7.下面說法正確的是()。A.A.一個C程序可以有多個主函數

B.一個C語言的函數中只允許有一對花括號

C.C程序的書寫格式是自由的,一個語句可以寫在一行上,也可以寫在多行內

D.在對C程序進行編譯時,可以發現注釋行中的拼寫錯誤

8.下列關于棧的描述中錯誤的是()。

A.棧是先進先出的線性表B.棧只能順序存儲C.棧具有記憶作用D.對棧的插入刪除操作中,不需要改變棧底指針

9.有以下程序:

#include<stdio.h>

main()

{ints=0.n;

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

{switch(s)

{case0;

case1:s+=1;

case2:s+=2;break;

case3:S+=3;

default:s+=4;

}

printf("%d,"s);

}

}

程序運行后的輸出結果是()。

A.1,2,4,

B.1,3,6,

C.3,10,14,

D.3,6,10,

10.允許對隊列進行的操作有()。

A.對隊列中的元素排序B.取出最近進隊的元素C.在隊頭元素之前插入元素D.刪除隊頭元素

11.設有以下程序段:intx=0,s=0;whUe(!x!=0)s+=++x;printf("%d",s);則()。

A.運行程序段后輸出0B.運行程序段后輸出1C.程序段中的控制表達式是非法的D.程序段執行無限次

12.算法分析的目的是()。

A.找出數據結構的合理性B.研究算法中的輸入和輸出的關系C.分析算法的效率以求改進D.分析算法的易懂性和文檔性

二、2.填空題(12題)13.下列程序的功能是:求出ss所指字符串中指定字符的個數,并返回此值。

例如,若輸入字符串123412132,指定字符1,則輸出3。請填空。

#include<stdio.h)

#deftneM81

intfun(char*ss,charc)

{inti=0;

for(;【】;ss++)

if(*ss==c)i++;

returni;

}

main()

{chara[M],ch;

printf("\nPleaseenterastring:");gets(a);

printf("\nPleaseenterachar:");ch=getchar();

printf("\nThenumberofthecharis:%d\n",fun(a,ch));

}

14.設a、b、c為整形數,且a=2,b=3,c=4則執行完以下語句后,a的值是【】。

a*=16+(b++)-(++c);

15.下面程序的運行結果是【】。

#inelude<stdio.h>

intf(inta[],intn)

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

elsereturna[0];

}

main()

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

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

}

16.對軟件是否能達到用戶所期望的要求的測試稱為【】。

17.數據結構分為線性結構和非線性結構,線性表、棧和隊列都屬于【】。

18.已有定義:double*p;,請寫出完整的語句,利用malloc函數使p指向一個雙精度型的動態存儲單元______。

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

fun(intx,inty,intz)

{z=x*x+y*y;}

main()

{inta=31;

fun(6,3,a)

printf("%d,a)

}

20.棧中允許進行插入和刪除的一端叫做______。

21.深度為5的滿二叉樹中,葉子結點的個數為______。

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

#include<stdio.h>

fun()

{staticinta=0;

a+=2;printf("%d",a);}

main()

{intcc;

for(cc=1;CC<4;CC++)fun();

printf("\n");}

23.以下程序調用函數swap將指針s和t所指單元(a和B)中的內容交換,請填空。main(){inta=10,b=20,*s,*t;s=&a;t=&b;()printf("%d%d",a,B);}swap(int*ss,int*tt){intte;te=*ss;*ss=*tt;*tt=te;}

24.算法復雜度主要包括時間復雜度和【】復雜度。

三、3.程序設計題(10題)25.請編寫一個函數fun(),它的功能是:將ss所指字符串中所有下標為偶數位置的字母轉換為小寫(若該位置上不是字母,則不轉換)。

例如,若輸入ABC4efG,則應輸出aBc4efg。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*SS)

{

}

main()

{

chartt[81];

clrscr();

printf("\nPleaseenteranstringwithin80

characters:\n");

gets(tt);

printf("\n\nAfterchanging,thestring\n

\%s",tt);

fun(tt);

printf("\nbecomes\n\%S\n",tt);

}

26.編寫函數fun(),它的功能是:求出1~1000之內能被7或11整除,但不能同時被7和11整除的所有整數,并將它們放在a所指的數組中,通過n返回這些數的個數。

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

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

[試題源程序]

#include<conio.h>

#include<stdio.h>

voidfun(int*a,int*n)

{

}

main()

{

intaa[1000],n,k;

clrscr();

fun(aa,&n);

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

if(k+1)%10==0)

{

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

printf("\n");

}

else

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

}

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

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

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

請勿改動主函數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");

}

28.請編寫函數fun(),它的功能是:求出ss所指字符串中指定字符的個數,并返回此值。

例如,若輸入字符串123412132,輸入字符1,則輸出3。

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

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

試題程序:

#include<coio.h>

#include<stdio.h>

#defineM81

intfun(char*ss,charc)

{

}

main()

{chara[M],ch;

clrscr();

printf("\nPleaseenterastring:");

gets(a);

printf("\nPleaseenterachar:");

ch=getchar();

printf("\nThenumberofthecharis:%d\n",fun(a,ch));

}

29.請編寫函數fun(),該函數的功能是:實現B=A+A',即把矩陣A加上A的轉置,存放在矩陣B中。計算結果在main()函數中輸出。

例如,輸入下面矩陣:

123

456

789

其轉置矩陣為:

147

258

369

則程序輸出:

2610

61014

101418

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

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

試題程序:

#include<stdio.h>

#include<conio,h>

voidfun(inta[3][3],intb[3][3])

{

}

main()

{

inta[3][3]={{1,2,3},{4,5,6},{7,8,9}},

t[3][3];

inti,j;

clrscr();

fun(a,t);

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

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

printf("%7d",t[i][j]);

printf("\n");

}

}

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,其功能是:根據以下公式求P的值,結果由函數值帶回。m與n為兩個正整數且要求m>n。

例如:m=12,n=8時,運行結果為495.000000。

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

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

32.編寫函數fun,函數的功能是求出小于或等于lim的所有素數并放在aa數組中,函數返回所求出的素數的個數。

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

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

33.請編寫一個函數fun(),它的功能是:求出一個2×M整型二維數組中最大元素的值,并將此值返回調用函數。

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

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

試題程序:

#defineM4

#include<stdio.h>

fun(inta[][M])

{

}

main()

{

intarr[2][M]={5,8,3,45,76,-4,12,82};

printf("max=%d\n",fun(arr));

}

34.某學生的記錄由學號、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);

/*輸出平均分*/

}

四、單選題(0題)35.某二叉樹的先序序列和后序序列正好相同,則該二叉樹可能是______的二叉樹。

A.高度大于1的左單支B.高度大于1的右單支C.最多只有一個結點D.既有左孩子又有右孩子

五、單選題(0題)36.語句:“printf("%d",(a=)&&(b=-2));”的輸出結果是()。

A.無輸出B.結果是不確定C.-1D.1

六、單選題(0題)37.在長度為n的有序線性表中進行二分查找,最壞情況下需要比較的次數是A.O(n)

B.O(n2)

C.O(log2n)

D.O(nlog2n)

參考答案

1.C

2.C解析:統計1~9九個數中的奇數和,此題考察指向數組的指針,C語言規定數組名代表數組的首地址,也就是第一個元素的地址。因此*(t+i)代表數組的第i+1個元素。程序運行的結果是1+2+3+4+5+6+7+8+9=25。

3.D

4.D解析:putchar(c1)輸出1,putchar(c2)輸出2,printf(“%c%c\\n”,c5,c6)輸出45。

5.D

6.Dmain函數定義一個字符數組s,使用字符串“pmfc”初始化;然后通過getchar讀取一個字符k到字符變量c;再將字符串s和字符c傳入fun函數。函數fun首先通過while循環遍歷字符串s,直到指針a指向字符串結束標識‘\\0’后的一個字符,如下圖所示。接著通過while循環逆序遍歷字符串s,首先a-1的字符位‘\\0’,它的ASCII值為0,小于b(字符‘k’)的ASCII值107,那么將‘\\0’賦給下標為5的元素位置。接著繼續向前遍歷,同理,將‘c’(ASCII值為99)賦給下標為4的元素位置,將‘f’(ASCII值為102)賦給下標為3的元素位置。由于‘m’(ASCII值為109)大于b,因此循環結束,將b(字符‘k’)賦給下標為2的元素位置,此時str字符串如下。故本題答案為D選項。

7.C解析:本題涉及C語言基本的3個知識點:①C語言規定一個程序只允許有一個主函數,一個函數內可以允許有多個花括號;②C程序的注釋部分僅僅是方便程序員閱讀,提高程序的可讀性和可移植性,它并不參與程序的編譯,所以編譯器也就不會發現注釋中的錯誤。

8.B

\n棧是線性表的一種,它的特點是先進后出,并且只能在表的一端進行插入和刪除操作的線性表,入棧和出棧都是在棧頂進行,因此具有記憶作用,棧可以采用順序存儲,也可以采用鏈式存儲。

\n

9.C\n本題考查switch…ease語句,在本題的程序中,只有在case2:s=s+2;break;,才有break語句,所以當s=0時會執行s=s+1;s=s+2;,所以s=3,當s=3時,會執行s=s十3;s=s+4;,所以s=10,依此類推,答案選擇C。

\n

10.D

11.B解析:本題中,邏輯非“!”運算符比不等于“!=”運算符優先級高,因此第一次循環時!x!=0的運算結果為真,s的運算結果為1;第二次循環時!x!=0的運算結果為假,循環結束,輸出s的結果為1。

12.C

13.*ss!='\0'*ss!='\\0'解析:從字符串ss中找出某字符的方法是:從字符串ss的第一個字符開始,依次進行比較,若ss串的當前字符等于字符c,則i++;若ss串的當前字符和字符c不同,則繼續對ss串的下一個字符進行比較。本程序采用循環逐一比較的方式,找出某字符在字符串中出現的次數。汀語句的作用是判斷某字符與字符串中的當前字符是否相同。

14.28

15.66解析:已知aa[3]={1,2,3},n=3,調用函數f,n>1成立,執行a[0]+f(&a[1],n-1);即1+f(&a[1],2),遞歸調用函數f,將a[1]的地址作為參數傳給數組a,使數組a的首地址變為&a[1],數組中的元素只有2,3;2傳給n,這時n=2,n>1仍然成立,繼續調用a[0]+f(&a[1],n-1);即執行1+2+f(&a[1],1),因為上次遞歸調用函數f后數組中的元素為2,3,所以此次的a[1]為3,調用后的a[0]為3。所以最后結果為1+2+3=6。

16.有效性測試有效性測試

17.線性結構線性結構解析:本題考查了數據結構的基本概念。與棧類似,隊列也是線性表,可以采用鏈式存儲結構,所以帶鏈的隊列屬于線性結構。

18.p=(double*)malloc(sizeof(double)):或p=(double*)malloc(8);p=(double*)malloc(sizeof(double)):或p=(double*)malloc(8);解析:malloc()函數只有一個參數,該參數指定了需要分配多少字節的內存。然后將分配好的內存塊的首地址作為void*(未知類型指針)返回.故標準的調用形式應該寫成:

p(double*)malloc(sizeof(double));

19.3131解析:在函數調用時,形參值和改變,不會改變實參的值。

20.棧頂棧頂解析:棧是限定在表的一端進行插入和刪除操作的線性表。在表中,允許插入和刪除的一端叫做“棧頂”,不允許插入和刪除的一端叫做“棧底”。

21.1616解析:滿二叉樹的葉子結點都在最后一層,即第4層,且第4層的結點達到最大數,即25-1=16。

22.246246解析:本題考查了for循環語句的使用,同時靜態局部變量的存儲和生存其特性也要注意。第一次執行fun()函數時,a=0,所以a+=2=2;第二次執行fun()函數時,a保留著上次制形式的結果2,所以a+=2=4;同理第三次執行fun()函數時,a=6,所以輸出結果為246。

23.swap(st);swap(s,t);解析:本題要在主函數中調用swap函數交換a、b的值,實現數據交換需要進行地址傳遞,所以函數的形參都應該是需要交換的數據的地址,程序中通過“s=&a;t=&b;”將指針變量s和t指向變量a、b的地址,因此,引用時直接引用指針變量s和t即可。

24.空間空間解析:程序在計算機上運行時所耗費的時間由程序運行時所需輸入的數據總量、對源程序進行編譯所需時間、計算機執行每條指令所需時間、程序中的指令重復執行的次數等決定。習慣上常常把語句重復執行的次數作為算法運行時間的相對量度,稱作算法的時間復雜度。算法在運行過程中需輔助存儲空間的大小稱為算法的空間復雜度。

25.voidfun(char*ss){inti;for(i=0;ss[i]!='\0'i++)/*將ss所指字符串中所有下標為偶數位置的字母轉換為小寫*/if(i%2==0&&ss[i]>='A'&&ss[i]<='z')ss[i]=ss[i]+32;}voidfun(char*ss)\r\n{\r\ninti;\r\nfor(i=0;ss[i]!='\\0'i++)/*將ss所指字符串中所有下標為偶數位置的字母轉換為小寫*/\r\nif(i%2==0&&ss[i]>='A'&&ss[i]<='z')\r\nss[i]=ss[i]+32;\r\n}解析:從C語言的學習中我們知道,只要將小寫字母減去32則轉成大寫字母,將大寫字母加上32則轉成小寫字母。該程序是用if語句實現該功能轉化的。

26.voidfun(int*aint*n){intij=0;for(i=1;i<=1000;i++)if((i%7=0||i%11==0)&&i%77!=0)a[j++]=i;*n=j;}voidfun(int*a,int*n)\r\n{\r\ninti,j=0;\r\nfor(i=1;i<=1000;i++)\r\nif((i%7=0||i%11==0)&&i%77!=0)\r\na[j++]=i;\r\n*n=j;\r\n}解析:本題的關鍵是if條件語句及參數傳遞。本題的設計思路是:(1)利用循環遍歷1到1000之內的整數;(2)利用if語句判斷,把查找到的整數保存到形參數組a中;(3)把數組a中數組元素的個數賦值到形參指針n所指的內存。注意程序中if語句的判斷條件,本題是找出能被7或11整除但不能同時被7和11整除的所有整數。能同時被7和11整除的數一定能被77整除,且不能被7整除的數不一定就是能被7或11整除的數。所以,可得出程序中的if語句。

27.voidfun(int*wintpintn){intijt;for(i=0;i<=p;i++)/*循環左移p+1次*/{t=w[0];for(j=1/j<n;j++)/*實現循環左移*/w[j-1]=w[j];w[j-1]=t;}}voidfun(int*w,intp,intn)\r\n{\r\ninti,j,t;\r\nfor(i=0;i<=p;i++)/*循環左移p+1次*/\r\n{t=w[0];\r\nfor(j=1/j<n;j++)/*實現循環左移*/\r\nw[j-1]=w[j];\r\nw[j-1]=t;\r\n}\r\n}解析:本題采用“循環左移”的算法(關于“循環左移”,我們在后面的試題中有詳細的解釋)。和我們在前面分析的稍有不同的是,一個是整型數組,一個是字符型數組。

28.intfun(char*sscharc){inti=0;for(;*ss!='\0';ss++)if(*ss==c)i++;/*求出ss所指字符串中指定字符的個數*/returni;}intfun(char*ss,charc)\r\n{\r\ninti=0;\r\nfor(;*ss!='\\0';ss++)\r\nif(*ss==c)\r\ni++;/*求出ss所指字符串中指定字符的個數*/\r\nreturni;\r\n}解析:從字符串ss中找出子字符串的方法是:從第1個字符開始,對字符串進行遍歷:若ss串的當前字符等于t串的第1個字符,兩字符串的指針自動加1,繼續比較下一個字符;若比較至字符串的結尾,則跳出循環;若“串的字符和c串的字符不對應相同,則繼續對,s串的下一個字符進行處理。本程序是采用逐一比較的方式找出出現的次數。循環的作用是在串中從左到右逐一走動,if()的作用是進行判斷是否相同,若與c相同則表示又出現一次.

29.voidfun(inta[3][3]intb[3][3]){intij;for(i=0;i<3;i++)for(j=0;j<3;j++)b[i][j]=a[i][j]+a[j][i];/*把矩陣a加上a的轉置存放在矩陣b中*/}voidfun(inta[3][3],intb[3][3])\r\n{\r\ninti,j;\r\nfor(i=0;i<3;i++)\r\nfor(j=0;j<3;j++)\r\nb[i][j]=a[i][j]+a[j][i];/*把矩陣a加上a的轉置,存放在矩陣b中*/\r\n}解析:在《線性代數》里面有矩陣轉置的概念,行列數相等的二維數組的轉置就是行列互換。即轉置后的第i行第j列正好對應原矩陣的第j行第i列。

若要將矩陣a轉置后還存入a中可用程序:

inti,j,t;

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

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

{t=a[i][j];a[i][j]=a[j][i];a[j][ii=t;}

注意第2個循環的初值。

若要將矩陣a轉置后存入c中:

inti,j;

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

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

c[i][j]=a[j][i];

注意數組c和a的下標。

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.

解析:(1)該程序功能是對組合數公式求值。它的解題思路,可以分解為以下幾步:求m!→求n!→求(m-n)!→求組合數的值。

(2)從已給部分源程序的main主函數開始入手,主函數中的“printf(“P=%f\n”,fun(12,8));”語句中“fun(12,8)”將12、8傳遞給fun中的m與n,fun函數實現對組合數的求佰。

32.

解析:該程序功能是求一定范圍內的素數。素數是只能被1和自身除盡的數。判斷i是不是素數最簡單的方法就是用2~(i/2)去除i,只要能除盡就不是素數。

33.fun(inta[][M]){intijmax=a[0][0];for(i=0;i<2;i++)for(j=0;j<M;j++)if(max<a[i][j])max=a[i][j];/*求出二維數組的最大值*/returnmax;}fun(inta[][M])\r\n{\r\ninti,j,max=a[0][0];\r\nfor(i=0;i<2;i++)\r\nfor(j=0;j<M;j++)\r\nif(max<a[i][j])\r\nmax=a[i][j];/*求出二維數組的最大值*/\r\nreturnmax;\r\n}解析:此類求最大值或最小值的C語言問題,我們可以采用逐個比較的方式。要求數組中的所有元素走動一遍,并從中找出最大、最小值,要注意一開始應使max存放數組中的第一個元素的值。可按逐行查找也可按逐列查找的方式,本題采用的是逐行查找的方式。即行下標在外層循環列下標在內層循環,因為在循環的嵌套中越在內層循環,循環變化就越快。

34.voidfun(STREC*p){inti;p->ave=0.0;for(i=0;i<N;i++)p->ave=p->ave+p->s[i];/*求各門成績的總和*/p->ave=p->ave/N;/*求平均分*/}voidfun(STREC*p)\r\n{\r\ninti;\r\np->ave=0.0;\r\nfor(i=0;i<N;i++)\r\np->ave=p->ave+p->s[i];/*求各門成績的總和*/\r\np->ave=p->ave/N;/*求平均分*/\r\n}解析:本題考查自己定義形參的相關知識點,程序流程是這樣的,在fun()函數中求出平均分后,返回到主函數時平均分也要帶回,所以只能定義一個指針類型的形參STREC*p,此時,引用成員的方式可以是用指向運算符即p->ave和p->s[i],當然,也可用(*p).ave和(*p).s[i]。

35.C

36.D因為在邏輯表達式中,兩邊的賦值表達式都成立,即值為1,故選擇D選項。

37.C解析:二分查找法也稱為折半查找法。它的基本思想是:將n個元素分成個數大致相同的兩半,取a[n/2]與欲查找的x作比較,如果x=a[n/2],則找到x,算法終止;如果x<a[n/2],則只要在數組a的左半部繼續搜索x(這里假設數組元素呈升序排列);如果x>a[n/2],則只要在數組a的右半部繼續搜索x。每次余下n/(2i)個元素待比較,當最后剩下一個時,即n/(2i)=1。故n=2i;所以i=log2n。2021-2022學年廣東省河源市全國計算機等級考試C語言程序設計模擬考試(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.

2.有以下程序

main()

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

for(i=0;i<9;i+=2)s+=*(t+i);

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

}

程序執行后的輸出結果是A.A.45B.20C.25D.36

3.

4.有以下程序

#include<stdio.h>

main()

{charc1,c2,c3,c4,c5,c6;

scanf("%c%c%c%c",&c1,&c2,&c3,&c4);

c5=getchar();c6=getchar();

putchar(c1);putchar(c2);

printf("%c%c\n",c5,c6);

}

程序運行后,若從鍵盤輸入(從第1列開始)

123<回車>

45678<回車>

則輸出結果是A.A.1267B.1256C.1278D.1245

5.fscanf函數的正確調用形式是()

A.fscanf(fp,格式字符串,輸出表列);

B.fscanf(格式字符串,輸出表列,fp);

C.fscanf(格式字符串,文件指針,輸出表列),

D.fscanf(文件指針,格式字符串,輸入表列);

6.有以下程序:#include<stdio.h>voidfun(char*a,charB){while(*(a++)!=‘0’);while(*(a-1)<B)*(a--)=*(a-1);*(a--)=b;}main(){chars[8]=“pmfc”,r,c;c=getchar();fun(s,c);puts(s);}程序運行時輸入k并按<Enter>鍵,則輸出結果為()。

A.pmfkcB.pmfckC.kpmfcD.pmkfc

7.下面說法正確的是()。A.A.一個C程序可以有多個主函數

B.一個C語言的函數中只允許有一對花括號

C.C程序的書寫格式是自由的,一個語句可以寫在一行上,也可以寫在多行內

D.在對C程序進行編譯時,可以發現注釋行中的拼寫錯誤

8.下列關于棧的描述中錯誤的是()。

A.棧是先進先出的線性表B.棧只能順序存儲C.棧具有記憶作用D.對棧的插入刪除操作中,不需要改變棧底指針

9.有以下程序:

#include<stdio.h>

main()

{ints=0.n;

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

{switch(s)

{case0;

case1:s+=1;

case2:s+=2;break;

case3:S+=3;

default:s+=4;

}

printf("%d,"s);

}

}

程序運行后的輸出結果是()。

A.1,2,4,

B.1,3,6,

C.3,10,14,

D.3,6,10,

10.允許對隊列進行的操作有()。

A.對隊列中的元素排序B.取出最近進隊的元素C.在隊頭元素之前插入元素D.刪除隊頭元素

11.設有以下程序段:intx=0,s=0;whUe(!x!=0)s+=++x;printf("%d",s);則()。

A.運行程序段后輸出0B.運行程序段后輸出1C.程序段中的控制表達式是非法的D.程序段執行無限次

12.算法分析的目的是()。

A.找出數據結構的合理性B.研究算法中的輸入和輸出的關系C.分析算法的效率以求改進D.分析算法的易懂性和文檔性

二、2.填空題(12題)13.下列程序的功能是:求出ss所指字符串中指定字符的個數,并返回此值。

例如,若輸入字符串123412132,指定字符1,則輸出3。請填空。

#include<stdio.h)

#deftneM81

intfun(char*ss,charc)

{inti=0;

for(;【】;ss++)

if(*ss==c)i++;

returni;

}

main()

{chara[M],ch;

printf("\nPleaseenterastring:");gets(a);

printf("\nPleaseenterachar:");ch=getchar();

printf("\nThenumberofthecharis:%d\n",fun(a,ch));

}

14.設a、b、c為整形數,且a=2,b=3,c=4則執行完以下語句后,a的值是【】。

a*=16+(b++)-(++c);

15.下面程序的運行結果是【】。

#inelude<stdio.h>

intf(inta[],intn)

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

elsereturna[0];

}

main()

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

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

}

16.對軟件是否能達到用戶所期望的要求的測試稱為【】。

17.數據結構分為線性結構和非線性結構,線性表、棧和隊列都屬于【】。

18.已有定義:double*p;,請寫出完整的語句,利用malloc函數使p指向一個雙精度型的動態存儲單元______。

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

fun(intx,inty,intz)

{z=x*x+y*y;}

main()

{inta=31;

fun(6,3,a)

printf("%d,a)

}

20.棧中允許進行插入和刪除的一端叫做______。

21.深度為5的滿二叉樹中,葉子結點的個數為______。

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

#include<stdio.h>

fun()

{staticinta=0;

a+=2;printf("%d",a);}

main()

{intcc;

for(cc=1;CC<4;CC++)fun();

printf("\n");}

23.以下程序調用函數swap將指針s和t所指單元(a和B)中的內容交換,請填空。main(){inta=10,b=20,*s,*t;s=&a;t=&b;()printf("%d%d",a,B);}swap(int*ss,int*tt){intte;te=*ss;*ss=*tt;*tt=te;}

24.算法復雜度主要包括時間復雜度和【】復雜度。

三、3.程序設計題(10題)25.請編寫一個函數fun(),它的功能是:將ss所指字符串中所有下標為偶數位置的字母轉換為小寫(若該位置上不是字母,則不轉換)。

例如,若輸入ABC4efG,則應輸出aBc4efg。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*SS)

{

}

main()

{

chartt[81];

clrscr();

printf("\nPleaseenteranstringwithin80

characters:\n");

gets(tt);

printf("\n\nAfterchanging,thestring\n

\%s",tt);

fun(tt);

printf("\nbecomes\n\%S\n",tt);

}

26.編寫函數fun(),它的功能是:求出1~1000之內能被7或11整除,但不能同時被7和11整除的所有整數,并將它們放在a所指的數組中,通過n返回這些數的個數。

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

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

[試題源程序]

#include<conio.h>

#include<stdio.h>

voidfun(int*a,int*n)

{

}

main()

{

intaa[1000],n,k;

clrscr();

fun(aa,&n);

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

if(k+1)%10==0)

{

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

printf("\n");

}

else

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

}

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

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

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

請勿改動主函數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");

}

28.請編寫函數fun(),它的功能是:求出ss所指字符串中指定字符的個數,并返回此值。

例如,若輸入字符串123412132,輸入字符1,則輸出3。

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

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

試題程序:

#include<coio.h>

#include<stdio.h>

#defineM81

intfun(char*ss,charc)

{

}

main()

{chara[M],ch;

clrscr();

printf("\nPleaseenterastring:");

gets(a);

printf("\nPleaseenterachar:");

ch=getchar();

printf("\nThenumberofthecharis:%d\n",fun(a,ch));

}

29.請編寫函數fun(),該函數的功能是:實現B=A+A',即把矩陣A加上A的轉置,存放在矩陣B中。計算結果在main()函數中輸出。

例如,輸入下面矩陣:

123

456

789

其轉置矩陣為:

147

258

369

則程序輸出:

2610

61014

101418

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

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

試題程序:

#include<stdio.h>

#include<conio,h>

voidfun(inta[3][3],intb[3][3])

{

}

main()

{

inta[3][3]={{1,2,3},{4,5,6},{7,8,9}},

t[3][3];

inti,j;

clrscr();

fun(a,t);

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

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

printf("%7d",t[i][j]);

printf("\n");

}

}

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,其功能是:根據以下公式求P的值,結果由函數值帶回。m與n為兩個正整數且要求m>n。

例如:m=12,n=8時,運行結果為495.000000。

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

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

32.編寫函數fun,函數的功能是求出小于或等于lim的所有素數并放在aa數組中,函數返回所求出的素數的個數。

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

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

33.請編寫一個函數fun(),它的功能是:求出一個2×M整型二維數組中最大元素的值,并將此值返回調用函數。

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

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

試題程序:

#defineM4

#include<stdio.h>

fun(inta[][M])

{

}

main()

{

intarr[2][M]={5,8,3,45,76,-4,12,82};

printf("max=%d\n",fun(arr));

}

34.某學生的記錄由學號、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);

/*輸出平均分*/

}

四、單選題(0題)35.某二叉樹的先序序列和后序序列正好相同,則該二叉樹可能是______的二叉樹。

A.高度大于1的左單支B.高度大于1的右單支C.最多只有一個結點D.既有左孩子又有右孩子

五、單選題(0題)36.語句:“printf("%d",(a=)&&(b=-2));”的輸出結果是()。

A.無輸出B.結果是不確定C.-1D.1

六、單選題(0題)37.在長度為n的有序線性表中進行二分查找,最壞情況下需要比較的次數是A.O(n)

B.O(n2)

C.O(log2n)

D.O(nlog2n)

參考答案

1.C

2.C解析:統計1~9九個數中的奇數和,此題考察指向數組的指針,C語言規定數組名代表數組的首地址,也就是第一個元素的地址。因此*(t+i)代表數組的第i+1個元素。程序運行的結果是1+2+3+4+5+6+7+8+9=25。

3.D

4.D解析:putchar(c1)輸出1,putchar(c2)輸出2,printf(“%c%c\\n”,c5,c6)輸出45。

5.D

6.Dmain函數定義一個字符數組s,使用字符串“pmfc”初始化;然后通過getchar讀取一個字符k到字符變量c;再將字符串s和字符c傳入fun函數。函數fun首先通過while循環遍歷字符串s,直到指針a指向字符串結束標識‘\\0’后的一個字符,如下圖所示。接著通過while循環逆序遍歷字符串s,首先a-1的字符位‘\\0’,它的ASCII值為0,小于b(字符‘k’)的ASCII值107,那么將‘\\0’賦給下標為5的元素位置。接著繼續向前遍歷,同理,將‘c’(ASCII值為99)賦給下標為4的元素位置,將‘f’(ASCII值為102)賦給下標為3的元素位置。由于‘m’(ASCII值為109)大于b,因此循環結束,將b(字符‘k’)賦給下標為2的元素位置,此時str字符串如下。故本題答案為D選項。

7.C解析:本題涉及C語言基本的3個知識點:①C語言規定一個程序只允許有一個主函數,一個函數內可以允許有多個花括號;②C程序的注釋部分僅僅是方便程序員閱讀,提高程序的可讀性和可移植性,它并不參與程序的編譯,所以編譯器也就不會發現注釋中的錯誤。

8.B

\n棧是線性表的一種,它的特點是先進后出,并且只能在表的一端進行插入和刪除操作的線性表,入棧和出棧都是在棧頂進行,因此具有記憶作用,棧可以采用順序存儲,也可以采用鏈式存儲。

\n

9.C\n本題考查switch…ease語句,在本題的程序中,只有在case2:s=s+2;break;,才有break語句,所以當s=0時會執行s=s+1;s=s+2;,所以s=3,當s=3時,會執行s=s十3;s=s+4;,所以s=10,依此類推,答案選擇C。

\n

10.D

11.B解析:本題中,邏輯非“!”運算符比不等于“!=”運算符優先級高,因此第一次循環時!x!=0的運算結果為真,s的運算結果為1;第二次循環時!x!=0的運算結果為假,循環結束,輸出s的結果為1。

12.C

13.*ss!='\0'*ss!='\\0'解析:從字符串ss中找出某字符的方法是:從字符串ss的第一個字符開始,依次進行比較,若ss串的當前字符等于字符c,則i++;若ss串的當前字符和字符c不同,則繼續對ss串的下一個字符進行比較。本程序采用循環逐一比較的方式,找出某字符在字符串中出現的次數。汀語句的作用是判斷某字符與字符串中的當前字符是否相同。

14.28

15.66解析:已知aa[3]={1,2,3},n=3,調用函數f,n>1成立,執行a[0]+f(&a[1],n-1);即1+f(&a[1],2),遞歸調用函數f,將a[1]的地址作為參數傳給數組a,使數組a的首地址變為&a[1],數組中的元素只有2,3;2傳給n,這時n=2,n>1仍然成立,繼續調用a[0]+f(&a[1],n-1);即執行1+2+f(&a[1],1),因為上次遞歸調用函數f后數組中的元素為2,3,所以此次的a[1]為3,調用后的a[0]為3。所以最后結果為1+2+3=6。

16.有效性測試有效性測試

17.線性結構線性結構解析:本題考查了數據結構的基本概念。與棧類似,隊列也是線性表,可以采用鏈式存儲結構,所以帶鏈的隊列屬于線性結構。

18.p=(double*)malloc(sizeof(double)):或p=(double*)malloc(8);p=(double*)malloc(sizeof(double)):或p=(double*)malloc(8);解析:malloc()函數只有一個參數,該參數指定了需要分配多少字節的內存。然后將分配好的內存塊的首地址作為void*(未知類型指針)返回.故標準的調用形式應該寫成:

p(double*)malloc(sizeof(double));

19.3131解析:在函數調用時,形參值和改變,不會改變實參的值。

20.棧頂棧頂解析:棧是限定在表的一端進行插入和刪除操作的線性表。在表中,允許插入和刪除的一端叫做“棧頂”,不允許插入和刪除的一端叫做“棧底”。

21.1616解析:滿二叉樹的葉子結點都在最后一層,即第4層,且第4層的結點達到最大數,即25-1=16。

22.246246解析:本題考查了for循環語句的使用,同時靜態局部變量的存儲和生存其特性也要注意。第一次執行fun()函數時,a=0,所以a+=2=2;第二次執行fun()函數時,a保留著上次制形式的結果2,所以a+=2=4;同理第三次執行fun()函數時,a=6,所以輸出結果為246。

23.swap(st);swap(s,t);解析:本題要在主函數中調用swap函數交換a、b的值,實現數據交換需要進行地址傳遞,所以函數的形參都應該是需要交換的數據的地址,程序中通過“s=&a;t=&b;”將指針變量s和t指向變量a、b的地址,因此,引用時直接引用指針變量s和t即可。

24.空間空間解析:程序在計算機上運行時所耗費的時間由程序運行時所需輸入的數據總量、對源程序進行編譯所需時間、計算機執行每條指令所需時間、程序中的指令重復執行的次數等決定。習慣上常常把語句重復執行的次數作為算法運行時間的相對量度,稱作算法的時間復雜度。算法在運行過程中需輔助存儲空間的大小稱為算法的空間復雜度。

25.voidfun(char*ss){inti;for(i=0;ss[i]!='\0'i++)/*將ss所指字符串中所有下標為偶數位置的字母轉換為小寫*/if(i%2==0&&ss[i]>='A'&&ss[i]<='z')ss[i]=ss[i]+32;}voidfun(char*ss)\r\n{\r\ninti;\r\nfor(i=0;ss[i]!='\\0'i++)/*將ss所指字符串中所有下標為偶數位置的字母轉換為小寫*/\r\nif(i%2==0&&ss[i]>='A'&&ss[i]<='z')\r\nss[i]=ss[i]+32;\r\n}解析:從C語言的學習中我們知道,只要將小寫字母減去32則轉成大寫字母,將大寫字母加上32則轉成小寫字母。該程序是用if語句實現該功能轉化的。

26.voidfun(int*aint*n){intij=0;for(i=1;i<=1000;i++)if((i%7=0||i%11==0)&&i%77!=0)a[j++]=i;*n=j;}voidfun(int*a,int*n)\r\n{\r\ninti,j=0;\r\nfor(i=1;i<=1000;i++)\r\nif((i%7=0||i%11==0)&&i%77!=0)\r\na[j++]=i;\r\n*n=j;\r\n}解析:本題的關鍵是if條件語句及參數傳遞。本題的設計思路是:(1)利用循環遍歷1到1000之內的整數;(2)利用if語句判斷,把查找到的整數保存到形參數組a中;(3)把數組a中數組元素的個數賦值到形參指針n所指的內存。注意程序中if語句的判斷條件,本題是找出能被7或11整除但不能同時被7和11整除的所有整數。能同時被7和11整除的數一定能被77整除,且不能被7整除的數不一定就是能被7或11整除的數。所以,可得出程序中的if語句。

27.voidfun(int*wintpintn){intijt;for(i=0;i<=p;i++)/*循環左移p+1次*/{t=w[0];for(j=1/j<n;j++)/*實現循環左移*/w[j-1]=w[j];w[j-1]=t;}}voidfun(int*w,intp,intn)\r\n{\r\ninti,j,t;\r\nfor(i=0;i<=p;i++)/*循環左移p+1次*/\r\n{t=w[0];\r\nfor(j=1/j<n;j++)/*實現循環左移*/\r\nw[j-1]=w[j];\r\nw[j-1]=t;\r\n}\r\n}解析:本題采用“循環左移”的算法(關于“循環左移”,我們在后面的試題中有詳細的解釋)。和我們在前面分析的稍有不同的是,一個是整型數組,一個是字符型數組。

28.intfun(char*sscharc){inti=0;f

溫馨提示

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

評論

0/150

提交評論