山東科技大學(xué)第五章C程序結(jié)構(gòu)及控制語句_第1頁
山東科技大學(xué)第五章C程序結(jié)構(gòu)及控制語句_第2頁
山東科技大學(xué)第五章C程序結(jié)構(gòu)及控制語句_第3頁
山東科技大學(xué)第五章C程序結(jié)構(gòu)及控制語句_第4頁
山東科技大學(xué)第五章C程序結(jié)構(gòu)及控制語句_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第5章C程序結(jié)構(gòu)及控制語句學(xué)習(xí)內(nèi)容C程序語句及編程風(fēng)格

順序結(jié)構(gòu)

選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)應(yīng)用舉例5.1C程序語句及編程風(fēng)格一、C程序語句C語句可以分為五類:表達(dá)式語句;函數(shù)調(diào)用語句;控制語句;空語句;復(fù)合語句。表達(dá)式語句:由表達(dá)式加上分號組成。例如:x=y+z;

x+y;i++;說明:C語言中的任何一個(gè)表達(dá)式都可以構(gòu)成語句。注意表達(dá)式與表達(dá)式語句的區(qū)別函數(shù)調(diào)用語句:由函數(shù)調(diào)用加上分號構(gòu)成。例如:printf(“CProgram”);本質(zhì)上,函數(shù)調(diào)用語句也屬于表達(dá)式語句??刂普Z句:用于控制程序的流程。包括:if()…else… (條件語句)switch (多分支選擇語句)for()… (循環(huán)語句)do…while() (循環(huán)語句)while()… (循環(huán)語句)break (終止執(zhí)行switch或循環(huán)語句)continue (結(jié)束本次循環(huán)語句)goto (無條件轉(zhuǎn)向語句)return (從函數(shù)返回語句)空語句:僅由一個(gè)分號組成。格式:;功能:不執(zhí)行任何操作。復(fù)合語句:由兩個(gè)或者兩個(gè)以上的語句構(gòu)成的語句。例如:{ x=y+1;a=b+c;

printf(“%d,%d”,x,a);}(1)復(fù)合語句必須用一對“{}”括起來。(2)復(fù)合語句中的最后一條語句不可省略“;”。二、C程序編程風(fēng)格正確性:可靠性:規(guī)范化:可讀性:靈活性:5.2順序結(jié)構(gòu)順序執(zhí)行。輸入、計(jì)算、輸出三步曲例5.1要求:輸入三角形的三邊長,求三角形面積。海倫公式:;s=(a+b+c)/2。#include<stdio.h>#include<math.h>voidmain(){floata,b,c,s,area;

scanf("%f,%f,%f",&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));

printf("a=%f,b=%f,c=%f,s=%f\n",a,b,c,s);

printf("area=%7.2f\n",area);}例5.2要求:從鍵盤輸入一個(gè)大寫字母,要求改用小寫字母輸出。#include<stdio.h>voidmain(){charc1,c2;c1=getchar();printf("%c,%d\n",c1,c1);c2=c1+32;printf("%c,%d\n",c2,c2);}例5.3交換數(shù)據(jù)。對輸入的兩個(gè)變量a、b,交換它們的值并輸出。#include<stdio.h>voidmain(){

int

a,b,c;

printf(“Pleaseinputtwointegers:”);

scanf(“%d%d”,&a,&b);

printf(“Beforeswapa=%db=%d\n”,a,b);c=a;a=b;b=c;

printf(“Afterswapa=%db=%d\n”,a,b);}輸入a、b交換a、b輸出a、b5.3選擇結(jié)構(gòu)C語言提供了兩種分支結(jié)構(gòu)控制語句:

if語句

switch語句if語句格式一格式1:if(表達(dá)式)

語句例如:if(a>b)max=a;例如:#include<stdio.h>main(){

intx;

scanf(“%d”,&x);if(x<60)

printf(“不及格?。?!”);

printf(“x=%d”,x);}if語句格式二格式2:if(表達(dá)式)

語句1else

語句2例如:if(a>b)max=a;elsemax=b;例如:#include<stdio.h>main(){

intx;

scanf(“%d”,&x);if(x<60)

printf(“不及格?。?!”);

else

printf(“x=%d”,x);}if語句的嵌套

如果if語句中的執(zhí)行語句又是一個(gè)if語句,就構(gòu)成了if語句嵌套的情形。格式:if(表達(dá)式) if語句或者:if(表達(dá)式)if語句

