《實用C語言程序設計教程》第3章三種基本結構程序設計課件_第1頁
《實用C語言程序設計教程》第3章三種基本結構程序設計課件_第2頁
《實用C語言程序設計教程》第3章三種基本結構程序設計課件_第3頁
《實用C語言程序設計教程》第3章三種基本結構程序設計課件_第4頁
《實用C語言程序設計教程》第3章三種基本結構程序設計課件_第5頁
已閱讀5頁,還剩99頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章三種基本結構程序設計3.1順序結構程序設計

3.2

選擇結構程序設計

3.3

循環(huán)結構

2022/11/12第三章三種基本結構程序設計3.1順序結構程序設計33.1順序結構程序設計順序結構程序:就是執(zhí)行時依語句排列順序一條接著一條地執(zhí)行,不發(fā)生控制流的轉(zhuǎn)移。

特點:每個程序都是按照語句的書寫順序依次執(zhí)行的,它是最簡單的結構。不可或缺的若干語句,用{}把它們括起來,這樣的語句體稱為復合語句。復合語句在邏輯上等價于一條語句,復合語句內(nèi)部還可嵌套復合語句。

ABab2022/11/123.1順序結構程序設計順序結構程序:就是執(zhí)行時依語句排列

3.1.1程序設計簡例main(){charch=′a′;/*定義變量并賦值*/inta=98;unsignedb=1000;longc=123456789;floatx=3.14;doubley=1.2345678;printf(″(1)a=%d,a=%c,ch=%d,ch=%c\n″,a,a,ch,ch);/*輸出*/printf(″(2)b=%u\n″,b);printf(″(3)c=%ld\n″,c);printf(″(4)x=%f,y=%f\n″,x,y);printf(″(5)x=%e,y=%e\n″,x,y);printf(″(6)y=%-10.2f\n″,y);}【例1】分析下列程序,觀察運行結果

運行結果

(1)a=98,a=b,ch=97,ch=a(2)b=1000(3)c=123456789(4)x=3.140000,y=1.234567(5)x=3.14000e+00,y=1.23456e+00(6)y=1.232022/11/123.1.1程序設計簡例main()【例1】分析下列程序設計簡例【例2】輸入一個三位的整數(shù),分解它的符號、百位數(shù)字、十位數(shù)字和個位數(shù)字,然后依次輸出。#include<stdio.h>#include<math.h>/*程序中使用了數(shù)學函數(shù)abs*/main(){charc1,c2,c3,c4;/*定義變量*/intx;printf(″pleaseinputanumer:\n″);/*輸入提示信息*/scanf("%d",&x);/*鍵盤輸入x的值*/c4=x>=0?’+’:’-’;/*將x的符號賦給c4*/x=abs(x);/*取x的絕對值*/c3=x%10+48;/*求得x的個位數(shù)字,加48轉(zhuǎn)換為對應數(shù)字字符的ASCII碼值*/x=x/10;/*去掉個位數(shù),取出x的高位*/c2=x%10+48;/*求得x的十位數(shù)字,加48轉(zhuǎn)換為對應的ASCII碼值*/c3=x/10+48;/*求得x的百位數(shù)字,加48轉(zhuǎn)換為對應的ASCII碼值*/printf("%c\n%c\n%c\n%c\n",c4,c3,c2,c1);/*輸出符號位,百位,十位,個位*/}程序的執(zhí)行結果:pleaseinputanumer:-321↙-,3,2,12022/11/12程序設計簡例【例2】輸入一個三位的整數(shù),分解它的符號、程序設計簡例【例3】在屏幕輸出“pleaseinputyourname:”,再從鍵盤上輸入一個名字,然后顯示“Hello!”,在下一行顯示輸入的名字。#include<stdio.h>main(){charname[10];/*存放名子的變量在后面章節(jié)再詳細介紹*/printf(″pleaseinputyourname:\n″);/*輸出提示信息*/scanf(″%s″,name);/*讀入名字*/printf(″Hello!\n″);/*輸出Hello!*/printf(″%s″,name);/*輸出讀入的名字*/}程序的執(zhí)行結果:pleaseinputyourname:Ligang↙Hello!Ligang2022/11/12程序設計簡例【例3】在屏幕輸出“pleaseinp程序設計簡例【例4】讀入一個小寫字母,將其轉(zhuǎn)換成大寫字母后輸出,同時輸出其對應的ASCII編碼。#include<stdio.h>main(){charch1,ch2;printf("Enteralowerletter:");ch1=getchar();/*利用字符輸入函數(shù),實現(xiàn)鍵盤輸入一個字符,賦給字符變量ch1*/printf("letter:%c,ASCII:%d\n",ch1,ch1);/*屏幕顯示鍵盤輸入的字符,并顯示該字符的ASCII代碼值*/ch2=ch1-32;/*將小寫字母轉(zhuǎn)換成對應的大寫字母*/printf("letter:%c,ASCII:%d\n",ch2,ch2);/*屏幕顯示轉(zhuǎn)換后的字符,及該字符的ASCII代碼值*/}程序運行情況:Enteralowerletter:a↙letter:a,ASCII:97letter:A,ASCII:652022/11/12程序設計簡例【例4】讀入一個小寫字母,將其轉(zhuǎn)換成大程序設計簡例【例5】在100.0g苯中加入13.76g聯(lián)苯(MB),所形成溶液的沸點為82.40℃(t2),計算聯(lián)苯的相對分子量。已知純苯的沸點為80.10℃(t1),Kb=2.57。#include<stdio.h>main(){floatmA,mB,MB,Kb,t1,t2;/*定義變量*/printf(″pleaseinput:mA,mB,Kb

,t1,t2\n″);/*輸出“輸入數(shù)據(jù)”提示信息*/scanf(″%f,%f,%f,%f,%f″,&mA,&mB,&Kb

,&t1,&t2);/*讀入數(shù)據(jù)*/MB=(Kb*mB)/((t1-t2)*mA);/*計算聯(lián)苯的分子量*/printf("MB=%6.2f",MB);/*輸出聯(lián)苯的分子量*/printf("g/mol\n");/*打出分子量的單位*/}程序運行情況:pleaseinput:mA,mB,Kb

