譚浩強c語言教程 結構性程序的開發(fā)課件_第1頁
譚浩強c語言教程 結構性程序的開發(fā)課件_第2頁
譚浩強c語言教程 結構性程序的開發(fā)課件_第3頁
譚浩強c語言教程 結構性程序的開發(fā)課件_第4頁
譚浩強c語言教程 結構性程序的開發(fā)課件_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章結構化程序的開發(fā)1.理解解決問題的基本方法2.學會制定簡單程序的算法3.掌握一種選擇結構(if/else)4.掌握一種循環(huán)結構(while)5.掌握自增、自減的運算本章目標:§3.1C程序結構和語句一、C程序結構·每一個源文件由預編譯命令和若干函數(shù)組成(對每個文件分別編譯,然后連接)·一般地,一個C程序可由多個源文件組成·每一個函數(shù)由說明部分和語句部分組成C程序結構:C程序源程序文件1源程序文件i源程序文件n預編譯命令函數(shù)1函數(shù)n說明部分執(zhí)行部分(語句)………2.控制語句––改變語句的執(zhí)行順序if()~else~(條件)for()~(循環(huán))while()~(循環(huán))do~while(循環(huán))switch(多分支選擇)()表示條件,~表示語句

continue(結束本次循環(huán))

break(中止整個循環(huán))

return(函數(shù)返回)3.限定轉向(無條件轉向)語句5.終止程序運行語句4.無條件轉移語句gotoexit6.復合語句(語句體)用{}括起來的一系列語句。如:{z=x+y;t=z/100;printf("%f",t);}三、結構化程序設計概念

從結構化程序設計角度出發(fā),程序只有三種結構:·順序結構·選擇結構·循環(huán)結構2.選擇結構表示為ABPTFBTPFA存在某條件P,若P為真,則執(zhí)行A,否則執(zhí)行B。3.循環(huán)結構表示為PFTAAP為T(1)

當型結構當P條件成立時(T),反復執(zhí)行A,直到P為“假”時才停止循環(huán).有兩種結構:當型和直到型§3.2算法1.按指定的語句和順序來解決問題的過程稱為算法。2.算法的兩個重要方面:順序語句3.算法的圖形表示:流程圖4.流程圖符號:橢圖矩形判斷框小圓圈代表程序的開始或結束代表程序所執(zhí)行的動作代表程序的分支代表程序的連接所有的流程圖用一帶箭頭的線(流線)相連,就構成了程序的流程(順序)如:§3.3if選擇結構–––條件判斷一、if的三種形式功能:當表達式值非0時,執(zhí)行語句體A,否則不執(zhí)行語句體A.形式1if(表達式)語句體A表達式語句體A=00例如:if(x>y);

{x=x%2;

printf("%d",x);

}其流程圖:表達式語句體A語句體B0=0例:if(x>y) printf("%d",x); else

printf("%d",y);形式3if(表達式1)elseif(表達式2)elseif(表達式3)……elseif(表達式n)else語句體1語句體2語句體3語句體n語句體n+1如:if(3)prinf("o.k");if('a')…1.表達式可以是邏輯、關系,甚至是算術表達式。2.語句必須以分號結束3.若語句不止一條,則必須用{}括起來。在{}外可以不用分號.二、注意的問題:例1,

有3個整數(shù)a、b、c,由鍵盤輸入,輸出其中最大的數(shù)。

0輸入a、b、ca>b?b>c?a>c?max=amax=cmax=bmax=c輸出max10110main(){inta,b,c,max;scanf(“%d,%d,%d”,&a,&b,&c);if(a>b)if(a>c)max=a;elsemax=c;elseif(b>c)max=b;elsemax=c;printf(“Maxis%d\n”,max);}

開始輸入a、b、ca>ba>c交換a、b的值b>c交換b、c的值交換a、c的值打印a、b、c的值YYYNNN結束例3

輸入三個數(shù),按大小順序輸出。#include<stdio.h>

main()

