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.若有定義“inta=3,*p=&a,**q=&p;”,則以下敘述中錯誤的是()。

A.q是指針變量,*q就是變量a

B.p是指針變量,p指向變量a

C.q指向變量p,所以*q指向變量a

D.*p與**q都代表變量a

2.數據流圖用于抽象地描述一個軟件的邏輯模型,數據流圖由一些特定的圖符構成。下列圖符名標識的圖符不屬于數據流圖合法圖符的是()。

A.控制流B.加工C.數據存儲D.源和潭

3.若變量已正確定義,則語句“s=32;s^=32;printf(“%d”,s);”的輸出結果是()。

A.-1B.0C.1D.32

4.

5.有以下程序:#include<string.h>main(intargc,char*argv[]){inti=1,n=0;while(i<argC){n=n+strlen(argv[i]);i++}printf("%d\n",n);}該程序生成的可執行文件名為:proc.exe,若在運行時輸入命令行:proc1234567則該程序的輸出結果是()。

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

6.設x是一個int型的,y的值為10,則表達式x&&y的值為()。

A.1B.0C.與x值相同D.與x值相反

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

8.設主串T='aabaababaabaa',子串P:'abab',則簡單模式匹配算法中直至匹配成功,單個字符比較的次數為()。

A.12B.13C.14D.15

9.

10.若有定義int(*pt)[3];,則下列說法正確的是A.定義了基類型為int的三個指針變量

B.定義了基類型為int的具有三個元素的指針數組pt

C.定義了一個名為*pt、具有三個元素的整型數組

D.定義了一個名為pt的指針變量,它可以指向每行有三個整數元素的二維數組

11.

12.若已知一個棧的進棧序列是l,2,3…n,其輸出序列是P1,P2,P3,…PN,若P1=3,則P2為()。

A.可能是2B.一定是2C.可能是1D.一定是1

二、2.填空題(12題)13.設有下列宏定義:

#defineA2

#defineB(A+3)

則執行賦值語句"k=B*20;"(k為int型變量)后,k的值是______。

14.表示“整數x的絕對值大于5”時值為“假”的C語言表達式是______。

15.有以下程序

#include<stdio.h>

main()

{charch1,ch2;intn1,n2;

ch1=getchar();ch2=getchar();

n1=ch1-'()';n2=n1*10+(ch2-'()');

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

}

程序運行時輸入:12<回車>,執行后輸出結果是【】。

16.若a=10,b=20,則表達式!(a<b)的值是【】。

17.對于圖書管理數據庫,將圖書表中"人民郵電出版社"的圖書的單價漲價5%。請對下面的SQL語句填空:UPDATE圖書【】WHERE出版單位="人民郵電出版社"

18.軟件的需求分析階段的工作,可以概括為四個方面:【】、需求分析、編寫需求規格說明書和需求評審。

19.隊列是限定在表的一端進行插入和在另一端進行刪除操作的線性表。允許插入的一端稱作______。

20.下列程序中的數組a包括10個整數元素,分別將前項和后項之和存入數組b,并按每行4個元素輸出數組b。請填空。

#include<stdio.h>

main()

{inta[10],b[10],i;

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

scanf("%d",&a[i]);

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

______;

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

{if(i%4=0)printf("\n");

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

}

}

21.在宏定義#definePI3.14159中,用宏名PI代替一個______。

22.下面能正確進行字符串賦值操作的是

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

24.有以下程序:

#include<stdio.h>

intsub(intn)

{return(n/10+n%10);}

main()

{intx,y;

seanf("%d",&x);y=sub(sub(sub(x)));

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

}

若運行時輸入:1234<回車>,程序的輸出結果是【】。

三、3.程序設計題(10題)25.編寫一個函數,從num個字符串中找出最長的一個字符串,并通過形參指針max傳回該串地址。(注意:主函數中用¨¨作為結束輸入的標志。)

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

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

26.函數fun的功能是:將s所指字符串中除了下標為偶數、同時ASCII值也為偶數的字符外,其余的全都刪除;串中剩余字符所形成的一含新串放在t所指的數組中。

例如,若s所指字符串中的內容為:“ABCDEFGl23456”,其中字符A的ASCII碼值為奇數,因此應當刪除:其中字符B的ASCII碼值為偶數,但在數組中的下標為奇數,因此也應當刪除;而字符2的ASCII碼值為偶數,所在數組中的下標也為偶數,因此不應當刪除,其他依此類推。最后t所指的數組中的內容應是:“246”。

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

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