,t1,t2100.0,13.76,2.57,80.10,82.40↙MB=153.75g/mol2022/11/12程序設計簡例【例5】在100.0g苯中加入13.76g3.1.2格式輸入輸出的一般形式格式、格式輸出函數(shù)printf()printf()函數(shù)調(diào)用的形式:

printf(“格式控制字符串”,輸出項表)或printf(字符串)在該函數(shù)調(diào)用時,在其后面加上分號,就構成了格式輸出語句。printf中的輸出項是和前面的格式控制字符串按順序一一對應的。“項”可以是常量、變量、表達式、數(shù)組和函數(shù)調(diào)用,其值應和格式說明相容。

1.格式控制字符串該字符串放在一對雙引號中,它可以包含以下三部分內(nèi)容。(1)按原樣輸出的字符:(2)轉(zhuǎn)義字符:(3)與輸出項對應的“格式說明符”:要求以%開頭,格式說明符在個數(shù)和類型上應該與輸出項相對應。

2022/11/123.1.2格式輸入輸出的一般形式格式、格式輸出函數(shù)pri

輸出格式字符表

格式符輸出形式輸出項類型數(shù)據(jù)輸出方式%-md%-mo%-mx%-mud十進制整數(shù)o八進制整數(shù)x十六進制整數(shù)u無符號整數(shù)int,shortunsignedintunsignedshortchar有-,左對齊;無-,右對齊無m或總寬度超過m位時按實際寬度輸出;不足m位時,補空格%-mld%-mlo%-mlx%-mluld十進制整數(shù)lo八進制整數(shù)lx十六進制整數(shù)lu無符號整數(shù)longunsignedlong%-m.nf%-m.ne%<f,e>f十進制小數(shù)e十進制指數(shù)自動選定格式floatdouble有-,左對齊;無-,右對齊無m.n或總寬度超過m時,則按實際寬度輸出;有m.n輸出m位,其中小數(shù)n位;不足m位時,加空格%g自動選定f或e格式floatdouble不輸出尾數(shù)中無效的0,以盡可能少地占輸出寬度。%-mcc單個字符char有-,左對齊;無-,右對齊無m則輸出單個字符;有m則輸出m位,不足m位時補空格%-m.nss字符串字符串有-,左對齊;無-,右對齊無m.n則按實際輸出全部字符串有m.n則輸出前n個字符串注意:m、n均是正整數(shù),m主要用于控制輸出數(shù)據(jù)的總寬度,n用于控制輸出實數(shù)的小數(shù)位數(shù)或控制輸出字符串時可以輸出的實際字符數(shù)。2022/11/12輸出格式字符表格式符輸出形式輸出項類型數(shù)據(jù)輸出方式%-m格式輸入輸出的一般形式格式2.輸出項表printf函數(shù)中的“輸出項表”部分由表達式組成,這些表達式應與“格式控制字符串”中的格式說明符的類型一一對應,若“輸出項表”中有多個表達式,則每個表達式之間應由逗號隔開,各輸出項可以是任意合法的表達式(包括常量、變量和函數(shù)調(diào)用)。因此printf函數(shù)也具有計算的功能。

printf("%d\n",100);/*輸出顯示100*/printf("%d\n",1234000+5678);/*輸出顯示:1234+5678*/printf("%f\n",(x=123.0)+(y=0.4567));/*輸出顯示:123.456700*/printf("%6.2f\n",123.4567);/*輸出顯示:123.46*/printf("%.3f\n",123.4567);/*輸出顯示:123.457*/2022/11/12格式輸入輸出的一般形式格式2.輸出項表printf函數(shù)格式輸入輸出的一般形式格式3.printf函數(shù)的控制字符的附加說明標記作用+(加號)空格#0*輸出的正數(shù)前面加“+”號,負數(shù)前面加“-”號在輸出的正數(shù)前加一個空格“#o”使輸出的八進制數(shù)前加0“#x”或“#X”使輸出的十六進制數(shù)前加0x或0X對沒有小數(shù)部分的浮點數(shù),#迫使f、e、E、g、G打印出小數(shù)點且“#g”不去掉尾部的無效0用0(零)去填充域?qū)捴付ǜ↑c數(shù)的輸出位數(shù)2022/11/12格式輸入輸出的一般形式格式3.printf函數(shù)的控制字符的格式輸入輸出的一般形式格式二.格式輸入函數(shù)scanf()scanf()調(diào)用的格式:scanf("格式控制字符串",輸入地址項表列);該函數(shù)具有按格式字符串中規(guī)定的格式,在鍵盤上輸入各輸入項的數(shù)據(jù),并依次賦給各輸入項,且具有對從輸入流中接收到的數(shù)據(jù)進行格式轉(zhuǎn)換的功能。因為要求在內(nèi)存中保存所接收到的數(shù)據(jù),因此,需要提供接收數(shù)據(jù)的變量的地址。地址運算符&用于取得指定變量的地址。當以數(shù)值格式從輸入流中讀取數(shù)據(jù)時,scanf()可以跳過空格、換行及跳格符(在輸入流中,數(shù)值型數(shù)據(jù)須以這些空白字符分隔)。2022/11/12格式輸入輸出的一般形式格式二.格式輸入函數(shù)scanf(格式輸入輸出的一般形式格式1.格式控制字符串格式符輸入形式輸入項類型數(shù)據(jù)輸入方式%md%mo%mxd十進制整數(shù)o八進制整數(shù)x十六進制整數(shù)int,shortunsignedintunsignedshort無m按實際位數(shù)輸入有m只能輸入m位不足m位,以Enter鍵或空格結束%mld%mlo%mlxld十進制整數(shù)lo八進制整數(shù)lx十六進制整數(shù)longunsignedlong%mf%mef十進制小數(shù)e十進制指數(shù)floatdouble%mlf%mlelf十進制小數(shù)le十進制指數(shù)floatdouble%mcc單個字符char無m僅取單個字符,以Enter結束有m輸入m個字符,僅取第一個%mss字符串字符串無m輸入字符至回車或空格結束有m僅取前m個字符2022/11/12格式輸入輸出的一般形式格式1.格式控制字符串格式符輸入形式輸格式輸入輸出的一般形式格式2.輸入地址表列scanf函數(shù)中的“地址表列”部分是由變量的地址組成的,如果有多個變量,則各變量之間用逗號隔開。地址運算符為“&”,如變量a的地址可以寫為&a。輸入項表中的各輸入項,應該是存放輸入數(shù)據(jù)存儲單元的地址。使用時一定注意,各輸入項之間用“,”號分隔開,各變量名前一定要加“&”求地址運算符。3.說明(1)在scanf函數(shù)“格式控制”部分中的每個格式說明符都必須在“地址表”中有一個變量與之對應,格式說明符必須要與相應變量的類型一致。而且,輸入的數(shù)據(jù)必須是常量,不能是表達式,而且按輸入項的前后次序順序輸入數(shù)據(jù)。

