2021年河南省新鄉(xiāng)市全國計算機等級考試C語言程序設計模擬考試(含答案)_第1頁
2021年河南省新鄉(xiāng)市全國計算機等級考試C語言程序設計模擬考試(含答案)_第2頁
2021年河南省新鄉(xiāng)市全國計算機等級考試C語言程序設計模擬考試(含答案)_第3頁
2021年河南省新鄉(xiāng)市全國計算機等級考試C語言程序設計模擬考試(含答案)_第4頁
2021年河南省新鄉(xiāng)市全國計算機等級考試C語言程序設計模擬考試(含答案)_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2021年河南省新鄉(xiāng)市全國計算機等級考試C語言程序設計模擬考試(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.下列敘述中正確的是()。

A.在switch語句中不一定使用break語句

B.在switch語句中必須使用default語句

C.break語句必須與switch語句中的case配對使用

D.break語句只能用于switch語句

2.若有定義語句:"inta[4][10],*P,*q[4];"且0≤i<4,則錯誤的賦值是()。

A.D=aB.q[i]=a[i]C.p=a[l]D.P=&a[2][1]

3.有說明語句“inta,b;”,如果輸入111222333,使得a的值為111,b的值為333,則以下正確的語句是()。A.scanf("%3d%*3d%3d",&a,&b);

B.scanf("%*3d%3d%3d",&a,&b);

C.scanf("%3d%3d%*3d",&a,&b);

D.scanf("%3d%*2d%3d",&a,&b);

4.

5.在C++中,一個函數(shù)帶有參數(shù)說明時,則參數(shù)的默認值應該在()中給出。A.函數(shù)定義B.函數(shù)聲明C.函數(shù)定義或聲明D.函數(shù)調用

6.下列合法的聲明語句是()。

A.int_abc=50;

B.doubleint=3+5e2.5;

C.longdo=1L:

D.float3_asd=3e-3;

7.在C語言中,退格符是

A.\nB.\tC.\fD.\b

8.若有定義語句:doublea,*p=&a;,以下敘述中錯誤的是()。

A.定義語句中的*號是一個間址運算符

B.定義語句中的*號只是一個說明符

C.定義語句中的P只能存放double類型變量的地址

D.定義語句中,*p=&n把變量a的地址作為初值賦給指針變量P

9.下列關于棧敘述正確的是A.棧頂元素最先能被刪除B.棧頂元素最后才能被刪除C.棧底元素永遠不能被刪除D.以上三種說法都不對

10.向一個棧頂指針為H的鏈棧中執(zhí)行出棧運算時,需執(zhí)行()。

A.p=H;H=H->link;free(p);

B.H=H->link;free(H);

C.p=H;H->link=H->link->link;free(p);

D.p=H;H=H->link;

11.現(xiàn)有以下結構體說明和變量定義,如圖所示,指針P、q、r分別指定一個鏈表中連續(xù)的3個結點。structnode{hardata;structnode*next;)*P,*q,*r;現(xiàn)要將q和r所指結點交換前后位置,同時要保持鏈表的結構,下列不能完成此操作的語句是()。A.q-:>next=r->next;p--:>next=r;rm:>next=q;

B.q-:>next=r;q->next=r->next;r->next=q;

C.q-:>next=r->next;r->next=q;p->next=r;

D.q-:>next=q;p->next=r;q->next=r->next;

12.棧和隊列的共同特點是()。

A.都是先進先出B.都是先進后出C.只允許在端點處插入和刪除元素D.沒有共同點

二、2.填空題(12題)13.有以下程序:

#include<stdio.h>

main()

{inta[]={1,2,3,4,5,6,7,8,9,10,11,12},*p=a+5,*q=NULL;

*q=*(p+5);

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

}

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

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

#include<stdio.h>

#defineMAX_COUNT4

voidfun()

main()

{intcount;

for(count=1;count<=MAX_COUNT;coun++)fun();

}

voidfun()

{staicinti;

i+=2;

printf(”%d,i);

}

15.以下fun函數(shù)的功能是:累加數(shù)組元素中的值,n為數(shù)組中元素的個數(shù),累加的和值放入x所指的存儲單元中。請?zhí)羁铡?/p>

fun(intb[],intn,int*x)

{intk,r=0;

for(k=0,k<n;k++)r=【】;

【】=r;

}

16.語句:x++;++x;x=1+x;執(zhí)行后都使變量x中的值增1,請寫出一條同一功能的賦值語句______。

17.按照邏輯結構分類,結構可以分為線性結構和非線性結構,棧屬于______。

18.下列程序的運行結果為【】。

enumweekday{sun=7,mon=1,tue,wed,thu,fri,sat};

main()

{enumweekdayworkday,weekend;

inti,a[8];

workday=tue;

weekend=sun;

printf("\ntueday=%dsunday=%d;",workday,week_end);

workday=sun+tue;

week_end=(enumweekday)3;

printf("tueday=%dsunday=%d;",workday,weekend);

a[sun]=sun;

a[mon]=mon;

a[tue]=rue;

a[wed]=wed;

a[thu]=thu;

a[fri]=fri;

a[sat]=sat;

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

}

19.在先左后右的原則下,根據訪問根結點的次序,二叉樹的遍歷可以分為三種;前序遍歷、【】遍歷和后序遍歷。

20.C語言用于結構化程序設計的3種基本結構是______、選擇結構和循環(huán)結構。

