C語(yǔ)言程序設(shè)計(jì) C語(yǔ)言控制語(yǔ)句_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì) C語(yǔ)言控制語(yǔ)句_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì) C語(yǔ)言控制語(yǔ)句_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì) C語(yǔ)言控制語(yǔ)句_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì) C語(yǔ)言控制語(yǔ)句_第5頁(yè)
已閱讀5頁(yè),還剩107頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

會(huì)計(jì)學(xué)1C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言控制語(yǔ)句2023/1/19本章介紹數(shù)據(jù)輸出數(shù)據(jù)輸入順序結(jié)構(gòu)程序設(shè)計(jì)分支結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第1頁(yè)/共112頁(yè)2023/1/19程序的三種基本結(jié)構(gòu)順序結(jié)構(gòu)N-S結(jié)構(gòu)圖流程圖ABAB選擇結(jié)構(gòu)YNABP成立?PTFAB第2頁(yè)/共112頁(yè)2023/1/19程序的三種基本結(jié)構(gòu)循環(huán)結(jié)構(gòu)NYP成立?A當(dāng)P成立時(shí)

A直到型循環(huán)

A當(dāng)P成立時(shí)YNAP成立?當(dāng)型循環(huán)N-S結(jié)構(gòu)圖流程圖第3頁(yè)/共112頁(yè)2023/1/193.1結(jié)構(gòu)化程序設(shè)計(jì)3種基本結(jié)構(gòu)特點(diǎn):只有一個(gè)入口和一個(gè)出口結(jié)構(gòu)內(nèi)的每一個(gè)框都有機(jī)會(huì)被執(zhí)行結(jié)構(gòu)內(nèi)沒(méi)有死循環(huán)僅包含3種基本結(jié)構(gòu)的程序稱(chēng)為結(jié)構(gòu)化程序第4頁(yè)/共112頁(yè)2023/1/193.2順序結(jié)構(gòu)程序設(shè)計(jì)主要內(nèi)容:字符輸出函數(shù)格式輸出函數(shù)字符輸入函數(shù)格式輸入函數(shù)順序結(jié)構(gòu)程序設(shè)計(jì)舉例第5頁(yè)/共112頁(yè)2023/1/193.2.1字符輸出函數(shù)函數(shù)調(diào)用的一般形式

putchar(ch)功能:在標(biāo)準(zhǔn)輸出設(shè)備(即顯示器屏幕)上輸出一個(gè)字符。例如:putchar(‘b’);putchar(‘\n’);putchar('\101');putchar(st);輸出:b輸出:回車(chē)換行輸出:A第6頁(yè)/共112頁(yè)2023/1/19說(shuō)明putchar是C語(yǔ)言的標(biāo)準(zhǔn)庫(kù)函數(shù),使用時(shí)必須加編譯預(yù)處理命令:#include"stdio.h"

#include<stdio.h>【例3.1】利用putchar函數(shù)輸出字符。#include"stdio.h"

main(){charc1,c2;c1='a';c2='b';putchar(c1);putchar(c2);putchar('\n');putchar(c1-32);putchar(c2-32);putchar('\n');}也可改為c1=97;c2=98;

輸出結(jié)果:abAB第7頁(yè)/共112頁(yè)2023/1/193.2.2格式輸出函數(shù)函數(shù)調(diào)用的一般形式printf("格式控制字符串",輸出表列)

功能:按格式控制所指定的格式,在標(biāo)準(zhǔn)輸出設(shè)備上輸出

輸出表列各項(xiàng)的值。例如有程序段:inta=123,b=100;printf("%d%d%d\n",a,b,a+b);printf("c=%d+%d=%d\n",a,b,a+b);2023/1/19輸出:123100223輸出:c=123+100=223第8頁(yè)/共112頁(yè)2023/1/19格式控制字符串用雙引號(hào)括起的字符串,用于指定輸出數(shù)據(jù)的類(lèi)型、格式、個(gè)數(shù)包括:非格式字符和格式字符照原樣輸出

printf("c=%d+%d=%d\n",a,b,a+b);格式字符:指定輸出3個(gè)十進(jìn)制整型數(shù),分別為變量a、b、a+b的值第9頁(yè)/共112頁(yè)2023/1/19輸出格式說(shuō)明符整型數(shù)據(jù)

%d以有符號(hào)十進(jìn)制形式輸出整型數(shù)%o以無(wú)符號(hào)八進(jìn)制形式輸出整型數(shù)%x以無(wú)符號(hào)十六進(jìn)制形式輸出整型數(shù)%u以無(wú)符號(hào)十進(jìn)制形式輸出整型數(shù)實(shí)型數(shù)據(jù)

%f以小數(shù)形式輸出實(shí)型數(shù)%e以指數(shù)形式輸出實(shí)型數(shù)%g按數(shù)值寬度最小的形式輸出實(shí)型數(shù)字符型數(shù)據(jù)

%c輸出一個(gè)字符%s輸出字符串其他

%%輸出字符%本身在%和格式符之間可以使用附加說(shuō)明符第10頁(yè)/共112頁(yè)2023/1/19附加格式說(shuō)明符l輸出長(zhǎng)整型數(shù)(只可與d、o、x、u結(jié)合用)m指定數(shù)據(jù)輸出的寬度(即域?qū)挘?n對(duì)實(shí)型數(shù)據(jù),指定輸出n位小數(shù);對(duì)字符串,指定左端截取n個(gè)字符輸出+使輸出的數(shù)值數(shù)據(jù)無(wú)論正負(fù)都帶符號(hào)輸出-使數(shù)據(jù)在輸出域內(nèi)按左對(duì)齊方式輸出整數(shù)位數(shù)+小數(shù)位數(shù)+小數(shù)點(diǎn)自動(dòng)對(duì)n位后小數(shù)四舍五入

例如:%ld——輸出十進(jìn)制長(zhǎng)整型數(shù)