(2)在輸入數(shù)據(jù)時,各數(shù)據(jù)之間要使用“空格”、“Tab”或“回車”鍵(Enter鍵)作為分隔;如果格式說明符之間包含其他字符,則輸入數(shù)據(jù)時,應輸入與這些字符相同的字符做間隔。

2022/11/12格式輸入輸出的一般形式格式2.輸入地址表列3.說明(1)在格式輸入輸出的一般形式格式(3)在輸入字符型數(shù)據(jù)時,由于“空格”也作為有效字符輸入,因此,不需要用“空格”做分隔,只要輸入一個字符即可。故輸入字符型數(shù)據(jù)時,數(shù)據(jù)之間不用分隔符。

(4)在格式說明符的前面指定輸入數(shù)據(jù)所占的列數(shù)時,系統(tǒng)將自動按此列數(shù)來截取所需的數(shù)據(jù)。

(5)如果在格式控制字符串中,含有不屬于格式說明的其他字符,在輸入數(shù)據(jù)時,必須在對應位置上原樣輸入這些字符。

(6)如果在%后有一個“*”附加說明符,表示跳過它指定的列數(shù)。

(7)在scanf函數(shù)中不使用%u說明符,對unsigned型數(shù)據(jù),以%d或%o、%x格式輸入。

(8)在用scanf函數(shù)輸入數(shù)據(jù)時,不能規(guī)定精度。

2022/11/12格式輸入輸出的一般形式格式(3)在輸入字符型數(shù)據(jù)時,由于“3.1.3字符輸入、輸出函數(shù)1.字符輸入函數(shù)格式:

getchar()或getch()調(diào)用函數(shù)時,當程序執(zhí)行到getchar函數(shù)調(diào)用語句時,將等待輸入,只有當用戶輸入字符,并按Enter鍵后,才接收輸入的第1個字符,并在屏幕上回顯該字符,同時送到內(nèi)存的緩沖區(qū),準備賦給指定的變量。并且對空格符、制表符(Tab鍵)和回車符(Enter鍵)都被當作有效字符讀入。getch()函數(shù)是立即接收用戶來自鍵盤上的輸入,不把字符回顯到屏幕上。

2.字符輸出函數(shù)putchar格式:putchar(ch)

其作用是將參數(shù)代表的字符在標準輸出設備(通常是顯示器)上加以輸出。參數(shù)ch可以是字符常量、字符變量或整型表達式,其功能等價于:printf("%c",ch)。

2022/11/123.1.3字符輸入、輸出函數(shù)1.字符輸入函數(shù)格式:ge3.2選擇結構程序設計分支語句有兩類:一類是if語句,另一類是switch語句。條件語句的作用是使程序按某種條件有選擇地執(zhí)行一條或多條語句。其中,條件可以用表達式來描述,如關系表達式和邏輯表達式。

選擇結構程序中的語句(段)是否執(zhí)行,取決于某個“條件”是否成立。選擇結構的程序又有三種形式:單分支結構、雙分支結構和多分支結構。2022/11/123.2選擇結構程序設計分支語句有兩類:一類是3.2.1程序設計簡例【例6】輸入2個數(shù),如果它們的值不相等,則交換并輸出它們的值;否則,輸出“equal”。

#include<stdio.h>voidmain(){inta,b,t;printf("inputa,b:\n");scanf("%d,%d",&a,&b);if(a!=b){/*語句1是一條復合語句*/t=a;a=b;b=t;printf("a=%d,b=%d\n",a,b);}elseprintf("equal\n");/*語句2*/程序的執(zhí)行結果1:inputa,b:10,12↙a=12,b=10程序的執(zhí)行結果2:inputa,b:10,10↙equal

2022/11/123.2.1程序設計簡例【例6】輸入2個數(shù),如果程序設計簡例【例7】輸入3個整數(shù),輸出其中的最大值。#include<stdio.h>voidmain(){inta,b,c,max;/*max中放最大值*/printf("inputa,b,c:\n");scanf("%d%d%d",&a,&b,&c);max=a;/*先假設a是最大的數(shù)*/if(max<b)max=b;/*如果b比假設的最大值大,再假設b是最大的數(shù)*/if(max<c)max=c;/*如果c比假設的最大值大,則c是最大的數(shù)*/printf("maxis%d\n",max);}運行:inputa,b,c:329065↙maxis902022/11/12程序設計簡例【例7】輸入3個整數(shù),輸出其中的最大值程序設計簡例【例8】解方程ax2+bx+c=0。

分析:(1)若b2-4ac>0,方程有兩個不等的實根;(2)若b2-4ac=0,方程有兩個相等的實根;(3)若b2-4ac<0,方程有兩個復根。

