2022年河北省張家口市全國計算機等級考試C語言程序設(shè)計模擬考試(含答案)_第1頁
2022年河北省張家口市全國計算機等級考試C語言程序設(shè)計模擬考試(含答案)_第2頁
2022年河北省張家口市全國計算機等級考試C語言程序設(shè)計模擬考試(含答案)_第3頁
2022年河北省張家口市全國計算機等級考試C語言程序設(shè)計模擬考試(含答案)_第4頁
2022年河北省張家口市全國計算機等級考試C語言程序設(shè)計模擬考試(含答案)_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2022年河北省張家口市全國計算機等級考試C語言程序設(shè)計模擬考試(含答案)學(xué)校:________班級:________姓名:________考號:________

一、單選題(12題)1.

2.以下程序是用來計算兩個非負數(shù)之間的最大公約數(shù):我們假設(shè)x,y中最大的那個數(shù)的長度為n,基本運算時間復(fù)雜度為O(1),那么該程序的時間復(fù)雜度為()A.O(1)B.O(logn)C.O(n)D.O(n^2)

3.在軟件測試設(shè)計中,軟件測試的主要目的是

A.實驗性運行軟件B.證明軟件正確C.找出軟件中全部錯誤D.盡可能多地發(fā)現(xiàn)軟件中的錯誤

4.下列關(guān)于邏輯運算符兩側(cè)運算對象的敘述中正確的是()。

A.只能是整數(shù)0或1B.只能是整數(shù)0或非0整數(shù)C.可以是結(jié)構(gòu)體類型的數(shù)據(jù)D.可以是任意合法的表達式

5.有以下程序

main()

{intk=5,n=0;

do

{switch(k)

{case1:case3:n+=1;k--;break;

default:n=0;k--;

case2:case4:n+=2;k--;break;

}

printf("%d",n);

}while(k>0&&n<5);

}

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

A.235B.0235C.02356D.2356

6.設(shè)x=011050,則x=x&01252的值是()。A.0000001000101000

B.1111110100011001

C.0000001011100010

D.1100000000101000

7.下列可用于C語言用戶標識符的一組是

A.void,define,WORD

B.a3_b3,_123,Car

C.For,-abc,IFCase

D.2a,DO,sizeof

8.現(xiàn)有1GB數(shù)據(jù)進行排序,計算資源只有1GB內(nèi)存可用,下列排序方法中最可能出現(xiàn)性能問題的是()

A.堆排序B.插入排序C.歸并排序D.快速排序E.選擇排序F.冒泡排序

9.線性表(a1,a2,?,an)以鏈式方式存儲,訪問第i位置元素的時間復(fù)雜度為()。

A.O(0)B.O(1)C.O(n)D.O(n2)

10.設(shè)有以下語句:charstr1[]="string",str2[8],*str3,*str4=="string;則______不是對庫函數(shù)的正確調(diào)用。

A.strcpy(str1,"HELLO1");

B.strcpy(str2,"HELLO2");

C.strcpy(str3,"HELLO3");

D.strcpy(str4,"HELLO4")

11.設(shè)有以下語句

typedefstructS

{intg;charh;}T;

則下面敘述中正確的是()A.可用S定義結(jié)構(gòu)體變量B.可以用T定義結(jié)構(gòu)體變量C.S是struct類型的變量D.T是structS類型的變量

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

A.一個邏輯數(shù)據(jù)結(jié)構(gòu)只能有一種存儲結(jié)構(gòu)

B.邏輯結(jié)構(gòu)屬于線性結(jié)構(gòu),存儲結(jié)構(gòu)屬于非線性結(jié)構(gòu)

C.一個邏輯數(shù)據(jù)結(jié)構(gòu)可以有多種存儲結(jié)構(gòu),且各種存諸結(jié)構(gòu)不影響數(shù)據(jù)處理的效率

D.一個邏輯數(shù)據(jù)結(jié)構(gòu)可以有多種存儲結(jié)構(gòu),且各種存諸結(jié)構(gòu)影響數(shù)據(jù)處理的效率

二、2.填空題(12題)13.判定表和判定樹是以圖文形式描述數(shù)據(jù)流圖的【】

14.下列程序?qū)⒍S數(shù)組a的行和列元素互換后存放到另一個二維數(shù)組b中。請?zhí)羁铡?/p>

main()

{inta[2][3]={{1,2,3),{4,5}},b[3][2],i,j;

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

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

______;

}

}

15.下面程序中的數(shù)組a包括10個整數(shù)元素,從a中第二個元素起,分別將后項減前項之差存入數(shù)組b,并按每行4個元素輸出數(shù)組b,請?zhí)羁?。main(){inta[10],b[10],i;for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=1;i<10;i++)();for(i=0;i<9;i++){printf("%d",b[i]);if(i%4==0)printf("\n");}}

16.下面程序的功能是輸出數(shù)組中最大的數(shù),由a指針指向該元素。請?zhí)羁铡?/p>

main()

{ints[]={6,7,2,13,9,1,12,10,5,8,4,3,11),*a,*b;

for(【】)

if(*a<*b)a=b;

printf("%d",*a);

}

17.以下函數(shù)rotate的功能是:將a所指N行N列的二維數(shù)組中的最后一行放到b所指二維數(shù)組的第0列中,把a所指二維數(shù)組中的第0行放到b所指二維數(shù)組的最后一列中,b所指二維數(shù)組中其他數(shù)據(jù)不變。

#defineN4

voidrotade(inta[][N],intb[][N])

{inti,j;

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

{b[i][N-1]=【】;【】=a[N-1][i];}}

18.以下程序運行后的輸出結(jié)果是______。

inta=5;

fun(intB)

{staticinta=10;

a+=b++;

printf("%d",A);

}

main()

{intc=20;

fun(C),

a+=C++;

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

}

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

main()

{inta[]={31,27,20,12,6,1),*p=a;

p++;

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

}

20.數(shù)據(jù)模型按不同的應(yīng)用層次分為三種類型,它們是______數(shù)據(jù)模型、邏輯數(shù)據(jù)模型和物理數(shù)據(jù)模型。

21.若有定義intm=5,y=2,則執(zhí)行表達式y(tǒng)+=y-=m*=y后,y的值為【】。

22.在深度為5的完全二叉樹中,度為2的結(jié)點數(shù)最多為【】。

