C語言程序設(shè)計(jì)(慕課版)算法與控制流_第1頁
C語言程序設(shè)計(jì)(慕課版)算法與控制流_第2頁
C語言程序設(shè)計(jì)(慕課版)算法與控制流_第3頁
C語言程序設(shè)計(jì)(慕課版)算法與控制流_第4頁
C語言程序設(shè)計(jì)(慕課版)算法與控制流_第5頁
已閱讀5頁,還剩95頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

算法與控制流3.1簡(jiǎn)單的C程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)和基本程序結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)+算法=程序數(shù)據(jù)結(jié)構(gòu):指對(duì)數(shù)據(jù)(操作對(duì)象)的描述。算法:指對(duì)操作步驟的描述。正確的算法應(yīng)具有的特性:1、有窮性2、確定性3、有0—n個(gè)輸入數(shù)據(jù)4、有1—n個(gè)輸出數(shù)據(jù)5、有效性算法的表示形式:1、自然語言2、流程圖3、N-S圖4、偽代碼5、PAD圖流程圖例:求三個(gè)整數(shù)的和流程圖開始輸出sum的值結(jié)束輸入x,y,zsum=x+y+zmain(){floatx,y,z,sum;scanf(“%f%f%f\n”,&x,&y,&z);

sum=x+y+z;printf(“sum=%f\n”,sum);}例2:求三個(gè)數(shù)中最小數(shù)流程圖開始輸出min的值輸入a,b,ca<bNmin=amin=bY結(jié)束c<minmin=cYN#include<stdio.h>main(){inta,b,c,min;scanf("%d%d%d",&a,&b,&c);

if(a<b) min=a;

else min=b;

if(c<min) min=c;printf("min=%d",min);}N-S圖 完全去掉流程線,由一些基本框組成一個(gè)大的框基本元素框例:求三個(gè)整數(shù)的和流程圖開始輸出sum的值結(jié)束輸入x,y,zsum=x+y+z輸出sum的值sum=x+y+z輸入x,y,zN-S圖例:求三個(gè)數(shù)中最小數(shù)。流程圖開始輸出min的值輸入a,b,ca<bNmin=amin=bY結(jié)束c<minmin=cYNN-S圖min=bmin=aa<bYNmin=cc<minYN輸入a,b,c輸出min的值結(jié)構(gòu)化程序設(shè)計(jì)基本思想:把一個(gè)復(fù)雜問題的求解過程分步進(jìn)行,后一步在前一步的基礎(chǔ)上細(xì)化,這樣每步所考慮的子問題都相對(duì)易于理解和處理,每步都只用三種基本結(jié)構(gòu)進(jìn)行復(fù)合和嵌套。也可以概括為:自頂向下,逐步求精的方法?;境绦蚪Y(jié)構(gòu)三種:順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)1.順序結(jié)構(gòu)AB先執(zhí)行A,再執(zhí)行B.2.選擇結(jié)構(gòu)ABPYN若P為真,則執(zhí)行A,

否則執(zhí)行B。APNY若P為真,則執(zhí)行A,

否則跳過A。

另外:由選擇結(jié)構(gòu)可以派生出多分支結(jié)構(gòu)。K=K1A1A2AiAn……K2KiKn3.循環(huán)結(jié)構(gòu)PNYA(1)當(dāng)型循環(huán)當(dāng)P為真,反復(fù)執(zhí)行A,P為假時(shí)出循環(huán)。APYN(2)直到型循環(huán)先執(zhí)行A,再判斷,若P為真,反復(fù)執(zhí)行A,直到P為假出循環(huán)。3.2順序結(jié)構(gòu)程序設(shè)計(jì)C程序概述語句分類:由語句組成,每個(gè)語句以分號(hào)結(jié)束。①控制語句②表達(dá)式語句③函數(shù)調(diào)用語句④空語句⑤復(fù)合語句9種控制語句:1.條件判斷語句

if()…else… switch(){…}

2.循環(huán)控制語句

for()… while()…do…while()3.轉(zhuǎn)移語句

breakcontinuegotoreturn例如:main(){inta,b;a=b=100;

{floatc=10.23;printf("%f\n",c);

}printf("%d%d\n",a,b);}C中數(shù)據(jù)的輸入輸出輸入:將數(shù)據(jù)送入計(jì)算機(jī)。輸出:將計(jì)算機(jī)處理的結(jié)果數(shù)據(jù)送出到輸出設(shè)備。說明:1、C語言中,數(shù)據(jù)輸入/輸出是通過調(diào)用庫函數(shù)完成。2、使用庫函數(shù)時(shí),用預(yù)編譯命令將有關(guān)“頭文件”包括到源文件中。3、標(biāo)準(zhǔn)輸入輸出庫函數(shù):“stdio.h”文件4、源文件開頭應(yīng)有以下預(yù)編譯命令:#include<stdio.h>或#include"stdio.h"1.putchar

