2022-2023學年安徽省宿州市全國計算機等級考試C語言程序設計模擬考試(含答案)_第1頁
2022-2023學年安徽省宿州市全國計算機等級考試C語言程序設計模擬考試(含答案)_第2頁
2022-2023學年安徽省宿州市全國計算機等級考試C語言程序設計模擬考試(含答案)_第3頁
2022-2023學年安徽省宿州市全國計算機等級考試C語言程序設計模擬考試(含答案)_第4頁
2022-2023學年安徽省宿州市全國計算機等級考試C語言程序設計模擬考試(含答案)_第5頁
已閱讀5頁,還剩47頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

2022-2023學年安徽省宿州市全國計算機等級考試C語言程序設計模擬考試(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.以下程序段運行后x的值為()。inti,j,x=0;for(i=3;i>=1;i--)for(j=1;j<=i;j++)x=x+2A.8B.14C.10D.12

2.有以下程序:

A.CDEFB.ABEFC.ABCDD.CDAB

3.在非線性結構中,每個結點()。

A.無直接前趨

B.只有一個直接前趨和個數不受限制的直接后繼

C.只有一個直接前驅和后繼

D.有個數不受限制的直接前驅和后繼

4.有以下程序:

執行后的結果是()。A.7B.3C.2D.0

5.

6.已知函數的調用形式:fread(buffer,size,count,fp);其中buffer代表的是()。

A.一個整型變量,代表要讀入的數據項總數

B.一個文件指針,指向要讀的文件

C.一個指針,是指向的輸入數據放在內存中的起始位置

D.一個存儲區,存放要讀的數據項

7.下列敘述中錯誤的是()。

A.列表框和組合框都有List屬性

B.列表框有Selected屬性,而組合框沒有

C.列表框和組合框都有Style屬性

D.組合框有Text屬性,而列表框沒有

8.定義int*swap()指的是______。

A.一個返回整型值的函數swap()

B.一個返回指向整型值指針的函數swap()

C.一個指向函數swap()的指針,函數返回一個整型值

D.以上說法均錯

9.二維數組A的元素都是6個字符組成的串,行下標i的范圍從0到8,列下標j的范圈從1到10,則存放A至少需要()個字節。

A.90B.180C.240D.270

10.請問對一個排好序的數組進行查找,時間復雜度為()

A.O(n)B.O(lgn)C.O(nlgn)D.O(1)

11.若有定義intx,y;并已正確給變量賦值,則以下選項中與表達式(x一y)(x++):(y++)中的條件表達式(x-y)等價的是()A.(x-y<0|x-y>0)B.x-y<0).C.(x-y>0)D.(x-y==)

12.程序設計的任務包括()。

A.編寫程序代碼并上機調試B.確定所用數據結構C.確定所用算法D.以上選項均正確

二、2.填空題(12題)13.通常,將軟件產品從提出、實現、使用維護到停止使用退役的過程稱為【】。

14.在關系模型中,把數據看成一個二維表,每一個二維表稱為一個______。

15.若x和n均是int型變量,且x=12,n=5,則執行y=x%=(n%=2)表達式后y的值為()。

16.子程序通常分為兩類:【】和函數,前者是命令的抽象,后者是為了求值。

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

main()

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

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

printf("%d",a);

}

18.有以下程序:#include<stdio.h>#include<string.h>main(){chara[]={'a','b','c','d','e','f','h','\0'};inti,j;i=sizeof(A);j=strlen(A);printf("%d,%d",i,j);}程序運行后的輸出結果是()。

19.Fibonacci數列中的頭兩個數是1和1,從第3個數開始,每個數等于前兩個數之和。下述程序計算此數列的前20個數,且每行輸出5個數,請填空。

#include<stdio.h>

main()

{intf,f1=1,f2=1;

inti;

printf("%6d%6d",f1,f2);

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

{f=【】;

printf("%6d",f);

if(【】)

printf("\n");

f1=f2;

【】;

}

}

20.測試的目的是暴露錯誤,評價程序的可靠性;而______的目的是發現錯誤的位置并改正錯誤。

21.數據模型按不同的應用層次分為三種類型,它們是______數據模型、邏輯數據模型和物理數據模型。

22.以下程序的功能是輸出如下形式的方陣:

13141516

9101112

5678

1234

請填空。

#include<stdio.h>

main()