27.假定輸入的字符串中只包含字母和*號。請編寫函數fun(),它的功能是:刪除字符串中所有的*號。在編寫函數時,不得使用C語言中提供的字符串函數。

例如,若字符串中的內容為****A*BC*DEF*G*******,刪除后,字符串中的內容則應當是ABCDEFG。

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

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

試題程序:

#include<conio,h>

#include<stdio,h>

voidfun(char*a)

{

}

main()

{

chars[81];

printf("Enterastring:\n");

gets(s);

fun(s);

printf("Thestringafterdeleted:\n");

puts(s);

}

28.請編寫函數fun(),其功能是:將所有大于1小于整數m的非素數存入xx所指數組中,非素數的個數通過k傳回。

例如,輸入17,則應輸出46891012141516。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(intm,int*k,intxx[])

{

}

main()

{

intm,n,zz[100];

clrscr();

printf("\nPleaseenteranintegernumber

between10and100:");

scanf("%d",&n);

fun(n,&m,zz);

printf("\n\nThereare%dnon-prime

numberslessthan%d:",m,n);

for(n-0;n<m;n++)

printf("\n%4d",zz[n]);

}

29.請編寫一個函數unsignedfun(unsignedw),w是一個大于10的無符號整數,若w是n(n≥2)位的整數,則函數求出w的后n-1位的數作為函數值返回。

例如:w值為5923,則函數返回923;若w值為923,則函數返回23。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

unsignedfun(unsignedw)

{

}

main()

{

unsignedx;

clrscr();

printf("Enteraunsignedinteger

number:");

scanf("%u",&x);

printf("Theoriginaldatais:%u\n",x);

if(x<10)

printf("Dataerror!");

else

printf("Theresult:%u\n",fun(x));

}

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

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

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

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

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

31.編寫函數fun(),它的功能是求n以內(不包括n)同時能被5與11整除的所有自然數之和的平方根s,并作為函數值返回。

例如:n為1000時,函數值應為s=96.979379。

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

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

試題程序:

#include<conio.h>

#include<math.h>

#include

doublefun(intn)

{

}

main()

{

clrscr();

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

}

32.下列程序定義了NXN的二維數組,并在主函數中賦值。請編寫函數fun(),函數的功能是求出數組周邊元素的平方和并作為函數值返回給主函數中的S。例如:若a數組中的值為

a=01279

1112155

2216111

979102

54141

則返回主程序后s的值應為310。

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineN5

intfun(intw[][N])

{

}

main()

{

inta[N)[N]={0,1,2,7,9,1,1l,2l,5,5,2,21,6,11,1,9,7,9,10,2,5,4,1,4,1};

inti,j;

intS;

clrscr();

printf("*****Thearray***+*\n");

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

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

{printf(“%4d”,a[i][j]);}

printf("\n");

}

s=fun(a);

printf(“*****THERESULT*****\n”);

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

}

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

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

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

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

}

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

}

四、單選題(0題)35.有以下函數定義:voidfun(intn,doubx){……}若以下選項中的變量都已正確定義并賦值,則對函數fun的正確調用語句是()。

A.fun(inty,doublem);

B.k=fun(10,12.5);

C.fun(x,n);

D.voidfum(n,x);

五、單選題(0題)36.設有定義“char*c;”,以下選項中能夠使c正確指向一個字符串的是()。

A.charstr[]=“string”;c=str;

B.scanf(“%s”,c);

C.c=getchar();

D.*c=“string”;

六、單選題(0題)37.以下程序運行后,輸出結果是()#include<stdio.h>ss(char*s){char*p=s;while(*p)p++return(p-s);}main(){char*a=“abded”inti;i=ss(a);printf(“%d\n”,i);}A.8B.7C.6D.5

參考答案

1.A由題意可知:指針變量p指向變量a,p的值是a的地址;指針變量q指向變量p,q的值是P的地址。q是指針變量,q指向p,*q是變量P,選項A錯誤;p是指針變量,p指向變量a,選項B正確;由于q指向P,因此*q指向a,選項C正確;*p和**q都代表變量a,選項D正確。故本題答案為A選項。