{floata,b,c,t;

scanf(“%f,%f,%f”,&a,&b,&c);

if(a<b)

{t=a;a=b;b=t;}

if(a<c)

{t=a;a=c;c=t;}

if(b<c)

{t=b;b=c;c=t;}

printf("%5.2f,%5.2f,%5.2f",a,b,c);

}運行情況如下:3,7,1

7.00,3.00,1.00三、if語句的嵌套if(表達式1)內(nèi)嵌ifelse內(nèi)嵌注意:else與最近的if配對.一般形式

在上述形式的if語句中,又可以是if語句–––稱為嵌套。if(表達式2)語句1if(表達式3)語句3else語句2else語句4例3

有一函數(shù):y=–1(x<0)0(x=0)1(x>0)編一程序,輸入一個x值,輸出y值。有以下幾種寫法,請判斷哪些是正確的?程序2:將程序1的if語句改為:

/*exp52.c*/

#include<stdio.h>

main()

{intx,y;

scanf("%d",&x);

if(x>=0)

if(x>0)

y=1;

else

y=0;

else

y=-1;

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

}

注意if—else對齊程序1:

/*exp51.c*/

#include<stdio.h>

main()

{intx,y;

scanf("%d",&x);

if(x<0)

y=–1;

elseif(x==0)

y=0;

else

y=1;

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

}程序4:將程序1的if語句改為:/*exp54.c*/#include<stdio.h>main(){intx,y;scanf("%d",&x);

y=0;if(x>=0)if(x>0)y=1;elsey=-1;printf("x=%d,y=%d\n",x,y);}

程序3:將程序1的if語句改為:/*exp53.c*/#include<stdio.h>main(){intx,y;scanf("%d",&x);

y=-1;if(x!=0)if(x>0)y=1;elsey=0;printf("x=%d,y=%d\n",x,y);}1.程序1和程序2是正確的。

它們代表的函數(shù)為:2.程序3和程序4是錯誤的。

它們代表的函數(shù)為:y=0(x<0)–1(x=0)1(x>0)y=–1(x<0)0(x=0)1(x>0)結論:思考練習:分別畫出一個程序的流程圖四、條件運算符

C語言提供了一個簡單的條件賦值語句或條件表達式。問題:當判斷條件不論是“真”是“假”,均給同一變量賦值時。簡化條件語句運算符書寫方式:?:屬三目運算符。功能:先判表達式1,若非0,則值為表達式2的值,否則為表達式3的值。一般形式:表達式1?表達式2:表達式3

max=a>b?a:b;當a>b.maxa.否則maxb注意:1.條件運算符優(yōu)先于賦值運算符.

例:max=(a>b?a:b)可去掉()

2.條件運算符低于關系運算符和算術運算符。

3.條件運算符結合性為從右至左。例:max=a>b?a:b+1

max=a>b?a:(b+1)并不是max=(a>b?a:b)+1如:a>b?a:c>d?c:d

相當于a>b?a:(c>d?c:d)4.條件表達式不能取代一般的if語句,只有當if的兩個分支為給同一變量賦值時才可替代if.if(a>b)

printf("%d",a);else

printf("%d",b);可寫成:printf("%d",a>b?a:b);如:例#include<stdio.h>main(){floatx=1.0;inta=2,b=3;x=(a>b)?a:b;printf(“%f”,x);}輸出為:3.0000條件表達式(a>b)?a:b的值為整型數(shù)據(jù),但x為實型數(shù)據(jù),所以輸出為實型數(shù)據(jù).5.表達式1、表達式2、表達式3的類型可以不同。

#include<stdio.h>

main()

{charch;

scanf("%c",&ch);

ch=(ch>='A'&&ch<='Z')?(ch+32):ch;

printf("%c",ch);

}例4

輸入一個字符,判別它是否大寫字母,如果是,

將它轉換成小寫字母;如果不是,不轉換。然后輸出最后得到的字符。運行結果如下:

A

a一、復合賦值運算符:在"="號之前加一個其它運算符。C語言規(guī)定:凡是二目運算符均可構成復合運算符。例:

a+=3;相當于a=a+3x=y+8;相當于x=x(y+8)x%=3;相當于x=x%3一般形式:<變量><賦值運算符><表達式>二、復合賦值表達式例:

x=10為一賦值表達式其中<表達式>又可以是一個賦值表達式。例:

x=(y=10)相當于y=10;x=y由于賦值號為右結合性,于是"()"可省略,即為:x=y=10;例:a+=a–=aa(設a12)又:a=5+(c=6)c=6,a=11a=(b=4)+(c=6)

b=4,c=6,a=10a=(b=10)/(c=2)b=10,c=2,a=5還可用復合賦值運算符作下列運算:步驟:aa144.a–=aaa=a–aa=12–144=–132a+=–132a=a+(–132)=–264§3.4逗號運算符和逗號表達式

一般形式:

表達式1,表達式2其計算規(guī)則:先計算表達式1,再計算表達式2,最后值為表達式2的值。例:ina,b;

a=35,a4;

b=(3*5,a*4);結果:a=15

b=60略若:b=((a=35,a4),a+5);擴展形式:表達式1,表達2,…,表達式n,結果b=20(作為逗號表達式的值)a+5b即20b.35=15aa4=60(此時a值仍未變)結果為表達式n的值略四、自增,自減運算符例如:

若有:

inti=3;++自增1––自減1++i:先使i值+1,再使用i值;i++:先使用i值,再使i值+1.則:j=++i;結果為:j=4,i=4.相當于i=i+1;j=i;則:j=i++;結果為:j=3,i=4.相當于j=i;i=i+1同理:––i,i––,均使i值–1,但:––i:先使i值–1,再使用i值;i––:先使用i值,再使i值–1例如:

inti=3,j;則:j=––i;結果為:j=2,i=2.相當于i=i–1;j=i;則:j=i––;結果為:j=3,i=2.相當于j=i;i=i–1;1.

++和––運算法只能用于變量,不得用于常量和表達式.如:

5++,(a+b)++均為不合法.幾點注意:2.++,–

–,的結合性為從右至左,而一般算術運算符為從左至右。如:–i++"–"和"++"為同一優(yōu)先級.–i++相當于–(i++)例: #include<stdio.h> main() {inti=3,j; j=-i++; printf("i=%d,j=%d\n",i,j); }運行結果:i=4,j=-31.要慎用++、––運算符。五、有關表達式使用中的問題說明對于表達式(i++)+(i++)+(i++);

我們可能會認為應從左至右:3+4+5=12例:

#include<stdio.h>main(){inti=3,j;

j=(i++)+(i++)+(i++);printf("i=%d,j=%d\n",i,j);}實際運行結果:i=6,j=9先對i進行3次自加,結果i的值為6,然后三個i值相加為18。3+3+3=9然后再把6賦給i值如果表達式j=(i++)+(i++)+(i++);改為:j=(++i)+(++i)+(++i);則運行結果:i=6,j=18這是因為運算時是先取i的原值:32.

在表達式中,有的運算符為一個字符,有的為兩個字符。一般地:自左至右盡可能多地將若干字符組成一個運算符。如:

i+++j,究竟理解為(i++)+j還是i+(++j)?例:#include<stdio.h> main() {inti=3,j=3,m; m=i+++j; printf("i=%d,j=%d,m=%d\n",i,j,m); }運行結果:i=4,j=3,m=6對語句m=i+++j;系統(tǒng)理解為m=(i++)+j;3.

在函數(shù)調(diào)用時要注意參數(shù)的計算順序,printf("i=%d,i=%d",i,i++);如:inti=3;intj=3;printf("j=%d,j=%d",j++,j);輸出結果:i=4,i=3;j=3,j=3;原因:參數(shù)的計算順序從右到左。數(shù)據(jù)輸出

格式:putchar(c)參數(shù):c為字符常量、變量或表達式功能:把字符c輸出到顯示器上返值:正常,為顯示的代碼值;出錯,為EOF(-1)

C語言無I/O語句,I/O操作由函數(shù)實現(xiàn)

字符輸出函數(shù)

#include<stdio.h>putchar()函數(shù)1、功能:將一個字符輸出到標準輸出設備。2、格式:putchar(c)3、使用要點:putchar(c)中的c可以是字符型或整型數(shù)據(jù);

