2023年河南省安陽市全國計算機等級考試C語言程序設計真題(含答案)_第1頁
2023年河南省安陽市全國計算機等級考試C語言程序設計真題(含答案)_第2頁
2023年河南省安陽市全國計算機等級考試C語言程序設計真題(含答案)_第3頁
2023年河南省安陽市全國計算機等級考試C語言程序設計真題(含答案)_第4頁
2023年河南省安陽市全國計算機等級考試C語言程序設計真題(含答案)_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2023年河南省安陽市全國計算機等級考試C語言程序設計真題(含答案)學校:________班級:________姓名:________考號:________

一、2.填空題(10題)1.語句"int(*ptr)();"的含義是______是指向函數的指針,該函數返回一個int型數據。

2.開發(fā)軟件所需要的高成本和產品的低質量之間有著尖銳的矛盾,這種現象被人們稱之為【】。

3.若有定義inta=10,b=9,c=8;,接著順序執(zhí)行下列語句,變量b中的值是【】。

c=(a-=(b-5));

c=(a%11)+(b=3);

4.算法執(zhí)行過程中所需要的基本運算次數稱為算法的______。

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

6.以下函數的功能是【】。

floatav(a,n)

floata[];

intn;

{inti;floats;

for(i=0,s=0;i<n;i++)s=s+a[i];

returns/n;}

7.數據結構分為邏輯結構與存儲結構,線性鏈表屬于【】。

8.以下程序段打開文件后,先利用fseek函數將文件位置指針定位在文件末尾,然后調用刪函數返回當前文件位置指針的具體位置,從而確定文件長度,請?zhí)羁铡?/p>

FILE*myf;longfl;

myf=【】("test.t","rb");

fseek(myf,(),SEEK_END);fl+ftell(myf);

fclose(myf);

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

9.以下程序的功能是輸出如下形式的方陣:

13141516

9101112

5678

1234

請?zhí)羁铡?/p>

#include<stdio.h>

main()

