2021年廣東省陽江市全國計算機等級考試C語言程序設計模擬考試(含答案)_第1頁
2021年廣東省陽江市全國計算機等級考試C語言程序設計模擬考試(含答案)_第2頁
2021年廣東省陽江市全國計算機等級考試C語言程序設計模擬考試(含答案)_第3頁
2021年廣東省陽江市全國計算機等級考試C語言程序設計模擬考試(含答案)_第4頁
2021年廣東省陽江市全國計算機等級考試C語言程序設計模擬考試(含答案)_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2021年廣東省陽江市全國計算機等級考試C語言程序設計模擬考試(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.樹的度為3,且有9個度為3的節(jié)點,5個度為1的節(jié)點,但沒有度為2的節(jié)點。則該樹中的葉子節(jié)點數為()。

A.18B.33C.19D.32

2.設intx=7,則~x的值是()。

A.-8B.7C.-1D.1

3.使用下列二維圖形變換矩陣A=a*T,,其中,a是行向量(xy1),是齊次坐標形式的二維點。給定的變換矩陣T如下所示,則將產生的變換結果為()A.圖形放大2倍

B.圖形放大2倍,同時沿X、Y坐標軸方向各移動一個單位

C.沿X坐標軸方向各移動2個單位

D.沿X坐標軸放大2倍,同時沿X、Y坐標軸方向各移動一個單位

4.可以判斷一個有向圖中是否含有回路的方法為()。

A.廣度優(yōu)先遍歷B.深度優(yōu)先遍歷C.拓撲排序D.求最短路徑

5.以下對結構體類型變量的定義中,不正確的是()。

A.typedefstruetaa{intn;floatm;}AA;AAtdl;

B.#defineAAstructaaAA{intn;floatm;}tdl;

C.struct{intn;floatm;}aa;structaatdl;

D.struct{intn;floatm;}tdl;

6.下列能正確進行字符串賦值的是()。

A.chars[5]={"ABCDE"};

B.chars[5]={A,B,C,D,E};

C.char*S;S="ABCDE";

D.char*s;printf("%《",s);

7.以下敘述中錯誤的是

A.在程序中凡是以“#”開始的語句行都是預處理命令行

B.預處理命令行的最后不能以分號表示結束

C.#defineMAX是合法的宏定義命令行

D.C程序對預處理命令行的處理是在程序執(zhí)行的過程中進行的

8.

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

A.為了建立一個關系,首先要構造數據的邏輯關系

B.表示關系的二維表中各元組的每一個分量還可以分成若干數據項

C.一個關系的屬性名表稱為關系模式

D.一個關系可以包括多個二維表

10.在下列語句中,其含義為“q是一個函數指針,該指針指向整型數據”的定義語句是()。

A.int**q;B.int(*q);C.int*q;D.int*q;

11.在長度為n的順序存儲的線性表中,刪除第i個元素(1≤i≤n)時,需要從前向后依次前移____個元素。

A.n-iB.n-i+1C.n-i-1D.i

12.

二、2.填空題(12題)13.以下程序用來統(tǒng)計文件中字符的個數。請?zhí)羁铡?/p>

#include“stadio.h”

main()

{FILE*fp;longnum=0L;

if((fp=fopen(“fname.dat”,“r”))==NULL);

{printf(“0penerror\n”);exit(0);}

while(【】)

{fsetc(fp);num++;}

printf(“num=%1d\n”,num-1);

fclose(fp);

}

14.閱讀下面程序段,則執(zhí)行后輸出的結果是【】。

#include"stdio.h"

main()

{charfun(char,int);

chara=′A′;

intb=13;

a=fun(a,b);

putchar(a);}

charfun(chara,intb)

{chark;

k=a+b;

returnk;}

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

16.對數據元素之間的邏輯關系的描述是()。

17.匯編程序和編譯程序翻譯的目標程序需經【】連接成可執(zhí)行的程序。

18.如果調用fopen函數不成功,則函數返回【】;如果調用fclose函數不成功,則函數返回【】。

19.設有下面的程序段:chars[]="china";char*p;p=S;則下列敘述正確的是

20.以下程序實現(xiàn)帶有頭結點的單鏈表的建立,鏈表中每個結點包含數據域data(字符型)和指針域next,所建立鏈表的頭指針由參數phd傳回調用程序。在空格處填入正確內容。

#include<stdio.h>

#include<stdlib,h>

structnode{

chardata;

structnode*next;

};

voidcreatlist(【】)

{

charch;

structnode*s,*r;

*phd=malloc(sizeof(structnode));

r=*phd;

ch=getchar();

while(ch!='@'){

s=malloc(sizeof(structnode));

s->data=ch;

r->next=s;

r=s;

ch=getchar();

};

r->next=【】;

}

main()

{

structnode*head;

head=NULL;

creatlist(【】)

}

21.若定義#definePI3.14159,則執(zhí)行完下列程序后輸出結果是______。

#definePI3.14159;printf("PI=%f",PI);

22.以下程序的輸出結果為【】。

