2021年江蘇省徐州市全國計(jì)算機(jī)等級考試C語言程序設(shè)計(jì)真題(含答案)_第1頁
2021年江蘇省徐州市全國計(jì)算機(jī)等級考試C語言程序設(shè)計(jì)真題(含答案)_第2頁
2021年江蘇省徐州市全國計(jì)算機(jī)等級考試C語言程序設(shè)計(jì)真題(含答案)_第3頁
2021年江蘇省徐州市全國計(jì)算機(jī)等級考試C語言程序設(shè)計(jì)真題(含答案)_第4頁
2021年江蘇省徐州市全國計(jì)算機(jī)等級考試C語言程序設(shè)計(jì)真題(含答案)_第5頁
已閱讀5頁,還剩39頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

2021年江蘇省徐州市全國計(jì)算機(jī)等級考試

C語言程序設(shè)計(jì)真題(含答案)

學(xué)校:班級:姓名:考號:

一、2.填空題(10題)

1.在關(guān)系運(yùn)算中,【】運(yùn)算是對兩個(gè)具有公共屬性的關(guān)系所進(jìn)行的運(yùn)算。

2.數(shù)據(jù)庫技術(shù)的主要特點(diǎn)為數(shù)據(jù)的集成性、數(shù)據(jù)的高【】和低冗余性、

數(shù)據(jù)獨(dú)立性和數(shù)據(jù)統(tǒng)一管理與控制。

3.已知字母A的ASCII碼為65。以下程序運(yùn)行后的輸出結(jié)果是____°

main()

{chara,b;

a='A'+'5'-'3';b=a+'6'-'2';

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

)

4.下面程序的輸出是【】。

main()

{intarr[10],i,k=0;

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

arr[i]=i;

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

k+=arr[i]+i;

printf("%d\n"k);}

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

是【】。

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

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

6.若已知a=10,b=20,則表達(dá)式!a<b的值為[]o

7.下面程序的功能是將一個(gè)字符串str的內(nèi)容顛倒過來,請?zhí)羁铡?/p>

#include<string.h>

main()

{infi,j,[13];charstr[]={"1234567");

for(i=0,j=strlen(str)[14];i<j;i++,j—)

{k=str[i];str[i]=str[i];str[j]=k;}

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

8.fun函數(shù)的功能是:首先對a所指的N行N列的矩陣,找出各行中的

最大數(shù),再求這N個(gè)最大值中最小的那個(gè)數(shù)并作為函數(shù)值返回。請?zhí)?/p>

空。

#include<stdio.h>

#defineN100

intfun(int(*a)[N])

{introw,col,max,min;

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

{for(max=a[row][01,col=l;col<N;col++)

if([])max=a[row][col];

if(row==0)min=max;

elseif([])min=max;

)

returnmin;

)

9.設(shè)函數(shù)findbig已定義為求3個(gè)數(shù)中的最大值,以下程序?qū)⒗煤瘮?shù)

指針調(diào)用findbig函數(shù)。請?zhí)羁铡?/p>

main()