%m.nf——右對(duì)齊,m位域?qū)?,n位小數(shù)或n個(gè)字符%-m.nf——左對(duì)齊第11頁(yè)/共112頁(yè)2023/1/19例3.2整型數(shù)據(jù)的輸出main(){inta=11,b=22;

intm=-1;longn=123456789;printf("%d%d\n",a,b);printf("a=%d,b=%d\n",a,b);printf("m:%d,%o,%x,%u\n",m,m,m,m);printf("n=%d\n",n);printf("n=%ld\n",n);}程序輸出:1122a=11,b=22m:-1,37777777777,ffffffff,4294967295n=123456789n=123456789VC++環(huán)境下運(yùn)行結(jié)果第12頁(yè)/共112頁(yè)2023/1/19例3.3實(shí)型數(shù)據(jù)的輸出main(){floatx=1234.56,y=1.23456789;

doublez=1234567.123456789;printf("x=%f,y=%f\n",x,y);printf("z=%f\n",z);printf("z=%e\n",z);printf("z=%18.8f\n",z);printf("x=%10.3f\n",x);printf("x=%-10.3f\n",x);printf("x=%4.3f\n\n",x);}程序輸出:x=1234.560059,y=1.234568z=1234567.123457z=1.23457e+06z=1234567.12345679x=1234.560x=1234.560x=1234.560第13頁(yè)/共112頁(yè)2023/1/19例3.4字符型數(shù)據(jù)的輸出main(){intm=97;

charch='B';printf("m:%d%c\n",m,m);printf("ch:%d%c\n",ch,ch);printf("%s\n","student");printf("%10s\n","student");printf("%-10s\n","student");printf("%10.3s\n","student");printf("%.3s\n\n","student");}程序輸出:m:97ach:66Bstudentstudentstudentstustu第14頁(yè)/共112頁(yè)2023/1/19注意:printf函數(shù)格式控制中的格式字符與輸出表列參數(shù)的個(gè)數(shù)和類(lèi)型必須一一對(duì)應(yīng)。格式說(shuō)明符的%和后面的描述符之間不能有空格。長(zhǎng)整型數(shù)應(yīng)該用%ld(或%lo、%lx、%lu)格式輸出,否則會(huì)出現(xiàn)輸出錯(cuò)誤。printf函數(shù)的參數(shù)可以是常量、變量或表達(dá)式。第15頁(yè)/共112頁(yè)2023/1/193.2.3字符輸入函數(shù)函數(shù)調(diào)用的一般形式

getchar()功能:從標(biāo)準(zhǔn)輸入設(shè)備(即鍵盤(pán))上輸入一個(gè)字符。例如:getchar();c=getchar();printf("%c\n",getchar());第16頁(yè)/共112頁(yè)2023/1/19例如:【例3.5】getchar函數(shù)的應(yīng)用。

#include"stdio.h"main(){charch;

ch=getchar();printf("%c%d\n",ch,ch);printf("%c%d\n",ch-32,ch-32);}程序運(yùn)行時(shí)輸入:m

并按回車(chē)鍵后輸出結(jié)果是:m109M77第17頁(yè)/共112頁(yè)2023/1/19說(shuō)明:getchar是C語(yǔ)言的標(biāo)準(zhǔn)庫(kù)函數(shù),使用時(shí)必須加編譯預(yù)處理命令:#include"stdio.h"

#include<stdio.h>getchar函數(shù)需要交互輸入,接收到輸入字符之后才繼續(xù)執(zhí)行程序。連續(xù)使用getchar函數(shù)時(shí),要注意字符的輸入形式,例如執(zhí)行如下程序段:charch1,ch2;ch1=getchar();ch2=getchar();必須連續(xù)輸入兩個(gè)字符,中間不能有其他字符第18頁(yè)/共112頁(yè)2023/1/193.2.4格式輸入函數(shù)函數(shù)調(diào)用的一般形式scanf("格式控制字符串",地址表列);功能:按格式控制指定的格式,從標(biāo)準(zhǔn)輸入設(shè)備(即鍵盤(pán))交互輸入數(shù)據(jù),并依次存放到對(duì)應(yīng)地址表列參數(shù)指定的變量中(即將輸入值賦給變量)。

例如:scanf("%d%f",&a,&f);scanf("%o,%f",&b,&x);scanf("a=%d,b=%d",&a,&b);第19頁(yè)/共112頁(yè)2023/1/19格式控制字符串用雙引號(hào)括起的字符串,用于指定輸入數(shù)據(jù)的類(lèi)型、格式、個(gè)數(shù)以及輸入的形式

包括:非格式字符和格式字符照原樣輸入

scanf("a=%d,b=%d",&a,&b);格式字符:指定輸入2個(gè)十進(jìn)制整型數(shù)賦給變量a和b第20頁(yè)/共112頁(yè)2023/1/19輸入格式說(shuō)明符整型數(shù)據(jù)

%d輸入十進(jìn)制整型數(shù)%u輸入無(wú)符號(hào)的十進(jìn)制整型數(shù)%o輸入八進(jìn)制整型數(shù)%x輸入十六進(jìn)制整型數(shù)實(shí)型數(shù)據(jù)

%f輸入小數(shù)形式的單精度實(shí)型數(shù)%e輸入指數(shù)形式的單精度實(shí)型數(shù)字符型數(shù)據(jù)

%c輸入單個(gè)字符%s輸入一個(gè)字符串在%和格式符之間可以使用附加說(shuō)明符第21頁(yè)/共112頁(yè)2023/1/19附加格式說(shuō)明符l與d、o、x、u結(jié)合輸入長(zhǎng)整型數(shù)與f結(jié)合輸入double型數(shù)h與d、o、x、u結(jié)合輸入短整型數(shù)m指定輸入數(shù)據(jù)的寬度*忽略讀入的數(shù)據(jù)(即不將讀入數(shù)據(jù)賦給相應(yīng)變量)例如:%ld、%lo——輸入十進(jìn)制、八進(jìn)制長(zhǎng)整型數(shù)%lf、%le——輸入雙精度實(shí)型數(shù)%mf——輸入m位數(shù)(域?qū)挘?*d——忽略輸入的一個(gè)整型數(shù)此變量接收下一個(gè)數(shù)據(jù)對(duì)float和double型指整數(shù)位數(shù)+小數(shù)點(diǎn)+小數(shù)位數(shù)第22頁(yè)/共112頁(yè)2023/1/19例如:scanf("%d%d%d",&a,&b,&c);

輸入3個(gè)十進(jìn)制整型數(shù),以空白符(空格、tab鍵或回車(chē)鍵)分隔

scanf("%d,%o,%f",&a,&b,&x);

輸入3個(gè)數(shù),以“,”分隔scanf("a=%d,b=%d",&a,&b);