{inti,j,x;

for(j=4;j【】;j--)

{for(i=1;i<=4;i++)

[x=(j-1)*4+【】;

printf("%4d",x);

}

printf("\n");

}

23.以下程序運行后的輸出結果是【】。

main()

{

inta[4][4]={{1,2,3,4},{5,6,7,8},{11,12,13,14},{15,16,17,18}};

inti=0,j=0,s=0;

while(i++<4)

{

if(i==2||==4)continue;

j=0;

do

{

s+=a[i][j];

j++;

}while(j<4);

}

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

}

24.計算機指令是由【】和地址碼組成的。

三、3.程序設計題(10題)25.函數fun的功能是:將a、b中的兩個兩位正整數合并形成一個新的整數放在c中。合并的方式是:將a中的十位和個位數依次放在變量c的百位和個位上,b中的十位和個位數依次放在變量c的千位和十位上。

例如,當a=45,b=12。調用該函數后,c=1425。

注意:部分源程序存在文件PROGl.C中。數據文件in.dat中的數據不得修改。

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

26.請編寫函數fun(),該函數的功能是:統計一行字符串中單詞的個數,作為函數值返回。一行字符串在主函數中輸入,規定所有單詞由小寫字母組成,單詞之間有若干個空格隔開,一行的開始沒有空格。

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

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

試題程序:

#include<string.h>

#include<stdio,h>

#defineN80

intfun(char*s)

{

}

main()

{

charline[N];

intnum=0;

printf("Enterastring:\n");

gets(line);

num=fun(line);

printf("Thenumberofwordis:%d\n\n",

num);

}

27.請編寫一個函數voidfun(cbara[],charb[],intn),其功能是:刪除一個字符申中指定下標的字符。其中,a指向原字符串,刪除后的字符串存放在b所指的數組中,n中存放指定的下標。

例如,輸入一個字符串world,然后輸入3,則調用該函數后的結果為word。

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

#defineLEN20

voidfun(chara[],charb[],intn)

{

}

main()

{

charstr1[LEN],str2[LEN];

intn;

clrscr();

printf("Enterthestring:\n");

gets(str1);

printf("Enterthepositionofthestring

deleted:");

scanf("%d",&n);

fun(str1,str2,n);

printf("Thenewstringis:%s\n",

str2);

}

28.請編寫函數fun(),其功能是:計算并輸出下列多項式值。

S=(1+1/2)+(1/3+1/4)+…+(1/(2n-1)+l/2n)

例如,若主函數從鍵盤給n輸入12后,則輸出為S=3.775958。

n的值要求大于1但不大于100。

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

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

試題程序:

#include<stdio.h>

doublefun(intn)

{

}

main()

{

intn;

doubles;

printf("\nlnputn:");

scanf("%d",&n);

s=fun(n);

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

}

29.請編寫函數fun,其功能是求出數組的最大元素在數組中的下標并存放在k所指的存儲單元中。

例如,輸入如下整數:87667589610l30l401980431451777則輸出結果為:6,980

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

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

30.假定輸入的字符串中只包含字母和*號。請編寫函數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);

}

31.請編寫函數fun(),該函數的功能是:刪去一維數組中所有相同的數,使之只剩一個。數組中的數已按由小到大的順序排列,函數返回刪除后數組中數據的個數。

例如,若一維數組中的數據是:

2223445666677899101010

刪除后,數組中的內容應該是:

2345678910。

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

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

試題程序:

#include<stdio.h>

#defineN80

intfun(inta[],intn)

{

}

main()

