第2章 程序基本結(jié)構(gòu)_第1頁(yè)
第2章 程序基本結(jié)構(gòu)_第2頁(yè)
第2章 程序基本結(jié)構(gòu)_第3頁(yè)
第2章 程序基本結(jié)構(gòu)_第4頁(yè)
第2章 程序基本結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩54頁(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)介

第二章程序基本結(jié)構(gòu)2.1分支結(jié)構(gòu)2.2關(guān)系運(yùn)算和邏輯運(yùn)算2.3循環(huán)結(jié)構(gòu)2.4break語(yǔ)句和continue語(yǔ)句2.5goto語(yǔ)句2.6指針程序設(shè)計(jì)☆☆☆☆☆自學(xué)例1輸入三個(gè)數(shù)a、b、c,輸出其中的最大者。算法一:開(kāi)始輸入a,b,ca>b?a>c?T輸出cF結(jié)束輸出aTb>c?F輸出bTF輸出c算法一:程序?qū)崿F(xiàn)#include<stdio.h>intmain(){inta,b,c;scanf("%d%d%d",&a,&b,&c);if(a>b){ //復(fù)合語(yǔ)句

if(a>c)printf("max=%d\n",a);

elseprintf("max=%d\n",c);}else{

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

elseprintf("max=%d\n",c);}return0;}雙分支結(jié)構(gòu):形式:if(表達(dá)式)

語(yǔ)句1else

語(yǔ)句2表達(dá)式語(yǔ)句2真(非0)假(0)語(yǔ)句1(算法二,常用算法)#include<stdio.h>intmain(){inta,b,c,max;scanf("%d%d%d",&a,&b,&c);

max=a;

if(b>max)max=b;if(c>max)max=c;printf("max=%d\n",max);return0;}開(kāi)始輸入a,b,cb>max?結(jié)束假設(shè)a就是最大數(shù)max=amax=bc>max?max=c輸出maxFTFT單分支結(jié)構(gòu):形式:if(表達(dá)式)

語(yǔ)句表達(dá)式真(非0)假(0)語(yǔ)句#include<stdio.h>intmain(){inta,b,c,max;scanf("%d%d%d",&a,&b,&c);

max=a;

if(b>max)max=b;if(c>max)max=c;printf("max=%d\n",max);return0;}表達(dá)式?語(yǔ)句FT例輸入x的值,根據(jù)下面的函數(shù)計(jì)算y值。#include<stdio.h>intmain(){return0;}doublex,y;scanf("%lf",&x);if(x>=0)

y=1;else

y=-1;printf("y=%lf\n",y);EG202.C例輸入三個(gè)數(shù)x1、x2、x3,按從小到大的順序輸出。分析:使x1、x2、x3中依次存放最小值,次小值和最大值;再依次輸出即可。若x1>x2:交換x1和x2若x1>x3:交換x1和x3若x2>x3:交換x2和x3#include<stdio.h>intmain(){}floatx1,x2,x3,temp;scanf("%f%f%f",&x1,&x2,&x3);if(x1>x2)temp=x1;x1=x2;x2=temp;{}復(fù)合語(yǔ)句if(x1>x3){temp=x1;x1=x3;x3=temp;}if(x2>x3){temp=x2;x2=x3;x3=temp;}printf("%g,%g,%g\n",x1,x2,x3);說(shuō)明:①?gòu)?fù)合語(yǔ)句是一個(gè)整體,相當(dāng)于一個(gè)語(yǔ)句;②在復(fù)合語(yǔ)句的花括號(hào)后不能再加分號(hào);③一個(gè)復(fù)合語(yǔ)句中可以包含其它的復(fù)合語(yǔ)句。EG204.C2.1.3多分支結(jié)構(gòu)例求一元二次方程ax2+bx+c=0的根。a、b、c由鍵盤(pán)輸入。分析:需要做下列判斷:

a=0:不是一元二次方程;不能計(jì)算,結(jié)束程序

b2-4ac=0:有兩個(gè)相等的根;計(jì)算并輸出,結(jié)束程序

b2-4ac>0:有兩個(gè)不等的根;計(jì)算并輸出,結(jié)束程序

b2-4ac<0:有兩個(gè)共軛復(fù)數(shù)根;計(jì)算并輸出,結(jié)束程序問(wèn)題:如何判斷一個(gè)實(shí)數(shù)是否等于0?判斷其絕對(duì)值是否小于某個(gè)數(shù),如1×10-10。需要用到的數(shù)學(xué)函數(shù):sqrt(x):計(jì)算x的平方根fabs(x):計(jì)算x的絕對(duì)值多分支if語(yǔ)句的形式:if(表達(dá)式1)