23.以下函數(shù)rotate的功能是:將a所指N行N列的二維數(shù)組中的最后一行放到b所指二維數(shù)組的第0列中,把a所指二維數(shù)組中的第0行放到b所指二維數(shù)組的最后一列中,b所指二維數(shù)組中其他數(shù)據(jù)不變。

#defineN4

voidrotate(inta[][N],intb[][N])

{inti,j;

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

{b[i][N-1]=______;______=a[N-1][i];}

}

24.以下程序的輸出結(jié)果是【】。

#include<stdio.h>

voidswap(int*a,int*b)

{int*t;

t=a;a=b;b=t;

}

main()

{inti=3,j=5,*p=&i,*q=&j;

swap(p,q);printf("%d%d\N,*p,*q))

}

三、3.程序設(shè)計題(10題)25.已知學(xué)生的記錄由學(xué)號和學(xué)習(xí)成績構(gòu)成,N名學(xué)生的數(shù)據(jù)已存入a結(jié)構(gòu)體數(shù)組中。請編寫函數(shù)fun(),該函數(shù)的功能是:找出成績最低的學(xué)生記錄,通過形參返回主函數(shù)(規(guī)定只有一個最低分)。己給出函數(shù)的首部,請完成該函數(shù)。

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

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

試題程序:

#include<stdio.h>

#include<string.h>

#include<aonio.h>

#defineN10

typedefstructss

{charnum[10];

ihts;

}STU;

fun(STUail,STU*s)

{

}

main()

{

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

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

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

{"A09",80),{"Al0",71}},m;

inti;

clrscr0;

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

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

printf("No=%sMark=%d\n",ail].num,

a[i].s);

fun(a,&m);

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

printf("Thelowest:%s,%d\n",m.num,

m.s);

}

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

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

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

請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)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));

}

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

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

請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)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));

}

28.請編一個函數(shù)voidfun(inttt[M][N],intpp[N],tt指向一個M行N列的二維數(shù)組,求出二維數(shù)組每列中最大元素,并依次放入pp所指的一維數(shù)組中。二維數(shù)組中的數(shù)已在主函數(shù)中給出。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#defineM3

#defineN4

voidfun(inttt[M][N],intpp[N])

{

}

main()

{

intt[M][N]={{68,32,54,12},{14,24,88,

58},{42,22,44,56}};

intp[N],i,j,k;

clrscr();

printf("Theriginaldatais:\n");

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

{

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

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

printf("\n");

}

fun(t,p);

printf("\nTheresultis:\n");

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

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

printf("\n");

}

29.編寫函數(shù)fun(),它的功能是:計算和輸出下列級數(shù)的和。

S=1/(1×2)+1/(2×3)+…+1/(n×(n+1))

例如,當n=10時,函數(shù)值為0.909091。

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

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

試題程序;

#include<conio.h>

#include<stdio.h>

doublefun(intn)

{

}

main()

{

clrscr();

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

}

30.學(xué)生的記錄由學(xué)號和成績組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)件數(shù)組s中,請編寫函數(shù)fun(),它的功能是:把分數(shù)最高的學(xué)生數(shù)據(jù)放在h所指的數(shù)組中。注意:分數(shù)高的學(xué)生可能不只一個,函數(shù)返回分數(shù)最高學(xué)生的人數(shù)。

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

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

試題程序:

#include<stdio.h>

#defineN16

typedefstruct

{charnum[10];

ints;

}STREC;

intfun(STREC*a,STREC*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",66},{"GA017",64},

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

STRECh[N];

inti,n;

FILE*out;

n=fun(s,h);

printf("The%dhighestscore:\n",n);

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

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

/*輸出最高分學(xué)生的學(xué)號和成績*/

printf("\n");

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

fprintf(out,"%d\n",n);

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

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

fclose(out);

}

31.程序定義了NxN的二維數(shù)組,并在主函數(shù)中自動賦值。請編寫函數(shù)fun,函數(shù)的功能是:使數(shù)組右上三角元素中的值乘以m。

例如:若m的值為2,a數(shù)組中的值為:

注意:部分源程序存在文件PROGl.C文件中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。

32.請編寫一個函數(shù)intfun(int*s,intt,int*k),用來求出數(shù)組的最大元素在數(shù)組中的下標并存放在k所指的存儲單元中。

例如,輸入如下整數(shù):

876675896101301401980431451777

則輸出結(jié)果為6,980。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

intfun(int*s,intt,int*k)

{

}

main()

{

inta[10]={876,675,896,101,301,401,

980,431,451,777},k;

clrscr();

fun(a,10,&k);

printf("%d,%d\n",k,a[k]);

}

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

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

請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)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]);

}

34.請編寫函數(shù)fun(),其功能是:將s所指字符串中除了下標為偶數(shù)、同時ASCII值也為偶數(shù)的字符外,其余的全部刪除,串中剩余字符所形成的一個新中放在t所指的數(shù)組中。

例如,若s所指字符串中的內(nèi)容為ABCDEFG123456,其中字符A的ASCII碼值為奇數(shù),因此應(yīng)當刪除;其中字符B的ASCII碼值為偶數(shù),但在數(shù)組中的下標為奇數(shù),因此也應(yīng)當刪除;而字符2的ASCII碼值為偶數(shù),所在數(shù)組中的下標也為偶數(shù),因此不應(yīng)當刪除,其他依此類推。最后t所指的數(shù)組中的內(nèi)容應(yīng)是246。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*s,chart[])

{

}

main()

{

chars[100],t[100];

clrscr();

printf("\nPleaseenterstringS:");

scanf("%s",s);

fun(s,t);

printf("\nTheresultis:%s\n",t);

}

四、單選題(0題)35.下列敘述中,正確的是()

A.軟件交付使用后還需要進行維護

B.軟件一旦交付使用就不需要再進行維護

C.軟件交付使用后其生命周期就結(jié)束

D.軟件維護是指修復(fù)程序中被破壞的指令

五、單選題(0題)36.下列選項中不是字符常量的是()。A.A.'\v'

B.'\x2a'

C.'a'

D."\0"

六、單選題(0題)37.若x,y,z均被定義為整數(shù),則下列表達式能正確表達代數(shù)式1/(x*y*z)的是()。A.1/x*y*zB.1.0/(x*y*z)C.1/(x*y*z)D.1/x/y/(float)z

參考答案

1.C

2.B

3.D解析:使用人工或自動手段來運行或測定某個系統(tǒng)的過程,其目的在于檢驗它是否滿足規(guī)定的需求或是弄清預(yù)期結(jié)果與實際結(jié)果之間的差別。軟件測試是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程。測試要以查找錯誤為中心,而不是為了演示軟件的正確功能。

