《C語(yǔ)言程序設(shè)計(jì)(第2版)》課后習(xí)題參考答案_第1頁(yè)
《C語(yǔ)言程序設(shè)計(jì)(第2版)》課后習(xí)題參考答案_第2頁(yè)
《C語(yǔ)言程序設(shè)計(jì)(第2版)》課后習(xí)題參考答案_第3頁(yè)
《C語(yǔ)言程序設(shè)計(jì)(第2版)》課后習(xí)題參考答案_第4頁(yè)
《C語(yǔ)言程序設(shè)計(jì)(第2版)》課后習(xí)題參考答案_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

《C語(yǔ)言程序設(shè)計(jì)》(邱曉紅主編)課后習(xí)題參考答案

第I章C語(yǔ)言及程序設(shè)計(jì)概述

1.單選題

(1)A(2)B(3)A(4)B(5)C

2.填空題

(1)//,/*...*/

(2)scanf()

(3)printf()

3.判斷題

(1)對(duì)(2)錯(cuò)(3)錯(cuò)(4)對(duì)

1.4簡(jiǎn)答題

①概述C語(yǔ)言和C語(yǔ)言程序的主要特點(diǎn)。

答:

1c語(yǔ)m是高級(jí)語(yǔ)言。它把而級(jí)語(yǔ)言的基本結(jié)構(gòu)和語(yǔ)句與低級(jí)語(yǔ)言的實(shí)用性結(jié)合起來(lái).

2。c語(yǔ)言是結(jié)構(gòu)式語(yǔ)言。結(jié)構(gòu)式語(yǔ)言的顯著特點(diǎn)是代碼及數(shù)據(jù)的分隔化,即程序的各個(gè)部分除了必要的

信息交流外彼此獨(dú)立。這種結(jié)構(gòu)化方式可使程序?qū)哟吻逦?,便于使用、維護(hù)以及調(diào)試。

①c語(yǔ)言功能齊全。具有各種各樣的數(shù)據(jù)類(lèi)型,并引入了指針概念,可使程序效率更高。

②C語(yǔ)言適用范圍大。適合于多種操作系統(tǒng),如Windows、DOS、UNIX、LINUX等等:也適用于多種機(jī)型。

②請(qǐng)編程,在計(jì)算機(jī)屏卷上顯示:“您好,歡迎進(jìn)入C語(yǔ)言世界!”

解:

#include<stdio.h>

voidmain()