yyn開始a==0這是一次方程x=-c/bdelta=b*b-4*a*c輸入a,b,c方程有兩個相等的實根x1,x2=-b/(2*a)n方程有兩個虛根n方程有兩個不相等的實根x1=(-b+sqrt(delta)/(2*a))x2=(-b-sqrt(delta)/(2*a))結束圖3-1解一元二次方程的流程示意圖ydelta==0delta<02022/11/12程序設計簡例【例8】解方程ax2+bx+c=0。程序設計簡例main(){floata,b,c,delta,x1,x2,realpart,imagepart;printf(″請輸入a,b,c:\n″);scanf(″%f,%f,%f″,&a,&b,&c);if(fabs(a)<=1e-6)printf(″這是一次方程x=%f\n″,-c/b);else{

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

if(fabs(delta)<=1e-6)

printf(″方程有兩個相等的實根:x1=x2=%8.4f\n″,-b/(2*a));elseif(delta>1e-6)2022/11/12程序設計簡例main()2022/11/9程序設計簡例{

x1=(-b+sqrt(delta))/(2*a);x2=(-b-sqrt(delta))/(2*a);printf(″有兩個不等的實根:x1=%8.4f和x2=%8.4f\n″,x1,x2);}else{realpart=-b/(2*a);imagepart=sqrt(-delta)/(2*a);printf(″有兩個虛根:″);printf(″%8.4f+%8.4fi\n″,realpart,imagepart);printf(″%8.4f-%8.4fi\n″,realpart,imagepart);}}}程序運行:請輸入a,b,c:3.00,4.00,5.00↙有兩個虛根:-0.6667+1.1055i-0.6667-1.1055i2022/11/12程序設計簡例{程序運行:2022/11/9程序設計簡例【例9】從鍵盤輸入一個月份(1~12),并顯示該月份的英文名稱。main(){intmonth;printf(″Enteramonth″);scanf(″%d″,&month);switch(month)/*根據(jù)month的當前取值,做出多分支選擇*/{case1:printf(″January\n″);break;case2:printf(″February\n″);break;case3:printf(″March\n″);break;case4:printf(″April\n″);break;case5:printf(″May\n″);break;case6:printf(″June\n″);break;case7:printf(″July\n″);break;case8:printf(″Augus\n″);break;case9:printf(″September\n″);break;case10:printf(″October\n″);break;case11:printf(″November\n″);break;case12:printf(″December\n″);break;default:printf(″DataError!\n″);break}}2022/11/12程序設計簡例【例9】從鍵盤輸入一個月份(1~12),3.2.2單分支與雙分支結構

1.單分支結構程序

格式:if(表達式)語句1;

假(=0)真(≠0)語句1表達式圖3-2單分支結構語句1若多于一條,則需用復合語句。if語句的功能如圖3-2所示。語句中的“表達式”項可以是算術表達式、關系表達式或邏輯表達式,甚至可以是任意類型的數(shù)值。

if語句的執(zhí)行過程是:遇到if關鍵字,首先計算圓括號中的表達式的值,如果表達式的值(或數(shù)值的)值不為0(真)時,就執(zhí)行其后的語句1;表達式值為0(假)時,就跳過其后的語句1,控制轉(zhuǎn)移到下一條語句。2022/11/123.2.2單分支與雙分支結構1.單分支結構程序格式:單分支與雙分支結構2.雙分支結構程序格式:if(表達式)語句1;else語句2;語句1、語句2若多于一條語句,則應使用復合語句。其執(zhí)行過程如圖3-3所示。

假(=0)真(≠0)語句1表達式圖3-3雙分支結構語句2該語句遇到關鍵字if,首先運算小括號中的表達式,如表達式的值為非0,則執(zhí)行緊跟其后的語句1,執(zhí)行完語句1后,執(zhí)行if-else結構后面的語句;如果表達式的值為0,則執(zhí)行關鍵字else后面的語句2,接著執(zhí)行if-else結構后面的語句。2022/11/12單分支與雙分支結構2.雙分支結構程序格式:if(表達式)語句3.2.3多分支結構⑴嵌套形式1格式:if(表達式1)if(表達式2)語句1;else語句2;else語句3;1.if-else語句嵌套結構

執(zhí)行流程如圖3-4所示,在if-else語句中包含另一if-else語句,即第一個else與第二個if結合,而最后一個else與第一個if結合。假(=0)真(≠0)表達式1圖3-4嵌套形式1語句3假(=0)真(≠0)語句1表達式2語句22022/11/123.2.3多分支結構⑴嵌套形式1格式:1.多分支結構⑵嵌套形式2格式:if(表達式1){if(表達式2)語句1;}else語句2;語句1語句2假(=0)真(≠0)表達式1圖3-5嵌套形式2假(=0)真(≠0)表達式2執(zhí)行流程如圖3-5所示,在if-else語句中包含一個單分支結構復合語句。即else與第一個if結合。因為第二個if在復合語句中,復合語句是一條語句,不能與復合語句外的else結合。如果把{}去掉,則else與第二個if結合。2022/11/12多分支結構⑵嵌套形式2格式:語句1語句2假多分支結構⑶嵌套形式3格式:if(表達式1)語句1;elseif(表達式2)語句2;else語句3;執(zhí)行流程如圖3-6所示,在if-else語句的else后緊跟另一個if-else語句。C語言規(guī)定:else總是與它前面最近的同一復合語句內(nèi)的不帶else的if結合。在if語句嵌套形式2中可以看到,else與if在同一復合語句內(nèi)才能結合。圖3-6嵌套形式3語句3語句1假(=0)真(≠0)表達式1假(=0)真(≠0)表達式2語句2嵌套形式語句結構執(zhí)行過程是:從上到下逐一對if后面的表達式進行運算。當某一個表達式的值為真(非0)時,就執(zhí)行緊跟其后的相關子句中的語句,而后面的其余部分均被跳過。當有n個if語句,就有n+1個分支。2022/11/12多分支結構執(zhí)行流程如圖3-6所示,在if-else多分支結構2.switch語句switch語句的格式:switch(表達式){case常量表達式1:語句組1;break;case常量表達式2:語句組2;break;

…case常量表達式n:語句組n;break;

default:語句組n+1;break;

}2022/11/12多分支結構2.switch語句switch語句的格式:2多分支結構表達式常量表達式1語句組1break常量表達式2語句組2breakdefault語句組n+1break常量表達式n語句組nbreak………圖3-7switch語句2022/11/12多分支結構表達式常量表達式1語句組1break常量表達式2語多分支結構注意

(1)switch關鍵字后面的表達式,可以是任意合法的表達式。

(2)一定要用圓括號把switch后面的(表達式)括起來。否則會給出出錯信息。

(3)所有case子句后所列的常量表達式值都不能相同,且每個case關鍵字后面的常量表達式的類型,必須與switch關鍵字后面的表達式類型一致。

(4)break語句的作用是退出switch語句。如果“語句組i”的后面沒有安排break語句,那么執(zhí)行完<語句i>后,會繼續(xù)往下執(zhí)行<語句i+1>。(5)default可以省略。如果有它,其位置不一定放在整個語句的最后。2022/11/12多分支結構注意(1)switch關鍵字后面的表達式,可以多分支結構(6)一定要用花括號將switch里的case、default等括起來。在case后面中雖然包含一個以上執(zhí)行語句,但可以不必用花括弧括起來,會自動順序執(zhí)行本case后面所有的執(zhí)行語句。當然加上花括弧也可以。(7)執(zhí)行switch語句時,首先計算其后的表達式的值,然后自上而下順序?qū)ふ乙粋€case后面的常量與該值相匹配,找到后按順序執(zhí)行此case后面的所有語句,包括后續(xù)的case子句,而不再進行判斷。如果所有case中的常量值都不能與switch后面的表達式的值相等,就執(zhí)行default關鍵字后面的語句;若既沒有相匹配的case,也沒有default關鍵字,則直接跳過switch語句。