函數(shù)(字符輸出函數(shù))字符數(shù)據(jù)的輸入/輸出格式:

putchar(c)參數(shù):

c為字符常量、變量或表達(dá)式功能:把字符c輸出到顯示器上例:#include<stdio.h>main(){intc;chara;c=65;a='B';putchar(c);putchar('\n');putchar(a);}AB2、getchar函數(shù)(字符輸入函數(shù))格式:

getchar()功能:從鍵盤讀入一字符,

遇回車結(jié)束并回顯例:#include<stdio.h>main(){charc;c=getchar();}a

getch函數(shù)格式:

getch()功能:從鍵盤讀入一字符,

不用回車結(jié)束,不回顯例:#include<stdio.h>main(){charc;c=getch();}

getche函數(shù)格式:

getche()功能:從鍵盤讀入一字符,

不用回車結(jié)束,回顯例:#include<stdio.h>main(){charc;c=getche();}a格式輸入與輸出輸出若干個(gè)任意類型的數(shù)據(jù)1、printf函數(shù)(格式輸出)格式:printf(“格式控制串”,輸出表)功能:按指定格式向顯示器輸出數(shù)據(jù)說明:標(biāo)準(zhǔn)庫函數(shù),函數(shù)原型在頭文件“stdio.h”中格式控制串:格式說明:普通字符或轉(zhuǎn)義序列:%格式字符,用于指定輸出格式原樣輸出輸出表:要輸出的數(shù)據(jù)(可以沒有,多個(gè)時(shí)以“,”分隔)格式字符1、%d十進(jìn)制格式2、%o八進(jìn)制格式3、%x十六進(jìn)制格式4、%u無符號(hào)的十進(jìn)制格式5、%c一個(gè)字符格式6、%s字符串格式7、%f實(shí)數(shù)格式8、%e指數(shù)格式9、%gdx,Xoucse,Efg%%十六進(jìn)制無符號(hào)整數(shù)不帶符號(hào)十進(jìn)制整數(shù)十進(jìn)制整數(shù)指數(shù)形式浮點(diǎn)小數(shù)單一字符字符串八進(jìn)制無符號(hào)整數(shù)小數(shù)形式浮點(diǎn)小數(shù)e和f中較短一種百分號(hào)本身inta=567;printf(“%d”,a);inta=255;printf(“%x”,a);inta=65;printf(“%o”,a);inta=-1;printf(“%u”,a);chara=65;printf(“%c”,a);printf(“%s”,“ABC”);floata=567.789;printf(“%e”,a);floata=567.789;printf(“%f”,a);floata=567.789;printf(“%g”,a);printf(“%%”);567ff10165535AABC5.67789e+02567.789000567.789%格式字符附加格式說明符

.n對(duì)實(shí)數(shù),指定小數(shù)點(diǎn)后位數(shù)(四舍五入)對(duì)字符串,指定實(shí)際輸出位數(shù)修飾符功能m輸出數(shù)據(jù)域?qū)?數(shù)據(jù)長(zhǎng)度<m,左補(bǔ)空格;否則按實(shí)際輸出輸出數(shù)據(jù)在域內(nèi)左對(duì)齊(缺省右對(duì)齊)-指定在有符號(hào)數(shù)的正數(shù)前顯示正號(hào)(+)+輸出數(shù)值時(shí)指定左面不使用的空位置自動(dòng)填00在八進(jìn)制和十六進(jìn)制數(shù)前顯示前導(dǎo)0,0x#在d,o,x,u前,指定輸出精度為long型在e,f,g前,指定輸出精度為double型l2、scanf函數(shù)(格式輸入)格式:

scanf(“格式控制串”,地址表)功能:按指定格式從鍵盤讀入數(shù)據(jù),存入地址表指

定的存儲(chǔ)單元中,按回車鍵結(jié)束說明:標(biāo)準(zhǔn)庫函數(shù),在頭文件“stdio.h”中定義格式控制串:和格式輸出函數(shù)的含義相同地址表:變量的地址,用取地址運(yùn)算符&例

inta;scanf(“%d”,&a);10

a=10關(guān)于格式輸入函數(shù)的幾點(diǎn)說明:1、輸入數(shù)據(jù)時(shí)不能規(guī)定精度;2、參數(shù)中“格式控制”之后應(yīng)該是變量地址;3、如果在“格式控制”字符串中除了格式說明以外,還有其他字符,則在輸入數(shù)據(jù)時(shí)應(yīng)輸入與這些字符相同的字符;例:scanf(”%7.2f”,&a);例:scanf(”%f”,a);例:scanf(”a=%d,b=%d”,&a,&b);輸入時(shí)應(yīng)該是:a=3,b=4