語(yǔ)句1elseif(表達(dá)式2)

語(yǔ)句2elseif(表達(dá)式3)

語(yǔ)句3……elseif(表達(dá)式n)

語(yǔ)句nelse

語(yǔ)句n+1VC++6.0的默認(rèn)對(duì)其格式注意:表達(dá)式的括號(hào)后面沒(méi)有分號(hào);if后面必須帶表達(dá)式;只有最后一個(gè)else后面沒(méi)有if和表達(dá)式。例求一元二次方程ax2+bx+c=0的根。a、b、c由鍵盤(pán)輸入。#include<stdio.h>#include<math.h>intmain(){return0;}doublea,b,c;doubledisc,x1,x2,rpart,ipart;scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;if(fabs(a)<=1E-6)/*判斷a是否為0*/printf("notaquadratic.\n");elseif(fabs(disc)<=1E-6)/*判斷disc是否為0*/printf("twoequalroot:%.2f\n",-b/(2*a));elseif(disc>1E-6)/*disc大于0*/{x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf("twodistinctrealroot:\n%.2f,%.2f\n",x1,x2);}else/*disc小于0*/{rpart=-b/(2*a);ipart=sqrt(-disc)/(2*a);printf("twocomplexroot:%.2f+%.2fi,%.2f-%.2fi\n",rpart,ipart,rpart,ipart);}EG205.C例輸入x的值,根據(jù)下面的公式計(jì)算y值。#include<stdio.h>intmain(){return0;}doublex,y;scanf("%lf",&x);if(x<1)y=x;elseif(x<10)y=2*x-1;elsey=3*x+5;printf("%.2f\n",y);EG206.C//1≤x<10

×//1<=x<10

×//x>=1&&x<10√//elseif(x>=10)√if語(yǔ)句的簡(jiǎn)單總結(jié):類(lèi)型形式適合情況雙分支if(表達(dá)式)

語(yǔ)句1;else

語(yǔ)句2;滿足條件做一些操作;否則執(zhí)行另一些操作;即二選一單分支if(表達(dá)式)

語(yǔ)句;滿足條件則執(zhí)行操作;否則什么也不做多分支if(表達(dá)式1)

語(yǔ)句1elseif(表達(dá)式2)

語(yǔ)句2……else

語(yǔ)句n+1多個(gè)條件中必滿足一個(gè),滿足則執(zhí)行其下的操作,其它操作都不做2.1.4if語(yǔ)句的嵌套在if語(yǔ)句的原“語(yǔ)句”中又包含一個(gè)或多個(gè)if語(yǔ)句1.if(表達(dá)式1)語(yǔ)句1else

if(表達(dá)式2)語(yǔ)句2

else語(yǔ)句32.

if(表達(dá)式1)

if(表達(dá)式2)語(yǔ)句1

else

語(yǔ)句2二義性?C語(yǔ)言規(guī)定:else總是與它前面最近的且未曾配對(duì)的if配對(duì)。if(表達(dá)式1){if(表達(dá)式2)語(yǔ)句1else語(yǔ)句2}if(表達(dá)式1){if(表達(dá)式2)語(yǔ)句1}else

語(yǔ)句2關(guān)于if語(yǔ)句的說(shuō)明:1、表達(dá)式一般為關(guān)系表達(dá)式或邏輯表達(dá)式。但在C語(yǔ)言中它也可以是任意的數(shù)值表達(dá)式。if(3)n=1;if('a')printf("%d",'a');if(n=0)x=1;elsex=-1;2、else只能與if配對(duì)使用。僅else本身不能單獨(dú)作為一個(gè)語(yǔ)句使用。if(x>5);y=x;elsey=2*x-1;if(x>5)

;

