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

下載本文檔

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

文檔簡介

2023年安徽省宣城市全國計算機等級考試

C語言程序設計真題(含答案)

學校:班級:姓名:考號:

一、2.填空題(10題)

1.若x、y和z均是int型變量,則執(zhí)行下面表達式后的x值為【】。

x=(y=4)+(z=3)

2.測試的目的是暴露錯誤,評價程序的可靠性,?而的目的是發(fā)現(xiàn)

錯誤的位置并改正錯誤。

3.有兩個C程序文件T18.C和myfun.c同在VC系統(tǒng)目錄(文件夾)下,

其中T18.C文件如下:

#include<stdio.h>

#include"myfun.c"

main()

{fun();prinff("\n");}

myfun.c文件如下:

voidfun()

{chars[80],c;intn=0;

while((c=getchar())!:'\n')s[n++]=c;

n--;

while(n>=0)prinff("%c",s[n—]);

)

當編譯連接通過后,運行程序T18時,輸入"Thank!”,則輸出結(jié)果是【】。

4.性表的順序存儲中,元素之間的邏輯關(guān)系是通過【】決定的;性表

的鏈接存儲中,元素之間的邏輯關(guān)系是通過【】決定的。

5.設inta=5,b=6,表達式(++a==b--)?++a:--b的值是[]0

6.以下程序的功能是從名為filea.dat的文本文件中逐個讀入字符并顯示

在屏幕上。請?zhí)羁铡?/p>

majn()

{FILE*fp;charch;

fp=fopen();

ch=fgetc(fp);

whle(!feof(fp)){putchar(ch);ch=f8etc(fp);}

putchar('\n');fclose(fp);

}

7.寫出下列程序的輸出結(jié)果o

main()

{int=0;

while(n++<=1);

printf("%d,",n);

printf("%d",n++);

)

8.常用的軟件結(jié)構(gòu)設計工具是結(jié)構(gòu)圖(SC),也稱程序結(jié)構(gòu)圖。其中,用

矩形表示用帶空心圓的箭頭表示傳遞的是數(shù)據(jù)。

9.在長度為n的有序線性表中進行二分查找。最壞的情況下,需要的比

較次數(shù)為【】。

10.一個項目具有一個項目主管,一個項目主管可管理多個項目,則實體”

項目主管與實體“項目”的聯(lián)系屬于【】的聯(lián)系。

二、單選題(10題)

11.下面程序中算法的時間復雜度是0

intgetSym(intn)

if(n<=0)

return0;

inti=0;

ints=l;

while(s<n)

(

i++;

s*=i;

}

returns;

)

A.O(n)B.O(nA2)C.O(logn)D.O(n*logn)

12.以下敘述正確的是

A.continue語句的作用是結(jié)束整個循環(huán)的執(zhí)行

B.只能在循環(huán)體內(nèi)和switch語句體內(nèi)使用break語句

C.在循環(huán)體內(nèi)使用break語句或continue語句的作用相同

D.從多層循環(huán)嵌套中退出時,只能使用got。語句

知)軟件測試的目的是

A)評估軟件可16性

B)發(fā)現(xiàn)并改正程序中的錯誤

C)改正程序中的錯誤D)發(fā)現(xiàn)程序中的錯誤

13.

(34)若已定義:

inta[]={0,U2,3,4,5,6,7,8,9),*p=a,i;

其中0WiW9,則對a數(shù)組元素不正確的引用是()。

A)a[p-a]

B)*(&a[i])

C)p[i]

14D)a[10]

15.設二叉排序樹中有n個結(jié)點,則二叉排序樹的平均查找長度為()。

A.O(l)

B.O(logn)

C.O(n)

D.(n2)

16.如果樹的的結(jié)點A有4個兄弟,而且B為A的雙親,則B的度為

Oo

A.3B.4C.5D.1

17.有以下程序段intn=0,p?o{scanf("%d”,&p);n++;}while(p!=12345

&&n<3);此處do-while循環(huán)的結(jié)束條件是

A.P的值不等于12345并且n的值小于3

B.P的值等于12345并且n的值大于等于3

C.P的值不等于12345或者n的值小于3

D.P的值等于12345或者n的值大于等于3

18.將數(shù)據(jù)和操作置于對象統(tǒng)一體中的實現(xiàn)方式是0。

A.隱藏B.抽象C.封裝D.結(jié)合

19.以下選項中不屬于字符常量的是

A:CB.〃C〃C.kCCDA072'

20.

(34)下面函數(shù)的功能是()?

sss(s,t)

char

{while(*s);

while(*t)

*(s-H-)=*(t++);

returns;

}

A)將字符串s復制到字符串t中B)比較兩個字符串的大小