4.D解析:邏輯運算符兩側(cè)的運算對象可以是任意合法的表達式。邏輯表達式的運算結(jié)果或者為1(“真”),或者為0(“假”)。

5.A解析:因為變量的初始值分別為“k=5,n=0”,所以程序第一次進入循環(huán)時,執(zhí)行default語句,這時k=4,執(zhí)行'case4:”這個分支,結(jié)果是“n=2,k=3”,打印出2;然后程序進行第二次循環(huán),這時“n=2,k=3”,執(zhí)行'case3:”這個分支,結(jié)果是“n=3,k=2”,打印出3;程序進行第三次循環(huán),這時“n=3,k=2”,執(zhí)行“case2:case4:”這兩個分支,結(jié)果是“n=5,k=1”,打印出5,這時因為n=5不滿足n<5的循環(huán)條件,因此退出循環(huán),程序運行結(jié)束,故輸出結(jié)果為235。

6.A本題考查按位與運算,按位與就是相同為1,不同為0,把x=011050化成二進制為0001001000101000,把01252化成二進制為0000001010101010,兩者相與得0000001000101000。

7.B解析:C語言規(guī)定標識符只能由字母、數(shù)字和下畫線3種字符組成,且第一個字符必須為字母或下畫線,排除選項C)和D);C語言中還規(guī)定標識符不能為C語言的關(guān)鍵字,而選項A)中void為關(guān)鍵字,故排除選項A)。

8.C

9.C

10.C解析:C語言中:strcpy(st1,st2);,其兩個參數(shù)均為字符指針或字符數(shù)組,選項C中的目的中指針str3沒有指向具體有效的存儲單元,故是錯誤的調(diào)用。

11.B解析:結(jié)構(gòu)體類型的定義格式為:

strcut結(jié)構(gòu)體名

{成員說明列表};

結(jié)構(gòu)體變量的定義有3種形式:第一種:定義結(jié)構(gòu)體型的同時定義結(jié)構(gòu)體變量如:strcut結(jié)構(gòu)體名{成員說明列表}變量;第二種先定義一個結(jié)構(gòu)體類型,然后使用該類型來定義結(jié)構(gòu)體變量,如:strcutstudent{成員說明列表):student變量;第三種:定義一個無名稱的結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量,如:Strctstudent{成員說明列表}變量。和上面三種情況比較我們不難得知只有選項B是正確的。所以,4個選項中選項B符合題意。

12.D數(shù)據(jù)的存儲結(jié)構(gòu)是指數(shù)據(jù)的邏輯結(jié)構(gòu)在計算機存儲空間中的存放形式,一種數(shù)據(jù)結(jié)構(gòu)可以根據(jù)需要采用不同的存儲結(jié)構(gòu),用的存儲結(jié)構(gòu)有順序和鏈式結(jié)構(gòu)。用不同的存儲結(jié)構(gòu),其處理的效率是不同的。

13.判定樹、判定表判定樹、判定表

14.b[j][i]=a[i][j]b[j][i]=a[i][j]解析:本題考查二維數(shù)組的基本知識。它是要將一個二維數(shù)組,的行和列元素互換后存放到另一個二維數(shù)組b中,只要將數(shù)組a的行標和列標互換,然后賦給數(shù)組b即可。

15.b[i-1]=a[i]-a[i-1]

16.a=sb=s+1;b-s<sizeof(s)/sizeof(s[0]);b++a=s,b=s+1;b-s<sizeof(s)/sizeof(s[0]);b++解析:題目要求輸出數(shù)組中最大的數(shù),所以要遍歷整個數(shù)組,而指針a用來指向最大數(shù),所以循環(huán)變量只有使用指針b。for初始化時,應(yīng)該先讓a指向第1個數(shù),然后讓b指向第2個數(shù),故循環(huán)初始化語句應(yīng)該為a=s,b=s+1或其他等價表達式。因為要使b遍歷整個數(shù)組,故循環(huán)條件應(yīng)該為b-s<sizeof(s)/sizeof(s[0])或其他等價表達式。最后每次循環(huán)應(yīng)該讓b往后移動一位,故for的第3條語句應(yīng)該是++b、b++或其他等價形勢。所以本題應(yīng)填a=s,b=s+1;b-s<sizeof(s)/sizeof(s[0]);b++或其他等價語句。

17.a[0][i]b[i][0]a[0][i]\r\nb[i][0]解析:b[i][N-1]=a[0][i]實現(xiàn)把a所指二維數(shù)組中的第0行放到b所指二維數(shù)組的最后一列中,b[i][0]=a[N-1][i]實現(xiàn)將a所指N行N列的二維數(shù)組中的最后一行放到b所指二維數(shù)組中的第0列。

18.30253025解析:本題考核的知識點是變量的存儲屬性和算術(shù)運算的應(yīng)用。本題涉及了自動變量、靜態(tài)變量和外部變量。外部變量是定義在所有函數(shù)之外的變量,本題中inta=5定義了一個外部變量a,它是一個全局變量,即作用域是從定義的位置開始到本文件的結(jié)束;靜態(tài)變量的存儲空間在程序的整個運行期間是固定的(static),本題函數(shù)fun()中staticinta=10定義個一個靜態(tài)變量a,此靜態(tài)變量a是個靜態(tài)的局部變量,即它的值只能在本函數(shù)中使用;自動變量是C程序中使用最多的一種變量,它的建立和撤消都是由系統(tǒng)在程序執(zhí)行過程中自動進行的,auto是自動變量的存儲類別標識符,如果省略auto,系統(tǒng)隱含認為此變量為auto,本題中main()中intc=20定義了一個自動變量c,此自動變量c是個靜態(tài)的局部變量.算術(shù)運算中a+=b++相當于a=a+b,b=b+1.所以,在第一個ptine('%d',a)中a=a+b=10+20=30,第二個printf('%d',a)中a=a+c=5+20=25,即輸出3025。

19.1212解析:本題考查如何用指針引用數(shù)組元素。分析程序,首先定義了一個指向數(shù)組a的指針p,p指向數(shù)組的首地址,通過p++,將p指向a[1],p+2是將指針后移2位指向a[3],*(p+2)即是取a[3]的值12。

20.概念概念

21.-16-16解析:將賦值運算符右側(cè)的“表達式”的值賦給左側(cè)的變量,并且賦值運算符按照“自右而左”的結(jié)合順序,本題表達式應(yīng)先算m的值為10,再運算y的值為8,最后計算y=y+(-8)=-8+(-8)=-16。

