譚浩強(qiáng)c語(yǔ)言教程 結(jié)構(gòu)性程序的開發(fā)課件_第1頁(yè)
譚浩強(qiáng)c語(yǔ)言教程 結(jié)構(gòu)性程序的開發(fā)課件_第2頁(yè)
譚浩強(qiáng)c語(yǔ)言教程 結(jié)構(gòu)性程序的開發(fā)課件_第3頁(yè)
譚浩強(qiáng)c語(yǔ)言教程 結(jié)構(gòu)性程序的開發(fā)課件_第4頁(yè)
譚浩強(qiáng)c語(yǔ)言教程 結(jié)構(gòu)性程序的開發(fā)課件_第5頁(yè)
已閱讀5頁(yè),還剩67頁(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)化程序的開發(fā)1.理解解決問題的基本方法2.學(xué)會(huì)制定簡(jiǎn)單程序的算法3.掌握一種選擇結(jié)構(gòu)(if/else)4.掌握一種循環(huán)結(jié)構(gòu)(while)5.掌握自增、自減的運(yùn)算本章目標(biāo):§3.1C程序結(jié)構(gòu)和語(yǔ)句一、C程序結(jié)構(gòu)·每一個(gè)源文件由預(yù)編譯命令和若干函數(shù)組成(對(duì)每個(gè)文件分別編譯,然后連接)·一般地,一個(gè)C程序可由多個(gè)源文件組成·每一個(gè)函數(shù)由說(shuō)明部分和語(yǔ)句部分組成C程序結(jié)構(gòu):C程序源程序文件1源程序文件i源程序文件n預(yù)編譯命令函數(shù)1函數(shù)n說(shuō)明部分執(zhí)行部分(語(yǔ)句)………2.控制語(yǔ)句––改變語(yǔ)句的執(zhí)行順序if()~else~(條件)for()~(循環(huán))while()~(循環(huán))do~while(循環(huán))switch(多分支選擇)()表示條件,~表示語(yǔ)句

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

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

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

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

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

{x=x%2;

printf("%d",x);

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

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

有3個(gè)整數(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結(jié)束例3

輸入三個(gè)數(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);

}運(yùn)行情況如下:3,7,1

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

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

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

/*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對(duì)齊程序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語(yǔ)句改為:/*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語(yǔ)句改為:/*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是錯(cuò)誤的。

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

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

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

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

2.條件運(yùn)算符低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符。

3.條件運(yùn)算符結(jié)合性為從右至左。例: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

相當(dāng)于a>b?a:(c>d?c:d)4.條件表達(dá)式不能取代一般的if語(yǔ)句,只有當(dāng)if的兩個(gè)分支為給同一變量賦值時(shí)才可替代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條件表達(dá)式(a>b)?a:b的值為整型數(shù)據(jù),但x為實(shí)型數(shù)據(jù),所以輸出為實(shí)型數(shù)據(jù).5.表達(dá)式1、表達(dá)式2、表達(dá)式3的類型可以不同。

#include<stdio.h>

main()

{charch;

scanf("%c",&ch);

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

printf("%c",ch);

}例4

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

將它轉(zhuǎn)換成小寫字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。運(yùn)行結(jié)果如下:

A

a一、復(fù)合賦值運(yùn)算符:在"="號(hào)之前加一個(gè)其它運(yùn)算符。C語(yǔ)言規(guī)定:凡是二目運(yùn)算符均可構(gòu)成復(fù)合運(yùn)算符。例:

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

x=10為一賦值表達(dá)式其中<表達(dá)式>又可以是一個(gè)賦值表達(dá)式。例:

x=(y=10)相當(dāng)于y=10;x=y由于賦值號(hào)為右結(jié)合性,于是"()"可省略,即為:x=y=10;例:a+=a–=aa(設(shè)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還可用復(fù)合賦值運(yùn)算符作下列運(yùn)算:步驟:aa144.a–=aaa=a–aa=12–144=–132a+=–132a=a+(–132)=–264§3.4逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式

一般形式:

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

a=35,a4;

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

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

若有:

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

inti=3,j;則:j=––i;結(jié)果為:j=2,i=2.相當(dāng)于i=i–1;j=i;則:j=i––;結(jié)果為:j=3,i=2.相當(dāng)于j=i;i=i–1;1.

++和––運(yùn)算法只能用于變量,不得用于常量和表達(dá)式.如:

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

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

我們可能會(huì)認(rèn)為應(yīng)從左至右:3+4+5=12例:

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

j=(i++)+(i++)+(i++);printf("i=%d,j=%d\n",i,j);}實(shí)際運(yùn)行結(jié)果:i=6,j=9先對(duì)i進(jìn)行3次自加,結(jié)果i的值為6,然后三個(gè)i值相加為18。3+3+3=9然后再把6賦給i值如果表達(dá)式j(luò)=(i++)+(i++)+(i++);改為:j=(++i)+(++i)+(++i);則運(yùn)行結(jié)果:i=6,j=18這是因?yàn)檫\(yùn)算時(shí)是先取i的原值:32.

在表達(dá)式中,有的運(yùn)算符為一個(gè)字符,有的為兩個(gè)字符。一般地:自左至右盡可能多地將若干字符組成一個(gè)運(yùn)算符。如:

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); }運(yùn)行結(jié)果:i=4,j=3,m=6對(duì)語(yǔ)句m=i+++j;系統(tǒng)理解為m=(i++)+j;3.

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

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

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

字符輸出函數(shù)

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

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

putchar(‘a(chǎn)’)

輸出字符a

putchar(0x41)

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

#include<stdio.h>

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

輸出一個(gè)換行符

putchar(‘\101’)

輸出字符A

putchar(‘\’’)

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

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

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

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

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

年號(hào)能被4整除但不能被100整除。當(dāng)(year%4!=0)||(year%100==0&&year%400!=0)

為1時(shí),year為非潤(rùn)年。設(shè)用變量year表示年號(hào)當(dāng)((year%4==0&&year%100!=0)||(year%400==0)為1時(shí),year為潤(rùn)年,否則為非潤(rùn)年。如果要判別非潤(rùn)年可在上述表達(dá)式前加非(!)運(yùn)算符.當(dāng)!((year%4==0&&year%100!=0)||(year%400==0)

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

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

流程圖開始輸入年號(hào)判斷是否為潤(rùn)年?打印是潤(rùn)年打印非潤(rùn)年結(jié)束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)

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

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ù)由鍵盤輸入。分析:設(shè)梯形上底為A,下底為B,高為H面職為S,則S=(A+B)×H÷2[例]試編寫求梯形面積的程序,數(shù)據(jù)由鍵盤輸入。分析:設(shè)梯形上底為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);}運(yùn)行結(jié)果如下:pleaseinputa,b,h:3.54.22.8a=3.50b=4.20h=2.80s=1

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論