上海市計算機二級C語言復習資料_第1頁
上海市計算機二級C語言復習資料_第2頁
上海市計算機二級C語言復習資料_第3頁
上海市計算機二級C語言復習資料_第4頁
上海市計算機二級C語言復習資料_第5頁
已閱讀5頁,還剩141頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

上海市方老老聯(lián)鼾算機等級老做二級伍程停做計1

03年上海市高等學校計算機等級考試試卷

二級(C程序設計)

(本試卷答卷時間為120分鐘)

試題一(28分,每小題4分)

解答下列各小題,把正確的解答寫在答卷紙的對應欄內(nèi)。

(1)設有變量說明:

inta=5,b=4,c=3,rl,r2;

請寫出執(zhí)行下列語句后rl和r2的值。

rl=a>b>c;

r2=a>b&&b>c;rl=0r2=l

(2)試寫出下列算式的C語言表達式。

標sin75

Ix-iog2yI

exp(ln(a)/3)*sin(75,0/180*3.14)/fabs(x-ln(y)/ln(2))

(3)執(zhí)行下列語句后,i,j,k的值是多少?

for(i=k=0j=6;i<j;i-H-j—)k+=4*i?5*j;

i=3j=3k=-63

(4)執(zhí)行下列程序后,b和c的值各為多少?

#include<stdio.h>

voidmain()

{int*a[10],b,c;

a[0]=&b;

*a[0]=5;

c=(*a[0])-H-;

printf(4U%d%d\n,\b,c);

b=6c=5

(5)設有如下程序:

#include<stdio.h>

voidmain()

{intclock;floatf;charcpu[20];

scanf(t4%4d%f%s,,,&clock,&f,cpu);

printf(u%d%.0f%s\n,,,clock,f,cpu);

}

假設輸入數(shù)據(jù)流為200015.0P4isGOOD!,請寫出執(zhí)行該程序后的輸出結(jié)果。

200015P4

上海市方老老聯(lián)鼾算機等級老做二級伍程停做計1

(6)下列程序的輸出結(jié)果是什么?

#include<stdio.h>

main()

{intcl=0,c2=0,c3=0,c4=0;

char*p="12395632123378”;

while(*p)

{switch(*p)

{caseT:cl-H-;break;

case'2’:c2++;

case'3':c3++;break;

default:c4++;

}

P";

}

printfpc1=%dc2=%dc3=%dc4=%d\n,,,c1,c2,c3,c4);

}

cl=2c2=3c3=7c4=5

7執(zhí)行下列程序后,s的值為多少?

#definesq(X)X*X

voidinain()

{ints=15,a=2,b=l;

printf(us=%d\n,,,s=sq(a+b)/sq(a+b));

)

s=7

試題二(12分,每小題6分)

閱讀下列程序,把程序的輸出結(jié)果寫在答卷紙的對應欄內(nèi)。

(1)【程序2.1】

#defineN6

voidmain()

