2021年內蒙古自治區(qū)呼和浩特市全國計算機等級考試C語言程序設計測試卷(含答案)_第1頁
2021年內蒙古自治區(qū)呼和浩特市全國計算機等級考試C語言程序設計測試卷(含答案)_第2頁
2021年內蒙古自治區(qū)呼和浩特市全國計算機等級考試C語言程序設計測試卷(含答案)_第3頁
2021年內蒙古自治區(qū)呼和浩特市全國計算機等級考試C語言程序設計測試卷(含答案)_第4頁
2021年內蒙古自治區(qū)呼和浩特市全國計算機等級考試C語言程序設計測試卷(含答案)_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2021年內蒙古自治區(qū)呼和浩特市全國計算機等級考試C語言程序設計測試卷(含答案)學校:________班級:________姓名:________考號:________

一、2.填空題(10題)1.以下程序用來輸出結構體變量ex所占存儲單元的字節(jié)數(shù):

structst

{charname[20];doublescore;};

main()

{structstex;

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

}

2.執(zhí)行以下程序后sum的值是【】。

main()

{

inti,sum;

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

sum+=i;

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

}

3.下列表達式用于判斷y是否為閏年。閏年的判斷條件是:年號能被4整除但不能被100整除或年號能被400整除,請?zhí)羁誣_____。

4.下列程序執(zhí)行后輸出的結果是【】。

f(inta)

{staticc=0;

c=a+c++;

return(c);

}

main()

{inta=2,i,k;

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

k=f(a++);

prinf("%d\n",k);

}

5.以下程序運行結果是【】。

#include<stdio.h>

main()

{intfun();fun();}

fun()

{staticinta[3]={0,1,2};

inti;

for(i=0;i<3;i++)a[i]+=a[i];

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

printf("\n");}

6.下面函數(shù)的功能是將一個字符串的內容顛倒過來,請?zhí)羁铡?/p>

voidfun(charstr[])

{inti,j,k;

for(i=0,j=【】;i<j;i++,j--)

{k=str[i];

str[i]=str[j];

str[j]=k;}}

7.以下程序中,函數(shù)fun的功能是計算x2-2x+6,主函數(shù)中將調用fun函數(shù)計算:

y1=(x+8)2-2(x+8)+6

y2=sin2(x)-2sin(x)+6

請?zhí)羁铡?/p>

#include"math.h"

doublefun(doublex){return(x*x-2*x+6);}

main()

{doublex,y1,y2;

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

y1=fun(【】);

y2=fun(【】);

printf("y1=%lf,y2=%lf\n",y1,y2);

}

8.下面程序段的輸出結果是【】。

intx=5;

do{printf("%d",x-=4);

}while(!(--x));

9.以下函數(shù)rotate的功能是:將a所指N行N列的二維數(shù)組中的最后一行放到b所指二維數(shù)組的第0列中,把a所指二維數(shù)組中的第0行放到b所指二維數(shù)組的最后一列中,b所指二維數(shù)組中其他數(shù)據(jù)不變。

#defineN4

voidrotate(inta[][N],intb[][N])

{inti,j;

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

{b[i][N-1]=a[0][i];【】=a[N-1][i];}

}

10.閱讀下列程序,則程序的輸出結果為【】。

#include"stdio.h"

structty

{intdata;

charc;};

main()

{structtya={30,′x′};

fun(a);

printf("%d%c",a.data,a.c);}

fun(structtyb)

{b.data=20;

b.c=′y′;}

二、單選題(10題)11.下列排序算法中,()算法可能會出現(xiàn)下面情況:初始數(shù)據(jù)有序時,花費的時間反而最多。

A.堆排序B.冒泡排序C.快速排序D.希爾排序

12.已知一個有序表為(15,19,30,33,49,50,65,88,93,126,164),當二分查找值為126的元素時,檢索成功需進行的比較次數(shù)為()。

A.1次B.2次C.3次D.4次

13.有下列程序:#include<stdio.h>voidfun(char*a,char*B){while(*a=='*')a++;while(*b=*A){b++;a++;}}main(){char*s="*****a*b****",t[80];fun(s,t);puts(t);程序的運行結果是()。A.*****a*bB.a*bC.a*b****D.ab

