C語言程序課件ppt-第3章算法、輸入輸出函數(shù)、順序結(jié)構(gòu)_第1頁
C語言程序課件ppt-第3章算法、輸入輸出函數(shù)、順序結(jié)構(gòu)_第2頁
C語言程序課件ppt-第3章算法、輸入輸出函數(shù)、順序結(jié)構(gòu)_第3頁
C語言程序課件ppt-第3章算法、輸入輸出函數(shù)、順序結(jié)構(gòu)_第4頁
C語言程序課件ppt-第3章算法、輸入輸出函數(shù)、順序結(jié)構(gòu)_第5頁
已閱讀5頁,還剩58頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第3章 算法、輸入輸出函數(shù)、順序結(jié)構(gòu) 算法及其算法的表示方法 C語句概述 基本的數(shù)據(jù)輸入/輸出函數(shù) 簡單的C程序設(shè)計 著名計算機(jī)科學(xué)家沃思(Niklaus Wirth)提出 程序 = 數(shù)據(jù)結(jié)構(gòu) + 算法描述數(shù)據(jù)的類型、組織形式描述對數(shù)據(jù)的操作步驟3.1算法的概念及常用的描述方法3.1.1算法的概念做事情都有方法、步驟(順序)決定事情成敗1、算法:計算機(jī)求解某一問題而采用的具體方法、步驟2、兩大類計算機(jī)算法:數(shù)值運(yùn)算算法(求數(shù)值解-成熟) 非數(shù)值運(yùn)算算法(事務(wù)管理-廣泛)3、算法的特性:有窮性、確定性、有效性等4、算法的描述:描述算法的方法有多,歸納為兩大類: (1)文字(2)圖形(符號)3.1

2、.2 算法的常用描述方法1、帶序號的自然語言描述-易懂卻不直觀,不嚴(yán)格。2、流程圖:靈活、自由、形象、直觀,可表示任何算法。 輸入/輸出 處理 判斷 起止 連接點(diǎn) 流程線N-S流程圖4、偽代碼:用介于自然語言與計算機(jī)語言之間的文字及符號來描述算法(方便、易懂、便于向計算機(jī)語言過渡)3、N-S圖(盒圖)特點(diǎn):完全去掉了帶箭頭的流程線,算法的所有步驟都寫在大矩形框(表示簡單、符合結(jié)構(gòu)化思想)。ABP真假ABA當(dāng)P成立A直到P成立(a)順序結(jié)構(gòu)(b)選擇結(jié)構(gòu) (c)當(dāng)型循環(huán)(d)直到型循環(huán)自然語言描述:1、0 s單元2、1 n單元3、s+n s4、n+1 n5、判斷n100?是,轉(zhuǎn)3;否,則轉(zhuǎn)66、

3、輸出s的值流程圖描述:開始0 S1 nS+n Sn+1 nn100輸出sN-S圖描述:0 s1 n n100? s+n s n+1 n 輸出s的值偽代碼描述:0 s1 nif n100 s+n s n+1 nprint s 3.1.3結(jié)構(gòu)化程序設(shè)計方法一、結(jié)構(gòu)化程序的三種基本結(jié)構(gòu)1966年提出三種基本結(jié)構(gòu),用這三種基本結(jié)構(gòu)作為表示一種良好算法的基本單元:順序、選擇、循環(huán)。ABP真假ABA當(dāng)P成立A直到P成立(a)順序結(jié)構(gòu)(b)選擇結(jié)構(gòu) (c)當(dāng)型循環(huán)(d)直到型循環(huán)二、三種基本結(jié)構(gòu)的共同特點(diǎn)(1)單入口單出口(2)結(jié)構(gòu)內(nèi)的每一部分都有機(jī)會被執(zhí)行(3)不存在“死循環(huán)”三、結(jié)構(gòu)化程序設(shè)計的優(yōu)點(diǎn)用三

4、種基本結(jié)構(gòu)組成的程序是結(jié)構(gòu)化程序優(yōu)點(diǎn):易編、易讀、易懂、易維護(hù)強(qiáng)調(diào)程序設(shè)計風(fēng)格和程序結(jié)構(gòu)的規(guī)范化核心思想:自頂向下,逐步細(xì)化,模塊化設(shè)計,結(jié)構(gòu)化編碼 四、結(jié)構(gòu)化程序設(shè)計過程1、確定算法:分析問題(建立數(shù)學(xué)模型)寫出算法描述2、編寫程序:用計算機(jī)語言寫出實現(xiàn)算法的程序3、上機(jī)調(diào)試:舉例:張丘建算經(jīng)中提出“百雞問題”:雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁、母、雛各幾何?(1)分析:cocks+hens+chicks=100 5*cocks+3*hens+chicks/3=100其中:0cocks 19,0 hens 33,0 chicks 100思路:依次取cocks的值域