main()

{intk=1;

white(k<=15)

if(++k%3!=2)continue;

elseprintf("%d",k);

printf("\n");

}

23.有以下程序:

prt(int*m,intn)

{inti;

for(i=0;i<n;i++)m[i]++;

}

main()

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

prt(a,5);

for(i=0;i<5;i++)printf("%d,",a[i];

}

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

24.已定義charch=′$′;inti=1,j;,執(zhí)行j!=ch&&i++以后,i的值為【】。

三、3.程序設計題(10題)25.假定輸入的字符串中只包含字母和*號。請編寫函數fun(),它的功能是:除了尾部的,:號之外,將字符串中其他*號全部刪除。形參p已指向字符串中最后一個字母。在編寫函數時,不得使用C語言的字符串函數。

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

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(char*a,char*p)

{

}

main()

chars[81],*t;

printf("Enterastring:\n");

gets(s);

t=s;

while(*t)

t++;

t--;/*指針t指向字符串尾部*/

while(*t=='*')

t--;/*指針t指向最后一個字母*/

fun(s,t);

printf("Thestringafterdeleted:\n");

puts(s);

}

26.學生的記錄由學號和成績組成,N名學生的數據已在主函數中放入結構體數組s中,請編寫函數fun(),該函數的功能是:把高于等于平均分的學生數據放在b所指的數組中,低于平均分的學生數據放在c所指的數組中,高于等于平均分的學生人數通過形參n傳回,低于平均分的學生人數通過形參m傳回,平均分通過函數值返回。

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

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

試題程序:

#include<stdio.h>

#defineN12

typedefstruct

{charnum[10];

doubleS;

}STREC;

doublefun(STREC*a,STREC*b,STREC*C,int*n,int*m)

{

}

main()

{

STRECs[N]={{“GA05”,65},{“GA03”,86},

{“GA02”,76},{“GA04”,95},{“GA01”,93},

{“GA07”,78},{“GA08”,68},{“GA06”,88},

{“GA09”,60},{“GAll”,54},{“GAl2”,56},

{“GAl0”,98}};

STRECh[N],l[N],t;

FILE*out;

inti,j,m,n;

doubleave;

ave=fun(S,h,l,&n,&m);

printf("The%dstudentdatawhichishigherthan%7.3f:\n",n,ave);

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

printf("%s%4.lf\n",h[i].num,

h[i].s);

printf("\n");

printf("The%dStudentdatawhichiSlowerthan%7.3f:\n",m,ave);

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

printf("%s%4.1f\n",l[i].num,l[i].s);

printf("\n");

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

fprintf(out,"%d\n%7.3f\n",n,ave);

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

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

if(h[i].s<h[j].s)

{t=h[i];h[i]=h[i];h[j]=t;}

/*分數從現(xiàn)到低排列*/

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

fprintf(out,“%4.1f\n",h[i].s);

fprintf(out,"%d\n%7.3f\n",m,ave);

for(i=0;i<m-1;i++)

for(j=i+1;i<m;j++)

if(l[i].s<l[j].s)

{t=l[i];l[i]=l[j];l[j]=t;}

/*分數從高到低排列*/

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

fprintf(out,"%4.1f\n",l[i].s);

fclose(out);

}

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

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(int*a,int*n)

{

}

main()

{

intaa[1000],n,k;

clrscr();

fun(aa,&n);

for(k=0;kif((k+1)%10==0)

{printf("%5d",aa[k]);

printf("\n");}/*一行寫9個數*/

else

printf("%5d",aa[k]);

}

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

/*輸出平均分*/

}

29.編寫函數fun(),它的功能是;根據以下公式求p的值,結果由函數值帶回。m與n為兩個正數且要求m>n。

P=m!/n!(m-n)!),例如:m=12,n=8時,運行結果為495.000000。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

floatfun(intm,intn)

{

}

main()

{

clrscr();

printf("p=%f\n",fun(12,8));

}

30.請編寫一個函數voidfun(char*ss),其功能是:將字符串ss中所有下標為偶數位置上的字母轉化為大寫(若該位置上不是字母,則不轉換)。

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

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(char*ss)

{

}

main()

{

chartt[51];

clrscr();

printf("Pleaseenterancharacterstring

within50characters:\n");

gets(tt);

printf("\n\nAfterchanging,thestring\n

%s",tt);

fun(tt);

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

}

31.請編寫函數fun(),其功能是:計算并輸出給定10個數的方差。

其中

例如,給定的10個數為95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0,則輸出為S=11.730729。

注意;部分源程序給出如下.

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

試題程序:

#include<math.h>

#include<stdio.h>

doublefun(doublex[10])

{

}

main()

{

doubles,x[i0]={95.0,89.0,76.0,65.0,

88.0,72.0,85.0,81.0,90.0,56.0};

inti;

printf("\nTheoriginaldatais:\n");

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

printf("%6.1f",x[i]);

printf("\n\n");

s=fun(x);

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

}

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

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

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

}

33.下列程序定義了NXN的二維數組,并在主函數中自動賦值。請編寫函數fun(inta[][N]),該函數的功能是使數組右上半三角元素中的值全部置成0。例如a數組中的值為

a=456

179

326,

則返回主程序后a數組中的值應為

000

100

320

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#defineN5

intfun(inta[][N])

{

}

main()

{

inta[N][N],i,j;

clrscr();

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

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

/*產生—個隨機的5*5矩陣*/

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

{a[i][j]=rand()%10;

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

}

printf(“\n”);

}

fun(a);

printf(“THERESULT\n”);

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

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

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

printf(“\n”);

}

}

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

}

}