輸入的形式是:a=32,b=28(普通字符要照原樣輸入)第23頁(yè)/共112頁(yè)2023/1/19程序舉例例1:格式控制串中分隔符的應(yīng)用。main(){inta,b,c,d;scanf("%d%d",&a,&b);scanf("%d,%d",&c,&d);printf("\n%d,%d,%d,%d",a,b,c,d);}運(yùn)行時(shí)輸入:123,4輸出:可以這樣輸入嗎?123,4輸出:1,2,3,41,2,3,4第24頁(yè)/共112頁(yè)2023/1/19例2:c格式符的使用。main(){charc1,c2,c3;scanf("%c%c",&c1,&c2);scanf("%c",&c3);printf(“%c,%c,%c\n",c1,c2,c3);}運(yùn)行時(shí)輸入:ABC輸出:?思考:若輸入:AB(回車(chē))C輸出:?第25頁(yè)/共112頁(yè)2023/1/19例3:f格式符的使用。main(){floatx,y;doublez;scanf("%f",&x);scanf("%6f%6lf",&y,&z);printf("x=%f,y=%f,z=%12.8f\n",x,y,z);}運(yùn)行時(shí)輸入:531.56212.345678.315輸出:注意:float型7位有效,double型15~16位有效。x=531.562012,y=12.345000,z=678.31000000第26頁(yè)/共112頁(yè)2023/1/19例4.s格式符的使用。main(){chara[10],b[10];scanf("%s%s",a,b);printf("%s\n%s\n",a,b);}運(yùn)行時(shí)輸入:Howdo

you

do!輸出:Howdo第27頁(yè)/共112頁(yè)2023/1/19例5.抑制符的使用。main(){inta,b;scanf(“%2d%*3d%2d”,&a,&b);printf(“a=%db=%d”,a,b);}輸入:1234567輸出:?a=12b=67第28頁(yè)/共112頁(yè)2023/1/19使用scanf函數(shù)應(yīng)注意:要求在程序運(yùn)行中輸入數(shù)據(jù),輸入的數(shù)據(jù)個(gè)數(shù)和類(lèi)型必須與格式說(shuō)明符一一對(duì)應(yīng)。地址參數(shù)形式:&變量名(除數(shù)組或指針變量)。

格式控制中有非格式字符時(shí),必須照原樣輸入。格式控制中無(wú)非格式字符時(shí),輸入的數(shù)值型數(shù)據(jù)和字符串用空白符分隔,字符型數(shù)據(jù)不必分隔。double型數(shù)據(jù)輸入時(shí),必須用%lf或%le格式。實(shí)型數(shù)輸入時(shí)域?qū)挷荒苡胢.n形式的附加說(shuō)明。為了減少不必要的輸入量,格式控制中盡量不要出現(xiàn)普通字符,也不要使用

‘\n’

、‘\t’

等轉(zhuǎn)義字符。第29頁(yè)/共112頁(yè)2023/1/19scanf("%c%c%c",&ch1,&ch2,&ch3);要輸入:abc不能輸入:abc注意數(shù)值型數(shù)據(jù)與char型數(shù)據(jù)的混合輸入注意(續(xù)):格式符之間若無(wú)普通字符,則:輸入的數(shù)值型數(shù)據(jù)用空白符分隔輸入的char型數(shù)據(jù)不必分隔

例如:scanf("%d%d",&m,&n);scanf("%c",&ch);錯(cuò)誤輸入:3228a

正確輸入:3228a

第30頁(yè)/共112頁(yè)2023/1/193.2.5順序結(jié)構(gòu)程序設(shè)計(jì)舉例順序結(jié)構(gòu)程序的一般算法描述變量定義變量賦值運(yùn)算處理輸出結(jié)果可用:變量初始化賦值語(yǔ)句輸入函數(shù)調(diào)用語(yǔ)句注意各個(gè)語(yǔ)句的順序第31頁(yè)/共112頁(yè)2023/1/193.2.5順序結(jié)構(gòu)程序設(shè)計(jì)舉例【例3-11】數(shù)據(jù)交換。從鍵盤(pán)輸入a、b的值,輸出交換以后的值。

思路:在計(jì)算機(jī)中交換變量a和b的值:a=b;b=a;?正確的交換方法:a123b78c?12378123c=a;a=b;b=c;第32頁(yè)/共112頁(yè)2023/1/19程序:main(){inta,b,c;printf("\ninputa,b:");scanf("%d,%d",&a,&b);printf("\nbeforeexchange:a=%db=%d\n",a,b);

c=a;a=b;b=c;/*數(shù)據(jù)交換*/printf("afterexchange:a=%db=%d\n",a,b);}程序運(yùn)行情況如下:inputa,b:32,57

beforeexchange:a=32b=57afterexchange:a=57b=32

第33頁(yè)/共112頁(yè)2023/1/19舉例(補(bǔ)充)【例3.6】已知三條邊a、b、c,求三角形面積。計(jì)算三角形面積的海倫公式:其中:設(shè)定義:整型變量a、b、c實(shí)型變量s、area第34頁(yè)/共112頁(yè)2023/1/19程序如下:#include"math.h"main(){inta,b,c;floats,area;scanf("%d,%d,%d",&a,&b,&c);s=1/2*(a+b+c);area=sqrt(s(s-a)(s-b)(s-c));printf("area=%8.3f\n",area);}程序運(yùn)行情況如下:3,4,5

area=6.000

實(shí)際上還需要判斷a、b、c是否能構(gòu)成三角形,即應(yīng)該進(jìn)行選擇判斷處理第35頁(yè)/共112頁(yè)2023/1/19舉例(補(bǔ)充)【例3.7】從鍵盤(pán)輸入兩個(gè)整數(shù),輸出它們相除的余數(shù)及商(要求保留2位小數(shù))。

例如輸入的m和n分別為100和18,輸出形式為:m%n=10m/n=5.56

main(){intm,n;printf("\ninputm,n:");scanf("%d,%d",&m,&n);printf("\nm%%n=%d\n",m%n);printf("m/n=%.2f\n",(float)m/n);}第36頁(yè)/共112頁(yè)2023/1/19舉例:【例3-12】輸入時(shí)間(時(shí)、分、秒),然后打印輸出共計(jì)多少秒?分析:第37頁(yè)/共112頁(yè)2023/1/19程序如下:#include<stdio.h>voidmain(){ shorthour,min,sec; longtotal; printf("%nEnterhour:min:sec:"); scanf("%d:%d:%d",&hour,&min,&sec); total=hour*3600+min*60+sec; printf("\nThetotalsecond=%ld",total);}程序運(yùn)行情況如下:Enterhour:min:sec:3:10:50Thetotalsecond=11450思考:total的數(shù)據(jù)類(lèi)型如何處理?第38頁(yè)/共112頁(yè)2023/1/1940提出問(wèn)題:自然語(yǔ)言:如果…則…

否則…C語(yǔ)言:分支語(yǔ)句?問(wèn)題1:如何根據(jù)收入,確定他的納稅比例及納稅額??

問(wèn)題2如何根據(jù)學(xué)生的分?jǐn)?shù)判斷是否及格?第39頁(yè)/共112頁(yè)2023/1/19413.3分支結(jié)構(gòu)程序設(shè)計(jì)3.3.1if條件分支語(yǔ)句3.3.2switch多路開(kāi)關(guān)語(yǔ)句第40頁(yè)/共112頁(yè)2023/1/1942單分支語(yǔ)句語(yǔ)句一般格式if(表達(dá)式)

