第3章C語(yǔ)言的基本控制結(jié)構(gòu)_第1頁(yè)
第3章C語(yǔ)言的基本控制結(jié)構(gòu)_第2頁(yè)
第3章C語(yǔ)言的基本控制結(jié)構(gòu)_第3頁(yè)
第3章C語(yǔ)言的基本控制結(jié)構(gòu)_第4頁(yè)
第3章C語(yǔ)言的基本控制結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩80頁(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)介

第3章C語(yǔ)言的基本控制結(jié)構(gòu)學(xué)習(xí)目的與要求:掌握C語(yǔ)言的格式輸入與輸出函數(shù)scanf和printf。熟練掌握選擇結(jié)構(gòu)的使用方法熟練掌握三種循環(huán)結(jié)構(gòu)的使用方法根據(jù)給定的問(wèn)題,給出相應(yīng)的解決方法基本內(nèi)容選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)順序結(jié)構(gòu)本章小結(jié)順序結(jié)構(gòu)順序結(jié)構(gòu)是選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的基礎(chǔ)。C順序結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計(jì)中最簡(jiǎn)單和最常用的結(jié)構(gòu)。順序結(jié)構(gòu)要求按照各語(yǔ)句的書寫順序一條一條地執(zhí)行。C語(yǔ)句一個(gè)C函數(shù)包含聲明部分和執(zhí)行部分,執(zhí)行部分是由語(yǔ)句組成的,語(yǔ)句的作用是向計(jì)算機(jī)系統(tǒng)發(fā)出操作指令,要求執(zhí)行相應(yīng)的操作。C語(yǔ)言中的語(yǔ)句主要有控制語(yǔ)句、表達(dá)式語(yǔ)句、空語(yǔ)句、復(fù)合語(yǔ)句、函數(shù)調(diào)用語(yǔ)句等C語(yǔ)句——控制語(yǔ)句

用于完成一定的控制功能。C語(yǔ)言有以下9種控制語(yǔ)句:①if()…else… (條件語(yǔ)句)②for()… (循環(huán)語(yǔ)句)③while()… (循環(huán)語(yǔ)句)④do…while() (循環(huán)語(yǔ)句)⑤break (中斷switch或循環(huán)語(yǔ)句)⑥continue (結(jié)束當(dāng)前循環(huán)語(yǔ)句)⑦switch (多分支選擇語(yǔ)句)⑧return (返回語(yǔ)句)⑨goto (轉(zhuǎn)向語(yǔ)句)C語(yǔ)句——表達(dá)式語(yǔ)句表達(dá)式是通過(guò)運(yùn)算符號(hào)連接操作數(shù)得到的式子,表達(dá)式可以是算術(shù)運(yùn)算表達(dá)式、關(guān)系運(yùn)算表達(dá)式、邏輯運(yùn)算表達(dá)式、賦值表達(dá)式等。一個(gè)表達(dá)式加上分號(hào)就構(gòu)成表達(dá)式語(yǔ)句。例如:x=1;a=3*b-c/4;++i;c=a>b?a:b;都是合法的表達(dá)式語(yǔ)句。C語(yǔ)句——空語(yǔ)句空語(yǔ)句??照Z(yǔ)句是只由一個(gè)分號(hào)“;”構(gòu)成的語(yǔ)句。空語(yǔ)句不執(zhí)行任何操作,通常與while和for語(yǔ)句一起使用,作為循環(huán)語(yǔ)句的循環(huán)體(循環(huán)體什么也不執(zhí)行)例如:while((c=getchar())=='');

C語(yǔ)句——復(fù)合句用大括號(hào)“{}”將多條語(yǔ)句括起來(lái)得到的語(yǔ)句,又稱為分程序。復(fù)合語(yǔ)句通常用于條件分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)中。例如:if(x>y){temp=x;x=y;y=temp;}C語(yǔ)句——函數(shù)調(diào)用句在函數(shù)調(diào)用之后加上分號(hào)形成的命令語(yǔ)句。例如:調(diào)用輸出函數(shù)printf("a=%d\n",a);數(shù)據(jù)的輸入輸出C語(yǔ)言沒(méi)有提供專門的輸入輸出語(yǔ)句,所有輸入和輸出的操作都是由函數(shù)調(diào)用來(lái)實(shí)現(xiàn)的。在C語(yǔ)言的函數(shù)庫(kù)中提供了用來(lái)進(jìn)行輸入輸出的函數(shù),這些函數(shù)被稱為“標(biāo)準(zhǔn)輸入輸出函數(shù)”。它是以標(biāo)準(zhǔn)的計(jì)算機(jī)輸入輸出設(shè)備(一般為終端設(shè)備)作為輸入輸出對(duì)象的。數(shù)據(jù)的輸入輸出C語(yǔ)言提供的所有函數(shù)都是存放在C語(yǔ)言的函數(shù)庫(kù)中,要使用這些函數(shù)時(shí),需要通過(guò)預(yù)編譯命令#include將以“.h”為擴(kuò)展名的相應(yīng)庫(kù)文件包含到源文件中。例如,如果要使用標(biāo)準(zhǔn)輸入輸出函數(shù),需要在源文件的開頭包含如下命令:

#include<stdio.h>

#include"stdio.h"

字符輸出函數(shù)putchar若從計(jì)算機(jī)向顯示器輸出一個(gè)字符,可以調(diào)用系統(tǒng)函數(shù)庫(kù)中的putchar函數(shù)。函數(shù)的一般形式為:putchar(ch)功能:將參數(shù)ch的值以字符類型輸出到系統(tǒng)的標(biāo)準(zhǔn)輸出設(shè)備(通常是顯示器),如果函數(shù)調(diào)用成功,則返回參數(shù)字符。putchar函數(shù)應(yīng)用舉例編寫程序用putchar函數(shù)輸出字符串“China”。#include<stdio.h>intmain(){charch1='C',ch2='h',ch3='i';putchar(ch1);putchar(ch2);putchar(ch3);putchar('n');putchar(97);putchar('\n');return0;}putchar(ch)函數(shù)中的ch可以是字符常量、字符變量、字符允許范圍內(nèi)的整數(shù)以及表達(dá)式。字符輸入函數(shù)getchar向計(jì)算機(jī)輸入一個(gè)字符,可以調(diào)用系統(tǒng)函數(shù)庫(kù)中的getchar函數(shù)。函數(shù)的一般形式為:getchar()功能:獲得用戶從系統(tǒng)的標(biāo)準(zhǔn)輸入設(shè)備(通常是鍵盤)輸入的一個(gè)字符,并返回該字符的ASCII碼。getchar函數(shù)應(yīng)用舉例接收用戶輸入的字符串,并將其打印出來(lái)。#include<stdio.h>intmain(){charch1,ch2,ch3,ch4,ch5;printf("輸入一個(gè)字符串:\n");ch1=getchar();ch2=getchar();ch3=getchar();ch4=getchar();ch5=getchar();putchar(ch1);putchar(ch2);putchar(ch3);putchar(ch4);putchar(ch5);putchar('\n');return0;}getchar函數(shù)是一個(gè)無(wú)參函數(shù),若要獲得該函數(shù)的值,需賦給一個(gè)字符變量或整型變量。格式輸出函數(shù)printfC語(yǔ)言提供的printf函數(shù)可以用參數(shù)設(shè)置格式化輸出,并將結(jié)果顯示到標(biāo)準(zhǔn)輸出設(shè)備上。printf函數(shù)的一般形式為:printf(格式控制字符串,輸出對(duì)象列表)例如:printf(“a=%d,b=%d\n",a,b);格式輸出函數(shù)printfprintf(格式控制字符串,輸出對(duì)象列表)格式控制字符串普通字符:原樣輸出格式說(shuō)明:%+格式控制符轉(zhuǎn)義字符其它符號(hào):修飾符,改變輸出形式“輸出對(duì)象列表”指定需要輸出的數(shù)據(jù),可以是常量、變量、表達(dá)式或函數(shù)調(diào)用。對(duì)象列表中可以有多個(gè)表達(dá)式,多個(gè)表達(dá)式之間用逗號(hào)分隔。printf函數(shù)的一般形式可以表示為:printf(參數(shù)1,參數(shù)2,參數(shù)3,…,參數(shù)n)printf函數(shù)中的格式字符含義格式字符d,iox或Xucsfe或Eg或G按整型數(shù)據(jù)的實(shí)際長(zhǎng)度輸出帶符號(hào)的十進(jìn)制整數(shù)以八進(jìn)制形式輸出無(wú)符號(hào)整數(shù)(無(wú)前導(dǎo)0)以十六進(jìn)制形式輸出無(wú)符號(hào)整數(shù)(無(wú)前導(dǎo)0x)以十進(jìn)制形式輸出unsigned型數(shù)據(jù)將參數(shù)轉(zhuǎn)換為一個(gè)字符輸出輸出一個(gè)字符串,直到遇到‘\0’為止以小數(shù)形式輸出單、雙精度的實(shí)數(shù)以指數(shù)形式輸出實(shí)數(shù)用來(lái)輸出實(shí)數(shù),根據(jù)數(shù)值的大小,自動(dòng)選f格式或e格式(選擇輸出占寬度較小的一種),不輸出無(wú)意義的零printf函數(shù)中的修飾符含義附加字符lhm.n(m、n表示正整數(shù))-輸出long型數(shù)據(jù)輸出短整型數(shù)據(jù)m表示數(shù)據(jù)最小寬度,對(duì)于實(shí)數(shù),n表示小數(shù)位數(shù),對(duì)于字符串,n表示截取的字符個(gè)數(shù)輸出的數(shù)字或字符在域內(nèi)左對(duì)齊printf函數(shù)應(yīng)用舉例#include<stdio.h>intmain(){shorta=2,c=-6,d=32768;unsignedshortm=65535;intb=32768;floatf=29.3683;doublex=1.583,y=0.992;charch='B';printf("a=%hd,a=%4hd\n",a,a);printf("b=%d,b=%-10d,b=%4d\n",b,b,b);printf("c=%hd,c=%ho,c=%hx,c=%hu\n",c,c,c,c);printf("d=%hd,d=%ho,d=%hx,d=%hu\n",d,d,d,d);printf("m=%hd,m=%ho,m=%hx,m=%hu\n",m,m,m,m);printf函數(shù)應(yīng)用舉例printf("f=%f,f=%6.2f,f=%6f,f=%d\n",f,f,f,f);printf("ch=%c,ch=%d\n",ch,ch);printf("\n%6.2f",x);printf("\n+%5.2f",y);printf("\n-------");printf("\n%6.2f\n",x+y);return0;}注意:printf函數(shù)中參數(shù)列表中的對(duì)象必須與格式控制命令的個(gè)數(shù)和類型一一對(duì)應(yīng),兩者如果不匹配則無(wú)法輸出正確結(jié)果。格式輸入函數(shù)scanfscanf函數(shù)的功能是在程序運(yùn)行過(guò)程中接收用戶輸入的數(shù)據(jù),并將其賦值給已經(jīng)定義的變量。scanf函數(shù)的一般形式為:scanf(格式控制字符串,變量地址列表)例如:intvar;scanf("%d",&var);scanf函數(shù)中的格式字符f含義格式字符doxcs輸入十進(jìn)制整數(shù)輸入八進(jìn)制整數(shù)輸入十六進(jìn)制整數(shù)輸入單個(gè)字符,接收空白字符輸入字符串輸入浮點(diǎn)數(shù),轉(zhuǎn)換字符e和f同義。輸入的數(shù)值可以含有正負(fù)號(hào)、小數(shù)點(diǎn)和包含e或E的指數(shù)部分。scanf函數(shù)中的修飾符用于輸入長(zhǎng)整型數(shù)據(jù)(如%ld或%lo)或雙精度浮點(diǎn)數(shù)據(jù)(如%lf或%le)用于輸入短整型數(shù)據(jù)(如%hd、%ho或%hx)含義附加字符lhm*用于指定輸入數(shù)據(jù)所占列數(shù),m必須為一個(gè)正整數(shù)用于說(shuō)明跳過(guò)該輸入值scanf函數(shù)應(yīng)用舉例用scanf函數(shù)輸入數(shù)據(jù)。#include<stdio.h>intmain(){inta,b,x,y;floatf;charch1,ch2,ch3;printf("輸入數(shù)據(jù):\n");scanf("a=%d,b=%d",&a,&b);scanf("%d%d",&x,&y);scanf("%f%c%c%c",&f,&ch1,&ch2,&ch3);printf("a=%d,b=%d\n",a,b);printf("x=%d,y=%d\n",x,y);printf("f=%.2f,ch1=%c,ch2=%c,ch3=%c\n",f,ch1,ch2,ch3);return0;}scanf函數(shù)使用說(shuō)明“變量地址列表”中的各變量名前必須加上“&”符號(hào)。如果“格式控制字符串”中除了格式聲明外還有其它字符,則在輸入時(shí)在對(duì)應(yīng)位置上應(yīng)輸入與這些字符相同的字符。例如:scanf(“%d%d”,&x,&y);√scanf("%d%d",x,y);×例如:scanf("a=%d,b=%d",&a,&b);輸入時(shí)應(yīng)按照下面的格式進(jìn)行輸入:a=5,b=9scanf函數(shù)使用說(shuō)明若scanf函數(shù)中有不同類型的數(shù)據(jù)輸入時(shí),要注意數(shù)據(jù)的輸入格式。若輸入項(xiàng)是數(shù)值型數(shù)據(jù),各輸入項(xiàng)之間可以使用空格、制表符(Tab)和回車隔開。例如:scanf("%d%d",&x,&y);下面的輸入格式都是正確的5□9↙(□表示空格,↙表示回車)5 9↙(中間使用制表符)5↙9↙例如:scanf("%f%c%c%c",&f,&ch1,&ch2,&ch3);若輸入12.5□A□B□C,則ch1、ch2和ch3的值分別是“□”,“A”和“□”若輸入項(xiàng)中包含字符型數(shù)據(jù),空格和回車等都作為有效字符。輸入時(shí)一定要注意,否則得不到正確的結(jié)果。順序結(jié)構(gòu)程序舉例輸入三角形的三條邊,編寫程序求三角形的面積(保留2位小數(shù))。#include<stdio.h>#include<math.h>intmain(){floata,b,c,s,area;printf("請(qǐng)輸入三角形的三條邊:\n");scanf("%f%f%f",&a,&b,&c);s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf("三角形的面積:area=%.2f\n",area);//保留兩位小數(shù)return0; }基本內(nèi)容選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)順序結(jié)構(gòu)本章小結(jié)選擇結(jié)構(gòu)選擇結(jié)構(gòu)用于根據(jù)條件的成立與否選擇下一步要執(zhí)行的動(dòng)作,可以從兩種或多種候選動(dòng)作中選擇一種執(zhí)行。C語(yǔ)言中的選擇語(yǔ)句可以根據(jù)表達(dá)式的值選擇要執(zhí)行的分支語(yǔ)句,從而實(shí)現(xiàn)流程控制。C語(yǔ)言中,提供兩種選擇語(yǔ)句實(shí)現(xiàn)流程的控制:if語(yǔ)句——單分支選擇,也可以通過(guò)一系列嵌套的if-else語(yǔ)句實(shí)現(xiàn)多分支選擇。switch語(yǔ)句——多分支選擇,其中表達(dá)式的值與一組常量比較。簡(jiǎn)單if語(yǔ)句簡(jiǎn)單if語(yǔ)句的一般形式為:if(表達(dá)式)

