c-程序設(shè)計-第四版答案_第1頁
c-程序設(shè)計-第四版答案_第2頁
c-程序設(shè)計-第四版答案_第3頁
c-程序設(shè)計-第四版答案_第4頁
c-程序設(shè)計-第四版答案_第5頁
已閱讀5頁,還剩107頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第1章程序設(shè)計和C語言1

1.1什么是計算機(jī)程序1

1.2什么是計算機(jī)語言1

1.3C語言的發(fā)展及其特點3

1.4最簡單的C語言程序5

1.4.1最簡單的C語言程序舉例6

1.4.2c語言程序的結(jié)構(gòu)10

1.5運(yùn)行C程序的步驟與方法12

1.6程序設(shè)計的任務(wù)14

1-5#include<stdio.h>

intmain()

(printf(”**************************\n\n”)?

printf(nVeryGood!\n\nH);

printf(”**************************\n')

return0;

)

l-6#include<stdio.h>

intmain()

{inta,b,c,max;

printf(upleaseinputa,b,c:\nM);

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

max=a;

if(max<b)

max=b;

if(max<c)

max=c;

printfC'Thelargestnumberis%d\n”,max);

return0;

)

第2章算法一程序的靈魂16

2.1什么是算法16

2.2簡單的算法舉例17

2.3算法的特性21

2.4怎樣表示個算法22

2.4.1用自然語言表示算法22

2.4.2用流程圖表示算法22

2.4.3三種基本結(jié)構(gòu)和改進(jìn)的流程圖26

2.4.4用NS流程圖表示算法28

2.4.5用偽代碼表示算法31

2.4.6用計算機(jī)語言表示算法32

2.5結(jié)構(gòu)化程序設(shè)計方法34

習(xí)題36

第章最簡單的C程序設(shè)計一順序程序設(shè)計37

3.1順序程序設(shè)計舉例37

3.2數(shù)據(jù)的表現(xiàn)形式及其運(yùn)算39

3.2.1常量和變量39

3.2.2數(shù)據(jù)類型42

323整型數(shù)據(jù)44

3.2.4字符型數(shù)據(jù)47

3.2.5浮點型數(shù)據(jù)49

3.2.6怎樣確定常量的類型51

3.2.7運(yùn)算符和表達(dá)式52

3.3C語句57

3.3.1C語句的作用和分類57

3.3.2最基本的語句一賦值語句59

3.4數(shù)據(jù)的輸入輸出65

3.4.1輸入輸出舉例65

3.4.2有關(guān)數(shù)據(jù)輸入輸出的概念67

3.4.3用printf函數(shù)輸出數(shù)據(jù)68

3.4.4用scant函數(shù)輸入數(shù)據(jù)75

3.4.5字符數(shù)據(jù)的輸入輸出78

習(xí)題82

3-1#include<stdio.h>

#include<math.h>

intmain()

{floatp,r,n;

r=0.1;

n=10;

p=pow(l+r,n);

printf(Hp=%f\nn,p);

return0;

3-2-1

#include<stdio.h>

#include<math.h>

intmain()

{floatr5,r3,r2,rl,r0,p,pl,p2,p3,p4,p5;

p=1000;

r5=0.0585;

r3=0.054;

r2=0.0468;

rl=0.0414;

r0=0.0072;

pl=p*((l+r5)*5);//一次存5年期

p2=p*(l+2*r2)*(l+3*r3);〃先存2年期,到期后將本息再存3年期

p3=p*(1+3*r3)*(1+2*r2);〃先存3年期,到期后將本息再存2年期

p4=p*pow(1+r1,5);〃存1年期,到期后將本息存再存1年期,連續(xù)存5次

p5=p*pow(l+r0/4,4*5);//存活期存款?;钇诶⒚恳患径冉Y(jié)算一次

printf(upl=%f\nH,p1);//輸出按第1方案得到的本息和

printf("p2=%f\nH,p2);//輸出按第2方案得到的本息和

printf(',p3=%An,\p3);//輸出按第3方案得到的本息和

printf("p4=%f\nM,p4);//輸出按第4方案得到的本息和

printf(up5=%f\nH,p5);//輸出按第5方案得到的本息和

return0;

)

3-2-2

#include<stdio.h>

#include<math.h>

intmain()

{doubler5,r3,r2,rl,rO,p,p1,p2,p3,p4,p5;

p=1000;

r5=0.0585;

r3=0.054;

r2=0.0468;

rl=0.0414;

r0=0.0072;

pl=p*((l+r5)*5);//一次存5年期

p2=p*(l+2*r2)*(l+3*r3);〃先存2年期,到期后將本息再存3年期

p3=p*(1+3*r3)*(1+2*r2);〃先存3年期,到期后將本息再存2年期

p4=p*pow(l+rl,5);//存1年期,到期后將本息存再存1年期,連續(xù)存5次

p5=p*pow(1+r0/4,4*5);//存活期存款。活期利息每一季度結(jié)算一次

printf(upl=%f\nn,p1);//輸出按第1方案得到的本息和

printf(up2=%f\nH,p2);//輸出按第2方案得到的本息和

printf(np3=%f\nn,p3);//輸出按第3方案得到的本息和

printf(np4=%f\n",p4);//輸出按第4方案得到的本息和

printf("p5=%f\n",p5);//輸出按第5方案得到的本息和

return0;

3-2-3

#include<stdio.h>

#include<math.h>

intmain()

{floatr5,r3,r2,rl,r0,p,pl,p2,p3,p4,p5;

p=1000;

r5=0.0585;

[3=0.054;

r2=0.0468;

rl=0.0414;

r0=0.0072;

pl=p*((l+r5)*5);//一次存5年期

p2=p*(1+2*r2)*(1+3*r3);〃先存2年期,到期后將本息再存3年期

p3=p*(l+3*r3)*(l+2*r2);〃先存3年期,到期后將本息再存2年期

p4=p*pow(l+r1,5);//存1年期,到期后將本息存再存1年期,連續(xù)存5次

p5=p*pow(l+r0/4,4*5);//存活期存款?;钇诶⒚恳患径冉Y(jié)算一次

printf(np1=%10.2f\nn,p1);//輸出按第1方案得到的本息和

printf('rp2=%10.2f\nu,p2);//輸出按第2方案得到的本息和

printf(',p3=%10.2f\n,,,p3);//輸出按第3方案得到的本息和

printf("p4=%10.2f\n\p4);//輸出按第4方案得到的本息和

printf(np5=%10.2f\n',,p5);//輸出按第5方案得到的本息和

return0;

3-3.

#include<stdio.h>

#include<math.h>

intmain()

{floatd=300000,p=6000,r=0.01,m;

m=log10(p/(p-d*r))/log10(1+r);

printf(',m=%6.2f\n,,,m);

return0;

)

3-4

#include<stdio.h>

intmain()

{intcl,c2;

cl=197;

c2=198;

printf(ucl=%c,c2=%c\n",cl,c2);

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

return0;

)

3-5

#include<stdio.h>

intmain()

{inta,b;

floatx,y;

charcl,c2;

scanf(na=%db=%d';&a,&b);

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

scanf(n%c%cn,&cl,&c2);

printf(na=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c\n",a,b,x,y,cl,c2);

return0;

3-6

#include<stdio.h>

intmain()

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

cl=cl+4;

c2=c2+4;

c3=c3+4;

c4=c4+4;

c5=c5+4;

printf(Hpassworis%c%c%c%c%c\nM,c1,c2,c3,c4,c5);

return0;

)

3-7

#include<stdio.h>

intmain()

{floath,r,l,s,sq,vq,vz;

floatpi=3.141526;

printf("請輸入圓半徑r,圓柱高h(yuǎn):”);

scanf("%f,%f”,&r,&h);〃要求輸入圓半徑r和圓柱高h(yuǎn)

l=2*pi*r;〃計算圓周長1

s=r*r*pi;〃計算圓面積s

sq=4*pi*r*r;〃計算圓球表面積sq

vq=3.0/4.0*pi*r*r*r;〃計算圓球體積vq

vz=pi*r*r*h;〃計算圓柱體積vz

printf("圓周長為:l=%6.2f\n",l);

printf("圓面積為:s=%6.2hn",s);

printf("圓球表面積為:sq=%6.2f\n*',sq);

printf("圓球體積為:v=%6.2f\n'\vq);

printf("圓柱體積為:vz=%6.2f\n",vz);

return0;

3-8-1

#include<stdio.h>

inimain()

(

intcl,c2;〃整型定義

printf("請輸入兩個整數(shù)cl,c2:n);

scanf(”%d,%d”,&cl,&c2);

printf("按字符輸出結(jié)果An”);

printf(,,%c,%c\n,',cl,c2);

printf("按ASCII碼輸出結(jié)果為:\n“);

printf(n%d,%d\nn,cl,c2);

return0;

)

3-8-2

#include<stdio.h>

intmain()

(

charcl,c2;〃定義字符型變量

intil,i2;〃定義整型變量

printf("請輸入兩個字符cl,c2:n);

scanf("%c,%c”,&c1,&c2);

il=cl;〃賦值給整型變量

i2=c2;

printf("按字符輸出結(jié)果:\n)

printf(,,%c,%c\n,',il,i2);

printf("按整數(shù)輸出結(jié)果:\n");

printf(n%d,%d\nn,cl,c2);

return0;

3-8-3

#include<stdio.h>

intmain()

(

charcl,c2;〃定義為字符型

intil,i2;〃定義為整型

primf("請輸入兩個整數(shù)il,⑵)

scanf(M%d,%dn,&il,&i2);

cl=il;〃將整數(shù)賦值給字符變量

c2=i2;

printf("按字符輸出結(jié)果

printf("%c,%c\n",cl,c2);

printf("按整數(shù)輸出結(jié)果:\n)

printf(n%d,%d\nH,cl,c2);

return0;

3-8

#include<stdio.h>

intmain()

(

charcl,c2;

printf("請輸入兩個字符cl,c2:");

cl=getchar();

c2=getchar();

printf(”用putchar語句輸出結(jié)果為

putchar(cl);

putchar(c2);

printf(n\n");

printf("用printf語句輸出結(jié)果為

printf(u%c%c\n",cl,c2);

return0;

)

第4章選擇結(jié)構(gòu)程序設(shè)計85

4.1選擇結(jié)構(gòu)和條件判斷85

4.2用if語句實現(xiàn)選擇結(jié)構(gòu)87

4.2.1用if語句處理選擇結(jié)構(gòu)舉例87

4.2.2if語句的一般形式89

4.3關(guān)系運(yùn)算符和關(guān)系表達(dá)式91

4.3.1關(guān)系運(yùn)算符及其優(yōu)先次序91

4.3.2關(guān)系表達(dá)式92

4.4邏輯運(yùn)算符和邏輯表達(dá)式92

4.4.1邏輯運(yùn)算符及其優(yōu)先次序93

4.4.2邏輯表達(dá)式94

4.4.3邏輯型變量96

4.5條件運(yùn)算符和條件表達(dá)式97

4.6選擇結(jié)構(gòu)的嵌套99

4.7用switch語句實現(xiàn)多分支選擇結(jié)構(gòu)102

4.8選擇結(jié)構(gòu)程序綜合舉例105

習(xí)題111

4-4-1

#include<stdio.h>

intmain()

(

inta,b,c;

printf(”請輸入三個整數(shù)

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

if(a<b)

if(b<c)

printf("max=%d\nH,c);

else

printf(nmax=%d\n",b);

elseif(a<c)

printf(',max=%d\n,',c);

else

printf(,,max=%d\n',,a);

return0;

}

4-4-2

#include<stdio.h>

intmain()

{inta,b,c,temp,max;

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

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

temp=(a>b)?a:b;/*將a和b中的大者存入temp中*/

max=(temp>c)?temp:c;/*將a和b中的大者與c比較,取最大者*/

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

return0;

4-5-2

#include<stdio.h>

#include<math.h>

#defineM1000

intmain()

inti,k;

printf("請輸入一個小于%d的整數(shù)

scanf(n%dn,&i);

while(i>M)

{prinlf("輸入的數(shù)不符合要求,請重新輸入一個小于%d的整數(shù)

scanf(n%dH,&i);

)

k=sqrt(i);

printf(M%d的平方根的整數(shù)部分是:%d\n",i,k);

return0;

4-5

#include<stdio.h>

#include<math.h>

#defineM1000

intmain()

(

inti,k;

printf("請輸入一個小于%d的整數(shù)

scanf(”%d”,&i);

if(i>M)

{printf("輸入的數(shù)不符合要求,請重新輸入?個小于%(1的整數(shù)

scanf("%dn,&i);

)

k=sqrt(i);

printf(n%d的平方根的整數(shù)部分是:%d\n';i,k);

return0;

4-6.

#include<stdio.h>

intmain()

{intx,y;

printf(“輸入x:");

scanf(”%d”,&x);

if(x<l)/*x<l*/

{y=x;

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

elseif(x<10)/*1二vxvlO*/

{y=2*x-1;

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

)

else/*x>=10*/

{y=3*x-ll;

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

)

return0;

)

4-7-1

#include<stdio.h>

intmain()

(

intx,y;

printf("enterx:");

scanf(n%dn,&x);

y=-i;

if(x!=0)

if(x>0)

y=i;

else

y=0;

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

return0;

4-7-2

#include<stdio.h>

intmain()

(

intx,y;

printf(Mpleaseenterx:");

scanf("%d”,&x);

y=o;

if(x>=0)

if(x>0)y=l;

elsey=-l;

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

return0;

4-8

#include<stdio.h>

intmain()

{floatscore;

chargrade;

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

scanf("%f”,&score);

while(score>1001lscore<0)

{printf(n\n輸入有誤,請重輸)

scanf(u%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:

case2:

case1:

case0:grade=,E,;

)

printf("成績是%5.1f,相應(yīng)的等級是%c\n'\score,grade);

return0;

4-9

#include<stdio.h>

#include<math.h>

intmain()

(

intnum,indiv,ten,hundred,thousand,ten_thousand,place;〃分別代表個位,十位,百位,千

位,萬位和位數(shù)

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

scanf("%d”,&num);

if(num>9999)

place=5;

elseif(num>999)

place=4;

elseif(num>99)

place=3;

elseif(num>9)

place=2;

elseplace=l;

printf("位數(shù):%d\n”,place);

printf("每位數(shù)字為:");

ten_thousand=num/10000;

thousand=(int)(num-ten_thousand*10000)/1000;

hundred=(int)(num-ten_thousand:1;10000-thousand*1000)/100;

ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;

indiv=(int)(num-ten_thousand*10000-thousand*1OOO-hundred*100-ten*10);

switch(place)

{case5:printf(,,%d,%d,%d,%d,%d,',ten_thousand,thousand,hundred,ten,indiv);

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

printf(',%d%d%d%d%d\n,',indiv,ten,hundred,thousand,ten_thousand);

break;

case4:printf(n%d,%d,%d,%dn,thousand,hundred,ten,indiv);

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

printf(',%d%d%d%d\nn,indiv,ten,hundred,thousand);

break;

case3:printf(n%d,%d,%dn,hundred,ten,indiv);

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

printf(',%d%d%d\n',,indiv,ten,hundred);

break;

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

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

printf(u%d%d\nH,indiv,ten);

break;

casel:printf(H%d",indiv);

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

printf("%d\nH,indiv);

break;

)

return0;

4-10-1

#include<stdio.h>

intmain()

(

inti;

doublebonus,bon1,bon2,bon4,bon6,bon10;

bon1=100000*0.1;

bon2=bon1+100000*0.075;

bon4=bon2+100000*0.05;

bon6=bon4+100000*0.03;

bon10=bon6+400000*0.015;

primf("請輸入利潤i:”);

scanf(u%dn,&i);

if(i<=100000)

bonus=i*0.1;

elseif(i<=200000)

bonus=bon1+(i-l00000)*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=bon10+(i-l000000)*0.01;

primf("獎金是:%10.2f\nn,bonus);

return0;

4-10-2

#include<stdio.h>

intmain()

(

inti;

doublebonus,bon1,bon2,bon4,bon6,bon10;

intbranch;

bonl=100000*0.1;

bon2=bon1+100000*0.075;

bon4=bon2+200000*0.05;

bon6=bon4+200000*0.03;

bon10=60116+400000*0.015;

primf("請輸入利潤i:“);

scanf("%dH,&i);

branch=i/100000;

if(branch>10)branch=10;

switch(branch)

{case0:bonus=i*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=bon10+(i-1000000)*0.01;

}

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

return0;

4-11

#include<stdio.h>

inimain()

{intt,a,b,c,d;

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

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

n

printf("a=%d,b=%dtc=%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=b;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("%d%d%d%d\nM,a,b,c,d);

return0;

)

4-12

#include<stdio.h>

intmain()

inth=10;

floatxl=2,yI=2,x2=-2,y2=2,x3=-2,y3=-2,x4=2,y4=-2,x,y,d1,d2,d3,d4;

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

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

d1=(x-x4)*(x-x4)+(y-y4)*(y-y4);/*求該點到各中心點距離*/

d2=(x-xl)*(x-xl)+(y-yl)*(y-y1);

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

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

if(dl>l&&d2>l&&d3>l&&d4>l)h=0;/*判斷該點是否在塔外*/

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

return0;

)

第5章循環(huán)結(jié)構(gòu)程序設(shè)計114

5.1為什么需要循環(huán)控制114

5.2用while語句實現(xiàn)循環(huán)115

5.3用do...while語句實現(xiàn)循環(huán)117

5.4用for語句實現(xiàn)循環(huán)120

5.5循環(huán)的嵌套124

5.6幾種循環(huán)的比較125

5.7改變循環(huán)執(zhí)行的狀態(tài)125

5.7.1用break語句提前終止循環(huán)126

5.7.2用continue語句提前結(jié)束本次循環(huán)127

5.7.3break語句和continue語句的區(qū)別128

5.8循環(huán)程序舉例131

習(xí)題140

5-2

#include<stdio.h>

#include<math.h>//程序中用到數(shù)學(xué)函數(shù)fabs,應(yīng)包含頭文件math.n

inimain()

(

intsign=l,counl=0;//sign用來表示數(shù)值的符號,counl用來統(tǒng)計循環(huán)次數(shù)

doublepi=0.0,n=1.0,term=1.0;//pi開始代表多項式的值,最后代表兀的值,n代表分母,

term代表當(dāng)前項的值

while(fabs(term)>=1e-8)//檢查當(dāng)前項term的絕對值是否大于或等于10的(?6)

次方

(

pi=pi+term;//把當(dāng)前項term累加到pi中

n=n+2;//n+2是下一項的分母

sign=-sign;//sign代表符號,下一項的符號與上一項符號相反

term=sign/n;//求出下,項的值term

count++;//count累力「1

}

pi=pi*4;〃多項式的和pi乘以4,才是兀的近似值

printf(Mpi=%10.8f\nn,pi);//輸出兀的近似值

printf(ncount=%d\n'\count);//輸出循環(huán)次數(shù)

return0;

)

5-3

#include<stdio.h>

intmain()

(

intp,r,n,m,temp;

printf(”請輸入兩個正整數(shù)n,m:“);

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

if(n<m)

(

temp=n;

n=m;

m=temp;

)

p=n*m;

while(m!=0)

(

r=n%m;

n=m;

m=r;

)

printf("它們的最大公約數(shù)為:%d\n”,n);

printf("它們的最小公約數(shù)為:%d\n”,p/n);

return0;

)

5-4

#include<stdio.h>

intmain()

(

charc;

intIetters=0,space=0,digit=0,other=0;

printf("請輸入一行字符:\n”);

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

(

if(c>=fa'&&c<=ZIIc>='A'&&cv=Z)

letters++;

elseif(c==**)

space++;

elseif(c>=0'&&c<='9')

digit++;

else

other++;

printf("字母數(shù):%d\n空格數(shù):%d\n數(shù)字?jǐn)?shù):%d\n其它字符數(shù):%d\n”,letters,space,digit,other);

return0;

)

5-5

#include<stdio.h>

intmain()

(

inta,n,i=l,sn=0,tn=0;

printf(',a,n=:u);

scanf(u%d,%dn,&a,&n);

while(i<=n)

(

tn=tn+a;/*賦值后的tn為i個a組成數(shù)的值*/

sn=sn+tn;/*賦值后的sn為多項式前i項之和刃

a=a*10;

++i;

)

printf(na+aa+aaa+...=%d\nn,sn);

return0;

5-6

#include<stdio.h>

intmain()

{doubles=O,t=l;

intn;

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

(

t=t*n;

s=s+t;

)

printf(nl!+2!+...+20!=%22.15e\n",s);

return0;

5-7

#include<stdio.h>

intmain()

intn1=100,n2=50,n3=10;

doublek,sl=0,s2=0,s3=0;

for(k=1;k<=n1;k++)/*計算1至lj100的和*/

{sl=sl+k;}

for(k=l;k<=n2;k++)/*計算1至50各數(shù)的平方和*/

{s2=s2+k*k;J

for(k=l;k<=n3;k++)/*計算1到10的各倒數(shù)和*/

{s3=s3+l/k;}

printf("sum=%15.6f\nn,sl4-s2+s3);

return0;

5-8

#include<stdio.h>

intmain()

(

inti,j,k,n;

printf("parcissusnumbersare");

for(n=100;n<1000;n++)

(

i=n/100;

j=n/10-i*10;

k=n%10;

if(n==i*i*i+j*j*j+k*k*k)

printf(n%du,n);

)

printf("\nn);

return0;

)

5-9-1

#defineM1000/*定義尋找范圍*/

#include<stdio.h>

intmain()

intk1,k2,k3,k4,k5,k6,k7,k8,k9,k10;

inti,a,n,s;

for(a=2;a<=M;a++)/*a是2-1000之間的整數(shù),檢查它是否完數(shù)*/

{n=0;/*n用來累計a的因子的個數(shù)*/

s=a;/*s用來存放尚未求出的因子之和,開始時等于a*/

for(i=l;i<a;i++)/*檢查i是否a的因子*/

if(a%i==0)/*如果i是a的因子*/

{n++;/*n加1,表示新找到一個因子*/

s=s-i;/*s減去已找到的因子,s的新值是尚未求出的因子之和*/

switch(n)/*將找到的因子賦給kl...k9,或klO*/

{case1:

kl=i;break;/*找出的笫1個因子賦給kl*/

case2:

k2=i;break;/*找出的笫2個因子賦給k2*/

case3:

k3=i;break;/*找出的笫3個因子賦給k3*/

case4:

k4=i;break;/*找出的笫4個因子賦給k4*/

case5:

k5=i;break;/*找出的笫5個因子賦給k5*/

case6:

k6=i;break;/*找出的笫6個因子賦給k6*/

case7:

k7=i;break;/*找出的笫7個因子賦給k7*/

case8:

k8=i;break;/*找出的笫8個因子賦給k8*/

case9:

k9=i;break;/*找出的笫9個因子賦給k9*/

case10:

kl0=i;break;/*找出的笫10個因子賦給klO*/

)

)

if(s==O)

printf(M%d,Itsfactorsare”,a);

if(n>l)printf(n%d,%d",kl,k2);/*n>l表示a至少有2個因子*/

if(n>2)printf(",%d",k3);/*n>2表示至少有3個因子,故應(yīng)再輸出一個

因子*/

if(n>3)printf(';%dn,k4);/*n>3表示至少有4個因子,故應(yīng)再輸出一個

因子*/

if(n>4)printf(H,%dn,k5);/*以下類似*/

if(n>5)printf(n,%d';k6);

if(n>6)printf(",%d",k7);

if(n>7)printf(u,%d",k8);

if(n>8)printf(u,%dn,k9);

if(n>9)printf(",%dn,klO);

printf(H\nn);

return0;

5-9-2

#include<stdio.h>

intmain()

{intm,s,i;

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

{s=0;

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

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

if(s==m)

{printf(u%d,itsfactorsare",m);

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

if(m%i==0)printf(M%d",i);

printfC^n1');

)

)

return0;

)

5-10

#include<stdio.h>

intmain()

(

inti,n=20;

doublea=2,b=l,s=0,t;

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

(

s=s+a/b;

t=a,

a=a+b,

b=t;

}

printf(,,sum=%16.10f\n,,?s);

return0;

5-11

#include<stdio.h>

intmain()

(

doublesn=100,hn=sn/2;

intn;

for(n=2;n<=10;n++)

|

sn=sn+2*hn;/*第n次落地時共經(jīng)過的米數(shù)刃

hn=hn/2;/*第n次反跳高度*/

)

prinlf("第10次落地時共經(jīng)過%f米\n",sn);

printf("第10次反彈%f米\n",hn);

return0;

)

5-12

#include<stdio.h>

intmain()

(

intday,xl,x2;

day=9;

x2=l;

while(day>0)

{xl=(x2+l)*2;/*第1天的桃子數(shù)是第2天桃子數(shù)加1后的2倍.*/

x2=xl;

day—;

)

printf(Mtotal=%d\nu,x1);

return0;

5-13

#include<stdio.h>

#include<math.h>

intmain()

(

floata,x0,x1;

printf("enterapositivenumber:");

scanf(”%f”,&a);

x0=a/2;

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

do

{x0=xl;

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

}while(fabs(xO-x1)>=1e-5);

printf(MThesquarerootof%5.2fis%8.5f\n'\a,x1);

return0;

)

5-14

#include<stdio.h>

#include<math.h>

intmain()

{doublexl,xO,f,fl;

xl=1.5;

do

{xO=xl;

f=((2*x0-4)*x0+3)*x0-6;

fl=(6*x0-8)*x0+3;

xl=xO-f/fl;

}while(fabs(x1-x0)>=1e-5);

printf(nTherootofequationis%5.2f\n",xl);

retum0;

)

5-15

#include<stdio.h>

#include<math.h>

intmain()

{floatx0,x1,x2,fx0,fx1,fx2;

do

{printf("enterxl&x2:");

scanf("%f,%fH,&xl,&x2);

fxl=xl*((2*xl-4)*xl+3)-6;

fx2=x2*((2*x2-4)*x2+3)-6;

}while(fxl*fx2>0);

do

{x0=(xl+x2)/2;

fx0=x0*((2*x0-4)*x0+3)-6;

if((fx0*fxl)<0)

{x2=x0;

fx2=fx0;

)

else

{xl=x0;

僅l=fx0;

)

}while(fabs(fx0)>=le-5);

printf(nx=%6.2f\nu,x0);

retum0;

)

5-16

#include<stdio.h>

intmain()

{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\nn);

}

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

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

printf("");

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

printf(,,*u);

printf(M\nM);

}

return0;

)

5-17

#include<stdio.h>

intmain()

(

chari,j,k;/*是a的對手;j是b的對手;k是c的對手*/

for(i='x';i<='z';i++)

for(j=,x,;j<='z';j++)

if(i!=j)

for(k='x';k<='z';k++)

if(i!=k&&j!=k)

if(i!='x'&&k!='x'&&k!='z')

printf("A-%c\nB-%c\nC-%c\n",i,j,k);

return0;

)

第6章利用數(shù)組處理批量數(shù)據(jù)142

6.1怎樣定義和引用一維數(shù)組142

6.1.1怎樣定義一維數(shù)組143

6.1.2怎樣引用一維數(shù)組元素144

6.1.3一維數(shù)組的初始化145

6.1.4一維數(shù)組程序舉例146

6.2怎樣定義和引用二維數(shù)組148

6.2.1怎樣定義二維數(shù)組149

6.2.2怎樣引用二維數(shù)組的元素150

623二維數(shù)組的初始化151

6.2.4二維數(shù)組程序舉例152

6.3字符數(shù)組154

6.3.1怎樣定義字符數(shù)組154

6.3.2字符數(shù)組的初始化155

6.3.3怎樣引用字符數(shù)組中的元素155

6.3.4字符串和字符串結(jié)束標(biāo)志156

6.3.5字符數(shù)組的輸入輸出159

6.3.6使用字符串處理函數(shù)161

6.3.7字符數(shù)組應(yīng)用舉例165

習(xí)題168

6-1

#include<stdio.h>

#include<math.h>

intmain()

{inti,j,n,a[101];

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

a[i]=i;

a[l]=0;

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

for(j=i+l;jv=100;j++)

{if(a[i]!=0&&a[j]!=O)

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

aUl=0;

}

printf("\n");

for(i=2,n=0;i<=100;i++)

{if(a[i]!=0)

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

n++;

)

if(n==10)

{printf("\n");

n=0;

)

}

printf("\n");

return0;

6-2

#include<stdio.h>

intmain()

{inti,j,min,temp,a[ll];

printf(Menterdata:\nn);

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

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

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

}

printf(“\n");

printf("Theorginalnumbers:\nn);

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

printf(n%5dn,a[i]);

printf(”\n");

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

{min=i;

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

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

temp=a[i];

a[ij=a[min];

a[min]=temp;

)

printf(M\nThesortednumbers:?");

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

printf(n%5dM,a[i]);

printfCAn'1);

return0;

)

6-3

#include<stdio.h>

intmain()

(

inta[3][3],sum=0;

inti,j;

printf(nenterdata:\n");

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

for(j=0;jv3;j++)

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

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

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

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

return0;

)

6-4

#include<stdio.h>

intmain()

{inta[ll]={1,4,6,9,13,16,19,28,40,100);

inttemp1,temp2,number,end,i,j;

printf("arraya:\nH);

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

printf(n%5dH,a[i]);

printf(n\nn);

printf(Minsertdata:");

scanf(,,%d,,,&number);

end=a[9];

if(number>end)

allO]=number;

else

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

{if(a[i]>number)

{templ=a[i];

a[i]=number;

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

{temp2=a[j];

a[jj=templ;

templ=temp2;

)

break;

printf(MNowarraya:\nM);

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

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

printfCAn'1);

return0;

)

6-5

#include<stdio.h>

#defineN5

intmain()

{intafN],i,temp;

printf(nenterarraya:\nM);

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

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

printf(narraya:\nu);

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

printf("%4dH,a[i]);

for(i=0;i<N/2;i++)〃循環(huán)的作用是將對稱的元素的值互換

{temp=a[i];

a[i]=a[N-i-l];

a[N-i-l]=temp;

)

printf("\nNow,arraya:\n");

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

printf(M%4dn,a[i]);

printf(M\n");

return0;

6-6

#include<stdio.h>

#defineN10

intmain()

{inti,j,a[N][N];

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

{a[i][i]=l;

a[i][0]=l;

)

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

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

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

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

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

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

printf("\n");

)

printf("\n");

return0;

6-7

#include<stdio.h>

intmain()

{inta[15][15],i,j,k,p,n;

p=l;

while(p==l)

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

scanf("%dn,&n);

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

p=0;

)

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

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

a[i皿=0;

j=n/2+l;

a[UUJ=l;

for(k=2;k<=n*n;k++)

{i=i-l;

j=j+l;

if((i<l)&&(j>n))

{i=i+2;

j=j-l;

)

else

{if(i<l)i=n;

if(j>n)j=l;

)

if(a[i]U]=0)

a[i][j]=k;

else

{i=i+2;

a[i][j]=k;

}

)

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

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

printf(”%5d”,a[i皿);

printfCAn'1);

)

return0;

6-8

#include<stdio.h>

#defineN4

#defineM5/*數(shù)組為4行5歹U*/

inimain()

inti,j,k,a[N][M],max,maxj,flag;

printf(npleaseinputmatrix:\nH);

for(i=0;i<N;i++)/*輸入數(shù)組*/

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

scanf(u%du,&a[i][j]);

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

{max=a[i][0];/*開始時假設(shè)a[i][O]最大*/

maxj=0;/*將列號0賦給maxj保存*/

for(j=O;j<M;j++)/*找出第i行中的最大數(shù)*/

if(a[i][j]>max)

{max=a[i][j];/*將本行的最大數(shù)存放在max中*/

maxj」/*將最大數(shù)所在的列號存放在maxj中*/

)

flag=l;/*先假設(shè)是鞍點,以flag為1代表*/

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

if(max>a[k][maxj])/*將最大數(shù)和其同列元素相比*/

{flag=0;/*如果max不是同列最小,表示不是鞍點令flagl為0*/

continue;}

if(flag)/*如果flagl為I表示是鞍點*/

{printf("a[%d][%d]=%d\nH,i,maxj,max);/*輸出鞍點的值和所在行列號*/

break;

if(!flag)/*如果flag為0表示鞍點不存在*/

printf(nItisnotexist!\nn);

return0;

6-9

#include<stdio.h>

#defineN15

intmain()

{inti,number,top,bott,mid,loca,a[N],flag=l,sign;

charc;

printf("enterdata:\nH);

scanf("%dn,&a[0]);

i=l;

while(i<N)

{scanf(n%dM,&a[i]);

if(a[i]>=a[i-l])

i++;

else

printfC'enterthisdataagain:\nu);

)

printf("\nn);

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

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

printf(n\nM);

while(flag)

{printf(ninputnumbertolookfor:");

scanf("%dn,&number);

sign=0;

top=0;//top是查找區(qū)間的起始位置

bott=N-l;//bott是查找區(qū)間的最末位置

if((number<alO])ll(number>alN-1]))〃要查的數(shù)不在查找區(qū)間內(nèi)

loca=-l;//表示找不到

while((!sign)&&(top<=bott))

{mid=(bott+top)/2;

if(numbei'==a[mid])

{loca=mid;

printf(HHasfound%d,itspositionis%d\nn,number,loca4-1);

sign=l;

)

elseif(number<a[mid])

bott=mid-l;

溫馨提示

  • 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

提交評論