14.下面哪個序列不是此圖的一個拓撲排序()A.ebfgadchB.aebdgfchC.adchebfgD.Aedbfgch

15.設有一個10階的對稱矩陣A,采用壓縮存儲方式,以行序為主存儲,a11為第一元素,其存儲地址為1,每個元素占一個地址空間,則a85的地址為()。

A.13B.33C.18D.40

16.

17.有以下程序:voidfunl(char*p)程序執(zhí)行后的輸出結果是()A.ProhsbnB.PrphsbnC.ProgsbnD.Program

18.若以“a+”方式打開一個已存在的文件,以下敘述正確的是()。

A.文件打開時,原有文件內容不被刪除,可以進行添加和讀操作

B.文件打開時,原有文件內容不被刪除,位置指針移到文件開頭,可以進行重寫和讀操作

C.文件打開時,原有文件內容不被刪除,位置指針移到文件中間,可以進行重寫和讀操作

D.文件打開時,原有文件內容被刪除,只可進行寫操作

19.已知小寫母a的ASCII碼為97,大寫字母A的ASCII碼為65,以下程序的結果是_______。main(){unsignedinta=32,b=66;printf("%c\n",a|B);}

A.66B.98C.bD.B

20.有以下程序,程序中庫函數(shù)islower(ch)用以判斷ch中的字母是否為小寫字母:

程序運行后的輸出結果是()。

A.abcdEFg!B.AbCdEFg!C.abcdEFG!D.aBcDEFG!

三、程序設計題(10題)21.假定輸入的字符串中只包含字母和*號。請編寫函數(shù)proc,它的功能是:將字符串中的前導*號全部刪除,中間和后面的*號不刪除。例如,若字符串中的內容為****a*bc*def*g****,刪除后,字符串中的內容則應當是a*bc*def*g****。注意:部分源程序給出如下。請勿改動main函數(shù)和其他函數(shù)中的任何內容,僅在函數(shù)proc的花括號中填入所編寫的若干語句。試題程序:#include<stdio.h=:{>#include<conio.h>woidproc(char*str){}voidmaincharstr[81];printf("Enterastring:\n");gets(str);proc(str):printf("Thestringafterdeleted:\n");puts(str);}

22.使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項目中包含一個源程序文件prog1.c。在此程序中,編寫函數(shù)fun(),其功能是求斐波那契數(shù)列中大于t的最小的數(shù),結果由函數(shù)返回。斐波那契數(shù)列F(n)的定義為F(0)=0,F(1)=1F(n)=F(n-1)+F(n-2)例如,當t=1000時,函數(shù)值為1597。注意:部分源程序給出如下。請勿改動主函數(shù)main()和其他函數(shù)中的任何內容,僅在函數(shù)fun()的花括號中填入你編寫的若干語句。試題程序:#include<conio.h>#include<math.h>#include<stdio.h>intfun(intt){}main(){intn;n=1000;printf(“n=%d,f=%d\n”,n,fun(n));}

23.有一個一維數(shù)組,內放10個學生成績,寫一個函數(shù),求出平均分。

24.請編寫一個函數(shù)intproc(int*s,intt,int*k),用來求出數(shù)組的最小元素在數(shù)組中的下標并存放在k所指的存儲單元中。例如,輸入如下整數(shù):27393445362489342111831527246則輸出結果為4,89。注意:部分源程序給出如下。請勿改動main()函數(shù)和其他函數(shù)中的任何內容,僅在函數(shù)proc()的花括號中填入所編寫的若干語句。試題程序:

25.請編寫函數(shù)proc,該函數(shù)的功能是:將放在字符串數(shù)組中的M個字符串(每串的長度

不超過N),按順序合并組成一個新的字符串。

例如,若字符串數(shù)組中的M個字符串為:

ABCD

BCDEFG

CDEFGHI

則合并后的字符串內容應該是ABCDBCDEFGCDEFGHl。

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

#defineM3

#defineN20

voidproc(chararr[M][N],char*b)

{

}

voidmain