語(yǔ)句功能:計(jì)算表達(dá)式的值,如果是一個(gè)非0值(即邏輯真),就執(zhí)行內(nèi)嵌語(yǔ)句,否則(即邏輯假)跳過(guò)內(nèi)嵌語(yǔ)句,順序執(zhí)行后續(xù)語(yǔ)句。內(nèi)嵌語(yǔ)句,可為:賦值語(yǔ)句函數(shù)調(diào)用語(yǔ)句控制語(yǔ)句復(fù)合語(yǔ)句空語(yǔ)句可為算術(shù)、關(guān)系、邏輯、賦值等合法的表達(dá)式第41頁(yè)/共112頁(yè)2023/1/1943單分支語(yǔ)句的算法:例如:⑴if(x>0)m++;⑵if(a>b){c=a;a=b;b=c;}

表達(dá)式非0

TF

語(yǔ)句N(xiāo)-S結(jié)構(gòu)圖語(yǔ)句流程圖NY表達(dá)式非0?第42頁(yè)/共112頁(yè)2023/1/1944雙分支語(yǔ)句語(yǔ)句一般格式if(表達(dá)式)

語(yǔ)句1

else語(yǔ)句2

功能:計(jì)算表達(dá)式的值,如果它的值是一個(gè)非0值(邏輯真),就執(zhí)行內(nèi)嵌語(yǔ)句1,之后跳過(guò)內(nèi)嵌語(yǔ)句2,執(zhí)行后續(xù)語(yǔ)句;否則跳過(guò)內(nèi)嵌語(yǔ)句1,執(zhí)行內(nèi)嵌語(yǔ)句2,之后執(zhí)行后續(xù)語(yǔ)句。

第43頁(yè)/共112頁(yè)2023/1/1945雙分支語(yǔ)句的算法:例如:⑴if(x>0)m++;elsem--;⑵if(ch>='a'&&ch<='z')

{ch=ch-32;

printf("%c\n",ch);}elseprintf("%c\n",ch);

表達(dá)式非0

TF

語(yǔ)句1語(yǔ)句2N-S結(jié)構(gòu)圖語(yǔ)句1

語(yǔ)句2流程圖NY表達(dá)式非0?第44頁(yè)/共112頁(yè)2023/1/1946多分支語(yǔ)句語(yǔ)句一般格式if(表達(dá)式1)

語(yǔ)句1

elseif(表達(dá)式2)

語(yǔ)句2

……

elseif(表達(dá)式n-1)

語(yǔ)句n-1

else語(yǔ)句

n功能:依次計(jì)算并判斷表達(dá)式i,為非0時(shí)執(zhí)行后面的語(yǔ)句,都為0時(shí),執(zhí)行語(yǔ)句n無(wú)論執(zhí)行完哪個(gè)語(yǔ)句分支,都轉(zhuǎn)到后續(xù)語(yǔ)句第45頁(yè)/共112頁(yè)2023/1/1947多重分支語(yǔ)句的算法流程圖表達(dá)式2?表達(dá)式1?語(yǔ)句n語(yǔ)句1

語(yǔ)句2語(yǔ)句n-1…YNYNNY表達(dá)式n-1?第46頁(yè)/共112頁(yè)2023/1/1948多重分支語(yǔ)句的算法N-S結(jié)構(gòu)圖表達(dá)式1?

TF

表達(dá)式2?語(yǔ)句1TF

語(yǔ)句2…

表達(dá)式n-1?TF

語(yǔ)句n-1語(yǔ)句n例如:if(a<0)x=-1;elseif(a==0)x=0;elsex=1;第47頁(yè)/共112頁(yè)2023/1/1949if語(yǔ)句的簡(jiǎn)單應(yīng)用【例3-14】設(shè)x與y有如下函數(shù)關(guān)系,根據(jù)輸入的x,計(jì)算y的值輸入:用scanf函數(shù)計(jì)算:根據(jù)x的值,應(yīng)用不同的算式輸出:用printf函數(shù)思路:y=x-7(x>0)2

(x=0)3x2(x<0)第48頁(yè)/共112頁(yè)2023/1/1950程序分析:第49頁(yè)/共112頁(yè)2023/1/1951程序:#include<stdio.h>voidmain(){ floatx,y; printf("\n"); scanf("%f",&x); if(x>0)y=x-7; if(x==0)y=2; if(x<0)y=3*x*x; printf("%.2f\n",y);}程序運(yùn)行情況如下:3.8-3.20

鍵盤(pán)輸入elseelse第50頁(yè)/共112頁(yè)2023/1/1952if語(yǔ)句的簡(jiǎn)單應(yīng)用【例3.8】輸入一個(gè)字符,如果是大寫(xiě)字母,則將其轉(zhuǎn)換為小寫(xiě)字母輸出,否則直接輸出。輸入:用getchar或scanf函數(shù)ch是否為大寫(xiě)字母:ch>='A'&&ch<='Z'(或ch>=65&&ch<=90)大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母:ch=ch+32輸出:用putchar或printf函數(shù)思路:第51頁(yè)/共112頁(yè)2023/1/1953程序:#include"stdio.h"main(){charch;ch=getchar();if(ch>='A'&&ch<='Z')ch=ch+32;printf("%c\n",ch);}程序運(yùn)行情況如下:Gg

能使用條件表達(dá)式代替嗎?putchar(ch>='A'&&ch<='Z'?ch+32:ch);putchar('\n')第52頁(yè)/共112頁(yè)2023/1/1954(3)if語(yǔ)句的嵌套如果if的內(nèi)嵌語(yǔ)句中又使用了一個(gè)if語(yǔ)句,則構(gòu)成if語(yǔ)句的嵌套。