2022/11/12多分支結構(6)一定要用花括號將switch里的cas多分支結構3.if語句與switch語句的區(qū)別if語句的嵌套形式和switch語句都能實現(xiàn)多分支選擇,在某種場合也可以互換替代,但if語句適應于各種條件的選擇,能夠計算關系或邏輯表達式;switch語句只適用于檢驗表達式與哪個值相等的情形。

2022/11/12多分支結構3.if語句與switch語句的區(qū)別3.3循環(huán)結構for循環(huán)語句while循環(huán)語句do-while循環(huán)語句

continue/break語句goto語句和語句標號

2022/11/123.3循環(huán)結構for循環(huán)語句2022/11/93.3.1程序設計簡例i=1,s=0i100s=s+1i++假真圖3-8【例10】計算1+2+3+…+99+100。#include″stdio.h″main(){ints,i;s=0;/*累加和的變量初值為0*/ i=1;/*累加數(shù)從1開始*/loop:if(i<=100)/*累加數(shù)不大于100*/{s=s+i;/*進行累加*/i++;/*產(chǎn)生下一個累加數(shù)*/gotoloop;/*使程序流程轉(zhuǎn)到if語句,以便繼續(xù)累加下一個數(shù)*/}printf(s=1+2+…+100=%d\n″,s);/*輸出累加*/}程序運行結果:s=1+2+…+100=50502022/11/123.3.1程序設計簡例i=1,s=0i100s=s+程序設計簡例【例11】輸入任意一個大于等于2的自然數(shù)n,判斷該數(shù)是否是素數(shù)并輸出相應的結果。真真真假假假開始輸入ntag=1,i=2i<ni=i+1tag=0,breaktag=1<n輸出是素數(shù)輸出不是素數(shù)圖3-9結束n%i=0#include″stdio.h″main(){inti,n,tag;printf(″請輸入一個大于2的自然數(shù)n:″);scanf(″%d″,&n);tag=1;/*若標志變量tag等于0,n不是素數(shù),若tag不等于0,則n是素數(shù)。*/for(i=2;i<n;i++)/*i循環(huán)中分別檢測n能否被i整除,i=2,3,…,n-1*/if(n%i==0){tag=0;break;}/*n能被i整除,n不是素數(shù),令tag=0*/if(tag==1)printf(″%d是素數(shù)\n″,n);elseprintf(″%不是素數(shù)\n″,n);}2022/11/12程序設計簡例【例11】輸入任意一個大于等于2的自然數(shù)n,判程序設計簡例【例12】用遞推法求菲波拉契(Fibonacci)數(shù)列的前20項。main(){longf,f1,f2;inti;f1=f2=1;printf(″%10ld%10ld″,f1,f2);i=3;while(i<=20)/*產(chǎn)生第3到20項*/{f=f1+f2;/*遞推出第i項*/printf(″%10ld″,f);if(i%4==0)printf(″\n″);/*每行輸出4個數(shù)換行*/f1=f2;f2=f;/*為下一步遞推做準備*/i=i+1;}}運行程序,輸出結果是:112358132134558914423337761098715972584418167652022/11/12程序設計簡例【例12】用遞推法求菲波拉契(Fibonacc程序設計簡例【例13】將100元人民幣換成面值1元、2元、5元的鈔票,給出所有可能的兌換方案。#include<stdio.h>main(){inti,j,k,n=0;printf("給出所有可能的兌換方案:\n");for(i=0;i<=100;++i)/*第一層(最外層)循環(huán)*/for(j=0;j<=50;++j)/*第二層(中間層)循環(huán)*/for(k=0;k<=20;++k)/*第三層(最內(nèi)層)循環(huán)*/if(i*1+j*2+k*5==100)printf("方案%8d:%8d(1)%8d(2)%8d(5)\n",++n,i,j,k);}2022/11/12程序設計簡例【例13】將100元人民幣換成面值1元、程序設計簡例【例14】求自然對數(shù)底的近似值,公式為:e=1+1/1!+1/2!+…+1/n!+…。#include<stdio.h>main(){inti=1;doublee=1.0,u=1.0;while(u>1e-6)/*while循環(huán)語句*/{u=u/i;e=e+u;i++;}printf("\ne=%12.10f",e);i=1;e=1.0,u=1.0;do/*dowhile循環(huán)語句*/{u=u/i;e=e+u;i++;}while(u>1e-6);printf("\ne=%12.10f",e);for(i=1,e=1.0,u=1.0;u>1e-6;++i)/*for循環(huán)語句*/{u=u/i;e=e+u;}printf("\ne=%12.10f",e);}2022/11/12程序設計簡例【例14】求自然對數(shù)底的近似值,公式為:e=1程序設計簡例【例15】找出兩個自然數(shù)平方之和的所有三位數(shù)。#include"stdio.h"#include"math.h"main(){intk,j,m,n,flag;for(n=100;n<1000;n++)/*第一層(最外層)循環(huán)*/{k=sqrt(1.0*n);/*第一層(最外層)循環(huán)復合句開始*/flag=0;j=1;while((j<=k)&&(flag==0))/*第二層(中間層)循環(huán)*/{m=1;/*第二層(中間層)循環(huán)復合句開始*/while((m<=k)&&(m*m!=n-j*j))m=m+1;/*第三層(最內(nèi)層)循環(huán)*/if(m*m+j*j==n){flag=1;