22.1515解析:在深度為5的完全二叉樹中,度為2的結(jié)點數(shù)最多的是深度為5的滿二叉樹。在深度為5的滿二叉樹中,前4層中所有結(jié)點的度為2。即在深度為5的完全二叉樹中,度為2的結(jié)點數(shù)最多相當于深度為4的滿二叉樹中的結(jié)點數(shù)。深度為4的滿二叉樹中的結(jié)點數(shù)為24(上標)-1=15。

23.a[0][i]b[i][0]a[0][i]\r\nb[i][0]解析:因為數(shù)組a[N][N]的第0行表示為a[0][n](n=0~3),而數(shù)組b[N][N]的最后一列表示為b[n][N-1)(n=0~3),所以前一空應(yīng)該填a[0][i]。又因為數(shù)組a[N][N]的最后一行表示為a[N-1)][n](n=0~3),而數(shù)組b[N][N]的第0列表示為b[n][0](n=0~3),所以后一空應(yīng)該填b[i][0]。

24.3535解析:函數(shù)swap(int*a,int*b)的功能是實現(xiàn)*a和*b中兩個數(shù)據(jù)的交換,在主函數(shù)中調(diào)用swap(p,q)后,形參指針變量a和b分別指向i和j,在swap(int*a,int*b)執(zhí)行完后,指針變量a和b分別指向j和i,而指針變量p,q所指向變量的值沒有發(fā)生變化,所以輸出結(jié)果為35。

25.fun(STUa[]STU*s){inti;*s=a[0];for(i=0;i<N;i++)/*先認為第1個值最小*/if(s->s>aIi].s)/*如果在循環(huán)的過程中再發(fā)現(xiàn)比第1個值更小的則賦給*s*/*s=a[i];}fun(STUa[],STU*s)\r\n{\r\ninti;\r\n*s=a[0];\r\nfor(i=0;i<N;i++)/*先認為第1個值最小*/\r\nif(s->s>aIi].s)/*如果在循環(huán)的過程中再發(fā)現(xiàn)比第1個值更小的則賦給*s*/\r\n*s=a[i];\r\n}解析:我們先認為第1個值最小,即*s=a[0]語句,如果在循環(huán)的過程中再發(fā)現(xiàn)比第1個值更小的隨即賦給該*s就可以了。另外,還涉及到結(jié)構(gòu)體中的指向運算符,請學(xué)習(xí)者注意。若要找出最高成績則if()中的條件改成s->s<a[i].s即可。

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

27.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];/*求出二維數(shù)組的最大值*/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];/*求出二維數(shù)組的最大值*/\r\nreturnmax;\r\n}解析:此類求最大值或最小值的C語言問題,我們可以采用逐個比較的方式。要求數(shù)組中的所有元素走動一遍,并從中找出最大、最小值,要注意一開始應(yīng)使max存放數(shù)組中的第一個元素的值??砂粗鹦胁檎乙部砂粗鹆胁檎业姆绞?,本題采用的是逐行查找的方式。即行下標在外層循環(huán)列下標在內(nèi)層循環(huán),因為在循環(huán)的嵌套中越在內(nèi)層循環(huán),循環(huán)變化就越快。

28.voidfun(inttt[M][N]intpp[N]){intiimax;for(j=0;j<N;j++){max=tt[0][j];/*假設(shè)各列中的第一個元素最大*/for(i=0;i<M;i++)if(tt[i][j]>max)/*如果各列中的其他元素比最大值大則將這個更大的元素看作當前該列中最大元素*/max=tt[i][j];pp[j]=max;/*將各列的最大值依次放入pp數(shù)組中*/}}voidfun(inttt[M][N],intpp[N])\r\n{\r\ninti,i,max;\r\nfor(j=0;j<N;j++)\r\n{\r\nmax=tt[0][j];/*假設(shè)各列中的第一個元素最大*/\r\nfor(i=0;i<M;i++)\r\nif(tt[i][j]>max)/*如果各列中的其他元素比最大值大,則將這個更大的元素看作當前該列中最大元素*/\r\nmax=tt[i][j];\r\npp[j]=max;/*將各列的最大值依次放入pp數(shù)組中*/\r\n}\r\n}解析:本題中函數(shù)的功能是求出二維數(shù)組中每列的最大元素。首先,假設(shè)各列中的第一個元素最大,然后利用行標值的移動來依次取得各列中其他元素的值,并與假設(shè)的最大值進行比較,如果遇到更大的,則把這個更大的元素看做當前該列中最大的元素,繼續(xù)與該列中其他元素比較。