5、中的值,然后求其余兩數(shù),看是否合乎題意。算法描述:cocks=0當(dāng)cocks 19時 找滿足題意的hens,chicks數(shù); cocks 加1細(xì)化cocks=0當(dāng)cocks 19時 hens=0 當(dāng)hens 33時 找滿足題意的chicks數(shù); hens 加1 cocks加1細(xì)化cocks=0當(dāng)cocks 19時 hens=0 當(dāng)hens 33時 chicks=100-cocks-hens 如果5*cocks+3*hens+chicks/3=100, 則輸出 hens 加1 cocks加1(2)用計算機(jī)語言寫出程序#include stdio.hvoid main( ) int cocks=0

6、,hens,chicks; while (cocks=19) hens=0; while (hens=33) chicks=100-cocks-hens; if( (5.0*cocks+3.0*hens+chicks/3.0)=100.0)printf(%d %d %dn,cocks,hens,chicks); hens+; cocks+; (3)調(diào)試程序變量定義與初始化賦值語句選擇結(jié)構(gòu)復(fù)合語句循環(huán)語句025754187881181124843.2 C語言的基本語句一、語句用來對數(shù)據(jù)進(jìn)行加工(完成操作任務(wù)),是構(gòu)成程序的基本單位,通常一個C程序由若干個函數(shù)(系統(tǒng)/用戶)組成,每一函數(shù)由若干條語

7、句組成。每條語句總是以”;”結(jié)束。二、C語句的分類可分為三大類:簡單語句、復(fù)合語句、空語句(一)簡單語句(1)表達(dá)式語句:由一個表達(dá)式后跟“;”組成賦值語句:賦值表達(dá)式加一個;號 如: s=3.14159*r*r; i+; 函數(shù)調(diào)用語句:函數(shù)調(diào)用表達(dá)式加一個;號 如:printf( “Hello ,worldn”);函數(shù)調(diào)用語句表達(dá)式語句 (2)結(jié)構(gòu)控制語句:控制程序的流程(二)復(fù)合語句:將一組語句括在一對中,如復(fù)合語句、復(fù)合語句的之后不能有;復(fù)合語句中可以是簡單語句、復(fù)合語句、空語句(三)空語句:;/*僅有一個;*/空語句什么也不做。有時用做被轉(zhuǎn)向點(diǎn),或為循環(huán)語句提供空體??照Z句控制語句 3

8、.3 數(shù)據(jù)輸入與輸出輸入和輸出是以計算機(jī)主機(jī)為主體而言。 輸出外部設(shè)備:顯示屏,打印機(jī),磁盤。輸入設(shè)備: 鍵盤,掃描儀等。 默認(rèn)輸入設(shè)備是鍵盤,輸出設(shè)備是顯示器C 語言不提供輸入輸出語句,輸入輸出操作是由函數(shù)來完成的。如前面提到的printf和scanf。它們是函數(shù)名不是C 語言的關(guān)鍵字。 要用預(yù)編譯命令將庫函數(shù)文件包括到用戶源文件中。如: #include “stdio.h”或 #include 3.3.1 格式輸出函數(shù) printf()作用:向終端(或系統(tǒng)隱含指定的輸出設(shè)備)輸出若干個任意類型的數(shù)據(jù)。1. 一般格式:printf(“格式控制符” ,輸出列表)例如: printf(“%d%d

9、”,a,b); 格式控制 輸出列表printf(“%d b=%dn”,a,b) 格式說明 普通字符 轉(zhuǎn)義字符 輸出列表 結(jié)果 3 b=4完整的格式:%標(biāo)志輸出最小寬度.精度長度類型% - 0 m.n l/h 格式字符 指定輸出的數(shù)據(jù)類型 輸出長度的修正 指定輸出域?qū)捄途?指定空位填0 指定左對齊輸出 格式說明的引導(dǎo)符2、長度修正符L:對整型數(shù)指定長整型long 例:%ld, %lx, %lo, %lu :對實型指雙精度double.如:%lfh: 只用于整型的格式字符修正為short 例:%hd, %hx, %ho, %hu3、域?qū)捄途鹊拿枋鰉 :域?qū)?,即對?yīng)的輸出項在輸出設(shè)備上所占的字符

