2022年河南省漯河市全國計算機等級考試C語言程序設計測試卷(含答案)_第1頁
2022年河南省漯河市全國計算機等級考試C語言程序設計測試卷(含答案)_第2頁
2022年河南省漯河市全國計算機等級考試C語言程序設計測試卷(含答案)_第3頁
2022年河南省漯河市全國計算機等級考試C語言程序設計測試卷(含答案)_第4頁
2022年河南省漯河市全國計算機等級考試C語言程序設計測試卷(含答案)_第5頁
已閱讀5頁,還剩24頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

2022年河南省漯河市全國計算機等級考試C語言程序設計測試卷(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.下列程序段的時間復雜度為()。A.O(3n)B.O(n)C.O(n2)D.O(log3n)

2.

3.下面敘述中錯誤的是()。

A.軟件測試的目的是發現錯誤并改正錯誤

B.對被調試的程序進行“錯誤定位”是程序調試的必要步驟

C.程序調試通常也稱為Debug

D.軟件測試應嚴格執行測試計劃,排除測試的隨意性

4.設有以下語句:inta=1,b=2,c;c=a^(b<<2);執行后,c的值為()。A.6B.7C.8D.9

5.排序方法中,將整個無序序列分割成若干小的子序列并分別進行插入排序的方法,稱為______。

A.希爾排序B.冒泡排序C.插入排序D.選擇排序

6.

7.若定義了函數double*function(),則函數function的返回值為()。

A.實數型B.實數的地址C.指向函數的指針D.函數的地址

8.設有6個結點的無向圖,該圖至少應有()條邊才能確保是一個連通圖。

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

9.設有以下函數“voidfun(intn,char*s){…}”,則下列對函數指針的定義和賦值均正確的是()。

A.void(*pf)(int,char);pf=&fun;

B.void*pf();pf=fun;

C.void*pf();*pf=fun;

D.void(*pf)(int,char*);pf=fun;

10.

11.當n=5時,函數輸出為()A.5B.11C.29D.10

12.關鍵路徑是事件結點網絡中()。

A.從源點到匯點的最長路徑B.從源點到匯點的最短路徑C.最長回路D.最短回路

二、2.填空題(12題)13.以下程序從終端讀入數據到數組中,統計其中正數的個數,并計算它們之和。請填空。

main()

{inti,a[20],sum,count;

sum=count=0;

for(i=0;i<20;i++)scanf("%d",(【】);

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

{if(a[i]>0)

{count++;

sum+=(【】);

}

}

printf("sum=%d,count=%dhn",sum,count);

}

14.對于長度為n的順序存儲的線性表,當隨機插入和刪除一個元素時,需平均移動元素的個數為【】。

15.下面函數用來求兩個單精度數之和,并通過形參將結果傳回,請填空。

Voidsub(floatx,noaty,【】z)

{【】=x+y;}

16.語句"int(*ptr)();"的含義是______是指向函數的指針,該函數返回一個int型數據。

17.下面程序的輸出是()。

main()

{intarr[8],i,k=0;

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

arr[i]=i;

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

k+=arr[i]+i;

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

}

18.x和y都是double型變量,x的初值為4.0,y的初值為2.0,則表達式pow(y,fabs(x))的值為______。

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

#include<stdio,h>

main()

{inta,b,c;

a=10;b:20;c=(a%b<1)‖(a/b>1);

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

}

20.下面程序的輸出結果是【】。

charb[]="ABCD";

main()

{

charb[30];

strcpy(&b[0],"GH");

strcpy(&b[1],"GH”);

strcpy(&b[2],"GH");

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

}

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

22.下列程序的輸出結果是______。

#include<stdio.h>

fun()

{staticinta=0;

a+=3;printf("%d",A);

}

main()

{intcc;

for(cc=1;cc<5;cc++)fun();

printf("\n");

}

23.設有下列宏定義:#defineA2

#defineBA+3

則執行賦值語句;t=B*2;t為int型變量后的值是______。

24.請在以下程序第一行的下劃線處填寫適當內容,使程序能正確運行。

【】(double,double);

main()

{doublex,y;

scanf("%lf%lf",&x,&y);

printf("%1f\n",max(x,y));

}

doublemax(doublea,doubleb)

{return(a>b?a:b);}

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

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

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

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

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

26.請編寫一個函數,用來刪除字符串中的所有空格。

例如:輸入asdafaaz67,則輸出為asdafaz67。

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

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

試題程序:

#include<stdio.h>

#include<ctype.h>

#include<conio.h>

intfun(char*str)

{

}

main()

{

charstr[81];

intn;

clrscr();

printf("Inputastring:");

gets(str);

puts(str);

fun(str);

printf("***Str:%s\n",str);

}

27.請編寫函數fun,其功能是:計算并輸出

例如,在主函數中從鍵盤給n輸入20后,輸出為:s=534.188884。

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

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

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

28.函數fun的功能是:將a、b中的兩個兩位正整數合并形成一個新的整數放在c中。合并的方式是:將a中的十位和個位數依次放在變量c的千位和十位上,b中的十位和個位數依次放在變量c的個位和百位上。

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

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

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

29.請編寫一個函數fun,它的功能是:將一個數字字符串轉換為一個整數(不得調用C語言提供的將字符串轉換為整數的函數)。例如,若輸入字符串“-1234”,則函數把它轉換為整數值-1234。

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

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

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

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

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

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

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

/*輸出平均分*/

}

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

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

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

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

33.請編寫一個函數voidfun(intm,intk,intxx[]),該函數的功能是:將大于整數m且緊靠m的k個素數存入所指的數組中。

例如,若輸入17,5,則應輸出19,23,29,3l,37。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(intm,intk,intxx[])

{

}

main()

{

intm,n,zz[1000];

clrscr();

printf("\nPleaseentertwointegers:");

scanf("%d%d",&m,&n);

fun(m,n,zz);

for(m=O;m<n;m++)

printf("%d",zz[m]);

printf("\n");

}

34.請編寫一個函數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");

}

四、單選題(0題)35.有如下定義:structperson{charname[9];intage;}structpersonclass[10]={"John",17,"Paul",19,"Mary",18,"Adam",16};能輸出字母M的是()

A.printf("%c\n",class[3].name);

B.printf("%c\n",class[3].name[1]);

C.printf("%c\n",class[2].name[1]);

D.printf("%c\n",class[2].name[0]);

五、單選題(0題)36.帶有頭節點的單向鏈表head,其3個數據節點A、B、C的連接關系如下圖所示:節點類型的定義為structlink{doubledt;structlink*next;};若指針P指向A節點,在不改變P指向的前提下,以下選項中不能訪問C節點數據成員dt的表達式是()。A.*(*p).next->next->dt

B.p->next->next->dt

C.(*(*(*p).next).next).dt

D.(*(p->next->next)).dt

六、單選題(0題)37.sizeof(float)是()。

A.一種函數調用B.一種函數定義C.一個浮點表達式D.一個整型表達式

參考答案

1.D

2.B

3.A軟件測試的目的是為了發現錯誤而執行程序的過程,并不涉及改正錯誤,所以選項A錯誤。程序調試的基本步驟有:錯誤定位、修改設計和代碼,以排除錯誤、進行回歸測試,防止引進新的錯誤。程序調試通常稱為Debug,即排錯。軟件測試的基本準則有:所有測試都應追溯到需求、嚴格執行測試計劃,排除測試的隨意性、充分注意測試中的群集現象、程序員應避免檢查自己的程序、窮舉測試不可能、妥善保存測試計劃等文件。故答案為A選項。

4.D本題考查兩個知識點,按位異或左移把b左移2位化成二進制c=a(b<<2)=a^(000010<<2)=a^001000=0000001^O01000=9,故選擇D。

5.A解析:希爾排序法的基本思想是:將整個無序序列分割成若干小的子序列分別進行插入排序。

6.D

7.B

8.B

9.D函數的參數可以是指針類型,它的作用是將一個變量的地址傳送到另一個函數中。函數名代表函數的入口地址,指向函數的指針應該定義為“void(*Pf)();”。如果定義為“void*pf();”,則表示函數pf的返回值是一個基類型為void的指針。故本題答案為D選項。

10.A

11.C

12.A

13.&a[i]或a+Ia[i]或*(a+i)&a[i]或a+I\r\na[i]或*(a+i)解析:主函數中一開始定義了一個長度為20的整形數組,然后通過一個循環,循環20次給它的每個元素賦初值,所以在第一個空格處應填各個元素的地址,即填&a[i]或a+i,然后再通過一個循環執行20次,每循環一次,先判斷該循環是否大于0,如果大于0將其累加到變量sum中,所以第二個空格處應該填入數組元素,即應該填a[i]或*(a+i)。

14.n/2n/2解析:刪除一個元素,平均移動的元素個數為(n-1+n-2+…+0)/n=(n-1)/2;插入一個元素,平均移動元素個數為(n+n-1+n-2+…+1)/n=(n+1)/2;所以總體平均移動元素個數為n/2。

15.float*z

16.ptrptr解析:本題考查函數指針的概念。函數指針的定義格式是:類型標識符(*旨針變量名)()。注:“類型標識符”為函數返回值的類型。

17.20

18.1616解析:函數運算不改變數據類型,所以結果也是double型,fabs(x)是對x取絕對值,pow(y,fabs(x))是y的labs(x)次冪,即2.04。0=16.000000(注意;結果為double型)。

19.1020010200解析:程序中(a%b<1)||(a/b>1)的運算順序為先算括號→算術運算符→關系運算符→邏輯運算符。首先計算a%b=10,a/b=0,因為a%b<1為假(0),a/b>1也為假(0),所以整個表達式的結果為假(0),最后輸出a,b,c的值為10200。

20.GGGHGGGH解析:由于在函數main中定義了數組變量b,其將屏蔽全局變量b。對于一維數組變量,其值為一常數,等于數組首元素地址。strcpy(&b[0],'GH'),是將字符串,'GH',復制到數組b中從首元數開始的空間中,此是b中的字符串為'GH';strcpy(&b[1],'GH'),是將字符串“GH'復制到數組b中從第二個元素開始的空間中,此是b中的字符串為'GH'。執行第三次strcpy函數后,b中的字符串為'GGGH'。

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

22.3691236912解析:本題考查最基本的for循環:for(cc=1;cc<5;cc++)規定循環次數為4次,每次a+=3即每次a的值增3,但因為fun函數中變量a為static類型,所以每次調用完于函數之后,變量a所做的改變都要保存。

23.88解析:本題考查帶參數的宏定義及相關運算.運算過程為:t=B*2=A+3*2=2+3*2=8。

24.doublemaxdoublemax解析:本題考查函數的聲明。C語言中函數聲明的一般形式為:

(1)函數類型函數名(參數類型1,參數類型2,…)

(2)函數類型函數名(參數類型1參數名1,參數類型2參數名2,…)

題目中函數類型是double。函數名是max。故答案是doublemax。

25.

解析:該程序功能是刪去一維數組中所有相同的數,使之只剩一個。解題思路是,首先在函數中定義臨時變量指向每一個元素,然后在循環過程中將臨時值和其他元素進行比較,如果相同,那么跳過相同字符。

26.intfun(char*str){intij=0;for(i=0;str[i]!='\0';i++)if(str[i]!='')/*將字符串中的空格刪去*/str[j++]=str[i];/*注意該程序中空格字符的表達方法*/str[j]='\0';/*在字符串最后加上結束標記符*/}intfun(char*str)\r\n{\r\ninti,j=0;\r\nfor(i=0;str[i]!='\\0';i++)\r\nif(str[i]!='')/*將字符串中的空格刪去*/\r\nstr[j++]=str[i];/*注意該程序中空格字符的表達方法*/\r\nstr[j]='\\0';/*在字符串最后加上結束標記符*/\r\n}解析:前面我們接觸到的題是刪除字符,但本題要求刪除所有空格,即除了空格以外的其他所有字符都要留下。由于C語言中沒有直接刪除字符的操作,所以我們對于刪除字符的操作都是采用“留下”字符的算法,以前的題目亦是如此。用str[i]從串頭到串尾逐一走動,每走到一個字符都判斷其是否為空格,若不是空格(注意在if()的單引號之間有一個空格),則將其保存str[j]中。注意j的下標變化、初值及最后加串結束符'\\0'。

27.

解析:該程序功能是對題干中給出的多項式的求解。根據題干中給出的數列,首先推出每一項的表達式,然后再對多項式進行累加求和。

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

29.

解析:該程序功能是將一個數字字符串轉換為一個整數。其中,解題思路是將每位數字字符串的ASCII碼減去48(字符“0”的ASCII碼值),變成數字0~9。然后再不斷進行高位乘以10加低位的運算,或者反過來從低位向高位求,即不斷進行低位加高位乘以10的運算。

30.

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

31.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]。

32.

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

33.voidfun(intmintkintxx[]){intijn;for(i=m+1n=0;n<k;i++)/*找大于m的素數循環k次即找出緊靠m的k個素數*/{for(j=2;j<i;j++)/*判斷一個數是否為素數如果不是跳出此循環判斷下一個數*/if(i%j==O)break;if(j>=i)/*如果是素數放入數組xx中*/xx[n++]=i;}}voidfun(intm,intk,intxx[])\r\n{\r\ninti,j,n;\r\nfor(i=m+1,n=0;n<k;i++)/*找大于m的素數,循環k次,即找出緊靠m的k個素數*/\r\n{for(j=2;j<i;j++)/*判斷一個數是否為素數,如果不是,跳出此循環,判斷下一個數*/\r\nif(i%j==O)break;\r\nif(j>=i)/*如果是素數,放入數組xx中*/\r\nxx[n++]=i;\r\n}\r\n}解析:本題只要掌握了判斷素數的算法即不難完成了,其實程序缺少部分也正是這部分。

34.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'后所得結果正好是它對

溫馨提示

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

評論

0/150

提交評論