四、單選題(0題)35.以下不能定義為用戶標識符的是()。

A.scanfB.VoidC.3comD.int

五、單選題(0題)36.若變量已正確定義,要求程序段完成5!的計算,不能完成此操作的程序段是______。

A.for(i=1,p=1;i<=5;i++)p*=i;

B.for(i=1;i<=5;i++){p=1;p*=i;}

C.i=1;p=1;while(i<=5){p*=i;i++;}

D.i=1;p=1;do{p*=i;i++;}while(i<=5);

六、單選題(0題)37.有下列程序:

程序執(zhí)行后的輸出結果是()。

A.6,5,4,4,5,6,

B.1,2,3,4,5,6,

C.4,5,6,4,5,6,

D.1,2,3,6,5,4,

參考答案

1.C設葉子結點數為〃,則該樹的結點數為n+9+5=n+\n14,根據樹中的結點數=樹中所有結點的度之和+1,得9×3+0×2+5×1+n×0+1=n+14,則n=19。本題選擇C選項。

2.A本題主要考查按位求反運算和C語言正負數的表示,“O”代表正數,“1”代表負數;x=7的二進制為00111,第一個0代表正數,~x為11000,第一個l代表負數,值為8。

3.D

4.C

5.C解析:定義結構體類型的變量有如下幾種方法:

①定義結構體類型的同時,定義結構體類型的變量,如:

stractaa

{…}tdl;

選項B)中將宏名AA用宏體structaa替換后,與該定義形式一樣,因此是正確的。在這一定義形式中,結構體類型名aa是可以省略的,因此,D)項也是正確的。

②先定義結構體類型,然后再定義結構體類型的變量,形式如下:

structaa

{…};

strnctaatdl;

這種定義形式也可演變?yōu)椋合扔妙愋投x語句typedef將該結構體類型定義成一個類型名AA,然后直接用該類型名AA定義一個結構體變量(這時不再需要使用關鍵字struct)。因此選項A)正確。

6.C選項A、B的空間不夠;字符串存儲要有結束符\0,且要占用一個空間,printf用來輸出字符,不能輸入字符串。

7.D解析:在C語言中,凡是以“#”開頭的行都稱為編譯預處理命令行,如#include、#define、#if等,每行的末尾不得用“;”結束,以區(qū)別于C語句、定義和說明語句。選項C中的宏定義為不帶參數的宏命令行,宏名之后可以有替換文本,也可以沒有。編譯預處理是在編譯程序對C源程序進行編譯前執(zhí)行的.當然也在程序執(zhí)行之前執(zhí)行,因此選項D是錯誤的。

8.D

9.C解析:在格式化模型中,要事先根據應用的需要,確定數據之間的邏輯關系,即先對數據進行結構化。在關系模型中,不需要事先構造數據的邏輯關系,只要將數據按照一定的關系存入計算機,也就是建立關系。所以選項A錯誤。對于一個表示關系的二維表,其最基本的要求是表中元組的每一個分量必須是不可分的數據項,即不允許表中再有表。所以,選項B、D說法是錯誤的。一個關系的屬性名表稱為關系模式,也就是二維表的表框架,相當于記錄型。因此,選項C說法正確。

10.B本題考查指針函數。其定義的基本格式為:類型說明符(*函數名)。“類型說明符”表示返回的指針值指向的數據類型。

11.A

12.D

13.!feof(fP)!feof(fP)解析:統(tǒng)計文件中字符個數的算法可描述如下:首先判斷文件位置指針是否指向了文件尾,如果不是則讀出一個字符,同時字符的個數加1,再判斷文件位置指針是否位于文件尾,如此循環(huán),直到文件位置指針位于文件尾為止。本題首先以讀文件的方式打開了文件“fname.dar”,如果打開成功則把返回的文件型指針賦值給fp,然后通過循環(huán)求文件中的字符數。首先判斷文件位置指針是否位于文件尾,如果不是則循環(huán)讀取字符,每次字符數加1。所以下劃處應填循環(huán)條件,文件位置指針不是指向文件尾,即“!feof(fp)”。

14.NN解析:函數說明語句中的類型名必須與函數返回值的類型一致。本題實現(xiàn)的是在字符'A'的ASCII碼值上加上一個常數,使之變成另一個ASCII碼值,從而輸出字符。

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

16.數據的邏輯結構數據的邏輯結構解析:數據的邏輯結構是對數據元素之間的邏輯關系的描述,它可以用一個數據元素的集合和定義在此集合中的若干關系來表示。