29.doublefun(intn){inti;doubles=0.0;for(i=l;i<=n;i++)s=s+l.0/(i*(i+l));/*求級數(shù)的和*/returns;}doublefun(intn)\r\n{\r\ninti;\r\ndoubles=0.0;\r\nfor(i=l;i<=n;i++)\r\ns=s+l.0/(i*(i+l));/*求級數(shù)的和*/\r\nreturns;\r\n}解析:解決數(shù)學(xué)序列的問題,我們的思路依然是“數(shù)學(xué)先行”,即先看清楚題目的數(shù)學(xué)邏輯,然后再根據(jù)C語言來“翻譯”出來。本題中,每一項的值都是n*(n+1)的倒數(shù)。當輸入n時,從1開始循環(huán),注意,此處for(i=1;i

30.intfun(STREC*aSTREC*b){intij=0max=a[0].s;for(i=0;i<N;i++)if(max<a[i].s)max=a[i].s;/*找出最大值*/for(i=0;i<N;i++)if(max==a[i].s)b[j++]=a[i];/*找出成績與max相等的學(xué)生的記錄存入結(jié)構(gòu)體b中*/returnj;/*返回最高成績的學(xué)生人數(shù)*/}intfun(STREC*a,STREC*b)\r\n{\r\ninti,j=0,max=a[0].s;\r\nfor(i=0;i<N;i++)\r\nif(max<a[i].s)max=a[i].s;/*找出最大值*/\r\nfor(i=0;i<N;i++)\r\nif(max==a[i].s)b[j++]=a[i];/*找出成績與max相等的學(xué)生的記錄,存入結(jié)構(gòu)體b中*/\r\nreturnj;/*返回最高成績的學(xué)生人數(shù)*/\r\n}解析:該程序使用循環(huán)嵌套,第1個for語句的作用是找出最大值。第2個循環(huán)的作用是找出與max相等的成績,也即最高成績的學(xué)生記錄,并存入b中。

31.

解析:該程序功能是使數(shù)組右上半三角元素中的值乘以m。本題中首先要確定右上角半角元素的特點,然后對元素逐個進行乘以m的操作。其中,右上角的元素是行下標小于等于列下標的元素。

32.intfun(int*sinttint*k){inti;*k=0;/*k所指的數(shù)是數(shù)組的下標值*/for(i=0;i<t;i++)if(s[*k]<s[i])*k=i;/*找到數(shù)組的最大元素把該元素的下標賦給k所指的數(shù)*/returns[*k];/*返回數(shù)組的最大元素*/}intfun(int*s,intt,int*k)\r\n{\r\ninti;\r\n*k=0;/*k所指的數(shù)是數(shù)組的下標值*/\r\nfor(i=0;i<t;i++)\r\nif(s[*k]<s[i])*k=i;/*找到數(shù)組的最大元素,把該元素的下標賦給k所指的數(shù)*/\r\nreturns[*k];/*返回數(shù)組的最大元素*/\r\n}解析:本題中直接使用指針變量k,但在使用時要注意對k的指針運算,此外,一開始應(yīng)讓*k的值為數(shù)組中的某一下標值,即*k=0。

33.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}解析:本題的關(guān)鍵是if條件語句及參數(shù)傳遞。本題的設(shè)計思路是:(1)利用循環(huán)遍歷1到1000之內(nèi)的整數(shù);(2)利用if語句判斷,把查找到的整數(shù)保存到形參數(shù)組a中;(3)把數(shù)組a中數(shù)組元素的個數(shù)賦值到形參指針n所指的內(nèi)存。注意程序中if語句的判斷條件,本題是找出能被7或11整除但不能同時被7和11整除的所有整數(shù)。能同時被7和11整除的數(shù)一定能被77整除,且不能被7整除的數(shù)不一定就是能被7或11整除的數(shù)。所以,可得出程序中的if語句。

34.voidfun(char*schart[]){intij=0;for(i=0;s[i]!='\0';i++)if(i%2==0&&s[i]%2==0)/*將s所措字符串中下標和ASCII值都為偶數(shù)的字符放入數(shù)組t中*/t[j++]=s[i];/*在字符串最后加上結(jié)束標志位*/t[j]='\0';}voidfun(char*s,chart[])\r\n{\r\ninti,j=0;\r\nfor(i=0;s[i]!='\\0';i++)\r\nif(i%2==0&&s[i]%2==0)/*將s所措字符串中下標和ASCII值都為偶數(shù)的字符放入數(shù)組t中*/\r\nt[j++]=s[i];/*在字符串最后加上結(jié)束標志位*/\r\nt[j]='\\0';\r\n}解析:本題要求除了下標為偶數(shù)同時ASCII值也為偶數(shù)的字符之外,其他字符都刪除。題目要求留下下標為偶數(shù)同時ASCII值也為偶數(shù)的字符。

C語言中并沒有直接刪除字符的算法,請大家在做題的時候注意。

35.A解析:維護是軟件生命周期的最后一個階段,也是持續(xù)時間最長、付出代價最大的階段。軟件工程學(xué)的目的就在于提高軟件的可維護性,同時也要設(shè)法降低維護的代價。

軟件維護通常有以下四類;

①為糾正使用中出現(xiàn)的錯誤而進行的改正性維護;

②為適應(yīng)環(huán)境變化而進行的適應(yīng)性維護;

③為改進原有軟件而進行的完善性維護;

④為將來的可維護和可靠而進行的預(yù)防性維護。

軟件維護不僅包括程序代碼的維護,還包括文檔的維護。文檔可以分為用戶文檔和系統(tǒng)文檔兩類。但無論是哪類文檔,都必須與程序代碼同時維護。只有與程序代碼完全一致的文檔才有意義和價值。由此可知,本題中選項B、C、D中的說法都是錯誤的。

36.Dc語言規(guī)定,一個字符常量代表ASCII碼字符集里的一個字符,在群序中用單引號括起來,以便區(qū)分。'\v'表示的是豎向跳格:'kx2a'表示的是兩位十六迸制數(shù);'a'表示的是字符a對應(yīng)的ASCII碼值。"\0"用雙引號故不正確。

37.B2022年河北省張家口市全國計算機等級考試C語言程序設(shè)計模擬考試(含答案)學(xué)校:________班級:________姓名:________考號:________

一、單選題(12題)1.

2.以下程序是用來計算兩個非負數(shù)之間的最大公約數(shù):我們假設(shè)x,y中最大的那個數(shù)的長度為n,基本運算時間復(fù)雜度為O(1),那么該程序的時間復(fù)雜度為()A.O(1)B.O(logn)C.O(n)D.O(n^2)

3.在軟件測試設(shè)計中,軟件測試的主要目的是

A.實驗性運行軟件B.證明軟件正確C.找出軟件中全部錯誤D.盡可能多地發(fā)現(xiàn)軟件中的錯誤

4.下列關(guān)于邏輯運算符兩側(cè)運算對象的敘述中正確的是()。

A.只能是整數(shù)0或1B.只能是整數(shù)0或非0整數(shù)C.可以是結(jié)構(gòu)體類型的數(shù)據(jù)D.可以是任意合法的表達式

5.有以下程序

main()

{intk=5,n=0;

do

{switch(k)

{case1:case3:n+=1;k--;break;

default:n=0;k--;

case2:case4:n+=2;k--;break;

}

printf("%d",n);

}while(k>0&&n<5);

}

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

A.235B.0235C.02356D.2356

6.設(shè)x=011050,則x=x&01252的值是()。A.0000001000101000

B.1111110100011001

C.0000001011100010

D.1100000000101000

7.下列可用于C語言用戶標識符的一組是

A.void,define,WORD

B.a3_b3,_123,Car

C.For,-abc,IFCase

D.2a,DO,sizeof

8.現(xiàn)有1GB數(shù)據(jù)進行排序,計算資源只有1GB內(nèi)存可用,下列排序方法中最可能出現(xiàn)性能問題的是()

A.堆排序B.插入排序C.歸并排序D.快速排序E.選擇排序F.冒泡排序

9.線性表(a1,a2,?,an)以鏈式方式存儲,訪問第i位置元素的時間復(fù)雜度為()。

A.O(0)B.O(1)C.O(n)D.O(n2)