21.函數(shù)sstrcmp的功能是對兩個字符串進行比較。當s所指字符串和t所指字符串相等時,返回值為0;當s所指字符串大于t所指字符串時,返回值大于0;當s所指字符串小于t所指字符串時,返回值小于0(功能等同于庫函數(shù)strcmp)。請?zhí)羁铡?/p>

#include<stdio.h>

intsstrcmp(char*s,char*t)

{while(*s&&*t&&*s==【】)

{s++;t++;}

return【】;

}

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

fun(intx,inty,intz)

{z=x*x+y*y;}

main()

{inta=31;

fun(6,3,a)

printf("%d,a)

}

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

main()

{inti,m=0,n=0,k=0;

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

switch(i/10)

{case0:m++;n++;break;

case1:n++;break;

default:k++;n++;

}

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

}

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

#include<string.h>

main()

{printf("%d\n",strlen("IBM\n012\1\\"));}

三、3.程序設計題(10題)25.下列程序定義了N×N的二維數(shù)組,并在主函數(shù)中賦值。請編寫一個函數(shù)fun(),函數(shù)的功能是:求數(shù)組周邊元素的平方和,并作為函數(shù)值返回給主函數(shù)。例如,若數(shù)組a中的值為

01279

1112155

2216111

979102

54141

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

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

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

[試題源程序]

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineN5

intfun(intw[][N])

{

}

main()

{

inta[N][N]=(0,1,2,7,9,1,11,21,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;j++)

{

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

}

printf("\n");

}

s=fun(a);

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

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

}

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

例如,輸入25,則應輸出23571113171923。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

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

{

}

main()

{

intm,n,zz[100];

clrscr();

printf("/nPleaseenteranintegernumberbetween10and100:");

scanf("%d",&n);

fun(n,&m,zz);

printf("\n\nThereare%dprimenumbers

lessthan%d:",m,n);

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

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

}

27.請編寫一個函數(shù)fun(),它的功能是:比較兩個字符串的長度,(不得調用C語言提供的求字符串長度的函數(shù)),函數(shù)返回較短的字符串。若兩個字符串長度相等,則返回第1個字符串。

例如,輸入nanjing<CR>nanchang<CR>(<CR>為回車鍵),函數(shù)將返回nanjing。

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

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

試題程序:

#include<stdio.h>

char*fun(char*S,char*t)

{

}

main()

{

chara[20],b[10],*p,*q;

inti;

printf("Inputlthstring:");

gets(a);

printf("Input2thstring:");

gets(b);

printf(“%s”,fun(a,b));

}

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

例如,若輸入15,5,則應輸出16,18,20,21,22。

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

請勿改動主函數(shù)main和其他函數(shù)中的任何內容,僅在函數(shù)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=0;m<n;m++)

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

printf("\n");

}

29.請編寫函數(shù)fun(),該函數(shù)的功能是:計算n門課程的平均分,計算結果作為函數(shù)值返回。

例如x有5門課程的成績是90.5,72,80,61.5,55,則函數(shù)的值為71.80。

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

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

試題程序:

#include<stdio.h>

floatfun(float*a,intn)

{

}

main()

{

floatscore[30]=(90.5,72,80,61.5,55},

aver;

aver=fun(score,5);

printf("\nAveragescoreis:%5.2f

\n",aver);

}

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

例如,若輸入“abc4EFg”,則應輸出“aBc4EFg”。

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

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

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

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

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

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

}

32.編寫一個函數(shù),從傳入的num個字符中找出最長的一個字符串,并通過形參指針max傳回該串地址(用****作為結束輸入的標志)。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

fun(char(*a)[81],intnum,char*max)

{

}

main()

{

charss[l0][81],*ps;

intn,i=0;

clrscr();

prlntf("輸入若干個字符串");

gets(ss[i]);

puts(ss[i]);

while(!strcmp(ss[i],"****")==0)

/*用****作為結束輸入的標志*/

{

i++;

gets(ss[i]);

puts(ss[i]);

}

n=i;

ps=fun(ss,n,&ps);

print~("\nmax=%s\n",ps);

}

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

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

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

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

}

34.請編寫函數(shù)fun(),對長度為7個字符的字符串,除首、尾字符外,將其余5個字符按ASCII碼值升序排列。

例如:原來的字符串為BdsihAd,則排序后輸出為BAdhisd。

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

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

試題程序:

#include<stdio.h>

#include<ctype.h>

#include<conio.h>

intfun(char*s,intnum)

{

}

main()

{

chars[10];

clrscr();

printf("輸入7個字符的字符串:");

gets(s);

fun(s,7);

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

}

四、單選題(0題)35.設x、y、z、t均為int型變量,則執(zhí)行以下語句后,t的值是()x=y(tǒng)=z=l;t=++x||++y&&++z;

A.不定值B.2C.1D.0

五、單選題(0題)36.下列敘述中錯誤的是()。

A.C程序可以由多個程序文件組成

B.—個C語言程序只能實現(xiàn)一種算法

C.C程序可以由一個或多個函數(shù)組成

D.—個C語言函數(shù)可以單獨作為一個C語言程序文件存在

六、單選題(0題)37.有以下結構體說明、變量定義和賦值語句:structSTD{charname[10];intage;charsex;}s[5],*ps;ps=&s[0];則下列scanf函數(shù)調用語句有錯誤的是()。

A.scanf(“%s”,s[0].name);

B.scanf(“%d”,&s[0].age);

C.scanf(“%c”,&(ps->sex));

D.scanf(“%d”,ps->age);

參考答案