4、在用“%c”格式輸入字符時(shí),空格字符和轉(zhuǎn)義

字符都作為有效的字符輸入。例:scanf(”%d%d”,&a,&b);輸入時(shí)可為:34

34

3Tab鍵4

例:scanf(”%c%c%c”,&c1,&c2,&c3);若輸入時(shí)為:abc

則結(jié)果為:

c1=a,c2=,c3=b5、double型數(shù)據(jù)輸入時(shí),必須用%lf或%le格式程序舉例例1、輸入三角形邊長(zhǎng),求面積。公式:s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));#include<stdio.h>#include<math.h>

main(){floata,b,c,s,area;printf("inputa,b,c:");scanf("%f,%f,%f",&a,&b,&c);s=(a+b+c)/2;

area=sqrt(s*(s-a)*(s-b)*(s-c));printf("area=%7.2f\n",area);}

inputa,b,c:3,4,6

area=5.33例2、編寫顯示如下界面的程序:#include<stdio.h>main(){

system("cls"); printf("學(xué)生管理程序\n"); printf("Add-------追加數(shù)據(jù)"); printf("Modify----修改數(shù)據(jù)\n"); printf("Delete----刪除數(shù)據(jù)"); printf("Print-----打印數(shù)據(jù)\n"); printf("Sort------成績(jī)排序"); printf("Quit------退出程序\n");}C程序上機(jī)的步驟C程序從開發(fā)到執(zhí)行的過程用戶C源程序.c文件目標(biāo)程序.obj文件可執(zhí)行程序.exe文件結(jié)果編輯編譯連接運(yùn)行編譯出錯(cuò)連接出錯(cuò)運(yùn)行出錯(cuò)對(duì)源文件進(jìn)行語法和邏輯結(jié)構(gòu)檢查將目標(biāo)程序、庫函數(shù)或其他目標(biāo)程序連接成一個(gè)可執(zhí)行文件VC環(huán)境介紹新建文件保存文件后綴為.c編譯結(jié)果編譯鏈接結(jié)果鏈接運(yùn)行用Ctrl+空格切換中英文輸入方式注意逗號(hào),為英文方式下的字符輸出結(jié)果3.3選擇分支結(jié)構(gòu)程序設(shè)計(jì)選擇結(jié)構(gòu)根據(jù)給定的條件是否滿足,決定從給定的條件選擇其一。分為:二路分支多路分支if…else…語句switch語句1.簡(jiǎn)單的if語句形式:if(表達(dá)式)語句執(zhí)行過程:如果表達(dá)式值非0,執(zhí)行該語句,然后執(zhí)行if的下一個(gè)語句;否則直接執(zhí)行if的下一個(gè)語句。例:

main(){inta,b,max;printf(”\n請(qǐng)輸入兩個(gè)數(shù):”);scanf(”%d%d”,&a,&b);

max=a;if(max<b)max=b;printf(”max=%d”,max);}if語句例:輸入三個(gè)整數(shù)x、y、z,把這三個(gè)數(shù)由小到大輸出。輸出x,y,x的值交換x,zx>z交換x,yx>y輸入x,y,zYNYN交換y,zy>zYN#include<stdio.h>main(){

intx,y,z,t;printf(“Pleaseinputthex,y,z:”);scanf(“%d%d%d”,&x,&y,&z);

if(x>y){t=x;x=y;y=t;}if(x>z){t=x;x=z;z=t;}if(y>z){t=y;y=z;z=t;}printf(“Smalltobig:%d%d%d\n”,x,y,z);}if語句2.if/else語句形式:if(表達(dá)式)語句1else語句2執(zhí)行流程:

如果表達(dá)式值非0,執(zhí)行語句1;否則,執(zhí)行語句2;無論執(zhí)行了哪一路分支之后,都執(zhí)行if的下一條語句。例

if(x>y)max=x;elsemax=y;printf(”max=%d”,max);例.判斷給定的某一年是否是閏年。分析:如果某年能被4整除而不能被100整除,或者能被400整除,那么該年就是閏年,否則就是平年。

if(year%4==0&&year%100!=0||year%400==0)#include<stdio.h>main(){intyear,leap=0;printf("\n請(qǐng)輸入年份(yyyy):");scanf("%d",&year);

/*判斷該年是否是閏年*/

if(year%4==0&&year%100!=0||year%400==0)

leap=1;

if(leap)

/*leap=1,即該年是閏年*/printf("%d年是閏年.\n",year);

else