17.裝配程序裝配程序

18.NULL或0EOF或-1NULL或0\r\nEOF或-1解析:如果fopen()函數調用不成功,則返回一個空指針值NULL(0);如果fclose()函數調用不成功,則返回EOF(-1)。所以本題的兩個空應分別填NULL和EOF。

19.D

20.structnode**phdNULL&head

21.PI=3.14159PI=3.14159解析:本題先定義了一個宏名PI,以后在程序中出現(xiàn)PI都用3.14159替代,但是C語言規(guī)定:雙引號中的宏名是不進行替換的。

22.25811142581114解析:本題通過while和if語句,求得出1~15之間與3取模為2的整數,并依次輸出。

23.234562,3,4,5,6解析:函數prt(a,5)的功能是使得a數組中,從a[0]~a[4]中元素均增1。

24.11解析:在執(zhí)行邏輯表達式'j=!ch&&i++'時,首先判斷j=!ch的值,因為'ch=\'$\''不為0,所以'j=!ch=0',編譯系統(tǒng)便不再計算表達式'i++'的值,i的值不變,仍為1。

25.voidfun(char*achar*p){char*t=a;for(;t<=p;t++)if(*t!='*')*(a++)=*t;/*將p以前所有不是*號的字符保留下來*/for(;*t!='\0';t++)*(a++)=.t;/*將p以后的所有*號保留下來*/*a='\0';/*在字符串最后加上結束標記位*/voidfun(char*a,char*p)\r\n{\r\nchar*t=a;\r\nfor(;t<=p;t++)\r\nif(*t!='*')\r\n*(a++)=*t;/*將p以前所有不是*號的字符保留下來*/\r\nfor(;*t!='\\0';t++)\r\n*(a++)=.t;/*將p以后的所有*號保留下來*/\r\n*a='\\0';/*在字符串最后加上結束標記位*/解析:本題曾在歷年上機考試及模擬試題中多次出現(xiàn),一般用兩個循環(huán)語句來實現(xiàn)。第1個循環(huán)的作用是將p以前所有不是*號的字符保留下來,即刪除所有的*號。第2個循環(huán)的作用是將p以后的所有*號保留下來。

26.doublefun(STREC*aSTREC*bSTREC*Cint*nint*m){inti;doubleav=0.0;*n=0;*m=0;for(i=0;i<N;i++)av=av+a[i].S;av=av/N;/*求平均值*/for(i=0;i<N;i++)if(av<=a[i].s){b[*n]=a[i];/*將高于等于平均分的學生存從所指存儲單元中并統(tǒng)計人數*/*n=*n+l;}else{c[*m]=a[i];/*將低于平均分的學生存入c所指存儲單元中并統(tǒng)計人數*/*m=*m+1;}returnav;/*返回平均分*/}doublefun(STREC\u3000*a,STREC*b,STREC*C,int*n,int*m)\r\n{\r\ninti;\r\ndoubleav=0.0;\r\n*n=0;\r\n*m=0;\r\nfor(i=0;i<N;i++)\r\nav=av+a[i].S;\r\nav=av/N;/*求平均值*/\r\nfor(i=0;i<N;i++)\r\nif(av<=a[i].s)\r\n{\r\nb[*n]=a[i];/*將高于等于平均分的學生存從所指存儲單元中,并統(tǒng)計人數*/\r\n*n=*n+l;\r\n}\r\nelse\r\n{\r\nc[*m]=a[i];/*將低于平均分的學生存入c所指存儲單元中,并統(tǒng)計人數*/\r\n*m=*m+1;\r\n}\r\nreturnav;/*返回平均分*/\r\n}解析:本題中第1個循環(huán)的作用求出所有分數的總和,只有進行了av=av/N后才得到平均值(我們在前面的程序中碰到過類似問題)。第2個循環(huán)的作用是將高于等于平均分的學生存/kb所指存儲單元中,將低于平均分的學生存入c所指存儲單元中。同一結構體變量之間可以互相賦值。

本程序中直接用*n,*m來分別表示b,c的下標,注意開始時要給*n,*m賦0,且使用時不能少*號。因為單獨的n,m是一個指針變量,而我們要用的是它所指向的那個存儲單元中的值。

27.voidfun(int*aint*n){intij=0;for(i=1;i<=1000;i++)/*求1到1000之內能被7或11整除、但不能同時被7和11整除的所有整數并放入數組a中*/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++)/*求1到1000之內能被7或11整除、但不能同時被7和11整除的所有整數,并放入數組a中*/\r\nif((i%7==0||i%11==0)&&i%77!=0)\r\na[j++]=i;\r\n*n=j;/*傳回滿足條件的數的個數*/\r\n}解析:注意本題題目應是找出能被7或11整除但不能同時被7和11整除的所有整數。能同時被7和11整除的整數一定能被77整除,且不能被77整除的數不一定就是能被7或11整除的數。所以可得出程序中的if()。按運算優(yōu)先級可知(i%7==0||i%11==0),注意,兩邊必須要有小括號。

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

29.floatfun(intmintn){inti;doublep=1.0;for(i=1;i<=m;i++)p=p*i;/*求m!*/for(i=1;i<=n;i++)p=p/i;/*求m!/n!*/for(i=1;i<=m-n;i++)p=p/i;/*求m!/(n!(m-n)!)*/returnp;}floatfun(intm,intn)\r\n{\r\ninti;\r\ndoublep=1.0;\r\nfor(i=1;i<=m;i++)p=p*i;/*求m!*/\r\nfor(i=1;i<=n;i++)p=p/i;/*求m!/n!*/\r\nfor(i=1;i<=m-n;i++)p=p/i;/*求m!/(n!(m-n)!)*/\r\nreturnp;\r\n}解析:本題中,欲求P的值,需要先求m,n,m-n的階乘值,可用循環(huán)語句實現(xiàn)。注意階乘值應當是double類型,若定義x,y,z為整型變量,則p=x/(y*z)中的除法為整數除法。

30.voidfun(char*ss){inti;for(i=0;ss[i]!='\0';i++){if(i%2==0&&ss[i]>='a'&&ss[i]<='z')/*將ss所指字符串中所有下標為偶數位置的字母轉換成大寫*/ss[i]==ss[i]-32;}/*大寫字母比相應的小寫字母的ASCII碼值小32*/}voidfun(char*ss)\r\n{inti;\r\nfor(i=0;ss[i]!='\\0';i++){\r\nif(i%2==0&&ss[i]>='a'&&ss[i]<='z')/*將ss所指字符串中所有下標為偶數位置的字母轉換成大寫*/\r\nss[i]==ss[i]-32;}/*大寫字母比相應的小寫字母的ASCII碼值小32*/\r\n}解析:從C語言的學習中我們知道,只要將小寫字母減去32則轉換成大寫字母,將大寫字母加上32則轉成小寫字母,該程序使用if語句實現(xiàn)該功能轉換的。

31.doublefun(doublex[10]){doublexl=0.0s=0.0;inti;for(i=0;i<10;i++)xl=xl+x[i];xl-xl/10;/*求10個數的平均值*/for(i=0;i<l0;i++)s=s+(x[i]-xl)*(x[i]-x1);returnsqrt(s/l0);/*求10個數的方差*/}doublefun(doublex[10])\r\n{\r\ndoublexl=0.0,s=0.0;\r\ninti;\r\nfor(i=0;i<10;i++)\r\nxl=xl+x[i];\r\nxl-xl/10;\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000/*求10個數的平均值*/\r\nfor(i=0;i<l0;i++)\r\ns=s+(x[i]-xl)*(x[i]-x1);\r\nreturnsqrt(s/l0);\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000/*求10個數的方差*/\r\n}解析:又是一道算式表達題,程序中用第1個循環(huán)來完成求10個數的總和,接著再用x1=x1/10來求出平均值。

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

33.intfun(inta[][N)){intij;for(i=0;i<N;i++)for(j=i;j<N;j++)a[i][j]=0;/*將數組右上半三角元素中的值全部置成0*/}intfun(inta[][N))\r\n{\r\ninti,j;\r\nfor(i=0;i<N;i++)\r\nfor(j=i;j<N;j++)\r\na[i][j]=0;/*將數組右上半三角元素中的值全部置成0*/\r\n}解析:本題旨在考查控制數組中右上半三角元素的算法,也就是兩個千篇一律的循環(huán)語句,希望學習者能夠掌握消化。

34.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)