【例3.9】比較兩個(gè)整數(shù)的關(guān)系。#include<stdio.h>main(){intx,y;printf("EnterintegerXandY:");scanf("%d%d",&x,&y);

if(x!=y)

if(x>y)printf("X>Y\n");

elseprintf("X<Y\n");

elseprintf("X=Y\n");}應(yīng)該正確判斷:if的內(nèi)嵌語(yǔ)句if和else的配對(duì)if(x!=y)

if(x>y)printf("X>Y\n");

elseprintf("X<Y\n");

elseprintf("X=Y\n");提倡縮格書(shū)寫(xiě)有利于閱讀程序第53頁(yè)/共112頁(yè)2023/1/1955雙(或多)分支if語(yǔ)句的嵌套形式if(表達(dá)式)if語(yǔ)句else

if語(yǔ)句

if語(yǔ)句嵌套的形式單if語(yǔ)句的嵌套形式if(表達(dá)式)if語(yǔ)句可以是各種形式的if語(yǔ)句可以是各種形式的if語(yǔ)句如果是簡(jiǎn)單if語(yǔ)句,必須用“{}”括起第54頁(yè)/共112頁(yè)2023/1/1956⑵if(c<=100)if(c>=50)printf("50<=c<=100\n");elseprintf("c<50\n");else

if(c<=150)printf("100<c<=150\n");elseprintf("c>150\n");⑶if(c<=100)if(c>=50)printf("50<=c<=100\n");elseprintf("c<50\n");例如:⑴if(c<=100)

if(c>=50)printf("50<=c<=100\n");與哪個(gè)if配對(duì)?匹配規(guī)則:在嵌套的if~else語(yǔ)句中,else總是與上面的、離它最近的、在同一復(fù)合語(yǔ)句中還沒(méi)有配對(duì)的if配對(duì)。

elseprintf("c<50\n");第55頁(yè)/共112頁(yè)2023/1/1957⑴

if(a>b)

if(a>c)

if(a>d)flag=1;

elseflag=2;

elseflag=3;⑵if

(a>b)

{

if(a>c)

if(a>d)flag=1;

else

flag=2;

}elseflag=3;flag=3的條件:flag=3的條件:當(dāng)c≥a>b時(shí)當(dāng)a≤b時(shí)例如:第56頁(yè)/共112頁(yè)2023/1/1958舉例【例3.10】輸入一個(gè)數(shù),判斷它是奇數(shù)還是偶數(shù),如果是奇數(shù)則進(jìn)一步判斷它是否為5的倍數(shù)。

定義變量x輸入x的值

x是奇數(shù)

TF

輸出“odd”x是5的倍數(shù)輸出“even”TF是5的倍數(shù)x%2!=0?x%5等于0?第57頁(yè)/共112頁(yè)2023/1/1959程序:main(){intx;scanf("%d",&x);

if(x%2!=0)

{printf("%disanodd\n",x);

if(x%5==0)printf("%disthetimesof5\n",x);

}

elseprintf("%disaneven\n",x);}等價(jià)于if(x%2)…..等價(jià)于if(!(x%5))…..思考:如果沒(méi)有{},算法和輸出如何?第58頁(yè)/共112頁(yè)2023/1/1960學(xué)習(xí)if語(yǔ)句的難點(diǎn)正確用表達(dá)式描述條件例如:當(dāng)x大于5小于10時(shí)令x自增if(5<x<10)x++;if~else語(yǔ)句的配對(duì)正確判斷內(nèi)嵌語(yǔ)句例如:if(x<y)x=x+3;y=y-2;elsex=x-3;y=y+2;{}{}第59頁(yè)/共112頁(yè)2023/1/1961選擇結(jié)構(gòu)舉例【例3.13】輸入年份,判別該年是否為閏年。思路:年份year為閏年的條件為①

能夠被4整除,但不能被100整除的年份;②

能夠被400整除的年份。只要滿(mǎn)足任意一個(gè)就可以確定它是閏年。例如:1996年、2008年是閏年2006年、1900年不是閏年設(shè)定標(biāo)志變量leap,只要符合其中一個(gè)條件的就是閏年,令leap=1;否則令leap=0

第60頁(yè)/共112頁(yè)2023/1/1962算法:定義變量year、leap

輸入年份year

能被4整除且不能被100整除?

TF

能被400整除?

leap=1

TFleap=1leap=0leap=1?TF

是閏年不是閏年year%400==0year%4==0&&year%100!=0第61頁(yè)/共112頁(yè)2023/1/1963程序:main(){intyear,leap;scanf("%d",&year);

if(year%4==0&&year%100!=0)leap=1;

elseif(year%400==0)leap=1;

elseleap=0;if(leap==1)printf("%disaleapyear\n",year);elseprintf("%disnotaleapyear\n",year);}第62頁(yè)/共112頁(yè)2023/1/19643.3.2switch多路開(kāi)關(guān)語(yǔ)句switch語(yǔ)句的一般形式

switch(表達(dá)式){case常量表達(dá)式1:語(yǔ)句序列1case常量表達(dá)式2:語(yǔ)句序列2

……case常量表達(dá)式n:語(yǔ)句序列n

[default:語(yǔ)句序列n+1

]}功能:計(jì)算表達(dá)式的值,與常量表達(dá)式的值比較,等于第i個(gè)值時(shí),順序執(zhí)行語(yǔ)句序列i、i+1、…、n+1若與所有常量表達(dá)式值都不相等,執(zhí)行語(yǔ)句序列n+1。

第63頁(yè)/共112頁(yè)2023/1/1965switch語(yǔ)句的算法描述例如:switch(a){case5:printf("&");case2:printf("#");default:printf("$");}當(dāng)a等于5,輸出:&#$當(dāng)a等于2,輸出:#$當(dāng)a是其他值,輸出:$第64頁(yè)/共112頁(yè)2023/1/1966說(shuō)明:“case常量表達(dá)式i:”等價(jià)于語(yǔ)句標(biāo)號(hào),計(jì)算出的表達(dá)式值等于哪個(gè)語(yǔ)句標(biāo)號(hào),就從哪個(gè)位置開(kāi)始順序向下執(zhí)行語(yǔ)句序列。∴語(yǔ)句位置影響運(yùn)行結(jié)果例如:switch(a){case2:printf("#");default:printf("$");