1.Adefault語句在switch語句中可以省略,所以B選項錯誤;switch語句中并非每個case后都需要使用break語句,所以C選項錯誤;break語句還可以用于for等循環(huán)結構中,所以D選項錯誤。故本題答案為A選項。

2.A數(shù)組名是一個存放一個數(shù)組首地址的值,是一個地址常量。而p=a不是合法的,因為p和a的基本類型不同。

3.A根據題意,要使a的值為111,b的值為333,必須在讀入時指定a的讀入寬度為3,b的讀入寬度為3,且a和b的控制字符之間必須額外增加%*控制符,用于跳過中間的3位輸入數(shù)字,選項A正確。本題答案為A選項。

4.D

5.CC程序中函數(shù)可以在說明或定義時給一個或多個參數(shù)指定默認值,但是不能在函數(shù)說明定義時同時指定默認參數(shù),默認參數(shù)值應該在函數(shù)名第一次出現(xiàn)時指定。

6.A解析:C語言規(guī)定,標識符是由字母、數(shù)字或下劃線組成,并且它的第一個字符必須是字母或者下劃線。另外C語言規(guī)定了一些專用的標識符,它們有著固定的含義,不能更改。int就是表達變量類型的標識符,它不能再用做變量名和函數(shù)名,所以選項B)不正確。do是C語言的一個關鍵字,也不能再用做變量名和函數(shù)名,所以選項C)不正確。

7.D解析:在C++語言中退格符表示為\\b退格。注意:其他轉義字符的意義:\\n表示回車換行,\\t表示橫向跳到下一制表位置,\\v表示豎向跳格,\\r表示回車,\\f表示走紙換頁,\\\\表示反斜線符,\\a表示鳴鈴,\\ddd1~3位表示八進制數(shù)所代表的字符,\\xhh1~2位表示十六進制數(shù)所代表的字符。

8.Cdoublea,*p=&a語句的意思是將a的值存放到指針變量P中,P是指針可以隨意指向任何地址,所以答案C錯誤。

9.A棧是限定只在一端進行插入與刪除的線性表,按照“先進后出”或“后進先出”的原則組織數(shù)據。棧頂元素總是最后被插入的元素,從而也是最先能被刪除的元素;棧底元素總是最先被插入的元素,從而也是最后才能被刪除的元素。

10.A

11.D由題目中線性鏈表的定義可知,要將q和r所指的結點交換前后位置,只要使q指向r的后一個結點,P指向r結點,r指向q結點即可。而在選項D中,r->next=q,這時r指向的節(jié)點為q;p->next=r,這時P指向的節(jié)點為r;q->next:r->next,因為r節(jié)點已經指向q,所以執(zhí)行這個語句后q又指向q,所以選項D不正確。

12.C解析:考查棧和隊列概念的掌握。棧和隊列都是一種特殊的操作受限的線性表,只允許在端點處進行插入和刪除。二者的區(qū)別是:棧只允許在表的一端進行插入或刪除操作,是一種'后進先出'的線性表;而隊列只允許在表的一端進行插入操作,在另一端進行刪除操作,是一種'先進先出'的線性表。模塊之間的耦合程度反映了模塊的獨立性,也反映了系統(tǒng)分解后的復雜程度。按照耦合程度從弱到強,可以將其分成5級,分別是:數(shù)據耦合、同構耦合、控制耦合、公用耦合和內容耦合。選項C),沒有這種耦合方式。

13.運行后報錯運行后報錯解析:指針q沒有指向確定的存儲單元,故不能賦值。

14.2468(若字符間有空格扣1分)2468(若字符間有空格扣1分)

15.r+b[k]*x

16.x+=1x+=1解析:本題考查“++”,“--”運算符?!?+”、“--”只能作用于變量,不能用于表達式或常量;前綴形式是在使用變量之前先將其值增1或減1,后綴形式是先使用變量原來的值,使用完后再使其增1或減1。

17.線性結構線性結構解析:數(shù)據的邏輯結構是指數(shù)據元素之間的邏輯關系,分為線性結構和非線性結構。常見的線性結構有線性表、棧和隊列等,常見的非線性結構有樹、二叉樹等。

18.tueday=2sunday=7;tueday=9sunday=3;1234567

19.中序中序解析:在先左后右的原則下,根據訪問根結點的次序,二叉樹的遍歷可以分為三種:前序遍歷、中序遍歷和后序遍歷.前序遍歷是指在訪問根結點、遍歷左子樹與遍歷右子樹這三者中,首先訪問根結點,然后遍歷左子樹,最后遍歷右子樹;并且遍歷左、右子樹時,仍然先訪問根結點,然后遍歷左子樹,最后遍歷右子樹。中序遍歷指在訪問根結點、遍歷左了樹與遍歷右子樹這三者中,首先遍歷左子樹,然后訪問根結點,最后遍歷右子樹:并且遍歷左、右子樹時,仍然先遍歷左子樹,然后訪問根結點,最后遍歷右子樹。后序遍歷指在訪問根結點、遍歷左子樹與遍歷右子樹這三者中,首先遍歷右子樹,然后訪問根結點,最后遍歷左子樹;并且遍歷左、右子樹時,仍然光遍歷右子樹,然后訪問根結點,最后遍歷左子樹。

20.順序結構順序結構解析:結構化程序有3種摹本結構,即順序結構、選擇結構(包括if語句和switch語句)和循環(huán)結構(包括for語句、while語句、do…while語句)。

