2021-2022學年河北省唐山市全國計算機等級考試C語言程序設計真題一卷(含答案)_第1頁
2021-2022學年河北省唐山市全國計算機等級考試C語言程序設計真題一卷(含答案)_第2頁
2021-2022學年河北省唐山市全國計算機等級考試C語言程序設計真題一卷(含答案)_第3頁
2021-2022學年河北省唐山市全國計算機等級考試C語言程序設計真題一卷(含答案)_第4頁
2021-2022學年河北省唐山市全國計算機等級考試C語言程序設計真題一卷(含答案)_第5頁
已閱讀5頁,還剩23頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

2021-2022學年河北省唐山市全國計算機等級考試C語言程序設計真題一卷(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.二進制數1110111.11轉換成十進制數是()。

A.119.375B.119.75C.119.125D.119.3

2.

3.

4.在一個具有n個結點的有序單鏈表中插入一個新結點并仍然保持有序的時間復雜度是()。

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

5.以下程序的輸出結果是main(){intc=35;printf("%d\n",c&c);}

A.0B.70C.35D.1

6.

7.在位運算中,操作數左移一位,其結果相當于A.A.操作數乘以2

B.操作數除以2

C.操作數除以4

D.操作數乘以4

8.設計一個判別表達式中左、右括號是否配對出現的算法,采用()數據結構最佳。A.線性表的順序存儲結構B.隊列C.線性表的鏈式存儲結構D.棧

9.有以下程序:#include<stdio.h>#defineSUB(x,y)(x)*(y)main(){inta=3,b=4;printf(“%d\n”,SUB(a++,b++));程序運行后的輸出結果是()。

A.15B.12C.16D.20

10.判斷有向圖是否存在回路,利用()方法最佳。

A.求關鍵路徑B.求最短路徑C.拓撲排序D.廣度優先遍歷

11.

12.在數據庫系統中,用戶所見數據模式為______。A.概念模式B.外模式C.內橫式D.物理模式

二、2.填空題(12題)13.已有定義如下:

structnode

{

intdata;

structnode*next;

}*p;

以下語句調用malloc函數,使指針p指向一個具有stmctnode類型的動態存儲空間。

請填空。

p=(structnode*)malloc();

14.在面向對象的方法中,______描述的是具有相似屬性與操作的一組對象。

15.數據的物理結構在計算機存儲空間中的存放形式稱為數據的【】。

16.若變量a,b已定義為int類型并賦值21和55,要求用printf函數以a=21,b=55的形式輸出,請寫出完整的的輸出語句()。

17.下面的程序實現字符串的復制。

voidcopy_string(from,to)

【】;

{for(;*from;from++,to++)

*to=*from;

【】;

}

main()

{char*a="Iamwang",*b="youareLi";

printf("%s\n%s\n",a,b);

【】;

printf("%s\n%s\n\n",a,b);

}

18.若x和y都是double型變量,且x的初值為3.0,y的初值為2.0,則表達式pow(y,fabs(x))的值為【】。

19.二分法查找僅限于這樣的表:表中的數據元素必須有序,其存儲結構必須是______。

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

#defineP(A)printf("%d,",(int)(A))

#definePRINT(A)P(A);printf("theend")

main()

{inti,a=0;

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

PRINT(a+i);

printf("\n");

}

21.若有定義inta[4][4]={{1,2,3,4},{0},{4,6,8,10},{1,3,5,7}},則初始化后,a[1][1]得到的初值是______。

22.有以下程序:

main()

{inta=7,b=8,*p,*q,*r;

p=&a;q=&b;

r=p;p=q;q=r;

printf("%d,%d,%d,%d\n",*p,*q,a,b);

}

程序運行后的輸出結果是【】。

23.若變量n中的值為24,則函數共輸出【】行,最后一行有【】個數。

voidprint(intn,intaa)

{inti;

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

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

if(!(i%5))printf("\n");

}

printf("\n");

}

24.下面程序用來輸出結構體變量a所占存儲單元的字節數,請填空。

main()

{structstu

{charx[20];floaty;}a;

printf("asize:%d\n",sizeof(【】));

}

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

例如,若輸入abc4Efg,則應輸出aBc4EFg。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*ss)

{

}

main()

{

chartt[81];

clrscr();

printf("\nPleaseenteranstringwithin80characters:\n");

gets(tt);

printf("\n\nAfterchanging,thestring\n\%s",tt);

fun(tt);

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

}

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

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

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

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

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.N名學生的成績己在主函數中放入一個帶頭節點的鏈表結構中,h指向鏈表的頭節點。請編寫函數fun(),它的功能是:求出平均分,由函數值返回。