case5:printf("&");}當(dāng)a等于2,輸出:#$&當(dāng)a是其他值,輸出:$&當(dāng)a等于5,輸出:&switch與break語(yǔ)句結(jié)合才能實(shí)現(xiàn)程序的分支break;break;當(dāng)a等于2,輸出:#當(dāng)a等于5,輸出:&當(dāng)a是其他值,輸出:$第65頁(yè)/共112頁(yè)2023/1/1967switch語(yǔ)句的簡(jiǎn)單應(yīng)用【例3.11】已知x=100,y=15,要求輸入一個(gè)算術(shù)運(yùn)算符(+、-、*或/),并對(duì)x和y進(jìn)行指定的算術(shù)運(yùn)算。

思路:設(shè)x和y為float型變量并賦初值;輸入的運(yùn)算符op為char型變量;根據(jù)op的值(為'+'、'-'、'*'、'/')進(jìn)行x和y的相加、相減、相乘、相除運(yùn)算(選擇分支);還要考慮到輸入字符不是+、-、*或/時(shí)的情況第66頁(yè)/共112頁(yè)2023/1/1968程序:#include"stdio.h"main(){floatx=100,y=15,z;charop;op=getchar();

switch(op)

{case'+':z=x+y;break;case'-':z=x-y;break;case'*':z=x*y;break;case'/':z=x/y;break;default:z=0;

}if((int)z!=0)printf("%f%c%f=%f\n",x,op,y,z);elseprintf("%cisnotanoperator\n",op);}實(shí)型數(shù)通常不使用z==0或z!=0的比較可用if((int)z)代替第67頁(yè)/共112頁(yè)2023/1/1969注意:switch語(yǔ)句的書(shū)寫(xiě)格式:語(yǔ)句體本身必須用花括號(hào)括起;case和default后面如果有多條語(yǔ)句,則不必加花括號(hào);case和常量表達(dá)式之間必須有空格;default可以寫(xiě)在語(yǔ)句體的任何位置,也可以省略。break語(yǔ)句可以改變case的語(yǔ)句標(biāo)號(hào)作用,終止后續(xù)case語(yǔ)句序列的執(zhí)行。

switch語(yǔ)句和break語(yǔ)句結(jié)合,可以實(shí)現(xiàn)程序的選擇控制。

允許switch嵌套使用,但同一個(gè)switch語(yǔ)句中,任意兩個(gè)case的常量表達(dá)式值不能相同。

第68頁(yè)/共112頁(yè)2023/1/19703.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)while循環(huán)控制do-while循環(huán)控制for循環(huán)控制循環(huán)的嵌套第69頁(yè)/共112頁(yè)2023/1/19713.4.1while循環(huán)控制語(yǔ)句一般格式while(表達(dá)式)

語(yǔ)句

一般為關(guān)系表達(dá)式或邏輯表達(dá)式,也可以是C語(yǔ)言其他類(lèi)型的合法表達(dá)式

用來(lái)控制循環(huán)體是否執(zhí)行稱(chēng)為內(nèi)嵌語(yǔ)句,可以是基本語(yǔ)句、控制語(yǔ)句,也可以是復(fù)合語(yǔ)句是循環(huán)重復(fù)執(zhí)行的部分第70頁(yè)/共112頁(yè)2023/1/1972功能:計(jì)算表達(dá)式的值,當(dāng)為非0(邏輯真)時(shí),執(zhí)行內(nèi)嵌語(yǔ)句,每執(zhí)行一次,就判斷一次表達(dá)式的值,當(dāng)表達(dá)式的值為0時(shí)結(jié)束循環(huán),轉(zhuǎn)去執(zhí)行while后面的語(yǔ)句。

當(dāng)表達(dá)式為真語(yǔ)句N(xiāo)-S結(jié)構(gòu)圖NY流程圖表達(dá)式非0?語(yǔ)句循環(huán)控制條件循環(huán)體第71頁(yè)/共112頁(yè)2023/1/1973例如:【例3.14】編寫(xiě)程序,求100個(gè)自然數(shù)的和即:

s=1+2+3+…+100

思路:尋找加數(shù)與求和的規(guī)律

加數(shù)i——從1變到100,每循環(huán)一次,使i增1,直到i的值超過(guò)100。i的初值設(shè)為1。求和——設(shè)變量

sum存放和,循環(huán)求sum=sum+i,直至i超過(guò)100。

第72頁(yè)/共112頁(yè)2023/1/1974算法和程序:main(){inti,sum;i=1;sum=0;while(i<=100)

{sum=sum+i;i++;

}printf("sum=%d\n",sum);}程序輸出結(jié)果:sum=5050i:循環(huán)控制變量sum:累加器

i=1,sum=0當(dāng)i<=100sum=sum+ii++輸出sum第73頁(yè)/共112頁(yè)2023/1/1975注意:如果

(表達(dá)式)值為0,則循環(huán)體一次也不執(zhí)行

(例如當(dāng)i的初值為101)。在循環(huán)體中必須有使循環(huán)趨向結(jié)束的操作,否則循環(huán)將無(wú)限進(jìn)行(死循環(huán))。在循環(huán)體中,語(yǔ)句的先后位置必須符合邏輯,否則會(huì)影響運(yùn)算結(jié)果。

思考如下的輸出?

……while(i<=100){i++;sum=sum+i;}printf("sum=%d\n",sum);}運(yùn)行后,輸出:sum=5150原因是什么?如何修改程序使結(jié)果正確?

第74頁(yè)/共112頁(yè)2023/1/1976其他的while

語(yǔ)句形式while(0){....}

由于表達(dá)式恒等于0,所以循環(huán)體永遠(yuǎn)也不會(huì)執(zhí)行,是一個(gè)邏輯錯(cuò)誤的語(yǔ)句while(1){....}

由于表達(dá)式恒等于1,所以不可能通過(guò)循環(huán)控制條件來(lái)結(jié)束循環(huán)體的執(zhí)行,即死循環(huán)。為了保證循環(huán)正常運(yùn)行,應(yīng)該特別注意:循環(huán)控制條件的描述

控制條件的初始狀態(tài)(初始值)

循環(huán)體內(nèi)部對(duì)控制條件的影響第75頁(yè)/共112頁(yè)2023/1/19773.4.2do-while語(yǔ)句語(yǔ)句一般格式do語(yǔ)句

while(表達(dá)式);

功能:先執(zhí)行內(nèi)嵌語(yǔ)句(循環(huán)體),之后計(jì)算表達(dá)式的值,不為0(邏輯真)時(shí),再執(zhí)行循環(huán)體并判斷條件,直到表達(dá)式的值為0結(jié)束循環(huán),轉(zhuǎn)去執(zhí)行while下面的語(yǔ)句。第76頁(yè)/共112頁(yè)2023/1/1978