10、數(shù)。若實際數(shù)寬度m,按實際數(shù)據(jù)寬度輸出若實際數(shù)寬度m,左邊補(bǔ)空n :精度,說明輸出的實型數(shù)的小數(shù)位數(shù)例3.3#include void main( )int i=5;float f=32.345;printf(i=%3df=%5.1fn,i,f);printf(End.n);格式控制字符串: i=%3df=%5.1fn% 5 .1 f引導(dǎo)符 寬度 小數(shù)位數(shù)(精度) 類型符結(jié)果:i= 5f= 32.3 End. 4. 格式字符(1) d或i格式符。用來輸出十進(jìn)制帶符號整數(shù)。(2) o格式符。用來輸出無符號8進(jìn)制整數(shù)。(3) x格式符。用來輸出無符號16進(jìn)制整數(shù)。(4) u格式符。用來輸出十進(jìn)制無

11、符號整數(shù)例3.4:#include void main( )unsigned short int a=65535u;short int b=-2;printf(a=%hd,%#ho,%hx,%hun,a,a,a,a);printf(b=%hd,%ho,%#hx,%hun,b,b,b,b);運(yùn)行結(jié)果為:a= -1,0177777,ffff,65535 b= -2,177776,0 xfffe,65534(5) c格式符。用來輸出一個字符。(6) s格式符。用來輸出一個字符串。(7) f格式符用來輸出實數(shù),以小數(shù)形式輸出。(8) e格式符。以指數(shù)形式輸出實數(shù)。(9) g格式符。用來輸出實數(shù),自動選

12、用%f或%e格式中格式較短的一種格式,不輸出無意義的零。(10). %輸出%例3.5#include void main( ) float a,b;char c=a;int i=97;a=31.1111;b=28.333;printf(%f,%7.4fn,a+b,a-b);printf(%c,%dn,c,c);printf(%c,%dn,i,i);printf(“%s,%n”,“china”);結(jié)果:59.444099, 2.7781 a,97 a,97 china,%5、printf()函數(shù)使用注意事項 編譯程序只是檢查printf函數(shù)的調(diào)用形式,不分析格式控制字符串,如果格式字符與輸出項的

13、類型不匹配,不進(jìn)行類型轉(zhuǎn)換;格式控制字符串中可以包括轉(zhuǎn)義字符;格式字符要用小寫字母;格式控制字符串中的普通字符原樣輸出;輸出項的參數(shù)除了常量、變量外,還可以是表達(dá)式,函數(shù)調(diào)用,如:printf(“max=%dti=%dn”,imax(a,b),i+);例3.6#include void main( ) int i=321;float f=123.456;printf(%5d:,i);printf(%5.2fn,i);printf(%5d:,f);printf(%5.2fn,f);結(jié)果: 321:0.00 5368709102:123.463.3.2 格式輸入函數(shù)scanf()格式:scanf

14、(“格式控制符”,變量地址列表)作用:按格式控制符的要求將數(shù)據(jù)從終端傳送到變量地址所指定的內(nèi)存空間。1、變量地址變量的地址通過對變量名“求地址”運(yùn)算得到形式:&變量名例:3.7#include void main( ) int a;float b;scanf(%d %f,&a,&b);printf(%d %fn,a,b);2、格式控制符(1)、格式說明項(與printf基本相同)(2)、輸入數(shù)據(jù)的分隔采用隱含的分隔符:空格、回車鍵、Tab鍵;根據(jù)格式中指定的域?qū)挿指魯?shù)據(jù)項(不提倡);采用用戶指定的分隔符(不提倡);例:3.8 #include void main( )int a;float b