/*leap=0,即該年是平年*/printf("%d年是平年.\n",year);}例.制作簡(jiǎn)單的猜數(shù)字游戲。程序運(yùn)行時(shí)自動(dòng)產(chǎn)生1~5之間的隨機(jī)數(shù),接著等待鍵盤輸入猜的數(shù)字。如果猜對(duì)了,顯示“猜對(duì)了”相關(guān)信息;否則,如果猜錯(cuò)了,則顯示“猜錯(cuò)了”相關(guān)信息。分析:如何產(chǎn)生1~5之間的隨機(jī)數(shù)?1)隨機(jī)數(shù)產(chǎn)生:C語言提供srand()函數(shù),配合rand()函數(shù)可產(chǎn)生介于0~32767之間的隨機(jī)數(shù)(函數(shù)均包含在stdlib.h中)。srand((unsigned)time(NULL));

/*以做隨機(jī)數(shù)產(chǎn)生器的種子,time()函數(shù)包含在time.h中

*/guess=rand();

/*以上面得到的種子產(chǎn)生0~32767的整數(shù)*/2)1~5之間的隨機(jī)數(shù):首先用rand()函數(shù)產(chǎn)生的隨機(jī)數(shù),然后對(duì)5求余(rand()%5),產(chǎn)生0~4之間的整數(shù),然后再加1,即rand()%5+1就產(chǎn)生1~5之間的整數(shù)。#include<stdio.h>#include<stdlib.h>#include<time.h>main(){intdata,guess;

srand((unsigned)time(NULL));data=rand()%5+1;printf("請(qǐng)輸入要猜的數(shù)字(限1-5):");scanf("%d",&guess);

if(guess==data)printf("猜對(duì)了!~_~,正確數(shù)字為%d!\n",data);

elseprintf("猜錯(cuò)了!0_0,正確數(shù)字為%d!\n",data);}