{

charstr[M][N]={"ABCD","BCDEFG","CDEFGHl"),i;

chararr[100]={"##################"};

printf(”Thestrin9:kn”);

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

puts(str[i]);

printf("\n");

proc(str,arr);

printf("TheAstring:\n");

printf("%S",arr);

printf("\n\n");

}

26.n個人的成績存放在score數(shù)組中,請編寫函數(shù)proc(),它的功能是將低于平均分的人數(shù)作為函數(shù)值返回,將低于平均分的分數(shù)放在down所指的數(shù)組中。例如,當score數(shù)組中的數(shù)據(jù)為{99,80,40,56,59,84,60,76,100}時,函數(shù)返回的人數(shù)應該是4,down中的數(shù)據(jù)應為40565960。注意:部分源程序給出如下。請勿改動main()函數(shù)和其他函數(shù)中的任何內容,僅在函數(shù)proc()的花括號中填入所編寫的若干語句。試題程序:

27.請編一個函數(shù)fun(ohlr*str),該函數(shù)的功能是把字符串中的內容逆置。

例如,字符串中原有的字符串為asdf9,則調用該函數(shù)后,串中的內容為9fdsa。

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

試題程序:

#include<string.h>

#include<conio.h>

#include<stdio.h>

#defineN100

voidfun(char*str)

{

}

voidmain

{

chara[N];

FILE*out:

printf("Enterastring:");

gets(a);

printf("Theorigiralstringis:");

puts(a);

fun(a):

printf("Thestringaftermodified:");

puts(a);

strcpy(a,"Welcome!");

fun(a);

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

fprintf(out,"%s".a);

fclose(out);

}

28.編寫一個函數(shù),輸入n個字符串,串與串之間以Enter鍵分隔,找出最短字符串中第一個字符串,傳回該串地址(用一個新串“*”作為結束輸入的標志)。注意:部分源程序給出如下。請勿改動main()函數(shù)和其他函數(shù)中的任何內容,僅在函數(shù)fun()的花括號中填入所編寫的若干語句。試題程序:

29.請編一個函數(shù)intfun(inta),它的功能是:判斷a是否是素數(shù),若a是素數(shù),返回1;若不是素數(shù),返回0。A的值由主函數(shù)從鍵盤讀入。

30.某學生的記錄由學號、8門課程成績和平均分組成,學號和8門課程的成績已在主函數(shù)中給出,請編寫函數(shù)fun,其功能是:求出該學生的平均分,并放人記錄的ave成員中。

例如,學生的成績是:85.5,76,69.5,85,91,72,64.5,87.5,則他的平均分應為78.875。注意:部分源程序在文件PROGl.C中。

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

四、2.程序修改題(10題)31.下列給定程序中,函數(shù)fun()的功能是計算并輸出high以內的素數(shù)之和。high由主函數(shù)傳給fun()函數(shù)。

例如:若high的值為100,則函數(shù)的返回值為1060。

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

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

[試題源程序]

#include<conio.h>

#include<stdio.h>

#include<math.h>

intfun(inthigh)

{

intsum=0,n=0,j,yes;

while(high>=2)

{

yes=1;

for(j=2;j<=high/2;j++)

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

ifhigh%j==0

{

yes=0;

break;

}

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

if(yes==0)

{

sum+=high;

n++;

}

high--;

}

returnsum;

}

main()

{

clrscr();

printf("%d\n",fun(100));

}

32.給定程序MODll.C中函數(shù)fun的功能是:計算n的5次方的值(規(guī)定n的值大于2、小于8),通過形參指針傳回主函數(shù);并計算該值的個位、十位、百位上數(shù)字之和作為函數(shù)值返回。

例如,7的5次方是16807,其低3位數(shù)的和值是15。

請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結果。

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

33.以下程序可把輸入的十進制數(shù)以十六進制數(shù)的形式輸出。

請在橫線上填上適當?shù)膬热莶褭M線刪除,使它能得出正確的結果。

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

試題程序;

main()

{

charb[17]={"0123456789ABCDEF"};

intc[64],d,i=0,base=16;

longn;

printf("Enteranumber:\n");

scanf("%ld",&n);

do{

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

c[i]=______;i++;n=n/base;}

while(n!=0);

printf("Transmitenewbase:\n");

for(--i;i>=0;--i)

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

{d=c[i];printf("%c",b______);}

printf("\n");

}

