版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年10月自考當(dāng)代中國政治制度(00315)試題及答案解析范文
- 混凝土攪拌站內(nèi)部質(zhì)量管理制度及質(zhì)量控制措施
- 公司對外投資管理制度
- 暴力行為預(yù)防制度
- 大件運(yùn)輸方案范文
- 臨床危急值報(bào)告管理制度及工作流程
- 十年同學(xué)聚會活動(dòng)準(zhǔn)備細(xì)節(jié)方案流程
- 醫(yī)療質(zhì)量醫(yī)療安全管理持續(xù)改進(jìn)方案及措施
- 初中數(shù)學(xué)九年級下冊教學(xué)計(jì)劃
- 工程承諾及保證措施
- 1糖尿病伴酮癥酸中毒護(hù)理查房
- 門急診患者住院轉(zhuǎn)化率統(tǒng)計(jì)及分析
- 甲狀腺功能亢進(jìn)的外科治療二-術(shù)前準(zhǔn)備
- GSP對藥品經(jīng)營企業(yè)計(jì)算機(jī)系統(tǒng)的要求
- 課堂-可以這么有聲有色
- 京瓷哲學(xué)培訓(xùn)課件
- 天貓電子商務(wù)案例分析
- 2022年1201廣東選調(diào)生考試《綜合行政能力測驗(yàn)》真題
- 有機(jī)肥料采購項(xiàng)目售后服務(wù)方案
- 綜合實(shí)踐活動(dòng)(1年級下冊)第3課時(shí) 感恩卡設(shè)計(jì)與制作-課件
- 2023河南省科學(xué)院招聘144人筆試參考題庫(共500題)答案詳解版
評論
0/150
提交評論