do-while循環(huán)的算法循環(huán)體當(dāng)表達(dá)式為真N-S結(jié)構(gòu)圖NY循環(huán)體表達(dá)式非0?流程圖main(){inti=1,sum=0;

do

{sum=sum+i;i++;

}

while(i<=100);printf("%d\n",sum);}用do-while語(yǔ)句求1+2+…+100

第77頁(yè)/共112頁(yè)2023/1/1979說(shuō)明:while和do-while都能實(shí)現(xiàn)循環(huán)控制,while結(jié)構(gòu)程序通常都可以轉(zhuǎn)換成do-while結(jié)構(gòu)區(qū)別:do-while語(yǔ)句先執(zhí)行循環(huán)體再判斷條件,循環(huán)體至少執(zhí)行一次;while語(yǔ)句先判斷條件再執(zhí)行循環(huán)體,循環(huán)體有可能一次也不執(zhí)行do—while循環(huán)體中一定要有能使表達(dá)式值趨于0的操作(如i++),否則會(huì)出現(xiàn)死循環(huán)。

第78頁(yè)/共112頁(yè)2023/1/19803.4.3for語(yǔ)句語(yǔ)句一般格式for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句功能:計(jì)算表達(dá)式1的值,再判斷表達(dá)式2,如果其值為非0(邏輯真),則執(zhí)行內(nèi)嵌語(yǔ)句(循環(huán)體),并計(jì)算表達(dá)式3;之后再去判斷表達(dá)式2,一直到其值為0時(shí)結(jié)束循環(huán),執(zhí)行后續(xù)語(yǔ)句。循環(huán)初始條件循環(huán)控制條件循環(huán)體第79頁(yè)/共112頁(yè)2023/1/1981for語(yǔ)句的算法N-S結(jié)構(gòu)圖for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句N(xiāo)Y流程圖計(jì)算表達(dá)式1語(yǔ)句計(jì)算表達(dá)式3表達(dá)式2為真?例如:main(){inti,sum;

for(sum=0,i=1;i<=100;i++)

sum=sum+i;

printf("sum=%d\n",sum);}可部分或全部省略,但“;”不可省略第80頁(yè)/共112頁(yè)2023/1/1982省略for語(yǔ)句的表達(dá)式⑴表達(dá)式1、2、3全省略,即:for(;;)

等同于:while(1),會(huì)無(wú)限循環(huán)(死循環(huán))注意:在省略某個(gè)表達(dá)式時(shí),應(yīng)在適當(dāng)位置進(jìn)行循環(huán)控制的必要操作,以保證循環(huán)的正確執(zhí)行⑵省略表達(dá)式1和表達(dá)式3,即:for(;表達(dá)式2;)

等同于:while(

表達(dá)式2)⑶省略表達(dá)式2,即:for(表達(dá)式1;;表達(dá)式3)

等同于:表達(dá)式1;while(1){…表達(dá)式3;}第81頁(yè)/共112頁(yè)2023/1/1983例如:⑴i=1;for(;i<=100;i++)sum+=i;⑵for(i=1;;i++){…if(i>100)……}⑶for(i=1;i<=100;){…i++;…}⑷i=1;for(;;){…if(i>100)…

i++;…}第82頁(yè)/共112頁(yè)2023/1/1984說(shuō)明:所有用while

語(yǔ)句實(shí)現(xiàn)的循環(huán)都可以用for

語(yǔ)句實(shí)現(xiàn)。

等價(jià)于:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

語(yǔ)句;表達(dá)式1;while(表達(dá)式2){

語(yǔ)句;

表達(dá)式3;

}第83頁(yè)/共112頁(yè)2023/1/1985for語(yǔ)句的簡(jiǎn)單應(yīng)用【例3.16】求n!,即計(jì)算p=1×2×3×…×n的值。

思路:求階乘與求累加的運(yùn)算處理過(guò)程類(lèi)似,只要將“+”變?yōu)椤?”。設(shè)置:乘數(shù)i

,初值為1,終值為n(n是循環(huán)控制終值,需要從鍵盤(pán)輸入)累乘器p

,每次循環(huán)令p=p*i第84頁(yè)/共112頁(yè)2023/1/1986程序:main(){inti,n;longp;

p=1;

printf("Entern:");scanf("%d",&n);for(i=1;i<=n;i++)

p=p

*

i;printf("p=%ld\n",p);}思考:如何求s=1!+2!+…+n!?第85頁(yè)/共112頁(yè)2023/1/19873.4.43種循環(huán)語(yǔ)句的比較while和do-while語(yǔ)句的表達(dá)式只有一個(gè),for語(yǔ)句有三個(gè)。while和for先判斷循環(huán)條件后執(zhí)行循環(huán)體,do-while語(yǔ)句先執(zhí)行循環(huán)體后判斷循環(huán)條件。while語(yǔ)句多用于循環(huán)次數(shù)不定的情況do-while語(yǔ)句多用于至少要運(yùn)行一次的情況for語(yǔ)句多用于要賦初值或循環(huán)次數(shù)固定的情況第86頁(yè)/共112頁(yè)2023/1/19883.4.5循環(huán)的嵌套如果循環(huán)語(yǔ)句的循環(huán)體內(nèi)又包含了另一條循環(huán)語(yǔ)句,則稱(chēng)為循環(huán)的嵌套例如:

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

for(

i=1;i<10;i++

)

for(

j=1;j<=i;j++

)

printf((j==i)?"%4d\n":"%4d",i*j);

}外循環(huán)語(yǔ)句內(nèi)循環(huán)語(yǔ)句外循環(huán)體內(nèi)循環(huán)體第87頁(yè)/共112頁(yè)2023/1/1989例如:

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