2.A解析:數據流圖包括四個方面,即加工(輸入數據經加工變換產生輸出)、數據流(沿箭頭方向傳送數據的通道,一般在旁邊標注數據流名)、存儲文件(數據源)(表示處理過程中存放各種數據的文件)、源和潭(表示系統和環境的接口,屬系統之外的實體),不包括選項中的控制流。

3.B異或運算只有在兩個比較的位不同時其結果為1,否則結果為0。題目中兩個值相同,所以結果為0。故本題答案為B選項。

4.C

5.C

6.C

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

8.A

9.A

10.D解析:定義了一個指向一維數組的指針,該一維數組具有三個int型元素,按照C語言中二維數組的定義知,二維數組先按照行排列,再按照列排列,故選D。

11.D

12.A

13.100100解析:本題考查帶參數的宏定義及相關運算。運算過程為:k=B*20=(A+3)*20=(2+3)*20=100。

14.(x>-5)&&(x<5)(x>-5)&&(x<5)解析:本題考查基本邏輯表達,“整數x的絕對值大于5”時值為“假”,即整數x的絕對值小于等于5,也就是整數x要大于等于-5且要小于等于5。這里“且”用“與(&&)”表示,所以C語言表達式為:(x>-5)&&(x<5)。

15.1212解析:字符類型的數據在內存中以相應的ASCII碼存放,在C語言中,字符數據可以等價為與其相應的ASCII碼的整數,還可以作為整數參加運算。在本題中,n1=h1-0'=1-0=49-48=1,n2=n1*10+(ch2-'0')=1*10+(2-0)=10+2=12。

16.00解析:已知a=10,b=20,所以邏輯表達式a<b的值為true,即為1,在這個表達式前面有一個邏輯運算符!,表示反操作,所以整個語句的值應當為false,即為0。

17.SET單價=單價*1.05SET單價=單價*1.05解析:更新表中元組的值,使用UPDATE命令,一次可以更新表中的一個或多個屬性值。UPDATE短語之后指定更新數據所屬的表,將新的屬性值或表達式賦值給對應的屬性名(SET單價=單價*1.05),并置于SET短語之后。要求對人民郵電出版社的圖書漲5%,需要用WHERE短語對元組進行限制,即對符合條件的元組進行更新。

18.需求獲取需求獲取解析:軟件的需求分析階段的工作,可以概括為四個方面:需求獲取、需求分析、編寫需求規格說明書和需求評審。需求獲取的目的是確定對目標系統的各方面需求;需求分析是對獲取的需求進行分析和綜合,最終給出系統的解決方案和目標系統的邏輯模型;編寫需求規格說明書作為需求分析的階段成果,可以為用戶、分析人員和設計人員之間的交流提供方便,可以直接支持目標軟件系統的確認,又可以作為控制軟件開發進度的依據;需求評審是對需求分析階段的工作進行的復審,驗證需求文檔的一致性、可行性、完整性和有效性。

19.隊尾隊尾解析:在隊列中,允許插入的一端叫做“隊尾”,允許刪除的一端叫做“隊頭”。

20.b[i]=a[i]+a[i+1]b[i]=a[i]+a[i+1]解析:將數組a中元素a[i]與a[j+1]值相加后的值賦予數組b中元素b[i],即可實現將一個數組的前項和后項之和存入另一數組。

21.字符串字符串解析:本題考查字符替換格式:#define標識符字符串。

22.C

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

24.1010解析:函數sub遞歸調用的返回值被作為再次調用sub函數的實參傳給函數sub的形參,共進行3次遞歸調用。第1次調用sub(1234)的返回值為1234/10+1234%10=127;第2次調用sub(127)的返回值為127/10+127%10=19;第3次調用sub(19)的返回值為19/10+19%10=10。所以程序的輸出為10。

25.

解析:該程序功能是找出最長的一個字符串。解題思路,首先指定第一個字符串為長度最大的字符串,然后在循環過程中將其與其他的所有串的長度進行比較,求出最長的串。

26.

解析:該程序功能是將字符串中除了下標為偶數、ASCII值也為偶數的字符外,其余的全都刪除。解題過程利用if條件判斷表達式選擇符合條件的字符,然后將符合條件的字符放入指定的字符串。