語(yǔ)句段例如:if(x>y) printf("x>y");if語(yǔ)句括號(hào)中的表達(dá)式一般是關(guān)系表達(dá)式或邏輯表達(dá)式,也可以是其它表達(dá)式。簡(jiǎn)單if語(yǔ)句舉例通過(guò)鍵盤輸入三個(gè)整數(shù)a、b、c,按從小到大的順序輸出這三個(gè)整數(shù)。#include<stdio.h>intmain(){inta,b,c,temp;printf("請(qǐng)輸入三個(gè)整數(shù):\n");scanf("%d%d%d",&a,&b,&c);if(a>b){temp=a;a=b;b=temp;}if(a>c){temp=a;a=c;c=temp; }if(b>c){temp=b;b=c;c=temp;}printf("三個(gè)整數(shù)按從小到大的排序結(jié)果為:\n");printf("%5d%5d%5d\n",a,b,c);return0;}if-else語(yǔ)句if-else語(yǔ)句的一般形式為:if(表達(dá)式)

語(yǔ)句段1else

語(yǔ)句段2例如:if(x>y) printf("x>y");

else printf("x<=y");if-else語(yǔ)句舉例求兩個(gè)數(shù)值之間的最小值。#include<stdio.h>{inta,b;intmin1,min2;printf("請(qǐng)輸入兩個(gè)整數(shù)值:");scanf("%d%d",&a,&b);if(a>b)//用if語(yǔ)句得到最小值min1=b;elsemin1=a;min2=(a>b)?b:a;//用條件運(yùn)算得到最小值printf("if語(yǔ)句求出的a、b中的最小值為:%d\n",min1);printf("條件表達(dá)式求出的a、b中的最小值為:%d\n",min2);return0;}