例:一個(gè)5位數(shù),判斷它是不是回文數(shù),即12321是回文數(shù),個(gè)位與萬位相同,十位與千位相同。分析:分解出每一位數(shù)(萬位、千位、十位和個(gè)位),然后判斷。輸出不是回文輸出是回文ge=x%10shi=x%100/10qian=x%10000/1000輸入的數(shù)字不是5位數(shù)wan=x/10000輸入長(zhǎng)整數(shù)wan>0&&wan<10wan==ge&&qian==shiYNYNmain(){longx;intge,shi,qian,wan;printf("pleaseinputthe5bitsnumber:\n");scanf("%ld",&x);wan=x/10000;

if(wan>0&&wan<10){qian=x%10000/1000;shi=x%100/10;ge=x%10;

if(ge==wan&&shi==qian)

printf("Itispalindromicnumber!\n");

elseprintf("Itisnotpalindromicnumber!\n");}

else printf(“Thenumberisnot5bits!\n");}3.if(表達(dá)式1)語句1

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

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

elseif(表達(dá)式m)語句melse語句n...例:有一個(gè)函數(shù)如下:x(x<1)y=2x+1(1≤x<10)5x-17(x≥10)編程序,輸入x值,輸出y值main(){floatx,y;printf("Inputx:");scanf("%f",&x);

if(x<1)y=x;

elseif(x<10)y=2*x+1;

elsey=5*x-17;printf("y=%f\n",y);}分析:根據(jù)輸入字符的ASCII碼來判別類型。

例.編寫程序,要求判別鍵盤輸入字符的類別。#include"stdio.h"main(){charc;printf("\nPleaseinputacharacter

:\n");c=getchar();

if(c<32)

printf("Itisacontrolcharacter

!\n");

elseif(c>=’0’&&c<=’9’)

printf("Itisadigit!\n");

elseif(c>=’A’&&c<=’Z’)printf("Itisacapitalletter!\n");

elseif(c>=’a’&&c<=’z’)

printf("Itisalowerletter!\n");

elseprintf("Itisothercharacter!\n");}說明:(1)三種形式的if語句中都出現(xiàn)的“表達(dá)式”,不僅只限于邏輯和關(guān)系表達(dá)式,還可以是任何類型的;(2)if語句中,判斷條件表達(dá)式必須用(

)括起來,

條件后面不加分號(hào),但語句之后有分號(hào);(4)if和else后的語句可以只有一條,也可以使用{}包括的幾條語句構(gòu)成的復(fù)合語句。(3)else不是語句,不能單獨(dú)使用,與if配對(duì)使用;(5)if(x)if(x!=0)(6)if(!x)

if(x==0)例考慮下面程序的輸出結(jié)果#include<stdio.h>main(){intx,y,t;scanf(“%d%d”,&x,&y);if(x>y)t=y;

y=x;

x=t;elsex++;

y++;printf(“%d,%d\n”,x,y);}Compile

Error!if語句的嵌套在if語句中:

if(表達(dá)式)語句1else語句2語句1和語句2都可以是另外一條if語句if(表達(dá)式1)

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

else語句2else

if(表達(dá)式3)語句3

else語句4if(表達(dá)式1)語句1else

if(表達(dá)式2)語句2

else語句3if(表達(dá)式1)

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

else語句2else語句3說明:(1)else總是與最近的if匹配;(2)else不能單獨(dú)出現(xiàn),總是與if配對(duì)使用。例:main(){intx=2,y=-1,z=2;

if(x<y)if(y<0)z=0;elsez+=1;printf(“z=%d\n”,z);}

z=2編寫原則:1、順序執(zhí)行的語句對(duì)齊;2、選擇體向內(nèi)縮進(jìn)3~4字符;3、若選擇體內(nèi)嵌套if語句,則該

if語句的選擇體亦繼續(xù)向內(nèi)縮進(jìn);4、若選擇體內(nèi)的語句多于1條,則必須使用{}括起來;5、原則上,選擇體內(nèi)只有一條語句時(shí),可以不使用{}括起來,但如果該語句分成多行編寫時(shí),則使用{}具有更強(qiáng)的可讀性。main(){……;if(a<b){……;if(c<d){ ……;}}else{……;}}switch語句用來實(shí)現(xiàn)多路分支形式:switch(表達(dá)式){

case

常量1:語句序列1;

break;

case

常量2:語句序列2;

break;

case

常量n:語句序列n;

break;

default:

語句序列n+1;}執(zhí)行過程:首先計(jì)算表達(dá)式的值,若該值與某個(gè)case后面的常量相等,則執(zhí)行其后的語句序列,遇到break語句時(shí),跳出switch語句;如果表達(dá)式的值與所有常量都不相等,若存在default則執(zhí)行其后的語句序列,否則什么也不做。說明:switch語句中的表達(dá)式可以為任何類型,一般為整型或字符型,相應(yīng)地常量的類型應(yīng)與其相同;2.同一switch語句的各case常量值,必須互不相同;3.case常量相當(dāng)于語句標(biāo)號(hào);執(zhí)行switch語句時(shí),找到與表達(dá)式值相等的某case常量,從此標(biāo)號(hào)開始執(zhí)行下去,對(duì)以后的標(biāo)號(hào)不再比較,直到“}”為止;一般應(yīng)該在每個(gè)case后的語句序列跟一個(gè)break語句以便跳出switch正確實(shí)現(xiàn)多分支,可認(rèn)為break語句是case中的一部分。4.各個(gè)case后面的default語句出現(xiàn)的次序不影響結(jié)果;5.多個(gè)case可以共用一組執(zhí)行語句.例main(){inti=10;switch(i){case9:i+=1;case10:i+=1;case11:i+=1;default:i+=1;}printf(“i=%d”,i);}i=13例main(){inta=1,b=0;switch(a){case1:switch(b){case0:printf(“**0**”);break;case1:printf(“**1**”);break;}case2:printf(“**2**”);break;}}**0****2**分析:求解此方程的解,應(yīng)該考慮到各種可能的情況:當(dāng)a=0時(shí),不是二次方程。否則:1)當(dāng)b2-4ac=0時(shí),方程有兩個(gè)相等的實(shí)根。2)當(dāng)b2-4ac>0時(shí),方程有兩個(gè)不相等的實(shí)根。3)當(dāng)b2-4ac<0時(shí),方程有兩個(gè)共軛的復(fù)根。選擇分支結(jié)構(gòu)程序舉例例.求ax2+bx+c=0方程的解。#include<stdio.h>#include<math.h>main(){

floata,b,c,disc,x1,x2,realpart,imagpart;

printf("\n請(qǐng)輸入方程的三個(gè)系數(shù):(a=,b=,c=)\n");

scanf("a=%f,b=%f,c=%f",&a,&b,&c);

if(fabs(a)<=1e-6)

printf("該方程沒有實(shí)根。\n");

elsedisc=b*b-4*a*c;

if(fabs(disc)<=1e-6)

printf("該方程有兩個(gè)相等的實(shí)根:x1=x2=%8.4f\n",-b/(2*a));

elseif(disc>1e-6)

{

x1=(-b+sqrt(disc))/(2*a);

x2=(-b-sqrt(disc))/(2*a);

printf("該方程有兩個(gè)不相等的實(shí)根:\nx1=%8.4f,x2=%8.4f\n",x1,x2);

}

else