c=98;putchar(c)輸出字符b

putchar(‘a(chǎn)’)

輸出字符a

putchar(0x41)

輸出字符A使用輸出函數(shù)需要調(diào)用c的標準I/O庫函數(shù),故需用預編譯命令:

#include<stdio.h>

將stdio.h文件包含在用戶源程序文件中;putchar()也可以輸出一個控制字符或其它轉義字符。如:putchar(‘\n’)

輸出一個換行符

putchar(‘\101’)

輸出字符A

putchar(‘\’’)

輸出字符單引號’4、舉例:格式:getchar()功能:從鍵盤讀一字符返值:正常,返回讀取的代碼值;出錯,返回EOF(-1)字符輸入函數(shù)

例/*ch3_4.c*/#include<stdio.h>main(){intc;printf("Enteracharacter:");c=getchar();printf("%c--->hex%x\n",c,c);}運行結果:Enteracharacter:AA--->hex41數(shù)據(jù)輸入putchar()函數(shù)[例]輸入一個字符,回顯該字符并輸出其ASCII碼值。#include<stdio.h>main(){charch;ch=getchar();putchar(ch);printf("%d\n",ch);}運行程序:gg103本章主要介紹的內(nèi)容:1.C程序語句的分類2.C程序結構的分類3.if語句和條件運算符4.逗號表達式5.自增、自減運算符本章小結6.輸入輸出作業(yè)1:有一函數(shù):

x(x<1)y=2x-1(1≤x<10)3x-11(x≥10)

用if-else-if結構,輸入x值,輸出y值作業(yè)2:寫一程序,輸入年號,判斷是否為閏年。

算法:當年號能被4整除但不能被100整除時,它為閏年。當年號能被400整除時,它為閏年。根據(jù)閏年的判斷條件為下列條件之一:例如:判斷年號是否為潤年。潤年必須滿足下列條件中的任意一個:年號能被400整除。

年號能被4整除但不能被100整除。當(year%4!=0)||(year%100==0&&year%400!=0)

為1時,year為非潤年。設用變量year表示年號當((year%4==0&&year%100!=0)||(year%400==0)為1時,year為潤年,否則為非潤年。如果要判別非潤年可在上述表達式前加非(!)運算符.當!((year%4==0&&year%100!=0)||(year%400==0)

為1時,year為非潤年?;蛘?即:則:程序舉例作業(yè):寫一程序,輸入年號,判斷是否為閏年。1.

算法:當年號能被4整除但不能被100整除時,它為閏年。當年號能被400整除時,它為閏年。根據(jù)閏年的判斷條件為下列條件之一:

流程圖開始輸入年號判斷是否為潤年?打印是潤年打印非潤年結束YNif((year%4==0)&&year%100!=0)||(year%400==0))#include<stdio.h>main(){intyear;scanf("%d",&year); printf("%dis",year);elseprintf("%disnot",year);printf("aleapyear\n");}程序:第四章程序控制例有一函數(shù):

x(x<1)y=2x-1(1≤x<10)3x-11(x≥10)

這是一個求三個分支的函數(shù)值的的情況,選用if-else-if結構比較方便。

main(){floatx,y;scanf(“%f”,&x);if(x<1)y=x;elseif(x<10)y=2*x-1;elsey=3*-11;printf(“y=%f\n”,y);}[例]試編寫求梯形面積的程序,數(shù)據(jù)由鍵盤輸入。分析:設梯形上底為A,下底為B,高為H面職為S,則S=(A+B)×H÷2[例]試編寫求梯形面積的程序,數(shù)據(jù)由鍵盤輸入。分析:設梯形上底為A,下底為B,高為H面職為S,則S=(A+B)×H÷2main(){floata,b,h,s;printf("pleaseinputa,b,h:");scanf("%f%f%f",&a,&b,&h);s=0.5*(a+b)*h;printf("a=%5.2fb=%5.2f=%5.2f",a,b,h);printf("s=%7.4f",s);}運行結果如下:pleaseinputa,b,h:3.54.22.8a=3.50b=4.20h=2.80s=1

溫馨提示

  • 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

提交評論