10.設(shè)有以下語句:charstr1[]="string",str2[8],*str3,*str4=="string;則______不是對庫函數(shù)的正確調(diào)用。

A.strcpy(str1,"HELLO1");

B.strcpy(str2,"HELLO2");

C.strcpy(str3,"HELLO3");

D.strcpy(str4,"HELLO4")

11.設(shè)有以下語句

typedefstructS

{intg;charh;}T;

則下面敘述中正確的是()A.可用S定義結(jié)構(gòu)體變量B.可以用T定義結(jié)構(gòu)體變量C.S是struct類型的變量D.T是structS類型的變量

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

A.一個邏輯數(shù)據(jù)結(jié)構(gòu)只能有一種存儲結(jié)構(gòu)

B.邏輯結(jié)構(gòu)屬于線性結(jié)構(gòu),存儲結(jié)構(gòu)屬于非線性結(jié)構(gòu)

C.一個邏輯數(shù)據(jù)結(jié)構(gòu)可以有多種存儲結(jié)構(gòu),且各種存諸結(jié)構(gòu)不影響數(shù)據(jù)處理的效率

D.一個邏輯數(shù)據(jù)結(jié)構(gòu)可以有多種存儲結(jié)構(gòu),且各種存諸結(jié)構(gòu)影響數(shù)據(jù)處理的效率

二、2.填空題(12題)13.判定表和判定樹是以圖文形式描述數(shù)據(jù)流圖的【】

14.下列程序?qū)⒍S數(shù)組a的行和列元素互換后存放到另一個二維數(shù)組b中。請?zhí)羁铡?/p>

main()

{inta[2][3]={{1,2,3),{4,5}},b[3][2],i,j;

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

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

______;

}

}

15.下面程序中的數(shù)組a包括10個整數(shù)元素,從a中第二個元素起,分別將后項減前項之差存入數(shù)組b,并按每行4個元素輸出數(shù)組b,請?zhí)羁?。main(){inta[10],b[10],i;for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=1;i<10;i++)();for(i=0;i<9;i++){printf("%d",b[i]);if(i%4==0)printf("\n");}}

16.下面程序的功能是輸出數(shù)組中最大的數(shù),由a指針指向該元素。請?zhí)羁铡?/p>

main()

{ints[]={6,7,2,13,9,1,12,10,5,8,4,3,11),*a,*b;

for(【】)

if(*a<*b)a=b;

printf("%d",*a);

}

17.以下函數(shù)rotate的功能是:將a所指N行N列的二維數(shù)組中的最后一行放到b所指二維數(shù)組的第0列中,把a所指二維數(shù)組中的第0行放到b所指二維數(shù)組的最后一列中,b所指二維數(shù)組中其他數(shù)據(jù)不變。

#defineN4

voidrotade(inta[][N],intb[][N])

{inti,j;

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

{b[i][N-1]=【】;【】=a[N-1][i];}}

18.以下程序運行后的輸出結(jié)果是______。

inta=5;

fun(intB)

{staticinta=10;

a+=b++;

printf("%d",A);

}

main()

{intc=20;

fun(C),

a+=C++;

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

}

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

main()

{inta[]={31,27,20,12,6,1),*p=a;

p++;

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

}

20.數(shù)據(jù)模型按不同的應(yīng)用層次分為三種類型,它們是______數(shù)據(jù)模型、邏輯數(shù)據(jù)模型和物理數(shù)據(jù)模型。

21.若有定義intm=5,y=2,則執(zhí)行表達式y(tǒng)+=y-=m*=y后,y的值為【】。

22.在深度為5的完全二叉樹中,度為2的結(jié)點數(shù)最多為【】。

23.以下函數(shù)rotate的功能是:將a所指N行N列的二維數(shù)組中的最后一行放到b所指二維數(shù)組的第0列中,把a所指二維數(shù)組中的第0行放到b所指二維數(shù)組的最后一列中,b所指二維數(shù)組中其他數(shù)據(jù)不變。

#defineN4

voidrotate(inta[][N],intb[][N])

{inti,j;

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

{b[i][N-1]=______;______=a[N-1][i];}

}

24.以下程序的輸出結(jié)果是【】。

#include<stdio.h>

voidswap(int*a,int*b)

{int*t;

t=a;a=b;b=t;

}

main()

{inti=3,j=5,*p=&i,*q=&j;

swap(p,q);printf("%d%d\N,*p,*q))

}

三、3.程序設(shè)計題(10題)25.已知學(xué)生的記錄由學(xué)號和學(xué)習(xí)成績構(gòu)成,N名學(xué)生的數(shù)據(jù)已存入a結(jié)構(gòu)體數(shù)組中。請編寫函數(shù)fun(),該函數(shù)的功能是:找出成績最低的學(xué)生記錄,通過形參返回主函數(shù)(規(guī)定只有一個最低分)。己給出函數(shù)的首部,請完成該函數(shù)。

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

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

試題程序:

#include<stdio.h>

#include<string.h>

#include<aonio.h>

#defineN10

typedefstructss

{charnum[10];

ihts;

}STU;

fun(STUail,STU*s)

{

}

main()

{

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

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

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

{"A09",80),{"Al0",71}},m;

inti;

clrscr0;

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

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

printf("No=%sMark=%d\n",ail].num,

a[i].s);

fun(a,&m);

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

printf("Thelowest:%s,%d\n",m.num,

m.s);

}

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

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

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

請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)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));

}

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

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

請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)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));

}

28.請編一個函數(shù)voidfun(inttt[M][N],intpp[N],tt指向一個M行N列的二維數(shù)組,求出二維數(shù)組每列中最大元素,并依次放入pp所指的一維數(shù)組中。二維數(shù)組中的數(shù)已在主函數(shù)中給出。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#defineM3

#defineN4

voidfun(inttt[M][N],intpp[N])

{

}

main()

{

intt[M][N]={{68,32,54,12},{14,24,88,

58},{42,22,44,56}};

intp[N],i,j,k;

clrscr();

printf("Theriginaldatais:\n");

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

{

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

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

printf("\n");

}

fun(t,p);

printf("\nTheresultis:\n");

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

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

printf("\n");

}

29.編寫函數(shù)fun(),它的功能是:計算和輸出下列級數(shù)的和。

S=1/(1×2)+1/(2×3)+…+1/(n×(n+1))

例如,當n=10時,函數(shù)值為0.909091。

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

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

試題程序;

#include<conio.h>

#include<stdio.h>

doublefun(intn)

{

}

main()

{

clrscr();

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

}

30.學(xué)生的記錄由學(xué)號和成績組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)件數(shù)組s中,請編寫函數(shù)fun(),它的功能是:把分數(shù)最高的學(xué)生數(shù)據(jù)放在h所指的數(shù)組中。注意:分數(shù)高的學(xué)生可能不只一個,函數(shù)返回分數(shù)最高學(xué)生的人數(shù)。

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

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