{

realpart=-b/(2*a);

imagpart=sqrt(-disc)/(2*a);

printf("該方程有兩個(gè)復(fù)根:\n");

printf("x1=%8.4f+%8.4fi\n",realpart,imagpart);

printf("x2=%8.4f-%8.4fi\n",realpart,imagpart);

}}例.一個(gè)超市商品信息管理系統(tǒng),試編寫主程序部分實(shí)現(xiàn)簡(jiǎn)單的菜單選擇功能。#include”stdio.h”main(){intchoice;printf("\n\n\n********超市管理系統(tǒng)********\n\n");printf("1.錄入商品信息\n\n");printf("2.打印商品信息\n\n");printf("3.更新商品信息\n\n");printf("4.商品信息查詢\n\n");printf("5.商品信息統(tǒng)計(jì)\n\n");printf("6.商品銷售排行\(zhòng)n\n");printf("0.退出系統(tǒng)\n\n");printf("請(qǐng)選擇(0-6):");scanf("%d",&choice);

switch(choice){case1:

input_message();break;

/*錄入模塊*/

case2:

output_message();break;

/*輸出模塊*/

case3:

renew_message();break;

/*更新模塊*/

case4:

inquire_message();break;

/*查詢模塊*/

case5:

count_message();break;

/*統(tǒng)計(jì)模塊*/

case6:

sort_message();break;

/*排序模塊*/

case0:break;

/*退出系統(tǒng)*/}}

例.請(qǐng)輸入星期幾的第一個(gè)字母來判斷是星期幾,如果第一個(gè)字母一樣,則繼續(xù)判斷第二個(gè)字母。#include<stdio.h>main(){charletter;printf("請(qǐng)輸入某一天的第一個(gè)字母:(S/F/M/T/W)\n");scanf("%c",&letter);

switch(letter){case'S':printf("請(qǐng)輸入第二個(gè)字母:(a/u)\n");

if((letter=getchar())=='a')printf("星期六(Saturday)\n");

elseif((letter=getchar())=='u')printf("星期天(Sunday)\n");

elseprintf("數(shù)據(jù)有錯(cuò)!\n");

break;

case'F':printf("星期五(Friday)\n");break;

case'M':printf("星期一(Monday)\n");break;

case'T':printf("請(qǐng)輸入第二個(gè)字母:(u/h)\n");

if((letter=getchar())=='u')printf("星期二(Tuesday)\n");

elseif((letter=getchar())=='h')printf("星期四(Thursday)\n");

elseprintf("數(shù)據(jù)有錯(cuò)!\n");

break;

case'W':printf("星期三(Wednesday)\n");break;

default:printf("數(shù)據(jù)有錯(cuò)!\n");}}

3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)概述當(dāng)對(duì)某段程序要重復(fù)執(zhí)行時(shí),用循環(huán)語句。種類:4、if-goto語句1、while語句2、do-while語句3、for語句while語句while語句為“當(dāng)型”循環(huán)結(jié)構(gòu)一般形式:while(表達(dá)式)語句表達(dá)式語句非00執(zhí)行過程:當(dāng)表達(dá)式的值為真(非零)時(shí),重復(fù)執(zhí)行語句,直到邏輯表達(dá)式的值為假,跳出循環(huán)。特點(diǎn):先判斷表達(dá)式,后執(zhí)行語句200i=1i∑例.求。加數(shù)的范圍:i=1~i=200,sum=0;求和過程:sum=sum+i;i++;

此時(shí),sum=1;i=2;sum=sum+i;i++;

此時(shí),sum=1+2;i=3;sum=sum+i;i++;

此時(shí),sum=1+2+3;i=4;

……

sum=sum+i;i++;

此時(shí),sum=1+2+…+199;i=200;sum=sum+i;i++;

此時(shí),sum=1+2+…+199+200;i=201;i=1;i<=200sum+=i;i++;YN輸出sum結(jié)束開始sum=0;#include<stdio.h>main(){inti,sum=0;

i=1;

while

(i<=200)

{

sum=sum+i;

i++;

}printf("sum=%d\n",sum);}練習(xí):求整數(shù)1~n之和,n值由鍵盤輸入。#include<stdio.h>main(){inti,sum=0,n;printf("Pleaseinputn:");

scanf("%d",&n);i=1;

while(

i<=n

)

{

sum+=i;

i++;

}printf("Sum=%d\n",sum);}如何求n!或者xn例.從鍵盤上輸入一些數(shù),求所有正之和。當(dāng)輸入0或負(fù)數(shù)時(shí),程序結(jié)束。#include<stdio.h>main(){

floatx,sum=0;

scanf("%f",&x);

while(x>0)

{

sum+=x;

scanf("%f",&x);

}

printf("sum=%6.2f",sum);}例:求sum=1-2+3-4……n.#include<stdio.h>main(){inti,sum=0,n;printf("Pleaseinputn:");

scanf("%d",&n);i=1;

while(

i<=n

)