21.*t或t[0]*s-*t或*s-t[0]或s[0]-*t或s[0]-t[0]*t或t[0]\r\n*s-*t或*s-t[0]或s[0]-*t或s[0]-t[0]解析:函數(shù)sstrcmp()有兩個字符型指針變量,用來指向兩個字符串。比較兩個字符串的大小方法是:從第一個字符開始依次向后比較,若對應的字符相等則接著比較下一個字符,一直到兩個字符串中對應字符不等,或者有一個為\\0,此時字符的ASCII碼大的字符串就大。故循環(huán)條件是*s和*t不為\\0,且*s和*t相同,第一處應填“*t”或其他等價形式。根據題意可知第二處應填*s-*t或其等價形式。

22.3131解析:在函數(shù)調用時,形參值和改變,不會改變實參的值。

23.130130解析:本題主函數(shù)中用了一個for循環(huán),循環(huán)了3次:當i=9時,i/10=0,執(zhí)行switch語句中case0分支,m和n的值各增1,變?yōu)?和1,然后遇到break語句,退出switch語句;當i=10和11時,i/10都等于1,執(zhí)行switch語句中的case1分支,兩次使n增1,變?yōu)?,退出switch語句。故該空格處應該填130。

24.99解析:本題要輸出的結果是字符串'IBM\\n012\\1\\\\'的長度,'IBM'是3個字符,\'\\n\'是1個字符,'012'又是3個字符,最后的\'\\1\'和\'\\\\\'都是1個字符。所以最終字符串的長度應該是3+1+3+1+1=9。故本題應該填9。

25.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){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)\r\n{\r\ns=s+w[i][j]*w[i][j];\r\n}\r\nreturns;\r\n}

26.voidfun(intmint*kintXX[]){intijtn=0;for(i=2;i<m;i++)/*找出大于1小于整數(shù)m的素數(shù)*/{t=l;for(j=2;j<i;j++)if(i%j==0){t=0;break;}if(t==1)xx[n++]=i;}*k=n;/*返回素數(shù)的個數(shù)*/}voidfun(intm,int*k,intXX[])\r\n{\r\ninti,j,t,n=0;\r\nfor(i=2;i<m;i++)/*找出大于1小于整數(shù)m的素數(shù)*/\r\n{\r\nt=l;\r\nfor(j=2;j<i;j++)\r\nif(i%j==0)\r\n{\r\nt=0;\r\nbreak;\r\n}\r\nif(t==1)\r\nxx[n++]=i;\r\n}\r\n*k=n;/*返回素數(shù)的個數(shù)*/\r\n}解析:這道題是考查一個數(shù)是不是素數(shù),只要掌握了判斷素數(shù)的方法,問題便能順利解決,請以此題為例,掌握判斷素數(shù)的方法。

27.char*fun(char*Schar*t){intij;for(i=0s[i]!=‘\0’;i++);/*求字符串的長度*/for(j=0;t[j]!=‘\0’;j++);/*比較兩個字符串的長度*/returns;/*函數(shù)返回較短的字符串若兩個字符串長度相等則返回第1個字符串*/elsereturnt;}char*fun(char*S,char*t)\r\n{\r\ninti,j;\r\nfor(i=0,s[i]!=‘\\0’;i++);/*求字符串的長度*/\r\nfor(j=0;t[j]!=‘\\0’;j++);/*比較兩個字符串的長度*/\r\nreturns;/*函數(shù)返回較短的字符串,若兩個字符串長度相等,則返回第1個字符串*/\r\nelse\r\nreturnt;\r\n}解析:本題中,第1個for循環(huán)的作用是求出s的字符個數(shù)i,第2個for循環(huán)的作用是求出t的字符個數(shù)j,因為任何循環(huán)都要控制—條語句,所以在每—個for循環(huán)條件后面必須要有—個分號。

本題也可用如下技巧:

#include<string.h>/*一定要注意在最前面加#include<string.h>*/

char*fun(char*s,char*t)