35.D解析:標識符是C語言中用來表示變量名、數組名、函數名、指針名、結構名、聯(lián)合名、枚舉常數名、用戶定義的數據類型名、語句標號等用途的字符序列。標識符由1~32個字符組成,第一個字符必須是字母或下劃線,后面的字符可以是字母、數字或下劃線。標識符不能與C關鍵字相同,并區(qū)分大小寫。選項D)錯誤,因為int是C語言中的關鍵字。

36.B解析:選項B中每次執(zhí)行循環(huán)體都要執(zhí)行p=1,無法保存上次的運算結果,執(zhí)行完while循環(huán)后p=5。

37.D程序定義數組a,使用6個元素對其初始化,接著以寫二進制方式打開文件d.dat。調用fwrite函數將a的6個元素逆序(654321)寫入文件,接著調用rewind函數,將文件指針移動到文件開始位置。調用fread函數讀入3個整數,逐個存放到a開始下標為3的3個位置,即a[3]=6,a[4]=5,a[5]=4,關閉文件。再次調用for循環(huán)輸出a,結果為:1,2,3,6,5,4,。本題答案為D選項。2021年廣東省陽江市全國計算機等級考試C語言程序設計模擬考試(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.樹的度為3,且有9個度為3的節(jié)點,5個度為1的節(jié)點,但沒有度為2的節(jié)點。則該樹中的葉子節(jié)點數為()。

A.18B.33C.19D.32

2.設intx=7,則~x的值是()。

A.-8B.7C.-1D.1

3.使用下列二維圖形變換矩陣A=a*T,,其中,a是行向量(xy1),是齊次坐標形式的二維點。給定的變換矩陣T如下所示,則將產生的變換結果為()A.圖形放大2倍

B.圖形放大2倍,同時沿X、Y坐標軸方向各移動一個單位

C.沿X坐標軸方向各移動2個單位

D.沿X坐標軸放大2倍,同時沿X、Y坐標軸方向各移動一個單位

4.可以判斷一個有向圖中是否含有回路的方法為()。

A.廣度優(yōu)先遍歷B.深度優(yōu)先遍歷C.拓撲排序D.求最短路徑

5.以下對結構體類型變量的定義中,不正確的是()。

A.typedefstruetaa{intn;floatm;}AA;AAtdl;

B.#defineAAstructaaAA{intn;floatm;}tdl;

C.struct{intn;floatm;}aa;structaatdl;

D.struct{intn;floatm;}tdl;

6.下列能正確進行字符串賦值的是()。

A.chars[5]={"ABCDE"};

B.chars[5]={A,B,C,D,E};

C.char*S;S="ABCDE";

D.char*s;printf("%《",s);

7.以下敘述中錯誤的是

A.在程序中凡是以“#”開始的語句行都是預處理命令行

B.預處理命令行的最后不能以分號表示結束

C.#defineMAX是合法的宏定義命令行

D.C程序對預處理命令行的處理是在程序執(zhí)行的過程中進行的

8.

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

A.為了建立一個關系,首先要構造數據的邏輯關系

B.表示關系的二維表中各元組的每一個分量還可以分成若干數據項

C.一個關系的屬性名表稱為關系模式

D.一個關系可以包括多個二維表

10.在下列語句中,其含義為“q是一個函數指針,該指針指向整型數據”的定義語句是()。

A.int**q;B.int(*q);C.int*q;D.int*q;

11.在長度為n的順序存儲的線性表中,刪除第i個元素(1≤i≤n)時,需要從前向后依次前移____個元素。

A.n-iB.n-i+1C.n-i-1D.i

12.

二、2.填空題(12題)13.以下程序用來統(tǒng)計文件中字符的個數。請?zhí)羁铡?/p>