elseif語句例5.5從鍵盤輸入一個(gè)數(shù)值x,求符號函數(shù)值。#include<stdio.h>voidmain(){floatx;

int

sgn;

scanf("%f",&x);if(x==0)sgn=0;else

if(x>0)sgn=1;elsesgn=-1;

printf("sgn(x)=%d",sgn);}嵌套的if語句if語句格式三格式3:if(表達(dá)式1)

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

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

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

語句nelse

語句n+1if語句說明if關(guān)鍵字之后均為帶括弧的表達(dá)式。該表達(dá)式可以是任何表達(dá)式。只要表達(dá)式運(yùn)算的結(jié)果為非0,就按“真”處理,執(zhí)行相應(yīng)的語句;否則按“假”處理,執(zhí)行相應(yīng)的語句。在if語句的第二、三種形式中,else子句必須與if配對使用。在if語句的三種形式中,所有的語句應(yīng)為單個(gè)語句,如果在滿足條件時(shí)執(zhí)行多個(gè)語句,則必須把這多個(gè)語句用“{}”組成一個(gè)復(fù)合語句。但是在“}”之后不能加分號。在表達(dá)式中不要使用“if(a)”這樣的語句。例5.7對于輸入的0~100分之間的成績,判定出A~E五個(gè)等級#include<stdio.h>main(){intn;scanf(“%d”,&n);if(n<60)

printf(“E\n”);elseif(n<70)

printf(“D\n”);

elseif(n<80)

printf(“C\n”);elseif(n<90)

printf(“B\n”);else

printf(“A\n”);}課堂練習(xí):閱讀程序,寫出程序的執(zhí)行結(jié)果。1、#include<stdio.h>main(){intx=3,y=5;if(x=5)

printf(“hello\n”);else

printf(“word\n”);}2、#include<stdio.h>main(){inta=1;if(a=0)

printf(“hello\n”);else

printf(“word\n”);}3、做課后習(xí)題第4題選擇結(jié)構(gòu)—switch語句格式:switch(表達(dá)式){ case常量表達(dá)式1:語句1 case常量表達(dá)式2:語句2case常量表達(dá)式n:語句ndefault:語句n+1}switch(a){case1:printf(“Monday\n”);case2:printf(“Tuesday\n”);case3:printf(“Wednesday\n”);case4:printf(“Thursday\n”);case5:printf(“Friday\n”);case6:printf(“Saturday\n”);case7:printf(“Sunday\n”);default:printf(“error\n”);}N-S圖示例說明:“case常量表達(dá)式”只相當(dāng)于一個(gè)語句標(biāo)號,表達(dá)式的值和某標(biāo)號相等則轉(zhuǎn)向該標(biāo)號執(zhí)行,但不能在執(zhí)行完該標(biāo)號的語句后自動(dòng)跳出整個(gè)switch語句。為了避免上述情況,C提供了break語句。在case后的各個(gè)常量表達(dá)式的值不能相同,否則會出現(xiàn)錯(cuò)誤。在case后,允許有多個(gè)語句,可以不用{}括起來。各個(gè)case和default子句的先后順序可以變動(dòng),不影響程序的執(zhí)行結(jié)果。default子句可以省略不用,此時(shí)當(dāng)表達(dá)式的值與所有case后的常量表達(dá)式的值不同時(shí),退出switch語句,繼續(xù)執(zhí)行后續(xù)程序。switch后面括號中的表達(dá)式只能是整型、字符型、枚舉類型,case后的常量表達(dá)式的類型必須與之匹配。各個(gè)case之后是常量表達(dá)式,一定不要試圖使用條件表達(dá)式或者邏輯表達(dá)式。例5.6計(jì)算器程序。從鍵盤接收兩個(gè)運(yùn)算數(shù)和四則運(yùn)算符,計(jì)算并輸出結(jié)果。#include<stdio.h>voidmain(){floata,b;charc;

printf("inputexpression:a+(-,*,/)b\n");

scanf("%f%c%f",&a,&c,&b);switch(c){case'+':printf("%f\n",a+b);break;case'-':printf("%f\n",a-b);break;case'*':printf("%f\n",a*b);break;case'/':printf("%f\n",a/b);break;

default:printf("inputerror\n");}}課堂練習(xí):完成課后習(xí)題5.55.4循環(huán)結(jié)構(gòu)循環(huán)條件:循環(huán)體:循環(huán)變量:C語言提供了三種循環(huán)控制語句。