34.給定程序中,函數(shù)fun()的功能是:求輸入的兩個數(shù)中較小的數(shù)。

例如:輸入510,結果為minis5。

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

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

試題程序、

#include<stdio.h>

#include<conio.h>

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

intfun(intx,y)

{intz;

z=x<y?x:y;

return(z);

}

main()

{inta,b,c;

scanf("%d,%d\n",&a,&b);

c=fun(a,b);

printf("minis%d",c);

}

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

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

36.下列給定的程序中,函數(shù)hn()的功能是:為一個偶數(shù)尋找兩個素數(shù),這兩個素數(shù)之和等于該偶數(shù),并將這兩個素數(shù)通過形參指針傳回主函數(shù)。

請改正函數(shù)fun()中的錯誤,使它能得出正確的結果。

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

試題程序:

#include<stdio.h>

#include<math.h>

voidfun(inta,int*b,int*c)

{inti,j,d,y;

for(i=3;i<=a/2;i=i+2)

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

{y=0;

for(j=2;j<=sqrt((double)i);j++)

if(i%j==0)y=0;

if(y==1)

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

{d=i-a;

for(j-2;j<=sqrt((double)d);

j++)

if(d%j==0)y=0;

if(y=-1)

{*b=i;*c=d;}

}

}

}

main()

{inta,b,c;

do

{printf("\nInputa:");

scanf("%d",&a);}

while(a%2);

fun(a,&b,&c);

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

}

37.下列給定的程序中,函數(shù)fun()的功能是:用選擇法對數(shù)組中的n個元素按從大到小的順序進行排序。請改正程序中的錯誤,使它能得到正確結果。

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

試題程序:

#include<stdio.h>

#defineN20

voidfun(inta[],intn)

{

inti,j,t,p;

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

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

{

p=j;

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

if(a[i)>a[p])

p=i;

t=a[p];

a[p]=a[i];

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

a[p]=t;

}

}

main()

{

inta[N]={11,32,-5,2,14},i,m=5;

printf(“排序前的數(shù)據(jù):”);

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

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

printf(“\n”);

fun(a,m);

printf(“排序后的順序:”);

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

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

printf(“\n”);

}

38.給定程序MODll.C中fun函數(shù)的功能是:求出以下分數(shù)序列的前n項之和。

和值通過函數(shù)值返回main函數(shù)。

例如,若n=5,則應輸出:8.391667。

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

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

39.下列給定程序中,函數(shù)fun()的功能是:從3個紅球,5個白球,6個黑球中任意取出8個作為一組,進行輸出。在每組中,可以沒有黑球,但必須要有紅球和白球。組合數(shù)作為函數(shù)值返回。正確的組合數(shù)應該是15。程序中i的值代表紅球數(shù),j的值代表白球數(shù),k的值代表黑球數(shù)。

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

注童:不要改動main函數(shù),不得增行或刪行,也不得更改程序的蛄構。

試題程序:

#include<stdio.h>

intfun()