/*空語(yǔ)句*/y=x;elsey=2*x-1;/*不再與if配對(duì),而單獨(dú)出現(xiàn)了,因此出現(xiàn)語(yǔ)法錯(cuò)誤*/3、每個(gè)語(yǔ)句序列可以是一個(gè)語(yǔ)句也可以是若干個(gè)語(yǔ)句,但要用花括號(hào)括起來(lái)構(gòu)成復(fù)合語(yǔ)句。if(a>b){temp=a;a=b;b=temp;}if(a+b>c&&b+c>a&&c+a>b){s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf("area=%.2f\n",area);}elseprintf("Itisnotatriangle!\n");2.2關(guān)系運(yùn)算和邏輯運(yùn)算2.1.5條件運(yùn)算符1、條件運(yùn)算符:?:(唯一的三目運(yùn)算符)優(yōu)先級(jí)高于賦值類(lèi)運(yùn)算符,右結(jié)合性2、條件表達(dá)式的一般形式:表達(dá)式1?表達(dá)式2:表達(dá)式3運(yùn)算過(guò)程:首先求表達(dá)式1的值,若為真(非0),則求表達(dá)式2的值,且整個(gè)表達(dá)式的值為表達(dá)式2的值;若表達(dá)式1為假(0),則求表達(dá)式3的值,且整個(gè)表達(dá)式的值為表達(dá)式3的值。表達(dá)式1整個(gè)條件表達(dá)式取表達(dá)式3的值真(非0)假(0)整個(gè)條件表達(dá)式取表達(dá)式2的值例:x=a>b?a:b;x=((a>b)?a:b);if(a>b)x=a;elsex=b;說(shuō)明:1、條件表達(dá)式不能完全取代if語(yǔ)句,只有在if語(yǔ)句中內(nèi)嵌語(yǔ)句為賦值語(yǔ)句、且兩個(gè)分支都給同一個(gè)變量賦值時(shí)才能代替if語(yǔ)句。if(a>b)printf("%d\n",a);elseprintf("%d\n",b);if(a>b)x=a;elsey=b;2、條件表達(dá)式中,表達(dá)式1、表達(dá)式2和表達(dá)式3的類(lèi)型可以不同。若表達(dá)式2和表達(dá)式3類(lèi)型不同,則整個(gè)條件表達(dá)式的值應(yīng)為二者中較高的類(lèi)型。2>1?1:1.5值為1.0

0?10:'a'值為972.1.6開(kāi)關(guān)語(yǔ)句switch例:學(xué)生成績(jī)管理中,要將輸入的百分制轉(zhuǎn)換為五級(jí)制,規(guī)則如下:score≥90:輸出A80≤score≤89:輸出B70≤score≤79:輸出C60≤score≤69:輸出Dscore<60:輸出Eif(score>=90)printf("A\n");elseif(score>=80)printf("B\n");elseif(score>=70)printf("C\n");elseif(score>=60)printf("D\n");elseprintf("E\n");elseif:多條件并列測(cè)試,從中選一執(zhí)行switch:?jiǎn)螚l件測(cè)試,從中選一或多執(zhí)行1、格式:switch(表達(dá)式)

{

case

常量表達(dá)式1:語(yǔ)句1

case

常量表達(dá)式2:語(yǔ)句2

┆┆┆

case

常量表達(dá)式n:語(yǔ)句n

default:語(yǔ)句n+1

}2、功能:先計(jì)算表達(dá)式的值,然后測(cè)試該值是否與某常量表達(dá)式的值相同①、若有相同者,流程轉(zhuǎn)向其后的語(yǔ)句執(zhí)行②、若無(wú),再看有沒(méi)有default部分:若有default,則執(zhí)行其后面的語(yǔ)句;若無(wú)default,則switch語(yǔ)句什么也不做,流程轉(zhuǎn)向其后繼語(yǔ)句。中間加空格隔開(kāi)score≥90:輸出A80≤score≤89:輸出B70≤score≤79:輸出C60≤score≤69:輸出Dscore<60:輸出E#include<stdio.h>intmain(){intscore,temp;scanf("%d",&score);

temp=score/10;switch(temp){case10:case9:printf("A\n");break;case8:printf("B\n");break;case7:printf("C\n");break;case6:printf("D\n");break;default:printf("E\n");}return0;}EG207.C注意:什么地方要加break,什么地方不加break!#include<stdio.h>intmain(){return0;}intscore;charch;scanf("%d",&score);printf("Grade:%c\n",ch);switch(score/10){case10:case9:ch='A';break;case8:ch='B';break;case7:ch='C';break;case6:ch='D';break;default:ch='E';}先賦值,再輸出EG207.C說(shuō)明:1、switch后面括號(hào)內(nèi)的表達(dá)式可以是整型,也可以是字符型2、case后常量表達(dá)式只起語(yǔ)句標(biāo)號(hào)的作用;各個(gè)case后常量表達(dá)式的值必須互不相同,否則矛盾。3、各個(gè)case和default的出現(xiàn)次序不影響執(zhí)行結(jié)果。4、case后的語(yǔ)句為復(fù)合語(yǔ)句時(shí)可省略花括號(hào)。5、可在每個(gè)case分支的最后加上一個(gè)break,使流程跳出switch語(yǔ)句,而不再執(zhí)行其它分支。6、多個(gè)case可以共用一組執(zhí)行語(yǔ)句。case10:case9:printf("A\n");break;但不能寫(xiě)成:case10,9:printf("A\n");break;2.2關(guān)系運(yùn)算和邏輯運(yùn)算2.2.1關(guān)系運(yùn)算符和關(guān)系表達(dá)式一、關(guān)系運(yùn)算符