{

inta[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,

8,9,9,10,10,10,10},i,n=20;

printf("Theoriginaldata:\n");

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

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

n=fun(a,n);

printf("\n\nThedataafterdeleted

:\n");

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

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

printf("\n\n");

}

32.請編寫函數fun,它的功能是:計算并輸出n(包括n)以內能被5或9整除的所有自然數的倒數之和。

例如,在主函數中從鍵盤給n輸入20后,輸出為:s=0.583333。注意:要求n的值不大于100。

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

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

33.請編寫一個函數voidfun(char*tt,intpp[]),統計在tt字符串中“a”到“z”26個字母各自出現的次數,并依次放在pp所指數組中。

例如:當輸入字符串abcdefghabcdeabc后,程序的輸出結果應該是:33322110000000000000000000

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(char*tt,intpp[])

{

}

main()

{

charaa[1000];

intbb[26],k,n;

clrscr();

printf("\nPleaseenteracharstring:");

scanf("%s",aa);

fun(aa,bb);

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

printf("%d",bb[k]);

printf("\n");

}

34.請編寫函數fun,其功能是:計算并輸出3到n之間(含3和n)所有素數的平方根之和。

例如,在主函數中從鍵盤給n輸入100后,輸出為:sum=148.874270。

注意:要求n的值大于2但不大于100。部分源程序給出如下。清勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。

[試題源程序]

#include<math.h>

#include<stdio.h>

doublefun(intn)

{

}

main()

{

intn;

doublesum;

printf("\n\nInputn:");

scanf("%d",&n);

sum=fun(n);

printf("\n\nsum=%f\n\n",sum);

}

四、單選題(0題)35.字符串”a+b=12\n”的長度為()。

A.6B.7C.8D.9

五、單選題(0題)36.有以下程序執行程序時,給變量X輸入l0,程序的輸出結果是()。

A.55B.54C.65D.45

六、單選題(0題)37.若執行以下程序時從鍵盤上輸入9,則輸出結果是()。main(){intn;scanf(”%d”,&n);if(n++<10)printf(”/%d\n”,n);elseprintf(”%d\n”,n--);}A.11B.10C.9D.8

參考答案

1.D

2.A在函數funl()之前定義了全局字符變量a和b。這兩個變量的作用域是從其定義處開始到整個程序末結束。在函數funl()之內定義了兩個變量a和b,并且分別初始化為字符ˊCˊ和ˊDˊ。

3.D

4.C調用函數fun(7)時,由于x的值為7,執行語句“p=x-fun(x-2);”,相當于執行p=7-fun(5);

調用函數fun(5)時,由于x的值為5,執行語句“p=x-fun(x-2);”,相當于執行p=7-fun(3);調用函數fun(3)時,由于X的值為3,執行語句“p=x-fun(x-2);”,相當于執行p=7-fun(1);調用函數fun(1)時,由于x的值為1,執行語句“return(3);”,函數的返回值為3。

因此函數調用fun(7)等價于7-(5-fun(3)),即7-(5-(3-fun(1))),即7-(5-(3-3)),所以函數fun(7)的返回值為2。

5.D

6.C解析:數據塊輸入/輸出函數的調用形式為:fread(buffer,size,count,fp)。fread函數參數說明:“buffer”是一個指引,對fread來說,它是讀入數據的存放地址;“size”是要讀寫的字節數;“count”是要進行讀寫多少個size字節的數據項;“fp”是指文件型指針。

7.BB?!窘馕觥拷M合框和列表框都沒有selected屬性。

8.B解析:一個函數可以帶回—個整型值、字符值、實型值等,但也可以帶回指針型數據,即地址。本題的定義中,包括括號和*號,由于()優先級高于*。故它是一個返回整型指針的函數。

9.A

10.B

11.A條件表達式:x=表達式1,表達式2:表達式3的含義是:先求解表達式1,若為非0(真),則求解表達式2,將表達式2的值賦給x。若表達式1的值為0(假),則求解表達式3,將表達式3的值賦給x。在本題中與表達式1:(x-y等價的是(x-y>0)。

12.D程序設計是一門技術,需要相應的理論、技術、方法和工具來支持。程序設計的任務包括選項A)、B)、c)等方面。

13.軟件生命周期軟件生命周期解析:軟件產品從考慮其概念開始,到該軟件產品不能使用為止的整個時期都屬于軟件生命周期。一般包括可行性研究與需求分析、設計、實現、測試、交付使用以及維護等活動。

14.關系關系解析:關系模型用;維表表示,則每個;維表代表一種關系。

15.00解析:n%=2等價于n=n%2,結果為1:x%=1等價于x=x%1,結果為0。

16.過程過程

17.2828解析:a*=16+(b++)-(++c)等價于a=a*(16+(b++)-(++c)),b++的值為3;++c的值為5,請注意前綴++和后綴++的用法。

18.98

19.f1+f2i%5==0f2=ff1+f2\r\ni%5==0\r\nf2=f解析:f用來保存前兩個數之和,并作為第三個數,計算后把第二個數(f2)賦給f1,第三個數(f)賦給f2,再執行for循環。

20.調試調試

21.概念概念

22.>=1或>0i>=1或>0\r\ni解析:程序的外層for循環控制輸出數據的行數,故第一處填“>=1”或“>0”;內層循環控制每行輸出的個數。在內層for循環中,語句x=(j-1)*4+______;用于控制輸出方陣中的具體數據,由于這些數據與其所在的行、列(j,i)具有x=(j-1)*4+i的關系,故第二處填i。

23.9292解析:主函數中首先定義了一個4行4列的二維數組,然后執行一個while循環,該循環中又嵌套了一個do-while循環?,F看while循環,該循環通過i++的值來判斷是否結束循環當i++的值為4的時候結束循環,當i=0時,執行while的循環體,顯然if語句條件不滿足不執行,接著讓i=0,然后執行do-while循環體,我們不難看出do-whilo循環的功能是將第i+1行的所有元素加起來,所以這時s的值為s=a[1][0]+a[1][1]+a[1][2]+a[1][3)=26,當i=1時,i+1=2,uf后面括號里的表達式的值為真執行后面的continue語句,結束該次循環;當i=2時,i加1變為3,把第3+1行的所有元素的加到s上,此時s=s+a[2][0]+a[2][1]+a[2][2]+a[2][3]=92,當i=3時,3+1=4,if后面括號里的表達式的值為真執行后面的continue語句,結束該次循環,當i=3時,if后面括號里的表達式的值為真執行后面的continue語句,結束該次循環當i=4時while循環結束,所以最后輸出的s的值為92。

24.操作碼操作碼

