版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第三章C語(yǔ)言的基本控制結(jié)構(gòu)Chapter3ControlFlow問(wèn)題#include<stdio.h>#include<math.h>voidmain(void){floata,b,c,x1,x2;scanf(“%f,%f,%f”,&a,&b,&c);x1=(-b+sqrt(b*b-4.*a*c))/(2.0*a);x2=(-b-sqrt(b*b-4.*a*c))/(2.0*a);printf(“x1=%7.2f\nx2=%7.2f”,x1,x2);}b*b-4ac<0?一元二次方程根求解算法描述b2-4ac=0?yes求等根nob2-4ac>0?yes求實(shí)根no求復(fù)根問(wèn)題:如何構(gòu)造條件?如何根據(jù)條件實(shí)現(xiàn)不同算法?3.1程序的三種控制結(jié)構(gòu)
結(jié)構(gòu)化程序設(shè)計(jì)是軟件設(shè)計(jì)的第三次革命。結(jié)構(gòu)化程序設(shè)計(jì)的基礎(chǔ)是采用三種程序的控制結(jié)構(gòu)。1966年B?HM&Jacopini證明:只要三種控制結(jié)構(gòu)就能表達(dá)用一個(gè)入口和一個(gè)出口框圖所能表達(dá)的任何程序邏輯。三種控制結(jié)構(gòu)如下:⒈順序結(jié)構(gòu)Sequence算法描述:f;g;框圖:f;g;⒉選擇結(jié)構(gòu)Selection(分支結(jié)構(gòu))算法描述:if(e)f;elseg;框圖:e?yesf;nog;⒊循環(huán)結(jié)構(gòu)Repetition⑴當(dāng)型循環(huán)whilecistruedofc?fYESNO⑵直到循環(huán)dofuntilcisfalsefc?YESNO三種控制結(jié)構(gòu)有如下共同的特點(diǎn):一個(gè)入口和一個(gè)出口;無(wú)死語(yǔ)句;無(wú)死循環(huán)。如何構(gòu)造條件?⒋復(fù)合語(yǔ)句Compound Statement
概念:C語(yǔ)言可以用{}包括一系列的語(yǔ)句。一對(duì){}所包含的內(nèi)容稱為一個(gè)復(fù)合語(yǔ)句。其中可以含有0到多條C語(yǔ)言語(yǔ)句。#include<stdio.h>voidmain(void)
{inta,b;scanf(“%d,%d”,&a,&b);
{inttemp;
temp=a;a=b;b=temp;
}printf(“%d,%d”,a,b);}復(fù)合語(yǔ)句復(fù)合語(yǔ)句復(fù)合語(yǔ)句可以嵌套凡是可以出現(xiàn)單一語(yǔ)句的地方都可以使用復(fù)合語(yǔ)句。復(fù)合語(yǔ)句的作用:⒈作為分支和循環(huán)的塊。⒉作為標(biāo)識(shí)符的作用域。交換算法演示3.2關(guān)系運(yùn)算和邏輯運(yùn)算⒈關(guān)系運(yùn)算(RelationalOperator)關(guān)系運(yùn)算是比較兩個(gè)表達(dá)式的數(shù)值相互關(guān)系的運(yùn)算。運(yùn)算符比較的關(guān)系實(shí)例>大于a>b>=大于等于a>=b<小于2<1<=小于等于c<=d==等于1==c!=不等于1!=3
關(guān)系運(yùn)算規(guī)則:參加運(yùn)算的表達(dá)式的從左到右按關(guān)系運(yùn)算符提供的關(guān)系進(jìn)行比較,滿足關(guān)系得到整型值1,不滿足關(guān)系得到整型值0。inta=1,b=3,c,d;c=a>b;d=a+2<=b+3;⒉邏輯運(yùn)算(LogicalOperator)邏輯運(yùn)算運(yùn)算時(shí)判斷對(duì)象真、假的運(yùn)算。C語(yǔ)言沒(méi)有提供邏輯類型。任何類型的值都可以表示邏輯狀態(tài),如下表:表達(dá)式的值所對(duì)應(yīng)的邏輯值表達(dá)式的值表示的邏輯關(guān)系非0真true0假false運(yùn)算對(duì)象非0代表邏輯真,是0代表邏輯假。也就是說(shuō)任何類型的量都有邏輯值。邏輯運(yùn)算的結(jié)果用整型值表示。運(yùn)算結(jié)果為真時(shí),得到整型值1;運(yùn)算結(jié)果為假時(shí),得到整型值0。inta=2,b=0;aba+bC語(yǔ)言的邏輯運(yùn)算運(yùn)算符邏輯關(guān)系舉例&&邏輯與a>2&&a<3||邏輯或s<2||s>6!邏輯非!a其中,!運(yùn)算是單目運(yùn)算。邏輯運(yùn)算演示⒊復(fù)雜邏輯關(guān)系的表示在實(shí)際應(yīng)用中,經(jīng)常會(huì)遇到描述復(fù)雜的關(guān)系。如:判斷x是否大于等于5或小于3。此類關(guān)系的描述在程序設(shè)計(jì)中會(huì)大量使用。035x<3||x>=50-23-2<x<3?x=4-2<x&&x<3表示數(shù)值關(guān)系的原則:開放區(qū)間用或;閉合區(qū)間用與。思考題⒈判斷是否在一、三象限的表達(dá)式。⒉判斷是否在如圖圓環(huán)內(nèi)的表達(dá)式。sqrt(x),代表對(duì)x開平方。⒊ch為字符變量,判斷ch是否為字母的表達(dá)式。(ch>=’a’&&ch<=‘z’)||(ch>=’A’&&ch<=‘Z’)不是字母的表達(dá)式?⒋運(yùn)算的優(yōu)先級(jí)C語(yǔ)言允許所有基本類型的量參加同一表達(dá)式的運(yùn)算,也允許所有類型的運(yùn)算符出現(xiàn)在一個(gè)表達(dá)式中。因此,表達(dá)式值的類型如何確定,運(yùn)算的先后順序如何確定,必須通過(guò)一套規(guī)則解決。為了便于調(diào)整優(yōu)先級(jí),設(shè)置()為最高優(yōu)先級(jí)。相同優(yōu)先級(jí)存在一個(gè)順序稱為結(jié)合順序,結(jié)合順序有從右向左或從左向右。⑴運(yùn)算優(yōu)先級(jí)第一原則:?jiǎn)文窟\(yùn)算的優(yōu)先級(jí)高于雙目運(yùn)算。第二原則:算術(shù)運(yùn)算關(guān)系運(yùn)算邏輯運(yùn)算賦值運(yùn)算表達(dá)式優(yōu)先級(jí)舉例說(shuō)明:++a-b>c+d&&a>=b*34①②③④⑤⑥⑦注意:在無(wú)法確定優(yōu)先級(jí)時(shí),加()區(qū)分。簡(jiǎn)化表達(dá)式。c=b*=a+2c=(b*=(a+2))級(jí)別運(yùn)算符結(jié)合順序1()[]->.從左向右2!-++--(type)sizeof*&~從右向左3*/%從左向右4+-從左向右5<<>>(移位運(yùn)算)從左向右6<<=>>=從左向右7==!=從左向右8&(位與運(yùn)算)從左向右9^(位異或運(yùn)算)從左向右10|(位或運(yùn)算)從左向右11&&從左向右12||從左向右13?:從右向左14=op=從右向左15,從左向右優(yōu)先級(jí)總表優(yōu)先級(jí)特例
⒈自加、自減運(yùn)算優(yōu)先級(jí)遵循原則:
前置:先運(yùn)算后引用;
后置:先引用后運(yùn)算。#include<stdio.h>voidmain(void){inta=3,b;b=a+++a++;printf(“b=%d”,b);b=++a+(++a);printf(“b=%d”,b);}CHAP3EX0⒉在邏輯運(yùn)算中,如果邏輯值能夠確定,則不再進(jìn)行運(yùn)算。inta=0,b=0++a||++b;printf(“a=%d\nb=%d”,a,b);a=0;a&&++b;/*b的值?*/++CHAP3EX13.3分支結(jié)構(gòu)(選擇結(jié)構(gòu)Selection)
⒈if及if-else的三種結(jié)構(gòu)。由標(biāo)準(zhǔn)的分支結(jié)構(gòu)可以演化成單分支、多分支結(jié)構(gòu)。C語(yǔ)言的分支語(yǔ)句有if、if–else、switch三種。
⑴if語(yǔ)句格式:
if(expression)statement;語(yǔ)句表達(dá)式,非0為yes,0為no。語(yǔ)句,可以是復(fù)合語(yǔ)句。流程圖:e?statement;yesno舉例:#include<stdio.h>voidmain(void){charch;ch=getchar();
if(ch>=‘a(chǎn)’&&ch<=‘z’)ch-=32;putchar(ch);}CHAP3EX2⑵if–else結(jié)構(gòu)格式:
if(expression)
stat1;
else stat2;語(yǔ)句或復(fù)合語(yǔ)句。流程圖:e?falsestat2;stat1;true入口出口舉例:輸出|x|。#include<stdio.h>voidmain(void){intx;scanf(“%d”,&x);
if(x>=0)
printf(“%d”,x);
else
printf(“%d”,-x);}⑶if–elseif結(jié)構(gòu)(Muliline)格式:
if(e1)
stat1;
elseif(e2)
stat2;
elseif(e3)
stat3;…
elseif(en-1)
statn-1;
elsestatn;
框圖:e1?tstat1;fe2?tstat2;出口fen-1?tstatn-1;fstatn;n-1個(gè)條件,滿足某個(gè)條件,執(zhí)行對(duì)應(yīng)的語(yǔ)句,然后到出口。ifelseif結(jié)構(gòu)舉例:征稅問(wèn)題:1000以下稅率為3%1000~2000稅率為4%2000~3000稅率為5% 3000以上稅率6%輸入收入,求應(yīng)繳稅款。#include<stdio.h>voidmain(void){floatx,rate;scanf(“%f”,&x);
if(x<1000)rate=.03;elseif(x<2000)rate=.04;elseif(x<3000)rate=.05;elserate=.06;printf(“%f”,x*rate);}3/100?⑷if語(yǔ)句的嵌套對(duì)于如下的結(jié)構(gòu):if(e1)stat1;elsestat2;在stat1或stat2中又含有if結(jié)構(gòu):if(e2)stat3;elsestat4;稱為if結(jié)構(gòu)的嵌套。各種if結(jié)構(gòu)都可以嵌套。
如求符號(hào)函數(shù):-1(x<0)y=0(x=0)1(x>0)#include<stdio.h>voidmain(void){intx,y;scanf(“%d”,&x);
if(x<0)y=-1;
else
if(x==0)y=0;
else
y=1;printf(“x=%d,y=%d\n”,x,y);}外層內(nèi)層在外層else語(yǔ)句中,含有一個(gè)if結(jié)構(gòu)。說(shuō)明:①書寫采取縮進(jìn)形式,便于區(qū)分。內(nèi)層縮進(jìn)。②else與最近的if相匹配,從內(nèi)到外。y=-1;if(x!=0)if(x>0)y=1;elsey=0;x==0結(jié)果?舉例:求一元二次方程ax2+bx+c=0的根。#include<stdio.h>#include<math.h>voidmain(void){floata,b,c,d,x1,x2;scanf(“%f,%f,%f”,&a,&b,&c);d=b*b-4.0*a*c;
if(fabs(d)<1.0e-6)
{printf(“\nx1=x2=,%f”,-b/(2.0*a));
}
else
{
if(d>0)
{
printf(“\nx1=%f”,(-b+(float)sqrt(d))/(2.0*a));printf(“\nx2=%f”,(-b-(float)sqrt(d))/(2.0*a));
}
else
{
printf(“\nx1=%f+i%f”,-b/(2.0*a),(float)sqrt(-d)/(2.0*a));printf(“\nx2=%f-i%f”,-b/(2.0*a),(float)sqrt(-d)/(2.0*a));
}
}}外層內(nèi)層求相等實(shí)根。求不等實(shí)根。求共扼復(fù)根。CHAP3EX4判斷實(shí)型量相等或不等用誤差的方法。flaota=1.0/*a=1.000001或0.999999*/a==1.0?⒉switch語(yǔ)句(多分支結(jié)構(gòu))格式:switch
(expression)
{case常量表達(dá)式1:statement1;case常量表達(dá)式2:statement2;…case常量表達(dá)式n-1:statementn-1;default:statementn;
}只能是整型或字符型表達(dá)式。整型字符型常量表達(dá)式。表達(dá)式的值要互不能相等!
流程:①先求expression的值。②依次比較expression和各常量表達(dá)式的值。
③如果與第i個(gè)常量表達(dá)式相等,則執(zhí)行第i條以后的語(yǔ)句。④如果都不相等,則執(zhí)行default以后的語(yǔ)句。語(yǔ)句標(biāo)號(hào)的概念:#include<stdio.h>voidmain(void){chargrade;grade=getchar();
switch(grade){
case‘A’:printf(“90—100\n”);
case‘B’:printf(“80—89\n’);
case‘C’:printf(“70—79\n”);
case‘D’:printf(“60—69\n”);
case‘E’:printf(“<60\n”);
default:printf(“error\n”);}}CHAP3EX5語(yǔ)句標(biāo)號(hào)。break語(yǔ)句:格式:break;作用:中斷switch流程。break;break;break;break;break;CHAP3EX6例:輸出五分制對(duì)應(yīng)的百分制范圍。#include<stdio.h>voidmain(void){charchGrad;chGrad=getchar();
switch(chGrad){
case‘a(chǎn)’:case‘A’:
printf(“90—100\n”);break;case‘b’:case‘B’:printf(“80—89\n”);break;case‘c’:case‘C’:printf(“70—79\n”);break;case‘d’:case‘D’:printf(“60—69\n”);break;case‘e’:case‘E’:printf(“<60\n”);break;
default:printf(“DataError!\n”);
}}多個(gè)標(biāo)號(hào)可以共用相同的語(yǔ)句。default語(yǔ)句可以省略。3.4
循環(huán)結(jié)構(gòu)(Repetition)程序經(jīng)常會(huì)重復(fù)執(zhí)行某些相同的操作,如:求:s=1+2+3+4+…+100算法描述:①s=0;i=1;②s+=i;i++;③判斷i是否小于等于100
如果i小于等于100,重復(fù)②;
否則,結(jié)束。此類根據(jù)“條件”重復(fù)執(zhí)行相同算法的結(jié)構(gòu),稱為循環(huán)。初始化部分。循環(huán)體。含有使條件趨假的語(yǔ)句。循環(huán)的條件。注意:循環(huán)應(yīng)在有限次完成。
C語(yǔ)言提供了三類實(shí)現(xiàn)循環(huán)的語(yǔ)句:
while,dowhile,for
⒈while循環(huán)(當(dāng)型循環(huán))格式:
while(expression)
statement;表達(dá)式:值非0,表示滿足條件;值為0代表不滿足條件。語(yǔ)句(復(fù)合語(yǔ)句),重復(fù)執(zhí)行部分(循環(huán)體)。流程:e?truestatement;false含有使條件趨假的語(yǔ)句。舉例:求s=1+2+3+4+…+100#include<stdio.h>voidmain(void){ints=0,i=1;
while(i<=100)
{s=s+i;/*s+=i;*/i++;}
printf(“s=%d\n”,s);}初始化部分循環(huán)體條件測(cè)試使條件趨假語(yǔ)句CHAP3EX7⒉do–while循環(huán)(直到型循環(huán))格式:
do{
statement;}
while
(expression);流程:statement;e?truefalse含有使條件趨假的語(yǔ)句。while循環(huán)與do-while循環(huán)的區(qū)別:while循環(huán)先判條件,后執(zhí)行循環(huán)體;do–while循環(huán)先執(zhí)行循環(huán)體,后判條件。舉例:求:30!#include<stdio.h>voidmain(void){floats=1.0;inti=1;
do{s*=i;i++;}while(i<=30);
printf(“30!=%f”,s);}初始化。循環(huán)體。測(cè)試條件。使條件趨假。CHAP3EX8思考題:用do-while實(shí)現(xiàn)s=1+2+…+100。用while實(shí)現(xiàn)30!。⒊for循環(huán)格式:
for
(e1;
e2;e3)
statement;流程:e1e2?truestatement;e3false舉例:求:s=1+2+3+…+100#include<stdio.h>voidmain(void){ints=0,i;
for(i=1;i<=100;i++
)
{s=s+i;
}
printf(“s=%d”,s);}使e2趨假。在for循環(huán)中,e1、e2、e3都可以省略!e1省略
i=1;e3省略
i++;初值表達(dá)式。測(cè)試表達(dá)式。增值表達(dá)式。for循環(huán)實(shí)例求100以內(nèi)的偶數(shù)和。ints=0,i;for(i=2;i<100;i+=2){s+=i;}求500以內(nèi)最大的5個(gè)能被50整除數(shù)的和。inti,j,s=0;for(j=500,i=0;i<5;i++,j-=50){s+=j;}從大到小輸出100以內(nèi)能被5整除的數(shù)。inti;for(i=100;i>=0;i-=5)printf(“%d\n”,i);inti,j,s=0;for(i=0,j=0;i+j<100;i++,++j){s+=i+j;}⒋循環(huán)應(yīng)用的幾個(gè)問(wèn)題⑴循環(huán)的嵌套概念:在一個(gè)循環(huán)的循環(huán)體內(nèi)又包含一個(gè)完整的循環(huán)稱為循環(huán)的嵌套。i123456789 11112……19
j 22122……29 99192……99如打印一99的乘法表:i=1時(shí),j從1變化到9,完i*j。多重循環(huán)打印99乘法表。#include<stdio.h>voidmain(void){inti,j;for(i=1;i<=9;i++){
printf(“\n“);}}外層循環(huán)內(nèi)層循環(huán)說(shuō)明:⒈內(nèi)外層循環(huán)采用縮進(jìn)形式。⒉while和do-while和for可以相互嵌套。
⒊執(zhí)行次數(shù)為內(nèi)層循環(huán)次數(shù)和外層循環(huán)次數(shù)的乘積。CHAP3EX9如何打印乘法表的一半?for(j=1;j<=9;j++){printf(“%4d“,i*j);}⑵循環(huán)的中斷(break)和繼續(xù)(continue)①循環(huán)的中斷:break語(yǔ)句概念:循環(huán)體中可以加分支,判斷是否繼續(xù)執(zhí)行循環(huán),break語(yǔ)句可以提前結(jié)束循環(huán)。舉例:求:r=1—10的圓的面積,如圓面積大于100則中斷。for(r=1;r<=10;r++){area=3.14159*r*r;
if(area>100)
break;
printf(“\n%f“,area);}滿足條件,則退出循環(huán)。②繼續(xù)循環(huán):continue語(yǔ)句continue語(yǔ)句的作用是跳過(guò)本次循環(huán)剩余的循環(huán)體內(nèi)容,執(zhí)行下次循環(huán)。舉例:求1—100內(nèi)的偶數(shù)和。
s=0;for(n=1;n<=100;n++){
if(n%2!=0)
continue;
s+=n;}滿足條件,跳過(guò)本次循環(huán)體剩余內(nèi)容,繼續(xù)下次循環(huán)。ints=0,i;for(i=2;i<100;i=i+2)s+=i;⑶無(wú)限循環(huán)和空循環(huán)①條件為恒真的循環(huán)——無(wú)限循環(huán)while(1){…}do{…}while(1);for(;;){…}通過(guò)條件控制的break語(yǔ)句退出循環(huán)。例:程序等待直到輸入字母A。for(;;){ch=getchar();if(ch==’A’)break;}②循環(huán)體為空語(yǔ)句的循環(huán)——空循環(huán)for(i=1;i<=MAX;i++)
;作用:程序延時(shí)??照Z(yǔ)句{;}⑷goto語(yǔ)句格式:gotoLabel/*Label:同一函數(shù)內(nèi)語(yǔ)句前的標(biāo)號(hào)。*/作用:轉(zhuǎn)移到標(biāo)號(hào)對(duì)應(yīng)的語(yǔ)句上繼續(xù)執(zhí)行。loop:
if(i<=100){
sum=sum+i;i++;
gotoloop;
}循環(huán)和分支相互嵌套輸入10個(gè)自然數(shù)統(tǒng)計(jì)其中偶數(shù)的個(gè)數(shù)及偶數(shù)值和。算法框圖:start定義變量初始化循環(huán)?true輸入偶數(shù)?true統(tǒng)計(jì)累加falsefalse輸出結(jié)果end#include<stdio.h>voidmain(void){inti,ix,iCount=0,iSum=0;
for(i=1;i<=10;i++){
scanf(“%d\n”,&ix);
if(ix%2==0){iSum+=ix;iCount++;}
}printf(“Num=%d\nSum=%d”,iCount,iSum);}循環(huán)結(jié)構(gòu)分支結(jié)構(gòu)輸入負(fù)數(shù)?do{
if(ix<=0)printf(“dateerror”);}while(ix<=0);
算法的健壯性注意:結(jié)構(gòu)應(yīng)完整的包含和被包含。程序設(shè)計(jì)的基本方法根據(jù)計(jì)算機(jī)的特點(diǎn),結(jié)合循環(huán)與分支結(jié)構(gòu)在程序設(shè)計(jì)時(shí)常使兩種常用的基本方法。枚舉法(窮舉法)迭代法本專題將結(jié)合分支和循環(huán)介紹兩種方法的基本思想和具體實(shí)現(xiàn)!枚舉法Enumeration存在有限狀態(tài);其中某些狀態(tài)滿足特定條件。通過(guò)循環(huán)產(chǎn)生所有狀態(tài)(枚舉)。對(duì)每一狀態(tài),按條件進(jìn)行狀態(tài)測(cè)試,滿足條件的狀態(tài),為所求的解。求100到200內(nèi)的所有素?cái)?shù)。通過(guò)循環(huán)使i從101變化到199(枚舉所有狀態(tài))對(duì)每次循環(huán)的i進(jìn)行是否是素?cái)?shù)的測(cè)試,如果是素?cái)?shù),輸出i。枚舉法舉例:⒈求100到200之間的所有素?cái)?shù)(只能被1和自身整除的數(shù))。對(duì)于自然數(shù)n,判斷其是否為素?cái)?shù)有以下三種方法:①判斷n是否能被從2到n-1范圍內(nèi)的數(shù)整除;②判斷n是否能被從2到(int)(n/2)范圍的數(shù)整除;③判斷n是否能被從2到(int)sqrt(n)范圍的數(shù)整除;程序如下:#include<stdio.h>#include<math.h>voidmain(void){intn,j,s;
for(n=101;n<200;n+=2){
s=(int)sqrt((double)n);
for(j=2;j<=s;j++){if(n%j==0)break;}
if(j>s)
printf(“\n%d”,n);
}}枚舉所有數(shù)構(gòu)造,測(cè)試條件如果n能被2到s的任意數(shù)整除,退出循環(huán)。如果n是素?cái)?shù),輸出n。CHAP3EXA
⒉求水仙花數(shù)(條件:三位數(shù)的個(gè)、十、百位的方和等于該數(shù)。153==13+53+33)。n為枚舉變量,枚舉初值100,枚舉終值999。構(gòu)造條件:取出n的個(gè)、十、百位數(shù)。測(cè)試是否滿足條件,滿足條件輸出n。#include<stdio.h>voidmain(void){intn,a,b,c;
for(n=100;n<=999;n++){
a=n/100;b=n%100/10;c=n%10;
if(a*a*a+b*b*b+c*c*c==n) printf(“\n%d”,n);
}}枚舉所有三位數(shù)構(gòu)造條件測(cè)試條件取n的百位a、十位b、個(gè)位c。CHAP3EXB⒊愛(ài)因斯坦階梯問(wèn)題(不定范圍的枚舉)。設(shè)有一階梯,每步跨2階,最后剩1階;每步跨3階,最后剩2階;每步跨5階,最后剩4階;每步跨6階,最后剩5階;每步跨7階,正好到階梯頂。問(wèn)共有多少階梯。根據(jù)條件可以得出:臺(tái)階數(shù)一定是奇數(shù)且為7的倍數(shù)。枚舉初值:k=7;
枚舉公式:k=k+14
結(jié)束條件:滿足(k%3==2)&&(k%5==4)&&(k%6==5)結(jié)束。#include<stdio.h>voidmain(void){
intk=7;
while(
!((k%3==2)&&(k%5==4)&&(k%6==5)))
k+=14;
printf(“\nl=%d”,k);}CHAP3EXC思考題:
⒈36人一次搬36塊磚,男搬4,女搬2,兩個(gè)小孩抬一塊。要一次搬完。問(wèn):男、女、小孩要多少?⒉
找出1000以內(nèi)的完數(shù),所謂完數(shù)是指該數(shù)的各因子之和等于該數(shù),如6=1+2+3。⒊證明6到200以內(nèi)的數(shù),符合哥德巴赫猜想(一個(gè)大于6的偶數(shù),可以分解成兩個(gè)質(zhì)數(shù)之和)。⒋奇妙的算式:用字母代替十進(jìn)制數(shù)字寫出如下算式: EGAL
LLGAE請(qǐng)找出這些字母代表的數(shù)字。迭代法Iteration迭代是通過(guò)循環(huán)不斷由舊值推導(dǎo)新值,并最后求解的過(guò)程。迭代法有三個(gè)要點(diǎn):
如人口每年按2%增長(zhǎng),現(xiàn)在人口有12億,10年后人口有多少?⒈迭代公式。m=m*(1+2%)⒉迭代初值(邊界條件)。m=12⒊迭代次數(shù)(或條件)。n=10迭代法舉例⒈求ex=1+x+x2/2!+…+xn/n!前n+1項(xiàng)之和。迭代次數(shù)i012…n迭代公式t=t*x/i迭代初值exp=1,t=1,(i=1~n)#include<stdio.h>voidmain(void){floatexp,x,t;inti,n;
scanf(“%f,%d”,&x,&n);t=1.0;
exp=1.0;
for(i=1;i<=n;i++){
t*=x/i;exp+=t;
}
printf(“e^%d=%15.6f”,(int)x,exp);}迭代初值。迭代公式。迭代過(guò)程附加條件:當(dāng)|t|<10-5,結(jié)束運(yùn)算。if(fabs(t)<1e-5)break;CHAP3EXD⒉用梯形法求定積分(0,0)yxf(x)ab面積hx①將[a,b]分為n等份,h=(b-a)/n;②求n個(gè)梯形面積之和,第i小面積x=x+hf1=f(x)下底s=s+(f0+f1)*h/2f0=f1迭代x初值為as初值為0f0初值為f(a)
次數(shù)為n迭代求積分的方法程序如下:#include<stdio.h>voidmain(void){floata,b,f0,f1,h,x,s=0.0;intn,i;scanf(“%f,%f,%d”,&a,&b,&n);h=(b-a)/n;
x=a;f0=x*x+12.0*x+4.0;
for(i=0;i<n;i++){
x=x+h;f1=x*x+12.0*x+4.0;s=s+(f0+f1)*h/2.0;f0=f1;
}
printf(“S=%f”,s);}CHAP3EXE迭代初值。迭代循環(huán)⒊求s=a+aa+aaa+…+aaa…a。0<a<10共n項(xiàng),最后一項(xiàng)有n個(gè)a。如求s=2+22+222+2222+…+222…222n、a從鍵盤輸入。迭代次數(shù):i=1~n迭代初值:s=0.0,t=a迭代公式:t=t*10+a程序如下:#include<stdio.h>voidmain(void){floats,t;inti,a,n;
do{
scanf(“%d,%d”,&a,&n);if(a<1||a>9)printf(“\nDataInputError!\nInputagain:”);
}while(a<1||a>9);
s=0.0;t=a;
for(i=1;i<=n;i++)
{s+=t;t=t*10+a;}
printf(“\ns=%f”,s);}xyf(x)x1f1=f(x1)x2f2=f(x2)算法分析:①輸入x1、x2,并求出f1、f2。②迭代:將區(qū)間二分 x=(x1+x2)/2計(jì)算出f=f(x)xf③判斷f與f1是否同號(hào)如果同號(hào):x1=x,f1=f否則:x2=x,f2=fx1f1f1f2④判斷fabs(x1-x2)是否小于某個(gè)規(guī)定的精度(如10-6)
: 如果小于精度:求出根,退出到⑤。 否則:繼續(xù)②。⑤輸出根,根的值是(x1+x2)/2。⒋二分法求方程f(x)=x3-6x-1=0,在[0,5]區(qū)間的根。二分法求方程根程序#include<stdio.h>#include<math.h>voidmain(void){floatx1,x2,x,f1,f2,f;scanf(“%f,%f”,&x1,&x2);
f1=x1*x1*x1-6.0*x1-1;f2=x2*x2*x2-6.0*x2-1;
do{
x=(x1+x2)/2;f=x*x*x-6.0*x-1;if(f*f1>=0){f1=f;x1=x;}else{f2=f;x2=x;}
}while(fabs(x1-x2)>=1e-6);
printf(“Rootis:%f”,(x1+x2)/2);}CHAP3EXF迭代初值。二分迭代循環(huán)迭代條
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 八年級(jí)物理點(diǎn)擊新材料課件
- 精細(xì)化管理在倉(cāng)庫(kù)中的應(yīng)用計(jì)劃
- 《信永中和培訓(xùn)》課件
- 《教學(xué)中的道德問(wèn)題》課件
- 年度目標(biāo)達(dá)成的評(píng)估機(jī)制計(jì)劃
- 風(fēng)險(xiǎn)應(yīng)急預(yù)案培訓(xùn)
- 電力電纜供應(yīng)招標(biāo)合同三篇
- 班級(jí)特色活動(dòng)的設(shè)計(jì)方案計(jì)劃
- 化學(xué)氣相沉積硒化鋅(CVDZNSE)晶體相關(guān)行業(yè)投資方案
- 數(shù)字式溫度計(jì)相關(guān)項(xiàng)目投資計(jì)劃書
- 2024河北省建筑安全員-C證(專職安全員)考試題庫(kù)
- 餐飲公司股權(quán)合同模板
- 廣東省廣州市越秀區(qū)2023-2024學(xué)年八年級(jí)上學(xué)期期末道德與法治試題(含答案)
- 美容學(xué)徒帶薪合同范例
- 北京市海淀區(qū)2023-2024學(xué)年高二上學(xué)期期末考試 英語(yǔ) 含答案
- 國(guó)開2024年秋《大數(shù)據(jù)技術(shù)概論》形考作業(yè)1-4答案
- 技能人才評(píng)價(jià)新職業(yè)考評(píng)員培訓(xùn)在線考試(四川省)
- 生物化學(xué)實(shí)驗(yàn)智慧樹知到期末考試答案章節(jié)答案2024年浙江大學(xué)
- 肝衰竭的護(hù)理查房
- 綠化起重吊裝專項(xiàng)方案
- 整車機(jī)艙布置基本知識(shí)
評(píng)論
0/150
提交評(píng)論