C)求字符串的長度D)將字符串t續(xù)接到字符串s中

三、程序設計題(10題)

21.編寫函數(shù)fun(),其功能是:求出1?1000中能被7或11整除,但

不能同時被7和11整除的所有整數(shù),并將其放在a所指的數(shù)組中,通過

n返回這些數(shù)的個數(shù)。注意:部分源程序給出如下。請勿改動main()

函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號中填入所編

寫的若干語句。試題程序:

UmcludeVadhhh>

ifirltMicVeitoo.h>

9includeVstdio.h>

K*idfun<ini?*?mi?n)

voidtmiin()

mlaa£|OOOj?ii?ki

?ywtcm()?

(wn<M?(-B)<

(or+)

it<(b>t)X10?■<>)

Ipnntf(*X5d*eM£k]>t

prifiif<w\n*>iI〃一行Y9個ft

ebe

prtnif<"KSd*?

pnnth*\nw>?

22.假定輸人的字符串中只包含字母和*號。請編寫函數(shù)proc,它的功能

是:將字符串中

的前導*號全部刪除,中間和后面的*號不刪除。

例如,若字符串中的內(nèi)容為****a*bc*def*g****,刪除后,字符串中的

內(nèi)容則

應當是a*bc*de#g****。

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

請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc的花括號

中填入所編

寫的若干語句。

試題程序:

#include<stdio.h>

#include<conio.h>

voidproc(char*str)

voidmain

(

charstr[81];

printf("Enterastring:kn");

gets(str);

proc(str);

printf("Thestringafterdeleted:kn");

puts(str);}

23.使用VC++2010打開考生文件夾下progl中的解決方案。此解決方

案的項目中包含一個源程序文件progl.co在此程序中,編寫函數(shù)fun(),

其功能是將s所指字符串中除了下標為奇數(shù)同時ASCII值也為奇數(shù)的字

符之外的其余所有字符全部刪除,字符串中剩余字符所形成的一個新字

符串存放在t所指的數(shù)組中。

例如,若s所指字符串的內(nèi)容為“ABCDEFG12345",其中字符A的

ASCII值為奇數(shù),但所在元素的下標為偶數(shù),因此需要刪除;而字符1

的ASCII值為奇數(shù),所在數(shù)組中的下標也為奇數(shù),因此不應當刪除,

其他依此類推。最后t所指數(shù)組中的內(nèi)容應為“135”。

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

請勿改動主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花

括號中填入你編寫的若干語句。

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*s,chart[])

(

)

main()