25.*c=(b/10)*1000+(a/10)*100+(b%10)*10+(a%10);*c=(b/10)*1000+(a/10)*100+(b%10)*10+(a%10);解析:該程序功能是將正整數a、b合并形成一個新整數。本題類型首先要考慮整數的位數分離,然后要進行位數合成。也就是先將數字的各位數拆開,改變排列順序后,再組合成新的數字。

26.intfun(char*s){intij=0;for(i=0;s[i]!='\0';i++)if(s[i]!=''&&(s[i+l]==''||s[i+1]=='\O'))/*如果一個字母的下一個字符為空格或者結束標記則表示一個單詞結束*/j++;returnj;/*返回單詞個數*/}intfun(char*s)\r\n{\r\ninti,j=0;\r\nfor(i=0;s[i]!=\'\\0\';i++)\r\nif(s[i]!=\'\'&&(s[i+l]==\'\'||s[i+1]==\'\\O\'))/*如果一個字母的下一個字符為空格或者結束標記,則表示一個單詞結束*/\r\nj++;\r\nreturnj;/*返回單詞個數*/\r\n}解析:判斷單詞的個數,我們首先想到的是程序怎樣識別是一個單詞,也即循環語句中的fir(i=0;s[i]!='\\0';i++),本題重點是if句中的條件表達方式。

27.voidfun{chara[]charb[]intn){intik=0;for(i=0;a[i]!=‘\0’;i++)if(i!=n)/*將不是指定下標的字符存入數組b中*/b[k++]=a[i];b[k]=‘\0’;/*在字符串最后加上結束標記*/}voidfun{chara[],charb[],intn)\r\n{\r\ninti,k=0;\r\nfor(i=0;a[i]!=‘\\0’;i++)\r\nif(i!=n)/*將不是指定下標的字符存入數組b中*/\r\nb[k++]=a[i];\r\nb[k]=‘\\0’;/*在字符串最后加上結束標記*/\r\n}解析:本題要求刪除字符串中指定下標的字符,即相當于把不是指定下標的字符留下。所以要用if(i!=n),注意不能寫成“=”運算。

28.doublefun(intn){inti;doubles=0.0;for(i=1;i<=n;i++)/*計算S=(1+l/2)+(1/3+1/4)+…+(1/(2n-1)+1/2n)*/s=s+(1.0/(2*i-1)+1.0/(2*i));returns;}doublefun(intn)\r\n{\r\ninti;\r\ndoubles=0.0;\r\nfor(i=1;i<=n;i++)/*計算S=(1+l/2)+(1/3+1/4)+…+(1/(2n-1)+1/2n)*/\r\ns=s+(1.0/(2*i-1)+1.0/(2*i));\r\nreturns;\r\n}解析:本題中s=s+(1.0/(2*i-1)+1.0/(2*i));語句是用C程序去表達題目中的每一項,這是關鍵,其他問題不難理解。

29.

解析:(1)該程序功能是求最大元素在數組中的下標。它的解題思路是,用最大值變量max標記第一個待找數據,逐個把所有待找數據和max進行比較,并用pos標記其當前最大值所在位置,從而找出最大值。(2)從已給部分源程序的main主函數開始入手,核心函數“fun(a,10,&k);”中的參數a存放著給出的整數,fun函數實現查找最大元素的下標。

30.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()庫函數。

31.intfun(inta[]intn){intij=l;for(i=1;i<n;i++)if(a[j-1]!=a[i])/*若該數與前一個數不相同則要保留*/a[j++]=a[i];returnj;/*返回不同數的個數*/}intfun(inta[],intn)\r\n{\r\ninti,j=l;\r\nfor(i=1;i<n;i++)\r\nif(a[j-1]!=a[i])/*若該數與前一個數不相同,則要保留*/\r\na[j++]=a[i];\r\nreturnj;/*返回不同數的個數*/\r\n}解析:本題程序的流程是:讓i,j都從1開始,其中j用于控制刪除后剩下的數中的下標,i用于搜索原數組中的元素。j始終是新數組已有元素中最后一個元素的下一個元素的下標,所以if()中的條件是a[j-1]!=a[i],其中a[j-1]就是新數組中的最后一個元素,若條件成立,則表示出現了不同的值,所以a[i]要留下到新數組中。注意本題中i,j的初值都要從1開始,該算法只能用于數組已排序的題目中。

32.

解析:該程序功能是計算并輸出n(包括n)以內能被5或9整除的所有自然數的倒數之和。解題過程首先求出能被5或9整除的所有自然數,然后在此基礎上求得這些數的倒數之和。

33.voidfun(char*ttintpp[]){inti;fori=0;i<26;i++)pp[i]=0;/*初始化pp數組各元素為0*/for(;*tt!='\0';tt++)if(*tt>='a'&&*tt<='z')pp[*tt-'a']++;/*將tt字符串中'a'到'z'26個字母各自出現的次數依次放在pp數組中任一個小寫字母減去'a'后所得結果正好是它對應的下標*/}voidfun(char*tt,intpp[])\r\n{\r\ninti;\r\nfori=0;i<26;i++)\r\npp[i]=0;/*初始化pp數組各元素為0*/\r\nfor(;*tt!='\\0';tt++)\r\nif(*tt>='a'&&*tt<='z')\r\npp[*tt-'a']++;/*將tt字符串中'a'到'z'26個字母各自出現的次數,依次放在pp數組中,任一個小寫字\r\n母減去'a'后所得結果正好是它對應的下標*/\r\n}解析:第1個循環的作用是初始化數組pp,未經賦值變量的量為一個不確定數字。由于它要將'a'到'z'26個字母的個數依次放到數組pp中。即'a'的個數存于pp[0]中,'b'的個數存于pp[1]中,'c'的個數存于pp[2]中,…,依次類推。而'a'-'a'的值正好為0,'b'-'a'的值為1,'c'-'a'的值為2,…,依此類推。即任一個小寫字母減去'a'后所得結果正好是它對應的下標,所以就有了pp[*tt-'a']++。但*tt必須是小寫字母即if()不應省略。