printf("%d=%d*%d+%d*%d\n",n,j,j,m,m);}j=j+1;

}/*第二層(中間層)循環(huán)復合句結束*/}/*第一層(最外層)循環(huán)復合句結束*/}2022/11/12程序設計簡例【例15】找出兩個自然數(shù)平方之和的所有三位數(shù)。3.3.2當型循環(huán)與直到型循環(huán)

一.“當型”循環(huán)在執(zhí)行循環(huán)語句時,首先判斷循環(huán)控制表達式是否為“真”,若為“真”,則反復執(zhí)行循環(huán)體。若為“假”,則結束循環(huán)。如圖3-10所示。圖3-10假真循環(huán)體表達式1.while語句格式:while(表達式)〈語句〉(循環(huán)體部分)功能:當表達式的值為真時,執(zhí)行while語句中的循環(huán)體。(1)循環(huán)體如果包含一個以上的語句,則必須用花括弧括起來,以復合語句的形式出現(xiàn),否則while語句范圍只到while后面第一個分號處。2022/11/123.3.2當型循環(huán)與直到型循環(huán)一.“當型”循環(huán)在執(zhí)行循當型循環(huán)與直到型循環(huán)(2)在循環(huán)體中應有使循環(huán)趨向于結束的語句,即設置修改循環(huán)條件的語句。(3)while語句先判斷表達式的值,然后執(zhí)行循環(huán)體中的語句,如果表達式的值一開始為假(值為0),則不執(zhí)行循環(huán)體,直接執(zhí)行循環(huán)體以外的語句。表達式是控制循環(huán)的條件,它可以是任何類型的表達式。2.for語句格式:for(表達式1;表達式2;表達式3)〈語句〉功能:首先計算表達式1的值;其后檢測表達式2的值,若其值為“真”,則執(zhí)行循環(huán)體語句,執(zhí)行完畢后,再計算表達式3,至此完成了一次循環(huán);然后,再次測試表達式2的值是否為“真”,若為“真”,繼續(xù)執(zhí)行循環(huán)體語句,……直到計算表達式2的值為0,即為“假”,則終止循環(huán),執(zhí)行for語句下面的一個語句。如圖3-11所示圖3-11假循環(huán)體真表達式2表達式1表達式32022/11/12當型循環(huán)與直到型循環(huán)(2)在循環(huán)體中應有使循環(huán)趨向于結束的語當型循環(huán)與直到型循環(huán)(1)for語句中條件測試總是在循環(huán)開始時進行;如果循環(huán)體部分是多個語句組成的,則必須用左、右花括號括起來,使其成為一個復合語句。(2)for語句中,表達式1通常是為循環(huán)變量賦初值的表達式;表達式2是控制循環(huán)的表達式;表達式3通常是改變循環(huán)變量值的表達式。表達式1和表達式3既可以是一個簡單的表達式,也可以是逗號表達式。(3)for語句的表示形式相當靈活,可以部分或全部省略,但“;”不能省略,如for(;;)。2022/11/12當型循環(huán)與直到型循環(huán)(1)for語句中條件測試總是在循環(huán)開始當型循環(huán)與直到型循環(huán)二.“直到型”循環(huán)格式:do〈語句〉(循環(huán)體部分)while(表達式);(分號必不可少)功能:先執(zhí)行〈語句〉,后判斷表達式的值。它的執(zhí)行過程是:先執(zhí)行一次指定的語句,然后判斷表達式的值,當表達式的值為非零(“真”)時,返回重新執(zhí)行該語句,如此反復,直到表達式的值等于0為止,此時循環(huán)結束。如圖3-12所示。

圖3-12真假循環(huán)體表達式2022/11/12當型循環(huán)與直到型循環(huán)二.“直到型”循環(huán)格式:do功能:先執(zhí)當型循環(huán)與直到型循環(huán)(1)dowhile語句的表達式是任意表達式,是控制循環(huán)的條件。(2)先執(zhí)行后判斷。因此,循環(huán)體至少執(zhí)行一次,直到表達式為“假”才退出循環(huán)。因此,在循環(huán)體語句中一定要有改變表達式的值的操作,最終使其表達式的值變?yōu)?,結束循環(huán)。否則將成為“死”循環(huán)。(3)如果dowhile語句的循環(huán)體部分是多個語句組成的話,則必須用左右花括號括起來,使其形成復合語句。(4)在關鍵字while的小括號的后面,一定要加分號“;”,千萬不能忘記,它表示dowhile語句到此結束。2022/11/12當型循環(huán)與直到型循環(huán)(1)dowhile語句的表達式是任意當型循環(huán)與直到型循環(huán)三.goto語句格式:goto〈語句標號〉;功能:程序執(zhí)行到goto語句時,轉(zhuǎn)到語句標號指定的語句去執(zhí)行。

(1)使用goto語句時,需要預先指定一個有標號的可執(zhí)行語句作為目的位置,這個有標號的語句必須與goto語句在同一個函數(shù)內(nèi)。〈語句標號〉必須用標識符表示,不能用整數(shù)作為標號。(2)與if語句一起構成循環(huán)結構。從結構化程序設計角度考慮,大多數(shù)現(xiàn)代的編程方法都認為goto語句是有害的結構,因此不提倡使用if和goto語句構造循環(huán)。(3)goto語句為無條件轉(zhuǎn)向語句,會跳過程序中的一段代碼并轉(zhuǎn)到一個指定的目的位置。2022/11/12當型循環(huán)與直到型循環(huán)三.goto語句格式:goto〈語句3.3.3各種循環(huán)語句的比較(1)4種循環(huán)語句均可以用來處理同一問題,一般情況下它們可以互相代替。但一般不提倡用goto語句和if語句構成的循環(huán)。(2)while和dowhile循環(huán),只在while后面指定循環(huán)條件,在循環(huán)體中包含反復執(zhí)行的操作語句,包括使循環(huán)趨于結束的語句(如i++,或i=i+1等)。