#include“stadio.h”

main()

{FILE*fp;longnum=0L;

if((fp=fopen(“fname.dat”,“r”))==NULL);

{printf(“0penerror\n”);exit(0);}

while(【】)

{fsetc(fp);num++;}

printf(“num=%1d\n”,num-1);

fclose(fp);

}

14.閱讀下面程序段,則執(zhí)行后輸出的結果是【】。

#include"stdio.h"

main()

{charfun(char,int);

chara=′A′;

intb=13;

a=fun(a,b);

putchar(a);}

charfun(chara,intb)

{chark;

k=a+b;

returnk;}

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

16.對數據元素之間的邏輯關系的描述是()。

17.匯編程序和編譯程序翻譯的目標程序需經【】連接成可執(zhí)行的程序。

18.如果調用fopen函數不成功,則函數返回【】;如果調用fclose函數不成功,則函數返回【】。

19.設有下面的程序段:chars[]="china";char*p;p=S;則下列敘述正確的是

20.以下程序實現(xiàn)帶有頭結點的單鏈表的建立,鏈表中每個結點包含數據域data(字符型)和指針域next,所建立鏈表的頭指針由參數phd傳回調用程序。在空格處填入正確內容。

#include<stdio.h>

#include<stdlib,h>

structnode{

chardata;

structnode*next;

};

voidcreatlist(【】)

{

charch;

structnode*s,*r;

*phd=malloc(sizeof(structnode));

r=*phd;

ch=getchar();

while(ch!='@'){

s=malloc(sizeof(structnode));

s->data=ch;

r->next=s;

r=s;

ch=getchar();

};

r->next=【】;

}

main()

{

structnode*head;

head=NULL;

creatlist(【】)

}

21.若定義#definePI3.14159,則執(zhí)行完下列程序后輸出結果是______。

#definePI3.14159;printf("PI=%f",PI);

22.以下程序的輸出結果為【】。

main()

{intk=1;

white(k<=15)

if(++k%3!=2)continue;

elseprintf("%d",k);

printf("\n");

}

23.有以下程序:

prt(int*m,intn)

{inti;

for(i=0;i<n;i++)m[i]++;

}

main()

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

prt(a,5);

for(i=0;i<5;i++)printf("%d,",a[i];

}

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

24.已定義charch=′$′;inti=1,j;,執(zhí)行j!=ch&&i++以后,i的值為【】。

三、3.程序設計題(10題)25.假定輸入的字符串中只包含字母和*號。請編寫函數fun(),它的功能是:除了尾部的,:號之外,將字符串中其他*號全部刪除。形參p已指向字符串中最后一個字母。在編寫函數時,不得使用C語言的字符串函數。

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

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(char*a,char*p)

{

}

main()

chars[81],*t;