34.doublefun(intn){intij=0;doubles=0;for(i=3;i<=n;i++){for(j=2;j<i;j++)if(i%j==0)break;if(j==i)s=s+sqrt(i);}returns;}doublefun(intn)\r\n{\r\ninti,j=0;\r\ndoubles=0;\r\nfor(i=3;i<=n;i++)\r\n{\r\nfor(j=2;j<i;j++)\r\nif(i%j==0)\r\nbreak;\r\nif(j==i)\r\ns=s+sqrt(i);\r\n}\r\nreturns;\r\n}

35.B

36.A本題考查的是遞歸算法的分析。一個直接或間接地調用自身的算法稱為遞歸算法。在一個遞歸算法中,至少要包含一個初始值和一個遞歸關系。本題的fun()函數在n等于l時返回1,而在其余情況下返[fi]n+fun(n一1),所以本題的遞歸算法可以這樣來表示:fun(n)=1(n=1)(初始值)fun(n)=n+fun(n一1)(n≠1)(遞歸關系)此時不難看出,該遞歸算法實現的是計算l+2+3+…+n,而且n必須大于0,否則會陷入死循環。故題目輸出的結果是l+2+3+..+10=55.應該選擇A)。

37.B當n為9時,此時if語句成立,執行n++后,n為10,因此輸出n的值為10,故選擇B選項。2022-2023學年安徽省宿州市全國計算機等級考試C語言程序設計模擬考試(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.以下程序段運行后x的值為()。inti,j,x=0;for(i=3;i>=1;i--)for(j=1;j<=i;j++)x=x+2A.8B.14C.10D.12

2.有以下程序:

A.CDEFB.ABEFC.ABCDD.CDAB

3.在非線性結構中,每個結點()。

A.無直接前趨

B.只有一個直接前趨和個數不受限制的直接后繼

C.只有一個直接前驅和后繼

D.有個數不受限制的直接前驅和后繼

4.有以下程序:

執行后的結果是()。A.7B.3C.2D.0

5.

6.已知函數的調用形式:fread(buffer,size,count,fp);其中buffer代表的是()。

A.一個整型變量,代表要讀入的數據項總數

B.一個文件指針,指向要讀的文件

C.一個指針,是指向的輸入數據放在內存中的起始位置

D.一個存儲區,存放要讀的數據項

7.下列敘述中錯誤的是()。

A.列表框和組合框都有List屬性

B.列表框有Selected屬性,而組合框沒有

C.列表框和組合框都有Style屬性

D.組合框有Text屬性,而列表框沒有

8.定義int*swap()指的是______。

A.一個返回整型值的函數swap()

B.一個返回指向整型值指針的函數swap()

C.一個指向函數swap()的指針,函數返回一個整型值

D.以上說法均錯

9.二維數組A的元素都是6個字符組成的串,行下標i的范圍從0到8,列下標j的范圈從1到10,則存放A至少需要()個字節。

A.90B.180C.240D.270

10.請問對一個排好序的數組進行查找,時間復雜度為()

A.O(n)B.O(lgn)C.O(nlgn)D.O(1)

11.若有定義intx,y;并已正確給變量賦值,則以下選項中與表達式(x一y)(x++):(y++)中的條件表達式(x-y)等價的是()A.(x-y<0|x-y>0)B.x-y<0).C.(x-y>0)D.(x-y==)

12.程序設計的任務包括()。

A.編寫程序代碼并上機調試B.確定所用數據結構C.確定所用算法D.以上選項均正確

二、2.填空題(12題)13.通常,將軟件產品從提出、實現、使用維護到停止使用退役的過程稱為【】。

14.在關系模型中,把數據看成一個二維表,每一個二維表稱為一個______。

15.若x和n均是int型變量,且x=12,n=5,則執行y=x%=(n%=2)表達式后y的值為()。