6種:

<、<=、>、>=、==、!=說(shuō)明:

1、優(yōu)先級(jí):前4種相同,后2種也相同,但前4種高于后兩種;所有關(guān)系運(yùn)算符的優(yōu)先級(jí)都低于算術(shù)運(yùn)算符而高于賦值運(yùn)算符。

2、結(jié)合性:自左至右++--*/%+-<<=>>===!=?:=+=-=*=/=%=,a>b-ca>(b-c)a==b>=ca==(b>=c)a=b!=ca=(b!=c)二、關(guān)系表達(dá)式

用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來(lái)的式子。

其中被連接的表達(dá)式可以是算術(shù)表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式、賦值表達(dá)式或字符表達(dá)式。

關(guān)系表達(dá)式的值只能是1或0(邏輯值),當(dāng)表達(dá)式成立即為“真”時(shí)值為整數(shù)1;為“假”時(shí)則值為整數(shù)0。因此可看作整型表達(dá)式。假設(shè)a=3,b=2,c=1,求以下表達(dá)式的值:

a>b(a>b)==c

a>b>c

f=a>b<=c1101(賦值表達(dá)式)2.2.2邏輯運(yùn)算當(dāng)有兩個(gè)或兩個(gè)以上條件需要同時(shí)滿足或滿足其一時(shí),需要使用邏輯運(yùn)算。邏輯與(&&):只有多個(gè)條件同時(shí)成立(真)時(shí),結(jié)果才成立(真),否則不成立(假)。邏輯或(||):兩個(gè)條件只要一個(gè)成立(真),結(jié)果就成立,都不成立(假)時(shí)才不成立(假)。邏輯非(!):條件成立(真)則結(jié)果為假,條件不成立(假)則結(jié)果為真。2.2.2邏輯運(yùn)算一、邏輯運(yùn)算符

3種:

&&

||

!①、優(yōu)先級(jí):

!(非)→&&(與)→||(或)!(非)++--算術(shù)運(yùn)算符關(guān)系運(yùn)算符&&||賦值運(yùn)算符(高)(低)②、結(jié)合性:

!是右結(jié)合性,&&和||是左結(jié)合性例:a<b&&x/y(a<b)&&(x/y)a==b||b!=c(a==b)||(b!=c)a>=1||!b(a>=1)||(!b)二、邏輯表達(dá)式邏輯表達(dá)式的值應(yīng)該是“邏輯真”或“邏輯假”。C語(yǔ)言表達(dá)式以數(shù)值1代表“真”,以數(shù)值0代表“假”;但參加運(yùn)算的運(yùn)算量可以是任何數(shù)值,進(jìn)行判斷時(shí),非零值代表“真”,零值代表“假”。邏輯運(yùn)算真值表:ab!a!ba&&ba||b非0非00011非0001010非01001001100若a=100,b=5,則:

!a=?a&&b=?a||b=?!a&&b=?01104&&0||2'a'+'b'||'c''a'&&'\0'110如何表示數(shù)學(xué)表達(dá)式:1≤x<10?應(yīng)寫(xiě)為:x>=1&&x<10,不能寫(xiě)為:1<=x<10或10>x>=1判斷一個(gè)字符是否大寫(xiě)字母:ch>='A'&&ch<='Z'或:ch>=65&&ch<=90

判斷一個(gè)字符是否數(shù)字字符:ch>='0'&&ch<='9'或:ch>=48&&ch<=57規(guī)律:在邏輯表達(dá)式的求解過(guò)程中,并不是所有的邏輯運(yùn)算符都被執(zhí)行,只是在必須執(zhí)行下一個(gè)邏輯運(yùn)算符才能求出表達(dá)式的解時(shí),才執(zhí)行該運(yùn)算符。①、在&&表達(dá)式中,若左端為0,則不必再計(jì)算右端,表達(dá)式值為0;即:0&&a==0②、類(lèi)似有:1||a==1

例:a=1,b=2,c=3,d=4,m=n=5

(m=a>b)&&(n=c>d)

m=?n=?2.1.5條件運(yùn)算符m=0n=52.3循環(huán)結(jié)構(gòu)例2.12:計(jì)算:1+2+3+…+100intsum;sum=1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+…;//不合適sum=0;//清零sum+=1;sum+=2;sum+=3;……sum+=100;printf("sum=%d\n",sum);換種寫(xiě)法:①