if語(yǔ)句的嵌套在if-else語(yǔ)句中可以執(zhí)行一條語(yǔ)句,也可以包含任何有效的C語(yǔ)言語(yǔ)句塊,當(dāng)該語(yǔ)句塊又是一個(gè)if-else語(yǔ)句時(shí),則形成了if-else語(yǔ)句的嵌套。使用嵌套的if-else語(yǔ)句可以實(shí)現(xiàn)按照不同條件選擇兩個(gè)以上的分支流程。if語(yǔ)句的嵌套舉例從鍵盤輸入一個(gè)x的值,編寫程序計(jì)算下列函數(shù)的值。#include<stdio.h>{intx,y;printf("請(qǐng)輸入x的值:");scanf("%d",&x);if(x>=0)if(x>0)y=-1+3*x;elsey=-1;elsey=-1+2*x;printf("函數(shù)值y=%d\n",y);return0;}if語(yǔ)句的嵌套說(shuō)明else總是與if成對(duì)出現(xiàn)??梢詥为?dú)使用if語(yǔ)句,但是不能單獨(dú)使用else語(yǔ)句。else總是與它上面最近的未配對(duì)的if匹配。例如:y=-1+2*x;if(x!=0)if(x>0)y=-1+3*x;elsey=-1;printf,scanf函數(shù)的使用;putchar,getchar函數(shù);%的應(yīng)用if-elseprintf函數(shù)應(yīng)用舉例#include<stdio.h>intmain(){shorta=2,c=-6,d=32768;unsignedshortm=65535;intb=32768;floatf=29.3683;doublex=1.583,y=0.992;charch='B';printf("a=%hd,a=%4hd\n",a,a);printf("b=%d,b=%-10d,b=%4d\n",b,b,b);printf("c=%hd,c=%ho,c=%hx,c=%hu\n",c,c,c,c);printf("d=%hd,d=%ho,d=%hx,d=%hu\n",d,d,d,d);printf("m=%hd,m=%ho,m=%hx,m=%hu\n",m,m,m,m);printf函數(shù)應(yīng)用舉例printf("f=%f,f=%6.2f,f=%6f,f=%d\n",f,f,f,f);printf("ch=%c,ch=%d\n",ch,ch);printf("\n%6.2f",x);printf("\n+%5.2f",y);printf("\n-------");printf("\n%6.2f\n",x+y);return0;}注意:printf函數(shù)中參數(shù)列表中的對(duì)象必須與格式控制命令的個(gè)數(shù)和類型一一對(duì)應(yīng),兩者如果不匹配則無(wú)法輸出正確結(jié)果。if語(yǔ)句的嵌套說(shuō)明常用的if-else語(yǔ)句嵌套,其嵌套的一般形式是:if(表達(dá)式1)語(yǔ)句段1elseif(表達(dá)式2)語(yǔ)句段2elseif(表達(dá)式3)語(yǔ)句段3…elseif(表達(dá)式n)語(yǔ)句段nelse語(yǔ)句段n+1這種嵌套形式又稱作else~if結(jié)構(gòu)。else~if結(jié)構(gòu)舉例編寫程序判定學(xué)生成績(jī),實(shí)現(xiàn)從鍵盤輸入一個(gè)百分制的成績(jī),輸出相應(yīng)的等級(jí):優(yōu)(90≤score≤100)、良(80≤score<90)、中等(70≤score<80)、及格(60≤score<70)、差(score<60)。#include<stdio.h>{intscore;printf("請(qǐng)輸入學(xué)生的成績(jī):");scanf("%d",&score);if(score<0||score>100)printf("輸入的成績(jī)非法\n");elseif(score<60)printf("該學(xué)生的成績(jī)類別為:差\n");else~if結(jié)構(gòu)舉例elseif(score<70)printf("該學(xué)生的成績(jī)類別為:及格\n");elseif(score<80)printf("該學(xué)生的成績(jī)類別為:中等\n");elseif(score<90)printf("該學(xué)生的成績(jī)類別為:良\n");elseprintf("該學(xué)生的成績(jī)類別為:優(yōu)\n");return0;}多分支選擇結(jié)構(gòu)——switch語(yǔ)句switch語(yǔ)句又稱為開關(guān)語(yǔ)句,是C語(yǔ)言提供的專門用于處理多分支結(jié)構(gòu)的條件選擇語(yǔ)句。switch語(yǔ)句的一般形式:switch(表達(dá)式){ case常量表達(dá)式1:語(yǔ)句段1[break;] case常量表達(dá)式2:語(yǔ)句段2[break;] … case常量表達(dá)式n:語(yǔ)句段n[break;] [default:語(yǔ)句段n+1]}switch語(yǔ)句的執(zhí)行過(guò)程計(jì)算表達(dá)式的值若表達(dá)式的值等于某個(gè)case后常量表達(dá)式的值,則程序控制轉(zhuǎn)向該case后面的語(yǔ)句。若沒(méi)有與表達(dá)式值相同的值,則執(zhí)行default后面的語(yǔ)句。switch語(yǔ)句說(shuō)明switch后面的表達(dá)式類型只能是整型、字符型或枚舉型。case后面的常量表達(dá)式必須是與表達(dá)式相對(duì)應(yīng)的整型、字符型或枚舉型常量,不能是變量和表達(dá)式,并且case和常量表達(dá)式之間要有空格。每一個(gè)case后面的常量表達(dá)式的值必須互不相同,否則會(huì)出現(xiàn)互相矛盾的現(xiàn)象。語(yǔ)句段可以是簡(jiǎn)單語(yǔ)句也可以是復(fù)合語(yǔ)句,且大括號(hào)可以省略。switch語(yǔ)句說(shuō)明如果表達(dá)式的值與所有常量表達(dá)式的值都不匹配,就執(zhí)行default后面的語(yǔ)句。如果沒(méi)有default,則流程轉(zhuǎn)到switch語(yǔ)句的下一個(gè)語(yǔ)句。case和default可以出現(xiàn)在任何位置,其前后次序不影響執(zhí)行結(jié)果。若語(yǔ)句段中break語(yǔ)句,執(zhí)行完此語(yǔ)句段后,終止switch的執(zhí)行。否則,流程控制轉(zhuǎn)到下一個(gè)case(包括default)中的語(yǔ)句繼續(xù)執(zhí)行。case提供了執(zhí)行某一語(yǔ)句段的入口,起著標(biāo)號(hào)的作用;多個(gè)case可以執(zhí)行同一語(yǔ)句段。switch語(yǔ)句應(yīng)用舉例編寫程序判定學(xué)生成績(jī),實(shí)現(xiàn)從鍵盤輸入一個(gè)百分制的成績(jī),輸出相應(yīng)的等級(jí):優(yōu)(90≤score≤100)、良(80≤score<90)、中等(70≤score<80)、及格(60≤score<70)、差(score<60)。#include<stdio.h>{intscore;printf("請(qǐng)輸入學(xué)生的成績(jī):");scanf("%d",&score);if(score<0||score>100){printf("輸入的不是一個(gè)合理百分成績(jī)\n");return0;}switch(score/10){switch語(yǔ)句應(yīng)用舉例case0:case1:case2:case3:case4:case5:printf("學(xué)生成績(jī)?yōu)椋翰頫n");break;case6:printf("學(xué)生成績(jī)?yōu)椋杭案馶n");break;case7:printf("學(xué)生成績(jī)?yōu)椋褐械萛n");break;case8:printf("學(xué)生成績(jī)?yōu)椋毫糪n");break;case9:case10:printf("學(xué)生成績(jī)?yōu)椋簝?yōu)\n");break;}return0;}選擇結(jié)構(gòu)應(yīng)用舉例輸入一個(gè)年份,判斷該年是否為閏年。#include<stdio.h>{intyear,leap;printf("請(qǐng)輸入年份:");scanf("%d",&year);if(year%4==0)//能被4整除{if(year%100==0){if(year%400==0)leap=1;//能被400整除elseleap=0;//能被100整除,不能被400整除}選擇結(jié)構(gòu)應(yīng)用舉例elseleap=1;//能被4整除,不能被100整除}elseleap=0;//不能被4整除if(leap)printf("%d年是閏年\n",year);elseprintf("%d年不是閏年\n",year);return0;}