(

chars[100],t[100];

printf("\nPleaseenterstrings:");

scanf("%s”,s);

fun(s,t);

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

}

24.實現(xiàn)字符串拷貝的函數(shù)strcpy為()。

25.

請編寫函數(shù)proc(),其功能是:將所有大于1小于整數(shù)m的非素數(shù)存

入XX所指數(shù)組中,非素數(shù)的個數(shù)通過k傳回。例如,輸入20,則應

輸出4689101214151618。注意:部分源程序給出如下。請勿改

動main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號

中填入所編寫的若干語句。試題程序:

aif^dudcV.tdhhhS>

UinrludrVcooio.h>

#includeVscdio.h>

vt?dproc(intm?i?t?k?mtantJ)

vo*dwutfH>

Nilm>n??tr{IOO]i

prmtf(0\tiPlr??rmietaaintvcrtnumbrr

between10andt001")i

?canf(

procC.&m.Mf)i

pdnif("\u\?Thrr?areHdaon-prime

number*ITMtfurnKdt

+>

prmtf("\nMid*

26.三個整數(shù)a、b、c,由鍵盤輸入,輸出其中最大的數(shù)。

27.請編寫函數(shù)proc(),其功能是:將str所指字符串中除下標為偶數(shù)、

同時ASCH碼值為奇數(shù)的字符外,其余的字符都刪除,串中剩余字符所

形成的一個新串放在t所指的數(shù)組中。例如,若str所指字符串中的內(nèi)容

為ABCDEFG12345,其中字符8的ASCII碼值為偶數(shù),所在元素的下

標為奇數(shù),因此必須刪除;而字符A的ASCII碼值為奇數(shù),所在數(shù)組

中的下標為偶數(shù),因此不應當刪除。依次類推,最后t所指的數(shù)組中的

內(nèi)容應是ACEG。注意:部分源程序給出如下。請勿改動main。函

數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號中填入所寫的

若干語句。試題程序:

4Ouflh

#includeVcomo.h>

8iibdtMkV,idio.h>

#include<*EMLh>

votdprorCrhat?Mr.rKir<[J)

widmaM<)

dmMf(KX)]u(100jt

Mywtrm<*01^1*>i

printfC*\nl*1ea?center?tnngNr.*)<

?can(<,九

proc<Mf?t)?

phnd(*\nTlier?s<ilt

28.假定輸入的字符串中只包含字母和*號。請編寫函數(shù)proc,它的功

能是:將字符串中的前導*號全部刪除,中間和后面的*號不刪除。

例如,若字符串中的內(nèi)容為****a*bc*def*g****,刪除后,字符串

中的內(nèi)容則應當是a*bc*def*g****。

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

請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc的花

括號中填入所編寫的若干語句。

試題程序:

#include<stdio.h=:{>

#include<conio.h>

woidproc(char*str)

(

)

voidmain

charstr[81];

printf("Enterastring:\n");

gets(str);

proc(str):

printf("Thestringafterdeleted:\n");

puts(str);}

29.使用VC++2010打開考生文件夾下progl中的解決方案。此解決方

案的項目中包含一個源程序文件progl.c。在此程序中,請編寫函數(shù)

fun(),它的功能是求出能整除x且不是偶數(shù)的整數(shù),并將這些整數(shù)按從

小到大的順序放在PP所指的數(shù)組中,總個數(shù)通過形參n返回。如x中

的值為30,則有4個數(shù)符合要求,它們是1、3、5、15。注意:部分源

程序在文件progl.c中。請勿改動主函數(shù)main。和其他函數(shù)中的任何內(nèi)

容,僅在函數(shù)fun()的花括號中填入你編寫的若干語句。試題程序:

1#include<conio.h>

2#include<stdio.h>

3#include<stdlib.h>

4voidfun(intx,intpp[],int*n)

5{

6

W}

8voidmain()

9{

10FILE*wf;

11intx,aa[1000],n,i;

12system("CLS");

13printf("\nPleaseenteran

integernumber:\n°);

14scanf&x);

15fun(xzaa,&n);

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

17printf(w%d",aa[i]);

18printf(M\n");

19/**???????found???????*?/

20wf=fopen("out-dat","w");

21fun(30,aa,&n);

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

23fprintf(wf,"%d",aa[i]);

24fclose(wf);

25/?***???*#found?**???***/

?)

30.使用VC++2010打開考生文件夾下progl中的解決方案。此解決方

案的項目中包含一個源程序文件progl.c。在此程序中,已知學生的記

錄由學號和學習成績構(gòu)成,N名學生的數(shù)據(jù)已存入a結(jié)構(gòu)體數(shù)組中。

請編寫函數(shù)fun(),該函數(shù)的功能是找出成績最低的學生記錄,通過形

參將其返回主函數(shù)(規(guī)定只有一個最低分)。已給出函數(shù)的首部,請完成

該函數(shù)。

注意:部分源程序在文件progl.c中。請勿改動主函數(shù)main()和其他函數(shù)

中的任何內(nèi)容,僅在函數(shù)fun()的花括號中填入你編寫的若干語句。

試題程序:

1#include<stdio.h>

2#include<string.h>

3#include<conio.h>

4#include<stdlib.h>

5#defineN10

6typedefstructss

7{charnum[10];

8ints;

9}STU;

10fun(STUa[],STU*s)

11{

12

13)

14voidmain()

15{

16FILE*wf;

17STUa[N]={{"A01",81},{"AO2",89},{"A03",66},{"A04",87},{"

A05",77},{"A06",90},{"A07",79},

{"A08",61},{"A09",80},{"A10",71}},m

18inti;

19system("CLS");

20printf("*****Theoriginaldata*****\n");

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

22printf("No=%sMark=%d\n",a[i],num,a[i].s);

23fun(a,&m);

24printf("****TheResult****\n");

25printf("Thelowest:%s,%d\n",m.num,m.s);

27wf=fopen("out.dat'*,"w");

28fprintf(wf,"%s,%d",m.num,m.s);

29fclose(w0;

四、2.程序修改題(10題)

31.下列給定程序中,函數(shù)fun()的功能是讀入一個字符串(長度<20),

將該字符串中的所有字符按ASCII碼降序排序后輸出o

例如:輸入dafhc,則應輸出hfdcao

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

注意:不要改動main函數(shù),不得增行或刪行,敢不得更改程序的結(jié)構(gòu)。

試題程序:

#include<conio.h>

#include<stdio.h>

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

intfun(chart[])

charc;

inti,j;

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

for(j=i+l;i<strlen(t);j++)

(

c=t[j];

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

t[i]=t[i++];

t[i]=c;

)

)

main()

{

chars[81];

clrscr();

printf("\nPleaseenteracharacter

string:");

gets(s);

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

fun(s);

printf("\nAftersortingdecendingly:\n

%s",s);

32.已知一個數(shù)列從。項開始的前3項:0,0,1,以后的各項都是其相

鄰的前3項之和。下列給定的程序中,函數(shù)fun()的功能是:計算并輸出

該數(shù)列前n項的和sum。n的值通過形參傳入。例如,當n=10時,程序

的輸出結(jié)果應為96.0000000

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

doublefun(intn)

(

doublesum,SO,SI,S2,S;

intk;

sum=1.0;

if(n<=2)

sum=0.0;

s0=0.0;

si=0.0;

s2=1.0;

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

for(k=4;k<n;k++)

{

S=S0+Sl+s2;

Sum+=s;

SO=sl;

Sl=s2;

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

S2=S;

returnsum;

)

main()

(

intn;

clrscr();

printf("InputN=");

scanf("%d",&n);

printf("%f\n",fun(n));

)

33.給定程序M0D11.C中函數(shù)fun的功能是:求出以下分數(shù)序列的前

n項之和。和值通過函數(shù)值返回到main函數(shù)。

23581321

T*2'3'51~3'TT…

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

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

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

tinclude<stdio.h>

2/*?**?*??****found***w*****?*?/

3voidfun(intn)

4{inta,brc,k;doubles;

5s=0.0;a?2;b?1;

6for(k-1;k<?n;k++)<

7/????**???***foundw***?*????**/

8s-s?(Double)a/b;

9c-a;a=a+b;b-c;

10I

11returns;

12}

13main()

14(intn?5;

15printf(w\nThevalueoffunction

is:%lf\nH,fun(n));

16

34.下列給定程序中,函數(shù)fun()的功能是:計算s所指字符串中含有t

所指字符串的數(shù)目,并作為函數(shù)值返回。

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

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

試題程序:

#include<conio.h>

#include<string.h>

#include<stdio.h>

#defineN80

intfun(char*s,char*t)

{intn;

char*p,*r;

n=0;

while(*s)

{P=s;

/****不***不***不*^Qund***不***不*******/

r=P;

while(*r)

if{*r==*p){r++;p++;}

elsebreak;

/******不*******fk)und*不*******不*****/

if(*r==O)

n++;

s++;

}

returnn;

)

main()

{chara[N],b[N];intm;

clrscr();

printf("\nPleaseenterstringa:");

gets(a);

printf("\nPleaseentersubstringb:");

gets(b);

m=fun{a,b);

printf("\nTheresultis:m=%d\n",m);

)

35.給定程序MODU.C中函數(shù)fun的功能是:統(tǒng)計substr所指子字符

串在str所指字符串中出現(xiàn)的次數(shù)。

例如,若字符串為aaaslkaaas,子字符串為as,則應輸出2。

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

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

tinclude<stdio.h>

w

2intfun(charstrrchar*substr)

3(intirnum-0;

4/*???????***?found************/

5for(i-0,str[i]9i>+)

6for(j-i.k-0;substr[k)Mstr[j];

7八??………found

8If(substr[k*l]-f\0f)

9(num**;

10break;

11?

12returnnum;

13

14main()

15J(

16charstr[80]rsubstr(80);

17printf(RInputastring:;

18gets(str);

19printf(wInputasubstring:H);

20gets(substr);

21printffun(strrsubstr));

22

36.給定程序MODH.C中函數(shù)fun的功能是:根據(jù)整型形參m,計算

如下公式的值。

例如,若m中的值為:5,則應輸出:1.46361lo

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

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

linclude<stdio.h>

2doublefun(intm)

3{doubley-1.0;

4inti;

5/???★★-found—

6for(i-2;i<m;i++)

7?found?…………/

8y1/(i*i);

9return(y);

10)

11main()

12{intn-5;

13printf(H\nTheresultis%lf\nw,

fun(n));

14

37.給定程序MODH.C中函數(shù)fun的功能是:將p所指字符串中的所

有字符復制到b中,要求每復制三個字符之后插入一個空格。

例如,在調(diào)用fun函數(shù)之前給a輸入字符串:ABCDEFGHIJK,調(diào)用函

數(shù)之后,字符數(shù)組b中的內(nèi)容則為:ABCDEFGHIJKO

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

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

1*?tinclude<stdio.h>

2?voidfun(char.p,char*b)

3(int1,k-0;

4while(*p)

5{i-1;

6while(i<*3&&*p)<

7/?????*****found**********/

8b(kl-p;

9k++;p++;if

10}

11if(*p)

12(

13/?*********foundw*********/

14b[k++],"

15

16

17

18!)

19main()

20{chara[80]rb[80);

21printf("Enterastring:");gets(a);

22printf(RTheoriginalstring:");

puts(a);

23fun(arb);

24printf(0\nThestringafterinsert

space:puts(b);printf(w\n\n");

25

38.下列給定程序中函數(shù)fun()的功能是;先將在字符串s中的字符按逆

序存放到t串中,然后把s中的字符按正序連接到t串的后面。例如:

當s中的字符串為ABCDE時,則t中的字符串應為EDCBAABCDEO

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*s,char*t)

(

inti,sl;

sl=strlen(s);

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

t[i]=s[sl-l];

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

/*********不***found*不***不***不****

t[sl+i]=s[i];

t[2*sl]-'\0';

)

main()

{chars[100],t[100];

clrscr();

printf("\nPleaseenterstrings:");

scanf("%s",s);

fun(s,t);

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

)

39.下列給定程序中,函數(shù)fun()的功能是:先從鍵盤上輸入一個3行3

列的矩陣的各個元素的值,然后輸出主對角線元素之和。

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

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

試題程序:

#include<stdio.h>

intfun()

inta[3][3],sum;

inti,j;

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

sum=l;

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

{for(j=O;j<3;j++)

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

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

}

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

sum=sum+a[i][i];

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

}

main()

(

fun();

)

40.已知一個數(shù)列從。項開始的前3項:0,0,1,以后的各項都是其相

鄰的前3項之和。下列給定的程序中,函數(shù)fun()的功能是:計算并輸出

該數(shù)列前。項的平方根之和sum。n的值通過形參傳入。例如,當n=10

時,程序的輸出結(jié)果應為23.197745。

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

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu).

試題程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

/*******不*不*不*不*found*不*不*不*不*不*********/

fun(intn)

{doublesum,sO,s1,s2,s;intk;

sum=1.0;

if(n<=2)sum=0.0;

sO=O.O;sl=O.O;s2=1.0;

for(k=4;k<=n;k++)

{s=s0+sl+s2;

sum+=sqrt(s);

sO=sl;sl=s2;s2=s;

)........................................................................

/*******不*不*不*不**found不*字*不*不*不********/

returnsum

)

main()

{intn;

clrscr();

printf("InputN=");

scanf("%d",&n);

printf("%fm",fun(n));

)

五、程序改錯題(2題)

41.下列給定程序中,函數(shù)proc()的功能是:傳人一個整數(shù)n,計算如

下公式的值。t=l/2-l/3-...-l/n例如,若輸入3,則應輸出0.166667。

請修改程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main

()函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:

£mdudr<.kttih

>include<como.h>

??nHtidrVatdio.h>

dkxibleproc<imn)

doublet*?1,Oi

inth

?)

//????found????

//????kxM*d????

VOM!BMM!()

(int?i

'CLS*)i

pnm<<*\tiPlM?eenter1tniegernumbers?\a*)<

pnnxflv\a\BTberesultis/if\n*.proc(m))?

42.下列給定程序中,函數(shù)proc()的功能是逐個比較strl,str2兩個字符

串對應位置中的字符,把比ASCII值大或相等的字符依次存放到str數(shù)

組中,形成一個新的字符串。

例如,strl中的字符串為fshADfg,str2中的字符串為sdAEdi,則str

中的字符串應為sshEdigo

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

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

構(gòu)。

試題程序:

&mcludtV,ldsdh>

ftmcludt<h>

voidproc<ciuir?p.cha/?q.char?cl

Imlk*0?

wlnk<?pI?q)

//????found????

(if<?p>??q)

<£■]■?

<£']一?pt

|(<?p)?i

if<?q>q++i

〃????IOUMI????

voidm>in(>

(charwtrl[10]-ef?hAlXg\wir2[IO]?*>dAEdi*.

?tr[SOj*l*\O*h

proc<Mrl??tr2?iiKr)?

l>nntf<*TheMnn<>trl:*)iput?(9trl>i

ptrntfC*ThrstringMr2,")ipuu(?tr2)t

pru]((<*Tbcresuht*)iputMMr”

六、操作題(2題)

43.請補充main函數(shù),該函數(shù)的功能是輸入兩個正整數(shù)numl和num2,

求這兩個數(shù)的最大公約和最小公倍數(shù)。

例如,若輸入的兩個正整數(shù)為12,4,則它們的最大公約數(shù)為12,最小

公倍數(shù)為4。

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

請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在main函數(shù)的橫線上

填人所編寫的若干表達式或語句。

試題程序:

#include<stdlib.h>

#include<stdio.h>

voidmain

inta,b,numl,num2,t;

system("CLS"):

printf("\nlnputtwonumbers:\n");

scanf("%d,%d",&numl,&num2);

if(numl<num2)

(

a=num2;

b=numl:

)

else

(

a=numl;

b=num2;

)

while([1])

(

t=⑵

a=b;

b=t:

)

printff'greatestcommondivisor:

%d\n",a);

printf("leastcommonmultiple:

%d\n",[3];

44.以下程序運行后的輸出結(jié)果是【】。(注:如果結(jié)果中含有回車,可

加一空格寫在一行,例如:

111

111

111

可以寫成:11111111lo

#include<stdio.h>

mala()

{inti,j,a口[3]={1,2,3,42,6,7,8,9};

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

for(j=i+l;j<3;j++)a[j][i]=O;

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

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

printf("\n");

參考答案

1.77解析:x=(y=4)+(z=3)等價于y=4,z=3,x=y+z=4+3=7。

2.調(diào)試調(diào)試

3.!knahT!knahT解析:程序中myfun.c被包含在T18.C中進行編譯。fun

函數(shù)中用getehar函數(shù)輸入字符并賦給數(shù)組s,每輸入一個字符,數(shù)組下

標n加1,直到遇到回車鍵時輸入結(jié)束。while(n>=0)循環(huán)反序輸出字符

中。所以myfun.c文件用于實現(xiàn)字符串反序的功能。

4.相鄰位置鄰接指針相鄰位置\r\n鄰接指針

5.77解析:此表達式為三目運算符,++a的值為6,b-的值為6,則整

個表達式的值為++a的值,++a的值為7。請注意前綴++,-和后綴++,

一的區(qū)別。

6.

7.333,3解析:本題在while(n++<=l)語句后,直接加了分號,說明如果

while。的條件為真時,該循環(huán)什么都不做;n++是先取n的當前值和I做

比較,然后再將n加1。第一次循環(huán),n=0時,循環(huán)條件n++=O<=l成

立,執(zhí)行循環(huán),然后得到n=l。第二次循環(huán),n=l時,循環(huán)條件n++=l

<=1成立,執(zhí)行循環(huán),然后得到n=2。第三次循環(huán),n=2時,循環(huán)條件

n++=2<=l不成立,不執(zhí)行循環(huán),但在判斷循環(huán)條件時仍將n加1,得

到n=3。退出循環(huán)后執(zhí)行printf語句,第二個printf語句輸出n++,是先

輸出n的當前值3,然后再將n加1,即程序結(jié)束后得到n=4,但輸出

的是3。

8.模塊模塊解析矩形表示的是模塊,箭頭表示的是模塊間的調(diào)用關(guān)系。

用帶實心圓的箭頭表示傳遞的是控制信息,用帶空心圓的箭頭表示傳遞

的是數(shù)據(jù)。

9.1og2n

10.一對多(或1:N)一對多(或1:N)解析:兩個實體集間的聯(lián)系實際上

是實體集間的函數(shù)關(guān)系,這種函數(shù)關(guān)系可以有3種,即一對一(1:1)的聯(lián)

系、一對多(1:N)或多對一(N:1)的聯(lián)系和多對多(N:N)的聯(lián)系。

U.C

12.B解析:continue是結(jié)束本次循環(huán),直接進入到下次循環(huán)中,break用

于循環(huán)語句中的作用是直接跳出本層循環(huán),能從多層循環(huán)中退出的語句

除了goto語句,exit,return等語句也能直接跳出多層循環(huán)。注意:

continue和break語句在while語句中的作用。

13.D

14.D

15.B

16.C

17.D解析:本題考查的知識點是do-while循環(huán)結(jié)構(gòu)循環(huán)執(zhí)行條件的判

斷.使用do-while語句必須注意以下幾點:

先執(zhí)行語句,后判斷表達式。所以,無論一開始表達式的值為“真”還是

“假”,循環(huán)體中的語句至少執(zhí)行一次,這一點與while不同,

如果do-while語句循環(huán)體部分是由多個語句組成,則必須用花括號括起

來,使其形成復合語句。

C語言中的do-while語句是在表達式“真”時重復執(zhí)行循環(huán)體。

在本題中,循環(huán)執(zhí)行判斷條件為while后面括號里的表達式即

p!=12345&&n<3(意思為p不等于12345且n小于3)是否為“真”,由此

可得循環(huán)結(jié)束的條件為:p大于12345或者p小于12345又或者n大于

等于3。選項A的意思是:p的值不等于12345并且n的小于3和while

后面括號里的表達式等價是循環(huán)執(zhí)行的條件而不是循環(huán)結(jié)束的條件,所

以選項A不正確;選項B的意思是:p的值等于12345并且n的值大于

3,不是循環(huán)結(jié)束的條件一個子集,所以選項B不正確;選項C的意思

是:P的值不等于12345或者n的值小于3前一半是結(jié)束條件的子集,

后一部分不是結(jié)束條件,所以選項C不正確;選項D描述的意思是:p

的值等于12345或者你的大于等于3是結(jié)束條件的子集,所以選項D滿

足題意。所以4個選項中D正確。

18.C對象具有封裝性,從外面看只能看到對象的外部特性,對象的內(nèi)部

對外是封閉的。即封裝實現(xiàn)了將數(shù)據(jù)和操作置于對象統(tǒng)一體中。本題答

案為C選項。

19.B解析:在C語言程序中,用單引號把一個字符或反斜線后跟一個特

定的字符括起來表示一個字符常量。選項A)、C)和D)為正確的字符常

量,而選項B)是用雙引號括起來的字符,表示一個字符串常量。

20.D

21.

【解析】根據(jù)題意,所寫函數(shù)要用for循環(huán)實現(xiàn)對整數(shù)1?1000的遍歷;

通過if語句找出能被7或11整除,但不能同時被7和11整除的所有整

數(shù),因為同時被7和11整除的整數(shù)一定能被77整除,且不能被77整

除的數(shù)不一定就是能被7或11整除,可得出表達式“(i%7==0||i%ll==O)

&&i%77!=0";再按題目要求,將找出來的整數(shù)放在a所指的數(shù)組中,

通過n返回這些數(shù)的個數(shù)即可。

22.voidproc(char*str)

\n{

\nchar*p=str;

\nwhile(*p==*)p++;//通過p的移動來達到使p指向第一個不是*

號的字符

\nfor(;*p!=\0;p++,str++)//把從第一個不是*號的字符放到a中

\n*str=*P:

\n*str=\0;//最后用\。作為字符串結(jié)束標志

\n}

\n【解析】題目中要求將字符串中的前導*號全部刪除,首先將指針P移

動到第一個不是*的字符,將指針P之后的字符放入原來的字符串中,

并為新的字符串添加結(jié)束符。

\n

23.voidfun(char*s,chart[])

(

inti,j=0,n;

n=strlen(s);

for(i=0;i<=""p="">

if((i%2)&&(s[i]%2))

{

t|j++]=s[i];/*將下標為奇數(shù)同時ASCII值為奇數(shù)的字符放入數(shù)組

t中*/

)

中]='\0';/*最后加上字符串結(jié)束標志*/

)

本題要求保留下標為奇數(shù)同時ASCII值也為奇數(shù)的字符,其余的所有字

符都刪除。將s字符串中,滿足條件的字符存放到字符串t中。if的條

件表達式為:if(i%2!=0&&s[i]%2!=0)o

24.

voidstrcpy(char*s,char*t)/*copyttos*/

{while((*s++=1ct++)!='\0'))|

)

25.

【解析】題目中要求將所有大于1小于整數(shù)m的非素數(shù)存入xx所指數(shù)

組中,因此需要判斷所有大干1小于m的整數(shù)是否為素數(shù)。將所有大干

1小于m的非素數(shù)放入數(shù)組xx中,并將非素數(shù)的個數(shù)通過形參k傳遞

回主函數(shù)中。

26.main

\n{inta,b,c;

\nprintf(“請輸入三個整數(shù):");scanf("%d,%d,%d”,&a,&b,&c);

\nif(aif(belseprintf(<4max=%d\\n,,,b);

\nelseif(aelseprintf(44max=%d\\n,,,a);}

\n

27.

【解析】題目中要求將字符串str中下標為偶數(shù)、同時ASCII碼值為奇

數(shù)的字符放在數(shù)組t中。首先,需要檢查字符串str中下標為偶數(shù)的字

符的ASCH碼值是否為奇數(shù),將符合要求的字符放在數(shù)組t中。最后,

為新的字符串數(shù)組添加結(jié)束符。

28.voidproc(char*str)

{

char*p=str:

while(*p==*)p++;//通過P的移動來達

到使P指向第一個不是*號的字符

for(;*p!=\0;p++,str++)//把從第一個

不是*號的字符放到a中

*str=*P:

*str=\0;//最后用\0作為字符串結(jié)束標志

)

【解析】題目中要求將字符串中的前導*號全部刪除首先將指針p移動

到第一個不是*的字符,將指針P之后的字符放入原來的字符串中,并

為新的字符串添加結(jié)束符。

29.1voidfun(intx,intpp[],int*n)

2{

3inti,j=0;

4for(i=l;i<=x;i=i+2)/*i的初值為1,步長為2,確保i為奇數(shù)

*/5if(x%i==0)/*將能整除x的數(shù)存入數(shù)組pp中*/6pp[j++]=i;7*n=j;/*傳

回滿足條件的數(shù)的個數(shù)*/8}本題考查:偶數(shù)的判定方法;整除的實現(xiàn)。本

題題干信息:能整除X且不是偶數(shù)的所有整數(shù)。循環(huán)語句中變量i從1

開始且每次遞增2,所以i始終是奇數(shù)。將能整除x的i值存放到數(shù)組

PP中,整除采用求余運算符“%”,即“x%i==O"。最后將數(shù)據(jù)元素個數(shù)j

保存到n中。

30.1fun(STUa[],STU*s)

2{

3inti;

4*s=a[0];/*假設第1個元素值最小*/

5for(i=0;i<N;i++)/*如果在循環(huán)的過程中再發(fā)現(xiàn)比第1個元素值更小的

元素則賦給*s*/

6if(s->s>a[i].s)

7*s=a[i];

8}

題目要求找出結(jié)構(gòu)體數(shù)組元素中的最小值。假設數(shù)組中第1個元素值

最小,即*s=a[0];,如果在循環(huán)的過程中發(fā)現(xiàn)比第1個元素值更小的,

就將指針S指向該元素,直到找到值最小的元素。另外,本題還涉及

結(jié)構(gòu)體中的指向運算符。

31.(1)錯誤:intfun(chart[])正確:voidfun(chart口)(2)錯誤:t[j]=t[i++];

正確:;⑴錯誤:intfun(chart[])正確:voidfun(chart口)\r\n(2)錯

誤:tg]=t[i++];正確:tU]=t[i];解析:錯誤1:該函數(shù)只是對一個字

符串中的元素進行比較大小的操作,并沒有具體的返回值,因此,函數(shù)

的返回值類型應為void。錯誤2:本題的思路是利用選擇法對數(shù)組元素

進行比較。所謂選擇法,是依次用當前取得的元素和它后面的元素進行

比較,在第一個元素和它后面的元素順次比較時,可以借助中間變量來

對兩數(shù)進行交換,要保證這第一個元素始終存放數(shù)組中的最大數(shù),以后

依次挑出次大數(shù),這樣最終的數(shù)組就是有序的。解答本題,只要理解了

選擇法的思想,找到并改正錯誤就容易了。

32.(1)錯誤:for(k=4;k<n;k++)正確:for(k=4;k<=n;k++)(2)錯誤:

s2=s;正確:s2=s;}⑴錯誤:fbr(k=4;k<n;k++)正確:for(k=4;k

<=n;k++)\r\n(2)錯誤:s2=s;正確:s2=s;}解析:錯誤1:循環(huán)中

包括k=n的情況,所以k要取到n之后才結(jié)束循環(huán)。錯誤2:for循環(huán)的

語句要用大括號,在此處少了“}“,應添上。

33.(1)doublefun(intn)(2)s=s+(double)a/b;(l)doublefun(intn)

出5=5+90出吶/b;解析:本題中函數(shù)的功能是求出分數(shù)序列的前n

項之和。首先根據(jù)題干中給出的公式推出每一項之間的關(guān)系,求出每一

項的表達式,然

溫馨提示

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

評論

0/150

提交評論