while語句;

do-while語句;

for語句。while語句格式:while(表達(dá)式)

語句(1)while語句中的表達(dá)式一般是關(guān)系表達(dá)式或者邏輯表達(dá)式,只要值為真就可以繼續(xù)執(zhí)行循環(huán)體。(2)如果循環(huán)體包含一個(gè)以上的語句,必須用{}括起來構(gòu)成復(fù)合語句。#include<stdio.h>voidmain(){intsum=0,n;n=0;//循環(huán)變量初始化while(n<=100){sum+=n;n+=2;//改變循環(huán)變量的值}printf("%d\n",sum);}do-while語句格式:do{

語句

}while(表達(dá)式);(1)do-while語句的表達(dá)式后必須加分號。(2)如果循環(huán)體由多個(gè)語句組成,也必須由{}括起來,組成一個(gè)復(fù)合語句。例求1~100之間所有偶數(shù)的和。#include<stdio.h>voidmain(){

intsum=0,n;n=0;//循環(huán)變量初始化

while(n<=100)//循環(huán)執(zhí)行條件

{sum+=n;n+=2;//改變循環(huán)變量的值

}

printf("%d\n",sum);}#include<stdio.h>voidmain(){

intsum=0,n;n=0;//循環(huán)變量初始化do{sum+=n;n+=2;//改變循環(huán)變量的值

}while(n<=100);

printf("%d\n",sum);}例:重復(fù)判斷用戶輸入的是否是一個(gè)偶數(shù),直到輸入0為止。#include<stdio.h>voidmain(){

intn;do{

printf(“請輸入一個(gè)整數(shù):");

scanf("%d",&n);if(n%2==0)printf(“%d是一個(gè)偶數(shù)!\n“,n);}while(n!=0);}for語句格式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

語句說明:for語句的各個(gè)表達(dá)式均可省略,但是分號不可缺少。如果循環(huán)變量已經(jīng)在for語句前賦初始值,那么表達(dá)式1可以省略。如果省略表達(dá)式2,一般在循環(huán)體中加入break語句來退出循環(huán)。若省略表達(dá)式3,應(yīng)在循環(huán)體中修改循環(huán)變量,保證循環(huán)能結(jié)束。可以同時(shí)省略三個(gè)表達(dá)式中的任意2個(gè)或三個(gè)表達(dá)式全省略。循環(huán)體可以是空語句。表達(dá)式1可以是設(shè)置循環(huán)變量初值的賦值表達(dá)式,也可以是與循環(huán)變量無關(guān)的其它表達(dá)式。表達(dá)式2一般是關(guān)系表達(dá)式或者邏輯表達(dá)式,但也可以是數(shù)值表達(dá)式或者字符表達(dá)式,只要其值為非零,就可以執(zhí)行循環(huán)。表達(dá)式3一般是改變循環(huán)變量的賦值表達(dá)式,但也可以是與循環(huán)變量無關(guān)的其它表達(dá)式。表達(dá)式1和表達(dá)式3都可以是逗號表達(dá)式。例7求1~100之間所有偶數(shù)的和。#include<stdio.h>voidmain(){

intsum=0,n;for(n=0;n<=100;n+=2)sum+=n;

printf("%d",sum);}例5.4

判斷鍵盤上輸入字符的類別,統(tǒng)計(jì)其中字母、數(shù)字、其它字符的個(gè)數(shù)并輸出。#include<stdio.h>#include<string.h>voidmain(){charInStr[80];unsignedinti;

intNumOfData=0;

intNumOfChar=0;

intNumOfOther=0;

printf("inputastring:");

gets(InStr);for(i=0;i<strlen(InStr);i++){if(InStr[i]>='0'&&InStr[i]<='9')

NumOfData++;elseif((InStr[i]>='a'&&InStr[i]<='z')||(InStr[i]>='A'&&InStr[i]<='Z'))

NumOfChar++;else

NumOfOther++;}

printf(“%d,%d,%d.\n",

NumOfData,NumOfChar,NumOfOther);}跳轉(zhuǎn)語句

goto語句稱為無條件轉(zhuǎn)向語句。格式:goto語句標(biāo)號;例如:

gotolabel;(1)語句標(biāo)號用標(biāo)識符表示,命名規(guī)則與變量名的命名規(guī)則相同。(2)一般而言,goto語句有兩種用途:與if語句一起構(gòu)成循環(huán),這是goto語句最常用的用途。從多層循環(huán)中跳出。

#include<stdio.h>voidmain(){

intsum=0,n;n=0;//循環(huán)變量初始化lm:sum+=n;n+=2;//改變循環(huán)變量的值if(n<=10)gotolm;

printf("%d\n",sum);}

break語句格式:break;功能:用于跳出switch結(jié)構(gòu),和從循環(huán)體內(nèi)中途跳出循環(huán)體,即提前結(jié)束循環(huán),執(zhí)行循環(huán)下面的語句。說明:(1)在循環(huán)語句中,break語句一般與if語句一起使用。(2)break語句不能用于循環(huán)語句和switch語句之外的其它任何語句之中。舉例:例8計(jì)算半徑r=1到r=10的圓面積,直到圓面積大于100為止。#definePI3.1415926#include<stdio.h>voidmain(){floatarea;intr;for(r=1;r<=10;r++){area=PI*r*r;if(area>100)break;

printf(“%f\n”,area);}}

continue語句格式:continue;功能:跳過循環(huán)體中剩余的語句而強(qiáng)制執(zhí)行下一次循環(huán),即結(jié)束本次循環(huán),跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定。說明:continue語句只能用在循環(huán)語句中,且一般都是與if語句一起使用。舉例:例9把100~200之間的不能被3整除的數(shù)輸出。#include<stdio.h>voidmain(){

intn;for(n=100;n<=200;n++){if(n%3==0)continue;printf(“%5d”,n);}}循環(huán)嵌套

當(dāng)一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)體時(shí),稱為循環(huán)嵌套。其中被嵌套的循環(huán)稱為外層循環(huán),在其它循環(huán)體中嵌套的循環(huán)為內(nèi)層循環(huán),或者內(nèi)嵌循環(huán)。如果內(nèi)嵌循環(huán)的循環(huán)體內(nèi)又有一個(gè)完整的循環(huán)結(jié)構(gòu),則構(gòu)成了多層嵌套。

C語言提供的三種循環(huán)控制語句可以互相嵌套,也可以自己嵌套。例10輸出如下圖形:***************#include<stdio.h>voidmain(){

int

i,j;for(i=1;i<=5;i++){for(j=1;j<=i;j++)

printf("*");

printf("\n");}}例12百錢買百雞問題“百錢買百雞”是我國古代的著名數(shù)學(xué)題。問題是這樣描述的:3文錢可以買1只公雞,2文錢可以買一只母雞,1文錢可以買3只小雞。用100文錢買100只雞,那么各有公雞、母雞、小雞多少只?解法1:假設(shè)i、j、k分別代表公雞、母雞和小雞的數(shù)目,注意到一百文錢最多可以買33只公雞、50只母雞和300只小雞,所以0<=i<=33,0<=j<=50,0<=k<=300。#include<stdio.h>voidmain(){

int

i,j,k;for(i=0;i<=33;i++)for(j=0;j<=50;j++)for(k=0;k<=300;k++) if(3*i+2*j+k/3==100&&i+j+k==100&&k%3==0)

printf("公雞%d只,母雞%d只,小雞%d只。\n",i,j,k);}解法2:在第一種實(shí)現(xiàn)方法里面,i、j、k構(gòu)成了三重循環(huán),if語句總共需要被判斷33×50×300=495000次。上個(gè)程序完全可以變?yōu)槎匮h(huán),因?yàn)閕、j、k都是整數(shù),當(dāng)i、j的值被確定后,k=100-i-j。#include<stdio.h>voidmain(){

int

i,j,k;for(i=0;i<=33;i++)for(j=0;j<=50;j++){k=100-i-j;if(3*i+2*j+k/3==100&&k%3==0)

printf("公雞%d只,母雞%d只,小雞%d只。\n",i,j,k);}}一只猴子原有若干個(gè)桃子,第一天吃掉總數(shù)的一半多一個(gè),第二天又將剩下的桃子吃掉一半多一個(gè),以后每天吃掉前一天剩下的一半多一個(gè),到第十天準(zhǔn)備吃的時(shí)候發(fā)現(xiàn)只剩下一個(gè)桃子。求這

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論