i=1;sum=0;②sum+=i;③i+=1;④

如果i<=100,跳到②⑤輸出sum2.3.1while語(yǔ)句1、格式:

while

(表達(dá)式)

循環(huán)體語(yǔ)句2、功能:先計(jì)算表達(dá)式的值,值為非0時(shí)重復(fù)執(zhí)行循環(huán)體……直到表達(dá)式值為0時(shí)退出循環(huán),跳轉(zhuǎn)到循環(huán)體之后的語(yǔ)句執(zhí)行表達(dá)式成立?循環(huán)體真(非0)假(0)真(非0)假(0)例2.12計(jì)算:1+2+3+…+100i<=100?sum+=ii=i+1while(i<=100)sum+=i;i=i+1;{}例2.11:計(jì)算1+2+3+…+100while(i<=100){sum+=i;i=i+1;}i=1;sum=0;#include<stdio.h>intmain(){return0;}inti,sum;printf("sum=%d\n",sum);sum=0;i=1;?i=i+1;sum+=i;?EG208.C編程原則:改變位置后,只要不影響后面的使用(計(jì)算結(jié)果)即可。2.3.2do-while語(yǔ)句1、格式:do

循環(huán)體語(yǔ)句while

(表達(dá)式);2、功能:先執(zhí)行一遍循環(huán)體,然后計(jì)算表達(dá)式的值,若值為真(非0),返回重復(fù)執(zhí)行循環(huán)體;直到表達(dá)式的值為假(0)時(shí)結(jié)束循環(huán)。表達(dá)式成立嗎?循環(huán)體真(非0)假(0)3、特點(diǎn):先執(zhí)行循環(huán)體,后判斷表達(dá)式(循環(huán)條件)是否成立,即循環(huán)體至少執(zhí)行一次。4、推薦書(shū)寫(xiě)格式:do{......}while(...);例2.12:計(jì)算1+2+3+…+100真(非0)假(0)sum+=ii++i<=100?dosum+=i;i++;while(i<=100);{}#include<stdio.h>intmain(){inti=1,sum=0;printf("sum=%d\n",sum);return0;}EG211.C2.3.3for語(yǔ)句1、格式:for

(表達(dá)式1;表達(dá)式2;表達(dá)式3)

循環(huán)體語(yǔ)句表達(dá)式2成立嗎?求解表達(dá)式3真(非0)假(0)求解表達(dá)式1循環(huán)體語(yǔ)句2、功能:

①、先求解表達(dá)式1(給循環(huán)控制變量賦初值)

②、求解表達(dá)式2,若為真(非0),執(zhí)行循環(huán)體;若為假(0),結(jié)束循環(huán)

③、求解表達(dá)式3(改變了表達(dá)式2中某個(gè)變量的值)

④、返回②for(i=1;i<=100;i++)sum+=i;3、例:計(jì)算sum=1+2+3+…+100#include<stdio.h>intmain(){inti,sum=0;for(i=1;i<=100;i++)sum+=i;printf("sum=%d\n",sum);return0;}EG213.C三種循環(huán)語(yǔ)句的對(duì)比:#include<stdio.h>intmain(){inti,sum;i=1;sum=0;while(i<=100){sum=sum+i;i=i+1;}printf("%d\n",sum);return0;}#include<stdio.h>intmain(){inti,sum;i=1;sum=0;do{sum=sum+i;i=i+1;}while(i<=100);printf("%d\n",sum);return0;}#include<stdio.h>intmain(){inti,sum;sum=0;for(i=1;i<=100;i++)sum=sum+i;printf("%d\n",sum);return0;}⑴在循環(huán)之前需要給某些變量賦值(循環(huán)變量賦初值);⑵循環(huán)體中應(yīng)有使循環(huán)趨于結(jié)束的語(yǔ)句;⑶循環(huán)部分為多個(gè)語(yǔ)句時(shí),必須用大括號(hào)構(gòu)成復(fù)合語(yǔ)句。例:輸入若干個(gè)數(shù),以0作為結(jié)束標(biāo)志,計(jì)算并輸出這些數(shù)的平均值(0不計(jì)算在內(nèi))。分析:定義三個(gè)變量:x:存放輸入的數(shù)sum:存放累加和count:計(jì)數(shù)while(x!=0)sum+=x;count+=1;{}scanf("%f",&x);scanf("%f",&x);sum=0;count=0;EG209.C#include<stdio.h>intmain(){