{

if(strlen(S)>=strten(t)

returns;

elsereturnt;

}

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

29.floatfun(float*aintn){floatav=0.0;inti;for(i=0;iav=av+a[i];/*求分數(shù)的總和*/return(av/n);/*返回平均值*/}floatfun(float*a,intn)\r\n{\r\nfloatav=0.0;\r\ninti;\r\nfor(i=0;iav=av+a[i];/*求分數(shù)的總和*/\r\nreturn(av/n);/*返回平均值*/\r\n}解析:我們先按數(shù)學的思路來計算平均分:總分除以人數(shù)即可得到平均分,其實用C語言的指針來實現(xiàn)該問題,也不難。當指針變量指向一個數(shù)組時,用該指針變量引用數(shù)組元素時,引用方式與數(shù)組的引用方式相同。如本題中a指向了score,所以通過a引用score中的元素時可以用下標法,也可以用指針運算法,a[i]和*(a+i)具有相同的作用。下標運算實際上是從當前地址開始往后取出地址中的第幾個元素,當前地址下標為0。例如:若有intcc[10],*P=cc+5;,即p指向了cc的第5號元素,則p[0]的作用是取出從當前地址(即p所指地址)開始的第0號元素,它與cc[5]相同:p[3]的作用是取出從當前地址(即p所指地址)開始往后的第3號元素,它與cc[8]相同:p[-2]的作用是取出從當前地址開始往前的第2號元素,它與cc[3]相同,但不提倡使用“負”的F標。

30.

解析:該程序功能是將字符串中所有下標為奇數(shù)位置上的字母轉換為大寫。其中,同一英文字母的大寫和小寫的ASCII碼值相差32,因此,要將小寫字母轉換為大寫字母,只要將其對應的ASCII碼值減去32即可。

31.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以后的所有*號保留下來。

32.fun(char(*a)[81]intnumchar*max){inti=0;max=a[0];for(i=0;i<num;i++)/*找出最長的一個字符串*/if(strlen(max)<strlen(a[i]))max=a[i];returnmax;/*傳回最長字符串地址*/}fun(char(*a)[81],intnum,char*max)\r\n{\r\ninti=0;\r\nmax=a[0];\r\nfor(i=0;i<num;i++)/*找出最長的一個字符串*/\r\nif(strlen(max)<strlen(a[i]))\r\nmax=a[i];\r\nreturnmax;/*傳回最長字符串地址*/\r\n}解析:做本題之前,我們先應該明白ss是一個指向一維數(shù)組的指針變量,max是指向指針變量的指針變量。所以引用時要注意加上*。我們不可能只用max,因為ss[0]是一個數(shù)組地址而不是一個指針的地址。

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

34.intfun(char*sintnum){chart;intij;for(i=1;i<num-2;i++)/*下標值從1開始用循環(huán)依次取得字符串中的字符*/for(j=i+1;j<num-1;j++)/*將字符與其后的每個字符比較*/if(s[i]>s[j])/*如果后面字符的ASCII碼值小于該字符的ASCII碼值*/{t=s[i];/*則交換這兩個字符*/s[i]=s[j];s[j]=t;}}intfun(char*s,intnum)\r\n{chart;\r\ninti,j;\r\nfor(i=1;i<num-2;i++)/*下標值從1開始,用循環(huán)依次取得字符串中的字符*/\r\nfor(j=i+1;j<num-1;j++)/*將字符與其后的每個字符比較*/\r\nif(s[i]>s[j])/*如果后面字符的ASCII碼值小于該字符的ASCII碼值*/\r\n{t=s[i];/*則交換這兩個字符*/\r\ns[i]=s[j];\r\ns[j]=t;\r\n}\r\n}解析:本題考查利用循環(huán)來控制數(shù)組元素的操作,首尾元素除外,因此,數(shù)組的下標值要從1開始,用循環(huán)變量i來依次取得數(shù)組中的元素,用數(shù)組中的元素s[i]和s[j]進行比較,如果后一個元素的ASCII碼值小于前一個元素的ASCII碼值,則交換這兩個數(shù)組元素的值。

35.C

36.B在一個C語言程序中可以實現(xiàn)多種算法,所以B選項錯誤。故本題答案為B選項。

37.D題目中需要輸入一個變量,scanf要求輸入參數(shù)為指針,而D選項中“ps->age”為變量,不是指針。故本題答案為D選項。2021年河南省新鄉(xiāng)市全國計算機等級考試C語言程序設計模擬考試(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.下列敘述中正確的是()。

A.在switch語句中不一定使用break語句

B.在switch語句中必須使用default語句

C.break語句必須與switch語句中的case配對使用

D.break語句只能用于switch語句

2.若有定義語句:"inta[4][10],*P,*q[4];"且0≤i<4,則錯誤的賦值是()。

A.D=aB.q[i]=a[i]C.p=a[l]D.P=&a[2][1]

3.有說明語句“inta,b;”,如果輸入111222333,使得a的值為111,b的值為333,則以下正確的語句是()。A.scanf("%3d%*3d%3d",&a,&b);

B.scanf("%*3d%3d%3d",&a,&b);

C.scanf("%3d%3d%*3d",&a,&b);

D.scanf("%3d%*2d%3d",&a,&b);

4.

5.在C++中,一個函數(shù)帶有參數(shù)說明時,則參數(shù)的默認值應該在()中給出。A.函數(shù)定義B.函數(shù)聲明C.函數(shù)定義或聲明D.函數(shù)調用

6.下列合法的聲明語句是()。

A.int_abc=50;

B.doubleint=3+5e2.5;

C.longdo=1L:

D.float3_asd=3e-3;

7.在C語言中,退格符是

A.\nB.\tC.\fD.\b

8.若有定義語句:doublea,*p=&a;,以下敘述中錯誤的是()。

A.定義語句中的*號是一個間址運算符

B.定義語句中的*號只是一個說明符

C.定義語句中的P只能存放double類型變量的地址

D.定義語句中,*p=&n把變量a的地址作為初值賦給指針變量P

9.下列關于棧敘述正確的是A.棧頂元素最先能被刪除B.棧頂元素最后才能被刪除C.棧底元素永遠不能被刪除D.以上三種說法都不對

10.向一個棧頂指針為H的鏈棧中執(zhí)行出棧運算時,需執(zhí)行()。

A.p=H;H=H->link;free(p);

B.H=H->link;free(H);

C.p=H;H->link=H->link->link;free(p);

D.p=H;H=H->link;

11.現(xiàn)有以下結構體說明和變量定義,如圖所示,指針P、q、r分別指定一個鏈表中連續(xù)的3個結點。structnode{hardata;structnode*next;)*P,*q,*r;現(xiàn)要將q和r所指結點交換前后位置,同時要保持鏈表的結構,下列不能完成此操作的語句是()。A.q-:>next=r->next;p--:>next=r;rm:>next=q;

B.q-:>next=r;q->next=r->next;r->next=q;

C.q-:>next=r->next;r->next=q;p->next=r;

D.q-:>next=q;p->next=r;q->next=r->next;

12.棧和隊列的共同特點是()。

A.都是先進先出B.都是先進后出C.只允許在端點處插入和刪除元素D.沒有共同點

二、2.填空題(12題)13.有以下程序:

#include<stdio.h>

main()

{inta[]={1,2,3,4,5,6,7,8,9,10,11,12},*p=a+5,*q=NULL;

*q=*(p+5);

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

}

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

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

#include<stdio.h>

#defineMAX_COUNT4

voidfun()

main()

{intcount;

for(count=1;count<=MAX_COUNT;coun++)fun();

}

voidfun()

{staicinti;

i+=2;

printf(”%d,i);

}

15.以下fun函數(shù)的功能是:累加數(shù)組元素中的值,n為數(shù)組中元素的個數(shù),累加的和值放入x所指的存儲單元中。請?zhí)羁铡?/p>

fun(intb[],intn,int*x)

{intk,r=0;

for(k=0,k<n;k++)r=【】;

【】=r;

}

16.語句:x++;++x;x=1+x;執(zhí)行后都使變量x中的值增1,請寫出一條同一功能的賦值語句______。

17.按照邏輯結構分類,結構可以分為線性結構和非線性結構,棧屬于______。

18.下列程序的運行結果為【】。

enumweekday{sun=7,mon=1,tue,wed,thu,fri,sat};

main()

{enumweekdayworkday,weekend;

inti,a[8];

workday=tue;

weekend=sun;

printf("\ntueday=%dsunday=%d;",workday,week_end);

workday=sun+tue;

week_end=(enumweekday)3;

printf("tueday=%dsunday=%d;",workday,weekend);

a[sun]=sun;

a[mon]=mon;

a[tue]=rue;

a[wed]=wed;

a[thu]=thu;

a[fri]=fri;

a[sat]=sat;

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

}

19.在先左后右的原則下,根據訪問根結點的次序,二叉樹的遍歷可以分為三種;前序遍歷、【】遍歷和后序遍歷。

20.C語言用于結構化程序設計的3種基本結構是______、選擇結構和循環(huán)結構。

21.函數(shù)sstrcmp的功能是對兩個字符串進行比較。當s所指字符串和t所指字符串相等時,返回值為0;當s所指字符串大于t所指字符串時,返回值大于0;當s所指字符串小于t所指字符串時,返回值小于0(功能等同于庫函數(shù)strcmp)。請?zhí)羁铡?/p>

#include<stdio.h>

intsstrcmp(char*s,char*t)

{while(*s&&*t&&*s==【】)

{s++;t++;}

return【】;

}

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

fun(intx,inty,intz)

{z=x*x+y*y;}

main()

{inta=31;

fun(6,3,a)

printf("%d,a)

}

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

main()

{inti,m=0,n=0,k=0;

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

switch(i/10)

{case0:m++;n++;break;

case1:n++;break;

default:k++;n++;

}

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

}

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

#include<string.h>

main()

{printf("%d\n",strlen("IBM\n012\1\\"));}

三、3.程序設計題(10題)25.下列程序定義了N×N的二維數(shù)組,并在主函數(shù)中賦值。請編寫一個函數(shù)fun(),函數(shù)的功能是:求數(shù)組周邊元素的平方和,并作為函數(shù)值返回給主函數(shù)。例如,若數(shù)組a中的值為

01279

1112155

2216111

979102

54141

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

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

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

[試題源程序]

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineN5

intfun(intw[][N])

{

}

main()

{

inta[N][N]=(0,1,2,7,9,1,11,21,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;j++)

{

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

}

printf("\n");

}

s=fun(a);

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

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

}

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

例如,輸入25,則應輸出23571113171923。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

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

{

}

main()

{

intm,n,zz[100];

clrscr();

printf("/nPleaseenteranintegernumberbetween10and100:");

scanf("%d",&n);

fun(n,&m,zz);

printf("\n\nThereare%dprimenumbers

lessthan%d:",m,n);

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

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

}

27.請編寫一個函數(shù)fun(),它的功能是:比較兩個字符串的長度,(不得調用C語言提供的求字符串長度的函數(shù)),函數(shù)返回較短的字符串。若兩個字符串長度相等,則返回第1個字符串。

例如,輸入nanjing<CR>nanchang<CR>(<CR>為回車鍵),函數(shù)將返回nanjing。

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

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

試題程序:

#include<stdio.h>

char*fun(char*S,char*t)

{

}

main()

{

chara[20],b[10],*p,*q;

inti;

printf("Inputlthstring:");

gets(a);

printf("Input2thstring:");

gets(b);

printf(“%s”,fun(a,b));

}

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

例如,若輸入15,5,則應輸出16,18,20,21,22。

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

請勿改動主函數(shù)main和其他函數(shù)中的任何內容,僅在函數(shù)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=0;m<n;m++)

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

printf("\n");

}

29.請編寫函數(shù)fun(),該函數(shù)的功能是:計算n門課程的平均分,計算結果作為函數(shù)值返回。

例如x有5門課程的成績是90.5,72,80,61.5,55,則函數(shù)的值為71.80。

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

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

試題程序:

#include<stdio.h>

floatfun(float*a,intn)

{

}

main()

{

floatscore[30]=(90.5,72,80,61.5,55},

aver;

aver=fun(score,5);

printf("\nAveragescoreis:%5.2f

\n",aver);

}

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

例如,若輸入“abc4EFg”,則應輸出“aBc4EFg”。

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

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

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

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

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

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

}

32.編寫一個函數(shù),從傳入的num個字符中找出最長的一個字符串,并通過形參指針max傳回該串地址(用****作為結束輸入的標志)。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

fun(char(*a)[81],intnum,char*max)

{

}

main()

{

charss[l0][81],*ps;

intn,i=0;

clrscr();

prlntf("輸入若干個字符串");

gets(ss[i]);

puts(ss[i]);

while(!strcmp(ss[i],"****")==0)

/*用****作為結束輸入的標志*/

{

i++;

gets(ss[i]);

puts(ss[i]);

}

n=i;

ps=fun(ss,n,&ps);

print~("\nmax=%s\n",ps);

}

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

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

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

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

}