for循環(huán)可以在表達式3中包含使循環(huán)趨于結束的語句,甚至可以將循環(huán)體中的操作全部放到表達式3中。因此for語句的功能更強,凡用while循環(huán)能完成的,用for循環(huán)都能實現(xiàn)。(3)while語句和dowhile語句只有一個表達式,用于控制循環(huán)是否進行。for語句有三個表達式,不僅可以控制循環(huán)是否進行,而且能為循環(huán)變量賦初值及不斷修改循環(huán)變量的值。for語句比while和dowhile語句功能更強,更靈活。for語句中三個表達式可以是任何合法的C語言表達式,而且可以部分省略或全部省略,但其中的兩個分號不能省略。

2022/11/123.3.3各種循環(huán)語句的比較(1)4種循環(huán)語句均可以用來各種循環(huán)語句的比較(4)用while和dowhile循環(huán)時,循環(huán)變量初始化的操作應在while和dowhile語句之前完成。for語句可以在表達式1中實現(xiàn)循環(huán)變量的初始化。(5)for循環(huán)和while循環(huán)語句結構均是先判斷循環(huán)條件,條件成立,才執(zhí)行循環(huán)體,具有“先判斷,后執(zhí)行”特點,for語句和while語句可能一次也不執(zhí)行循環(huán)體;而dowhile循環(huán)語句則是先執(zhí)行循環(huán)體,然后再判斷循環(huán)條件,具有“先執(zhí)行,后判斷”的特點。dowhile語句至少執(zhí)行一次循環(huán)體。for和while循環(huán)屬于“當型”循環(huán);而dowhile循環(huán)屬于“直到型”循環(huán)。(6)while語句和dowhile語句多用于循環(huán)次數(shù)不定的情況。而dowhile語句更適合于第一次循環(huán)肯定執(zhí)行的場合。在初值、增量控制條件明顯,或循環(huán)次數(shù)已經(jīng)給定的情況下,最好選用for語句。(7)對while循環(huán)、dowhile循環(huán)和for循環(huán),可以用break語句跳出循環(huán),用continue語句結束本次循環(huán),而對goto語句和if語句構成的循環(huán),不能用break語句和continue語句進行控制。2022/11/12各種循環(huán)語句的比較(4)用while和dowhile循環(huán)3.3.4break語句與continue語句1.break語句格式:break;功能:在循環(huán)體或switch結構中,當執(zhí)行到break時,它中止當前語句的執(zhí)行,把流程轉(zhuǎn)移到當前語句或switch結構的后續(xù)語句繼續(xù)執(zhí)行。(1)在幾種循環(huán)結構中,主要是在循環(huán)次數(shù)不能預先確定的情況下使用break語句,在循環(huán)體中增加一個分支結構。當某個條件成立時,由break語句退出循環(huán)體,從而結束循環(huán)過程。(2)在循環(huán)結構中使用break語句,可強制結束循環(huán)。不管循環(huán)條件是否成立,都將跳出它所在的本重循環(huán),結束本重循環(huán)的執(zhí)行。它不能跳出多重循環(huán),只能跳出本重循環(huán)。(3)break語句不能用于循環(huán)語句和開關語句之外的其他語句中,這是一種具有特殊功能的無條件轉(zhuǎn)移語句,它為循環(huán)語句提供一個早期非正常出口。2022/11/123.3.4break語句與continue語句1.brebreak語句與continue語句2.continue語句格式:continue;功能:結束本次循環(huán),也就是說,不管在該語句的后面是否還有其他執(zhí)行語句,遇到continue;語句,就跳過continue語句下面尚未執(zhí)行的語句,繼續(xù)進行下一次循環(huán)。(1)continue也是一種用于循環(huán)語句的具有特殊功能的無條件轉(zhuǎn)移語句,continue語句只能出現(xiàn)在循環(huán)語句的循環(huán)體中。(2)若執(zhí)行while或dowhile語句中的continue語句,則跳過循環(huán)體中continue語句后面的語句,直接轉(zhuǎn)去判別下次循環(huán)控制條件;若continue語句出現(xiàn)在for語句中,則執(zhí)行continue語句就是跳過循環(huán)體中continue語句后面的語句,轉(zhuǎn)而執(zhí)行for語句的表達式3。