15、,c;scanf(%2d%3f%2f,&a,&b,&c);printf(a=%d,b=%f,c=%fn,a,b,c); scanf(“%d,%f,%f”,&a,&b,&c);scanf(“a=%d,b=%f,c=%f”,&a,&b,&c);3.應(yīng)用scanf函數(shù)應(yīng)注意:(1).格式控制后面是變量地址,而不是變量名如:scanf(“%d,%d”,a,b); 是不對的(2).格式控制字符串中除了格式說明符以外的其它字符,在輸入時要原樣輸入,如:scanf(“%d : %d : %d”, &a , &b ,&c);scanf(“a=%d , b=%d , c=%d”, &a , &b ,&c);(3

16、).在用“%c”格式輸入字符時,空格字符和“轉(zhuǎn)義字符”都作為有效字符,如:scanf(“%c %c %c”, &a , &b ,&c);輸入:a b c(4).輸入數(shù)據(jù)時,遇空格、回車、跳格、寬度結(jié)束、非法輸入,該數(shù)據(jù)認(rèn)為結(jié)束(5).scanf中不使用u說明符,對unsigned型數(shù)據(jù)用d,o,x 說明(6).輸入數(shù)據(jù)時,不能規(guī)定數(shù)據(jù)的精度。3.3.3字符輸出函數(shù)1. 使用格式形式:putchar(ch)作用:向終端輸出一個字符,如putchar(ch);輸出字符變量ch的值,其中ch可以是字符型和整型常量、變量、表達(dá)式.例3.9:#include stdio.h void main ( )

17、char c1,c2; c1=b;c2 =98; putchar(c1); putchar(c2); putchar(b);putchar(98); 運(yùn)行結(jié)果:bbbb (注意:不換行)也可以輸出其它轉(zhuǎn)義字符例3.10:#include stdio.hvoid main ( ) putchar(101); putchar(n); putchar();結(jié)果:A 2、putchar()函數(shù)的使用說明(1)該函數(shù)只能用于單字符的輸出,且一次只能輸出一個字符。(2)從功能角度來看,printf()函數(shù)可以完全代替putchar()函數(shù)。(3)在程序中使用putchar()函數(shù),要記得在程序的開頭加上編

18、譯預(yù)處理頭文件。3.3.4 字符輸入函數(shù)getchar()作用:從鍵盤緩沖區(qū)讀入一個字符,格式: getchar() 函數(shù)的返回值為字符的值。例3.11#include void main()char c;c=getchar();putchar(c); putchar (getchar();printf(“%c”, getchar();不要忘記#include 可以用getchar() 暫停程序執(zhí)行;讀入控制字符例如注意:當(dāng)輸入多個字符時,多余字符作廢(按回車后才開始接收字符)用getchar()得到的字符可以賦給字符型變量/整型變量或作為表達(dá)式的一部分如:c=getchar()+32;例3.

19、12 #include stdio.hvoid main()putchar(getchar()-32);輸入:a輸出:A3.4順序結(jié)構(gòu)程序設(shè)計例3.13:輸入一個小寫字母,打印其大寫字母及其前導(dǎo)字母和后續(xù)字母分析:小寫字母的ASCII碼比對應(yīng)的大寫字母大32,前導(dǎo)字母的ASCII碼小1,后續(xù)字母的ASCII碼大1。#include stdio.hvoid main()char c;printf(請輸入任意一小寫字母:);c=getchar( );printf(%c,%c,%cn,c,c-1,c+1);printf(%c,%c,%cn,c-32,c-33,c-31);例3.14:輸入三角形的三邊

20、長,求三角形的面積#include stdio.h”#include “math.h”void main()int a,b,c;float s,area;printf(“請輸入三條邊長:”);scanf(“%d,%d,%d”,&a,&b,&c);s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c);printf(“面積:area=%.2fn”,area);例3.15 編寫程序?qū)崿F(xiàn)交換兩個數(shù)的值。#include void main()int a,b ,temp;scanf(“%d,%d”,&a,&b);printf(“交換之前a=%d,b=%dn”,a,b);t=

21、a;a=b;b=t;printf(“交換之后a=%d,b=%dn”,a,b);作業(yè)1:張丘建算經(jīng)中提出”百雞問題“:雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁、母、雛各幾何?用流程圖或N-S圖對算法進(jìn)行描述。作業(yè)2:輸入一個華氏溫度f,要求輸出攝氏溫度c,公式為c=5/9(f-32),輸出要求有文字說明,輸出2位小數(shù)。作業(yè)3:認(rèn)真完成課后習(xí)題。N-S流程圖描述百錢百雞問題計數(shù)器(解的組數(shù)) j=0for(x=0;x=100;x+)for(y=0;y=100;y+)for(z=0;z=100;z+=3)TFx+y+z=100 且 5x+3y+z/3=100?j+;輸出該組結(jié)果百