34.請編寫函數(shù)fun(),對長度為7個字符的字符串,除首、尾字符外,將其余5個字符按ASCII碼值升序排列。

例如:原來的字符串為BdsihAd,則排序后輸出為BAdhisd。

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

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

試題程序:

#include<stdio.h>

#include<ctype.h>

#include<conio.h>

intfun(char*s,intnum)

{

}

main()

{

chars[10];

clrscr();

printf("輸入7個字符的字符串:");

gets(s);

fun(s,7);

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

}

四、單選題(0題)35.設x、y、z、t均為int型變量,則執(zhí)行以下語句后,t的值是()x=y(tǒng)=z=l;t=++x||++y&&++z;

A.不定值B.2C.1D.0

五、單選題(0題)36.下列敘述中錯誤的是()。

A.C程序可以由多個程序文件組成

B.—個C語言程序只能實現(xiàn)一種算法

C.C程序可以由一個或多個函數(shù)組成

D.—個C語言函數(shù)可以單獨作為一個C語言程序文件存在

六、單選題(0題)37.有以下結構體說明、變量定義和賦值語句:structSTD{charname[10];intage;charsex;}s[5],*ps;ps=&s[0];則下列scanf函數(shù)調用語句有錯誤的是()。

A.scanf(“%s”,s[0].name);