16.子程序通常分為兩類:【】和函數,前者是命令的抽象,后者是為了求值。

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

main()

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

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

printf("%d",a);

}

18.有以下程序:#include<stdio.h>#include<string.h>main(){chara[]={'a','b','c','d','e','f','h','\0'};inti,j;i=sizeof(A);j=strlen(A);printf("%d,%d",i,j);}程序運行后的輸出結果是()。

19.Fibonacci數列中的頭兩個數是1和1,從第3個數開始,每個數等于前兩個數之和。下述程序計算此數列的前20個數,且每行輸出5個數,請填空。

#include<stdio.h>

main()

{intf,f1=1,f2=1;

inti;

printf("%6d%6d",f1,f2);

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

{f=【】;

printf("%6d",f);

if(【】)

printf("\n");

f1=f2;

【】;

}

}

20.測試的目的是暴露錯誤,評價程序的可靠性;而______的目的是發現錯誤的位置并改正錯誤。

21.數據模型按不同的應用層次分為三種類型,它們是______數據模型、邏輯數據模型和物理數據模型。

22.以下程序的功能是輸出如下形式的方陣:

13141516

9101112

5678

1234

請填空。

#include<stdio.h>

main()

{inti,j,x;

for(j=4;j【】;j--)

{for(i=1;i<=4;i++)

[x=(j-1)*4+【】;

printf("%4d",x);

}

printf("\n");

}

23.以下程序運行后的輸出結果是【】。

main()

{

inta[4][4]={{1,2,3,4},{5,6,7,8},{11,12,13,14},{15,16,17,18}};

inti=0,j=0,s=0;

while(i++<4)

{

if(i==2||==4)continue;

j=0;

do

{

s+=a[i][j];

j++;

}while(j<4);

}

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

}

24.計算機指令是由【】和地址碼組成的。

三、3.程序設計題(10題)25.函數fun的功能是:將a、b中的兩個兩位正整數合并形成一個新的整數放在c中。合并的方式是:將a中的十位和個位數依次放在變量c的百位和個位上,b中的十位和個位數依次放在變量c的千位和十位上。

例如,當a=45,b=12。調用該函數后,c=1425。

注意:部分源程序存在文件PROGl.C中。數據文件in.dat中的數據不得修改。

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

26.請編寫函數fun(),該函數的功能是:統計一行字符串中單詞的個數,作為函數值返回。一行字符串在主函數中輸入,規定所有單詞由小寫字母組成,單詞之間有若干個空格隔開,一行的開始沒有空格。

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

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

試題程序:

#include<string.h>

#include<stdio,h>

#defineN80

intfun(char*s)

{

}

main()

{

charline[N];

intnum=0;

printf("Enterastring:\n");

gets(line);

num=fun(line);

printf("Thenumberofwordis:%d\n\n",

num);

}

27.請編寫一個函數voidfun(cbara[],charb[],intn),其功能是:刪除一個字符申中指定下標的字符。其中,a指向原字符串,刪除后的字符串存放在b所指的數組中,n中存放指定的下標。

例如,輸入一個字符串world,然后輸入3,則調用該函數后的結果為word。

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

#defineLEN20

voidfun(chara[],charb[],intn)

{

}

main()

{

charstr1[LEN],str2[LEN];

intn;

clrscr();

printf("Enterthestring:\n");

gets(str1);

printf("Enterthepositionofthestring

deleted:");

scanf("%d",&n);

fun(str1,str2,n);

printf("Thenewstringis:%s\n",

str2);

}

28.請編寫函數fun(),其功能是:計算并輸出下列多項式值。

S=(1+1/2)+(1/3+1/4)+…+(1/(2n-1)+l/2n)

例如,若主函數從鍵盤給n輸入12后,則輸出為S=3.775958。

n的值要求大于1但不大于100。

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

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

試題程序:

#include<stdio.h>

doublefun(intn)

{

}

main()

{

intn;

doubles;

printf("\nlnputn:");

scanf("%d",&n);

s=fun(n);

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

}

29.請編寫函數fun,其功能是求出數組的最大元素在數組中的下標并存放在k所指的存儲單元中。

例如,輸入如下整數:87667589610l30l401980431451777則輸出結果為:6,980

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

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

30.假定輸入的字符串中只包含字母和*號。請編寫函數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);

}

31.請編寫函數fun(),該函數的功能是:刪去一維數組中所有相同的數,使之只剩一個。數組中的數已按由小到大的順序排列,函數返回刪除后數組中數據的個數。

例如,若一維數組中的數據是:

2223445666677899101010

刪除后,數組中的內容應該是:

2345678910。

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

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

試題程序:

#include<stdio.h>

#defineN80

intfun(inta[],intn)

{

}

main()