27.voidfun(char.*a){intij=0;for(i=0;a[i]!='\0';i++)if(a[i]1='*')a[j++]=a[i];/*若不是要刪除的字符'*'則留下*/a[j]='\0';/*最后加上字符結束符'*'/}voidfun(char.*a)\r\n{\r\ninti,j=0;\r\nfor(i=0;a[i]!='\\0';i++)\r\nif(a[i]1='*')\r\na[j++]=a[i];/*若不是要刪除的字符'*'則留下*/\r\na[j]='\\0';/*最后加上字符結束符'*'/\r\n}解析:同樣的問題我們在前面也碰到過,本題中是刪除多余字符('*')。所以用循環從字符串的開始往后一個一個進行比較,若不是要刪除的字符(用ifa[i]!='*')來控制)則留下。注意下標變量j要從0開始,最后還要加上字符串結束符'\\0'。

28.voidfun(intmint*kintxx[]){intijn=0;for(i=4;i<m;i++)/*找出大于1小于整數m的非素數*/{for(j=2;j<i;j++)if{i%j==0)break;if(j<i)xx[n++]=i;}*k=n;/*反回非素數的個數*/}voidfun(intm,int*k,intxx[])\r\n{\r\ninti,j,n=0;\r\nfor(i=4;i<m;i++)/*找出大于1小于整數m的非素數*/\r\n{for(j=2;j<i;j++)\r\nif{i%j==0)break;\r\nif(j<i)xx[n++]=i;\r\n}\r\n*k=n;/*反回非素數的個數*/\r\n}解析:這道題是考查一個數是不是素數的簡單延伸,只要掌握了判斷素數的方法,問題便能順利解決,請學習者以此題為例,搞清判斷素數的方法。

29.unsignedfun(unsignedw){if(w>=10000)returnw%10000;/*求出n位整數w的后n-1位的數*/if(w>=1000)returnw%1000;if(w>=100)returnw%100;if(w>=10)returnw%10;}unsignedfun(unsignedw)\r\n{\r\nif(w>=10000)\r\nreturnw%10000;/*求出n位整數w的后n-1位的數*/\r\nif(w>=1000)\r\nreturnw%1000;\r\nif(w>=100)\r\nreturnw%100;\r\nif(w>=10)\r\nreturnw%10;\r\n}解析:我們首先應該明白無符號整數的定義形式,若它大于10000(5位)時,將10000對它求余則結果為后4位;當它大于1000(4位)時,將1000對它求余則結果為后3位,花此類推。特別注意這里所有if()的順序不能顛倒。

30.

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

31.doublefun(intn){doubles=0.0;inti;for(i=0;i<n;i++)/*從0~n中找到既能被5整除同時又能被11整除的數并將這些數求和*/if(i%5==0&&i%11==0)s=s+i;s=sqrt(s);/*對s求平方根*/returns;doublefun(intn)\r\n{doubles=0.0;\r\ninti;\r\nfor(i=0;i<n;i++)/*從0~n中找到既能被5整除同時又能被11整除的數,并將這些數求和*/\r\nif(i%5==0&&i%11==0)\r\ns=s+i;\r\ns=sqrt(s);/*對s求平方根*/\r\nreturns;解析:本題的解題思路是逐個取得從。0-n之間的所有數,對每次取得的數進行條件判斷,條件是既能被5整除同時又能被11整除,注意:這兩個條件要求同時成立,因此用到了“&&”運算符。滿足條件,該數就被累加到s中去,求出所有符合條件的數后,用sqrt()函數(包含于頭文件<math.h>中)對s求平方根。

32.intfun(intw[])[N]){intijk=0;ints=0;for(i=0;i<N;i++)for(j=0;j<N;j++)if(i==0||i==N-1||j==0||j==N-1)/*只要下標中有一個為0或N-1則它一定是周邊元素*/{s=s+w[i][j]*w[i][j];/*將周邊元素求平方和*/}returns;/+返回周邊元素的平方和*/}intfun(intw[])[N])\r\n{\r\ninti,j,k=0;\r\nints=0;\r\nfor(i=0;i<N;i++)\r\nfor(j=0;j<N;j++)\r\nif(i==0||i==N-1||j==0||j==N-1)/*只要下標中有一個為0或N-1,則它一定是周邊元素*/\r\n{s=s+w[i][j]*w[i][j];/*將周邊元素求平方和*/\r\n}\r\nreturns;/+返回周邊元素的平方和*/\r\n}解析:該題采用逐一判斷的方式,周邊元素的下標一定有一個是0或N-1,且只要下標中有一個為0或N-1,則它一定是周邊元素。