B.scanf(“%d”,&s[0].age);

C.scanf(“%c”,&(ps->sex));

D.scanf(“%d”,ps->age);

參考答案

1.Adefault語句在switch語句中可以省略,所以B選項錯誤;switch語句中并非每個case后都需要使用break語句,所以C選項錯誤;break語句還可以用于for等循環(huán)結構中,所以D選項錯誤。故本題答案為A選項。

2.A數(shù)組名是一個存放一個數(shù)組首地址的值,是一個地址常量。而p=a不是合法的,因為p和a的基本類型不同。

3.A根據題意,要使a的值為111,b的值為333,必須在讀入時指定a的讀入寬度為3,b的讀入寬度為3,且a和b的控制字符之間必須額外增加%*控制符,用于跳過中間的3位輸入數(shù)字,選項A正確。本題答案為A選項。

4.D

5.CC程序中函數(shù)可以在說明或定義時給一個或多個參數(shù)指定默認值,但是不能在函數(shù)說明定義時同時指定默認參數(shù),默認參數(shù)值應該在函數(shù)名第一次出現(xiàn)時指定。

6.A解析:C語言規(guī)定,標識符是由字母、數(shù)字或下劃線組成,并且它的第一個字符必須是字母或者下劃線。另外C語言規(guī)定了一些專用的標識符,它們有著固定的含義,不能更改。int就是表達變量類型的標識符,它不能再用做變量名和函數(shù)名,所以選項B)不正確。do是C語言的一個關鍵字,也不能再用做變量名和函數(shù)名,所以選項C)不正確。

7.D解析:在C++語言中退格符表示為\\b退格。注意:其他轉義字符的意義:\\n表示回車換行,\\t表示橫向跳到下一制表位置,\\v表示豎向跳格,\\r表示回車,\\f表示走紙換頁,\\\\表示反斜線符,\\a表示鳴鈴,\\ddd1~3位表示八進制數(shù)所代表的字符,\\xhh1~2位表示十六進制數(shù)所代表的字符。

8.Cdoublea,*p=&a語句的意思是將a的值存放到指針變量P中,P是指針可以隨意指向任何地址,所以答案C錯誤。

9.A棧是限定只在一端進行插入與刪除的線性表,按照“先進后出”或“后進先出”的原則組織數(shù)據。棧頂元素總是最后被插入的元素,從而也是最先能被刪除的元素;棧底元素總是最先被插入的元素,從而也是最后才能被刪除的元素。

10.A

11.D由題目中線性鏈表的定義可知,要將q和r所指的結點交換前后位置,只要使q指向r的后一個結點,P指向r結點,r指向q結點即可。而在選項D中,r->next=q,這時r指向的節(jié)點為q;p->next=r,這時P指向的節(jié)點為r;q->next:r->next,因為r節(jié)點已經指向q,所以執(zhí)行這個語句后q又指向q,所以選項D不正確。

12.C解析:考查棧和隊列概念的掌握。棧和隊列都是一種特殊的操作受限的線性表,只允許在端點處進行插入和刪除。二者的區(qū)別是:棧只允許在表的一端進行插入或刪除操作,是一種'后進先出'的線性表;而隊列只允許在表的一端進行插入操作,在另一端進行刪除操作,是一種'先進先出'的線性表。模塊之間的耦合程度反映了模塊的獨立性,也反映了系統(tǒng)分解后的復雜程度。按照耦合程度從弱到強,可以將其分成5級,分別是:數(shù)據耦合、同構耦合、控制耦合、公用耦合和內容耦合。選項C),沒有這種耦合方式。