{intfindbig(int,int,int);

int(*f)(),x,y,z,big;

f=[lo

scanf("%d%d%d",&x,&y,&z);

big=(*f)(x,y,z);

printf("big=%d\n",big);

)

10.表示""整數(shù)x的絕對值大于5""時(shí)值為""真””的C語言表達(dá)式是【】。

二、單選題(10題)

11.以下程序的輸出結(jié)果是()。

#defineM(x,y,z)x*y+z

main()

{inta=l,b=2,c=3;

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

A.19B.17C.15D.12

12.數(shù)據(jù)處理的最小單位是0。

A.數(shù)據(jù)B.數(shù)據(jù)元素C.數(shù)據(jù)項(xiàng)D.數(shù)據(jù)結(jié)構(gòu)

13.設(shè)有如下定義和語句:

FILE*fp;

intdata[10],i,n;

fp=fopen(€tabc.txt","r");

文本文件abc.txt中的數(shù)據(jù)為58192765190,其中第1個(gè)數(shù)據(jù)代表的

是它后面數(shù)據(jù)的個(gè)數(shù)。若文件已正確打開,則以下程序段中能將文件

的最后5個(gè)數(shù)據(jù)依次正確讀入數(shù)組data[0]?data[4]中的是()。

A.fscanf(fjD,“%d",&n);

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

fscanf(小,“%d“,&data[i]);

B.i=0;

while(!feof(fp))

{fscanf(電“%d”,&data[i]);

i++;

C.for(i=0;!feof(fp);i++)

fscanf(%"%d”,&data[i]);

D.i=0;

fscanf(中,"%d",&n);

i++;

while(!feof(fp))

(

fscanf(中,"%d”,&data[i]);

i++;

14.(7-63541-2)堆排序,升序排列,3的位置改變幾次()

A.lB.2C.3D.4E.5F.6

15.以下程序運(yùn)行后,輸出結(jié)果是()

#include<stdio.h>

ss(char*s)

{char*p=s;

while(*p)p++return(p-s);}

main()

{char*a="abded”

inti;i=ss(a);printf("%d\rT,i);}

A.8B.7C.6D.5

16.以下不能作為合法常量的是()。

A.'cd'B.1.234e04C.”\a"DAO11'

,,

17.若變量已經(jīng)定義且正確賦值,則針對程序段“temp=a;a=b;b=temp;1

以下敘述中正確的是()。

A.C語言的順序結(jié)構(gòu)不允許將多條語句寫在一行里

B.程序順序結(jié)構(gòu)對于此段程序是從左至右依次執(zhí)行的

C.此程序段的執(zhí)行順序是,先執(zhí)行"b=temp;",再執(zhí)行“a=b;",最后執(zhí)行

"temp=a;"

D.將此段程序的前兩個(gè)分號改成逗號,后面一個(gè)不變,則不能實(shí)現(xiàn)a和

b值的交換

18.有以下程序段:

inti,n;

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

{n=rand()%5;

switch(n)

{case1:

case3:printf("%d\n",n);break;

case2:

case4:print?("%d\n",n);continue;

case():exit(O);

)

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

)

以下關(guān)于程序段執(zhí)行情況的敘述,正確的是()。

A.for循環(huán)語句固定執(zhí)行8次

B.當(dāng)產(chǎn)生的隨機(jī)數(shù)n為4時(shí)結(jié)束循環(huán)操作

C.當(dāng)產(chǎn)生的隨機(jī)數(shù)n為1和2時(shí)不做任何操作

D.當(dāng)產(chǎn)生的隨機(jī)數(shù)n為0時(shí)結(jié)束程序運(yùn)行

19.為非法的字符串常量()。

A.“case”B.""C."056''D/123,

20.有以下定義和語句:

structworkers

{intnum;charname[20];charC;

struct

{intday;intmonth;intyear;)S;

};

structworkersw,*pw;

pw=&w;

能給w中year成員賦1980的語句是()。

A.*pw.yeai-1980;

B.w.year=1980;

C.pw->year=1980

D.w.S.year=1980;

三、程序設(shè)計(jì)題(10題)

21.請編寫函數(shù)proc(),其功能是:計(jì)算并輸出下列多項(xiàng)式的值。

S=l+1/(1+2)+1/(1+2+3)+...+1/(1+2+3+…+m)

例如,若主函數(shù)從鍵盤給m輸入20后,則輸出為s=l.904762c

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

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

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

試題程序:

二include<sidio.h>

doubleproc(intm)

voidmain()

(

ininu

doublest

printf(*\nlnputms*)i

scanf("%d"?&,m)?

Aproc(m)i

print(("\n\nn-*-%f\n\n"?5>i

\

22.n個(gè)人的成績存放在score數(shù)組中,請編寫函數(shù)proc(),它的功能是

將低于平均分的人數(shù)作為函數(shù)值返回,將低于平均分的分?jǐn)?shù)放在down

所指的數(shù)組中。例如,當(dāng)score數(shù)組中的數(shù)據(jù)為{99,80,40,56,59,

84,60,76,100}時(shí),函數(shù)返回的人數(shù)應(yīng)該是4,down中的數(shù)據(jù)應(yīng)為

40565960。注意:部分源程序給出如下。請勿改動(dòng)main()函數(shù)和其

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

語句。試題程序:

9aneludek>

9inriudeVcooio.h>

Sinclude<Ndxxk>

SincludeVntrtng.h>

uMproc(miscorrf;.mt???m4owrCl>

raidmainC)

(

inil?n?down[9]t

mi9H9]-{”,>0?40.”?5九弘?

?o.re.iooh

<ywtrm(*CLS*)i

fl*pfoHMOfv*9?down>?

pnntf(*\ndowntotbeaverage?corraret*)?

for<i,Oiynii+?>

pnntf(*%d*?downfQ>i

prmt"*\a*)t

j

23.請編一個(gè)函數(shù)voidproc(intintpp[N]),tt指向一個(gè)M行N

列的二維數(shù)組,求出二維數(shù)組每行中最大元素,并依次放入pp所指的

一維數(shù)組中。二維數(shù)組中的數(shù)已在主函數(shù)中給出。

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

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

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

試題程序:

UmcludvVHdso.b>

UinclydrVemo.h>

sinclude<adlib.h>

9defineM3

■defixN4

votdproc<mttt[p^[N])

vmdmain(>

Ml?vCMKN]T(34*M?84.fth

tn.14.93.1??

(28?M.”?”小

Milp[N]*t?j?ki

*CI-S>)?

prwtf("Thrn<inaldata?

loKi-0itVMit++)

foHj-0>j<Ni>4-+)

pnntfC?%6d"..lr[iXj]》.

prinrfC

pnxizr.p)i

prtciiK*\ttThtresult

(or,卜+)

pnnlhtfX4d"?pCll])|

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

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

其功能是找出2xM整型二維數(shù)組中最大元素的值,并將此值返回調(diào)用

函數(shù)。

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

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

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

試題程序:

#defineM4

#include<stdio.h>

intfun(inta[][m])

(

)

voidmain()

{

intarr[2][M]={5,8,3,45,76,-4,12,82);

printf("max=%d\n",fiin(arr));

)

25.請編寫函數(shù)fun,其功能是:找出2XM整型二維數(shù)組中最大元素的

值,并將此值返回調(diào)用函數(shù)。

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

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

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

#include<stdio.h>

WdrHneM4

intfun(int](M;)

rnaint)

intarr[2]jM]=5.76.-4.12.82:voidNONO():

printf("max=%d\n*'.fun(arr));

NONO();

voidN()NO()

”?本雨效用于打開文件,■人數(shù)據(jù),調(diào)用函數(shù),輸出敷爆?關(guān)時(shí)文件??/

FILE?wf;

intarr;1[M]=15.8.3,90.76,-4,12,82|:

wf=fopen('*(Mil.?"ww);

fprintf(wf.Mmax=%d\nw,fun(anr));

frlc?c(wf);

26.N名學(xué)生的成績已在主函數(shù)中放人一個(gè)帶頭節(jié)點(diǎn)的鏈表結(jié)構(gòu)中,h指

向鏈表的頭節(jié)點(diǎn)。請編寫函數(shù)fun,其功能是:求出平均分,并由函數(shù)

值返回。

例如,若學(xué)生的成績是:8576698591726487,則平均分應(yīng)當(dāng)是:

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

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

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

include<stdio.h>

Windude<atdlib.h>

#dc£neN8

stnictdisl

)doubleg;

Stractalia!?next;

11

typcdcfstructslistSTRECj

doublefun(STREC■h)

STREC?creat(double?s)

ISTREC?h.?p,?q;inti=0;

h?p?(STREC?)malloc(sizeof(STREC));p->?=0;

while(i<N)

|q=(STREC?)malloc(sizeo((STREC));

q->???[i];i??;p->next=q;p=q:

I

p->next=0;

returnh;

I

outlist(STRECeh)

|STREC?p;

psh->next;printf(*head");

do

Iprintf(w->%4.IP,p->?);p=p->neirt;|

while(p!?0);

printf("\n\n*)(

I

main()

|doubles[N]?(85.76,69,85,91,72.64,871,?ve;

voidNONO()s

STREC?h|

h=creai(?)ioutlist(h);

ave=fun(h);

printf(wave=%6.3An".ave);

NONO();

I

voidNONO()

1/?本麗效用于打開文件.輸入數(shù)據(jù),調(diào)用函數(shù)出數(shù)據(jù),關(guān)閉文件。?/

FILE?in,?out?

intitj;doublea[N],ave;

STREC,h;

in=(open("in.dat",*r*);

out=fopen("out.

for(is0;i<10;i)

I

for(卜0;j<N;?)fscanf(in."%lfj.

h=creai(s);

ave=fun(b);

fjpnnl£(outt"%6.31f\n",?ve);

I

£cloee(in);

fdo?e(out);

27.

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

是:只刪除字符串前導(dǎo)和尾部的*號,串中字母之間的*號都不刪除。形

參m給出了字符串的長度,形參h給出了字符串中前*號的個(gè)數(shù),形參

e給出了字符串中最后*號的個(gè)數(shù)。在編寫函數(shù)時(shí),不得使用C語言提

供的字符串函數(shù)。例如,若字符串中的內(nèi)容為****a*bc*de伴g****,刪

除后,字符串中的內(nèi)容則應(yīng)當(dāng)是a*bc*def*g。注意:部分源程序給出如

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

()的花括號中填入所編寫的若干語句。試題程序:

MtnHude〈MdaO.h>

?indudcVeomah>

voedprocCduir?a?mitn?inth?inte)

voedIMM><>

char?f.?li

pnnlf(*Et)tcrastringAn*)i

whilc<?t>

?—/■>如宇用?翁長才

I一一?。告計(jì)t指向字件地尾恁

wtulcX?)

(1-----

/一個(gè)字統(tǒng)If/那?'的

個(gè)e

whde<

(什?ifn*?■)

/指汁f■的■一個(gè)字■/?施什一/'」,個(gè)做

proc<??m.(n?m)i

print"*The?tnn<afterdeleted?\n*>t

puw(?)I

28.

編寫函數(shù)proc,它的功能是:計(jì)算和輸出下列級數(shù)的和。S=1/(12)

+1/(23)+...+1/(n(n+1))例如,當(dāng)n=20時(shí),函數(shù)值為0.952381°

注意:部分源程序給出如下。請勿改動(dòng)main()函數(shù)和其他函數(shù)中的

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

題程序:

smdudeV

uinciiMic<cocuo.h>

9include<widxx.b>

doubleproH加1n>

voidauiin<>

??YiUrtn<*C1-S*)i

pnni??proc(101)

29.請編寫函數(shù)proc,該函數(shù)的功能是:將M行N列的二維數(shù)組中的

數(shù)據(jù),按行的順序依次放到一維數(shù)組中,一維數(shù)組中數(shù)據(jù)的個(gè)數(shù)存放

在形參n所指的存儲單元中。

例如,若二維數(shù)組中的數(shù)據(jù)為

13233343

14243444

15253545

則一維數(shù)組中的內(nèi)容應(yīng)該是132333431424344415253545。

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

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

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

試題程序:

#include<stdio.h>

voidproc(int(*s)[103,int*b,int*n,intrain,intnn)

(

)

voidmain

(

intarr[10][10]={{33,33,33,33),{44,44,44,44},

{55,55,55,55}),i,j;

inta[100]={o),n=o;

printf("Thematrix:\n");

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

(

fbr(=O;j<4;j++)

printf("%3d",arr[i][j]):

printf("\n");

)

proc(arr,a,&n,3,4):

printf("TheAarray:\n");

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

prmtf("%3d",a[i]):

printf("\n\n");

)

30.請編寫函數(shù)proc(),對長度為9個(gè)字符的字符串,除首、尾字符外,

將其余7個(gè)字符按ASCH碼值降序排列。例如,原來的字符串為

HabcdefA,則排序后輸出為HfedcbaA.注意:部分源程序給出如下。

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

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

二mdud*V.Atrin<.h>

Sinclude<Ndbb.h>

&mcludeVsidio.h>

*mrludrVctyp*.h>

9mcludr<emo.h>

voidproc<cimr?m?m<num)

voidaMin<)

chart(103i

?yuteoiC*CLS*)t

prinik?■人9個(gè),符的字用事J)?

fvlMth

proc(t?9)t

pnntfC*\nS?*<t)i

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

31.下列給定程序中函數(shù)fun()的功能是:將長整型數(shù)中每一位上為偶數(shù)

的數(shù)依次逆向取出,構(gòu)成一個(gè)新數(shù)放在t中。高位在低位,低位在高位。

例如當(dāng)s中的數(shù)為25846513時(shí),t中的數(shù)為6482。請改正函數(shù)fun()

中的錯(cuò)誤,使它能得出正確的結(jié)果。

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

試題程序:

#include<stdio.h>

#include<conio.h>

voidfun(longS,long*t)

(

intd;

longsl=l,i=l;

*t=0;

while(s/i>0)

i=i*10;

i=i/10;

while(s>0)

d=s/i

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

if(d%2!=0)

/**************************/

t=d*sl+t;

sl*=10;

)

S=S%i;

i=i/10;

)

)

main()

(

longS,t;

clrscr();

pr血f("\nPleaseenterS:");

scanf("%ld",&s);

fun(S,&t);

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

32.下列給定程序中,函數(shù)fun()的作用是,將字符串tt中的大寫字母都

改為對應(yīng)的小寫字母,其他字符不變。例如,若輸入"Ab,cD”,則輸出

"ab,cd"o

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

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

試題程序:

#include<stdio.h>

#include<string.h>

#include<conio.h>

char*fun(chartt[])

(

inti;

for(i=0;tt[i];i++)

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

{if(('A,<=tt[i]||(tt[i]<='z'))

叫+=32;}

return(tt);

)

main()

{inti;

chartt[81];

clrscr();

printf("\nPleaseenterastring:");

gets(tt);

printf("\nTheresultstringis:\n%s",fun(tt));

)

33.下列給定程序中,函數(shù)fun()的功能是:用冒泡法對6個(gè)字符串按由

小到大的順序進(jìn)行排序。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#defineMAXLINE20

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

fun(char*pstr[6])

{inti,j;

char*p;

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

{for(j=i+l;j<6;j++)

/*************found**************!

{if(strcmp(*(pstr+i),pstr+j)>0)

p=*(pstr+i);

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

*(pstr+i)-pstr+j;

*(pstr+j)=p;

)

}

main()

{inti;

char*pstr[6],str[6][MAXLINE];

clrscr();

for(i=0;i<6;i++)pstr[i]=str[i];

printf("\nEnter6string(lstringateach

line):\n");

for(i=0;i<6;i++)scanf("%s",pstr[i]);

fun(pstr);

printf("Thestringsaftersorting:\n");

for(i=0;i<6;i++)printf("%s\n",pstr[i]);

34.下列給定程序中,是建立一個(gè)帶頭結(jié)點(diǎn)的單向鏈表,并用隨機(jī)函數(shù)

為各結(jié)點(diǎn)數(shù)據(jù)域賦值。函數(shù)fun的作用是求出單向鏈表結(jié)點(diǎn)(不包括頭結(jié)

點(diǎn))數(shù)據(jù)域中的最大值,并且作為函數(shù)值返回。

請改正程序指定部位的錯(cuò)誤,使它能得到正確結(jié)果。

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

[試題源程序]

#include<stdio.h>

#include<stdlib.h>

typedefstructaa

intdata;

structaa*next;

}NODE;

fun(NODE*h)

intmax=-l;

NODE*p;

/**********************/

p=h;

while(p)

if(p->data>max)

max=p->data;

/************&^und************/

p=h->next;

)

returnmax;

}

outresult(ints,FILE*Pf)

fprintf(pf,"\nThemaxinlink:%d\n",s);

)

NODE*creatlink(intn,intm)

(

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

inti,x;

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

h->data=9999;

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

(

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

s->data=rand()%m;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,"\nTHELIST:\n\nHEAD");

while(P)

(

fprintf(pf,>%d",P->datA);p=p->next;

)

fprintf(pf,"\n");

)

main()

(

NODE*head;intm;

head=cteatlink(12,100);

outlink(head,stdout);

m=fun(head);

printf("\nTHERESULT"");

outresult(m,stdout);

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

例如:輸入510,結(jié)果為minis50

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

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

試題程序、

#include<stdio.h>

#include<conio.h>

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

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);

)

36.給定程序M0D11.C中函數(shù)fun的功能是:首先將大寫字母轉(zhuǎn)換為

對應(yīng)小寫字母;若小寫字母為a?u,則將其轉(zhuǎn)換為其后的第5個(gè)字母;

若小寫字母為v?z,使其值減21。轉(zhuǎn)換后的小寫字母作為函數(shù)值返回。

例如,若形參是字母A,則轉(zhuǎn)換為小寫字母f若形參是字母W,則轉(zhuǎn)換

為小寫字母b。

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

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

finclude<stdio.h>

2*include<ctype.h>

3charfun(charc)

4{if(c>-fA'&&c<-Z)

5/…………round

6OC+32;

7if(O-^,&&c<?tut)

8w<rw****wfouncj*****?*??????/

9c-c-5;

10elseif(c>-'v'z?)

11c?c-21;

12!returnc;

13i)

14;main()

{charclrc2;

16printf(w\nEnteraletter(A-Z):

);cl-getchar();

17if(isupper(cl))

18(c2-fun(cl);

19printf(w\n\nTheletter\1%c\1

changeto\'%c\'\n”,clrc2);

20}

21elseprintf(R\nEnter(A-Z)!\nw);

22)

37.下列給定程序中,函數(shù)fun()的功能是;利用插入排序法對字符串中

的字符按從小到大的順序進(jìn)行排序。插入法的基本方法是:先對字符串

中的頭兩個(gè)元素進(jìn)行排序,然后把第3個(gè)字符插入到前兩個(gè)字符中,插

入后前3個(gè)字符依然有序;再把第4個(gè)字符插入到前3個(gè)字符中,待排

序的字符串已在主函數(shù)中賦予。

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

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

試題程序:

#include<String.h>

#include<stdio.h>

#defineN80

voidinsert(char*aa)

{ihti,j,n;charch;

n=strlen(aa);

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

{c=aa[i];

j=i-l;

while((j>=0)&&(ch<aa[j]))

{aa[j+l]=aa[j];

j-s

}

aa[j+l]=ch;

)

main()

{chara[N1="QWERTYUIOPASDFGHJKIMNBVCXZ";

inti;

printf("Theoriginalstring:%s\n",a);

insert(a);

printf("Thestringaftersorting:

%s\n\n",a);

38.下列給定程序中,函數(shù)fun()的功能是::求k!(k<13),所有階乘的

值作為函數(shù)值返回。例如:若k=10,則應(yīng)輸出3628800。

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

注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更

改程序的結(jié)構(gòu)。

試題程序:

#include<conio.h>

#include<stdio.h>

longfun(intk)

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

ifk>0

return(k*fun(k-1));

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

elseif(k=0)

return1;

}

main()

{intk=10;

clrscr();

print,("%d!=%ld\n",k,fun(k));

39.給定程序中,函數(shù)fun()的功能是:使數(shù)組中的元素的值縮小5倍。

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

floatm[10];

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

intfun(void)

(

intj;

printf("Insubfuncaftercalling\n");

for(j=O;j<10;j++)

/*************■^Qund**************/

print("%f",m[j]%5);

)

main()

inti;

printf("Inmainbeforecalling\n");

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

m[i]=i+20;

printf("%f",m[i]);

)

fun();

printf("\nlnmainaftercalling\n");

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

printf("%f",m[i]/5);

)

40.下列給定程序中,函數(shù)fun()的功能是;求S的值。設(shè)

S=(22/l*30))*(42/(3*5))*(62/(5*7))*...*(2k)2/((2k-l)*(2k+l))

例如,當(dāng)k為10時(shí),函數(shù)的值應(yīng)為1.533852。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

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

fun(intk)

{ihtn;floats,w,p,q;

n=l;

s=1.0;

while(n<=k)

{w=2.0*n;

p=w-1.0;

q=w+1.0;

s=s*w*w/p/q;

n++;

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

returns

)

main()

{clrscr();

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

}

五、程序改錯(cuò)題(2題)

41.

下列給定程序中,函數(shù)fun的功能是:計(jì)算整數(shù)n的階乘。

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

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

構(gòu)。

試題程序:

#include<stdlib.h>

#inclu<ie<stdio.h>

doublefunfintn)

(doubleresuh=J.0;

while(n>l&&n<170)

/*****************Cund*********K*******/

result*--n;

/*****************%umj*****************/

Retum;

voi<imain()

fintn;

systein(,,CLS,t);

printf(MEnteraninteger:r,);

3canf("%d",&n);

printf("\n\n%d!=%IdXnXn11,nJnn(n)):

)

42.下列給定程序中,fun()函數(shù)的功能是:求3個(gè)數(shù)的最小公倍數(shù),

例如,給變量a、b、c、分別輸入15、11、2,則輸出結(jié)果應(yīng)當(dāng)是330。

請修改函數(shù)中的錯(cuò)誤,得出正確的結(jié)果。注意:不要改動(dòng)main()函

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

stnclvdcb>

mtlun<inty?imt>

mli.irmp.a-nu

//????found????

,■11

letup—m1?一11

//????foufui????

whiie<irrnp?■(>&&?!—0>

tiT如.

rviumh

voidITUIMIC)

ini??b?c?h

pnntf<*laput?bci*)?

?canf(*Md%dSr.&a.&b.(.c)i

pntitffKd?bw%d?c-Hd\n**B?b?c)i

i*(ua(a?l>?€)i

^nnifCThrfmosmn!eonxnoDmultiple訪K<f\n**i>t

六、操作題(2題)

43.請補(bǔ)充main()函數(shù),該函數(shù)的功能是:從鍵盤輸入一個(gè)長整數(shù),如

果這個(gè)數(shù)是負(fù)數(shù),則取它的絕對值,并顯示出來。例如,輸入>123456,

結(jié)果為:123456o注意:部分源程序給出如下。請勿改動(dòng)main()函

數(shù)和其他函數(shù)中的任何內(nèi)容,僅在橫線上填入所編寫的若干表達(dá)式或語

句。試題程序:

Paiclud*

9mrludr<Mdio.h>

0MiciudeVenio.h>

voidm*in<)

longintBum

?y?tcfn<eCLS*>i

printf(aEDICTtbcdafaiVB*)?

tcaafc<1J>?

p>nnff(*???theabeolutrrtivr???\B>>i

if(nuni<CO)

m

prmtfl13】>?

44.下列給定程序中,函數(shù)fun()的功能是:應(yīng)用遞歸算法求某數(shù)a的平

方根。求平方根的迭代公式如下:

x,=(xe+-)/2

Xo

例如,2的平方根為1.414214。

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

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

試題程序:

#include<math,h>

#include<stdio.h>

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

fun(doublea,doublexO)

{doublexl,y;

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

/*************fk)und**************!

if(fabs(xl-xO)>0.00001)

y=fun(a,xl);

elsey=xl;

returny;

main()

{doublex;

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

printf("Thesquarerootof%lfis

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

參考答案

1.自然連接自然連接解析:在關(guān)系運(yùn)算中,自然連接運(yùn)算是對兩個(gè)具有

公共屬性的關(guān)系所進(jìn)行的運(yùn)算。

2.共享性共享性解析:數(shù)據(jù)庫技術(shù)的主要特點(diǎn)有以下幾個(gè)方面:數(shù)據(jù)的

集成性,數(shù)據(jù)的高共享性與低冗余性,數(shù)據(jù)的獨(dú)立性,數(shù)據(jù)統(tǒng)一管理與

控制。

3.67G67G解析:字符型變量中保存的是某個(gè)字符的ASCII碼值,是一

個(gè)整數(shù),因此字符型變量的算術(shù)運(yùn)算和整型變量并無區(qū)別。所以。a=

'A'+'5'-3='A'+('5'=3)='A'+2=65+2=67:b=a+'6'=2='C'+('6'-2)='C'+4='G'。

最后分別按十進(jìn)制整數(shù)和字符形式輸出a和b的值為:67G。

4.1212解析:本題通過第一個(gè)for循坪將數(shù)組arr[0]-arr[9]分別賦值為0-

9,通過第二個(gè)for循環(huán)的三次循環(huán)累加,求出結(jié)果為12,具體分析如

下:

i=l:k=0+arr[l]+l即k=2;

i=2:k=2+arr[2]+2即k=6;

i=3:k=6+arr[3]+3即k=12;

5.33解析:這里:b-5=4,a-=4之后a的值為6,并把它賦給c。此時(shí)b

的值并未被改變。在第2個(gè)表達(dá)式中,也只有賦值表達(dá)式b=3改變了b

的值。所以兩行語句執(zhí)行完畢,b的值應(yīng)該為3。

6.11解析:計(jì)算表達(dá)式!a<b,先計(jì)算!a,因a的值為10,!a的值為0,

而關(guān)系表達(dá)式0<20為真,所以表達(dá)式!a<b的值為1。

7.

顛倒一個(gè)字符串中的字符,就是首尾對應(yīng)的元素兩兩交換。簡單地可

用兩個(gè)游標(biāo)變量i和j,i是前端元素的下標(biāo),j是后端元素的下標(biāo),交

換以這兩個(gè)變量值為下標(biāo)的元素str[i]和開始時(shí),i的值為0,j

的值為字符串末元素的下標(biāo)(字符串長度減1)。每次交換后,i增1,j

減1。繼續(xù)交換的條件是str[i]位于str[j]的前面,即i<j字符串末元素

的下標(biāo)是它的長度減1,所以在第二個(gè)空框處應(yīng)填入-1。程序?yàn)榱私粨Q

str[i]和使用了變量k,該變量應(yīng)在程序的變量定義部分中一起

定義,所以在第一個(gè)空

\r\n

\r\n

8.a[row][c01]>max或max<a[row][col]max<min或min>

maxafrow][c01]>max或max<a[row][co1]\r\nmax<min或min>max解

析:本題有兩層for循環(huán),函數(shù)首先定義了整型變量row、col、max和

min,其中row用于外循環(huán)的循環(huán)變量,col用于內(nèi)循環(huán)的循環(huán)變量,max

記錄每行中的最人值,min記錄所有行最大值中的最小值。在內(nèi)循環(huán)中,

首先給max賦初值為每行的第0個(gè)元素值,然后從第一個(gè)開始依次與

max進(jìn)行比較。如果大于max則將其值賦給max,當(dāng)每一行循環(huán)結(jié)束,

max記錄了每一行的最大值。所以第一個(gè)空應(yīng)該填a[row][col]>max或

max<a[row][col)o退出內(nèi)循環(huán),在第一次退出內(nèi)循環(huán)時(shí),將min賦初

值為第。行的max,然后在每次退出內(nèi)循環(huán)時(shí),將min和每行的max比

較,如果大于max,則將max值賦min,所以第二個(gè)空應(yīng)該填max<min

或min〉max,當(dāng)退出外循環(huán)時(shí),rain為所有行中的最大值的最小值。

9fndbigfindbig解析:f是指向函數(shù)的指針變量,根據(jù)題意要求,空格

處應(yīng)填入findbigo

本題目考查:C語言中指向函數(shù)的指針變量定義的一般形式為;

數(shù)據(jù)類型標(biāo)識符(時(shí)旨針變量名X);

“數(shù)據(jù)類型標(biāo)識符”表示函數(shù)返回值的類型。

函數(shù)的調(diào)用可以通過函數(shù)名調(diào)用,也可以通過函數(shù)指針調(diào)用。在給函數(shù)

指針變量賦值時(shí),只需給出函數(shù)名而不必給出參數(shù)。(*p)()表示定義一個(gè)

指向函數(shù)的指針變量,專門用來存放函數(shù)的入口地址,可以先后指向不

同的指針變量。用函數(shù)指針調(diào)用函數(shù)時(shí),只需要將(*p)代替函數(shù)名即可,

在(*可之后的括號中,根據(jù)需要寫上參數(shù)。

10.x>5||x<-5x<-5或x<-5||x>5x>5||x<-5,x<-5或x<-5||x>5解

析:要使整數(shù)x的絕對值大于5,則x大于5或x小于5,用C語言表

示即為:x>5||x<-5或者x<-5||x>50故本題答案為;x>5||x<-5或者

x<-5||x>50

11.D

M(a+b,b+C,c+a)=a+b*b+c+c+a=l+2*2+3+3+l=12,注意x*y+z而不

是(x)*(y)+z。

12.C解析:數(shù)據(jù)處理的最小單位是數(shù)據(jù)項(xiàng)油若干數(shù)據(jù)項(xiàng)組成數(shù)據(jù)元素;

而數(shù)據(jù)是指能夠被計(jì)算機(jī)識別、存儲和加工處理的信息載體;數(shù)據(jù)結(jié)構(gòu)

是指數(shù)據(jù)之間的相互關(guān)系和數(shù)據(jù)運(yùn)算。故正確答案為選項(xiàng)C)。

13.A由題意可知,文件abc.txt中存放了6個(gè)整數(shù)。其中第1個(gè)表示后

續(xù)數(shù)據(jù)的個(gè)數(shù)。要將最后5個(gè)數(shù)據(jù)讀入數(shù)組data中,需要讀取數(shù)據(jù)的個(gè)

數(shù)為5,所以首先調(diào)用fscanf函數(shù),將5讀入整型變量n中;接著通過

for循環(huán),i分別取值O-n-I,調(diào)用fscanf函數(shù)將n個(gè)整數(shù)讀入

data[0]?data[n-l]中。故本題答案為A選項(xiàng)。

14.B

15.D

16.A字符常量是使用單引號標(biāo)注的單個(gè)字符,選項(xiàng)A錯(cuò)誤;選項(xiàng)B屬于

浮點(diǎn)數(shù)常量,正確;選項(xiàng)C屬于轉(zhuǎn)義字符常量,正確;選項(xiàng)D屬于轉(zhuǎn)義字

符,代表八進(jìn)制數(shù)011的ASCII值的字符,正確。本題答案為A選項(xiàng)。

17.BC語言允許將多條語句寫在一行,選項(xiàng)A錯(cuò)誤;題干中的語句是從

左至右依次執(zhí)行的,選項(xiàng)B正確,選項(xiàng)C錯(cuò)誤。題干中的程序前兩個(gè)分

號改成逗號,就構(gòu)成了逗號表達(dá)式。逗號表達(dá)式會依次從左到右計(jì)算各

個(gè)表達(dá)式,整個(gè)表達(dá)式的值是最后一個(gè)表達(dá)式的值,所以此例也可以實(shí)

現(xiàn)a和b值的交換,選項(xiàng)D錯(cuò)誤。故本題答案為B選項(xiàng)。

18.A

程序中的if循環(huán)是固定地執(zhí)行8次,屬于計(jì)數(shù)器,程序是從中隨機(jī)抽

取一個(gè)數(shù),然后對5進(jìn)行求余再輸出,共抽取8個(gè)數(shù)。所以答案為

Ao

19.D

20.D

結(jié)構(gòu)workers中的成員s是一個(gè)嵌套的結(jié)構(gòu)類型定義,因此在給year

賦值時(shí),要用運(yùn)算在深入一層訪問到最基本的成員year,只有D

項(xiàng)反映出了這一點(diǎn)。

21.

【解析】由題目中所給公式可知,多項(xiàng)式的值為m項(xiàng)的和。多項(xiàng)式每

一項(xiàng)的分子均為1,第i項(xiàng)的分母為1?i所有整數(shù)的和。根據(jù)這個(gè)特

點(diǎn),通過m次循環(huán)求出多項(xiàng)式的每一項(xiàng)并求和。最后將多項(xiàng)式的和返

回到主函數(shù)中。

22.

【解析】要找到所有學(xué)生中成績低于平均分?jǐn)?shù)的人數(shù),首先需要算出所

有學(xué)生的平均成績。然后將所有學(xué)生的成績與平均成績相比較。將低于

平均分?jǐn)?shù)學(xué)生的記錄存放在新的數(shù)組中,并將低于平均分?jǐn)?shù)的學(xué)生數(shù)返

回給主函數(shù)。

23.

【解析】按照題目中要求,求出二維數(shù)組每行中最大元素,并依次放

入pp所指的一維數(shù)組中。首先比較二維數(shù)組中每一行的元素,然后找

出每一行中的最大元素,放入一維數(shù)組pp中,最后返回到主函數(shù)當(dāng)

中。

24.intfun(inta[][m])

(

inti,j,max=a[O][O];

/*對二維數(shù)組進(jìn)行遍歷*/

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

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

if(max<a[i][j])<p=""></a[i][j])<>

/*將最大值保存在max中*/

max=a[i皿;

returnmax;

)

因?yàn)閿?shù)組是二維數(shù)組,所以應(yīng)使用兩層for循環(huán)嵌套。使用for循環(huán)語

句時(shí)需注意循環(huán)變量的取值范圍。

此類求最大值或最小值的問題,可以采用逐個(gè)比較的方式。遍歷數(shù)組

中所有元素,從中找出數(shù)組的最大值或最小值。首先定義變量max來

存放數(shù)組的第1個(gè)元素的值,然后利用for循環(huán)逐個(gè)找出數(shù)組中的元

素,并與變量max比較。如果元素值大于max,則將該值賦給max。

循環(huán)結(jié)束后max的值即為數(shù)組最大值。最后將該值返回。

該類題目考查較多,需要掌握逐個(gè)比較的方法。對于m*n二維數(shù)組,

采用逐個(gè)查找的方法,代碼實(shí)現(xiàn)如下:

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

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

25.

【考點(diǎn)分析】

本題考查:求數(shù)組的最大值,需要運(yùn)用循環(huán)語句,因?yàn)閿?shù)組是二維數(shù)

組,所以應(yīng)使用二層for循環(huán)嵌套。使用for循環(huán)語句時(shí)需要注意循環(huán)

變量的取值范圍。

【解題思路】

此類求最大值或最小值的問題,我們可以采用逐個(gè)比較的方式,要求

對數(shù)組中所有元素遍歷一遍,并且從中找出數(shù)組最大值或最小值。首

先定義變量max存放數(shù)組中的第一個(gè)元素的值,然后利用for循環(huán)逐

個(gè)找出數(shù)組中的元素,并與max比較,如果元素值大于max,則將該

值賦予max,循環(huán)結(jié)束后max的值即為數(shù)組最大值,最后將該值返

回。

【解題寶典】

該類題目考查較多,要掌握逐行比較的方法。對于m*n二維數(shù)組,如

采用逐行查找方法,代碼實(shí)現(xiàn)為:

26.

【考點(diǎn)分析】

本題考查:鏈表的操作,對鏈表的主要操作有以下幾種:建立鏈表、

結(jié)構(gòu)的查找與輸出、插入一個(gè)結(jié)點(diǎn)、刪除一個(gè)結(jié)點(diǎn)。

【解題思路】

題目要求求鏈表中數(shù)據(jù)域的平均值,應(yīng)首先使用循環(huán)語句遍歷鏈表,

求各結(jié)點(diǎn)數(shù)據(jù)域中數(shù)值的和,再對和求平均分。遍歷鏈表時(shí)應(yīng)定義一

個(gè)指向結(jié)點(diǎn)的指針P,因?yàn)椤邦^結(jié)點(diǎn)”中沒有數(shù)值,所以程序中讓P直接

指向“頭結(jié)點(diǎn)”的下一個(gè)結(jié)點(diǎn),使用語句STREC+P-h-nexto

27.

【解析】題目要求不能用C語言提供的字符串函數(shù),可以利用移動(dòng)字符

串指針來實(shí)現(xiàn),首先移動(dòng)字符串指針到第一個(gè)不是*的位置,通過指針

的移動(dòng),來實(shí)現(xiàn)把第一個(gè)不是星號的字符與最后一個(gè)不是星號的字符放

到a數(shù)組中,最后用‘\0'來作為字符串結(jié)束的標(biāo)志。

28.

【解析】首先定義一個(gè)變量來表示其和s,通過n次循環(huán)求出n項(xiàng)的和,

最后將所得到各項(xiàng)的和值返回給主函數(shù)。

29.\r\n\tvoidproc(int(*s)[10],int*b,int*n,intmm,intnn)

{

inti,j,k=0;

for(i=0;i<mm;i++)//i是表示其行的下標(biāo)

for(j=0;j<nn;j++)//j是表示其列的下標(biāo)

b[k++]=s[i][j];//把其放到b的一維數(shù)組中

*n=k;//把b數(shù)組的長度通過形參n傳回到主函數(shù)中

【解析】要將M行N列的二維數(shù)組中的數(shù)據(jù),按行的順序依次放到一

維數(shù)組中,可以通過首先行循環(huán),然后列循環(huán)取出二維數(shù)組中的每一

個(gè)元素,并將其放入一維數(shù)組中。最后,將一維數(shù)組的長度通過形參

返回到主函數(shù)當(dāng)中。

30.

【解析】按照題目中要求,求除首、尾字符外,將其余7個(gè)字符按ASCH

碼值降序排列。首先需要判斷除首、尾字符之外,其余7個(gè)字符ASCH

碼值的大小,將不符合順序要求的字符互換。

31.⑴錯(cuò)誤:if(d%2!=0)正確:if(d%2==0)(2)錯(cuò)誤:t=d*sl+t;正確:

*t=d*sl+*t;(l)錯(cuò)誤:if(d%2!=0)正確:if(d%2==0)\r\n

溫馨提示

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

評論

0/150

提交評論