例如,若學生的成績是85,76,69,91,72,64,87,則平均分應當是78.625。

注童:部分源程序給出如下.

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

試題程序:

#include<stdlib.h>

#include<stdio.h>

#defineN8

structslist

{doubles;

structslist*next;

};

typedefstructslistSTREC;

doublefun(STREC*h)

{

}

STREC*creat(double*s)/*創建鏈表*/

{

STREC*h,*p,*q;

inti=0;

h=p=(STREC*)malloc(sizeof(STREC));

p->s=0;

while(i<N)

{q=(STREC*)malloc(sizeof(STREC));

q->s=sIi];i++;p->next=q;p=q;

}

p->next=0;

returnh;

}

outlist(STREC*h)

{

STREC*p;

p=h->next;

printf("head");

do

{printf("->%4.if",p->s);

p=p->next;/*輸出各成績*/

}

while(p!=0)

}

main()

{

doubles[N]={85,76,69,85,91,72,64,

87},ave;

STREC*h;

h=creat(s);

outlist(h);

ave=fun(h);

printf("ave=%6.3f\n",ave);

}

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

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

注意:要求n的值大于2但不大于100。部分源程序在文件PROGl.C中。

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

30.學生的記錄由學號和成績組成,N名學生的數據已在主函數中放入結構體數組s中,請編寫函數fun,它的功能是:把分數最低的學生數據放在b所指的數組中,注意:分數最低的學生可能不止一個,函數返回分數最低的學生的人數。

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

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

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,函數的功能是:實現B=A+Aˊ,即把矩陣A加上A的轉置,存放在矩陣B中。計算結果在main函數中輸出。

例如,輸入下面的矩陣:其轉置矩陣為:

123147

456258

789369

程序輸出:

2610

61014

101418

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

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

33.編寫程序,實現矩陣(3行3列)的轉置(即行列互換)

例如,輸入下面的矩陣:

100200300

400500600

700800900

程序輸出:

100400700

200500800

300600900

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

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

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

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

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

四、單選題(0題)35.設有數組A[i][j],數組的每個元素長度為3字節,i的值為8,j的值為10,數組從內存首地址BA開始順序存放,下標從0開始,當以列為主序存放時,元素A[5][8]的存儲首地址為()。

A.BA+141B.BA+180C.BA+222D.BA+225

五、單選題(0題)36.字符串"\\"ABCDEF\"\\”的長度是()。

A.11B.10C.5D.3

六、單選題(0題)37.以下選項中合法的實型常數是()。

A.5E2.0B.E-3C.2E0D.1.3E

參考答案

1.B

2.B

3.C

4.B

5.C解析:本題考查按位與“&”。因為1&1=1,0&0=0,所以任何數與自身按位與,結果仍為此數,不發生變化。

6.B

7.A左移運算符“<<”是雙目運算符,其功能是把“<<”左邊的運算數的各二進位全部左移若干位,由“<<”右邊的數指定移動的位數,高位丟棄,低位補0。例如,a<<4是把a的各二進位向左移動4位。如a=00000011(十進制3),左移4位后為00110000(十進制48)。

8.D

9.B#define命令是C語言中的一個宏定義命令,標識符一般使用大寫,用標識符定義一個:字符串,該標識符被稱為宏名,被定義的字符串稱為替換文本。宏定義不進行其他操作,僅僅只是替換標識符。后綴自增運算a++表示先運算,后自加。意思是遇到a++了,先把當前的a的值拿來參加運算,后面再自加。SUB(a++,b++)→(a++)*(b++)=3*4。故本題答案為B選項。

10.C

11.D

12.B解析:數據庫管理系統的三級模式結構由外模式、模式和內模式組成。夕模式,或子模式,或用戶模式,是指數據庫用戶所看到的數據結構,是用戶看到的數據視圖。模式,或邏輯模式,是數據庫中對全體數據的邏輯結構和特性的描述,是所有用戶所見到的數據視圖的總和。外模式是模式的—部分。內模式,或存儲模式,或物理模式,是指數據在數據庫系統內的存儲介質上的表示,即對數據的物理結構和存取力式的描述。

13.sizeof(structnode)或4sizeof(structnode)或4解析:本題考核的知識點是動態存儲分配函數malloc()的用法。C標準規定malloc()函數返回值的類型為void*,函數的調用形式為:malloc(size)。要求aize的類型為unsignedint,所以該空格處應該填sizeof(structnode)或4。