{

inta[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,

8,9,9,10,10,10,10},i,n=20;

printf("Theoriginaldata:\n");

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

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

n=fun(a,n);

printf("\n\nThedataafterdeleted

:\n");

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

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

printf("\n\n");

}

32.請編寫函數fun,它的功能是:計算并輸出n(包括n)以內能被5或9整除的所有自然數的倒數之和。

例如,在主函數中從鍵盤給n輸入20后,輸出為:s=0.583333。注意:要求n的值不大于100。

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

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

33.請編寫一個函數voidfun(char*tt,intpp[]),統計在tt字符串中“a”到“z”26個字母各自出現的次數,并依次放在pp所指數組中。

例如:當輸入字符串abcdefghabcdeabc后,程序的輸出結果應該是:33322110000000000000000000

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(char*tt,intpp[])

{

}

main()

{

charaa[1000];

intbb[26],k,n;

clrscr();

printf("\nPleaseenteracharstring:");

scanf("%s",aa);

fun(aa,bb);

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

printf("%d",bb[k]);

printf("\n");

}

34.請編寫函數fun,其功能是:計算并輸出3到n之間(含3和n)所有素數的平方根之和。

例如,在主函數中從鍵盤給n輸入100后,輸出為:sum=148.874270。

注意:要求n的值大于2但不大于100。部分源程序給出如下。清勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。

[試題源程序]

#include<math.h>

#include<stdio.h>

doublefun(intn)

{

}

main()

{

intn;

doublesum;

printf("\n\nInputn:");

scanf("%d",&n);

sum=fun(n);

printf("\n\nsum=%f\n\n",sum);

}

四、單選題(0題)35.字符串”a+b=12\n”的長度為()。

A.6B.7C.8D.9

五、單選題(0題)36.有以下程序執行程序時,給變量X輸入l0,程序的輸出結果是()。

A.55B.54C.65D.45

六、單選題(0題)37.若執行以下程序時從鍵盤上輸入9,則輸出結果是()。main(){intn;scanf(”%d”,&n);if(n++<10)printf(”/%d\n”,n);elseprintf(”%d\n”,n--);}A.11B.10C.9D.8

參考答案

1.D

2.A在函數funl()之前定義了全局字符變量a和b。這兩個變量的作用域是從其定義處開始到整個程序末結束。在函數funl()之內定義了兩個變量a和b,并且分別初始化為字符ˊCˊ和ˊDˊ。

3.D

4.C調用函數fun(7)時,由于x的值為7,執行語句“p=x-fun(x-2);”,相當于執行p=7-fun(5);

調用函數fun(5)時,由于x的值為5,執行語句“p=x-fun(x-2);”,相當于執行p=7-fun(3);調用函數fun(3)時,由于X的值為3,執行語句“p=x-fun(x-2);”,相當于執行p=7-fun(1);調用函數fun(1)時,由于x的值為1,執行語句“return(3);”,函數的返回值為3。

因此函數調用fun(7)等價于7-(5-fun(3)),即7-(5-(3-fun(1))),即7-(5-(3-3)),所以函數fun(7)的返回值為2。

5.D

6.C解析:數據塊輸入/輸出函數的調用形式為:fread(buffer,size,count,fp)。fread函數參數說明:“buffer”是一個指引,對fread來說,它是讀入數據的存放地址;“size”是要讀寫的字節數;“count”是要進行讀寫多少個size字節的數據項;“fp”是指文件型指針。

7.BB。【解析】組合框和列表框都沒有selected屬性。

8.B解析:一個函數可以帶回—個整型值、字符值、實型值等,但也可以帶回指針型數據,即地址。本題的定義中,包括括號和*號,由于()優先級高于*。故它是一個返回整型指針的函數。

9.A

10.B

11.A條件表達式:x=表達式1,表達式2:表達式3的含義是:先求解表達式1,若為非0(真),則求解表達式2,將表達式2的值賦給x。若表達式1的值為0(假),則求解表達式3,將表達式3的值賦給x。在本題中與表達式1:(x-y等價的是(x-y>0)。

12.D程序設計是一門技術,需要相應的理論、技術、方法和工具來支持。程序設計的任務包括選項A)、B)、c)等方面。

13.軟件生命周期軟件生命周期解析:軟件產品從考慮其概念開始,到該軟件產品不能使用為止的整個時期都屬于軟件生命周期。一般包括可行性研究與需求分析、設計、實現、測試、交付使用以及維護等活動。

14.關系關系解析:關系模型用;維表表示,則每個;維表代表一種關系。

15.00解析:n%=2等價于n=n%2,結果為1:x%=1等價于x=x%1,結果為0。

16.過程過程

17.2828解析:a*=16+(b++)-(++c)等價于a=a*(16+(b++)-(++c)),b++的值為3;++c的值為5,請注意前綴++和后綴++的用法。

18.98

19.f1+f2i%5==0f2=ff1+f2\r\ni%5==0\r\nf2=f解析:f用來保存前兩個數之和,并作為第三個數,計算后把第二個數(f2)賦給f1,第三個數(f)賦給f2,再執行for循環。