printf("Enterastring:\n");

gets(s);

t=s;

while(*t)

t++;

t--;/*指針t指向字符串尾部*/

while(*t=='*')

t--;/*指針t指向最后一個字母*/

fun(s,t);

printf("Thestringafterdeleted:\n");

puts(s);

}

26.學生的記錄由學號和成績組成,N名學生的數據已在主函數中放入結構體數組s中,請編寫函數fun(),該函數的功能是:把高于等于平均分的學生數據放在b所指的數組中,低于平均分的學生數據放在c所指的數組中,高于等于平均分的學生人數通過形參n傳回,低于平均分的學生人數通過形參m傳回,平均分通過函數值返回。

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

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

試題程序:

#include<stdio.h>

#defineN12

typedefstruct

{charnum[10];

doubleS;

}STREC;

doublefun(STREC*a,STREC*b,STREC*C,int*n,int*m)

{

}

main()

{

STRECs[N]={{“GA05”,65},{“GA03”,86},

{“GA02”,76},{“GA04”,95},{“GA01”,93},

{“GA07”,78},{“GA08”,68},{“GA06”,88},

{“GA09”,60},{“GAll”,54},{“GAl2”,56},

{“GAl0”,98}};

STRECh[N],l[N],t;

FILE*out;

inti,j,m,n;

doubleave;

ave=fun(S,h,l,&n,&m);

printf("The%dstudentdatawhichishigherthan%7.3f:\n",n,ave);

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

printf("%s%4.lf\n",h[i].num,

h[i].s);

printf("\n");

printf("The%dStudentdatawhichiSlowerthan%7.3f:\n",m,ave);

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

printf("%s%4.1f\n",l[i].num,l[i].s);

printf("\n");

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

fprintf(out,"%d\n%7.3f\n",n,ave);

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

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

if(h[i].s<h[j].s)

{t=h[i];h[i]=h[i];h[j]=t;}

/*分數從現(xiàn)到低排列*/

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

fprintf(out,“%4.1f\n",h[i].s);

fprintf(out,"%d\n%7.3f\n",m,ave);

for(i=0;i<m-1;i++)

for(j=i+1;i<m;j++)

if(l[i].s<l[j].s)

{t=l[i];l[i]=l[j];l[j]=t;}

/*分數從高到低排列*/

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

fprintf(out,"%4.1f\n",l[i].s);

fclose(out);

}

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

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(int*a,int*n)

{

}

main()

{

intaa[1000],n,k;

clrscr();

fun(aa,&n);

for(k=0;kif((k+1)%10==0)

{printf("%5d",aa[k]);

printf("\n");}/*一行寫9個數*/

else

printf("%5d",aa[k]);

}

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

/*輸出平均分*/

}

29.編寫函數fun(),它的功能是;根據以下公式求p的值,結果由函數值帶回。m與n為兩個正數且要求m>n。

P=m!/n!(m-n)!),例如:m=12,n=8時,運行結果為495.000000。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

floatfun(intm,intn)

{

}

main()

{

clrscr();

printf("p=%f\n",fun(12,8));

}

30.請編寫一個函數voidfun(char*ss),其功能是:將字符串ss中所有下標為偶數位置上的字母轉化為大寫(若該位置上不是字母,則不轉換)。

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

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(char*ss)

{

}

main()

{

chartt[51];

clrscr();

printf("Pleaseenterancharacterstring

within50characters:\n");

gets(tt);

printf("\n\nAfterchanging,thestring\n

%s",tt);

fun(tt);

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

}

31.請編寫函數fun(),其功能是:計算并輸出給定10個數的方差。

其中

例如,給定的10個數為95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0,則輸出為S=11.730729。

注意;部分源程序給出如下.

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

試題程序:

#include<math.h>

#include<stdio.h>

doublefun(doublex[10])

{

}

main()

{

doubles,x[i0]={95.0,89.0,76.0,65.0,

88.0,72.0,85.0,81.0,90.0,56.0};

inti;

printf("\nTheoriginaldatais:\n");

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

printf("%6.1f",x[i]);

printf("\n\n");

s=fun(x);

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

}

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

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

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

}

33.下列程序定義了NXN的二維數組,并在主函數中自動賦值。請編寫函數fun(inta[][N]),該函數的功能是使數組右上半三角元素中的值全部置成0。例如a數組中的值為

a=456

179

326,

則返回主程序后a數組中的值應為

000

100

320

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#defineN5

intfun(inta[][N])

{

}

main()

{

inta[N][N],i,j;

clrscr();

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

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

/*產生—個隨機的5*5矩陣*/

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

{a[i][j]=rand()%10;

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

}

printf(“\n”);

}

fun(a);

printf(“THERESULT\n”);

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

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

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

printf(“\n”);

}

}

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

}

}

四、單選題(0題)35.以下不能定義為用戶標識符的是()。

A.scanfB.VoidC.3comD.int

五、單選題(0題)36.若變量已正確定義,要求程序段完成5!的計算,不能完成此操作的程序段是______。