14.類類解析:在面向對象的方法中,把具有相同屬性和方法的對象稱為類,類是對象的抽象,對象是類的實例。

15.內模式或物理模式或存儲模式內模式或物理模式或存儲模式解析:一個數據庫只有一個內模式,它是數據物理結構和存儲方式的描述,是數據庫內部的表示方法。例如,記錄的存儲方式是順序存儲、索引按照什么方式組織;數據是否壓縮存儲,是否加密等。

16.printf(“a=%db=%d”aB);printf(“a=%d,b=%d”,a,B);解析:printf函數的一般格式為:“printf(格式控制,輸出表列)”。

17.char*from*to*to='\0'copy_string(ab)char*from,*to\r\n*to='\\0'\r\ncopy_string(a,b)解析:函數copy_string()用到了形參from,to是指針變量,實參a、b是字符串指針,第一個空格應填形參說明語句“char*from,*to”。當from所指的字符串全部復制給to所指的字符串時,有可能to所指原字符串長度大于from所指字符串長度,即可能to所指串的后面字符仍留在復制后的to所指串中。為避免這種情況,必須在from所指串復制完后,馬上給to所指串加上串結束符。因此,第二個空格應填*to='\\0'。main()函數應調用copy_string()函數,第三個空格應填copy_string(a,b)。

18.88解析:fabs函數功能是求x的絕對值,計算結果為double型。pow功能是計算x的y次方的值,計算結果同樣為double型。所以本題表達式相當于2.0的3.0次方,結果為8.000000。

19.順序存儲(順序方式存儲)順序存儲(順序方式存儲)解析:二分法查找對表的要求是有序的順序表,即第一要求是數據元素有序,第二要求是按順序方式存儲。

20.1234theend1,2,3,4,theend解析:本題考查帶參數的宏的定義。第1次循環,i=1時,調用PRINT(1),P(1)輸出1;第2次循環,i=2時,調用PRINT(2),P(2)輸出2;第3次循環,i=3時,調用PRINT(3),P(3)輸出3;第4次循環,i=4時,調用PRINT(4),P(4)輸出4,theend。

21.00解析:二維數組可以看成是按矩陣形式排列的,題目中給二維數組賦初值是按行分段賦值的,a[4][4]可以分解為4個一維數組,其數組名分別為a[0]、a[1]、a[2]、a[3],這4個一維數組都有4個元素,a[0]的元素為a[0][0]、a[0][1]、a[0][2]、a[0][3]。

22.87788,7,7,8解析:本題中執行語句p=&a和q=&b后,*p=7,*q=8;執行完語句r=p,p=q,q=r后,*p=8,*q=7,故答案為8,7,7,8。

23.54

24.dd解析:d被定義為一個結構體類型變量,求結構體變量a所占存儲單元的字節數即sizeof(d)。

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

26.

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

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.doublefun(STREC*h){doubleav=0.0;STREC*p-h->next;/*p直接指向“頭結點”的下一個結點即第—個成績*/while(p!=NULL){aY=ay+p->s;/*求總分數*/p=p->next;}returnay/N;/*返回平均值*/}doublefun(STREC*h)\r\n{\r\ndoubleav=0.0;\r\nSTREC*p-h->next;/*p直接指向“頭結點”的下一個結點,即第—個成績*/\r\nwhile(p!=NULL)\r\n{aY=ay+p->s;/*求總分數*/\r\np=p->next;\r\n}\r\nreturnay/N;/*返回平均值*/\r\n}解析:本題是關于鏈表問題,所以,一定要弄清表示出使指針變量p指向下一個“結點”的方法及表示結束的判斷,本題中,因為“頭結點”中沒有數值,所以程序中讓p直接指向“頭結點”的下一個結點,使用語句STREC*p=h->next,當然也可將p一開始就指向“頭結點”。

29.

解析:函數fun的功能是計算并輸出3到n之間(含3和n)所有素數的平方根之和,首先根據題干中的要求找出3到n之間的素數,并求出素數的平方根,然后求得這些平方根的和。

30.

解析:該程序功能是把分數最低的學生數據放在b所指的數組中。本題是關于求解結構體中某些成員的最小值,首先將第一個值設定為最小值,并在循環中將其他所有值與該值進行比較,求得最小值。然后將最小值與所有值進行比較,求得所有的最小值。

31.intfun(inta[]intn){intij=l;for(i=1;i<n;i++)if(a[j

溫馨提示

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

評論

0/150

提交評論