C語言程序設(shè)計-譚浩強-第三版-課后習(xí)題答案3_第1頁
C語言程序設(shè)計-譚浩強-第三版-課后習(xí)題答案3_第2頁
C語言程序設(shè)計-譚浩強-第三版-課后習(xí)題答案3_第3頁
C語言程序設(shè)計-譚浩強-第三版-課后習(xí)題答案3_第4頁
C語言程序設(shè)計-譚浩強-第三版-課后習(xí)題答案3_第5頁
已閱讀5頁,還剩66頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1.5請參照本章例題,編寫一個C程序,輸出以下信息:

VeryGood!

解:

mian()

{pHntf(〃**************************〃),

printf(z,\n,z);

printf("VeryGood!\nz/);

printf(/z\nw);

printf(z/**************************,,j*

)

1.6編寫一個程序,輸入a、b、c三個值,輸出其中最大值。

解:

mian()

{inta,b,c,max;

printf("請輸入三個數(shù)a,b,c:\nw);

scanf("%d,%d,%d",&a,&b,&c);

max=a;

if(max<b)

max=b;

if(max<c)

max=c;

printf("最大數(shù)為:"%d",max);

)

第三章

3.6寫出以下程序運行的結(jié)果。

main()

{charcl=,a;c2=/b;c3=,c;c4=>\101;c5=,\116,;

printf(//a%cb%c\tc%c\tabc\n//,cl,c2,c3);

printf(/z\t\b%c%cz,,c4,c5);

)

解:

aaubbuuuccuui_iuuuabe

ALIN

3.7要將"China"譯成密碼,譯碼規(guī)律是:用原來字母后面的第4個字母代替原來

的字母.例如,字母"A"后面第4個字母是"E"."E"代替"A"。因此,"China"應(yīng)譯

為"Glmre"。請編一程序,用賦初值的方法使cl、c2、c3、c4、c5五個變量的值

分別為,經(jīng)過運算,使(:1。2工34式5分別變?yōu)?、1、/,「「、官,

并輸出。

解:

#include<stdio.h>

main()

{charcl=/C/,c2=/h/,c3=,i/,c4=/n,,c5=/a,;

cl+=4;

c2+=4;

c3+=4;

c4+=4;

c5+=4;

printf("密碼是%c%c%c%c%c\n”,cl,c2,c3,c4,c5);

}

運行結(jié)果:

密碼是Glmre

3.9求下面算術(shù)表達(dá)式的值。

(1)x+a%3*(int)(x+y)%利

設(shè)x=2.5,a=7,y=4.7

(2)(float)(a+b)/2+(int)x%(int)y

設(shè)a=2,b=3,x=3.5,y=2.5

(1)2.5

(2)3.5

3.10寫出程序運行的結(jié)果。

main()

{int

i=8;

j=10;

m=++i;

n=j++;

printf("%d,%d,%d,%d”,i,j,m,n);

)

解:

9,11,9,10

3.12寫出下面表達(dá)式運算后a的值,設(shè)原來a=12。設(shè)a和n都已定義為整型變

單一O

(1)a+=a(2)a-=2(3)a*=2+3(4)a/=a+a

(5)a%=(n%=2),n的值等于5

(6)a+=a-=a*=a

解:

⑴24⑵10⑶60⑷0⑸0⑹0

第四章

4.4若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,cl='a',c2='b'。

想得到以下輸出格式和結(jié)果,請寫出程序(包括定義變量類型和設(shè)計輸出)。

a=_3_b=_4_c=_5

x=1.200000;y=2.400000zz=-3,600000

x+y=_3.600__y+z=-1.20__z+x=-2.40

cl='a'_or_97(ASCII)

c2='b'_or_98(ASCII)

main()

{inta=3,b=4,c=5;

longintu=51274,n=128765;

floatx=1.2,y=2.4,z=3.6;

charcl='a箕2='b';

printf("a=%2db=%2dc=%2d\n",a,bzc);

printf("x=%f,y=%f,z=%f\n",x,y,z);

printf("x+y=%5.2fy+z=%5.2fz+x=%5.2f\n",x+y,y+z,z+x);

printf("u=%6ldn=%9ld\n",u,n);

printf("%s%s%d%s\n","cl=,a,","or",cl,"(ASCII)");

printf("%s%s%d%s\n";'c2=,a,","or",c2,"(ASCII)");

)

4.7用scanf下面的函數(shù)輸入數(shù)據(jù),使a=3,b=7,x=8.5,y=71.82,cl='A',

c2='a',問在鍵盤上如何輸入?

main()

(

inta,b;floatx,y;charclc2;

scanf("a=%d_b=%d",&a,&b);

scanf("_x=%f_y=%e",&x,&y);

scanf("_cl=%c_c2=%c,',&cl,&c2);

}

a=3__b=7

_x=8.5_y=71.82

_cl=A_c2=a

4.8設(shè)圓半徑r=l.5,圓柱高h(yuǎn)=3,求圓周長、圓面積、圓球表面積、圓球體積、

圓柱體積。用scanf輸入數(shù)據(jù),輸出計算結(jié)果,輸出時要求文字說明,取小數(shù)點

后兩位數(shù)字。請編程序。

main()

{floatrhCl,Sa,Sb,Va,Vb;

scanf(”%f,%f”,&r,&h);

Cl=2*3.14*r;

Sa=3.14*r*r;

Sb=4*Sa;

Va=4*3.14*r*r*r/S;

Vb=Sa*h;

n

printf("Cl=%.2f\nzCl);

,,

printf("Sa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n/Sa,Sb,Va,Vb);

}

4.9輸入一個華氏溫度,要求輸出攝氏溫度。公式為

c=5(F-32)用

輸出要求有文字說明,取位2小數(shù)。

main()

{floatF,c;

scanf("%f",&F);

c=5*(F-32)/9;

printf("c=%.2f",c);

)

4.10編程序,用getchar函數(shù)讀入兩個字符給cl、c2,然后分別用函數(shù)和函數(shù)

輸出這兩個字符。并思考以下問題:(1)變量cl、c2應(yīng)定義為字符型或整形?

抑二者皆可?(2)要求輸出cl和c2值的ASCII碼,應(yīng)如何處理?用putchar函

數(shù)還是printf函數(shù)?(3)整形變量與字符變量是否在任何情況下都可以互相代

替?如:

charcl,c2;

intcl,c2;

是否無條件的等價?

#include,,stdio.h"

main()

{charclzc2;

cl=getchar();c2=getchar();

putchar(cl);putchar(,\n,);putchar(c2);putchar(,\n/);

)

#include"stdio.h"

main()

{charcl,c2;

cl=getchar();c2=getchar();

,,,,

printf(cl=%dc2=%d\n,cl/c2);

printf("cl=%cc2=%c\n"zclzc2);

}

第五章

5.1什么是算術(shù)運算?什么是關(guān)系運算?什么是邏輯運算?

解:略。

5.2C語言中如何表示"真"和"假"?系統(tǒng)如何判斷一個量的"真"和"假"?

解:設(shè)有一個邏輯表達(dá)式,若其結(jié)果為"真",則以1表示;若其結(jié)果為"假",則

以。表示。但是判斷一個邏輯量的值時,以0代表"真",以非0代表"假"。例如

3&&5的值為"真",系統(tǒng)給出3&&5的值為lo

5.3寫出下面各邏輯表達(dá)式的值。設(shè)a=3,b=4,c=5o

⑴a+b>c&&b==c

(2)a11b+c&&b-c

(3)!(a>b)&&!c||1

(4)!(x=a)&&(y=b)&&0

(5)!(a+b)+c-l&&b+c/2

解:

①。

⑵1

⑶1

(4)0

⑸1

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

解:

方法一

#include<stdio.h>

main()

{inta,b,c;

printf("請輸入3個整數(shù):");

scanf("%d,%d,%d",&a,&b;&c);

if(a<b)

if(b<c)printf("max=%d\n",c);

elseprintf("max=%d\n",b);

elseif(a<c)printf("max=%d\n",c);

elseprintf("max=%d\n",a);

)

方法二:使用條件表達(dá)式,可以使程序更加簡明、清晰。

程序如下:

#include<stdio.h>

main()

{inta,bzc,temp,max;

printf(”請輸入3個整數(shù):”);

scanf(“%d,%d,%cT,&a,&b,&c);

temp=(a>b)?a:b;

max=(temp>c)?temp:c;

printf("3個整數(shù)的最大數(shù)是%d\n”,max);

)

5.5有一函數(shù):

寫一程序,輸入x值,輸出y值。

解:

#include<stdio.h>

main()

{intx,y;

printf("輸入x:

scanf("%d",&x);

if(x<l)

{y=x;

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

)

elseif(x<10)

{y=2*x-l;

printf("x=%3d,y=2*x-l=%d\n",x,y);

)

else

{y=3*x-ll;

printf("x=%3d,y=3*x-ll=%d\n",x,y);

)

)

5,6給一個百分制成績,要求輸出等級分制B\CD,、乍、90分以上為個,80~90

分為E,70~79分為'C',60分以下為,D9

解:

程序如下:

#include<stdio.h>

main()

{floatscore;

chargrade;

case2:

printf(”請輸入學(xué)生成績:“);

scanf("%f",&score);

while(score>100||(score<0)

{printf("\n輸入有誤,請重新輸入:");

scanf("%f",&score);

)

switch((int)(score/10))

{case10:

case9:grade=,A,;break;

case8:grade=,B,;break;

case7:grade='C';break;

case6:grade=,D,;break;

case5:

case4:

case3:

case1:

case0:grade='E';

)

printf("^^l>%5.1ff相應(yīng)的等級是%c。\n",score,grade);

)

說明:對輸入的數(shù)據(jù)進(jìn)行檢查,如小于0或大于100,要求重新輸入。(int)(score/10)

的作用是將(score/10)的值進(jìn)行強制類型轉(zhuǎn)換,得到一個整型值。

5.7給定一個不多于5位的正整數(shù),要求:①求它是幾位數(shù);②分別打印出每

一位數(shù)字;③按逆序打印出各位數(shù)字。例如原數(shù)為321,應(yīng)輸出123。

解:

Winclude<stdio.h>

main()

{longintnum;

intindiv,ten,hundred,thousandzten_thousand,place;

printf(“請輸入一個整數(shù)(0-99999):");

scanf(”%ld”,&num);

if(num>9999)place=5;

elseif(num>999)place=4;

elseif(num>99)place=3;

elseif(num>9)place=2;

elseplace=l;

printf("place=%d\n"zplace);

ten_thousand=num/10000;

thousand=num/1000%10;

hundred=num/100%10;

ten=num%100/10;

indiv=num%10;

switch(place)

{case5:printf(”%d,%d,%d,%d,%cT,ten_thc)usand/thousand,hundred,ten,indiv);

printf("\n反序數(shù)字為;");

,,,

pnntf(%d%d%d%d%d\n'Jndivrten/hundred/thousand/ten_thousand);

break;

case4:printf(”%d,%d,%d,%cT,thousand,hundred,tenjndiv);

printf("\n反序數(shù)字為:");

printf("%d%d%d%d\n"/indiv,ten,hundred,thousand);

break;

case3:printf("%d,%d,%d",hundred,tenjndiv);

printf("\n反序數(shù)字為:");

,,

pnntf("%d%d%d\n/indi\4ten,hundred);

break;

case2:printf("%d,%cTlen,indiv);

printf("\n反序數(shù)字為:");

printf("%d%d\n"/indiv,ten);

break;

case1:printf("%d",indiv);

printf("\n反序數(shù)字為:");

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

break;

)

)

5.8企業(yè)發(fā)放的獎金根據(jù)利潤提成。利潤I低于或等于10萬元時,獎金可提成

10%;利潤高于10萬元,低于20萬元(100000<I<200000)時,其中10萬元按

10%提成,高于1。萬元的部分,可提成7.5%;200000<1<400000時,其中20

萬元仍按上述辦法提成(下同),高于20萬元的部分按5%提成;400000<1<600000

時,高于40萬元的部分按3%提成;600000〈1410000。。時,高于60萬的部分按

1.5%提成;1>1000000時,超過100萬元的部分按1%提成。從鍵盤輸入當(dāng)月利潤

I,求應(yīng)發(fā)放獎金總數(shù)。要求:⑴用if語句編程序;(2)用switch語句編程序。

解:計算利潤時,要特別注意不同利潤的不同提成比例。例如,利潤為15萬元,

其中有10萬元按10%的比例提成,另外5萬元則按7.5%提成。

⑴用if語句編程序。

#include<stdio.h>

main()

{longi;

floatbonus,bonl/bon2/bon4,bon6,bonl0;

bonl=100000*0.1;

bon2=bonl+100000*0.075;

bon4=bon2+200000*0.05;

bon6=bon4+200000*0.03;

bonl0=bon6+400000*0.015;

printf("請輸入利潤i:");

scanf("%ld",&i);

if(i<=100000)

bonus=i*0.1;

elseif(i<=200000)

bonus=bonl+(i-100000)*0.075;

elseif(i<=400000)

bonus=bon2+(i-200000)*0.05;

elseif(i<=600000)

bonus=bon4+(i-400000)*0.03;

elseif(i<=1000000)

bonus=bon6+(i-600000)*0.015;

else

bonus=bonl0+(i-1000000)*0.01;

printf("獎金是%10.2f\n",bonus);

)

此題的關(guān)鍵在于正確寫出每一區(qū)間的獎金計算公式。例如利潤在10萬元至20

萬時,獎金應(yīng)由兩部分組成:①利潤為10萬元時應(yīng)得的獎金。即100000x0.1;

②10萬元以上部分應(yīng)得的獎金。即(num-100000)x0.075。同理,20萬?40萬這

個區(qū)間的獎金也應(yīng)由兩部分組成:①利潤為20萬元時應(yīng)得的獎金,即100000X

01x10萬x0.075;②20萬元以上部分應(yīng)得的獎金,BP(num-200000)x0.05o程

序中先把10萬、20萬、40萬、60萬、100萬各關(guān)鍵點的獎金計算出來,即bonl、

bon2、bon4>bon6、honlO;然后再加上各區(qū)間附加部分的獎金。

(2)用switch語句編程序。

輸入利潤i,確定相應(yīng)的提成等級branch

根據(jù)branch確定獎金值

0獎金=i*0.1

1獎金=bonl+(i-105)*0.075

2獎金=bon2+(i-2*105)*0.05

3

4獎金=bon4+(i-4*105)*0.03

5

6獎金=bon6+(i-6*105)*0.015

7

8

9

10獎金=bonl0+(i?106)*0.01

輸出獎金

#include<stdio.h>

main()

{longi;

floatbonus,bonl,bon2,bon4,bon6,bonlO;

intc;

bonl=100000*0.1;

bon2=bonl+100000*0.075;

bon4=bon2+200000*0.05;

bon6=bon4+200000*0.03;

bonl0=bon6+400000*0.015;

printf(”請輸入利潤i:“);

n

scanf(%ld"z&i);

c=i/100000;

if(c>10)c=10;

switch(c)

{case0:bonus=l*0.1;break;

case1:bonus=bonl+(i-100000)*0.075;break;

case2:

case3:bonus=bon2+(i-200000)*0.05;break;

case4:

case5:bonus=bon4+(i-400000)*0.03;break;

case6:

case7:

case8:

case9:bonus=bon6+(i-600000)*0.015;break;

case10:bonus=bonl0+(i-1000000)*0.01;

}

printf("獎金是%10.2f:bonus);

)

5.9輸入4個整數(shù),要求按由大到小的順序輸出。

解:此題采用依次比較的方法排出其大小順序。在學(xué)習(xí)了循環(huán)和數(shù)組以后,可以

有更多的排序方法。

#include<stdio.h>

main()

{intt,a,b,c,d;

printf(”請輸入4個整數(shù):”);

scanf(“%d,%d,%d,%cT,&a,&b,&c,&d);

printf("\na=%d/b=%dzc=%d/d=%d\n",a,b/c,d);

if(a>b){t=a;a=b;b=t;}

if(a>c){t=a;a=c;c=t;}

if(a>d){t=a;a=d;d=t;}

if(b>c){t=a;b=c;c=t;}

if(b>d){t=b;b=d;d=t;}

if(c>d){t=c;c=d;d=t;}

printf("排序結(jié)果如下:\n");

printf("%dz%d,%d,%d\n",a/b,c,d);

}

5.10有4個圓塔,圓心分別為(2,2)、(.2,2)、(2,-2)>(-2,-2),圓半徑為1。

這4個塔的高度分別為10m。塔以外無建筑物。今輸入任一點的坐標(biāo),求該點的

建筑高度(塔外的高度為零)。

程序如下:

#include<stdio.h>

main()

{inth=10;

floatXl=2,yl=2,x2=?2,y2=2,x3=?2,y3=-2,x4=?2,y4=?2,x,y,dl,d2,d3,d4;

printf("請輸入一個點(x,y):");

scanf("%f,%f",&x,&y);

dl=(x-xl)*(x-xl)+(y-yl)*(y-yl);

d2=(x-x2)*(x-x2)+(y+y2)*(y+y2);

d3=(x+x3)*(x+x3)+(y-y3)*(y-y3);

d4=(x+x4)*(x-x4)*(y+y4)*(y+y4);

if(dl>l&&d2>l&&d3>l&&d4>l)h=0;

printf("該點高度為%d\n",h);

)

第六章

第六章循環(huán)控制

6.1輸入兩個正整數(shù)m和n,求其最大公約數(shù)和最小公倍數(shù)。

main()

{long

scanf(“%ld,%lcT,&m,&n);

for(;i<=m&&i<=n;i++)

{if(m%i==0&&n%i==0)s=i;}

if(m>=n)j=m;

elsej=n;

for(;!(j%m==0&&j%n==0);j++);

printf(,,s=%ldj=%ld\n",sj);

)

6.2輸入一行字符,分別統(tǒng)計出其中英文字母、空格、數(shù)字和其他字符的個數(shù)。

#include"stdio.h"

main()

{charc;inti=O,j=O,k=O,l=O;

while((c=getchar())!=,\n,)

{if(c>=65&&c<=901|c>=97&&c<=122)i++;

elseif(c>=48&&c<=57)j++;

elseif(c==32)k++;

else1++;}

,

printf("i=%d/j=%d,k=%dj=%d\n'zijzkj);

}

6.3求Sn=a+aa+aaa+...+aa...aaa(有n個a)之值,其中a是一個數(shù)字。例如:

2+22+222+2222+22222(n=5),n由鍵盤輸入。

#include"math.hn

main()

{intn,sum=0,i=l,s=2;

scanf("%d",&n);

while(i<=n)

{sum=sum+s;s=s+2*pow(10,i);

i++;}

,,,,

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

}

6.4求,(即求l!+2!+3!+4!+5!+.??+20!)

main()

{intn,i=l;longsum=0,s=l;

scanf(”%d”,&n);

while(i<=n){s=s*i;sum=sum+s;i++;}

printf("sum=%ld\n",sum);

}

6.5求

main()

{doublei=l,j=lzk=lzsl=0/s2=0,s3=0/sum;

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

for(;j<=50;j++)s2=s2+j*j;

for(;k<=10;k++)s3=s3+l/k;

sum=sl+s2+s3;

printf("sum=%f\n",sum);

)

6.6打印出所有"水仙花數(shù)",所謂"水仙花數(shù)"是指一個三位數(shù),其各位數(shù)字立方

和等于該本身。例如:153是一個水仙花數(shù),因為153=1八3+5八3+3A3。

#include"math.h"

main()

{intx=100,a,b,c;

while(x>=100&&x<1000){a=0.01*x;b=10*(0.01*x-a);c=x-100*a-10*b;

if(x==(pow(a,3)+pow(b,3)+pow(c,3)))printf("%5d",x);x++;}

}

6.7一個數(shù)如果恰好等于它的因子之和,這個數(shù)就稱為“完數(shù)”。例如,6的因子為

1、2、3,而6=1+2+3,因此6是院數(shù)”。編程序找出1000之內(nèi)的所有完數(shù),并

按下面格式輸出其因子:

6itsfactorsare1>2、3

main()

{intm,i,j,s;

for(m=6;m<10000;m++)

{s=l;

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

if(m%i==0)s=s+i;

if(m-s==0)

{printf("%5ditsfastorsare1"zm);for(j=2;j<m;j++)if(m%j==0)

printf("%d”,j);printf(”\n”);}

)

}

main()

{intm,i,j,s;

for(m=6;m<1000;m++)

{s=m-l;

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

if(m%i==0)s=s-i;

if(s==O)

{printf("%5ditsfastorsare1",m);for(j=2;j<m;j++)if(m%j==0)

printf("%d"J);pnntf(',\nn);}

}

)

6.8有一分?jǐn)?shù)序列:

求出這個數(shù)列的前20項之和。

main()

{inti=lzn;doublet,x=l,y=2,s,sum=0;

scanf(“%ld”,&n);

while(i<=n){s=y/x;sum=sum+s;t=y;y=y+x;x=t;i++;}

printf("%f\n”,sum);

)

6.9一球從100米高度自由下落,每次落地后返回原高度的一半,再落下。求它

在第10次落地時共經(jīng)過多少米?第10次反彈多高?

main()

{inti,n;doubleh=100/s=100;

scanf("%d",&n);

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

{h*=0.5;if(i==l)continue;s=2*h+s;}

printf("h=%f,s=%f\n",h,s);

)

6.10猴子吃桃問題。猴子第一天摘下若干個桃子,當(dāng)即吃了一半,還不過癮,又

多吃了一個。第二天早上又將剩下的桃子吃掉一半,又多吃一個。以后每天早上

都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩下一個桃子

了。求第一天共摘多少桃子。

main()

{inti=l,sum=0;

for(;i<=10;sum=2*sum+lj++);

,,,,

printf(sum=%d\n/sum);

}

6.11用迭代法求。求平方根的迭代公式為:

要求前后兩次求出的得差的絕對值少于0.00001c

#include"math.h"

main()

{floatx0,xl,a;

scanf("%f",&a);

xl=a/2;

do

{x0=xl;xl=(x0+a/x0)/2;}

while(fabs(x0-xl)>=0.00001);

printf(”%.3f\n",xl);

}

6.12用牛頓迭代法求方程在1.5附近的根。

main()

{doublex,y;x=1.5;

do{y=2*x*x*x-4*x*x+3*x-6;

x=x-y/(6*x*x-8*x+3);}

while(y!=0);

n

printf(x=%.3f\n"zx);

)

6.13用二分法求方程在(-10,10)之間的根

main()

{doublexlzx2,yl,y2;xl=-10;x2=10;

do{yl=2*xl*xl*xl-4*xl*xl+3*xl-6;

xl=xl-yl/(6*xl*xl-8*xl+3);}

while(yl!=0);

do

{y2=2*x2*x2*x2-4*x2*x2+3*x2-6;

x2=x2-y?/(6*x2*x2-8*x2+3);}

while(y2!=0);

,,,

printf(xl=%.3f/x2=%.3f\n',xl/x2);

}

6.14打印以下圖案

***

#include"math.h"

main()

{inti,j,k;

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

{for(j=0;j<=2-i;j++)

printf("");

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

printf("*");

printf("\n");

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

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

printf("");

for(k=0;k<=4-2*i;k++)

printf("*");

printf("\n");

}

)

第七章

第七章數(shù)組

7.1用篩法求之內(nèi)的素數(shù)。

main()

{intij,a[100];

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

{a[i]=i;

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

{if(j<i)

if(a[i]%j==O)

break;

if(a[i]-j==O)

printf("%5d",a[i]);

)

)

printf("\n");

)

#include"math.h"

main()

{staticintij,k,a[98];

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

{a[i]=i;k=sqrt(i);

for(j=2;j<=a[i];j++)

if(j<k)if(a[i]%j==O)

break;

if(j>=k+l)

printf("%5d",a[i]);

)

printf("\n");

)

7.2用選擇法對10個整數(shù)從小到大排序。

main()

{inti,j,a[10],t;

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

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

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

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

if(a[i]>a[i+l])

{t=a[i+l];a[i+l]=a[i];a[i]=t;}

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

printf("%5d",a[i]);

)

main()

{staticinta[10],i,j,k,t;

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

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

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

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

if(a[i]>a[i+l])

{t=a[i+l];a[i+l]=a[i];a[i]=t;}

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

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

printf("\n");

)

7.3求一個3x3矩陣對角線元素之和。

main()

{inti=0,j=0,a[3][3],sl,s2;

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

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

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

sl=a[0][0]+a[l][l]+a[2][2];

s2=a[0][2]+a[l][l]+a[2][0];

printf("sl=%d,s2=%d\n",sl,s2);

)

main()

{

staticinti,j,sl,s2,a[3][3];

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

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

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

sl=a[l][l]+a[2][2]+a[3][3];

s2=a[l][3]+a[2][2]+a[3][l];

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

)

7.4已有一個已排好的數(shù)組今輸入一個數(shù)要求按原來排序的規(guī)律將它插入數(shù)組

中。

main()

{staticinta[10]={l,7,8,17,23,24,59,62,101};inti,j,t;

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

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

if(a[i]<a[i-l])

{t=a[i-l];a[i-l]=a[i];a[i]=t;}

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

printf("%5d",a[i]);printf("\n");

)

main()

(

staticinta[5]={l,4,5,6,7};

inti,t,b;

scanf("%d",&b);

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

{if(b<=a[i])

{t=a[i];a[i]=b;b=t;}

printf("%d",a[i]);}

printf("%d",b);

)

7.5將一個數(shù)組的值按逆序重新存放,例如,原來順序為:8,6,5,4,lo要求

改為:1,4,5,6,8o

main()

{inti,b[10];

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

scanf("%d"z&b[i]);

for(i=9;i>-l;i—)

printf("%5d",b[i]);

printf("\n");}

7.6打印出以下楊輝三角形(要求打印出10行)。

1

11

121

1331

14641

15101051

main()

(

staticintm,n,k,b[15][15];

b[0][l]=l;

for(m=l;m<15;m++)

{

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

(

b[m][n]=b[m-l][n-l]+b[m-l][n];

printf("%-5d",b[m][n]);

)

printf("\n");

)

)

)

main()

{inti,j,n,k,a[10][10];

static3[][1]={{1},{1},{1},{1},{1},{1},{1},{1},{1},{1});

a[l][l]=l;

for(k=2,k<ll;k++)

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

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

a[i][j]=a[i-l][j-l]+a[i-l][j];

for(k=l;k<ll;k++)

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

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

printf("%d",a[i]U]);

)

7.7打印"魔方陣",所謂魔方陣是指這樣的方陣,它的每一行、每一列和對角線

之和均相等。例如,三階魔方陣為

816

357

492

要求打印出由1?n2的自然數(shù)構(gòu)成的魔方陣。

解:

#include<stdio.h>

main()

{inta[16][16],i,i,k,pzm,n;

P=l;

while(p==l)

{printf("Entern(n=l-15):");

scanf("%d",&n);

if((n!=0)&&(n<=15)&&(n%2!=0))p=0;

)

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

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

7-8

Winclude<iostream>

voidmain()

inta[4][4],i,j,max,min,kl,k2,flag;

printf("輸入一個4*4的數(shù)組\n\n");

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

(

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

(

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

}

}

printf("鞍點為:\n\n");

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

(

max=a[i][O];

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

(

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

(

max=a[i][j];

kl=j;

}

}

min=a[O][kl];

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

(

if(min>=a[j][kl])

{

min=a[j][kl];

k2=j;

)

}

if((max!=min))flag=O;

else

(

flag=l;

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

break;

}

}

if(flag==O)printf("不存在\n\n");

)

7-9

#include<iostream>

voidmain()

floata[15]={100,98,65,55,34,23,23,12,11,9,7,6,43,2}^;

intijow,high,mid;

printf("原數(shù)組為:\n\n");

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

(

printf("%6.2f"za[i]);

)

printf("\n\n輸入一個數(shù)n\n\n");

scanf("%f",&n);

low=0;

high=14;

i=0;

while(low<=high)

(

mid=(low+high)/2;

if(a[mid]==n)

(

printf("該數(shù)是數(shù)組中第%d個元素\n\n",mid+l);

i++;

break;

)

elseif(a[mid]<n)high=mid-l;

elselow=mid+l;

)

if(i==0)printf(、無此數(shù)!!\n\n");

}

7-10

#include<iostream>

voidmain()

(

chara[3][80];

inti/j/upon=0,low=0,num=0/spa=0zoth=0;

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

(

printf("輸入第%d行文字\n\n'i);

gets(a[i]);

for(j=0;j<80&&a[i][j]!=,\0,;j++)

?f(3[i]U]>=,A'&&a[i][j]<=,Z')upon+=l;

elseif(a[i][j]>='a'&&a[i][j]<=,z,)low+=l;

elseif(a[i][j]>=48&&a[i][j]<=57)num+=l;

elseif(a[i][j]=='')spa+=l;

elseoth+=l;

)

)

printf("英文大寫字母:%d4^\n\n",upon);

printf("英文小寫字母:%dj\n\n",low);

printf("數(shù)字:%dj\n\n",num);

printf("空格:%d個\n\n",spa);

printf("其他字符:%d個\n\n",oth);

)

7-11

Winclude<iostream>

voidmain()

(

inti,j;

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

(

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

{

printf("");

}

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

(

printf("*");

)

printf("\n");

)

)

7-12

#include<iostream>

voidmain()

{

chara[80],b[80];

inti,j;

printf("輸入密碼\n\n");

gets(a);

for(i=0;i<80&&a[i]!='\0';i++)

if((a[i]>='A')&&(a[i]<='Z'))

b[i]=155-a[i];

)

elseif((a[i]>='a')&&(a[i]<='z'))

|

b[i]=219-a[i];

)

elseb[i]=a[i];

}

b[i]=>\O';

printf("密文為:\n\n");

puts(a);

printf("原文為:\n\n");

puts(b);

7-13

#include<iostream>

voidmain()

{

chara[80],b[80];

inti,j,k;

printf("輸入第1個字符串\n\n");

gets(a);

printf("輸入第2個字符串\n\n");

gets(b);

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

(

if(a[i]=='\O')

(

k=i;

for(j=0;j<80&&b[j]!='\0';j++)

(

a[k]=b[j];

k++;

)

a[k]='\O';

break;

}

}

printf("連接后字符串為:\n\n");

puts(a);

}

7-14

#include<iostream>

voidmain()

(

chara[80],b[80];

intij,k;

printf("輸入第1個字符串\n\n");

gets(a);

printf("輸入第2個字符串\n\n");

gets(b);

for(i=0;(i<80)&&(a[i]!='\0')&&(b[i]!='\0');i++)

(

k=a[i]-b[i];

if(k>0)

(

printf("\n\n字符串a(chǎn)大于字符串b:%4d\n\n",k);

break;

}

elseif(k<0)

(

printf("\n\n字符串a(chǎn)小于字符串b:%4d\n\n",k);

break;

)

elsek=0;

}

if(k==O)printf("\n\n字符串a(chǎn)等于字符串b:%4d\n\n",k);

)

7-15

#include<iostream>

voidmain()

|

charsl[80],s2[80];

inti,j;

printf("輸入數(shù)組sl\n\n");

gets(sl);

printf("輸入數(shù)組s2\n\n");

gets(s2);

for(i=0;i<80&&s2[i]!='\0';i++)

(

sl[i]=s2[i];

}

sl[i]='\O';

printf("\n\n復(fù)制后的數(shù)組為:\n\n");

puts(sl);

)

第八章

8-1

#include<iostream>

voidmain()

(

intmax_div(intjnt);

intmin_mul(int,int);

intm,n;

printf("輸入兩個整數(shù)\n\n“);

scanf("%d%d",&m,&n);

if(max_div(m,n)==O)printf("\n\n無最大公約數(shù)為\n\n“);

elseprintf("\n\n最大公倍數(shù)為:%d\n\n"zmax_div(mzn));

printf("\n\n最大公倍數(shù)為:%d\n\n"/min_mul(m,n));

}

intmax_div(intkl,intk2)

(

intmin(intjnt);

inti,k,flag;

k=min(kl,k2);

for(i=k;i>l;i-)

(

if((kl%i==0)&&(k2%i==0))

(

return(i);

flag=l;

break;

)

elseflag=O;

)

if(flag==O)return(O);

)

intmin_mul(intkljntk2)

(

intmax(intjnt);

inti,k;

k=max(kl,k2);

for(i=k;;i++)

if((i%kl==O)&&(i%k2==O))

return(i);

break;

)

}

)

intmin(intkljntk2)

(

intmin;

min=kl;

if(kl>k2)min=k2;

return(min);

}

intmax(intkljntk2)

(

intmax;

max=kl;

if(kl<k2)max=k2;

return(max);

)

8-2

#include<iostream>

Winclude<math.h>

voidmain()

(

voidrootl(float,float,float);

voidroot2(float,float,float);

voidroot3(float,float,float);

floata,b,c,k;

printf("輸入a,b,c的值\n\n“);

',

scanf(%f%f%f",&a,&b/&c);

k=b*b-4*a*c;

if(k>0)rootl(a,b,c);

elseif(k==O)root2(a,b,c);

elseroot3(a,b,c);

}

voidrootl(floata,floatb,floatc)

(

floatp,q;

p=-b/(2*a);

q=sqrt(b*b-4*a*c)/(2*a);

方程的兩個根為:

printf("\n\nxl=%6.2f/x2=%6.2f\n\n",p+q,p-q);

)

voidroot2(floata,floatb,floatc)

(

floatp;

p=-b/(2*a);

printf("\n\n方程的兩個根為:xl=x2=%6.2f\n\n",p);

}

voidroot3(floata,floatb,floatc)

(

floatp,q;

p=-b/(2*a);

q=sqrt(-b*b+4*a*c)/(2*a);

方程的兩個根為:

printf("\n\nxl=%6.2f+%6.2fi,x2=%6.2f-%6.2fi\n\n",p,q,pzq);

}

8-3

#include<iostream>

voidmain()

(

intprime(int);

intx;

printf(“輸入一個正整數(shù)\n\n");

scanfC%d';&x);

if(prime(x)==O)printf("\n\n此數(shù)為素數(shù)\n\n“);

elseprintf("\n\n此數(shù)不是素數(shù)\n\n");

}

intprime(intx)

(

inti,flag;

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

(

if(x%i==0)

(

flag=l;

break;

)

elseflag=0;

)

return(flag);

}

8-4

#include<iostream>

voidmain()

voidexchange(inta[3][3]);

inta[3][3],i,j;

printf("輸入一個3*3的矩陣\n\n");

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

(

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

(

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

}

}

exchange(a);

print耳"\n\n轉(zhuǎn)置后的矩陣為:\n\n");

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

(

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

(

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

}

printf("\n");

)

)

8-5

#include<iostream>

voidmain()

(

voidexchange(charstr[]);

charstr[80];

printf("輸入一個字符串\n\n");

gets(str);

exchange(str);

printf("\n\n反序字符串為:\n\n");

puts(str);

)

voidexchange(charstr[])

(

inti,j,k;

chartemp;

for(i=0;;i++)

(

if(str[i]=='\O')break;

}

k=i/2;

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

temp=str[j];

str[j]=str[i-l-j];

str[i-l-j]=temp;

}

str[i]='\O';

)

8-6

#include<iostream>

voidmain()

(

voidstrcat(charstrl[],charstr2[]);

charstrl[80],str2[80];

printf("輸入strl\n\n");

gets(strl);

printf("\n\n輸入str2\n\n");

gets(str2);

strcat(strl,str2);

printf("\n\n連接后的字符串為:\n\n");

puts(strl);

}

voidstrcat(charstrl[],charstr2[])

(

inti,j;

for(i=0;;i++)

(

if(strl[i]=='\O')

(

for(j=0;str2U]!='\0';j++)

|

strl[i]=str2[j];

i+=l;

}

break;

}

}

strl[i]='\O';

)

8-7

#include<iostream>

voidmain()

voidstrcpy(charstrl[],charstr2[]);

charstrl[80],str2[80];

printf("輸入str2\n\n");

gets(str2);

strcpy(strl,str2);

printf("\n\n復(fù)制后的字符串為:\n\n");

puts(strl);

)

voidstrcpy(charstrl[],charstr2[])

{

intij=0;

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

(

if((str2[i]=='a')||(str2[i]=='e')||(str2[i]=='i')||(str2[i]=='o')||(str2[i]=='u'))

(

strl[j]=str2[i];

j++;

}

}

strl[j]=,\O';

)

8-8

#include<iostream>

voidmain()

(

voidstradd(charstr[]);

charstr[80];

printf("輸入一串?dāng)?shù)字\n\n");

gets(str);

stradd(str);

printf("\n\n加空格后的字符串\n\n");

puts(str);

)

voidstradd(charstr[])

(

chara[80];

inti=0,j;

for(j=0;str[j]!='\0';j++)

(

a[i]=str[j];

a[i+l]='';

i+=2;

)

a[i]='\O';

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

str[i]=a[i];

}

str[i]='\O';

}

8-9

#include<iostream>

voidmain()

voidnum(charstr[]Jnta[]);

charstr[80];

inta[4]={0};

printf("輸入一個字符串\n\n“);

gets(str);

num(str,a);

printf("字母個數(shù)為%d\nn,a[O]);

printf("數(shù)字個數(shù)為%d\n';a[l]);

printf("空格個數(shù)為%d\n",a[2]);

printf("其它字符個數(shù)為:%d\n",a[3]);

}

voidnum(charstr[],inta[])

inti/word=0/num=0,span=0,oth=0;

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

if((str[i]>='A'&&str[i]<=,Z,)||(str[i]>=,a'&&str[i]<=,z,))word+=l;

elseif(str[i]>=48&&str[i]<=57)num+=l;

elseif(str[i]=='*)span+=l;

elseoth+=l;

)

a[0]=word;

a[l]=num;

a[2]=span;

a[3]=oth;

)

8-10

#include<iostream>

voidmain()

intword(charc);

intlongest(charstr[]);

inti;

charstr[80];

printf("輸入一行字符串\n\n");

gets(str);

printf("\n\n最長的單詞為:\n\n");

for(i=longest(str);word(str[i]);i++)

printf("%c",str[i]);

printf("\n");

)

intword(charc)

(

if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))return1;

elsereturn0;

)

intlongest(charstr[])

(

inti,flag=ljen=0zpoint,max_len=0,max_point;

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

(

if(word(str[i]))

(

if(flag==l)

{

point=i;

flag=0;

)

elselen++;

}

else

(

flag=l;

if(len>max_len)

|

max_len=len;

max_point=point;

)

len=0;

)

}

return(max_point);

}

8-11

Winclude<iostream>

voidmain()

(

charstr[80];

voidsort(charstr[]);

printf("輸入一個字符串\n\n");

gets(str);

sort(str);

printf("\n\n字符由小到大排序為:\n\n");

puts(str);

)

voidsort(charstr[])

(

inti,j;

chartemp;

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

(

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

(

if(str[j]>str[j+l])

(

temp=str[j];

str[j]=str[j+l];

str[j+l]=temp;

)

)

}

)

8-12

Winclude<iostream>

#include<math.h>

voidmain()

{

inta,b,c,d;

floatroot(inta,intb,intc,intd);

printf("輸入a,b,c,d\n\n");

seanf("%d%d%d%d",&a,&b,&c,&d);

printf("\n\n在1附近的根為:%f\n\n",root(a,b,c,d));

)

floatroot(inta,intbjntc,intd)

floatx=l/xl/f/fl;

do

(

xl=x;

f=((a*xl+b)*xl+c)*xl+d;

fl=(a*xl+b)*xl+c;

x=xl-f/fl;

}while(fabs(x-xl)>=le-5);

return(x);

)

8-13

#include<iostream>

voidmain()

(

floatp(intjloat);

intn;

floatx;

printf("輸入n和x\n\nH);

scanf(',%d%f",&n,&x);

printf("\n\n%d階勒德讓多項式的值為:%f\n\n",n,p(n,x));

)

floatp(intn,floatx)

(

if(n==0)return1;

elseif(n==l)returnx;

elsereturn((2*n-l)*x-p(n-l,x)-(n-l)*p(n-2,x))/n;

}

8-14

#include<iostream>

#definenl2

Wdefinen25

floata_stu[nl],a_cou[n2];

voidmain()

(

voidinput(floata[][n2]);

voidstu_aver(floata[][n2]);

voidcou_aver(floata[][n2]);

inthightest(int*s,int*c,floata[][n2]);

floatd(floata[][n2]);

inti,j,s=O,c=O;

floatscore[nl][n2],h;

input(score);

stu_aver(score);

cou_aver(score);

printf("\n\n序號課程12345平均成績\n\n");

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

{

printf("NO.%d",i+l);

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

(

printf("%8.2f",score[i][j]);

)

printf("%8.2f\n\n",a_stu[i]);

)

printf("課程平均,

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

(

printf("%8.2f',a_cou[i]);

)

h=hightest(&s,&c,score);

printf("\n\n最高成績?yōu)椋海是第%d號學(xué)生,第%d門課的成績\n\n",h,s,c);

printf("平均方差為:%f\n\n",d(score));

}

voidinput(floata[][n2])

(

intij;

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

(

printf("\n\n輸入%d個學(xué)生的5個成績\n\n",i+l);

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

(

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

)

)

)

voidstu_aver(floata[][n2])

(

inti,j;

floats;

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

(

s=0;

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

s+=a[i][j];

}

a_stu[i]=s/n2;

}"

}

voidcou_aver(floata[][n2])

(

intij;

floats;

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

(

s=0;

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

(

s+=a[j][i];

}

a_cou[i]=s/nl;

}"

)

inthightest(int*sjnt*c,floata[][n2])

(

floathightest=O;

inti,j;

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

(

for(j=0;j<n2;j++

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論