試題程序:

#include<stdio.h>

#defineN16

typedefstruct

{charnum[10];

ints;

}STREC;

intfun(STREC*a,STREC*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",66},{"GA017",64},

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

STRECh[N];

inti,n;

FILE*out;

n=fun(s,h);

printf("The%dhighestscore:\n",n);

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

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

/*輸出最高分學(xué)生的學(xué)號和成績*/

printf("\n");

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

fprintf(out,"%d\n",n);

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

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

fclose(out);

}

31.程序定義了NxN的二維數(shù)組,并在主函數(shù)中自動賦值。請編寫函數(shù)fun,函數(shù)的功能是:使數(shù)組右上三角元素中的值乘以m。

例如:若m的值為2,a數(shù)組中的值為:

注意:部分源程序存在文件PROGl.C文件中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。

32.請編寫一個函數(shù)intfun(int*s,intt,int*k),用來求出數(shù)組的最大元素在數(shù)組中的下標并存放在k所指的存儲單元中。

例如,輸入如下整數(shù):

876675896101301401980431451777

則輸出結(jié)果為6,980。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

intfun(int*s,intt,int*k)

{

}

main()

{

inta[10]={876,675,896,101,301,401,

980,431,451,777},k;

clrscr();

fun(a,10,&k);

printf("%d,%d\n",k,a[k]);

}

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

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

請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)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]);

}

34.請編寫函數(shù)fun(),其功能是:將s所指字符串中除了下標為偶數(shù)、同時ASCII值也為偶數(shù)的字符外,其余的全部刪除,串中剩余字符所形成的一個新中放在t所指的數(shù)組中。

例如,若s所指字符串中的內(nèi)容為ABCDEFG123456,其中字符A的ASCII碼值為奇數(shù),因此應(yīng)當刪除;其中字符B的ASCII碼值為偶數(shù),但在數(shù)組中的下標為奇數(shù),因此也應(yīng)當刪除;而字符2的ASCII碼值為偶數(shù),所在數(shù)組中的下標也為偶數(shù),因此不應(yīng)當刪除,其他依此類推。最后t所指的數(shù)組中的內(nèi)容應(yīng)是246。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*s,chart[])

{

}

main()

{

chars[100],t[100];

clrscr();

printf("\nPleaseenterstringS:");

scanf("%s",s);

fun(s,t);

printf("\nTheresultis:%s\n",t);

}

四、單選題(0題)35.下列敘述中,正確的是()

A.軟件交付使用后還需要進行維護

B.軟件一旦交付使用就不需要再進行維護

C.軟件交付使用后其生命周期就結(jié)束

D.軟件維護是指修復(fù)程序中被破壞的指令

五、單選題(0題)36.下列選項中不是字符常量的是()。A.A.'\v'

B.'\x2a'

C.'a'

D."\0"

六、單選題(0題)37.若x,y,z均被定義為整數(shù),則下列表達式能正確表達代數(shù)式1/(x*y*z)的是()。A.1/x*y*zB.1.0/(x*y*z)C.1/(x*y*z)D.1/x/y/(float)z

參考答案

1.C

2.B

3.D解析:使用人工或自動手段來運行或測定某個系統(tǒng)的過程,其目的在于檢驗它是否滿足規(guī)定的需求或是弄清預(yù)期結(jié)果與實際結(jié)果之間的差別。軟件測試是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程。測試要以查找錯誤為中心,而不是為了演示軟件的正確功能。

4.D解析:邏輯運算符兩側(cè)的運算對象可以是任意合法的表達式。邏輯表達式的運算結(jié)果或者為1(“真”),或者為0(“假”)。

5.A解析:因為變量的初始值分別為“k=5,n=0”,所以程序第一次進入循環(huán)時,執(zhí)行default語句,這時k=4,執(zhí)行'case4:”這個分支,結(jié)果是“n=2,k=3”,打印出2;然后程序進行第二次循環(huán),這時“n=2,k=3”,執(zhí)行'case3:”這個分支,結(jié)果是“n=3,k=2”,打印出3;程序進行第三次循環(huán),這時“n=3,k=2”,執(zhí)行“case2:case4:”這兩個分支,結(jié)果是“n=5,k=1”,打印出5,這時因為n=5不滿足n<5的循環(huán)條件,因此退出循環(huán),程序運行結(jié)束,故輸出結(jié)果為235。

6.A本題考查按位與運算,按位與就是相同為1,不同為0,把x=011050化成二進制為0001001000101000,把01252化成二進制為0000001010101010,兩者相與得0000001000101000。

7.B解析:C語言規(guī)定標識符只能由字母、數(shù)字和下畫線3種字符組成,且第一個字符必須為字母或下畫線,排除選項C)和D);C語言中還規(guī)定標識符不能為C語言的關(guān)鍵字,而選項A)中void為關(guān)鍵字,故排除選項A)。

8.C

9.C

10.C解析:C語言中:strcpy(st1,st2);,其兩個參數(shù)均為字符指針或字符數(shù)組,選項C中的目的中指針str3沒有指向具體有效的存儲單元,故是錯誤的調(diào)用。

11.B解析:結(jié)構(gòu)體類型的定義格式為:

strcut結(jié)構(gòu)體名

{成員說明列表};

結(jié)構(gòu)體變量的定義有3種形式:第一種:定義結(jié)構(gòu)體型的同時定義結(jié)構(gòu)體變量如:strcut結(jié)構(gòu)體名{成員說明列表}變量;第二種先定義一個結(jié)構(gòu)體類型,然后使用該類型來定義結(jié)構(gòu)體變量,如:strcutstudent{成員說明列表):student變量;第三種:定義一個無名稱的結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量,如:Strctstudent{成員說明列表}變量。和上面三種情況比較我們不難得知只有選項B是正確的。所以,4個選項中選項B符合題意。