2022/11/12break語句與continue語句2.continue語句break語句與continue語句(3)continue語句只結束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行。而break語句則是結束循環(huán),不再進行條件判斷。如圖3-13和圖3-14所示。break真真假假表達式1語句表達式2語句圖3-13break語句退出循環(huán)圖3-14continue語句結束本次循環(huán)continue真真假假表達式1語句表達式2語句2022/11/12break語句與continue語句(3)continue語3.3.5多重循環(huán)的實現(xiàn)三種循環(huán)(while循環(huán)、dowhile循環(huán)和for循環(huán))可以互相嵌套構成多重循環(huán)。下面幾種互相嵌套都是合法的形式。(1)while()(2)do(3)for(;;){…{…{…while()dofor(;;){…}{…}{…}}while();}}while();(4)while()(5)for(;;)(6)do{…{…{…dowhile()for(;;){…}{…}{…}while();}……}}while();2022/11/123.3.5多重循環(huán)的實現(xiàn)三種循環(huán)(while循環(huán)、d第三章三種基本結構程序設計3.1順序結構程序設計

3.2

選擇結構程序設計

3.3

循環(huán)結構

2022/11/12第三章三種基本結構程序設計3.1順序結構程序設計33.1順序結構程序設計順序結構程序:就是執(zhí)行時依語句排列順序一條接著一條地執(zhí)行,不發(fā)生控制流的轉(zhuǎn)移。

特點:每個程序都是按照語句的書寫順序依次執(zhí)行的,它是最簡單的結構。不可或缺的若干語句,用{}把它們括起來,這樣的語句體稱為復合語句。復合語句在邏輯上等價于一條語句,復合語句內(nèi)部還可嵌套復合語句。

ABab2022/11/123.1順序結構程序設計順序結構程序:就是執(zhí)行時依語句排列

3.1.1程序設計簡例main(){charch=′a′;/*定義變量并賦值*/inta=98;unsignedb=1000;longc=123456789;floatx=3.14;doubley=1.2345678;printf(″(1)a=%d,a=%c,ch=%d,ch=%c\n″,a,a,ch,ch);/*輸出*/printf(″(2)b=%u\n″,b);printf(″(3)c=%ld\n″,c);printf(″(4)x=%f,y=%f\n″,x,y);printf(″(5)x=%e,y=%e\n″,x,y);printf(″(6)y=%-10.2f\n″,y);}【例1】分析下列程序,觀察運行結果

運行結果

(1)a=98,a=b,ch=97,ch=a(2)b=1000(3)c=123456789(4)x=3.140000,y=1.234567(5)x=3.14000e+00,y=1.23456e+00(6)y=1.232022/11/123.1.1程序設計簡例main()【例1】分析下列程序設計簡例【例2】輸入一個三位的整數(shù),分解它的符號、百位數(shù)字、十位數(shù)字和個位數(shù)字,然后依次輸出。#include<stdio.h>#include<math.h>/*程序中使用了數(shù)學函數(shù)abs*/main(){charc1,c2,c3,c4;/*定義變量*/intx;printf(″pleaseinputanumer:\n″);/*輸入提示信息*/scanf("%d",&x);/*鍵盤輸入x的值*/c4=x>=0?’+’:’-’;/*將x的符號賦給c4*/x=abs(x);/*取x的絕對值*/c3=x%10+48;/*求得x的個位數(shù)字,加48轉(zhuǎn)換為對應數(shù)字字符的ASCII碼值*/x=x/10;/*去掉個位數(shù),取出x的高位*/c2=x%10+48;/*求得x的十位數(shù)字,加48轉(zhuǎn)換為對應的ASCII碼值*/c3=x/10+48;/*求得x的百位數(shù)字,加48轉(zhuǎn)換為對應的ASCII碼值*/printf("%c\n%c\n%c\n%c\n",c4,c3,c2,c1);/*輸出符號位,百位,十位,個位*/}程序的執(zhí)行結果:pleaseinputanumer:-321↙-,3,2,12022/11/12程序設計簡例【例2】輸入一個三位的整數(shù),分解它的符號、程序設計簡例【例3】在屏幕輸出“pleaseinputyourname:”,再從鍵盤上輸入一個名字,然后顯示“Hello!”,在下一行顯示輸入的名字。#include<stdio.h>main(){charname[10];/*存放名子的變量在后面章節(jié)再詳細介紹*/printf(″pleaseinputyourname:\n″);/*輸出提示信息*/scanf(″%s″,name);/*讀入名字*/printf(″Hello!\n″);/*輸出Hello!*/printf(″%s″,name);/*輸出讀入的名字*/}程序的執(zhí)行結果:pleaseinputyourname:Ligang↙Hello!Ligang2022/11/12程序設計簡例【例3】在屏幕輸出“pleaseinp程序設計簡例【例4】讀入一個小寫字母,將其轉(zhuǎn)換成大寫字母后輸出,同時輸出其對應的ASCII編碼。#include<stdio.h>main(){charch1,ch2;printf("Enteralowerletter:");ch1=getchar();/*利用字符輸入函數(shù),實現(xiàn)鍵盤輸入一個字符,賦給字符變量ch1*/printf("letter:%c,ASCII:%d\n",ch1,ch1);/*屏幕顯示鍵盤輸入的字符,并顯示該字符的ASCII代碼值*/ch2=ch1-32;/*將小寫字母轉(zhuǎn)換成對應的大寫字母*/printf("letter:%c,ASCII:%d\n",ch2,ch2);/*屏幕顯示轉(zhuǎn)換后的字符,及該字符的ASCII代碼值*/}程序運行情況:Enteralowerletter:a↙letter:a,ASCII:97letter:A,ASCII:652022/11/12程序設計簡例【例4】讀入一個小寫字母,將其轉(zhuǎn)換成大程序設計簡例【例5】在100.0g苯中加入13.76g聯(lián)苯(MB),所形成溶液的沸點為82.40℃(t2),計算聯(lián)苯的相對分子量。已知純苯的沸點為80.10℃(t1),Kb=2.57。#include<stdio.h>main(){floatmA,mB,MB,Kb,t1,t2;/*定義變量*/printf(″pleaseinput:mA,mB,Kb

,t1,t2\n″);/*輸出“輸入數(shù)據(jù)”提示信息*/scanf(″%f,%f,%f,%f,%f″,&mA,&mB,&Kb

,&t1,&t2);/*讀入數(shù)據(jù)*/MB=(Kb*mB)/((t1-t2)*mA);/*計算聯(lián)苯的分子量*/printf("MB=%6.2f",MB);/*輸出聯(lián)苯的分子量*/printf("g/mol\n");/*打出分子量的單位*/}程序運行情況:pleaseinput:mA,mB,Kb

,t1,t2100.0,13.76,2.57,80.10,82.40↙MB=153.75g/mol2022/11/12程序設計簡例【例5】在100.0g苯中加入13.76g3.1.2格式輸入輸出的一般形式格式、格式輸出函數(shù)printf()printf()函數(shù)調(diào)用的形式:

printf(“格式控制字符串”,輸出項表)或printf(字符串)在該函數(shù)調(diào)用時,在其后面加上分號,就構成了格式輸出語句。printf中的輸出項是和前面的格式控制字符串按順序一一對應的。“項”可以是常量、變量、

溫馨提示

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

評論

0/150

提交評論