{inti,j,x;

for(j=4;j【】;j--)

{for(i=1;i<=4;i++)

[x=(j-1)*4+【】;

printf("%4d",x);

}

printf("\n");

}

10.數據模型是用來描述數據庫的結構和語義的,數據模型有概念數據模型和結構數據模型兩類,E-R模型是【】

二、單選題(10題)11.下列關系模型中,能使經運算后得到的新關系中屬性個數多于原來關系中屬性個數的是

A.選擇B.連接C.投影D.并

12.對n個關鍵字的序列進行快速排序,平均情況下的空間復雜度為_______

A.O(1)B.O(logn)C.O(n)D.O(nlogn)

13.以下說法中正確的是()。

A.C程序總是從第一個定義的函數開始執(zhí)行

B.C程序總是從main函數開始執(zhí)行

C.C函數必須有返回值,否則不能使用函數

D.C程序中有調用關系的所有函數必須放在同一個程序文件中

14.若有說明“chars1[30]="abc",s2[]="defghi";",則在使用函數stoat(s1,s2)后,結果是()。

A.s1的內容更新為abcdefghi

B.s1的內容更新為defghi\0

C.s1的內容更新勾defghiabc\0

D.s1的內容更新為abcdefghi\0

15.如下程序段

#include<stdio.h>

#include<ctype.h>

#include<conio.h>

intfun(char*str)

{inti,j=0;

for(i=0;str[i]!=’\0’;i++)

if(str[i]!=’’)str[j++]=str[i];

str[j]=’\0’;

}

main()

{

charstr[81];

intn;

clrscr();

printf("Inputastring:");

gets(str);

fun(str);

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

}

當運行程序時,輸入asdafaaz67<回車>,則輸出是A.A.asdafaaz67

B.asdafaaz67

C.asd

D.z67

16.數據在計算機存儲器內表示時,物理地址與邏輯地址相同并且是連續(xù)的,稱為()。

A.存儲結構B.邏輯結構C.順序存儲結構D.鏈式存儲結構

17.若變量c為char類型,能正確判斷出c為小寫字母的表達式是_______。A.′a′<=c<=′z′

B.(c>=′a′)||(c<=′z′)

C.(′a′=C)

D.(c>=′a′)&&(c<=′z′)

18.下列說法中錯誤的是A.A.只能在循環(huán)體內使用break語句

B.在循環(huán)體內使用break語句可以使流程跳出本層循環(huán)體,從而提前結束本層循環(huán)

C.在while和do…while循環(huán)中,continue語句并沒有使整個循環(huán)終止

D.continue的作用是結束本次循環(huán),即跳過本次循環(huán)體中余下尚未執(zhí)行的語句,接著再一次進行循環(huán)判斷

19.在一個無向圖中,所有頂點的度數之和等于所有邊數的()倍。

A.1/2B.1C.2D.4

20.

三、程序設計題(10題)21.使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項目中包含一個源程序文件prog1.c。在此程序中,請編寫函數fun(),該函數的功能是求出二維數組周邊元素之和,作為函數值返回。二維數組中的值在主函數中賦予。例如,若二維數組中的值為13579299946999813570則函數值為61。注意:部分源程序在文件prog1.c中。請勿改動主函數main()和其他函數中的任何內容,僅在函數fun()的花括號中填入你編寫的若干語句。試題程序:1#include2#include3#include4#defineM45#defineN56intfun(inta[m][n])7{89}10voidmain()11{12FILE*wf;13intaa[M][N]={{1,3,5,7,9},{2,9,9,9,4},{6,9,9,9,8},{1,3,5,7,0}};14inti,j,y;15system("CLS");16printf("Theoriginaldatais:\n");17for(i=0;i<m;i++)18{for(j=0;j<n;j++)19printf("%6d",aa[i][j]);20printf("\n");21}22y=fun(aa);23printf("\nThesum:%d\nM,y);24printf("\n");25/******************/26wf=fopen("out.dat","w");27fprintf(wf,"%d",y);28fclose(wf)29/******************/30}

22.N名學生的成績已在主函數中放人一個帶頭節(jié)點的鏈表結構中,h指向鏈表的頭節(jié)點。請編寫函數fun,其功能是:求出平均分,并由函數值返回。

例如,若學生的成績是:8576698591726487,則平均分應當是:78.625。注意:部分源程序在文件PROGl.C中。

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

23.使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項目中包含一個源程序文件prog1.c。在此程序中,規(guī)定輸入的字符串中只包含字母和*號。請編寫函數其功能是使字符串的前導*號不得多于n個,若多于n個,則刪除多余的*號;若少于或等于n個,則不做處理。字符串中間和尾部的*號不刪除。例如,字符串中的內容為“*******A*BC*DEF*G****”,若n的值為4,刪除后,字符串中的內容應當是“****A*BC*DEF*G****”;若n的值為8,則字符串中的內容仍為“*******A*BC*DEF*G****”。n的值在主函數中輸入。在編寫函數時,不得使用C語言提供的字符串函數。注意:部分源程序給出如下。請勿改動主函數main()和其他函數中的任何內容,僅在函數fun()的花括號中填入你編寫的若干語句。試題程序:#include<stdio.h>#include<conio.h>voidfun(char*a,intn){}voidmain(){ chars[81];intn; printf(“Enterastring:\n”); gets(s); printf(“Entern:”); scanf(“%d”,&n); fun(s,n); printf(“Thestringafterdeleted:\n”); puts(s);}

24.使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項目中包含一個源程序文件prog1.c。在此程序中,編寫函數fun(),其功能是根據以下公式求P的值,結果由函數值返回。m與n為兩個正整數且要求m>n。例如:m=12,n=8時,運行結果為495.000000。注意:部分源程序在文件prog1.c中。請勿改動主函數main()和其他函數中的任何內容,僅在函數fun()的花括號中填入你編寫的若干語句。試題程序:

25.請編寫函數proc(),它的功能是:求出1~1000中能被5或13整除,但不能同時被5和13整除的所有整數,并將它們放在arr所指的數組中,通過n返回這些數。注意:部分源程序給H{如下。請勿改動main()函數和其他函數中的任何內容,僅在函數proc()的花括號中填入所編寫的若干語句。試題程序:

26.請編寫—個函數,用來刪除字符串中的所有空格。例如,輸入asdafaaz67,則輸出為asdafaaz67。注意:部分源程序給出如下。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。試題程序:

27.編寫函數fun,其功能是:實現兩個字符串的連接(不要使用庫函數strcat),即把p2所指的字符串連接到

pl所指的字符串的后面。

例如,分別輸入下面兩個字符串:

程序輸出:

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

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

28.請編寫fun函數,其功能是:計算并輸出3~m所有素數的平方根之和。

例如,若主函數從鍵盤給m輸入50后,則輸出為s=68.665791。

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

注意:m的值要大于2但不大于100。部分源程序給出如下。

試題程序:

#include<math.h>

#include<stdio.h>

doublefun(intm)

{}

voidmain

{

intm;

doubles;

FILE*out:

printf("\n\nInputm:");

scanf("%d",&m);

s=fun(m);

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

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

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

fprintf(out,"%f\n",fun(m+80));

felose(out);

}

29.使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項目中包含一個源程序文件prog1.c。在此程序中,規(guī)定輸入的字符串中只包含字母和*號。請編寫函數fun(),其功能是使字符串中尾部的*號不多于n個,若多于n個,則刪除多余的*號;若少于或等于n個,則不做任何操作,字符串中間和前面的*號不刪除。例如,字符串中的內容為“****A*BC*DEF*G*******”,若n的值為4,刪除后,字符串中的內容應為“****A*BC*DEF*G****”;若n的值為7,則字符串中的內容仍為“****A*BC*DEF*G*******”。n的值在主函數中輸入。編寫函數時,不得使用C語言提供的字符串函數。注意:部分源程序給出如下。請勿改動主函數main()和其他函數中的任何內容,僅在函數fun()的花括號中填入你編寫的若干語句。試題程序:#include<stdio.h>voidfun(char*a,intn){}main(){ chars[81];intn; printf("Enterastring:\n”); gets(s); printf(“Entern:”); scanf(“%d”,&n); fun(s,n); printf(“Thestringafterdeleted:\n”); puts(s);}

30.使用VC++2010打開考生文件夾夾下prog1中的解決方案。此解決方案的項目中包含一個源程序文件prog1.c。在此程序中,請編寫函數fun(),該函數的功能是刪除一維數組中所有相同的元素,使之只剩一個。數組中的元素已按由小到大的順序排列,函數返回刪除后數組中元素的個數。例如,若一維數組中的元素是2223445666677899101010刪除后,數組中的元素應該是2345678910注意:部分源程序給出如下。請勿改動主函數main()和其他函數中的任何內容,僅在函數fun()的花括號中填入你編寫的若干語句。試題程序:#include<stdio.h>#defineN80intfun(inta[],intn){}voidmain(){ 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++)<p=""></n;i++)<> printf(n%3d”,a[i]); n=fun(a,n); printf(“\n\nThedataafterdeleted:\n”); for(i=0;i<n;i++)<p=""></n;i++)<> printf(“%3d”,a[i]); printf(“\n\n”);}

四、2.程序修改題(10題)31.下列給定程序中,fun()函數的功能是:根據形參m,計算下列公式的值。

t=1-1/2+1/3-1/4+…+(-1)(m+1)/m

例如,若輸入5,則應輸出0.783333。

請改正程序中的錯誤,使它能得到正確結果。

注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構。

試題程序:

#include<conio.h>

#include<stdio.h>

/*************found*************/

intfun(intm)

{

doublet=1.0,j=1.0;

inti;

/*************found*************/

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

{j=-1*j;t+=j/i;}

returnt;

}

main()

{

intm;

clrscr();

printf("\nPleaseenter1integernumber:");

scanf("%d",&m);

printf("/nTheresultis%If\n",fun(m));

}

32.給定程序MODII.C中fun函數的功能是:根據整型形參m,計算如下公式的值。

例如,若主函數中輸入5,則應輸出-0.283333。

請改正函數fun中的錯誤或在橫線處填上適當的內容并把橫線刪除,使它能計算出正確的結果。

注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!

33.給定程序MODll.C中函數fun的功能是:根據整型形參m,計算如下公式的值。

例如,若m=2000,則應輸出:0.000160。

請改正程序中的語法錯誤,使它能計算出正確的結果。

注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!

34.下列給定程序中,fun()函數的功能是:根據形參m,計算下列公式的值。

t=-1+1/2+1/3+1/4+…+1/m

例如,若輸入5,則應輸出2.283333。

請改正程序中的錯誤,使它能計算出正確的結果。

注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構。

試題程序:

#include<conio.h>

#include<stdio.h>

doublefun(intm)

{

doublet=1.0;

inti;

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

/*************found**************/

t+=1.0/k;

/*************found**************/

returni;

}

main()

{intm;

clrscr();

printf("\nPleaseenterlintegernumber:");

scanf("%d",&m);

printf("\nTheresultis%1f\n",fun(m));

}

35.給定程序MODll.C中函數fun的功能是:交換主函數中兩個變量的值。例如:若變量a中的值原為8,b中的值為3。程序運行后a中的值為3,b中的值為8。請改正程序中的錯誤,使它能計算出正確的結果。

注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!

36.下列給定程序中,函數fun()的功能是:應用遞歸算法求某數a的平方根。求平方根的迭代公式如下:

例如,2的平方根為1.414214。

請改正程序中的錯誤,使它能得出正確的結果。

注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構。

試題程序:

#include<math.h>

#include<stdio.h>

/*************found**************/

fun(doublea,doublex0)

{doublexl,y;

xl=(x0+a/x0)/2.0;

/*************found**************/

if(fabs(xl-x0)>0.00001)

y=fun(a,xl);

elsey=x1;

returny;

}

main()

{doublex;

printf("Enterx:");scanf("%1f",&x);

printf("Thesquarerootof%1fis%1f\n",

x,fun(x,l.O));

}

37.下列給定程序中,函數fun()的功能是:根據整型參數m,計算如下公式的值。

y=1/(100×100)+1/(200×200)+1/(300×300)+…+1/(m×m)

例如,若m=2000,則應輸出0.000160。

請改正程序中的錯誤,使它能得出正確的結果。

注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構。

試題程序:

#include<conio.h>

#include<stdio.h>

/*************found**************/

fun(intm)

{doubley=0,d;

inti;

/*************found**************/

for(i=100,i<=m,i+=100)

{d=(double)i*(double)i;

y+=l.0/d;

}

return(y);

}

main()

{intn=2000;

clrscr();

printf("\nTheresultis%lf\n",fun(n));

38.下列給定程序中,函數fun()的功能是:求整數x的y次方的低3位值。例如,整數5的6次方為15625,此值的低3位值為6250

請改正程序中的錯誤,使它能得出正確的結果。

注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構。

試題程序:

#include<stdio.h>

longfun(intx,inty,long*p)

{inti;

longt=1;

/**************found***************/

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

t=t*x;

*p=t;

/**************found***************/

t=t/1000;

returnt;

}

main()

{longt,r;intx,y;

printf("\nInputxandy:");scanf

("%1d%1d",&x,&y);

t=fun(x,y,&r);

printf("\n\nx=%d,y=%d,r=%1d,last=

%1d\n\n",x,y,r,t);

}

39.下列給定程序是建立一個帶頭結點的單向鏈表,并用隨機函數為各結點賦值。函數fun()的功能是:將單向鏈表結點(不包括頭結點)數據域為偶數的值累加起來,并作為函數值返回。

其累加和通過函數值返回main()函數。例如,若n=5,則應輸出8.391667。

請改正程序中的錯誤,使它能得到正確結果。

[注意]不要改動main函數,不得增行或刪行,也不得更改程序的結構。

[試題源程序]

#include<stdio.h>

#include<stdiib.h>

typedefstructaa

{

intdata;

structaa*next;

}NODE;

intfun(NODE*h)

{

intsum=0;

NODE*P;

/**********found**********/

p=h;

while(P->next)

{

if(p->data%2==0)

sum+=p->data;

/**********found**********/

p=h->next;

}

returnsum;

}

NODE*creatlink(intn)

{

NODE*h,*p,*s,*q;

inti,x;

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

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

{

s=(NODE*)malloc(sizeof(NODE));

s->data=rand()%16;

s->next=p->next;

p->next=s;

p=p->next;

}

p->next=NULL;

returnh;

}

outlink(NODE*h,FILE*Pf)

{

NODE*p;

p=h->next;

fprintf(Pf,"\n\nTHELIST:\n\nHEAD");

while(P)

{

fprintf(Pf,"->%d",p->data);p=p->next;

}

fprintf(pf,"\n");

}

outresult(ints,FILE*pf)

{

fprintf(Pf,"\nThesumofevennumbers:%d\n",s);

}

main()

{

NODE*head;inteven;

head=creatlink(12);

head->data=9000;

outlink(head,stdout);

even=fun(head);

printf("\nTheresult:\n");outresult(even,stdout);

}

40.給定程序中函數fun的功能是:從低位開始取出長整型變量S中偶數位上的數,依次構成一個新數放在t中。高位仍在高位,低位仍在低位。

例如,當s中的數為7654321時,t中的數為642。

請改正程序中的錯誤,使它能得到正確結果。

[注意]不要改動main函數,不得增行或刪行,也不得更改程序的結構。

[試題源程序]

#include<stdio.h>

/************found***********/

voidfun(longs,longt)

{

longs1=10;

s/=10;

*t=s%10;

/************found************/

while(s<0)

{

s=s/100;

*t=s%10*s1+*t;

s1=s1*10;

}

}

msin()

{

longs,t;

printf("\nPleaseenters:");

scanf("%ld",&s);

fun(s,&t);

printf("Theresultis:%ld\n",t);

}

五、程序改錯題(2題)41.下列給定程序中,fun()函數的功能是:從整數1~50中,選出能被3整除且有一位上的數是5的數,并把這些數放b所指的數組中,這些數的個數作為函數值返回。規(guī)定,函數中a1放個位數,a2放十位數。

請修改函數中的錯誤,得出正確的結果。

注意:不要改動main()函數,不能增行或減行,也不能更改程序的結構。

試題程序:

42.下列給定程序中,函數proc的功能是:從字符串str中,刪除所有大寫字母F。請修改程序中的錯誤,使它能得到正確結果。注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構。試題程序:#include<stdio.h>voidproc(char*str){inti,j;//****found****for(i=j=0;str[i]一0;i++)if(str[i]!=F)//****found****str[i]=str[i];str[j]=\0;}voidmain{charstr[80];printf("\nEnterastring:");gets(str);printf("Theoriginalstring:");puts(str);proc(str);printf("Thestringafterdeleted:");puts(str);printf("\n\n");}六、操作題(2題)43.以下程序運行后的輸出結果是【】。

main()

{chara[]="Language",b[]="Pragrame";

char*p1,*p2;intk;

p1=a;p2=b;

for(k=0;k<=7;k++)

if(*(p1+k)==*(p2+k))

printf("%c",*(p1+k));

}

44.fun1函數的功能是將3個整數按由大到小的順序調整后依次放入a、b、c3個變量中,a中放最大數,fun2函數的功能是交換兩個變量中的值。補足所缺語句。

fun2(int*x,int*y)

{intt;

t=*x;*x=*y;*y=t;

}

fun1(int*p1,int*p2,int*p3)

{if(*p3>*p2)fun2(*P2,*p3);

if(*p1<*p3)fun2(______);

if(*p1<*p2)fun2(______);

}

main()

{inta,b,c;

scanf("%d%d%d",&a,&b,&c);

fun1(&a,&b,&c);

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

}

參考答案

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

2.軟件危機軟件危機

3.33解析:這里:b-5=4,a-=4之后a的值為6,并把它賦給c。此時b的值并未被改變。在第2個表達式中,也只有賦值表達式b=3改變了b的值。所以兩行語句執(zhí)行完畢,b的值應該為3。

4.時間復雜度時間復雜度解析:算法在執(zhí)行過程中所執(zhí)行的基本運算的次數,也就是執(zhí)行算法所需要的計算工作量,稱為算法的時間復雜度。

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

6.求出數組元素平均值求出數組元素平均值解析:函數有一個數組形參a和一個整型形參n。函數首先用循環(huán)求數組a的前n個元素和,然后將和除以n。即求數組元素的平均值。

7.存儲結構

8.fopenfopen解析:C語言中的文件分為:ASCII文件與二進制文件。文件在使用前打開,使用后要關閉。

打開文件的函數為:fopen(),調用形式為:fp=fopen(“文件名”,“使用文件方式”);

關閉文件的函數為:fclose(),調用形式為:fclose(fp);其中fp為文件指針。

9.>=1或>0i>=1或>0\r\ni解析:程序的外層for循環(huán)控制輸出數據的行數,故第一處填“>=1”或“>0”;內層循環(huán)控制每行輸出的個數。在內層for循環(huán)中,語句x=(j-1)*4+______;用于控制輸出方陣中的具體數據,由于這些數據與其所在的行、列(j,i)具有x=(j-1)*4+i的關系,故第二處填i。

10.概念數據模型概念數據模型

11.B解析:本題主要考查關系模型中幾種運算的特征。經過選擇或投影運算得到的新關系的屬性個數最多不會超過原關系中的屬性個數。經過連接運算得到的新關系最多不少于原關系中屬性的個數。故選項B正確。

12.D

13.B解析:C++程序總是從main函數開始執(zhí)行。

14.Dstrcat(s1,s2)函數的功能是把s2字符串連接到s1字符串的末尾,要保證s1有足夠的空間容納下連接后的字符串。

15.A在本題中,程序首先定義一個返回類型為整型的函數fun,該函數帶有一個指針型的形參變量str,從主函數中對其調用時傳遞的參數我們可以知道,該指針指向的是一個數組,在該函數體中,首先定義兩個整型變量,然后執(zhí)行循環(huán),循環(huán)變量i的初始值為0,循環(huán)結束的條件是str[i]!=’\\0’,表示取到的數組元素是字符串結束標識,即字符串中的字符被處理完,在循環(huán)體中,首先執(zhí)行條件判斷語句if(str[i]!=’’),如果結果為真,說明取到的當前字符不是空字符,這時執(zhí)行str[j++]=str[i],即將非空格字符保存到數組中;如果為假,說明取到了空格字符,此時不保存,而接著執(zhí)行下次循環(huán)跳過空格字符。循環(huán)結束后執(zhí)行str[j]=’\\0’;,即保存字符結束標識符,用來標識字符串結束。通過上面的這些分析,我們可以知道函數fun的作用是去掉字符數組中的空格字符。

在主函數中,首先定義了一個大小為81的字符數組,然后調用函數clrscr()清除輸入文本窗口,接著輸出一條提示語句,執(zhí)行gets(str);語句,該語句的作用是從鍵盤輸入一個字符串到str數組,碰到換行符結束。然后調用函數fun,其實參為str。通過上面對函數fun作用的分析我們可以知道,調用函數后輸入字符串中的空格符都被刪除了,最后得到的字符串為asdafaaz67。

程序最后執(zhí)行輸出語句,輸出字符數組str中的字符串,因此,程序最終的輸出結果是asdafaaz67,本題答案選A。

16.C

17.D

18.A解析:只能在循環(huán)體內和switch語句體內使用break語句,當break出現在循環(huán)體中的switch語句體時,其作用是跳出該switch語句體。當break出現在循環(huán)體中,但不在switch語句體中時,則在執(zhí)行break后,跳出本層循環(huán)體。continue語句的作用是,跳過本次循環(huán)體中余下尚未執(zhí)行的語句,接著再一次進行循環(huán)的條件判定。

19.C

20.D

21.1intfun(inta[M][N])2{3inti,j,sum=0;4for(i=0;i<m;i++)5for(j=0;j<n;j++)6if(i==o||i==M-1||j==0||j==N-1)/*只要下標中有一個為。或M-1或N-1,則它一定是周邊元素*/7sum=sum+a[i][j];/*將周邊元素相加*/8returnsum;9}本題采用逐一判斷的方式求數組周邊元素和。二維數組周邊元素的規(guī)律是,其兩個下標中一定有一個是0或M-1或N-1。程序中循環(huán)語句用來控制數組的行和列,條件語句用來判斷數組元素是否為周邊元素。22.

【考點分析】

本題考查:鏈表的操作,對鏈表的主要操作有以下幾種:建立鏈表、結構的查找與輸出、插入一個結點、刪除一個結點。

【解題思路】

題目要求求鏈表中數據域的平均值,應首先使用循環(huán)語句遍歷鏈表,求各結點數據域中數值的和,再對和求平均分。遍歷鏈表時應定義一個指向結點的指針P,因為“頭結點”中沒有數值,所以程序中讓P直接指向“頭結點”的下一個結點,使用語句STREC+P=h÷next。23.voidfun(char*a,intn){ inti=0,k=0; char*p,*t; p=t=a; /*開始時,p與t同時指向數組的首地址*/ while(*t==‘*’) /*用k來統計前導星號的個數*/ {k++;t++;} if(k>n) /*如果k大于n,則使p的前導保留n個星號,其后的字符依次存入數組a中*/ { while(*p) { a[i]=*(p+k-n); i++; p++; } a[i]=‘\0’; /*在字符串最后加上字符串結束標志*/ }}字符串中前導*號不能多于n個,多余的應刪除。首先需要通過while循環(huán)統計字符串前導*號的個數,然后通過if條件語句完成前導*號的個數和n的比較,如果前導*號多于n個,則需要把n個*號和其余字符重新保留。24.1floatfun(intm,fintn){Floatp1=1,p2=1,p3=1;inti;for(i=1;i<=m;i++)pi*=i;for(i=l;i<=n;i++)p2*=i;for(i=l;i<=(m-n);i++)p3*=i;returnpi/(p2*p3);本題考查循環(huán)的使用。通過3個for循環(huán)分別計算階乘。其中p1=m!,p2=n!,p3=(m-n)!。

25.

【解析】題目中要求出1~1000中能被5或13整除,但不能同時被5和13整除的所有整數,首先應判斷1~1000的每一個整數是否符合要求,將符合要求的每一個整數放入數組arr中。最后將整數的個數作為形參返回給主函數。

26.[答案][解析]題目要求刪除空格,也就是重新保存空格以外的其他字符。通過循環(huán)刪除字符串中的每一個空格,將非空格字符進行重新保存。27.

【考點分析】

【解題思路】

本題用兩個循環(huán)完成操作,第1個循環(huán)的作用是求出第1個字符串的長度,即將i指到第1個字符串的末尾。第2個循環(huán)的作用是將第2個字符串的字符連到第1個字符串的末尾。

28.\r\n\tintn,k,i;

doublesum=0.0;

for(n=3;n<=m;n++)//判斷n是否為素數

{

k=sqrt(n);//求n平方根

for(i=2;i<=k:i++)

if(n%i==0)break;//如果n不是素數,跳出

if(i>=k+1)

sum+=sqrt(n);//求平方根的和

}

returnsum;

【解析】首先判斷循環(huán)中n是否為素數,如果不是素數,求其平方根的累加和,并返回計算結果,否則跳出判斷循環(huán)。其中,對于平方根的求解可以使用C語句中的sqrt函數。29.voidfun(char*a,intn){ inti=0,k=0; char*p,*t; p=t=a;/*將指針移動到字符串末尾*/ while(*t) t++; t--;/*從后往前如果是*則使k自增1,找到最后一個*所在的位置,并記錄*的個數*/ while(*t==‘*’)/*指針t指向前一個,同時標量k自增1*/ {k++;t--;}/*如果最后*的個數大于允許的個數*/ if(k>n)/*循環(huán)次數不大于前面的字符與最大允許*的個數之和*/ { while(*p&&p<t+n+1)<p=""></t+n+1)<>/*把字符保存到數組a中*/ {a[i]=*p; i++;p++; } a[i]=‘\0’; }}字符串中尾部*號不能多于n個,多余的要刪除。首先需要通過while循環(huán)統計字符串尾部*號,然后通過if條件語句完成尾部*號數和n的比較,若尾部*號數多于n個,則需要把n個*號和其余字符重新保存。30.intfun(inta[],intn){ inti,j=1; for(i=1;i<n;i++) if(a[j-1]!=a[i])/*若該元素與前一個元素不相同,則保留*/ a[j++]=a[i]; returnj;/*返回不相同元素的個數*/}該程序的流程:定義變量i和j,其中j用于控制刪除后剩下的元素在數組中的下標,i用于搜索原數組中的元素。j始終是新數組中最后一個元素的下一個元素的下標。所以if語句中的條件是a[j-1]!=a[i],其中a[j-1]是新數組中的最后一個元素,若條件成立,則表示出現了不同的值,所以a[i]要保留到新數組中。注意本題中i和j的初值都要從1開始,該算法只能用于數組已排序的題目中。

31.(1)錯誤:intfun(intm)正確:doublefun(intm)(2)錯誤:for(i=1;i<m;i++)正確:for(i=2;i<=m;i++(1)錯誤:intfun(intm)正確:doublefun(intm)\r\n(2)錯誤:for(i=1;i<m;i++)正確:for(i=2;i<=m;i++解析:錯誤1:函數的返回值為實型數,所以應定義為double類型。錯誤2:根據題目的公式,參加運算的數應從2到m,包括m。

32.(1)t=t-1.0/i;或t-=1.0/i;或t一=(double)1/i;(2)returnt;(1)t=t-1.0/i;或t-=1.0/i;或t一=(double)1/i;(2)returnt;解析:本題中函數的功能是計算公式的值。首先根據題干中給出的公式推出每一項之間的關系,求出每一項的表達式,然后求得數列的值。其中,每一項的值為1/n。

33.(1)doublefun(intm)(2)for(i=100;i<=m;i+=100)(1)doublefun(intm)(2)for(i=100;i<=m;i+=100)解析:本題中函數的功能是計算公式的值。關于題干公式的求解過程,首先根據題干中給出的公式推出每一項之間的關系,求出每一項的表達式,然后求得數列的值。

34.(1)錯誤:t+=1.0/k;正確:t+=1.0/i;(2)錯誤:returni;正確:returnt;(1)錯誤:t+=1.0/k;正確:t+=1.0/i;\r\n(2)錯誤:returni;正確:returnt;解析:該題目考查分母成等差數列遞增的一個數學公式,我們先看看循環(huán)條件for(i=2;i<=m;i++),i是從2開始遞增到m,所以t的值應該由1.0/i的值逐步循環(huán)疊加后的結果,而不是t+=1.0/k;,returni;考查對程序的解讀能力,當循環(huán)結束后(由輸入m的值決定),函數值返回當前t的值。

35.(1)voidfun(int*xint*y)(2)t=*x;*x=*y;*y=t;(1)voidfun(int*x,int*y)(2)t=*x;*x=*y;*y=t;解析:本題中函數的功能是交換主函數中兩個變量的值。利用臨時變量存放臨時交換值,實現兩個變量的交換。

36.(1)錯誤:fun(doubleadoublex0)正確:doublefun(doubleadoublex0)(2)錯誤:if(fabs(x1-x0)>0.00001)正確:if(fabs(x1-x0)>=0.00001)(1)錯誤:fun(doublea,doublex0)正確:doublefun(doublea,doublex0)\r\n(2)錯誤:if(fabs(x1-x0)>0.00001)正確:if(fabs(x1-x0)>=0.00001)解析:用C語言求平方根的方法一般有兩種經典的算法,它們分別是迭代法和遞歸法,本題要求用遞歸法。該程序采用了if語句,錯誤在于if語句的判斷條件,程序的含義是當迭代結果差小于誤差時進行循環(huán),故正確的應該是if(fabs(x1-x0)>=0.00001)。

37.(1)錯誤:fun(intm)正確:doublefun(intm)(2)錯誤:for(i=100i<=mi+=100)正確:for(i=100;i<=m;i+=100)(1)錯

溫馨提示

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

評論

0/150

提交評論