for(

i=1;i<10;i++

){for(

j=1;j<=i;j++

)

printf("%4d",i*j);

printf("\n");

}

}外循環(huán)語(yǔ)句內(nèi)循環(huán)語(yǔ)句外循環(huán)體內(nèi)循環(huán)體3.4.5循環(huán)的嵌套第88頁(yè)/共112頁(yè)2023/1/1990運(yùn)行結(jié)果:12436948121651015202561218243036714212835424981624324048566491827364554637281第89頁(yè)/共112頁(yè)2023/1/1991注意:while、do-while、for循環(huán)語(yǔ)句可以并列,也可以相互嵌套,但要層次清楚,不能出現(xiàn)交叉。多重循環(huán)程序執(zhí)行時(shí),外層循環(huán)每執(zhí)行一次,內(nèi)層循環(huán)都需要循環(huán)執(zhí)行多次。例如:for(a=1;a<=10;a++){for(b=0;b<=5;b++)

……}外循環(huán)執(zhí)行了10次,內(nèi)循環(huán)執(zhí)行6次循環(huán)正常結(jié)束時(shí),內(nèi)循環(huán)執(zhí)行了10×6=60次第90頁(yè)/共112頁(yè)2023/1/19923.5break和continue語(yǔ)句結(jié)構(gòu)化程序設(shè)計(jì)中有如下2種語(yǔ)句實(shí)現(xiàn)跳轉(zhuǎn):continue語(yǔ)句break語(yǔ)句在循環(huán)語(yǔ)句的循環(huán)體中使用,可以進(jìn)行循環(huán)的流程控制第91頁(yè)/共112頁(yè)2023/1/19933.5.1

break語(yǔ)句功能:利用break語(yǔ)句能夠強(qiáng)迫終止本層循環(huán),轉(zhuǎn)到后續(xù)語(yǔ)句執(zhí)行。第92頁(yè)/共112頁(yè)2023/1/1994后續(xù)語(yǔ)句…語(yǔ)句…YN表達(dá)式?后續(xù)語(yǔ)句…語(yǔ)句…表達(dá)式?YN3.5.1

break的應(yīng)用break;while語(yǔ)句break;do-while語(yǔ)句后續(xù)語(yǔ)句計(jì)算表達(dá)式3計(jì)算表達(dá)式1…語(yǔ)句…表達(dá)式2?YNbreak;for語(yǔ)句第93頁(yè)/共112頁(yè)2023/1/1995例如:⑴intx,n=0,s=0;while(n<10){scanf("%d",&x);

if(x<0)break;s+=x;n++;}⑵intx,n=0,s=0;do{scanf("%d",&x);

if(x<0)break;s+=x;n++;}while(n<10);⑶for(n=0,s=0;n<10;n++){scanf("%d",&x);

if(x<0)break;s+=x;}第94頁(yè)/共112頁(yè)2023/1/19963.5.2

continue語(yǔ)句及應(yīng)用功能:中斷循環(huán)體的本次執(zhí)行(即跳過(guò)循環(huán)體中尚未執(zhí)行的語(yǔ)句),立即開(kāi)始執(zhí)行下一次循環(huán)。第95頁(yè)/共112頁(yè)2023/1/1997后續(xù)語(yǔ)句…語(yǔ)句…YN表達(dá)式?后續(xù)語(yǔ)句…語(yǔ)句…表達(dá)式?YN3.5.2

continue語(yǔ)句及應(yīng)用(續(xù))continue;while語(yǔ)句continue;do-while語(yǔ)句后續(xù)語(yǔ)句計(jì)算表達(dá)式3計(jì)算表達(dá)式1…語(yǔ)句…表達(dá)式2?YNcontinue;for語(yǔ)句第96頁(yè)/共112頁(yè)2023/1/1998例如:⑴intx,n=0,s=0;while(n<10){scanf("%d",&x);

if(x<0)continue;

s+=x;n++;};

⑵intx,n=0,s=0;do{scanf("%d",&x);

if(x<0)continue;

s+=x;n++;}while(n<10);

⑶for(n=0,s=0;n<10;){scanf("%d",&x);

if(x<0)continue;

s+=x;n++}第97頁(yè)/共112頁(yè)2023/1/1999應(yīng)用舉例【例3.17】把100~200之間能被7整除的數(shù),以十個(gè)數(shù)為一行的形式輸出,最后輸出一共有多少個(gè)這樣的數(shù)。

思路:設(shè)變量n,從100變化到200;對(duì)每個(gè)n進(jìn)行判斷,當(dāng)n不能被7整除時(shí),終止本次循環(huán),否則就輸出這個(gè)數(shù);設(shè)變量j作為輸出個(gè)數(shù)的計(jì)數(shù)器,每輸出一個(gè)數(shù)就令j++;當(dāng)輸出了10個(gè)數(shù)時(shí)(即j%10等于0),輸出’\n’退出循環(huán)后輸出j的值。

第98頁(yè)/共112頁(yè)2023/1/19100算法和程序main(){intn,j=0;for(n=100;n<=200;n++){if(n%7!=0)continue; printf("%6d",n);

j++;

if(j%10==0)printf("\n");

}printf("\n");printf("j=%d\n",j);}for(n=100;n<=200;n++)n不能被7整除

TF終止本次循環(huán)輸出n

輸出10個(gè)數(shù)

TF

換行第99頁(yè)/共112頁(yè)2023/1/191013.6程序設(shè)計(jì)舉例及案例研究【例3-21】判斷輸入的某個(gè)數(shù)m是否為素?cái)?shù)。若是素?cái)?shù),輸出“YES”,若不是,輸出“NO”。

思路:素?cái)?shù)是指只能被1和它本身整除的數(shù),如5、7、11、17、…等。

分別用2、3、…,m-1嘗試能否整除整數(shù)m。如果m能被某個(gè)數(shù)整除,則m就不是素?cái)?shù)。這是一種窮舉算法設(shè)除數(shù)為j,從2循環(huán)到m-1第100頁(yè)/共112頁(yè)2023/1/19102算法和程序:

輸入一個(gè)數(shù)mfor(j=2;j<=m-1;j++)m%j==0TF

退出循環(huán)

j>m-1TF輸出"YES“輸出"NO"#include"math.h"main(){intj,m,k;printf("Enteranintegernumber:");scanf("%d",&m);if(m==0||m==1)printf("NO\n");for(j=2;j<=m-1;j++)

if(m%j==0)break;if(j>m-1)printf("YES\n");elseprintf("NO\n");}第101頁(yè)/共112頁(yè)2023/1/19103程序的優(yōu)化對(duì)于窮舉法來(lái)說(shuō),為了提高程序的效率,就要減少?lài)L試次數(shù)。#include"math.h"main(){intj,m,k;printf("Enteranintegernumber:");scanf("%d",&m);if(m==0||m==1)printf("NO\n");

k=sqrt(m);for(j=2;j<=k;j++)

if(m%j==0)break;if(j>k)printf("YES\n");elseprintf("NO\n");}思考:如何輸出100~200中所有的素?cái)?shù)

第102頁(yè)/共112頁(yè)2023/1/19104程序舉例例3-23用迭代法求某個(gè)數(shù)的平方根√a。迭代公式為:x1=1/2(x0

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論