floatsum,x,count;sum=0;count=0;scanf("%f",&x);//讀入第一個(gè)xwhile(x!=0){sum+=x;count+=1;

scanf("%f",&x);//讀入其它的x}printf("aver=%.2f\n",count==0?0:sum/count);return0;}EG209.C注意:循環(huán)結(jié)束的條件?循環(huán)體要完成哪些操作?在循環(huán)體的最后讀入下一個(gè)值,以不斷的得到新值while語(yǔ)句之前應(yīng)該完成哪些操作?例:計(jì)算1+3+5+7+…+n(n為奇數(shù))#include<stdio.h>intmain(){inti,sum=0,n;scanf("%d",&n);for(i=1;i<=n;i+=2)sum=sum+i;printf("sum=%d\n",sum);return0;}for語(yǔ)句可以寫(xiě)成以下形式:sum=0;i=1;for(;i<=n;i+=2)sum+=i;sum=0;i=1;for(;i<=n;){sum+=i;

i+=2;}for(i=1,sum=0;i<=n;i+=2)sum+=i;EG214.C例:輸入一行字符,以\n作為結(jié)束標(biāo)志,計(jì)算字符個(gè)數(shù)。scanf("%c",&ch);while(ch!='\n')count+=1;scanf("%c",&ch);{}#include<stdio.h>intmain(){charch;intcount=0;printf("count=%d\n",count);return0;}#include<stdio.h>intmain(){charch;

intcount=0;

while((ch=getchar())!='\n')count++;printf("count=%d\n",count);return0;}字符輸入函數(shù)getchar()用法:ch=getchar()作用:從鍵盤(pán)讀入一個(gè)字符賦值給變量ch字符輸出函數(shù)putchar()用法:putchar(ch);或:putchar('A');(getchar()!='\n')

EG210.Cwhile循環(huán)和do-while循環(huán)的比較whiledo-while⑴先判斷條件再執(zhí)行循環(huán)體先執(zhí)行循環(huán)體再判斷條件⑵循環(huán)體可能一次也不執(zhí)行至少執(zhí)行一次循環(huán)體#include<stdio.h>intmian(){int

sum=0,i;

scanf("%d",&i);while(i<=10){sum=sum+i;i++;}printf("%d\n",sum);return0;}#include<stdio.h>intmian(){int

sum=0,i;

scanf("%d",&i);do{sum=sum+i;i++;}while(i<=10);printf("%d\n",sum);return0;}假設(shè)輸入i的值為11則輸出:0假設(shè)輸入i的值為11則輸出:11說(shuō)明:do-while語(yǔ)句較少使用,用于需要先執(zhí)行循環(huán)體后判斷表達(dá)式的情況。例:輸入兩個(gè)數(shù)x和y,要求x、y異號(hào)。即同號(hào)則要求繼續(xù)輸入,直到異號(hào)為止。floatx,y;do{printf("Inputx,y:");scanf("%f%f",&x,&y);}while();/*同時(shí)不允許出現(xiàn)0*/x*y>=0EG212.C例、輸出所有的水仙花數(shù)。水仙花數(shù)是指一個(gè)3位數(shù),各位數(shù)字的立方和等于該數(shù)本身,例如153=13+53+33。分析:對(duì)每一個(gè)3位數(shù)來(lái)說(shuō),分解出它們的個(gè)位、十位和百位,然后判斷它們的立方和是否等于該數(shù)本身。注意:使用哪種循環(huán)語(yǔ)句?如何分解出它們的個(gè)位、十位和百位?循環(huán)語(yǔ)句的格式for(i=100;i<=999;i++){}a=i/100;b=i%100/10;c=i%10;if(i==a*a*a+b*b*b+c*c*c)printf("%d",i);#include<stdio.h>intmain(){inti,a,b,c;printf("Thenarcissusnumbersare:");return0;}

Thenarcissusnumbersare:153370371407if(i!=…)continue;printf("%d");例有一分?jǐn)?shù)序列:求出這個(gè)數(shù)列的前20項(xiàng)之和。分析:逐步計(jì)算出每一項(xiàng)的分子、分母,再計(jì)算并相加。注意:使用哪種循環(huán)語(yǔ)句?第一項(xiàng)的值如何得到?如何計(jì)算下一項(xiàng)的分子、分母?變量的類(lèi)型?#include<stdio.h>intmain(){inti;