33.voidfun(int*wintpintn){inti.jt;for(i=p;i<=n-1;i++)/*循環右移n-p次*/{t=w[n-11;for(j=n-2;j>=0;j--)/*實現循環右移*/w[j+1]=w[j];w[0]=t;}voidfun(int*w,intp,intn)\r\n{\r\ninti.j,t;\r\nfor(i=p;i<=n-1;i++)/*循環右移n-p次*/\r\n{t=w[n-11;\r\nfor(j=n-2;j>=0;j--)/*實現循環右移*/\r\nw[j+1]=w[j];\r\nw[0]=t;\r\n}解析:本題采用“循環右移”的算法。和我們在前面分析的稍有不同的是,—個是整型數組,—個是字符型數組。

34.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}解析:本題采用“循環左移”的算法(關于“循環左移”,我們在后面的試題中有詳細的解釋)。和我們在前面分析的稍有不同的是,一個是整型數組,一個是字符型數組。

35.C解析:選項A中應將y和m前面的函數的類型說明符去掉,故選項A不正確;選項B中函數傳了2個參數,其中一個為整型—個為浮點型,而fun()函數在定義時聲明的2個參數,一個為整型一個為雙精度型,其參數類型不一致,故選項B不正確;選項D在調用函數時,不應該再聲明其返回類型,故選項D不正確。所以,4個選項中選項C符合題意.

36.A選項A為正確用法,先將字符串存于字符數組中,然后將數組名賦給字符指針(數組名代表數組首地址,定義數組時為其分配確定的地址)。C選項錯誤,getchar函數輸入一個字符給字符型變量,而不是字符指針。B選項和D選項有類似的錯誤,兩個選項并無語法錯誤,但運行時可能會出現問題。因為在B選項和D選項中,字符指針沒有被賦值,是一個不確定的值,指向一個不確定的內存區域,這個區域可能存放有用的指令或數據。在這個不確定的區域重新存放字符串,可能會發生無法預知的錯誤。故本題答案為A選項。

37.D2022-2023學年湖南省長沙市全國計算機等級考試C語言程序設計模擬考試(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.若有定義“inta=3,*p=&a,**q=&p;”,則以下敘述中錯誤的是()。

A.q是指針變量,*q就是變量a

B.p是指針變量,p指向變量a

C.q指向變量p,所以*q指向變量a

D.*p與**q都代表變量a

2.數據流圖用于抽象地描述一個軟件的邏輯模型,數據流圖由一些特定的圖符構成。下列圖符名標識的圖符不屬于數據流圖合法圖符的是()。

A.控制流B.加工C.數據存儲D.源和潭

3.若變量已正確定義,則語句“s=32;s^=32;printf(“%d”,s);”的輸出結果是()。

A.-1B.0C.1D.32

4.

5.有以下程序:#include<string.h>main(intargc,char*argv[]){inti=1,n=0;while(i<argC){n=n+strlen(argv[i]);i++}printf("%d\n",n);}該程序生成的可執行文件名為:proc.exe,若在運行時輸入命令行:proc1234567則該程序的輸出結果是()。

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

6.設x是一個int型的,y的值為10,則表達式x&&y的值為()。

A.1B.0C.與x值相同D.與x值相反

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

8.設主串T='aabaababaabaa',子串P:'abab',則簡單模式匹配算法中直至匹配成功,單個字符比較的次數為()。

A.12B.13C.14D.15

9.

10.若有定義int(*pt)[3];,則下列說法正確的是A.定義了基類型為int的三個指針變量

B.定義了基類型為int的具有三個元素的指針數組pt

C.定義了一個名為*pt、具有三個元素的整型數組

D.定義了一個名為pt的指針變量,它可以指向每行有三個整數元素的二維數組

11.

12.若已知一個棧的進棧序列是l,2,3…n,其輸出序列是P1,P2,P3,…PN,若P1=3,則P2為()。

A.可能是2B.一定是2C.可能是1D.一定是1

二、2.填空題(12題)13.設有下列宏定義:

#defineA2

#defineB(A+3)

則執行賦值語句"k=B*20;"(k為int型變量)后,k的值是______。

14.表示“整數x的絕對值大于5”時值為“假”的C語言表達式是______。

15.有以下程序

#include<stdio.h>

main()

{charch1,ch2;intn1,n2;

ch1=getchar();ch2=getchar();

n1=ch1-'()';n2=n1*10+(ch2-'()');

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

}

程序運行時輸入:12<回車>,執行后輸出結果是【】。

16.若a=10,b=20,則表達式!(a<b)的值是【】。

17.對于圖書管理數據庫,將圖書表中"人民郵電出版社"的圖書的單價漲價5%。請對下面的SQL語句填空:UPDATE圖書【】WHERE出版單位="人民郵電出版社"

18.軟件的需求分析階段的工作,可以概括為四個方面:【】、需求分析、編寫需求規格說明書和需求評審。

19.隊列是限定在表的一端進行插入和在另一端進行刪除操作的線性表。允許插入的一端稱作______。

20.下列程序中的數組a包括10個整數元素,分別將前項和后項之和存入數組b,并按每行4個元素輸出數組b。請填空。

#include<stdio.h>

main()

{inta[10],b[10],i;

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

scanf("%d",&a[i]);

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

______;

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

{if(i%4=0)printf("\n");

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

}

}

21.在宏定義#definePI3.14159中,用宏名PI代替一個______。

22.下面能正確進行字符串賦值操作的是

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

24.有以下程序:

#include<stdio.h>

intsub(intn)

{return(n/10+n%10);}

main()

{intx,y;

seanf("%d",&x);y=sub(sub(sub(x)));

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

}

若運行時輸入:1234<回車>,程序的輸出結果是【】。

三、3.程序設計題(10題)25.編寫一個函數,從num個字符串中找出最長的一個字符串,并通過形參指針max傳回該串地址。(注意:主函數中用¨¨作為結束輸入的標志。)

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

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

26.函數fun的功能是:將s所指字符串中除了下標為偶數、同時ASCII值也為偶數的字符外,其余的全都刪除;串中剩余字符所形成的一含新串放在t所指的數組中。

例如,若s所指字符串中的內容為:“ABCDEFGl23456”,其中字符A的ASCII碼值為奇數,因此應當刪除:其中字符B的ASCII碼值為偶數,但在數組中的下標為奇數,因此也應當刪除;而字符2的ASCII碼值為偶數,所在數組中的下標也為偶數,因此不應當刪除,其他依此類推。最后t所指的數組中的內容應是:“246”。

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

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

27.假定輸入的字符串中只包含字母和*號。請編寫函數fun(),它的功能是:刪除字符串中所有的*號。在編寫函數時,不得使用C語言中提供的字符串函數。

例如,若字符串中的內容為****A*BC*DEF*G*******,刪除后,字符串中的內容則應當是ABCDEFG。

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

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

試題程序:

#include<conio,h>

#include<stdio,h>

voidfun(char*a)

{

}

main()

{

chars[81];

printf("Enterastring:\n");

gets(s);

fun(s);

printf("Thestringafterdeleted:\n");

puts(s);

}

28.請編寫函數fun(),其功能是:將所有大于1小于整數m的非素數存入xx所指數組中,非素數的個數通過k傳回。

例如,輸入17,則應輸出46891012141516。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(intm,int*k,intxx[])

{

}

main()

{

intm,n,zz[100];

clrscr();

printf("\nPleaseenteranintegernumber

between10and100:");

scanf("%d",&n);

fun(n,&m,zz);

printf("\n\nThereare%dnon-prime

numberslessthan%d:",m,n);

for(n-0;n<m;n++)

printf("\n%4d",zz[n]);

}

29.請編寫一個函數unsignedfun(unsignedw),w是一個大于10的無符號整數,若w是n(n≥2)位的整數,則函數求出w的后n-1位的數作為函數值返回。

例如:w值為5923,則函數返回923;若w值為923,則函數返回23。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

unsignedfun(unsignedw)

{

}

main()

{

unsignedx;

clrscr();

printf("Enteraunsignedinteger

number:");

scanf("%u",&x);

printf("Theoriginaldatais:%u\n",x);

if(x<10)

printf("Dataerror!");

else

printf("Theresult:%u\n",fun(x));

}

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

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

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

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

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

31.編寫函數fun(),它的功能是求n以內(不包括n)同時能被5與11整除的所有自然數之和的平方根s,并作為函數值返回。

例如:n為1000時,函數值應為s=96.979379。

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

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

試題程序:

#include<conio.h>

#include<math.h>

#include

doublefun(intn)

{

}

main()

{

clrscr();

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

}

32.下列程序定義了NXN的二維數組,并在主函數中賦值。請編寫函數fun(),函數的功能是求出數組周邊元素的平方和并作為函數值返回給主函數中的S。例如:若a數組中的值為

a=01279

1112155

2216111

979102

54141

則返回主程序后s的值應為310。

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineN5

intfun(intw[][N])

{

}

main()

{

inta[N)[N]={0,1,2,7,9,1,1l,2l,5,5,2,21,6,11,1,9,7,9,10,2,5,4,1,4,1};

inti,j;

intS;

clrscr();

printf("*****Thearray***+*\n");

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

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

{printf(“%4d”,a[i][j]);}

printf("\n");

}

s=fun(a);

printf(“*****THERESULT*****\n”);

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

}

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

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

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

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

}

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

}

四、單選題(0題)35.有以下函數定義:voidfun(intn,doubx){……}若以下選項中的變量都已正確定義并賦值,則對函數fun的正確調用語句是()。

A.fun(inty,doublem);

B.k=fun(10,12.5);

C.fun(x,n);

D.voidfum(n,x);

五、單選題(0題)36.設有定義“char*c;”,以下選項中能夠使c正確指向一個字符串的是()。

A.charstr[]=“string”;c=str;

B.scanf(“%s”,c);

C.c=getchar();

D.*c=“string”;

六、單選題(0題)37.以下程序運行后,輸出結果是()#include<stdio.h>ss(char*s){char*p=s;while(*p)p++return(p-s);}main(){char*a=“abded”inti;i=ss(a);printf(“%d\n”,i);}A.8B.7C.6D.5

參考答案

1.A由題意可知:指針變量p指向變量a,p的值是a的地址;指針變量q指向變量p,q的值是P的地址。q是指針變量,q指向p,*q是變量P,選項A錯誤;p是指針變量,p指向變量a,選項B正確;由于q指向P,因此*q指向a,選項C正確;*p和**q都代表變量a,選項D正確。故本題答案為A選項。

2.A解析:數據流圖包括四個方面,即加工(輸入數據經加工變換產生輸出)、數據流(沿箭頭方向傳送數據的通道,一般在旁邊標注數據流名)、存儲文件(數據源)(表示處理過程中存放各種數據的文件)、源和潭(表示系統和環境的接口,屬系統之外的實體),不包括選項中的控制流。

3.B異或運算只有在兩個比較的位不同時其結果為1,否則結果為0。題目中兩個值相同,所以結果為0。故本題答案為B選項。

4.C

5.C

6.C

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

8.A

9.A

10.D解析:定義了一個指向一維數組的指針,該一維數組具有三個int型元素,按照C語言中二維數組的定義知,二維數組先按照行排列,再按照列排列,故選D。

11.D

12.A

13.100100解析:本題考查帶參數的宏定義及相關運算。運算過程為:k=B*20=(A+3)*20=(2+3)*20=100。

14.(x>-5)&&(x<5)(x>-5)&&(x<5)解析:本題考查基本邏輯表達,“整數x的絕對值大于5”時值為“假”,即整數x的絕對值小于等于5,也就是整數x要大于等于-5且要小于等于5。這里“且”用“與(&&)”表示,所以C語言表達式為:(x>-5)&&(x<5)。

15.1212解析:字符類型的數據在內存中以相應的ASCII碼存放,在C語言中,字符數據可以等價為與其相應的ASCII碼的整數,還可以作為整數參加運算。在本題中,n1=h1-0'=1-0=49-48=1,n2=n1*10+(ch2-'0')=1*10+(2-0)=10+2=12。

16.00解析:已知a=10,b=20,所以邏輯表達式a<b的值為true,即為1,在這個表達式前面有一個邏輯運算符!,表示反操作,所以整個語句的值應當為false,即為0。

17.SET單價=單價*1.05SET單價=單價*1.05解析:更新表中元組的值,使用UPDATE命令,一次可以更新表中的一個或多個屬性值。UPDATE短語之后指定更新數據所屬的表,將新的屬性值或表達式賦值給對應的屬性名(SET單價=單價*1.05),并置于SET短語之后。要求對人民郵電出版社的圖書漲5%,需要用WHERE短語對元組進行限制,即對符合條件的元組進行更新。

18.需求獲取需求獲取解析:軟件的需求分析階段的工作,可以概括為四個方面:需求獲取、需求分析、編寫需求規格說明書和需求評審。需求獲取的目的是確定對目標系統的各方面需求;需求分析是對獲取的需求進行分析和綜合,最終給出系統的解決方案和目標系統的邏輯模型;編寫需求規格說明書作為需求分析的階段成果,可以為用戶、分析人員和設計人員之間的交流提供方便,可以直接支持目標軟件系統的確認,又可以作為控制軟件開發進度的依據;需求評審是對需求分析階段的工作進行的復審,驗證需求文檔的一致性、可行性、完整性和有效性。

19.隊尾隊尾解析:在隊列中,允許插入的一端叫做“隊尾”,允許刪除的一端叫做“隊頭”。

20.b[i]=a[i]+a[i+1]b[i]=a[i]+a[i+1]解析:將數組a中元素a[i]與a[j+1]值相加后的值賦予數組b中元素b[i],即可實現將一個數組的前項和后項之和存入另一數組。

21.字符串字符串解析:本題考查字符替換格式:#define標識符字符串。

22.C

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

24.1010解析:函數sub遞歸調用的返回值被作為再次調用sub函數的實參傳給函數sub的形參,共進行3次遞歸調用。第1次調用sub(1234)的返回值為1234/10+1234%10=127;第2次調用sub(127)的返回值為127/10+127%10=19;第3次調用sub(19)的返回值為19/10+19%10=10。所以程序的輸出為10。

25.

解析:該程序功能是找出最長的一個字符串。解題思路,首先指定第一個字符串為長度最大的字符串,然后在循環過程中將其與其他的所有串的長度進行比較,求出最長的串。

26.

解析:該程序功能是將字符串中除了下標為偶數、ASCII值也為偶數的字符外,其余的全都刪除。解題過程利用if條件判斷表達式選擇符合條件的字符,然后將符合條件的字符放入指定的字符串。

27.voidfun(char.*a){intij=0;for(i=0;a[i]!='\0';i++)if(a[i]1='*')a[j++]=a[i];/*若不是要刪除的字符'*'則留下*/a[j]='\0';/*最后加上字符結束符'*'/}voidfun(char.*a)\r\n{\r\ninti,j=0;\r\nfor(i=0;a[i]!='\\0';i++)\r\nif(a[i]1='*')\r\na[j++]=a[i];/*若不是要刪除的字符'*'則留下*/\r\na[j]='\\0';/*最后加上字符結束符'*'/\r\n}解析:同樣的問題我們在前面也碰到過,本題中是刪除多余字符('*')。所以用循環從字符串的開始往后一個一個進行比較,若不是要刪除的字符(用ifa[i]!='*')來控制)則留下。注意下標變量j要從0開始,最后還要加上字符串結束符'\\0'。

28.voidfun(intmint*kintxx[]){intijn=0;for(i=4;i<m;i++)/*找出大于1小于整數m的非素數*/{for(j=2;j<i;j++)if{i%j==0)break;if(j<i)xx[n++]=i;}*k=n;/*反回非素數的個數*/}voidfun(intm,int*k,intxx[])\r\n{\r\ninti,j,n=0;\r\nfor(i=4;i<m;i++)/*找出大于1小于整數m的非素數*/\r\n{for(j=2;j<i;j++)\r\nif{i%j==0)break;\r\nif(j<i)xx[n++]=i;\r\n}\r\n*k=n;/*反回非素數的個數*/\r\n}解析:這道題是考查一個數是不是素數的簡單延伸,只要掌握了判斷素數的方法,問題便能順利解決,請學習者以此題為例,搞清判斷素數的方法。

29.unsignedfun(unsignedw){if(w>=10000)returnw%10000;/*求出n位整數w的后n-1位的數*/if(w>=1000)returnw%1000;if(w>=100)returnw%100;if(w>=10)returnw%10;}unsignedfun(unsignedw)\r\n{\r\nif(w>=10000)\r\nreturnw%1

溫馨提示

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

評論

0/150

提交評論