20.調試調試

21.概念概念

22.>=1或>0i>=1或>0\r\ni解析:程序的外層for循環控制輸出數據的行數,故第一處填“>=1”或“>0”;內層循環控制每行輸出的個數。在內層for循環中,語句x=(j-1)*4+______;用于控制輸出方陣中的具體數據,由于這些數據與其所在的行、列(j,i)具有x=(j-1)*4+i的關系,故第二處填i。

23.9292解析:主函數中首先定義了一個4行4列的二維數組,然后執行一個while循環,該循環中又嵌套了一個do-while循環。現看while循環,該循環通過i++的值來判斷是否結束循環當i++的值為4的時候結束循環,當i=0時,執行while的循環體,顯然if語句條件不滿足不執行,接著讓i=0,然后執行do-while循環體,我們不難看出do-whilo循環的功能是將第i+1行的所有元素加起來,所以這時s的值為s=a[1][0]+a[1][1]+a[1][2]+a[1][3)=26,當i=1時,i+1=2,uf后面括號里的表達式的值為真執行后面的continue語句,結束該次循環;當i=2時,i加1變為3,把第3+1行的所有元素的加到s上,此時s=s+a[2][0]+a[2][1]+a[2][2]+a[2][3]=92,當i=3時,3+1=4,if后面括號里的表達式的值為真執行后面的continue語句,結束該次循環,當i=3時,if后面括號里的表達式的值為真執行后面的continue語句,結束該次循環當i=4時while循環結束,所以最后輸出的s的值為92。

24.操作碼操作碼

25.*c=(b/10)*1000+(a/10)*100+(b%10)*10+(a%10);*c=(b/10)*1000+(a/10)*100+(b%10)*10+(a%10);解析:該程序功能是將正整數a、b合并形成一個新整數。本題類型首先要考慮整數的位數分離,然后要進行位數合成。也就是先將數字的各位數拆開,改變排列順序后,再組合成新的數字。

26.intfun(char*s){intij=0;for(i=0;s[i]!='\0';i++)if(s[i]!=''&&(s[i+l]==''||s[i+1]=='\O'))/*如果一個字母的下一個字符為空格或者結束標記則表示一個單詞結束*/j++;returnj;/*返回單詞個數*/}intfun(char*s)\r\n{\r\ninti,j=0;\r\nfor(i=0;s[i]!=\'\\0\';i++)\r\nif(s[i]!=\'\'&&(s[i+l]==\'\'||s[i+1]==\'\\O\'))/*如果一個字母的下一個字符為空格或者結束標記,則表示一個單詞結束*/\r\nj++;\r\nreturnj;/*返回單詞個數*/\r\n}解析:判斷單詞的個數,我們首先想到的是程序怎樣識別是一個單詞,也即循環語句中的fir(i=0;s[i]!='\\0';i++),本題重點是if句中的條件表達方式。

27.voidfun{chara[]charb[]intn){intik=0;for(i=0;a[i]!=‘\0’;i++)if(i!=n)/*將不是指定下標的字符存入數組b中*/b[k++]=a[i];b[k]=‘\0’;/*在字符串最后加上結束標記*/}voidfun{chara[],charb[],intn)\r\n{\r\ninti,k=0;\r\nfor(i=0;a[i]!=‘\\0’;i++)\r\nif(i!=n)/*將不是指定下標的字符存入數組b中*/\r\nb[k++]=a[i];\r\nb[k]=‘\\0’;/*在字符串最后加上結束標記*/\r\n}解析:本題要求刪除字符串中指定下標的字符,即相當于把不是指定下標的字符留下。所以要用if(i!=n),注意不能寫成“=”運算。

28.doublefun(intn){inti;doubles=0.0;for(i=1;i<=n;i++)/*計算S=(1+l/2)+(1/3+1/4)+…+(1/(2n-1)+1/2n)*/s=s+(1.0/(2*i-1)+1.0/(2*i));returns;}doublefun(intn)\r\n{\r\ninti;\r\ndoubles=0.0;\r\nfor(i=1;i<=n;i++)/*計算S=(1+l/2)+(1/3+1/4)+…+(1/(2n-1)+1/2n)*/\r\ns=s+(1.0/(2*i-1)+1.0/(2*i));\r\nreturns;\r\n}解析:本題中s=s+(1.0/(2*i-1)+1.0/(2*i));語句是用C程序去表達題目中的每一項,這是關鍵,其他問題不難理解。

29.

解析:(1)該程序功能是求最大元素在數組中的下標。它的解題思路是,用最大值變量max標記第一個待找數據,逐個把所有待找數據和max進行比較,并用pos標記其當前最大值所在位置,從而找出最大值。(2)從已給部分源程序的main主函數開始入手,核心函數“fun(a,10,&

溫馨提示

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

評論

0/150

提交評論