{inti,j,a[N];

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

{a[i]=l;

fbr(j=i-l;j>l;j-)

a[j]+=a[H];

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

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

printfC'\n");

)

上海市龍博學喉付算枇等被考軾二級伍程本被奸,

1

11

121

1331

14641

(2)【程序2.2】

#include<stdio.h>

voidfiin(char*s)

{while(*s)

{*s=(*s-'0'+3)%10+'0‘;

-H-S;

)

}

voidmain()

{chara[]=”314762985”;inti;

fun(a+3);

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

printf("%c\n”a3*i+l]);

1

9

1

試題三(12分,每小題6分)

改錯。下列程序中都有三個錯誤,按原來程序的要求,糾正錯誤,并以“將#XX

行改為YYYY”的形式進行解答,代碼左邊的“#01”、“#02”、…是附加的行號。

(1)程序3.1功能是輸入一個字符串,并將其中的字符H用字符串“shu”替代后輸出。如輸

入為"123abcaHello,\則輸出為“123shubcshuHelloM?

【程序3.1】

#01#include<stdio.h>

#02voidmain()

#03{inti;charline[81];

#04scanf("%s”,&line);

#05for(i=0;line[i]!='\n';i++)

#06if(line[i]==,a,)

#07printf(“shu”);

#08else

#09printf("%s”,line[i]);

#10}

改scanf(a%sv,line);

for(i=0;line[i]!=,\0';i++)

printf(a%cv,line[i]);

上海市龍博學喉付算枇等被考軾二級伍程本被奸,

(2)程序3.2實現(xiàn)對輸入的長度小于100的英文字母(空格表示結(jié)束)進行頭尾相接,圍成

一個環(huán),輸出按順時針方向出現(xiàn)的相鄰兩個遞增字母及其個數(shù)(如下圖中的HI,IJ,

ST,總共出現(xiàn)3次)。

【程序3.2】

#01#include<string.h>

#02voidmain()

#03{chars[100];

#04intk,len,no;

#05scanfC%s”,s);

#06len=strlen(s);

#07s[len]=s[0];

#08s[len++]=,\0,;

#09fbr(k=0;k<len;k++)

#10if(s[k-l]+l=s[k])

#11{printff'%c%c\n,\s[k-1],s[k]);

#12no++;

#13}

#14printf("%d\n",no);

#15}

ZU第#o4

I行改為intk,len,no=0;

J第#o8

-d行改為s[++len]=,\0';

第#O9

行改為k=l:k<len:k++

試題四(18分,每小題

6分)

按指定的要求編寫C程序段,把解答寫在答卷紙對應的欄內(nèi)。不要求寫完整的程

序,也不必定義語句中出現(xiàn)的變量。

(1)求出任意一個數(shù)m(設4WmW10000)的所有素因子。例如,37的素因子是37;420

的素因子是2,2,3,5,7。

上海市龍博學喉付算枇等被考軾二級伍程本被奸,

main()

{inti=2,m;

scanf(〃%d〃,&m);

while(i<=m)

if(!(m%i))

{printf(〃%3d〃,i);

m/=i;

)

elsei++;

printf(〃\n〃);

)

(2)設有一維數(shù)組說明charT[5],存放,A:舊"TT,'E,五個字母,請編寫一個

程序段,按以下格式輸出結(jié)果。

ABCDE

BCDEA

CDEAB

DEABC

EABCD

ttinclude<stdio.h>

Sinclude<string.h>

voidfun(chara[],intn)

{chark,j,b[20];

for(k=0;k〈n;k++)

b[k+n]=b[k]=a[k];

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

{for(k=j;k<j+n;k++)

printf("%c",b[k]);

printf(〃\n〃);

)

)

mainO

{chars[80],n;

scanf(〃%s〃,s);

n=strlen(s);

fun(s,n);

(3)輸入正偶數(shù)n,計算以下級數(shù)之和并輸出結(jié)果(顯示結(jié)果保留小數(shù)點后5位)

123n山的補丁卻依*、

S=1…H-(此題找不到答案)

4916(〃+1)2

上海市龍博學喉付算枇等被考軾二級伍程本被奸,

試題五(15分,每空3分)

閱讀下列問題描述和相應的C程序,把應填入其中(n)處的內(nèi)容寫

在答卷紙的對應欄內(nèi)。

【問題描述】

程序5不斷地從鍵盤輸入字符,直到輸入EOF(Control+Z)為止。對于輸入的小寫字符,

先轉(zhuǎn)換為相應的大寫字符,其它字符不變,然后逐個輸出到文件text.txt中,行結(jié)束符回車

(\壯)也作為一個字符對待,最后統(tǒng)計文件中的字符個數(shù)和行數(shù)。

【程序5】

#inckide<stdio.h>

main()

{FILE*fp;

charc,str[256];

inti=0,no=0,line=0;

t,,

if((fp=fbpenCtext.txt9⑴))=NULL)

{pr血ff'Can'topenthis

exit(O);

}

printf(uPleaseinputastring.\nv);

while((c=getchar())!=EOF)

{if(c>=H&&cv=Z)⑵

fputc((3),ip);

fclose(fp);

if((fp=fbpenCfctext.txtn;Y,))==NULL)

{printff'Can'topenthisfile.'n'');

exit(O);

)

while(!feof(fp))

{c=(4);

no-H-;

if([5))line++;

printfi(ttline=%dcharcter_no=%d\n,,,line,no);

fclose(fp);

(1)“w”

(2)c二c-32或c二c-'a'+'A'

(3)c

(4)fgetc(fp)

(5)c==,\n,

上海市方老老聯(lián)鼾算機等級老做二級伍程停做計1

試題六(15分,每空3分)

閱讀下列問題描述和相應的C程序,把應填入其中(n)處的內(nèi)容寫

在答卷紙的對應欄內(nèi)。

【問題描述】

已知X和Y是兩個整型數(shù)組,而且X中的數(shù)據(jù)按從小到大的順序排列,Y中的數(shù)據(jù)按從大

到小的順序排列。程序6將X和Y中數(shù)歸并,并按從小到大的順序保存到整型數(shù)組Z中,

然后輸出數(shù)組Z中的各個元素。例如,X數(shù)組為{1,12,23,37},Y數(shù)組為{123,78,36,

3},歸并后生成的新數(shù)組Z為{1,3,12,23,36,37,78,123}。

【程序6】

voidsorted(intup[],intdown[],intmerged[],intn)

{inti,j,k,m;

i=k=0;j=n-l;

while((1))

if(up[i]<=down[j])

{(2);

i++;

k++;

)

else

{merged[k]=(3);

j-;

k++;

}

if(i==n&&j>=0)

for(;j>=O;j-)

merged[k++]=⑷;

if(j=O&&i<n)

for(;i<n;i++)

merged[k++]=[5];

}

voidmain()

{intup[]={l,12,23,37},down[]={123,78,36,3},merged[8],k;

sorted(up,down,merged,4);

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

printf("%d”,merged。;

printfi("\n”);

上海市方老老聯(lián)鼾算機等級老做二級伍程停做計1

(1)i<n&&j>=0

(2)merged[k]=up[i]

(3)down[j]

(4)down[j]

2004年上海市高等學校計算機等級考試試卷

二級(C程序設計)

(本試卷答卷時間為120分鐘)

試題一(28分),每小題4分)

解答下列各小題,把正確的解答寫在答卷紙的對應欄內(nèi)。

(1)假設對n(n>0)個學生按下列方法進行分班:每班k(k>0)個學生,最后一個

班若不足k人也單獨編成一個班,試用C語言中的條件表達式表示所編

班級個數(shù)。

n%k>0?n/k+l:n/k

(2)設有變量定義:

structrec{

intx;

inty;

}s[]={{4,28},{9,36}},*p=s;

99

計算表達式(p->y/p->x*s[1].x+s[1].y)的值。

(3)寫出下列程序的輸出結(jié)果。

#include<stdio.h>

voidmain(){

chars[]="2473'',c,i;

for(i=0;c=s[i];i-H-){

switch(c-'0'){

case2:

case3:putchar(c+4);continue;

case4:putchar(c+4);break;

case5:putchar(c+3);

default:putchar(c+2);

putchar('\n');

上海市方老老聯(lián)鼾算機等級老做二級伍程停做計1

68

9

7

(4)分別寫出下列4個指針變量pl,p2,p3,p4的含義。

int*pl,*p2[5],(*p3)(),(*p4)[5];

pl是指向整型變量的指針變量

p2是指針數(shù)組,它由5個指向整型變量的指針元素組成

p3是函數(shù)指針,它所指向的函數(shù)返回一個整型值

p4是數(shù)組指針,指向每行具有5個整型元素的二維數(shù)組的行指針

(5)寫出程序的輸出結(jié)果(假定類型unsignedint的字長為16位)。

#include<stdio.h>

voidmain(){

unsignedintul=0x958,u2,u3;

u2=(ul&0xFF)?4;

u3=(ul&0xFF00)?4;

prin氓"%x%x%x\n,5,u2,u3,u2|u3));

58090590

(6)閱讀如下程序段,把其中的switch語句改寫成等價的條件語句。

intx,y;

scanf("%d”,&x);

switch(x!=0){

case0:y=0;break;

case1:switch(x>0){

case1:y=l;break;

case0:y=-l;

}

}

y=x==0?0:(x>0?l:-l);

(7)描述函數(shù)conv()的功能,并寫出下列程序的輸出結(jié)果。

Voidconv(intm){

if(m>=2)

conv(m/2);

printf("%d”,m%2);

J

voidmain(){

conv(13);

上海市方老老聯(lián)鼾算機等級老做二級伍程停做計1

使用遞歸將10進制整數(shù)m轉(zhuǎn)換為對應二進制整數(shù),結(jié)果為1101

試題二(12分,每小題6分)

閱讀下列程序并回答問題,把答案寫在答卷紙的對應欄內(nèi)。

(1)【程序2.1】

/include<stdio.h>

voidsort(inta[],intn){

int

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

fbr(j=i+1;j<n;j++)

if(a[i]>a[j])t=a[i],a[i]=a[j],a[j]=t;

)

intdelsame(intx[],intn){

inti,j,m=n;

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

while(x[i]==x[i+l]){

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

x[j]=x[j+l];

m-;

returnm;

)

voidmain(){

intx[]={74,4,35,4,65,65,72,74,35},i,m,n;

n=sizeof(x)/sizeof[x[0]);

sort(x,n);

m=delsame(x,n);

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

printfC'iT);

)

(a)函數(shù)sort()的功能是什么?(b)函數(shù)delsame()的功能是什么?(c)程序的輸出

是什么?

函數(shù)sort()的功能是對數(shù)組進行從小到大排序

函數(shù)delsame。的功能是把數(shù)組中相同的元素刪除到一個,刪除后,數(shù)組剩下的元素個

數(shù)作為函數(shù)的返回值

程序的輸出是:435657274

(2)【程序2.2】

#include<stdio.h>;

#defineM4

voidmain(){

inti,j,k,m,a[4];

printfC'Enter4numbers:");

fbr(i=O;i<M;i-H-)scanf("%d”,&a[i]);

for(i=M;i>0;i—){

上海市龍博學喉付算枇等被考軾二級伍程本被奸,

k=a[M-l];

for(j=M-l;j>0;j—)

a[j]=a|j-l];

a[O]=k;

fbr(m=0;m<M;m++)

printfr%d”,a[m]);

printff'W");

設一維數(shù)組a的4個輸入整數(shù)是1,2,3,4,則程序的輸出是什么?

4123

3412

2341

1234

試題三(12分,每小題6分)

改錯。下列程序中都有三個錯誤,按原來程序的要求,糾正錯誤,并以“將#XX行改為YYYY”

的形式進行解答,代碼左邊的“#01“、“#02",…是附加的行號。

(1)程序3.1輸入10個正整數(shù),計算其中的素數(shù)之和并輸出結(jié)果(不考慮溢

出情況)。

【程序3.1】

#01#include<stdio.h>

#02intsum(int*b,intm){

#03ints=0,is_prime(long);

#04while(m—)

#05iffis_prime(*b-H-))s+=*b;

#06returns;

#07}

#08intis_prime(longm){

#09intk;

#10if(m<=l)return0;

#11if(m==2||m==3)return1;

#12for(k=2;k*k<=m;k++)

#13if(m%k==0)return0;

#14elsereturn1;

#15}

#16voidmain(){

#17intx[10],i;

#18for(i=0;i<10;i++)scanf(“%d",x++);

#19printf("sum=%d\n",sum(x,10));

#20}

將第#05行改為:S+=*(b-l)

將第#14行改為:elseif(k*k>=m)return1;

將第#18行改為:scanf(,l%d",x+i);

(2)程序3.2計算字符串s中最后一次出現(xiàn)子串t的地址,通過函數(shù)值返回,在主

上海市方老老聯(lián)鼾算機等級老做二級伍程停做計1

函數(shù)中輸出此地址開始的字符串:若未找到,函數(shù)返回NULL(例如字符串s

為“456712345678abcd',當子串為"567”時,輸出為“5678abcd”:當t為”789”時,

輸出“Notfound!")。

【程序3.21

#01#include<stdio.h>

#02char*fun(char*t){

#03char*p,*a;

#04a=null;

#05while(*s){

#06p=s;r=t;

#07while(*r)

#08if(r==p){r++;p++;}

#09elsebreak;

#10if(*r='\0')a=s;

#11s++;

#12)

#13returna;

#14)

#15voidmain(){

#16chars[100],t[100],*p;

#17printfif'AnPleaseenterstrings:");scanf("%s”,s):

#18printf(4fc\nPleaseentersubstringt:");scanf("%s",t);

#19P=fun(s,t);

#20if(p)printf(cu\nTheresultis:%s\n",p);

#21elseprintf(u\nNotfound!\n");

#22)

將第#02行改為:char*fun(char*s,char*t)

將第#04行改為:a=0;(或a=NULL;)

將第#08行改為:if(*r==*p){r++;p++;}

試題四(18分,每小題9分)

按指定的要求編寫C程序段,把解答寫在答卷紙的對應欄內(nèi),不要求寫完整的程序,也不

必定義語句中出現(xiàn)的變量。

(1)萬的值可以使用下公式計算

乃?1I2123

2335357

請編寫函數(shù)compute_pi(doubleeps)計算乃的近似值,當公式中某一項的值

小于eps(例如,eps=le-5)時,停止計算并返回結(jié)果

上海市方老老聯(lián)鼾算機等級老做二級伍程停做計1

doublecompute_pi(doubleeps)

(

intm=1;

doubleterm=1.0,s=0.0;

while(term>=eps)

{s+=term;

term=term*m/(2*m+1);

m++;

)

return(2*s);}

(2)編寫函數(shù)fun,它的功能是:對于輸入字符串s,先將s中的字符逆序放

到字符串t中(t的初始值為空串),再把字符串s正序連接到字符串t后面(例

如,若s為"ABCDE”,則最后生成的字符串t為"EDCBAABCDE")。

#include<stdio.h>

#include<string.h>

voidfun(chars[],chart[])

{inti,slen;slen=strlen(s);

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

t[i]=s[slen-i-1];

for(i=0;i<slen;i++)t[slen+i]=s[i];

t[slen*2]=i\0);

)

main()

{chars[100]="ABCDE”,

t[100];

fun(s,t);

printfC'Therunresultis%s\n",t);

試題五(15分,每空3分)

閱讀下列問題描述和相應的C程序,把應填入其中(n)處的內(nèi)容寫在答卷紙的對應欄

內(nèi)。

【問題描述】

輸入任意一個三位數(shù)d(要求d不等于495且其百位、十位、個位不全相等

否則重復輸入),求出由此數(shù)年的百位、十位、個位三位數(shù)字組成的最大數(shù)max

和最小數(shù)min(百位數(shù)可以為0),再求出新三位數(shù)max-min,即max和min的

差(如結(jié)果小于100,則百位數(shù)視為0);只要該數(shù)不等于495,重復以上運算,

則經(jīng)過有限次計算后,必定得到495。在程序中,函數(shù)get_maxmin()計算由三位

數(shù)的百位、十位、個位所組成的最大數(shù)和最小數(shù)。

例如,對于輸入792,有下列計算過程:

上海市龍博學喉付算枇等被考軾二級伍程本被奸,

972-279=693f963-369=594-954-459=495

對于輸入202,有下列計算過程:

220-22=198f981-189=792f972-279=693f963-459=594-

954-459=495

【程序5】

#include<stdio.h>

voidget_maxmin(inta,intb,intc,(1))

{

intt;

ififavb)t=a,a=b,b=t;

if(a<c)t=a,a=c,c=t;

if(b<c)t=b,b=c,c=t;

⑵:

⑶:

voidmain()

(

inta,b,c,max,min,d;

do

{scanfT%d”,&d);

a=d/100;

b=d%100/10;

c=d%10;

)while((4));

while(d!=495)

(

getmaxmin((5));

d=max-min;

a=d/100;

b=d%100/10;

c=d%10;

printfTend_d=%d\iT,d);

(1)int*max,int*min

(2)*max=a*100+b*10+c

(3)*min=c*100+b*10+a

⑷d==49511a==b&&a==c

上海市龍博學喉付算枇等被考軾二級伍程本被奸,

(5)a,b,c,&max,&min

試題六(15分,每空3分)

閱讀下列問題描述和相應的C程序,把應填入其中(n)處的內(nèi)容寫在答卷紙的對應

欄內(nèi)。

【問題描述】

給出兩個鏈表,按交替的順序輪流從這兩個鏈表中取其成員歸并成為一個新

的鏈表,如其中一個鏈表的成員取完,另一個鏈表的多余成員依次接到新鏈表的

尾部,并把指向新鏈表的指針作為函數(shù)值返回。例如,若兩個鏈表成員分別是

{1,2,3,8,10,15}和億13』},則鏈接成的新鏈表是{1,7,2,13,3,1,8,10,15}。

【程序6】

#include<stdio.h>

typedefstructnode

{

intdata;

structnode*next;

);

structnode*createlink(structnode*list,intx)

(

structnode*u=list,*p;

P=⑴;

(2);

p->next=NULL;

if(list=NULL)list=p;

else{while(u->next!=NULL)u=u->next;

u->next=p;}

returnlist;

)

structnode*ShuffleMerge(structnode*a,structnode*b){

structnodedummy;

structnode*tail=&dummy;

dummy.next=NULL;

while((3))

(

if((4))

(

tail->next=b;

break;

)

elseif(b==NULL)

tail->next=a;

上海市龍博學喉付算枇等被考軾二級伍程本被奸,

break;

else{/*輪流從兩個鏈表中取其成員鏈接到新鏈表的尾部*/

tail->next=a;tail=a;a=a->next;

tail->next=b;tail=b;b=b->next;

)

return((5));

}

voidmain(){

intx;

structnodealist=NULL,blist=NULL,*list=NULL;

do{scanf(“%d”,&x);/*建立alist鏈表*/

if(x<0)break;

alist=createlink(alist,x);

}while(x>0);

do{scanf("%d",&x);/*建立blist鏈表*/

if(x<0)break;

blist=createlink(blist,x);

}while(x>0);

list=ShuffleMerge(alist,blist);

(1)p=(structnode*)malloc(sizeof(structnode))

(2)p->data=x

(3)1

(4)a==NULL

(5)dummy,next

2005年上海市高等學校計算機等級考試試卷

二級(C程序設計)

(本試卷答卷時間為120分鐘)

試題一(28分,每小題4分)

解答下列各小題,把解答寫在答卷紙的對應欄內(nèi)。

(1)試寫出下列命題的C語言表達式。

上海市方老老聯(lián)鼾算機等級老做二級伍程停做計1

當字符變量m取英文字母時表達式的值為真。

m>='a'&&m<='z'||m>='A'&&m<='Z'

⑵執(zhí)行下述語句后,a,b,m,n變量的值分別是什么?

inta=l,b=2,c=3,d=4,m=5,n=6;

a=(m=a>b)&&(n=c>d)||++a==b—;

a=1,b=l,m=0,n=6

(3)執(zhí)行下列語句后的輸出結(jié)果是什么?

chars[81]=Ma_stringH,t[81];

strcpy(t,s);

printfy'%d;%d\n%s\n”,sizeof(s),strlen(s),t+2);

81;8

string

(4)寫出下列C語句的功能。

#include<string.h>

dogets(s);

while(strcmp(s,"passwd"));

不斷地從鍵盤輸入字符串,直到輸入passwd循環(huán)終止

(或者:輸入口令passwd)

(5)執(zhí)行下列程序后的輸出結(jié)果是什么?

#defineSQR(x)x*x

voidmain()

{

ints=8,a=2,b=3;

s=SQR(a+b)*4;

printfT?=%d\n”,s);}

(5)s=20

(6)設有定義structdate{

intday;

charmonth;

intyear;

}dd,*pd=ⅆ

.寫出引用結(jié)構(gòu)變量dd的成員成.day的其他兩種描述形式。

pd->day

(*pd).day

(7)設有如下程序段:

inta[4]={0,4,5,13},*p;

P=&a[2];

printf(,,-H-(*p)=%d\nn,++(*p));

printf(n*-p=%d\nn,*-p);

上海市龍博學喉付算枇等被考軾二級伍程本被奸,

prints*'*p-H-=%d\nf,,*p++);

printf(n%d\nn,a[O]);

試寫出執(zhí)行該程序段后的輸出結(jié)果。

-H-(*p)=6

*-p=4

*p-H-=4

0

試題二(12分,每小題6分)

閱讀下列程序,把程序的輸出結(jié)果寫在答卷紙的對應欄內(nèi)。

(1)【程序2.1]

#include<stdio.h>

voidmain()

{

intk[]={65,30,3,123,831,54};

intj,ml=32767,m2=0,nl,n2;

for(j=0;j<6;j++)

if(ml>kU])

{ml=k[j];

nl=j;}

elseif(m2<k[j])

{m2=k[j];

n2=j;}

printffm1=%d,n1=%d\n”,m1,n1);

printffm2=%d,n2=%d\n”,m2,n2);

ml=3,nl=2

m2=831,n2=4

(2)【程序2.2]

#include<stdio.h>

voidfunc(int*x,inty)

{

statick=3;

y=*x+y;

*x=y%k;

k++;

printf(H*x=%d,y=%d\n",*x,y);

)

voidmain()

上海市龍博學喉付算枇等被考軾二級伍程本被奸,

intx=12,y=5;

fiinc(&x,y);

printf(nx1=%d,y1=%d\n”,x,y);

func(&y,x);

printf(,,x2=%d,y2=%d\n,,,x,y);

*x=2,y=17

xl=2,yl=5

*x=3,y=7

x2=2,y2=3

試題三(12分,每小題6分)

下列程序中都有三個錯誤,按題中的計算要求,糾正錯誤,并以“將#XX”行改為“YYYY”的

形式進行解答,把解答寫在答卷紙的對應欄內(nèi)。代碼左邊的#1、#2、…是附加的行號。

(1)用冒泡排序法求出由21個整數(shù)組成的數(shù)組的中間值,并輸出所有大于中間值的偶數(shù)。

【程序3.1】

#0#include<stdio.h>

#1voidmain()

#2{

#3intij,temp;

#4intarray[21];

#5for(i=0;i<21;i++)scanff'%d",array[i]);

#6for(i=0;i<21;i++)

#7for(j=0;j<20;j++)

#8if(array[j]>array[j+l])

#9

#10temp=array[j];

#11array[j]=array[j+l];

#12array[j+l]=temp;

#13

#14printf(H%dn,array[10]);

#15for(i=0;i<l0;i++)

#16if(array[i]/2==0)printf(n%d”,array。]);

#17

將第5行中的array[i];改為&array[i];

將第15行中的fbr(i=0;i<10;i++)改為for(i=ll;i<21;i++)

將第16行中的array[i]/2==0改為array[i]%2==0

(2)用下面的方法可以計算y年m月d日是星期幾(w):

w=[y-1+(y-l)/4-(y-1)/100+(y-1)/400+y_d(y,m,d)]%7

上海市龍博學喉付算枇等被考軾二級伍程本被奸,

其中,符號/表示計算整數(shù)商,%表示計算余數(shù),y_d(y,m,d)表示y年m月d日是從

同年元旦算起到該日的總天數(shù)。

【程序3.2】

#1intday_tab[]={0,31,28,31,30,31,30,31,31,30,31,30,31);

#2inty_d(inty,intm,intd){

#3inti,all;

#4y=y%4==0&&y%100||y%400==0;

#5for(i=0;i<=m;i-H-)all+=day_tab[i];/*統(tǒng)計某月份(m月)之前的天數(shù)*/

#6all+=y;/*對閏年考慮2月份是29天*/

#7returnall+d;

#8}

#9voidmain(){

#10inty=2005,m=7,d=11,w;

#11w=y-1+(y-1)/4-(y-l)/100+(y-1)/400+y_d(y,m,d);

#12w%=7;

#13printf(n%d年%(1月%d日是星期%d\n”,y,m,d,w);

#14}

將第3行中的inti,all;改為inti,all=0;

將第5行中的fbr(i=0;i<=m;i++)改為for(i=0;i<m;i++)

將第6行中的all+=y改為all+=y*(m>2);

或者改為if(m>=3)al1+=y;

或者改為all=m>=3?all+y:all;

試題四(18分,每小題9分)

按指定的要求編寫程序段,把解答寫在答卷紙的對應欄內(nèi)。

(1)輸入無符號整型范圍內(nèi)的整數(shù),求出它的位數(shù)以及各位數(shù)字之和。

上海市龍博學喉付算枇等被考軾二級伍程本被奸,

#include<stdio.h>

voidmain()

i

unsignedintm,ws=0,p=0;

scanfif"%u”,&m);

do{ws-H-;

p=p+(m%10);

}while(m/=10);

printf("%d\t%u\n”,ws,p);

(2)將長度為n的字符串s分成兩個子串,前m(任意值)個字符生成子串S],后n-m

個字符生成子串S2。約定:當m2n時,si等于原串,S2為空串;當m<0時,s]為空

串S2等于原串。編寫程序段時,可以使用庫函數(shù)strcpy。

voidsplit(chars[],charsl[],chars2[],intm)

{

intn,i,j;

n=strlen(s);

if(m>=n)

{

strcpy(sl,s);

strcpy(s2,*n,);

)

elseif(m==0)

(

strcpy(s2,s);

strcpy(sl;,n);

}

else

fbr(i=0;i〈m;i++)

sl[i]=s[i];

sl[i]=)(r;

for(j=0;s2[j]=s[i];i++,j4-+);

/*或者{strcpy(sl,s);sl[m]=,\0,;strcpy(s2,s+m)}*/

試題五(15分,每個空格3分)

閱讀下列問題描述和相應的程序,把應填入其中(n)處的內(nèi)容寫在答卷紙的對應欄內(nèi)。

【問題描述】

本程序運行時,從鍵盤不斷接收用戶輸入的字符串并進行處理,直到用戶輸入的字符串

為“end”時終止。對用戶輸入的每個字符串的處理是:將字符串內(nèi)的每一個十進制數(shù)字字符

置換成下列表格中右邊所對應的一個字符串(所有其他字符不變),然后將轉(zhuǎn)換的結(jié)果顯示

在屏幕上;并分別計算每個數(shù)字的置換次數(shù)。

十進制數(shù)字字符置換成

上海市龍博學喉付算枇等被考軾二級伍程本被奸,

0(Zero)

1(One)

2(Two)

3(Three)

4(Four)

5(Five)

6(Six)

7(Seven)

8(Eight)

9(Nine)

例如,若用戶輸入的字符串為

Pagel12-Line3,

則程序5的輸出是:

Page(One)(One)(Two)-Line(Three)

數(shù)字0到9的置換次數(shù)分別是0211000000

[程序5]

#include<stdio.h>

voidmain()

{char*table[]={M(Zero),,,M(One)”,"(Two)”'(Three)”,"(Four)”,

“(Five)”J(Six)”J(Seven)",H(Eight)”」(Nine)”};

charstrl[64],str2[255],*p;

intj,k,n,no[10];

for(;;){

printf(MInput:");

gets((1));/*讀入字符串*/

for(k=0;k<10;k-H-)no[k]=0;

iftstrcmp(strl,"end")=0)(2);/*輸入end時程序運行終止*/

for0=k=O;strl[j]!-\O';++j)/*對輸入字符串進行掃描*/

(

if(⑶)/*當前字符不是數(shù)字字符*/

{str2[k++]=strl[j];

continue;

)

/*當前字符是數(shù)字字符*/

n=strl[j]-'O';

no[n]++;

for(p=table[n];*p!='\0';++p)

str2[k++]=⑷;/*把要置換的字符串逐個連接到str2上*/

}

str

溫馨提示

  • 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

提交評論