doublea,b,sum=0;a=2;b=1;for(i=1;i<=20;i++){}printf("sum=%f\n",sum);return0;}sum+=a/b;a=a+b;b=a-b;/*temp=a;a=a+b;b=temp;*/sum=32.6602614、說(shuō)明①、for語(yǔ)句的表達(dá)式可以缺省,但兩個(gè)分號(hào)不能缺?。虎?、若在for語(yǔ)句之前已經(jīng)對(duì)循環(huán)控制變量賦初值,則表達(dá)式1可以缺省;i=1;for(;i<=100;i++)sum=sum+i;for(i=1;i<=100;i++)sum=sum+i;③、通常不缺省表達(dá)式2;有時(shí)缺省表達(dá)式2,此時(shí)不判斷循環(huán)條件,循環(huán)將無(wú)終止的執(zhí)行,即認(rèn)為表達(dá)式2始終為真;在循環(huán)體內(nèi)用if和break控制循環(huán)結(jié)束。for(i=1;;i++){if(i>100)break;sum=sum+i;}④、表達(dá)式3也可以缺省,但應(yīng)設(shè)法修改循環(huán)控制變量,保證程序正常結(jié)束for(i=1;i<=100;){sum=sum+i;

i++;}⑤、可以同時(shí)省略表達(dá)式1和表達(dá)式3,即只給循環(huán)條件。i=0;for(;i<=100;){sum=sum+i;i++;}此時(shí),等同于while語(yǔ)句。⑥、3個(gè)表達(dá)式都可以省略,如:for(;;)

循環(huán)體;while(1)

循環(huán)體;將無(wú)終止的執(zhí)行循環(huán)。從語(yǔ)法上講是正確的,但一般沒(méi)有實(shí)際意義。⑦、for語(yǔ)句中的表達(dá)式1和表達(dá)式3可以由一個(gè)或多個(gè)賦值表達(dá)式組成,當(dāng)為多個(gè)表達(dá)式時(shí),各表達(dá)式之間要用逗號(hào)運(yùn)算符(即組成逗號(hào)表達(dá)式)。for(sum=0,

i=1;i<=100;i++)sum=sum+i;例2.18打印九九乘法表。for(i=1;i<=9;i++)//循環(huán)9次,每次打印1行{}for(j=1;

j<=i;j++)//printf("%d*%d=%-4d",i,j,i*j);printf("\n");#include<stdio.h>intmain(){inti,j;return0;}例2.19打印101--200之間的全部素?cái)?shù)。判斷m是否是素?cái)?shù)可以讓m被2、3、4……去除,若能被其中的任何一個(gè)數(shù)整除,則證明不是素?cái)?shù);相反,若不能被所有數(shù)整除,則證明是素?cái)?shù)。for(m=101;m<=200;m+=2){}k=(int)sqrt(m);

for(i=2;

i<=k;i++)if(m%i==0)

break;if()printf("%-5d",m);i==k+12.3.4循環(huán)嵌套

一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱(chēng)為循環(huán)嵌套。內(nèi)層的循環(huán)中還可以嵌套循環(huán),構(gòu)成多重循環(huán)。三種循環(huán)可以相互嵌套。例:while(){······while(){······}······}for(;;){······for(;;){······}······}while(){······for(;;){······}······}例:輸出如圖所示的三角形:***************特點(diǎn):第i行有i個(gè)星號(hào)for(i=1;i<=5;i++){輸出

i

個(gè)*

換行}for(i=1;i<=5;i++){printf("\n");}for(j=1;j<=i;j++)printf("*");#include<stdio.h>intmain(){inti,j;for(i=1;i<=5;i++){for(j=1;j<=i;j++)putchar('*');putchar('\n');}return0;}EG216.C例、輸出如圖所示的等腰三角形:************************************特點(diǎn):第i行有______個(gè)星號(hào)!一共有6行,第i行的第1個(gè)星號(hào)前有____個(gè)空格2*i-16-ifor(i=1;i<=6;i++){

輸出6-i

個(gè)空格輸出2*i-1

