版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章程序的控制結(jié)構(gòu)(2)——循環(huán)C程序設(shè)計(jì)語(yǔ)言西南財(cái)經(jīng)大學(xué)王磊1第6章程序的控制結(jié)構(gòu)(2)——循環(huán)C程序設(shè)計(jì)語(yǔ)言西南財(cái)經(jīng)大6.1循環(huán)結(jié)構(gòu)P循環(huán)體YN當(dāng)P為真循環(huán)體P循環(huán)體YN當(dāng)P為真循環(huán)體當(dāng)型循環(huán)兩種形式P循環(huán)體NY直到P為真循環(huán)體P循環(huán)體Y直到P為真循環(huán)體直到型循環(huán)兩種形式N6.1循環(huán)結(jié)構(gòu)P循環(huán)體YN當(dāng)P為真循環(huán)體P循環(huán)體YN當(dāng)P為真循環(huán)——while語(yǔ)句,for語(yǔ)句while(表達(dá)式)
{
循環(huán)語(yǔ)句;}do
{
循環(huán)語(yǔ)句;}while(表達(dá)式);for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
{
循環(huán)語(yǔ)句;}循環(huán)——while語(yǔ)句,for語(yǔ)句while(表達(dá)式)
{while語(yǔ)句while(表達(dá)式)
{
循環(huán)語(yǔ)句;}只要表達(dá)式的值為非0(真),就重復(fù)執(zhí)行while循環(huán)語(yǔ)句,直到表達(dá)式值為0(假)時(shí)止P循環(huán)體YNwhile語(yǔ)句while(表達(dá)式)
{P循環(huán)體YNdo-while語(yǔ)句do
{
循環(huán)語(yǔ)句;
}while(表達(dá)式);首先執(zhí)行語(yǔ)句,然后判斷表達(dá)式的值。如果表達(dá)式為0,結(jié)束while循環(huán)語(yǔ)句。否則,再次執(zhí)行循環(huán)語(yǔ)句。語(yǔ)句會(huì)被至少執(zhí)行一次P循環(huán)體YNdo-while語(yǔ)句do
{P循環(huán)體YNfor語(yǔ)句for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
{
循環(huán)語(yǔ)句;}循環(huán)起始條件(通常對(duì)循環(huán)變量賦初值)循環(huán)結(jié)束條件(每次執(zhí)行循環(huán)語(yǔ)句前需判斷)循環(huán)增量(循環(huán)語(yǔ)句執(zhí)行完一次后計(jì)算表達(dá)式3的值)(1)計(jì)算表達(dá)式1,計(jì)算表達(dá)式2。若表達(dá)式2的值0(不滿足結(jié)束條件),則執(zhí)行循環(huán)語(yǔ)句,若表達(dá)式2的值=0,則結(jié)束循環(huán);執(zhí)行循環(huán)語(yǔ)句;(3)計(jì)算表達(dá)式3,再次判斷表達(dá)式2的值.依此重復(fù)下去,直到表達(dá)式2的值=0(假)。for語(yǔ)句for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
{循注意循環(huán)變量的使用通過(guò)循環(huán)變量i
的值來(lái)控制循環(huán)次數(shù)。For循環(huán)的循環(huán)總次數(shù)是已知的。for(i=1;i<=100;i++){sum+=i;}注意循環(huán)變量的使用通過(guò)循環(huán)變量i的值來(lái)控制循環(huán)次數(shù)for語(yǔ)句for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
{
循環(huán)語(yǔ)句;}相當(dāng)于:
表達(dá)式1和表達(dá)式3可以沒(méi)有或者是用逗號(hào)分隔的多個(gè)表達(dá)式的組合。但最好不要有太多的表達(dá)式組合
表達(dá)式1;
while(表達(dá)式2){
循環(huán)語(yǔ)句;
表達(dá)式3;
}for語(yǔ)句for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
{選擇三種循環(huán)的一般原則如果循環(huán)次數(shù)已知,用for如果循環(huán)次數(shù)未知,用while如果循環(huán)體至少要執(zhí)行一次,用do-while這只是“一般”原則,不是“原則”選擇三種循環(huán)的一般原則如果循環(huán)次數(shù)已知,用for注意在for和while語(yǔ)句之后一般沒(méi)有分號(hào)有分號(hào)表示循環(huán)體就是分號(hào)之前的內(nèi)容(空循環(huán)體)while(i<100);
i++;for(i=0;i<100;i++);
printf("%d",i);for通常有一個(gè)循環(huán)變量控制循環(huán)的次數(shù),不要在循環(huán)體內(nèi)改變這個(gè)變量注意在for和while語(yǔ)句之后一般沒(méi)有分號(hào)例:計(jì)算n!=1×2×…n分別用如下語(yǔ)句編程forwhiledo-while例:計(jì)算n!=1×2×…n分別用如下語(yǔ)句編程循環(huán)次數(shù)已知,首先考慮用for循環(huán)語(yǔ)句#include<stdio.h>main(){inti,n;/*i是循環(huán)變量*/longp=1;/*存放階乘的值*/printf("Pleaseentern:");scanf("%d",&n);
for(i=1;i<=n;i++){p=p*i;}printf("%d!=%ld\n",n,p);}例:計(jì)算n!=1×2×…n循環(huán)次數(shù)已知,首先考慮用for循環(huán)語(yǔ)句例:計(jì)算n!=1×2例:計(jì)算n!=1×2×…nWhile循環(huán)語(yǔ)句實(shí)現(xiàn)inti=1;while(i<=n){p=p*i;i++;}do…while循環(huán)語(yǔ)句實(shí)現(xiàn)inti=1;do{p=p*i;i++;}while(i<=n);例:計(jì)算n!=1×2×…nWhile循環(huán)語(yǔ)句實(shí)現(xiàn)只猜1次直到猜對(duì)為止最多猜10次例:循環(huán)控制語(yǔ)句——猜數(shù)游戲只猜1次直到猜對(duì)為止最多猜10次例:循環(huán)控制語(yǔ)句——猜數(shù)游戲猜數(shù)游戲用到的庫(kù)函數(shù)怎樣模擬計(jì)算機(jī)“想”一個(gè)數(shù)呢?隨機(jī)函數(shù)rand()產(chǎn)生[0,RAND_MAX]
之間的隨機(jī)數(shù)magic=rand();#include<stdlib.h>RAND_MAX在stdlib.h中定義,不大于雙字節(jié)整數(shù)的最大值32767產(chǎn)生[0,b-1]之間的隨機(jī)數(shù)magic=rand()%b;產(chǎn)生[a,a+b-1]之間的隨機(jī)數(shù)magic=rand()%b+a;猜數(shù)游戲用到的庫(kù)函數(shù)怎樣模擬計(jì)算機(jī)“想”一個(gè)數(shù)呢?例#include<stdlib.h>#include<stdio.h>
main(){
intmagic;/*計(jì)算機(jī)"想"的數(shù)*/
intguess;/*人猜的數(shù)*/
magic=rand()%100+1;
/*“想”一個(gè)[1,100]之間的數(shù)magic*/ printf("Pleaseguessamagicnumber:"); scanf("%d",&guess);
if(guess>magic) {printf("Wrong!Toohigh!\n"); }
elseif(guess<magic) {printf("Wrong!Toolow!\n"); }
else
{ printf("Right!\n"); printf("Thenumberis:%d\n",magic); }}只猜1次例#include<stdlib.h>只猜1次例#include<stdlib.h>#include<stdio.h>main(){
intmagic;
intguess;
intcounter;/*記錄人猜次數(shù)的計(jì)數(shù)器變量*/ magic=rand()%100+1;
counter=0;
/*計(jì)數(shù)器變量count初始化為0,統(tǒng)計(jì)猜測(cè)次數(shù)*/
do{ printf("Pleaseguessamagicnumber:"); scanf("%d",&guess);
counter++;/*計(jì)數(shù)器變量count加1*/
if(guess>magic) printf("Wrong!Toohigh!\n");
elseif(guess<magic) printf("Wrong!Toolow!\n");
}while(guess!=magic);
printf("Right!\n"); printf("counter=%d\n",counter);}直到猜對(duì)為止例#include<stdlib.h>直到猜對(duì)為止#include<stdlib.h>#include<stdio.h>#include<time.h>main(){
intmagic;
intguess;
intcounter; srand(time(NULL)); magic=rand()%100+1; counter=0;
do{ printf("Pleaseguessamagicnumber:"); scanf("%d",&guess); counter++;
if(guess>magic) printf("Wrong!Toohigh!\n");
elseif(guess<magic) printf("Wrong!Toolow!\n");
else
printf("Right!\n"); }while((guess!=magic)&&(counter<10));
printf("counter=%d\n",counter);}實(shí)驗(yàn)3最多猜10次#include<stdlib.h>實(shí)驗(yàn)3最多猜10次6.3嵌套循環(huán)While循環(huán)語(yǔ)句的嵌套;
while(){ …
while() {…}}for(;;){…
while(){}
do{}while();…}6.3嵌套循環(huán)While循環(huán)語(yǔ)句的嵌套;for(;使用嵌套的循環(huán)體時(shí),應(yīng)注意以下問(wèn)題
在嵌套的各層循環(huán)體中,使用復(fù)合語(yǔ)句(即用一對(duì)大花括號(hào)將循環(huán)體語(yǔ)句括起來(lái))保證邏輯上的正確性
內(nèi)層和外層循環(huán)控制變量不應(yīng)同名,以免造成混亂
嵌套的循環(huán)最好采用右縮進(jìn)格式書(shū)寫(xiě),以保證層次的清晰性
代碼風(fēng)格問(wèn)題循環(huán)嵌套不能交叉,即在一個(gè)循環(huán)體內(nèi)必須完整的包含著另一個(gè)循環(huán)
使用嵌套的循環(huán)體時(shí),應(yīng)注意以下問(wèn)題在嵌套的各層循環(huán)體中,使例:打印乘法九九表
例:打印乘法九九表例#include<stdio.h>main(){
intm,n;
for(m=1;m<10;m++) printf("%4d",m);/*打印表頭*/ printf("\n");
for(m=1;m<10;m++) printf("-"); printf("\n");
for
(n=1;n<10;n++)
{
for
(m=1;m<10;m++) { printf("%4d",n*m); } printf("\n"); }}例#include<stdio.h>例:打印下三角乘法九九表
例:打印下三角乘法九九表#include<stdio.h>main(){
intm,n;
for(m=1;m<10;m++) printf("%4d",m);/*打印表頭*/ printf("\n");
for(m=1;m<10;m++) printf("-"); printf("\n");
for
(m=1;m<10;m++)
{
for
(n=1;
n<=m;n++) { printf("%4d",m*n); } printf("\n"); }}例#include<stdio.h>例6.5流程的轉(zhuǎn)移控制break語(yǔ)句continue語(yǔ)句goto語(yǔ)句6.5流程的轉(zhuǎn)移控制break語(yǔ)句break和continuebreak語(yǔ)句:退出循環(huán)結(jié)構(gòu)語(yǔ)句或者switch如果是嵌套循環(huán),則只退出break語(yǔ)句所在的循環(huán)。continue:中斷本次循環(huán)體的執(zhí)行過(guò)程,并進(jìn)行循環(huán)的下一輪break和continue少用為妙break和continuebreak語(yǔ)句:break和continue假假真真break表達(dá)式1表達(dá)式2循環(huán)語(yǔ)句后的下一條語(yǔ)句循環(huán)語(yǔ)句后的下一條語(yǔ)句假假真真
表達(dá)式1表達(dá)式2continuebreak和continue假假真真break表達(dá)式1表達(dá)式例:?jiǎn)尾竭\(yùn)行演示break語(yǔ)句和continue語(yǔ)句的用法區(qū)別#include<stdio.h>main(){
inti,n;
for(i=1;i<=5;i++) { printf("Pleaseentern:"); scanf("%d",&n);
if(n<0)
break; printf("n=%d\n",n); } printf("Programisover!\n");}Pleaseentern:10↙n=10Pleaseentern:-10↙Programisover!例:?jiǎn)尾竭\(yùn)行演示break語(yǔ)句和continue語(yǔ)句的用法區(qū)例
:?jiǎn)尾竭\(yùn)行演示break語(yǔ)句和continue語(yǔ)句的用法區(qū)別#include<stdio.h>main(){
inti,n;
for(i=1;i<=5;i++) { printf("Pleaseentern:"); scanf("%d",&n);
if(n<0)
continue; printf("n=%d\n",n); } printf("Programisover!\n");}Pleaseentern:10↙n=10Pleaseentern:-10↙Pleaseentern:20↙n=20Pleaseentern:-20↙Pleaseentern:30↙n=30Programisover!例:?jiǎn)尾竭\(yùn)行演示break語(yǔ)句和continue語(yǔ)句的用法標(biāo)號(hào)舉例error:printf(“Errors!,exit!\n”);Goto語(yǔ)句舉例gotoerror;一般形式語(yǔ)句標(biāo)號(hào):…………goto語(yǔ)句標(biāo)號(hào);goto與標(biāo)號(hào)(label)標(biāo)號(hào)舉例goto與標(biāo)號(hào)(label)是goto的過(guò)錯(cuò)?還是程序員的過(guò)錯(cuò)?破壞了結(jié)構(gòu)化設(shè)計(jì)風(fēng)格容易帶來(lái)錯(cuò)誤隱患如非必需,盡量不用gotomain(){
intsum;
goto
next;
sum=0;/*被goto跳過(guò)*/next:
printf("%d",sum);}是goto的過(guò)錯(cuò)?還是程序員的過(guò)錯(cuò)?破壞了結(jié)構(gòu)化設(shè)計(jì)風(fēng)格其他流程轉(zhuǎn)移控制標(biāo)準(zhǔn)庫(kù)函數(shù)exit()
作用是終止整個(gè)程序的執(zhí)行,強(qiáng)制返回操作系統(tǒng)調(diào)用該函數(shù)需要嵌入頭文件<stdlib.h>用法:exit(code);code參數(shù)設(shè)置(慣例):
0
表示程序正常退出;
非0
表示程序出現(xiàn)某種錯(cuò)誤退出。其他流程轉(zhuǎn)移控制例題分析:素?cái)?shù)問(wèn)題 給定一個(gè)正整數(shù)n=91,判斷它是不是素?cái)?shù)。判斷標(biāo)準(zhǔn):素?cái)?shù)只能被自身和1整除。例如,91%1=0,91%91=0.思路:將2至n-1之間的所有整數(shù),同n進(jìn)行求余操作,判斷余數(shù)是否為0,如果發(fā)現(xiàn)任意一次為0,則n必然不是素?cái)?shù)。循環(huán)語(yǔ)句。例題分析:素?cái)?shù)問(wèn)題 給定一個(gè)正整數(shù)n=91,判斷它是不是素?cái)?shù)程序結(jié)構(gòu)intmain(){ //定義變量、初始化
//進(jìn)行計(jì)算、處理
//輸出結(jié)果
}程序結(jié)構(gòu)intmain()intmain(){ intn=91; intx;//循環(huán)變量
intcount=0;//用于統(tǒng)計(jì)n被整除的次數(shù)
for(x=2;x<=n-1;x++) { if(n%x==0) count++; }
if(count>0) printf(“n不是是素?cái)?shù)"); else printf("n是素?cái)?shù)");
return0;}intmain()思考1:目的:假設(shè)判斷是否能夠整除(n%x==0)的計(jì)算開(kāi)銷很大,程序應(yīng)該盡量減少該操作。對(duì)上述程序進(jìn)行優(yōu)化利用break或continue縮減需要被檢查的除數(shù)范圍,還是[2,n-1]???思考1:目的:假設(shè)判斷是否能夠整除(n%x==0)的計(jì)算思考2:求出所有的100-200之間的素?cái)?shù)雙重循環(huán)問(wèn)題。思考2:求出所有的100-200之間的素?cái)?shù)雙重循環(huán)問(wèn)題。6.6程序排錯(cuò)最優(yōu)秀的程序員也很難保證其編寫(xiě)的程序能夠在計(jì)算機(jī)上一次調(diào)試通過(guò)。程序出錯(cuò)并不可怕,只要學(xué)會(huì)一定的程序測(cè)試和排錯(cuò)技巧,出錯(cuò)就不再可怕;相反,我們還可以在錯(cuò)誤中學(xué)習(xí)并牢記寶貴的知識(shí),并教導(dǎo)我們?nèi)绾晤A(yù)防錯(cuò)誤的再次發(fā)生。掌握一些預(yù)防錯(cuò)誤發(fā)生和減少錯(cuò)誤的技術(shù)非常重要:好的算法設(shè)計(jì)、好的編程風(fēng)格、限制全局?jǐn)?shù)據(jù)結(jié)構(gòu)的使用、邊界條件測(cè)試等。VC編譯軟件中有自動(dòng)整理格式功能只要選取需要的代碼,按ALT+F8就能自動(dòng)整理成帶縮進(jìn)格式的c文件。6.6程序排錯(cuò)最優(yōu)秀的程序員也很難保證其編寫(xiě)的程序能夠在計(jì)程序中常見(jiàn)的出錯(cuò)原因——11、編譯錯(cuò)誤;編譯過(guò)程中出現(xiàn)的錯(cuò)誤,通常屬于語(yǔ)法錯(cuò)誤,即編寫(xiě)的語(yǔ)句不符合C語(yǔ)言的語(yǔ)法規(guī)則。Undefinedsymbol‘XXX’XXXstatementmissing;ExpressionsyntaxerrorRedeclarationof‘XXX’Toofewparameterincall;程序中常見(jiàn)的出錯(cuò)原因——11、編譯錯(cuò)誤;程序有哪些錯(cuò)誤?#include<stdio.h>#include<math.h>main(){ intm,i,k; printf("Pleaseenteranumber:") scanf("%d",m); k=sqrt(m); for(i=2;j<=k,i++) { if(m%i==0)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度體育賽事贊助與品牌推廣協(xié)議2篇
- 二零二五版貨運(yùn)代理服務(wù)合同糾紛處理辦法2篇
- 二零二五年度商品房交易合同范文:帶車位租賃3篇
- 2025年度企業(yè)培訓(xùn)與員工晉升通道對(duì)接協(xié)議范本3篇
- 2025年度日用品原材料采購(gòu)與加工合同樣本3篇
- 2025年度中醫(yī)流派傳承與創(chuàng)新合作合同書(shū)4篇
- 2025年新型食堂承包服務(wù)合同(含員工培訓(xùn))3篇
- 2025年度城市更新改造項(xiàng)目承包勞務(wù)合同范本3篇
- 2025年度鋁合金光伏組件安裝服務(wù)協(xié)議范本4篇
- 2025版建筑工程尾款結(jié)算協(xié)議3篇
- 第1課 隋朝統(tǒng)一與滅亡 課件(26張)2024-2025學(xué)年部編版七年級(jí)歷史下冊(cè)
- 2025-2030年中國(guó)糖醇市場(chǎng)運(yùn)行狀況及投資前景趨勢(shì)分析報(bào)告
- 冬日暖陽(yáng)健康守護(hù)
- 水處理藥劑采購(gòu)項(xiàng)目技術(shù)方案(技術(shù)方案)
- 2024級(jí)高一上期期中測(cè)試數(shù)學(xué)試題含答案
- 山東省2024-2025學(xué)年高三上學(xué)期新高考聯(lián)合質(zhì)量測(cè)評(píng)10月聯(lián)考英語(yǔ)試題
- 不間斷電源UPS知識(shí)培訓(xùn)
- 三年級(jí)除法豎式300道題及答案
- 品學(xué)課堂新范式
- GB/T 1196-2023重熔用鋁錠
- 幼兒園教師培訓(xùn):計(jì)數(shù)(數(shù)數(shù))的核心經(jīng)驗(yàn)
評(píng)論
0/150
提交評(píng)論