13.運行后報錯運行后報錯解析:指針q沒有指向確定的存儲單元,故不能賦值。

14.2468(若字符間有空格扣1分)2468(若字符間有空格扣1分)

15.r+b[k]*x

16.x+=1x+=1解析:本題考查“++”,“--”運算符?!?+”、“--”只能作用于變量,不能用于表達式或常量;前綴形式是在使用變量之前先將其值增1或減1,后綴形式是先使用變量原來的值,使用完后再使其增1或減1。

17.線性結構線性結構解析:數(shù)據的邏輯結構是指數(shù)據元素之間的邏輯關系,分為線性結構和非線性結構。常見的線性結構有線性表、棧和隊列等,常見的非線性結構有樹、二叉樹等。

18.tueday=2sunday=7;tueday=9sunday=3;1234567

19.中序中序解析:在先左后右的原則下,根據訪問根結點的次序,二叉樹的遍歷可以分為三種:前序遍歷、中序遍歷和后序遍歷.前序遍歷是指在訪問根結點、遍歷左子樹與遍歷右子樹這三者中,首先訪問根結點,然后遍歷左子樹,最后遍歷右子樹;并且遍歷左、右子樹時,仍然先訪問根結點,然后遍歷左子樹,最后遍歷右子樹。中序遍歷指在訪問根結點、遍歷左了樹與遍歷右子樹這三者中,首先遍歷左子樹,然后訪問根結點,最后遍歷右子樹:并且遍歷左、右子樹時,仍然先遍歷左子樹,然后訪問根結點,最后遍歷右子樹。后序遍歷指在訪問根結點、遍歷左子樹與遍歷右子樹這三者中,首先遍歷右子樹,然后訪問根結點,最后遍歷左子樹;并且遍歷左、右子樹時,仍然光遍歷右子樹,然后訪問根結點,最后遍歷左子樹。

20.順序結構順序結構解析:結構化程序有3種摹本結構,即順序結構、選擇結構(包括if語句和switch語句)和循環(huán)結構(包括for語句、while語句、do…while語句)。

21.*t或t[0]*s-*t或*s-t[0]或s[0]-*t或s[0]-t[0]*t或t[0]\r\n*s-*t或*s-t[0]或s[0]-*t或s[0]-t[0]解析:函數(shù)sstrcmp()有兩個字符型指針變量,用來指向兩個字符串。比較兩個字符串的大小方法是:從第一個字符開始依次向后比較,若對應的字符相等則接著比較下一個字符,一直到兩個字符串中對應字符不等,或者有一個為\\0,此時字符的ASCII碼大的字符串就大。故循環(huán)條件是*s和*t不為\\0,且*s和*t相同,第一處應填“*t”或其他等價形式。根據題意可知第二處應填*s-*t或其等價形式。

22.3131解析:在函數(shù)調用時,形參值和改變,不會改變實參的值。

23.130130解析:本題主函數(shù)中用了一個for循環(huán),循環(huán)了3次:當i=9時,i/10=0,執(zhí)行switch語句中case0分支,m和n的值各增1,變?yōu)?和1,然后遇到break語句,退出switch語句;當i=10和11時,i/10都等于1,執(zhí)行switch語句中的case1分支,兩次使n增1,變?yōu)?,退出switch語句。故該空格處應該填130。

24.99解析:本題要輸出的結果是字符串'IBM\\n012\\1\\\\'的長度,'IBM'是3個字符,\'\\n\'是1個字符,'012'又是3個字符,最后的\'\\1\'和\'\\\\\'都是1個字符。所以最終字符串的長度應該是3+1+3+1+1=9。故本題應該填9。

25.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){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)\r\n{\r\ns=s+w[i][j]*w[i][j];\r\n}\r\nreturns;\r\n}

26.voidfun(intmint*kintXX[]){intijtn=0;for(i=2;i<m;i++)/*找出大于1小于整數(shù)m的素數(shù)*/{t=l;for(j=2;j<i;j++)if(i%j==0){t=0;break;}if(t==1)xx[n++]=i;}*k=n;/*返回素數(shù)的個數(shù)*/}voidfun(intm,int*k,intXX[])\r\n{\r\ninti,j,t,n=0;\r\nfor(i=2;i<m;i++)/*找出大于1小于整數(shù)m的素數(shù)*/\r\n{\r\nt=l;\r\nfor(j=2;j<i;j++)\r\nif(i%j==0)\r\n{\r\nt=0;\r\nbreak;\r\n}\r\nif(t==1)\r\nxx[n++]=i;\r\n}\r\n*k=n;/*返回素數(shù)的個數(shù)*/\r\n}解析:這道題是考查一個數(shù)是不是素數(shù),只要掌握了判斷素數(shù)的方法,問題便能順利解決,請以此題為例,掌握判斷素數(shù)的方法。

27.char*fun(char*Schar*t){intij;for(i=0s[i]!=‘\0’;i++);/*求字符串的長度*/for(j=0;t[j]!=‘\0’;j++);/*比較兩個字符串的長度*/returns;/*函數(shù)返回較短的字符串若兩個字符串長度相等則返回第1個字符串*/elsereturnt;}char*fun(char*S,char*t)\r\n{\r\ninti,j;\r\nfor(i=0,s[i]!=‘\\0’;i++);/*求字符串的長度*/\r\nfor(j=0;t[j]!=‘\\0’;j++);/

溫馨提示

  • 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

提交評論