{

sum+=i;

i++;

}printf("Sum=%d\n",sum);}pow(-1,i+1)*i#include<math.h>說明:1、while語句之前必須預(yù)先設(shè)置判斷的初始條件。2、防止“死循環(huán)”的發(fā)生在循環(huán)體中要有能讓邏輯表達(dá)式值改變的語句。3、正確使用復(fù)合語句當(dāng)循環(huán)體中含多條語句時(shí),需用{}將這些語句括起來,構(gòu)成一個(gè)復(fù)合語句。4、while()后面不能加分號(hào);如果后面緊跟分號(hào),編譯系統(tǒng)認(rèn)為循環(huán)體是一條空語句,造成“死循環(huán)”。do-while語句do-while語句為“直到型”循環(huán)一般形式:do語句while(表達(dá)式);語句表達(dá)式非00do-while語句流程執(zhí)行過程:先執(zhí)行該循環(huán)體語句,再判斷while中的表達(dá)式,若為真,則繼續(xù)執(zhí)行循環(huán)體,否則,執(zhí)行while后面的語句。200n=1n∑例.求。#include<stdio.h>main(){inti,sum=0;

i=1;

do

{

sum=sum+i;

i++;

}while

(i<=200);printf("sum=%d\n",sum);}例:任輸入一個(gè)整數(shù),將該數(shù)各位倒序輸出。#include<stdio.h>main(){intnumber,digit;printf("pleaseinputdata:");

scanf("%d",&number);

do

{

digit=number%10;printf("%d",digit);

number=number/10;

}while(number!=0);}說明:當(dāng)兩者具有相同的循環(huán)體時(shí)當(dāng)while

后面的表達(dá)式第1次的值為“真”

時(shí),兩種循環(huán)得到的結(jié)果相同。否則,二者結(jié)果不相同。main(){intsum=0,i;scanf("%d",&i);

do{sum=sum+i;i++;

}while(i<=10);

printf("sum=%d",sum);}main(){intsum=0,i;scanf("%d",&i);

while(i<=10)

{sum=sum+i;i++;

}printf("sum=%d",sum);}當(dāng)i=1時(shí):sum=55當(dāng)i=11時(shí):sum=0當(dāng)i=1時(shí):sum=55當(dāng)i=11時(shí):sum=11for語句for語句可以用于循環(huán)次數(shù)不確定的結(jié)構(gòu)一般形式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句計(jì)算表達(dá)式1計(jì)算表達(dá)式2語句計(jì)算表達(dá)式3非00說明:表達(dá)式1:循環(huán)控制初始化表達(dá)式2:邏輯表達(dá)式,給出是否繼續(xù)循環(huán)的條件,如果值為真,則繼續(xù)執(zhí)行循環(huán);否則出循環(huán)。表達(dá)式3:控制循環(huán)正確進(jìn)行和結(jié)束。語句:需要重復(fù)執(zhí)行的部分,稱為循環(huán)體200n=1n∑例.求,用for語句實(shí)現(xiàn)。#include<stdio.h>main(){inti,sum=0;

i=1;

while

(i<=200)

{

sum=sum+i;

i++;

}printf("sum=%d\n",sum);}for(;i<=200;)

for

(i=1;i<=200;i++)

sum=sum+i;

說明:1、for中3個(gè)表達(dá)式類型任意可省略,但兩個(gè)“;”都不可省;2、無限循環(huán):for(;;)3、for語句可以轉(zhuǎn)換成while結(jié)構(gòu)4、表達(dá)式2一般是關(guān)系表達(dá)式或邏輯表達(dá)式,但也可以是數(shù)值表達(dá)式或字符表達(dá)式,只要其值為真,就執(zhí)行循環(huán)體。練習(xí):用for語句實(shí)現(xiàn)求n!。#include<stdio.h>main(){inti,fact=1,n;printf("Pleaseinputn:");

scanf("%d",&n);for(

i=1;i<=n;i++

)

fact*=i;

printf(“%d!=%d\n",n,fact);}思考:如何求s=1!+2!+…+n!?比較以下兩條語句:for(i=1,sum=0;sum+=i,i<=100;i++);for(i=1,sum=0;i<=100,sum+=i;i++);/*實(shí)現(xiàn)1+2+3+…+101*//*死循環(huán)*/if-goto

語句goto語句為無條件轉(zhuǎn)向語句一般形式:goto語句標(biāo)號(hào);例:用if-goto語句構(gòu)成循環(huán),求1到100的和。main(){inti=1,sum=0;

loop:if(i<=100){sum=sum+i;i++;

gotoloop;}printf(”%d”.sum);}break語句和continue語句break語句只能出現(xiàn)在兩種場(chǎng)合其一:用于switch語句中,其作用是跳出switch語句;其二:是用于循環(huán)語句,作用是提前結(jié)束整個(gè)循環(huán)的執(zhí)行在循環(huán)語句、switch語句嵌套使用的情況下,break語句只能跳出(或終止)它所在的結(jié)構(gòu),而不能同時(shí)跳出多層結(jié)構(gòu)。main(){intx=1,y=0,a=0,b=0,i=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf(“\na=%d,b=%d”,a,b);}for(i=0;i<=10;i++){a++;

if(i>5)break;}a=2,b=1a=8,b=1continue語句1、只能用于循環(huán)語句的循環(huán)體中2、作用是使執(zhí)行流程跳過循環(huán)體中continue后面的語句,即提前結(jié)束本次循環(huán)體語句序列。3、在while和do-while語句中,執(zhí)行continue語句就立即去測(cè)試是否繼續(xù)循環(huán)的條件。4、在for語句中,執(zhí)行continue語句立即計(jì)算表達(dá)式3,然后計(jì)算表達(dá)式2測(cè)試?yán)^續(xù)循環(huán)的條件。5、一般地,continue語句都會(huì)位于一個(gè)if語句中,即僅對(duì)滿足某一條件的該次循環(huán)起作用。