22、錢百雞問題源程序#include void main( ) int x, y, z; for (x=0; x=100; x+) for (y=0; y=100; y+) for (z=0; z=100; z+=3) if ( x+y+z=100 &5*x+3*y+z/3=100 ) printf(cock=%2d hen=%2d chicken=%2dn, x, y, z);百錢百雞問題算法的進(jìn)一步優(yōu)化作為多層循環(huán),優(yōu)化主要集中在減少循環(huán)層數(shù)以及縮小變量的窮舉范圍上:1、窮舉變量x的取值范圍其實只能在020之間;2、并且,此時y的窮舉范圍由方程1可以減少為0100-x,由方程2可以減少為0(1

23、00-5x)/3,取較小的范圍應(yīng)該是: 0(100-5x)/3;3、進(jìn)一步:x和y取值后,z的值唯一(z=100-x-y),可以減少一層循環(huán)。 優(yōu)化后的百錢百雞問題源程序#include main( ) int x, y, z, j=0; for (x=0;x=20;x+) for (y=0;y=(100-5*x)/3;y+) z = 100-x-y; if(z%3=0 & 5*x+3*y+z/3=100) printf(%2d:cock=%2d hen=%2d chicken=%2dn,+j,x,y,z); 窮舉法解排列問題小明有5本新書,要借給a、b、c三位小朋友,若每人每次只能借一本,則

24、可有多少種不同的借法? 問題分析對5本書從1至5進(jìn)行編號。當(dāng)a=i時,表示a借了編號為i的書。當(dāng)3個人所借的書的編號都不相同時,就是滿足題意的一種借閱方法。則:a、b、c取值范圍:1 = a、b、c = 5且當(dāng):a!=b & a!=c & b!=c 時,即為一種可能的借書方法。 N-S流程圖描述借書問題計數(shù)器(解的組數(shù))count=0for(a=1;a=5;a+)for(b=1;b=5;b+)for(c=1;a!=b & c=5;z+)TF c!=a 且 c!=b?count+;輸出該組結(jié)果借書問題源程序#include main( ) int a, b, c, count=0; for (

25、a=1; a=5; a+ ) for ( b=1; b=5; b+ ) for ( c=1; a!=b & c=5; c+) if ( c!=a & c!=b ) printf(%d:%d,%d,%dn, +count, a, b, c ); #includevoid main() while(1) printf(你好,這是一個華氏度轉(zhuǎn)攝氏度的例程。nn); printf(現(xiàn)在,請輸入一個華氏溫度:); float t; scanf(%f,&t); float c; c=9.0/5*(t-32); printf(您所要求的攝氏溫度為:%fnn,c); printf(現(xiàn)在,您可以選擇:1、繼續(xù)本

26、程序;2、退出n);printf(現(xiàn)在,您可以選擇:1、繼續(xù)本程序;2、退出n);A: printf(請輸入您的選擇:); int x; scanf(%d,&x); if(x=1) printf(n現(xiàn)在,程序繼續(xù)n); else if(x=2) printf(n謝謝您的使用n); break; else printf(n請輸入正確的選擇:1、繼續(xù)本程序;2、退出n); goto A; a,b,c由鍵盤輸入,設(shè) 。眾所周知,一元二次方程式的根為:x1= x2= 可以將上面的分式分為兩項:p= , q= x1=p+q, x2=p-q例3.16 求x2方程的根。 #include #include

27、void main ( ) float a,b,c,disc,x1,x2,p,q; scanf(a=%f,b=%f,c=%f,&a,&b,&c); disc=b*b-4*a*c; p=-b/(2*a); q=sqrt(disc)/(2*a); x1=p+q; x2=p-q; printf(nnx1=%5.2fnx2=%5.2fn,x1,x2);運(yùn)行情況:,#include main() char c1,c2,c3,c4,c5,c6;scanf(“%c%c%c%c”, &c1, &c2, &c3, &c4);c5=getcahr(); c6=getchar();putchar(c1); putchar(c2);printf (“%c%cn”,c5,c6);若輸入為: 123 45678則輸出: A) 1267B) 1256C) 1278D) 12451 c語言中的語句有哪幾類?2 怎樣區(qū)分表達(dá)式和表達(dá)式語句?3 c語言為什么要把輸入輸出功能作為函數(shù),而不作為語言的基本部分? 控制語句;函數(shù)調(diào)用語句;表達(dá)式語句;空語句;復(fù)合語句。 表達(dá)式是由操作數(shù)和操作符按照一定語法規(guī)則構(gòu)成的符號序列;表達(dá)式語句必須在最后出現(xiàn)分號,分

溫馨提示

  • 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

提交評論