{

printf(“您好,歡迎進(jìn)入c預(yù)言世界!”);

第二章:數(shù)據(jù)類(lèi)型運(yùn)算符與表達(dá)式

1.單選題

(DC(2)D(3)C(4)B(5)C(6)A(7)B(8)D(9)A(10)B

(11)C(12)C(13)D(14)A(15)B(16)C(17)A(18)A(19)B(20)C

(21)C(22)D(23)C(24)A(25)D(26)B(27)C(28)B(29)B(3D)A

2.填空題

(1)sqrt(pow(y,x)+log10(y))(2)36

(3)6(4)33

(5)6(6)36

(7)intx=8,y=8;(8)I

(9)E(10)7,968)

(11)6(12)66,96

(13)240(14)

(15)5,2,6(16)I

(17)!(18)2

(19)(a>0&&a<10l)&&(a%3==0||a%7==0)

(20)A

3.程序分析題

(1)27(VC++環(huán)境下,其它編譯環(huán)境可能有不一樣的結(jié)果)

27

49

44

1212

(2)3140

1-6

16

(3)100d68D

97a491

(4)0101

(5)2467

-0.58000007.000000

4

6.580000

7.500000

(6)3

31

21

13130

8

232

(7)6

1830

18

I

(8)1100

4.改借題

(1)①無(wú)初始賦值,不能輸H

②數(shù)據(jù)精度丟失

③少“:”號(hào)

④單字符變量不能保存字符串常量

⑤不能連續(xù)初始化

⑥非法標(biāo)識(shí)符

(2)short1=38000溢出

PI=3.1416常量不能修改值

Printf("%d”,x%y)%必須是整數(shù)

a*=(b+c)/=d復(fù)合賦值左邊不能是表達(dá)式

5、

(I)

#include<stdio.h>

intmain()

intH;

floatv.Ll,L2.L.T.sl.M;

printf("請(qǐng)輸入開(kāi)始里程教,單位為千米:W);

scanf("%f'.&LI);

prinlf("請(qǐng)輸入結(jié)束里程教,單位為千米:5”);

scanf("%r;&L2);

printfC請(qǐng)輸入時(shí)間,格式為時(shí),分,秒\n");

scanf("%d,%f,%r.&H,&M,&sl);

T=H+M/60.0+$l/3600.0;〃將時(shí)間折算成小時(shí):

L=L2-L1;〃計(jì)算出這段時(shí)間走的路程,以千米計(jì);

v=L/T;

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

iciuui0;

(2)

#include<stdio.h>

#definePI3.14

intmain()

]

doubler=2.5,h=5.V;

V=(PI*r*r*h)/3;

prinif("%f\iT,V);

return0;

第三章:算法概念與順序結(jié)構(gòu)程序設(shè)計(jì)

I.選擇題

(1)D(2)D(3)D(4)B(5)C(6)A[在16位機(jī)答案為D)(7)B(8)C

(9)B(10)D

2.填空題.

(1)一條語(yǔ)句:

(2)小于左右

(3)%%

(4)輸出項(xiàng)列表輸出控制符

(5)取地址取a的地址

(6)從盤(pán)獲取一個(gè)字符

(7)大括號(hào)

(8)f=68.00()000

(9)nl=%d\nn2=%d

(10)7,5,c=3

3.程序分析題.

(1)i=100,c=a,f=1.234000

(2)i=65535J=65536

(10)1234,123.5,12345.5

3.4編程題

①編寫(xiě)一個(gè)程序,交換兩個(gè)數(shù)的值。

ttinclude<stdio.h>

intmain()

(

c2=getchar();getchar();

printf("%d\t%d\n"zcl,c2);

return0;

}

第四章:選擇結(jié)構(gòu)程序設(shè)沖

1.選擇題

(DC(2)B(3)B(4)B(5)D(6)D(7)D(8)A(9)D(有一語(yǔ)句缺

了;,若補(bǔ)齊則答案為B(13)A(IDB(12)B(13)D(14)A(15)C(16)A(17)

C(18)C(19)B(20)D(21)A(22)C(23)A(24)A

2.填空題.

(1)1(2)588

(3)4599(4)2

(5)10200(6)2I

(7)-4(8)3

(9)No(10)25

(11)4545(12)0

(13)5.5(14)13

(15)3

3、

(I)參考代碼如下:

#include<stdio.h>

intrnain()

(

intx;

prinif("請(qǐng)輸入一個(gè)整數(shù)

scanf("%d".&x);

if(x%7==0)printf("Yes");

elseprintfC'No");

return0;

)

(2)參考代碼如下:

#includc<stdio.h>

#includc<math.h>

intmain()

(

floata.b,c,s.m;

printf("請(qǐng)輸入三個(gè)數(shù):\n");

scanf(M%f%f%f'.&a.&b,&c);

if((a+b>c)&&(a+c>b)&&(b+c>a))

(

s=(a+b+c)/2;

m=sqrt(s*(s-a)*(s-b)*(s-c));

printf("Thearea

)

elseprinif("輸入的三個(gè)數(shù)不能構(gòu)成三角形)

return0;

)

(3)會(huì)發(fā)現(xiàn)程序1輸出“優(yōu)秀”,程序2輸出“優(yōu)秀”“良好”“中等”“及格”四個(gè),因?yàn)槌绦?使用的是多

分支條件句,運(yùn)行時(shí)只執(zhí)行其中一個(gè),而程序2是多個(gè)條件語(yǔ)句,可以被多次判斷并且執(zhí)行。

(4)參考代碼如下:

#include<stdio.h>

intmain()

intm:

scanf("%d",&m);

switch(m)

caseI:printf("Monday");brcak;

ease2:printf("Tucsday");brcak;

case3:prin【f("Wednesday");break;

case4:printf(MThursday");break;

case5:printf("Friday"):break;

case6:printf("Saturday"):break;

case7:prin(f("Sunday");break;

default:printf("Error*);

}

return0;

)

(5)參考代碼如下:

#include<stdio.h>

intmain()

(

intm.n;

scanf("%d",&m);

switch(m/10)

(

caseLease2:n=l;break;

case3:n=2;break;

case4:n=3;break:

case5:n=4;break;

default:n=3;

}

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

return0;

)

(6)參考代碼如下:

不嵌套的if語(yǔ)句:

#include<stdio.h>

intmain()

(

intx,y;

prinlf("請(qǐng)輸入x的值:”);

scanf("%d",&x);

if(x<0)

(

y=x;

printf("y=%d",y);

)

if(x>=O&&x<IO)

(

y=x-10;

prinlf("y=%d>\y);

)

if(x>=10)

(

y=x+10;

printf("y=%d".y);

)

return0;

}

嵌套的if語(yǔ)句:

#include<stdio.h>

intmain()

(

intx.y;

prinlf("請(qǐng)輸入x的值:”);

scanf("%d",&x);

if(x>=0)

if(x>-10)

y=x+10;

printf("y=%d".y);

)

else

{

y=x-10;

printf("y=%d".y);

I

}

else

(

y=x;

printf("y=%d",y);

}

return0:

)

多分支的if語(yǔ)句:

#include<stdio.h>

in(main()

(

intx,y;

prinlf(“請(qǐng)輸入x的值:”);

scanf("%d",&x);

if(x<0)

(

y=x;

printf("y=%d".y);

I

elseif(x>=O&&x<10)

{

y=x-10:

printf("y=%d",y);

I

else

(

y=x+10;

prinlf("y=%d",y);

}

return0;

}

(7)參考代碼如下:

使用多分支if語(yǔ)句:

#include<stdio.h>

intmain()

I

intx;

prinlfC'請(qǐng)輸入x的值:”);

scanf("%d",&x);

if(x<60)

printfC'E");

elseif(x>=60&&x<70)

piimf("D");

elseif(x>=70&&x<80)

prinlfC'C");

elseif(x>=80&&x<90)

prinif("B");

elseif(x>=90&&x<=100)

printf("A");

else

prinif("輸入有誤)

return0;

I

使用switch語(yǔ)句:

#inchide<stdio.h>

intmain()

intx;

prinif("請(qǐng)輸入x的值:”);

scanf("%d",&x);

swi(ch(x/10)

{

case1:case2:case3:case4:case5:printf("E");break;

case6:printf("D");break;

case7:printf("C"):break;

case8:printf("B"):break;

case9:case10:printf("A"):break;

default:printf("輸入有誤");

)

return0;

)

(8)參考代碼如下:

#include<stdio.h>

intmain()

(

intx;

scanf("%d",&x);

prinlf("請(qǐng)輸入x的值:”);

swi(ch(x)

(

caseLease3:printf(,高等數(shù)學(xué)課");hreak;

case2:case4:printf('程序設(shè)計(jì)課)break:

case5:printf("外語(yǔ)諛');break:

case6:printf("政治課》break:

caseO:printf("無(wú)課程安排");break;

default:printf("輸入有誤");

}

return0;

第五章:循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

1.選擇題

(DC(2)A(3)D(4)C(5)D(6)B(7)A(8)A(輸出4444)(9)

B(10)A(II)B(12)C(13)B(缺了循環(huán)體,不完整)(14)C

2.填空題.

(1)r=m;m=n;n=r

m%n

(2)3

(3)-5

(4)i%3==2&&i%5==3&&i%7==2

j%5==0

(5)i==j

j!=k

(6)ints=8j=i+2

k+i+j==8

(7)8

(8)k&&i<=500k/10continue

①編程實(shí)現(xiàn)對(duì)鍵盤(pán)輸入的英文名句子進(jìn)行加密。用加密方法為,當(dāng)內(nèi)容為英文字母時(shí)其在26字母中的其后

三個(gè)字母代替該字母,若為其它字符時(shí)不變。

②年include<stdio.h>

③#include<ctype.h>

④#include〈string.h>

⑤#defineMAX1000

⑥intmain()

⑧charstr[MAX];

(9)gets(str);

⑩inti,len=strlen(s^r);

?for(i=0;i<len;i++)

?{

@if(isupper(str[i])IIislower(str[i]))

?{

?if(str[i]>=*x,&&str[i]<=,z')

?str[i]='z';

?elseif(str[i]>='X'&&str[i]<=,Z*)

?str[i]='Z';

?else

?str[i]+=3;

21)

22)

n

23printf(%s\n"fstr);

24return0;

25}

26編程實(shí)現(xiàn)將任意的十進(jìn)制整數(shù)轉(zhuǎn)換成R進(jìn)制數(shù)(R在2-16之間)。

#include<stdio.h>

intmainO

(

intx,r,ans[100],i=0;

printf("請(qǐng)?輸?入?十?進(jìn)?制?數(shù)籥x,進(jìn)?制?R:");

scanf&x,&r);

while(x)

(

ans[i++]=x%r;

x/=r:

)

while(i-)

printfans[i]);

printf(*\n*);

return0;

)

27

288鍵盤(pán)輸入一指g金額1以元為單位,如345.78),然后顯示支付該金額的各種面額人民幣數(shù)量,要求

顯示100元、50元、10元、5元、2元、1元、5角、1角、5分、1分各多少?gòu)垺?輸出面額最大值:

比如345.78=100*3+10*4+5*1+0.5*1+0.1*2+0.01*8)

#include<sldio.h>

intmain()

(

longx,y,f;

doublen;

inix100,x50,x10,x5,x2,xl,y5,yl.f5,f1;

x_100=x_50=x_10=x_5=x_2=x_l=y_5=y_l=f_5=f_l=0;

scanf(飛If",&n);

x=int(n);

x_100=x/100:x%=100:

x_50=x/50;x%=50;

x_10=x/10;x%=10;

x_5=x/5;x%=5;

x_2=x/2;x%=2;

x_l=x/l;

u*-10,y-iiiL(u)%10,

y_5=y/5;y%=5;

y_l=y/l;

n*=10:f=int(n)%10;

f_5=f/5;f%=5;

f_l=f/l;

printfC100元a\t:%d\n50元a\t:%d\nlO元a\t:%d\n5元a\t:%d\n2元a\t:%d\nl元a\t:%d\n5

角?角?\t:%d\n5分?分?\t:%d\n”,x」OO,x50,x_5,x_2,xl,y5,y_l,f5,fI);

return0;

)

29

30隨機(jī)產(chǎn)生20個(gè)[10,50]的正整數(shù)存放到數(shù)組中,并求數(shù)組中的所有元素最大值、最小值、平均值及各

元素之和。

#include<stdio.h>

#include<stdlib.h>

/defineINF10000

intmain()

{

inti,arr[20J,sum=O,max=-INF,min=INF;

doubleaver;

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

(

arr[i]=rand():

5um,=ttrr[i];

if(arr[i]>max)max=arr[i];

if(arr[i]<min)min=arr[i];

}

aver=(double)sum/20;

printfC,max=%d\nmin=%d\nsum=%<l\navcr=%lf\n//,max,min,sum,aver);

return0;

)

31

32試編程判斷輸入的正整數(shù)是否既是5又是7的整倍數(shù)。若是,則輸出yes,否則輸出no.

#include<stdio.h>

intmainO

{

intx;

scanf&x);

if(!(x%5)&&!(x%7))

printfCyes\nM);

else

printf(z,no\n*);

return0;

)

33

34編寫(xiě)程序?qū)崿F(xiàn)功能:用戶從鍵盤(pán)輸入一行字符,分別統(tǒng)il出其英文字母和數(shù)字字符的個(gè)數(shù)(不記回車(chē)符號(hào)3

★include<stdio.h>

*include<ctype.h>

/include<string.h>

intmain()

{

charstr[lOO];

gels(str);

inti,len=strlen(str),a=0,x=0;

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

(

if(isalpha(str[i]))

a++;

if(isdigit(str[i]))

x++;

}

printf("alpha:%d\nnumber:%d\n”,a,x):

return0:

}

35

36編程在一個(gè)已知的字符串中查找最長(zhǎng)單詞,假定字符串中只含字母和空格,空格用來(lái)分隔不同單詞。

#include<stdio.h>

#include<ctype.h>

tiinclude<string.h>

intmain()

{

charstr[100];

gets(str);

inti,len=strlen(str),a=0,max=0;

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

(

if(isalpha(str[i]))

(

a++;

if(a>max)ma>:=a:

}

if(isspace(str[i]))

a=0;

)

printf(wmaxlenghlmax);

return0:

)

37

38模擬n個(gè)人參加選舉的過(guò)程,并輸出選舉結(jié)果:假設(shè)候選人有四人,分別用A、B、C、D表示,當(dāng)選某候

選人時(shí)直接輸入其編號(hào)(編號(hào)由計(jì)算機(jī)隨機(jī)產(chǎn)生),若輸入的不是A、B、C、D則視為無(wú)效票,選舉結(jié)束后按

得票數(shù)從高到低輸出候選人編號(hào)和所得票數(shù)。

#include<stdio.h>

#include<stdlib.h>

★include<ctype.h>

^include<string.h>

intmain()

(

intn,a=0,b=0,c=0,d=0;

charx;

scant&n);

while(n--)

(

x-rand();

swilch(x)

(

case'a':

case1A>:a++;break;

case'b’:

case'B':b++;break;

case'c’:

case'C':c++;break;

case'd':

case'D':d++;break;

default:break;

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

(

if(a>b&&a>c&&a>d)

(

prinifa);

a=0;

)

elseif(b>a&&a>c&&a>d)

(

prinifb);

b-0;

}

elseif(c>b&&c>a&&c>d)

(

prinlf("C:$d'n”,c);

c=0;

}

elseif(d>b&&d>c&&d>a)

(

printf(*D:%d\n*,d):

d=0;

}

)

if(a)

printf("A:%d\n”,a);

if(b)

printf("B:%d\n”,b);

if(c)

printf(z,C:%d\nw,c);

if(d)

printf("D:"d\n”,d);

return0;

)

(9)任何個(gè)自然數(shù)m的立方均可寫(xiě)成m個(gè)連續(xù)奇數(shù)之和。例如:

17=1

2A3=3+5

37=7+9+11

4A3=13+15+17+19

編程實(shí)現(xiàn):輸入一自然數(shù)n,求組成n3的n個(gè)連續(xù)奇數(shù)。

#include<stdio.h>

intmainO

(

inti;

intn;

printf("愉?入?一?個(gè)?自?然?數(shù)籥:");

scanf(飛d”,&n);

if(n<0)

(

printf("輸?入?數(shù)筋據(jù)Y有曲錯(cuò)洙?誤6");

}

else

(

printf(*%d-3=*,n);

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

if(i!=n-l)

printf("%di”,n*(n1)1112*i);

else

printf("%d\n”,n*(n-l)+l+2*i);

)

}

return0:

)

(9)分別編寫(xiě)程序,打印以下各圖案。

/、(b)

(a)

1

a

234

ab

56789

abc

0123456

…789012345

ab..z

6789012345

(a)#include<stdio.h>

intmainO

(

inti,j;

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

(

for(j=0:j<i;j++)

printf(*%c'a'+j);

printf(*\n*);

)

return0;

}

(b)#include<stdio.h>

intmainO

(

inti,j,x=0;

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

(

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

(

if(++x>9)x-=10:

printf(*%d",x);

)

printf(*\n*);

}

return0;

)

第六章:數(shù)組

1.選擇題

(1)B(2)C(3)D(4)D(5)B(6)C(7)B(8)A(9)A(10)D

2.填空題.

<1)按行序優(yōu)先的原則

(2)09

(3)0

(4)12

(5)6

(6)前者以回車(chē)后者以空格或回車(chē)作為間隔符

(7)strcpy(gets。函數(shù)是鍵盤(pán)輸入字符串)

(8)&a[i++]

(9)k)/2+1

(10)98

3.程序分析題.

(I)I3715

(2)123

056

009

(3)讀取輸入字符串中數(shù)字孑符

(4)①if(strl==str2)(slrcmp(strl,str2)==0)

②&cl|O|

6.4編程題

編寫(xiě)程序,查找數(shù)組中的最大元素和最小元素。

#include<stdio.h>

#defineMAX1000

voidmain(){

inta[MAX]={100,2,3,4,5,6};//假定數(shù)組為整數(shù),

intlenght=6;〃用于確定數(shù)組的長(zhǎng)度:

intmax,min;〃用于保存最大值和最小值;

inti;

max=a[0]”/開(kāi)始的參考數(shù)

min=a[0];〃同上

for(i=l;i<lenght;i++)//(1)

(

if(max<a[i])

max=a[i];

if(min>a[i])

min=a[i];

)

printf("themaxis:%d\n",max);//輸出最大值

printf("theminis:%d\n",min);〃輸出最小值

)

//為了尋找最大值和最小值,我對(duì)整個(gè)數(shù)組進(jìn)行判斷(1):當(dāng)當(dāng)前數(shù)組元素值比max的數(shù)值大時(shí),就把

max的值更新為當(dāng)前數(shù)組元素的值,

//

有15個(gè)整數(shù)按升序提排列,現(xiàn)輸入一個(gè)數(shù),請(qǐng)寫(xiě)程序,用折半查找法判斷該數(shù)在序列中是否存在,若存

在則指出是第幾個(gè)。

#include<stdio.h>

voidmain()

(

inta[15];〃用于存15個(gè)整數(shù):

inti;

intmid;

intkey;

intok=0;

intnum;

printf(”請(qǐng)輸入15個(gè)數(shù)《數(shù)與數(shù)用空格隔開(kāi))\n");

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

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

printf(”請(qǐng)輸入需要判斷的數(shù)\n”);

scanf("%d",&key);

mid=a[6];

if(mid<=key)

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

(

if(a[i]=key)

(

ok=l;

num=i+l;

}

}

elsefor(i=0;i<mid;i++)

(

if(a[i]==key)

(

ok=l;

num=i+l;

)

}

if(ok==l)

printf("存在,是第%d個(gè)\11",num);

elseprintf("不存在\n");

〃因?yàn)檎麄€(gè)數(shù)組是升序數(shù)組所以需要判斷的數(shù)要是比中間的數(shù)大,就〃在數(shù)組的右邊,否則就在數(shù)組的左

邊,只需循環(huán)左邊或右邊就能判〃斷出需要判斷數(shù)的位置和是否存在整個(gè)數(shù)組中,

(3)尋找一個(gè)整型二維數(shù)組的“鞍點(diǎn)”,所謂“鞍點(diǎn)”就是這樣一個(gè)元素,該元素在所在行中值是最小,

在所在列中值是最大。如果存在,則輸出“鞍點(diǎn)”所在的行、列及其“鞍點(diǎn)”得值。

#include<stdio.h>

intmain()

(

inta[3][3]={1,3,1,1,1,4,12,7,11};//用于存二維數(shù)組:

intline=3;〃行

intlinel;

intlist=3;〃列

intlistl;

inti,j,k,p;

intok=0;

intokl=0;

intmaxzmin;

for(i=0;Kline;i++)

(

for(p=0;p<list;p++)

(

listl=p;

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

if(a[i][p]<=a[i][j])

okl=l;

else

okl=0;

if(okl==l)

(

linel=i;

ok=l;

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

if(a[i][p]<a[k][listl])

ok=0;

if(ok==l)

break;

|

)

}

if(ok=l)

print£(”存在“鞍點(diǎn)”,“鞍點(diǎn)”在第%d行第%(1列\(zhòng):1“,1±=1+1,78班+1);

elseprintf("不存在\n");

return0;

〃先尋找行中最小值,在這基礎(chǔ)上,判斷這個(gè)最小值是否是列中最小值。

第七章:函數(shù)的調(diào)用

1.選擇題

(I)B(2)C(3)C(4)A(5)A(6)D(7)D(8)D(9)B(10)D(IDA

(12)A(13)B(14)B

2.填空題.

(i)標(biāo)準(zhǔn)庫(kù)函數(shù)自定義函數(shù)(若從函數(shù)的形式上,有參無(wú)參

(2)順序類(lèi)型

(3)定義調(diào)用

(4)①fmax(a.N)②k=p(注意非s[k]=s[p])

(5)(Dage(n-1)+2②age(n)

(6)①prt(c,n-l)②prt('',n-i)③prt('*',2*i-l)

3.程序分析題.

(I)hIo

(2)3

(3)26

(4)21

(4)525

7.4編程題

①編寫(xiě)一遞歸函數(shù)求斐波納奧數(shù)列的前40項(xiàng)。

1.#include<stdio.h>

intfib(intn)

(

if(n==l||n==2)

return1;

returnfib(n-1)+fib(n-2);

)

intmain()

(

intn;

scanf("%d”,&n);

printffib(n));

return0;

)

①編寫(xiě)程序,輸入長(zhǎng)方體E勺長(zhǎng)寬高1,IV,h。求體積及三個(gè)面的面積。

#include<stdio.h>

voiduboid(float1,floatw,floathi

(

printf("體積=%.2所”,1*0小);

printf("l*w=%.2f\n",l*w);

printf("l*h=%.2f\n",l*h);

printf("h*w=%.2f\n".h*w);

}

intmain()

(

floatl),ww,hh;

scanf("%f%f%f,&ll,&ww,&hh);

uboid(ll,ww,hh);

return0;

①編寫(xiě)程序,使給定的?個(gè)5x5的二維整型數(shù)組轉(zhuǎn)置,即行列互換。

#include<stdio.h>

intmain()

(

inta[5][5],b[5][5],ij;

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

(

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

(

scanf("%d'\&a[i](j]);

bU][i]=a[i)U);

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

(

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

{

printf("%d

printf("\n");

I

return0;

①編寫(xiě)程序,輸入一個(gè)十六進(jìn)制數(shù),輸出相應(yīng)的十進(jìn)制數(shù)。

#include<stdio.h>

intmain()

(

longintfunc(chars[]);

charstr[100];

charc;

inti=0;

intflag,flagl;

flag=0;

flagl=l;

printf('*inputahexnumber:;

while((c=getchar()i!=*\0*&&i<100&&flagl)

(

if((c<=,9,&&c>='0,)||(c<='F‘&&c>='A')||(c<='f'&&c>='a

(

flag=l;

str[i++]=c;

}

elseif(flag)

(

str[i]='\0';

printf("decimalnumber%ld:\n"zfunc(str));//

printf("Continueornot?");

c=getchar();

if(c=='n*|Ic==')

flagl=0;

elseif(c=='y1IIc==,Y')

(

flag=0;

i=0;

printf("Vnpleaseinputahexnumber:");

)

}

)

}

longintfunc(chars[])

(

longintnum=0;

inti=0;

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

(

1£(§0=,0,&&§[1.]<=,9,)〃字符串?。。。?!!

num=num*16+s[i]-'01;

elseif(s[i]>='a,&&s[i]<='f,)

num=num*16+s[i]-'a1+10;

elseif(s(i]>='A*&&s(i]<='F*)

num-num*1GIs[i]-1A*I10;

)

returnnum;

}

①編寫(xiě)程序,使輸入的一個(gè)字符串按反序存放。

#include<stdio.h>

#include<string.h>

intmain()

(

chara[100];

gets(a);

intl=strlen(a);

inti;

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

printf(*'%€",a[i]);

return0;

)

習(xí)題八

8.1選擇題

(DC(2)B(3)A(4)C(5)A(6)C(7)B(8)D(9)A(1O)B(11)C(12)D(13)C(14)A(15)D

8.2填空題

①返回值為指針的函數(shù)f指向一個(gè)函數(shù)的指針

②地址變量

③0

④int*z

⑤*(p+5)

⑥a+i&a|i]*(a+i)

⑦*(a+i)+j&a[i][j]

指向數(shù)組的指針數(shù)組開(kāi)頭的集合

⑨指針的數(shù)組

(10)指針的數(shù)組指向數(shù)組4元素的指針

8.3程序設(shè)計(jì)

①編寫(xiě)一個(gè)程序計(jì)算一個(gè)字符串的長(zhǎng)度。

#include<stdio.h>

intcompute(char*p)

(

intsum=0;

while(1)

if(*p!='\0')

{

sum++;

p=p+l;

I

elsebreak;

}

returnsum:

}

voidmain()

(

chara|10001;

intlenght;

scanf("%s",&a);

lenght=compute(a);

prinlf("字符串的長(zhǎng)度是:%d\n';lenght);

〃在儲(chǔ)存字符數(shù)組時(shí),以\0為結(jié)尾標(biāo)志,可以利用這個(gè)特點(diǎn)。

②編寫(xiě)?個(gè)程序,當(dāng)鍵盤(pán)輸入整數(shù)為1到12時(shí),解釋顯示相應(yīng)的英文月份名,鍵入其它整數(shù)時(shí)顯示錯(cuò)誤信

息。

#include<s(dio.h>

voidmain()

(

intnum:

scanf("%d",&num);

switch(num)

(

caseI:printf("Januar)f\n");break;

case2:printf("February\n");break;

case3:printf("lMarch\n");break;

case4:prin(f("April\n");break:

case5:printf(MMay\n");break;

case6:printf("June\n"):break;

case7:prin(f("July\n,');brcak;

case8;printf("August\n");brcak;

case9:prin(f("September\n");break;

case10:printf("0ctober\n");break;

case11:printf("Noveinber\n"):break:

case12:printf("Dcccnbcr\n,');brcak;

defaulcprintfC'ERRO^n");

}

}

〃簡(jiǎn)單swilch用法

③編一程序,將字符申software賦給一個(gè)字符數(shù)組,然后從第一個(gè)字母開(kāi)始間隔地輸出該串。請(qǐng)用指針完

成。

#include<stdio.h>

voidmain()

(

chara[]="software";

inti;

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

printf("%c",*a+i);

printfCVn");

}

④編一程序,將字符串中的第m個(gè)字符開(kāi)始的字符子串復(fù)制成另一個(gè)字符串。要求在主函數(shù)中輸入字符串

及m的值并輸出復(fù)制結(jié)果,在被調(diào)函數(shù)中完成復(fù)制。

#include<stdio.h>

#include<string.h>

voidcopy(char*lenght.inin,char*p2)

(

inti;

fbr(i=O;i<=lcnght;i++)

*(p2+i)=*(p+i+m-l);

)

voidmain()

(

char1000];

chara2[10001;

char*p3;

intlen:

intin;

inti;

gets(a);

scanf("%d",&m);

len=strlen(a);

copy(a,lcn,m,a2);

puts(a2);

)

〃利用指針傳遞數(shù)組給函數(shù).函數(shù)中指針指向值發(fā)生變化,也會(huì)影響、〃主函數(shù)

⑤設(shè)有一數(shù)列,包含10個(gè)數(shù),現(xiàn)要求編一程序首先按升序排好,然后從指定位置開(kāi)始的n個(gè)數(shù)按逆序重新

排列并輸出新的完整數(shù)列。進(jìn)行逆序處理時(shí)要求使用指針?lè)椒?。試編程?/p>

#include<stdio.h>

voidmain()

(

inta[10]={l,2,345,6,7,8,9,10);〃用于存儲(chǔ)10個(gè)數(shù)。

inti,j,tem;

intweizi;〃從多少位開(kāi)始序。

intn;〃需要倒序的個(gè)數(shù)。

in(sun;

scanf("%d".&weizi);

scanf("%d",&n);

for(i=0;i<10;i++)〃冒泡排序法

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

if(a[i)>aUD

(

lem=ali];

a|i]=a[j];

aU]=a[i];

)

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

printf("%d",a[i]);〃展示升序數(shù)組

printf("\n");

sun=wcizi+n-2;

fbr(i=weizi-l;i<(weizi-l+(n/2));i++)

tem=a(i];

a[i]=a[sun];

a[sun]=tem;

sun—;

I

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

printf("%d二展示變化后的數(shù)組。

print-);

)

〃本題中使用冒泡排序法,在冒泡排序法中小的會(huì)一次一次的與大交換,然后小一點(diǎn)點(diǎn)左

〃移,大一點(diǎn)點(diǎn)右移動(dòng)。要想降序排序,只需把改成就行。

⑥通過(guò)指針數(shù)組p和一維數(shù)組a構(gòu)成一個(gè)3X2的二維數(shù)組,并為a數(shù)組賦初值2、4、6、8、…。要求先

按行的順序輸出此“二維數(shù)組”,然后再按列的順序輸出它。試編程。

#include<stdio.h>

voidmain()

(

int*p(2);

inta(6];

inti;

for(i=0:i<6:i++)

scaniT%d”,&a[i]);

p|O]=&a|O];

p[l]=&a[3];

for(i=0;i<3;i++)〃第-行輸出

printf("%d",*(p[O]+i));

prmtfC\n-);

for(i=0;i<3;i++)〃第二行輸出

printf("%d",*(pll]+i));

printf("\n");

for(i=0:i<3;i++)〃列方式,輸出

(

printf("%dM,*(p[O]+i));

printf("%d\n",*(pllj+i));

}

)

⑦編寫(xiě)?一程序,從鍵盤(pán)輸入10個(gè)數(shù)存入數(shù)組data[10]中,同時(shí)設(shè)置?個(gè)指針變量p指向數(shù)組data,然后通過(guò)

指針變量p對(duì)數(shù)組按照從小到大的順序排序,最后輸出其排序結(jié)果,

#include<stdio.h>

voidmain()

intdate[10];

int*p;

inttem:

inii,j;

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

scanf("%d",&date[i]);

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

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

{

if(date[il>date(j]){

tcm=<laic[i];

p=&date[i);

*p=date|j];

date[j]=tem;

)

)

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

printf("%d,,,date[i]);

}

⑧編一程序,從存儲(chǔ)10名同學(xué)5門(mén)課程成績(jī)的二維數(shù)組中找出最好成績(jī)所在的行和列,并將最大值及所在

行列值打印出束。要求將查找和打印的功能編?個(gè)函數(shù),二維數(shù)組的輸入在主函數(shù)中進(jìn)行,并將二維數(shù)組

通過(guò)指針參數(shù)傳遞的方式由主函數(shù)傳遞到子函數(shù)中。

#include<stdio.h>

intline;

intlist;

intchazhao(int*p)

(

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論