{inti,j,k,sum=0;

printf("\nTheresult:\n\n");

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

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

{for(j=1;j<=5;j++)

{k=8-i-j;

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

if(k>=1&&k<=6)

{sum=sum+1;

printf("red:%4dwhite:%4d

black:%4d\n",i,j,k);

}

)

}

returnsum;

}

main()

{intsum;

sum=fun();

printf("sum=%4d\n\n",sum);

}

40.下列給定程序中,函數(shù)fun()的功能是:傳入一個整數(shù)m,計算如下公式的值。

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

例如,若輸入5,則應輸出-0.283333。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

doublefun(intm)

{

doublet=l.0;

inti;

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

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

t=l.0-1/i;

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

}

main()

{intm;

clrscr();

printf("\nPleaseenter1integernumbers

:In");

scanf("%d",&m);

printf("\n\nTheresultis%lfln",

fun(m));

}

五、程序改錯題(2題)41.下列給定程序中,函數(shù)proc的功能是:讀入一個字符串(長度<20),將該字符串中的所有字符按ASCII碼升序排序后輸出。

例如,輸入opdye,則應輸出deopy。

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

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

試題程序:

#include<string.h>

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

//****found****

intproc(charstr[])

{

charc;

unsignedi,j;

for(i=0;i<strlen(str)-1;i++)

for(j=i+1;j<strlen(str);j++)

if(str[i]>str[j])

{

c=str[j]:

//****found****

str[j]=str[i++];

str[i]=c;

}

}

voidmain

{

charstr[81];

system("CLS");

printf("\nPleaseenteracharacter

string:");

gets(str);

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

proc(str);

printf("\nAftersortingdecendingly:\n

%s",str);

}42.下列給定程序中,函數(shù)proc的功能是:先將字符串s中的字符按順序存放到t中,然后把S中的字符按正序連接到t的后面。例如,當s中的字符串為WXYZ時,則t中的字符串應為WXYZWXYZ。

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

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

試題程序:

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidproc(char*s,char*t)

{

inti,s1;

s1=strlen(s);

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

//****found****

t[i]=s[s1];

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

t[s1+i]一s[i];

t[2*s1]=\O0;

}

voidmain

{

chars[100],t[100];

system("CLS");

print{("\nPleaseenterstrings:");

scanf("%s",s);

proc(s,t);

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

}六、操作題(2題)43.使用VC++打開考生文件夾下modi1中的解決方案。此解決方案的項目中包含一個源程序文件modi1.c。在此程序中,函數(shù)fun()的功能是求出s所指字符串中最后一次出現(xiàn)的t所指字符串的地址,并將此地址通過函數(shù)值返回,在主函數(shù)中輸出從此地址開始的字符串;若未找到,則函數(shù)值為NULL。例如,當字符串中的內容為“abcdabfabcdx”,t中內容為“ab”時,輸出結果應是“abcdx”。當字符串中的內容為“abcdabfabcdx”,t中內容為“abd”時,則程序輸出未找到信息“Notfound!”。請改正程序中的錯誤,使它能得出正確的結果。注意:不要改動main()函數(shù),不得增行或刪行,也不得更改程序的結構!試題程序:#include<stdlib.h>#include<stdio.h>#include<conio.h>#include<string.h>char*fun(char*s,char*t){ char*p,*r,*a;/*********found*********/ a=Null; while(*s) { p=s;r=t; while(*r)/*********found*********/ if(r==p) {r++;p++;} elsebreak; if(*r=='\0')a=s; s++;} returna;}voidmain(){ chars[l00],t[100],*p; system(“CLS”); printf(“\nPleaseenterstrings:”); scanf(“%s”,s); printf(“\nPleaseentersubstringt:”); scanf(“%s”,t); p=fun(s,t); if(p) printf(“\nTheresultis:%s\n”,p); else printf(“\nNotfound!\n”);}

44.下列給定程序中,函數(shù)fun()的功能是:按順序給s所指數(shù)組中的元素賦予從2開始的偶數(shù),然后再按順序對每5個元素求一個平均值,并將這些值依次存放在w所指的數(shù)組中。若s所指數(shù)組中元素的個數(shù)不是5的倍數(shù),多余部分忽略不計。例如,s所指數(shù)組有14個元素,則只對前10個元素進行處理,不對最后的4個元素求平均值。

請改正函數(shù)fun()中的錯誤,使它能得出正確的結果。

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

試題程序:

#include<stdio.h>

#defineSIZE20

fun(double*s,double*w)

{intk,i;doublesum;

for(k=2,i=0;i<SIZE;i++)

{s[i]=k;k+=2;}

sum=0.0;

for(k=0,i=0;i<SIZE;i++)

{sum+=s[i];

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

if(i+1%5==0)

{w[k]=sum/5;Sum=0;k++;}

}

returnk;

}

main()

{doublea[SIZE],b[SIZE/5];

inti,k;

k=fun(a/b);

printf("Theoriginaldata:\n");

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

{

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

printf("%4.0f"/a[i]);

}

printf{"\n\nTheresult:\n");

for(i=0;i<k;i++)printf("%6.2f",b[i]);

printf("\n\n");

}

參考答案

1.ex或structstex或structst解析:求一個變量所占的存儲單元數(shù),用sizeof函數(shù),參數(shù)為該變量名或其變量類型。

2.1515解析:程序的功能是求1、2、3、4、5的和即15。

3.(y%4==0)&&(y%100!=0)||(y%400==0)(y%4==0)&&(y%100!=0)||(y%400==0)解析:考查邏輯表達。年號能被4整除(y%4==0)但不能被100整除(y%100!=0),兩者是與的關系,年號能被400整除即y%400==0,與前兩項是或的關系。

4.77解析:在程序執(zhí)行時,static變量僅初始化一次,下次使用時將使用上次保存的值。

5.0240480,2,4\r\n0,4,8解析:本題主要考查了for循環(huán)語句的使用以及靜態(tài)局部變量的特點。

6.strlen(str)-1strlen(str)-1解析:程序中的for循環(huán)就是用來完成串反序的,所以應該對循環(huán)的條件進行初始化,所以在[18]應該填入strlen(str)-1。注意,在串反序的時候,不應該把串結束符‘\\0’也反序。

7.x+8sin(x)x+8,sin(x)解析:考查考生對函數(shù)調用相關知識的了解。用x+8代替函數(shù)fun(doublex)中形式參數(shù)x;用sin(x)代替函數(shù)fun(doublex)中形式參數(shù)x。

8.1-41-4解析:題目中首先讓x=5,然后進入do-while循環(huán)體,輸出x-4的值1,此時x為1,表達式!(--x)的值為!(0)為真(此時x變?yōu)?),所以再次執(zhí)行循環(huán)體,輸出x-4的值-4,此時x為-4,表達式!(--x)的值為!(—5)為假,退出循環(huán)。故輸出結果是1-4。

9.b[i][0]b[i][0]解析:因為要將a的最后一行放在b的第0列中,【】應填b的第0列的元素。

10.30x30x解析:本題的參數(shù)傳遞屬于值傳遞,所以被調用函數(shù)內不能改變調用函數(shù)中的數(shù)據(jù)。

11.C

12.C

13.C解析:主函數(shù)main()定義了指向字符串的指針和一個字符數(shù)組,接著調用fun(s,t)函數(shù),進行實參向形參傳遞,函數(shù)fun()第一個while語句判斷*a中的值為“*”時繼續(xù)掃描,當遇到不是“*”時結束,接著第二個while循環(huán)語句,將*a中從“a”開始的后續(xù)所有字符都賦予*b,也就是t[80]中的內容為“a*b****”,所以此題的運行結果為選項C)。

14.C

15.B

16.D

17.A本題中使用了函數(shù)的調用,由funl函數(shù)中的while循環(huán)可知,循環(huán)的作用是為了把q所指向的內容增加1,而從主函數(shù)傳到函數(shù)時是從下標為3開始傳,因此當調用函數(shù)執(zhí)行完后,傳過去的字符串為hsbn,前面不變。

18.AC語言中,文件打開方式“a+”表示打開一個文本文件,從文件開始位置讀,在文件尾部添加數(shù)據(jù),如果指定的文件不存在,系統(tǒng)將使用調用fopen時指定的文件名創(chuàng)建一個新的文件;如果指定的文件存在,那么文件原有內容將被保存,新的數(shù)據(jù)追加到原有文件之后。故本題答案為A選項。

19.C解析:位運算符“|”的作用是按位或,即兩個二進制數(shù)的相應位中只要有一個為1,該位的結果值為1。最后以字符型輸出,98對應的字符“b”

20.D調用缸函數(shù)后,實參數(shù)組名sl傳給形參指針P,P也指向數(shù)組sl。m函數(shù)的功能是遍歷字符數(shù)組中的所有字符,如果某一個字符是空格并且前一個字符是小寫字母的話,就把前一個字符轉換為大寫。程序中語句P[i一1]=P[i—1]一ga’+-A‘;即P[i一1]=P[i一1]一32,意思是將P[i一1]中的字符轉換為大寫。因此D選項正確。

21.\n\tvoidproc(char*str)\n\n\n\t{\n\n\n\tchar*p=str:\n\n\n\twhile(*p==*)p++;//通過P的移動來達\n\n\n\t到使P指向第一個不是*號的字符\n\n\n\tfor(;*p!=\0

;p++,str++)//把從第一個\n\n\n\t不是*號的字符放到a中‘\n\n\n\t*str=*P:\n\n\n\t*str=\0

;//最后用\0作為字符串結束標志\n\n\n\t}\n\n\n\t【解析】題目中要求將字符串中的前導*號全部刪除首先將指針p移動到第一個不是*的字符,將指針P之后的字符放入原來的字符串中,并為新的字符串添加結束符。\fun(intt){intf0=0,f1=1,f;do{/*根據(jù)斐波那契數(shù)列的定義求數(shù)值*/f=f0+f1;f0=f1;f1=f;}while(f<t);/*如果求的數(shù)值小于t則繼續(xù)*/</t);returnf;}根據(jù)斐波那契數(shù)列定義不難發(fā)現(xiàn),該數(shù)列最終的結果由兩個數(shù)列之和組成,所以可以在循環(huán)內部始終把f看成前兩項之和,而f0始終代表第n-2項,f1代表第n-1項。退出循環(huán)時得到的數(shù)f,就是大于指定數(shù)的最小的數(shù)。

23.\nfloataverage(floatarray[],intn)

\n{intI;

\nfloataver,sum=array[0];

\nfor(I=1;Isum=sum+array[I];

\naver=sum/n;

\nreturn(aver);}

\nmain

\n{floatave,score[10];

\nintI;

\nfor(I=0;I<10;I++)

\nscanf('%f',&score[I]);

\nave=average(score,10);

\nprintf('%f\\n',ave);}

\n

24.

【解析】要求出數(shù)組中最小的數(shù),需要比較數(shù)組中的每一個元素。將最小的元素的下標存放在變量k中,通過形參返回到主函數(shù)中。

25.voidproc(chararr[M][N],char*b)

\n{

\ninti,j,k=0;

\nfor(i=0;i<M;i++)//i表示其行下標

\nfor(j=0;arr[i][j]!=\0;j++)//由于每行的個數(shù)不等,因此用a[i][j]!=\0來作為循環(huán)結束

\n的條件

\nb[k++]=arr[i][j];//把二維數(shù)組中的元素放到b的一維數(shù)組中,

\nb[k]=\0;//最后把b賦\0作為字符串結束的標志

\n)

\n【解析】字符串數(shù)組中每一行都是一個一個完整的字符串,其結束標志為\0。因此通過字符串的結束標志來判斷每一個字符串是否結束,將字符串數(shù)組中的所有字符串均賦值新的一維數(shù)組b來完成字符串的合并。

\n

26.

【解析】要找到所有學生中成績低于平均分數(shù)的人數(shù),首先需要算出所有學生的平均成績。然后將所有學生的成績與平均成績相比較。將低于平均分數(shù)學生的記錄存放在新的數(shù)組中,并將低于平均分數(shù)的學生數(shù)返回給主函數(shù)。

27.\n\tcharch;

\ninti,m,n;

\ni=0:

\nm=n=strlen(str)-1;//求字符串str長度

\nwhile(i<(n+1)/2)//循環(huán)逆置交換

\n{

\nch=str[i];

\nstr[i]=str[m];

\nstr[m]=ch:

\ni++;

\nm--;

\n}

\n【解析】在fun函數(shù)中,首先求行字符串的長度,然后通過循環(huán)進行字符交換。要注意的是,如果字符串長度是奇數(shù),則最中間的元素在逆置前后的位置是沒有改變的。\n

28.

【解析】首先指定第一個字符串為長度最小的字符串,然后在循環(huán)過程中將其與其他的所有串的長度進行比較,求出最小的串。設置一個指針變量min,使它的初值為第一個字符串,再使其他的所有串的長度與min的長度進行比較,若其他字符串的長度小于min.則將其他字符串的首地址賦值給min。最后使用返回語句,返回最短長度min的字符串的地址。

29.\n#include”stdio.h”

\nintfun(inta)

\n{intI;

\nif(a==2)return1;I=2;

\nwhile((a%I)!=0I<=sqrt((float)a))

\nI++;

\nif(a%I==0)

\n{printf(“%disnotaprime!”,a);

\nreturn0;}

\nprintf(“%disaprime!”,a);

\nreturn1;}

\nmain

\n{intx;

\nprintf(“\\npleaseenteranumber:”);

\nscanf(“%d”,&x);

\nprintf(“%d\\n”,fun(x));}

\n30.

【考點分析】

本題考查:結構體類型成員運算,指向結構體類型的指針變量作函數(shù)參數(shù)。

【解題思路】

本題考查自定義形參的相關知識點,程序流程是這樣的:在fun函數(shù)中求出平均分后,返回到主函數(shù)時平均分也要帶回,所以只能定義一個指針類型的形參STREC*a,此時,引用成員的方式可以使用指向運算符,即a一>ave和a一>s[i],當然也可用(*a).ave和(*a).s[i]。

31.(1)錯誤:ifhigh%j==0正確:if(high%j==0)(2)錯誤:if(yes==0)正確:if(yes)(1)錯誤:ifhigh%j==0\r\n正確:if(high%j==0)\r\n(2)錯誤:if(yes==0)\r\n正確:if(yes)解析:fun函數(shù)的功能是:用while循環(huán)查找high以內的素數(shù);用for循環(huán)判斷一個數(shù)是否為素數(shù);用變量n記錄找到的素數(shù)的個數(shù):用return返回素數(shù)之和sum。

錯誤1:這個錯誤比較明顯,if語句的兩側要加括號。

錯誤2:yes為1時,說明被判斷的數(shù)是素數(shù),要累加到sum。

32.(1)d=1;s=0;(2)d=d/10;(1)d=1;s=0;(2)d=d/10;解析:本題中函數(shù)的功能是計算n的5次方的值(規(guī)定n的值大于2、小于8),通過形參指針傳回主函數(shù);并計算該值的個位、十位、百位上數(shù)字之和作為函數(shù)值返回。本題解題過程首先是求5次方,然后對結果進行截取以及求和。

33.(1)錯誤:缺少語句正確:應填入n%base或%16(2)錯誤:缺少語句正確:應填入[d](1)錯誤:缺少語句正確:應填入n%base或%16\r\n(2)錯誤:缺少語句正確:應填入[d]解析:在該程序中,字符數(shù)組b存儲十六進制的16個數(shù)字符,整型數(shù)組c存儲譯出的十六進制數(shù)的各位數(shù)值。從整數(shù)n譯出它的各位十六進制數(shù)值,需采用除16取余的方法,即求n除16的余,得到它的十六進制的個位數(shù),接著將n除以16。在n不等于0的情況下循環(huán),能順序求出n的十六進制的個位數(shù)、十位數(shù)、百位數(shù)等。程序中變量base已預置16,所以在第1個空框處可填代碼n%base或n%16。當n的十六進制數(shù)的個位、十位、百位等依次存放于數(shù)組c中后,就從最高位至最低位,參照數(shù)組c[i]的內容d(以其內容為下標),取十六進制數(shù)字符表中的字符b[d]輸出。所以在第2個空框處可填入代碼[d]。

34.錯誤:intfun(intxy)正確:intfun(intxinty)錯誤:intfun(intx,y)正確:intfun(intx,inty)解析:C語言中規(guī)定,在函數(shù)的形參中不允許出現(xiàn)intx,y之類的語句,必須指定每一個參數(shù)的類型,所以在做類似題目時一定要謹慎。

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;解析:本題中函數(shù)的功能是交換主函數(shù)中兩個變量的值。利用臨時變量存放臨時交換值,實現(xiàn)兩個變量的交換。

36.(1)錯誤:y=0;正確:y=1:(2)錯誤:d=i-a;正確:d=a-i;(1)錯誤:y=0;正確:y=1:\r\n(2)錯誤:d=i-a;正確:d=a-i;解析:這道題是歷年的考題經(jīng)典。也就是驗證哥德巴赫猜想之變體,原來的思路是(任意一個大于等于6的偶數(shù)都可以分解為兩個素數(shù)之和)n為大于等于6的任一偶數(shù),可分解為n1和n2兩個數(shù),分別檢查n1和n2是否為素數(shù),如都是,則為一組解。如n1不是素數(shù),就不必再檢查n2是

溫馨提示

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

評論

0/150

提交評論