12.D數(shù)據(jù)的存儲結(jié)構(gòu)是指數(shù)據(jù)的邏輯結(jié)構(gòu)在計算機存儲空間中的存放形式,一種數(shù)據(jù)結(jié)構(gòu)可以根據(jù)需要采用不同的存儲結(jié)構(gòu),用的存儲結(jié)構(gòu)有順序和鏈式結(jié)構(gòu)。用不同的存儲結(jié)構(gòu),其處理的效率是不同的。

13.判定樹、判定表判定樹、判定表

14.b[j][i]=a[i][j]b[j][i]=a[i][j]解析:本題考查二維數(shù)組的基本知識。它是要將一個二維數(shù)組,的行和列元素互換后存放到另一個二維數(shù)組b中,只要將數(shù)組a的行標和列標互換,然后賦給數(shù)組b即可。

15.b[i-1]=a[i]-a[i-1]

16.a=sb=s+1;b-s<sizeof(s)/sizeof(s[0]);b++a=s,b=s+1;b-s<sizeof(s)/sizeof(s[0]);b++解析:題目要求輸出數(shù)組中最大的數(shù),所以要遍歷整個數(shù)組,而指針a用來指向最大數(shù),所以循環(huán)變量只有使用指針b。for初始化時,應(yīng)該先讓a指向第1個數(shù),然后讓b指向第2個數(shù),故循環(huán)初始化語句應(yīng)該為a=s,b=s+1或其他等價表達式。因為要使b遍歷整個數(shù)組,故循環(huán)條件應(yīng)該為b-s<sizeof(s)/sizeof(s[0])或其他等價表達式。最后每次循環(huán)應(yīng)該讓b往后移動一位,故for的第3條語句應(yīng)該是++b、b++或其他等價形勢。所以本題應(yīng)填a=s,b=s+1;b-s<sizeof(s)/sizeof(s[0]);b++或其他等價語句。

17.a[0][i]b[i][0]a[0][i]\r\nb[i][0]解析:b[i][N-1]=a[0][i]實現(xiàn)把a所指二維數(shù)組中的第0行放到b所指二維數(shù)組的最后一列中,b[i][0]=a[N-1][i]實現(xiàn)將a所指N行N列的二維數(shù)組中的最后一行放到b所指二維數(shù)組中的第0列。

18.30253025解析:本題考核的知識點是變量的存儲屬性和算術(shù)運算的應(yīng)用。本題涉及了自動變量、靜態(tài)變量和外部變量。外部變量是定義在所有函數(shù)之外的變量,本題中inta=5定義了一個外部變量a,它是一個全局變量,即作用域是從定義的位置開始到本文件的結(jié)束;靜態(tài)變量的存儲空間在程序的整個運行期間是固定的(static),本題函數(shù)fun()中staticinta=10定義個一個靜態(tài)變量a,此靜態(tài)變量a是個靜態(tài)的局部變量,即它的值只能在本函數(shù)中使用;自動變量是C程序中使用最多的一種變量,它的建立和撤消都是由系統(tǒng)在程序執(zhí)行過程中自動進行的,auto是自動變量的存儲類別標識符,如果省略auto,系統(tǒng)隱含認為此變量為auto,本題中main()中intc=20定義了一個自動變量c,此自動變量c是個靜態(tài)的局部變量.算術(shù)運算中a+=b++相當于a=a+b,b=b+1.所以,在第一個ptine('%d',a)中a=a+b=10+20=30,第二個printf('%d',a)中a=a+c=5+20=25,即輸出3025。

19.1212解析:本題考查如何用指針引用數(shù)組元素。分析程序,首先定義了一個指向數(shù)組a的指針p,p指向數(shù)組的首地址,通過p++,將p指向a[1],p+2是將指針后移2位指向a[3],*(p+2)即是取a[3]的值12。

20.概念概念

21.-16-16解析:將賦值運算符右側(cè)的“表達式”的值賦給左側(cè)的變量,并且賦值運算符按照“自右而左”的結(jié)合順序,本題表達式應(yīng)先算m的值為10,再運算y的值為8,最后計算y=y+(-8)=-8+(-8)=-16。

22.1515解析:在深度為5的完全二叉樹中,度為2的結(jié)點數(shù)最多的是深度為5的滿二叉樹。在深度為5的滿二叉樹中,前4層中所有結(jié)點的度為2。即在深度為5的完全二叉樹中,度為2的結(jié)點數(shù)最多相當于深度為4的滿二叉樹中的結(jié)點數(shù)。深度為4的滿二叉樹中的結(jié)點數(shù)為24(上標)-1=15。

23.a[0][i]b[i][0]a[0][i]\r\nb[i][0]解析:因為數(shù)組a[N][N]的第0行表示為a[0][n](n=0~3),而數(shù)組b[N][N]的最后一列表示為b[n][N-1)(n=0~3),所以前一空應(yīng)該填a[0][i]。又因為數(shù)組a[N][N]的最后一行表示為a[N-1)][n](n=0~3),而數(shù)組b[N][N]的第0列表示為b[n][0](n=0~3),所以后一空應(yīng)該填b[i][0]。

24.3535解析:函數(shù)swap(int*a,int*b)的功能是實現(xiàn)*a和*b中兩個數(shù)據(jù)的交換,在主函數(shù)中調(diào)用swap(p,q)后,形參指針變量a和b分別指向i和j,在swap(int*a,int*b)執(zhí)行完后,指針變量a和b分別指向j和i,而指針變量p,q所指向變量的值沒有發(fā)生變化,所以輸出結(jié)果為35。

25.fun(STUa[]STU*s){inti;*s=a[0];for(i=0;i<N;i++)/*先認為第1個值最小*/if(s->s>aIi].s)/*如果在循環(huán)的過程中再發(fā)現(xiàn)比第1個值更小的則賦給*s*/*s=a[i];}fun(STUa[],STU*s)\r\n{\r\ninti;\r\n*s=a[0];\r\nfor(i=0;i<N;i++)/*先認為第1個值最小*/\r\nif(s->s>aIi].s)/*如果在循環(huán)的過程中再發(fā)現(xiàn)比第1個值更小的則賦給*s*/\r\n*s=a[i];\r\n}解析:我們先認為第1個值最小,即*s=a[0]語句,如果在循環(huán)的過程中再發(fā)現(xiàn)比第1個值更小的隨即賦給該*s就可以了。另外,還涉及到結(jié)構(gòu)體中的指向運算符,請學(xué)習(xí)者注意。若要找出最高成績則if()中的條件改成s->s<a[i].s即可。

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

溫馨提示

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

最新文檔

評論

0/150

提交評論