判斷閏年的條件是:year能被400整除或者year能被4整除,但不能被100整除,就是閏年,則可通過(guò)邏輯運(yùn)算將條件組合判斷,程序修改如下:選擇結(jié)構(gòu)應(yīng)用舉例#include<stdio.h>{intyear,leap;printf("請(qǐng)輸入年份:");scanf("%d",&year);

if(year%4==0&&year%100!=0||year%400==0)printf("%d年是閏年\n",year);elseprintf("%d年不是閏年\n",year);return0;}選擇結(jié)構(gòu)應(yīng)用舉例編寫程序,實(shí)現(xiàn)四則運(yùn)算的簡(jiǎn)單計(jì)算器功能。#include<stdio.h>{floata,b;charoper;//定義操作符printf("輸入a、運(yùn)算符和b:\n");scanf("%f%c%f",&a,&oper,&b);printf("運(yùn)行結(jié)果為:\n");printf("%.2f%c%.2f=",a,oper,b);switch(oper){case'+':printf("%.2f\n",a+b);break;case'-':printf("%.2f\n",a-b);break;case'*':printf("%.2f\n",a*b);break;case'/':printf("%.2f\n",a/b);break;}return0;}基本內(nèi)容選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)順序結(jié)構(gòu)本章小結(jié)循環(huán)結(jié)構(gòu)在解決實(shí)際問(wèn)題時(shí),程序中除了使用前面介紹的輸入、輸出和分支選擇語(yǔ)句外,還需要重復(fù)執(zhí)行相同的某些操作,C語(yǔ)言提供了三種循環(huán)語(yǔ)句:while語(yǔ)句、do-while語(yǔ)句和for語(yǔ)句。構(gòu)成循環(huán)的基本要素循環(huán)控制表達(dá)式及循環(huán)控制變量循環(huán)體語(yǔ)句初始條件設(shè)置語(yǔ)句循環(huán)變量修改語(yǔ)句while語(yǔ)句while循環(huán)也稱為當(dāng)型循環(huán),當(dāng)型循環(huán)的特點(diǎn)是“先判斷再執(zhí)行”,即首先判斷循環(huán)控制表達(dá)式,當(dāng)循環(huán)控制表達(dá)式為真時(shí),程序控制流執(zhí)行循環(huán)體語(yǔ)句,直到循環(huán)條件不成立為止。while語(yǔ)句的一般形式是:while(表達(dá)式)語(yǔ)句while語(yǔ)句應(yīng)用舉例輸入兩個(gè)整數(shù),采用“輾轉(zhuǎn)相除法”求這兩個(gè)數(shù)的最大公約數(shù)。#include<stdio.h>{intm,m1,n,n1,r;printf("請(qǐng)輸入兩個(gè)正整數(shù)m和n:\n");scanf("%d%d",&m,&n);m1=m;n1=n;//保留m和n的值r=m%n;while(r!=0){m=n;n=r;r=m%n;}printf("正整數(shù)%d和%d的最大公約數(shù)是:%d\n",m1,n1,n);return0;}do~while語(yǔ)句do~while循環(huán)也稱為直到型循環(huán),直到型循環(huán)的特點(diǎn)是“先執(zhí)行,后判斷”。即先執(zhí)行循環(huán)體,再判斷循環(huán)條件是否成立,如果循環(huán)條件為真則繼續(xù)執(zhí)行循環(huán)體,直到循環(huán)條件變?yōu)榧佟o~while語(yǔ)句的一般形式是:do{語(yǔ)句}while(表達(dá)式);do~while語(yǔ)句應(yīng)用舉例用公式求π的近似值,直到最后一項(xiàng)的絕對(duì)值小于10-6為止。#include<stdio.h>#include<math.h>{intsign=1;floatn,term,pi;pi=0;term=1;n=1;//變量賦初值do{pi+=term;n=n+2;sign=-sign;term=sign/n;}while(fabs(term)>=1e-6);pi*=4;printf("pi=%f\n",pi);return0;}for語(yǔ)句C語(yǔ)言提供的for循環(huán)語(yǔ)句使用很靈活,既可以用于已知循環(huán)次數(shù)的情況,也可以用于循環(huán)次數(shù)不確定而只有循環(huán)結(jié)束條件的情況,可以代替while和do~while循環(huán)。for語(yǔ)句的一般形式是:for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語(yǔ)句for語(yǔ)句執(zhí)行流程(1)計(jì)算<表達(dá)式1>的值。(2)計(jì)算<表達(dá)式2>的值,若為真(非0),則執(zhí)行循環(huán)體,然后轉(zhuǎn)向第(3)步。若為假(0)則轉(zhuǎn)向第(5)步。(3)執(zhí)行循環(huán)體(4)計(jì)算<表達(dá)式3>的值,然后轉(zhuǎn)向第(2)步。(5)結(jié)束循環(huán),執(zhí)行for循環(huán)后的語(yǔ)句。for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語(yǔ)句for語(yǔ)句應(yīng)用舉例利用for語(yǔ)句求1~100之間的和。#include<stdio.h>{inti,sum=0;for(i=1;i<=100;i++)sum+=i;printf("sum=%d\n",sum);return0;}for語(yǔ)句最容易理解、最常用的形式是:

for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)循環(huán)體順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)main(){ intnum=0; while(num<=2) { num++;printf(“%d\n”,num); }}main(){ inti,m=1; for(i=5;i>=1;i--) { m=(m+1)*2; printf(“m=%d\n”,m); }}for語(yǔ)句使用說(shuō)明可以將for語(yǔ)句的形式改寫成while語(yǔ)句的形式。for語(yǔ)句中的表達(dá)式1、表達(dá)式2、表達(dá)式3每一個(gè)都可以省略,甚至三個(gè)表達(dá)式都可以同時(shí)省略,但是起分隔作用的“;”不能省略。for(;;)printf("%d\n",i);等價(jià)于:while(1)printf("%d\n",i);for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句改成while語(yǔ)句:表達(dá)式1;while(表達(dá)式2){語(yǔ)句表達(dá)式3;}for(i=1;i<=100;i++)sum+=i;改成while語(yǔ)句:i=1;while(i<=100){sum+=i;i++3;}如果省略表達(dá)式1,表示不在for語(yǔ)句中給循環(huán)變量賦初值,為了能正常執(zhí)行循環(huán),應(yīng)在for語(yǔ)句前給循環(huán)變量賦初值。例如:fac=1.0;i=1;for(;i<=n;i++) fac=fac*i;例如:for(i=1,fac=1.0;;i++)//省略表達(dá)式2{ fac=fac*i; if(i==n) break;//終止循環(huán)}for語(yǔ)句使用說(shuō)明如果省略表達(dá)式2,即不存在判斷循環(huán)終止的條件,也就是認(rèn)為表達(dá)式2恒為“真”,此時(shí)的循環(huán)是“死循環(huán)”。若要終止循環(huán),應(yīng)在循環(huán)體中設(shè)置終止循環(huán)的機(jī)制。如果省略表達(dá)式3,即不在此位置進(jìn)行循環(huán)變量的修改,則應(yīng)在其它位置(如循環(huán)體中)設(shè)置使循環(huán)趨于結(jié)束的操作。如果省略了表達(dá)式1和表達(dá)式3,只給出表達(dá)式2,則表達(dá)式1和表達(dá)式3的值應(yīng)在相應(yīng)的位置進(jìn)行賦值。例如:for(i=1,fac=1.0;i<=n;){fac=fac*i;i++;//此處改變循環(huán)變量的值}表達(dá)式2一般是關(guān)系表達(dá)式或邏輯表達(dá)式,也可以是數(shù)值表達(dá)式或字符表達(dá)式,只要其值非0,就執(zhí)行循環(huán)體。例如:for(sum=0;i<=100;i++)sum+=i;再例:for(i=1,fac=1.0;i<=n;fac*=i,i++);例如:

for(i=0;(ch=getchar())!='\n';i+=c);for語(yǔ)句使用說(shuō)明表達(dá)式1可以是與循環(huán)變量無(wú)關(guān)的其它表達(dá)式;表達(dá)式3也可以是與修改循環(huán)變量無(wú)關(guān)的表達(dá)式。并且表達(dá)式1和表達(dá)式3可以是簡(jiǎn)單表達(dá)式,也可以是逗號(hào)表達(dá)式。循環(huán)嵌套一個(gè)循環(huán)語(yǔ)句的循環(huán)體內(nèi)如果包含另一個(gè)完整的循環(huán),這種循環(huán)之間的層次關(guān)系就構(gòu)成了循環(huán)的嵌套。內(nèi)嵌循環(huán)的循環(huán)體中還可以再嵌套循環(huán),由此可以構(gòu)成多層循環(huán)。C語(yǔ)言提供的三種循環(huán)語(yǔ)句之間可以實(shí)現(xiàn)相互嵌套。編寫程序,以三角的形式打印九九乘法表。#include<stdio.h>intmain(){inti,j;for(i=1;i<10;i++){for(j=1;j<=i;j++)printf("%d*%d=%d\t",j,i,i*j);printf("\n");}return0;}循環(huán)嵌套舉例循環(huán)嵌套循環(huán)嵌套說(shuō)明理論上循環(huán)嵌套的深度不受限制,但在實(shí)際應(yīng)用中不提倡使用嵌套層次太多的循環(huán)結(jié)構(gòu)。使用嵌套結(jié)構(gòu)時(shí),要注意嵌套不能交叉。嵌套的內(nèi)外層循環(huán)不能使用同名的循環(huán)變量,而并列結(jié)構(gòu)的循環(huán)允許使用同名的循環(huán)變量。break和continue語(yǔ)句C語(yǔ)言提供break和continue語(yǔ)句用于中斷正常的控制流。break語(yǔ)句強(qiáng)制從switch語(yǔ)句和循環(huán)語(yǔ)句中退出。而continue語(yǔ)句是強(qiáng)制結(jié)束本次循環(huán),開始下一次循環(huán)。在循環(huán)中break語(yǔ)句通常和if條件語(yǔ)句搭配使用,用于檢測(cè)當(dāng)某個(gè)條件成立時(shí)跳出循環(huán)。而continue語(yǔ)句和if條件語(yǔ)句配合使用,判斷是否退出循環(huán)的當(dāng)前迭代。break和continue語(yǔ)句說(shuō)明break語(yǔ)句只能用于switch語(yǔ)句和循環(huán)語(yǔ)句。而continue語(yǔ)句只能用于循環(huán)語(yǔ)句break語(yǔ)句只能用于循環(huán)體內(nèi),不能用于循環(huán)表達(dá)式內(nèi)。break語(yǔ)句只能跳出一層循環(huán),即當(dāng)前的循環(huán)。continue和break語(yǔ)句的區(qū)別:break語(yǔ)句是中斷所在的整個(gè)循環(huán),把控制轉(zhuǎn)移到緊隨循環(huán)之后的語(yǔ)句,而continue語(yǔ)句并沒(méi)有使整個(gè)循環(huán)終止,只是終止了循環(huán)的當(dāng)前迭代。break語(yǔ)句應(yīng)用舉例隨機(jī)產(chǎn)生兩個(gè)兩位數(shù),進(jìn)行加法測(cè)試,由用戶回答,直到回答正確為止。#include<stdio.h>#include<stdlib.h>#include<time.h>intmain(){inta,b,result,answer;srand(time(0));//利用系統(tǒng)時(shí)間產(chǎn)生一個(gè)隨機(jī)數(shù)種子a=rand()%89+10;//產(chǎn)生10到99之間的隨機(jī)整數(shù)b=rand()%89+10;result=a+b;break語(yǔ)句應(yīng)用舉例while(1){scanf("%d",&answer);if(answer==result){printf("回答正確\n");printf("%d+%d=",a,b);break;}elseprintf("回答錯(cuò)誤,請(qǐng)重新計(jì)算。

溫馨提示

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