A.for(i=1,p=1;i<=5;i++)p*=i;

B.for(i=1;i<=5;i++){p=1;p*=i;}

C.i=1;p=1;while(i<=5){p*=i;i++;}

D.i=1;p=1;do{p*=i;i++;}while(i<=5);

六、單選題(0題)37.有下列程序:

程序執(zhí)行后的輸出結果是()。

A.6,5,4,4,5,6,

B.1,2,3,4,5,6,

C.4,5,6,4,5,6,

D.1,2,3,6,5,4,

參考答案

1.C設葉子結點數為〃,則該樹的結點數為n+9+5=n+\n14,根據樹中的結點數=樹中所有結點的度之和+1,得9×3+0×2+5×1+n×0+1=n+14,則n=19。本題選擇C選項。

2.A本題主要考查按位求反運算和C語言正負數的表示,“O”代表正數,“1”代表負數;x=7的二進制為00111,第一個0代表正數,~x為11000,第一個l代表負數,值為8。

3.D

4.C

5.C解析:定義結構體類型的變量有如下幾種方法:

①定義結構體類型的同時,定義結構體類型的變量,如:

stractaa

{…}tdl;

選項B)中將宏名AA用宏體structaa替換后,與該定義形式一樣,因此是正確的。在這一定義形式中,結構體類型名aa是可以省略的,因此,D)項也是正確的。

②先定義結構體類型,然后再定義結構體類型的變量,形式如下:

structaa

{…};

strnctaatdl;

這種定義形式也可演變?yōu)椋合扔妙愋投x語句typedef將該結構體類型定義成一個類型名AA,然后直接用該類型名AA定義一個結構體變量(這時不再需要使用關鍵字struct)。因此選項A)正確。

6.C選項A、B的空間不夠;字符串存儲要有結束符\0,且要占用一個空間,printf用來輸出字符,不能輸入字符串。

7.D解析:在C語言中,凡是以“#”開頭的行都稱為編譯預處理命令行,如#include、#define、#if等,每行的末尾不得用“;”結束,以區(qū)別于C語句、定義和說明語句。選項C中的宏定義為不帶參數的宏命令行,宏名之后可以有替換文本,也可以沒有。編譯預處理是在編譯程序對C源程序進行編譯前執(zhí)行的.當然也在程序執(zhí)行之前執(zhí)行,因此選項D是錯誤的。

8.D

9.C解析:在格式化模型中,要事先根據應用的需要,確定數據之間的邏輯關系,即先對數據進行結構化。在關系模型中,不需要事先構造數據的邏輯關系,只要將數據按照一定的關系存入計算機,也就是建立關系。所以選項A錯誤。對于一個表示關系的二維表,其最基本的要求是表中元組的每一個分量必須是不可分的數據項,即不允許表中再有表。所以,選項B、D說法是錯誤的。一個關系的屬性名表稱為關系模式,也就是二維表的表框架,相當于記錄型。因此,選項C說法正確。

10.B本題考查指針函數。其定義的基本格式為:類型說明符(*函數名)?!邦愋驼f明符”表示返回的指針值指向的數據類型。

11.A

12.D

13.!feof(fP)!feof(fP)解析:統(tǒng)計文件中字符個數的算法可描述如下:首先判斷文件位置指針是否指向了文件尾,如果不是則讀出一個字符,同時字符的個數加1,再判斷文件位置指針是否位于文件尾,如此循環(huán),直到文件位置指針位于文件尾為止。本題首先以讀文件的方式打開了文件“fname.dar”,如果打開成功則把返回的文件型指針賦值給fp,然后通過循環(huán)求文件中的字符數。首先判斷文件位置指針是否位于文件尾,如果不是則循環(huán)讀取字符,每次字符數加1。所以下劃處應填循環(huán)條件,文件位置指針不是指向文件尾,即“!feof(fp)”。

14.NN解析:函數說明語句中的類型名必須與函數返回值的類型一致。本題實現(xiàn)的是在字符'A'的ASCII碼值上加上一個常數,使之變成另一個ASCII碼值,從而輸出字符。

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

16.數據的邏輯結構數據的邏輯結構解析:數據的邏輯結構是對數據元素之間的邏輯關系的描述,它可以用一個數據元素的集合和定義在此集合中的若干關系來表示。

17.裝配程序裝配程序

18.NULL或0EOF或-1NULL或0\r\nEOF或-1解析:如果fopen()函數調用不成功,則返回一個空指針值NULL(0);如果fclose()函數調用不成功,則返回EOF(-1)。所以本題的兩個空應分別填NULL和EOF。

19.D

20.structnode**phdNULL&head

21.PI=3.14159PI=3.14159解析:本題先定義了一個宏名PI,以后在程序中出現(xiàn)PI都用3.14159替代,但是C語言規(guī)定:雙引號中的宏名是不進行替換的。

22.25811142581114解析:本題通過while和if語句,求得出1~15之間與3取模為2的整數,并依次輸出。

溫馨提示

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

評論

0/150

提交評論