個(gè)*換行}#include<stdio.h>intmain(){inti,j;for(i=1;i<=6;i++){putchar('\n');}return0;}for(j=1;j<=6-i;j++)putchar(32);for(j=1;j<=2*i-1;j++)putchar('*');EG217.C2.3.5幾種循環(huán)的比較①、C語(yǔ)言中的三種循環(huán)結(jié)構(gòu)都由表達(dá)式控制執(zhí)行一個(gè)循環(huán)體,一般情況下可以相互代替;②、用while和do-while循環(huán)時(shí),循環(huán)變量初始化的操作應(yīng)在while和do-while語(yǔ)句之前完成;而for語(yǔ)句一般在表達(dá)式1中實(shí)現(xiàn)循環(huán)變量的初始化;③、當(dāng)循環(huán)次數(shù)及控制條件要在程序運(yùn)行過(guò)程中確定時(shí),選用while或do-while語(yǔ)句;④、在初值、增量及控制條件明顯,或循環(huán)次數(shù)已經(jīng)給定的情況下,選用for語(yǔ)句;⑤、在循環(huán)的執(zhí)行過(guò)程中,應(yīng)不斷的改變循環(huán)控制表達(dá)式的值,以便逐步形成使它為0的條件,否則將可能出現(xiàn)死循環(huán);⑥、三種循環(huán)可以相互嵌套,形成多重循環(huán),外循環(huán)可以包含多個(gè)或多重內(nèi)循環(huán),循環(huán)之間可以并列但不能相交,并列的循環(huán)控制變量可以同名,但嵌套的循環(huán)控制變量不能同名;⑦、不允許用其它的控制語(yǔ)句把程序流程從循環(huán)體外轉(zhuǎn)入循環(huán)體內(nèi),但必要時(shí)可以用break、goto等語(yǔ)句把流程從循環(huán)體內(nèi)轉(zhuǎn)到循環(huán)體外。2.4break語(yǔ)句和continue語(yǔ)句2.4.1break語(yǔ)句1、格式:break;2、功能:

中止當(dāng)前循環(huán)語(yǔ)句或switch語(yǔ)句的執(zhí)行3、說(shuō)明:①、若是多重循環(huán),break只能使流程跳出離break最近的一層;②、break只用于switch語(yǔ)句和循環(huán)語(yǔ)句。例2.19打印101--200之間的全部素?cái)?shù)。EG218.Cfor(m=101;m<=200;m+=2){k=(int)sqrt(m);for(i=2;i<=k;i++)if(m%i==0)

break;if(i==k+1)printf("%-5d",m);}2.4.2continue語(yǔ)句1、格式:continue;2、功能:

提前結(jié)束本次循環(huán)的執(zhí)行(不再執(zhí)行循環(huán)體中continue后面的語(yǔ)句),接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定3、說(shuō)明:①、continue語(yǔ)句只能用于循環(huán)語(yǔ)句中,它是一種具有特殊功能的轉(zhuǎn)移語(yǔ)句;②、continue與break不同:continue語(yǔ)句只是結(jié)束本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行;而break語(yǔ)句則結(jié)束整個(gè)循環(huán),不再判斷循環(huán)條件是否成立。例:把10到20之間能被3整除的數(shù)輸出#include"stdio.h"

intmain()

{

intn;

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

{

if(n%3!=0)

continue;

printf("%d",n);

}

return0;}121518while(){┊

break;┊}....while(){┊

continue;┊}....EG219.C2.6指針程序設(shè)計(jì)2.6.1指針在計(jì)算機(jī)中,把內(nèi)存區(qū)劃分為一個(gè)一個(gè)的存儲(chǔ)單元,每個(gè)單元為一個(gè)字節(jié)(8位),它們都有一個(gè)編號(hào),這個(gè)編號(hào)就是內(nèi)存單元的地址。因此,把一個(gè)變量的地址稱(chēng)為該變量的“指針”??梢远x一種變量,專(zhuān)門(mén)用來(lái)存放其它變量的地址(指針),這種變量稱(chēng)為指針變量。

變量的指針就是變量的地址。指針變量就是存放變量地址的變量。整型變量i指針變量ip如何使ip和i建立聯(lián)系?賦值:ip=&i;2000i3000ip2000為了將數(shù)值10賦值給變量i,可以有兩種表示方法:①、將10直接賦值給變量i:i=10;②、將10賦值給ip所指向的變量:*ip=10;

*:指針運(yùn)算符(單目),優(yōu)先級(jí)為2,右結(jié)合性

*ip表示ip所指向的變量。條件:ip=&i;結(jié)論:ip

&i*ip

iscanf("%d",&i);

scanf("%d",ip);i=i+1;

*ip=*ip+1;#include<stdio.h>intmain(){inti,*p;

p=&i;//前提條件

printf("Inputaint:\n");scanf("%d",p);while(*p>=10)

*p=*p/10;printf("%d\n",*p);return0;}EG319.C例2.23使用指針從鍵盤(pán)輸入一個(gè)正整數(shù),求出最高位數(shù)字。#include<stdio.h>intmain(){inti;printf("Inputaint:\n");scanf("%d",&i);while(i>=10)

i=i/10;printf("%d\n",i);return0;}2、指針變量的定義形式:

溫馨提示

  • 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)論