……break;……expN

Y

……continue;……expN

Y例:main(){ inti=5; do{switch(i%2) {case0:i--;break;case1:i--;continue; } i--; i--; printf("i=%d\n",i);}while(i>0);}i=1例.用公式求π的近似值,直到最后一項(xiàng)的絕對(duì)值小于10-6為止。4—π

3—1

5—1

7—1

≈1-+-+…t=1;while(fabs(t)>=1e-6){pi+=t;}n=n+2;s=-s;t=s/n;n=1;s=1;pi=0;t=1;while(fabs(t)>=1e-6){pi+=t;}n=n+2;s=-s;t=s/n;n=1;s=1;#include<math.h>pi=0;main(){floatt,pi,n;ints;

pi=pi*4;printf(“pi=%10.6f\n”,pi);}例.求100個(gè)數(shù)的最小值。#include<stdio.h>main(){ floatx; inti; floatmin; printf("輸入第1個(gè)數(shù):"); scanf("%f",&x); min=x;

for(i=2;i<=100;i++)

{ printf("輸入第%d個(gè)數(shù):",i); scanf("%f",&x);

if(x<min)min=x;

} printf("最小值=%f\n",min);}例.判斷m是否為素?cái)?shù)。#include<stdio.h>main(){intm,i,flag;printf("\nInputintegerm:");scanf("%d",&m);flag=1;

for(i=2;i<=m-1;i++)

{

if(m%i==0) {

flag=0;

i=m;}

}

if(flag==1)

printf("%disprime\n",m);

else

printf("%disnotprime\n",m);}sqrt(m);i++)#include<math.h>break;循環(huán)的嵌套在循環(huán)語句的循環(huán)體中又包含另外的完整的循環(huán)語句;個(gè)數(shù)和形式都任意。說明:1、三種循環(huán)可互相嵌套,層數(shù)不限,每層可有多個(gè)循環(huán)2、外循環(huán)每執(zhí)行一次循環(huán)體,內(nèi)循環(huán)要完整執(zhí)行一遍3、各種循環(huán)可以和各種選擇結(jié)構(gòu)相互嵌套例.計(jì)算1!+2!+3!+…+n!main(){inti,j,n;longfact,sum;printf("\nInputn=:"); scanf("%d",&n);

printf("1!+2!+3!+…+%d!=%ld",n,sum);}for(i=1;i<=n;i++){}fact=1; for(j=1;j<=n;j++) fact*=j;i;j++)sum=0;sum+=fact;fact=1;fact*=i;例:求100到200之間的所有素?cái)?shù)#include<stdio.h>#include<math.h>main(){intm,i,flag;printf("\nInputintegerm:");scanf("%d",&m);

flag=1;

for(i=2;i<sqrt(m);i++)

{

if(m%i==0) {flag=0;break;}

}

if(flag==1)

printf("%disprime\n",m);

else

printf("%disnotprime\n",m);}

for(m=101;m<=200;m++){printf("%disprime\n",m);輸出時(shí)每行輸出5個(gè)?}例.編程顯示以下圖形(共N行,N由鍵盤輸入)。*************************#include<stdio.h>main(){inti,j,n;printf("\npleaseinputlines:");scanf("%d",&n);

for(i=1;i<=n;i++)

{

for(j=1;j<=n-i;j++) printf("");

for(j=1;j<=2*i-1;j++)printf("*");printf("\n");

}}例.輸出九九乘法表,輸出格式如下:

1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81#include<stdio.h>main(){ inti,j;

for(i=1;i<=9;i++) {for(j=1;j<=i;j++) printf("%d*%d=%d\t",j,i,i*j);printf("\n");

}}循環(huán)嵌套在使用中的重點(diǎn)內(nèi)容能夠正確判斷內(nèi)層循環(huán)體的范圍能夠正

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論