




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、項(xiàng)目三項(xiàng)目三 學(xué)生成績(jī)的分組匯總學(xué)生成績(jī)的分組匯總 項(xiàng)目要求項(xiàng)目要求一個(gè)班中有四個(gè)小組,求本學(xué)期期中考試中每個(gè)小組數(shù)學(xué)成績(jī)的總分及平均分。 項(xiàng)目分析項(xiàng)目分析第一必須做到在一個(gè)小組中對(duì)學(xué)生數(shù)學(xué)成績(jī)的平均分與總分進(jìn)行計(jì)算;然后就是重復(fù)進(jìn)行4次。所以,將這一項(xiàng)目分成二個(gè)任務(wù)介紹,任務(wù)一是求一個(gè)小組學(xué)生成績(jī)的總分及平均分;任務(wù)二是求四個(gè)小組學(xué)生成績(jī)的總分及平均分。 分析:如果本小組一共有十個(gè)同學(xué),顯然不可能定義十個(gè)變量x1,x2,x10,然后在程 序中表示成sum=x1+x2+x3+x10。求一個(gè)小組的學(xué)生總成績(jī)的步驟就是:先輸入第一個(gè)學(xué)生的成績(jī),然后將這個(gè)成績(jī)加到總分中,接下來(lái),輸入第二個(gè)學(xué)生的成績(jī)
2、,再將第二個(gè)學(xué)生的成績(jī)加入到總分中,不斷重復(fù),直到小組中最后一個(gè)同學(xué)的成績(jī)輸入并加入到總分為止。重復(fù)執(zhí)行就是循環(huán)。重復(fù)工作是計(jì)算機(jī)特別擅長(zhǎng)的工作之一。任務(wù)任務(wù) 1 求一個(gè)小組學(xué)生成績(jī)的總分及平均分求一個(gè)小組學(xué)生成績(jī)的總分及平均分 一、任務(wù)提出一、任務(wù)提出 一個(gè)班進(jìn)行了一次考試,現(xiàn)要輸入第一小組學(xué)生的成績(jī),計(jì)算這一小組的總分與平均分,并按要求輸出。二、具體實(shí)現(xiàn)二、具體實(shí)現(xiàn)#include stdio.hmain()int score,i,sum=0;float avg;i=1;printf( 請(qǐng)輸入本小組10個(gè)學(xué)生的成績(jī):);while(i=10)scanf(%d,&score);sum=sum
3、+score;i=i+1;avg=sum/10.0;printf(本小組10個(gè)學(xué)生的總分為:%dn,sum);printf(本小組10個(gè)學(xué)生的平均分為:%.2fn,avg);while(i=10)scanf(“%d”,&score);sum=sum+score;i=i+1;三、相關(guān)知識(shí)三、相關(guān)知識(shí)(一一) 常見(jiàn)的三種循環(huán)語(yǔ)句常見(jiàn)的三種循環(huán)語(yǔ)句1. while循環(huán)循環(huán)【語(yǔ)法】【語(yǔ)法】(1)一般格式:一般格式: while(循環(huán)繼續(xù)條件循環(huán)繼續(xù)條件) 循環(huán)體語(yǔ)句組循環(huán)體語(yǔ)句組;(2)執(zhí)行過(guò)程執(zhí)行過(guò)程 1) 求解求解“循環(huán)繼續(xù)條件循環(huán)繼續(xù)條件”,如果其值為非,如果其值為非0,則轉(zhuǎn),則轉(zhuǎn) 2);否則轉(zhuǎn)
4、;否則轉(zhuǎn)3)。 2) 執(zhí)行循環(huán)體語(yǔ)句組,然后轉(zhuǎn)執(zhí)行循環(huán)體語(yǔ)句組,然后轉(zhuǎn)1)。 3) 退出退出while循環(huán)。循環(huán)。i=1;while(i=10)scanf(“%d”,&score);sum=sum+score;i=i+1;首先i的初值為1,顯然1=10,滿足循環(huán)條件,即輸入score,然后將score加入到sum中,i=2;由于2=10,還是滿足循環(huán)條件,執(zhí)行第二次循環(huán)體。即輸入score,然后將score加入到sum中,i=3;這樣一直重復(fù),直到i=11,不再滿足循環(huán)繼續(xù)條件;從而跳出循環(huán)體。所以這段程序的意思是輸入10次score,并將每一次輸入的score加入到sum中。 任務(wù)情景中的程
5、序及流程圖任務(wù)情景中的程序及流程圖#include stdio.hmain()int score,i,sum=0;float avg;i=1;printf( 請(qǐng)輸入本小組10個(gè)學(xué)生的成績(jī):);while(i=10)scanf(%d,&score);sum=sum+score;i=i+1;avg=sum/10.0;printf(本小組10個(gè)學(xué)生的總分為:%dn,sum);printf(本小組10個(gè)學(xué)生的平均分為:%.2fn,avg);while的進(jìn)一步練習(xí)的進(jìn)一步練習(xí) 【例3-1】本學(xué)期期末考試進(jìn)行了三門(mén)課程的測(cè)試。成績(jī)單下來(lái)后,8個(gè)室友兄弟要一比高低,這就要得到每個(gè)人三門(mén)課程的總分和平均分,用
6、C語(yǔ)言實(shí)現(xiàn)之。分析:(1)定義五個(gè)實(shí)型變量x,y,z,s和avg,依次放每一名學(xué)生的三門(mén)課程成績(jī)、這三門(mén)課程的總成績(jī)和平均分;(2)每次取出一名學(xué)生的三門(mén)課程成績(jī),依次給x,y,z,然后再一起放到s中,就可以得到該同學(xué)的三門(mén)課的總分和平均分。(3)以上步驟重復(fù)執(zhí)行8次。#include stdio.hmain()int i;float x,y,z,sum,avg;i=1;while(i=8)printf(請(qǐng)輸入第%d個(gè)同學(xué)三門(mén)課的成績(jī),i);scanf(%f%f%f,&x,&y,&z);sum=x+y+z;avg=sum/3;printf(第%d個(gè)同學(xué)的總分為%.2f,平均分%.2fn,i,s
7、um,avg);i=i+1;【例【例3-2】用】用while語(yǔ)句求語(yǔ)句求sum=1+2+3+100。分析:求sum=1+2+3+100,可以分解成:sum=0;sum=sum+1;sum=sum+2;sum=sum+isum=sum+100所以,可以看成sum=sum+i重復(fù)了100次,而i恰好等于1100 #include main()int i,sum=0;i=1;while(i100。 #include main()int i;i=1;while(i=100)if(i%3!=0)printf(“%3d”,i);i+;程序如下 do while語(yǔ)句語(yǔ)句 (1)一般形式:do循環(huán)體語(yǔ)句組;w
8、hile(循環(huán)繼續(xù)條件);(2)執(zhí)行過(guò)程1) 執(zhí)行do后面的循環(huán)體語(yǔ)句組;2) 求解while后面的“循環(huán)繼續(xù)條件”,如果其值為非0,則轉(zhuǎn)1);否則轉(zhuǎn)3)。3) 退出while循環(huán)。循環(huán)變量賦初值循環(huán)體語(yǔ)句組while(循環(huán)繼續(xù)條件);求一個(gè)小組學(xué)生成績(jī)的總分及平均分的程序可改寫(xiě)為:求一個(gè)小組學(xué)生成績(jī)的總分及平均分的程序可改寫(xiě)為:#include stdio.hmain()int score,i,sum=0;float avg;i=1;printf( 請(qǐng)輸入本小組10個(gè)學(xué)生的成績(jī):);doscanf(%d,&score);sum=sum+score;i=i+1; while(i=10);avg
9、=sum/10.0;printf(本小組10個(gè)學(xué)生的總分為:%dn,sum);printf(本小組10個(gè)學(xué)生的平均分為:%.2fn,avg);do while,總是先執(zhí)行一次循環(huán)體,然后再求循環(huán)繼續(xù)條件,因此,無(wú)論循環(huán)繼續(xù)條件是否為“真”,循環(huán)體至少執(zhí)行一次;(2) do while循環(huán)與while循環(huán)十分相似;(3)它們的主要區(qū)別是:while循環(huán)先判斷循環(huán)條件再執(zhí)行循環(huán),循環(huán)體可能一次也不執(zhí)行,do while循環(huán)先執(zhí)行循環(huán)體,然后再求循環(huán)繼續(xù)條件,循環(huán)體至少執(zhí)行一次。例例3-4將例將例3-1用用do while語(yǔ)句來(lái)改進(jìn)實(shí)現(xiàn)。語(yǔ)句來(lái)改進(jìn)實(shí)現(xiàn)。 求求8個(gè)室友兄弟每個(gè)人三門(mén)課程的總分和平均分
10、個(gè)室友兄弟每個(gè)人三門(mén)課程的總分和平均分#include stdio.hmain()int i;float x,y,z,sum,avg;i=1;doprintf(請(qǐng)輸入第請(qǐng)輸入第%d個(gè)同學(xué)三門(mén)課的成績(jī)個(gè)同學(xué)三門(mén)課的成績(jī),i);scanf(%f%f%f,&x,&y,&z);sum=x+y+z;avg=sum/3;printf(第第%d個(gè)同學(xué)的總分為個(gè)同學(xué)的總分為%.2f,平均分平均分%.2fn,i,sum,avg);i=i+1; while(i=8);例例3-5將例將例3-2用用do while語(yǔ)句來(lái)改進(jìn)實(shí)現(xiàn)。語(yǔ)句來(lái)改進(jìn)實(shí)現(xiàn)。 求sum=1+2+3+100。#include main()int i
11、,sum=0;i=1;dosum+=i;i+; while(i=100);printf(“1+2+3+100的和為:%dn”,sum);例例3-6將例將例3-3用用do while語(yǔ)句來(lái)改進(jìn)實(shí)現(xiàn)。語(yǔ)句來(lái)改進(jìn)實(shí)現(xiàn)。 將將1100之間不能被之間不能被3整除的數(shù)輸出。整除的數(shù)輸出。#include main()int i;i=1;doif(i%3!=0)printf(“%3d”,i);i+; while(i=100);for語(yǔ)句語(yǔ)句 (1)一般形式: for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 循環(huán)體語(yǔ)句(2)執(zhí)行過(guò)程 1) 先執(zhí)行“表達(dá)式1”; 2) 然后判別“表達(dá)式2”,當(dāng)“表達(dá)式2”的值為真時(shí),則
12、轉(zhuǎn)3);否則轉(zhuǎn)4)。 3) 執(zhí)行循環(huán)體語(yǔ)句組,然后轉(zhuǎn)2) 4) 退出for循環(huán)。 (1) “表達(dá)式1”為初始化表達(dá)式;(2) “表達(dá)式2”為條件表達(dá)式,是一個(gè)邏輯量,用于判斷循環(huán)繼續(xù)的條件是否成立,其值為真時(shí),循環(huán)繼續(xù),否則循環(huán)中止;(3) “表達(dá)式3”為修正表達(dá)式,一般為賦值表達(dá)式,用于定義循環(huán)變量的增值。求一個(gè)小組學(xué)生成績(jī)的總分及平均分的程序可改寫(xiě)為:求一個(gè)小組學(xué)生成績(jī)的總分及平均分的程序可改寫(xiě)為: #include stdio.hmain()int score,i,sum=0;float avg;printf( 請(qǐng)輸入本小組10個(gè)學(xué)生的成績(jī):);for(i=1;i=10;i+)scanf
13、(%d,&score);sum=sum+score; avg=sum/10.0;printf(本小組10個(gè)學(xué)生的總分為:%dn,sum);printf(本小組10個(gè)學(xué)生的平均分為:%.2fn,avg);for的進(jìn)一步練習(xí)的進(jìn)一步練習(xí) 【例3-7】將例3-1用for語(yǔ)句來(lái)改進(jìn)實(shí)現(xiàn)。(求八位室友每個(gè)人三門(mén)課的總分及平均分)#include stdio.hmain()int i;float x,y,z,sum,avg;for(i=1;i=8;i+)printf(請(qǐng)輸入第請(qǐng)輸入第%d個(gè)同學(xué)三門(mén)課的成績(jī)個(gè)同學(xué)三門(mén)課的成績(jī),i);scanf(%f%f%f,&x,&y,&z);sum=x+y+z;avg=s
14、um/3;printf(第第%d個(gè)同學(xué)的總分為個(gè)同學(xué)的總分為%.2f,平均分平均分%.2fn,i,sum,avg);【例【例3-8】將例】將例3-2用用for語(yǔ)句來(lái)改進(jìn)實(shí)現(xiàn)。語(yǔ)句來(lái)改進(jìn)實(shí)現(xiàn)。求sum=1+2+3+100。#include main()int i,sum=0;for(i=1;i=100;i+)sum+=i; /*由于循環(huán)體只有一條語(yǔ)句,所以可將由于循環(huán)體只有一條語(yǔ)句,所以可將“sum+=i; ”的花括號(hào)省略的花括號(hào)省略*/printf(“1+2+3+100的和為:%dn”,sum);程序運(yùn)行結(jié)果為:“1+2+3+100的和為:5050”例例3-9將例將例3-3用用for語(yǔ)句來(lái)改進(jìn)
15、實(shí)現(xiàn)。語(yǔ)句來(lái)改進(jìn)實(shí)現(xiàn)。 v 將將1100之間不能被之間不能被3整除的數(shù)輸出。整除的數(shù)輸出。#include main()int i;for(i=1;i=100;i+)if(i%3!=0)printf(“%3d”,i);/*由于循環(huán)體只有一條語(yǔ)句,所以可將由于循環(huán)體只有一條語(yǔ)句,所以可將“if(i%3!=0)printf(“%3d”,i);”的花括號(hào)省略的花括號(hào)省略*/例例3-10編程實(shí)現(xiàn)百錢(qián)買(mǎi)百雞。編程實(shí)現(xiàn)百錢(qián)買(mǎi)百雞。 有一老大爺去集貿(mào)市場(chǎng)買(mǎi)雞,他想用100元錢(qián)買(mǎi)100只雞,而且要求所買(mǎi)的雞有公雞、母雞、小雞。已知公雞2元一只,母雞3元一只,小雞0.5元一只。問(wèn)老大爺要買(mǎi)多少只公雞、母雞、小雞
16、恰好花去100元錢(qián),并且買(mǎi)到100只雞?分析分析 x+y+z=100 x+3y+0.5z=100 y=1.5z-100 x=200-2.5z假設(shè)公雞買(mǎi)x只,母雞買(mǎi)y只,小雞買(mǎi)z只,則由題意可得: (1)當(dāng)z=2時(shí),計(jì)算y與x的值(2)當(dāng)z=4時(shí),計(jì)算y與x的值(3)當(dāng)z=8時(shí),計(jì)算y與x的值(4)一直計(jì)算到z=98時(shí),計(jì)算y與x的值顯然,如果x,y的值都大于零,則輸出x,y,z。所以用for循環(huán)的程序 如左:#include main()int x,y,z;for(z=2;z0 & y0)printf(“公雞數(shù)為公雞數(shù)為%d,母雞數(shù)為母雞數(shù)為%d,小雞數(shù)為小雞數(shù)為%dn,x,y,z); 知識(shí)擴(kuò)
17、展知識(shí)擴(kuò)展(一)(一)for 語(yǔ)句的多種表示方法語(yǔ)句的多種表示方法vfor語(yǔ)句可省略語(yǔ)句可省略“表達(dá)式表達(dá)式1”。vfor語(yǔ)句可省略語(yǔ)句可省略“表達(dá)式表達(dá)式2”。vfor語(yǔ)句可省略語(yǔ)句可省略“表達(dá)式表達(dá)式3”。vfor語(yǔ)句可省略語(yǔ)句可省略“表達(dá)式表達(dá)式1”和和“表達(dá)式表達(dá)式3”。v“表達(dá)式表達(dá)式1” 和和“表達(dá)式表達(dá)式3”可以是一個(gè)簡(jiǎn)單的表達(dá)式,也可以是逗可以是一個(gè)簡(jiǎn)單的表達(dá)式,也可以是逗號(hào)表達(dá)式。號(hào)表達(dá)式。 for(i=1;i=10;i+)s=s+i;i=1;for(;i=10;i+)s=s+i;“表達(dá)式表達(dá)式1”的作用是設(shè)置循環(huán)初始條件,的作用是設(shè)置循環(huán)初始條件,“表達(dá)式表達(dá)式1”省略后,
18、省略后,應(yīng)在應(yīng)在for語(yǔ)句前面設(shè)置循環(huán)初始條件。但語(yǔ)句前面設(shè)置循環(huán)初始條件。但“表達(dá)式表達(dá)式1”后的分后的分號(hào)不能省略。號(hào)不能省略。 若省略“表達(dá)式2”,則不判斷循環(huán)條件,認(rèn)為循環(huán)條件始終為真,循環(huán)將無(wú)終止地進(jìn)行下去。一般用條件語(yǔ)句退出循環(huán)。 “表達(dá)式表達(dá)式3”可省略,但程序必須在可省略,但程序必須在“循環(huán)體語(yǔ)句循環(huán)體語(yǔ)句”中設(shè)置循環(huán)變量中設(shè)置循環(huán)變量增值,來(lái)修改循環(huán)條件,以確保循環(huán)能正常結(jié)束。如:增值,來(lái)修改循環(huán)條件,以確保循環(huán)能正常結(jié)束。如: for(i=1;i=10;i+)s=s+i;for(i=1;i=10;)s=s+i;i+;for(i=1;i=10;i+)s=s+i;i=1;for
19、(;i=10;)s=s+i; i+; 如實(shí)現(xiàn)1+2+3+100的和的for語(yǔ)句可以寫(xiě)為:for(sum=0,i=1;i=100;i+)sum=sum+i;(二)(二)break語(yǔ)句語(yǔ)句(1) break語(yǔ)句的一般形式語(yǔ)句的一般形式 break;(2) break語(yǔ)句的作用語(yǔ)句的作用 終止對(duì)switch語(yǔ)句或循環(huán)語(yǔ)句的執(zhí)行(跳出這兩種語(yǔ)句),轉(zhuǎn)移到其后的語(yǔ)句處執(zhí)行。在循環(huán)語(yǔ)句中,break語(yǔ)句常常和if語(yǔ)句一起使用,表示當(dāng)條件滿足時(shí),立即終止循環(huán)。注意break語(yǔ)句不是跳出if語(yǔ)句,而是跳出循環(huán)語(yǔ)句。循環(huán)語(yǔ)句可以嵌套使用,break語(yǔ)句只能跳出(終止)其所在的循環(huán),而不能跳出多層循環(huán)。說(shuō)明for
20、(i=2;i=x-1;i+)if(x%i=0)break;如果如果x能被能被i(i=2,3,x-1)整除,)整除,則結(jié)束循環(huán)。則結(jié)束循環(huán)?!纠纠?-11】輸入二個(gè)正整數(shù),求它們的最大公約數(shù)?!枯斎攵€(gè)正整數(shù),求它們的最大公約數(shù)。(1)若輸入二個(gè)正整數(shù)分別為a,b,它的最大公約數(shù)為k,k的值應(yīng)小于等于a,b中的一個(gè)相對(duì)小數(shù);(2)然后進(jìn)行a%k及b%k的運(yùn)算,若它們的余數(shù)為零,則k就是最大公約數(shù)。(3)若a%k及b%k中至少有一個(gè)的余數(shù)不為零,則k=k-1,然后再執(zhí)行(2)。#include main()int a,b,k;printf(請(qǐng)輸入二個(gè)正整數(shù));scanf(%d%d,&a,&b);
21、if(a=1)if(a%k=0 & b%k=0)break;k-;printf(最大公約數(shù)為:%dn,k);程序的運(yùn)行結(jié)果為:請(qǐng)輸入二個(gè)正整數(shù)5 6最大公約數(shù)為1判斷素?cái)?shù)判斷素?cái)?shù)【例3-12】在數(shù)學(xué)課上,李老師要同學(xué)們對(duì)給定的任意正整數(shù)進(jìn)行判斷,看是否為素?cái)?shù),這個(gè)數(shù)學(xué)問(wèn)題,用C語(yǔ)言該如何解決? 分析:因?yàn)樗財(cái)?shù)只能被1及本身整除,所以判斷一個(gè)大于2的正整數(shù)x是否為素?cái)?shù),就讓x按順序除以i=2、3、x-1,若x能被它們中的任一個(gè)除盡,就可跳出循環(huán)。因?yàn)榇藬?shù)一定不是素?cái)?shù)。所以判斷x是不是素?cái)?shù),就可以用i的值來(lái)衡量,若i=x,則x一定是素?cái)?shù),否則就不是素?cái)?shù)。#include main()int i,x
22、;printf(請(qǐng)輸入一個(gè)正整數(shù));scanf(%d,&x);for(i=2;i=x-1;i+)if(x%i=0)break;if(i=x)printf(%d是素?cái)?shù)n,x);elseprintf(%d不是素?cái)?shù)n,x);【例3-13】程序功能:運(yùn)行時(shí)輸入10個(gè)數(shù),然后分別輸出其中的最大值、最小值。分析:(1)輸入第一個(gè)數(shù)x,并假定第一個(gè)數(shù)既是十個(gè)數(shù)中的最大值max,也是十個(gè)數(shù)中的最小值min;(2)然后輸入下一個(gè)數(shù)x,將最大值max及最小數(shù)min與x分別相比,若max小于x,則max=x;若min大于x,則min=x;(3) 不斷重復(fù)步驟(2),直到第10個(gè)數(shù)比完為止;類似10個(gè)壯士打擂臺(tái),第一
23、個(gè)壯士先上場(chǎng),認(rèn)為自已是“老大”,然后第二個(gè)壯士再上場(chǎng),與前面的“老大”比武,贏者才是真的“老大”,一直到第十個(gè)壯士比完為止。#include void main() float x,max,min; int i;printf(請(qǐng)輸入十個(gè)同學(xué)的成績(jī):) ; for(i=1;imax) max=x; if(xmin) min=x; printf(最高分為%.1f,最低分為%.1fn,max,min);在if語(yǔ)句中比較兩個(gè)數(shù)相等是“=”符號(hào),而不是數(shù)學(xué)中的“=” 符號(hào),在C語(yǔ)言中“=”是賦值號(hào)。 【例3-14】程序功能:運(yùn)行時(shí)輸入整數(shù)n,輸出n各位數(shù)字之和。(例如:n=1234,則輸出10,n=-
24、123,則輸出6。分析:分析:若若n的值為的值為2345,則,則(1)個(gè)位數(shù)的取法是:)個(gè)位數(shù)的取法是:(2)十位數(shù)的數(shù)字取法是:)十位數(shù)的數(shù)字取法是:(3)百位數(shù)的數(shù)字的取法:)百位數(shù)的數(shù)字的取法:(4)同理,要取得千位數(shù)的數(shù))同理,要取得千位數(shù)的數(shù)字字:通過(guò)n%10就能獲取個(gè)位數(shù)字“5” 如果能將如果能將2345化為化為234,則就能輕松地取到,則就能輕松地取到4,所以執(zhí)行所以執(zhí)行n=2345/10,再執(zhí)行,再執(zhí)行n=n%10就行就行 執(zhí)行執(zhí)行234/10,即,即n=n/10,新的,新的n的值將成為的值將成為23,然后再執(zhí)行然后再執(zhí)行n%10就可獲取數(shù)字就可獲取數(shù)字“3”; 同理,要取得千
25、位數(shù)的數(shù)字,只要執(zhí)行23/10,即n=n/10,新的n的值將成為2,然后再執(zhí)行n%10就可獲取“2”;總結(jié)以上各步驟,可以發(fā)現(xiàn),對(duì)任意的一個(gè)數(shù)總結(jié)以上各步驟,可以發(fā)現(xiàn),對(duì)任意的一個(gè)數(shù)n,執(zhí)行,執(zhí)行n%10,再執(zhí)行,再執(zhí)行n=n/10,然后不斷的重復(fù),就可以一個(gè)一個(gè)獲取個(gè)位數(shù)字、十位數(shù)字、百位數(shù)字然后不斷的重復(fù),就可以一個(gè)一個(gè)獲取個(gè)位數(shù)字、十位數(shù)字、百位數(shù)字,所以可以用循環(huán)去執(zhí)行以上的步驟,但是循環(huán)幾次呢?仔細(xì)分析不難發(fā)現(xiàn),所以可以用循環(huán)去執(zhí)行以上的步驟,但是循環(huán)幾次呢?仔細(xì)分析不難發(fā)現(xiàn),經(jīng)過(guò)若干次的執(zhí)行經(jīng)過(guò)若干次的執(zhí)行n=n/10,則新的,則新的n的值肯定會(huì)成為的值肯定會(huì)成為0,所以可以得出結(jié)
26、論:,所以可以得出結(jié)論:循環(huán)條件是循環(huán)條件是n!=0。程序的流程圖為:程序的流程圖為:int n,s=0;int n,s=0;提示提示請(qǐng)輸入一個(gè)數(shù):請(qǐng)輸入一個(gè)數(shù):輸入一個(gè)數(shù)輸入一個(gè)數(shù)n nn=|n|n=|n|n0s=s+n%10; /將余數(shù)累加到將余數(shù)累加到s中中n=n/10;n=n/10; 輸出輸出這個(gè)數(shù)的絕對(duì)值的各位數(shù)字這個(gè)數(shù)的絕對(duì)值的各位數(shù)字的和的和#include #include void main() int n,s=0;printf(請(qǐng)輸入一個(gè)數(shù):請(qǐng)輸入一個(gè)數(shù):); scanf(%d,&n); n=fabs(n); while(n!=0) s=s+n%10; n=n/10; pr
27、intf(“這個(gè)數(shù)的絕對(duì)值的各位數(shù)字的和為:這個(gè)數(shù)的絕對(duì)值的各位數(shù)字的和為:%dn,s);例例3-15編程求編程求: s=3+33+333+3333+33333+.+33333333 分析:可以將本題化為:分析:可以將本題化為:s=3(1+11+111+1111+11111+111111+1111111+11111111),所以只要求),所以只要求出了出了s=1+11+111+1111+11111+111111+1111111+11111111,然后再執(zhí)行,然后再執(zhí)行s=s*3,就能達(dá)到題目的要求。,就能達(dá)到題目的要求。而而s=1+11+111+1111+11111+111111+111111
28、1+11111111是一道累加題,是一道累加題,只要執(zhí)行只要執(zhí)行8次的次的s=s+t即可,只不過(guò)第一次循環(huán)中的即可,只不過(guò)第一次循環(huán)中的t是是1,第二次是,第二次是11,第,第三次是三次是111,分析后項(xiàng)與前項(xiàng)的關(guān)系是:前項(xiàng)的,分析后項(xiàng)與前項(xiàng)的關(guān)系是:前項(xiàng)的10倍加倍加1等于后項(xiàng),即等于后項(xiàng),即t=10*t+1 t=0;for(i=1;i=8;i+)t=10*t+1;s=s+t;#include void main() int i,t=0;long s=0; for(i=1;i=8;i+) t=t*10+1; s=s+t; s=s*3; printf(3+33+333+3333+33333+3
29、33333+3333333+33333333=%ldn,s);分析:(1)首先認(rèn)為最大值是當(dāng)x=1時(shí)的函數(shù)值,即max=1*1-5*1+sin(1);(2)然后計(jì)算出x=2時(shí)的f(x)與前面的max相比,如果maxf(x),則max=f(x)(3)將x=3,4,.10不斷重復(fù)步驟(2);(4)輸出max。例3-16編程:對(duì)x=1,2,3,10,求f(x)=x*x-5*x+sin(x)的最大值 #include #include void main() int x; float max; max=1*1-5*1+sin(1); for(x=2;x=10;x+) if(maxx*x-5*x+sin
30、(x)max= x*x-5*x+sin(x); printf(%fn,max);例例3-17編程找出編程找出100999之間所有的水仙花數(shù)之間所有的水仙花數(shù) 分析: 本題的編程思路是用枚舉法:即對(duì)100999之間的每一個(gè)數(shù),取出它的百位數(shù)a,十位數(shù)b,個(gè)位數(shù)c,如果a*a*a+b*b*b+c*c*c的值等于它自身,則輸出這個(gè)數(shù)。 顯然a=i/100, b=(i-a*100)/10; c=i-a*100-b*10;#include #includevoid main()int i,a,b,c;for(i=100;i=999;i+)a=i/100;b=(i-a*100)/10;c=i-a*100-
31、b*10;if (i=a*a*a+b*b*b+c*c*c) printf(%d is a Armstrong number!n,i);分析: 因?yàn)橐?jì)算前30項(xiàng)之和,可以用一個(gè)循環(huán): (1) 將a累加到s中,然后新的a變?yōu)閟qrt(a); (2) 重復(fù)多次(1)即可;當(dāng)前30項(xiàng)的和算完后,則輸出?!纠?-18】數(shù)列第一項(xiàng)為81,此后各項(xiàng)均為它前1項(xiàng)的正平方根,統(tǒng)計(jì)該數(shù)列前30項(xiàng)之和。#include #include void main() float s=0,a=81,i; for(i=1;i=30;i+)s=s+a;a=sqrt(a);printf(“%fn”,s); 運(yùn)行結(jié)果運(yùn)行結(jié)果:
32、121.335854分析: 用一個(gè)循環(huán),將每一項(xiàng)累加到一個(gè)變量中,因?yàn)樗枰行粩?shù)保留10位,所以要定義一個(gè)雙精度型變量?!纠?-19】編寫(xiě)程序,完成以下功能:計(jì)算2的平方根、3的平方根、10的平方根之和,要求計(jì)算結(jié)果具有小數(shù)點(diǎn)后10位有效位數(shù)。#include #include void main() int i; double s=0;for(i=2;i=10;i+) s+=sqrt(i);printf(%.10lfn,s);程序的運(yùn)行結(jié)果為:21.46828781868【例【例3-20】韓信點(diǎn)兵:相傳漢高祖劉邦問(wèn)大將軍韓信現(xiàn)在統(tǒng)御兵士多】韓信點(diǎn)兵:相傳漢高祖劉邦問(wèn)大將軍韓信現(xiàn)在統(tǒng)御兵士
33、多少,韓信答,每少,韓信答,每3人一列余人一列余1人、人、5人一列余人一列余2人、人、7人一列余人一列余4人、人、13人人一列余一列余6人、人、17人一列余人一列余2人、人、19人一列余人一列余10人。人。 劉邦茫然而不知其劉邦茫然而不知其數(shù)。你呢?數(shù)。你呢? 你是一位優(yōu)秀的程序員,請(qǐng)你幫劉邦解決這一問(wèn)題,韓信你是一位優(yōu)秀的程序員,請(qǐng)你幫劉邦解決這一問(wèn)題,韓信至少統(tǒng)御了多少兵士。至少統(tǒng)御了多少兵士。 分析:這道題的本質(zhì)就是;分析:這道題的本質(zhì)就是;“一個(gè)正一個(gè)正整數(shù),被整數(shù),被3除時(shí)余除時(shí)余1,被,被5除時(shí)余除時(shí)余2,被被7除時(shí)余除時(shí)余4,被,被13除時(shí)余除時(shí)余6,被,被17除時(shí)余除時(shí)余2,被
34、,被19除時(shí)余除時(shí)余10,求這個(gè),求這個(gè)數(shù)。數(shù)?!彼裕覀兛梢詮淖钚∽匀凰?,我們可以從最小自然數(shù)出發(fā),一個(gè)一個(gè)地累加,如果它數(shù)出發(fā),一個(gè)一個(gè)地累加,如果它滿足條件,則退出循環(huán)。滿足條件,則退出循環(huán)。#include void main() long i;for(i=1;i+)if(i%3=2&i%5=2&i%7=4&i%13=6&i%17=2&i%19=10)break;printf(韓信統(tǒng)領(lǐng)的兵數(shù)有:韓信統(tǒng)領(lǐng)的兵數(shù)有:%ldn,i);程序運(yùn)行結(jié)果程序運(yùn)行結(jié)果為:為:韓信統(tǒng)領(lǐng)的兵韓信統(tǒng)領(lǐng)的兵數(shù)有:數(shù)有:131072任務(wù)任務(wù) 2 求每個(gè)小組學(xué)生成績(jī)的總分及求每個(gè)小組學(xué)生成績(jī)的總分及平均分平均
35、分一、問(wèn)題情景一、問(wèn)題情景 一個(gè)班進(jìn)行了一次考試,現(xiàn)要輸入全班四個(gè)小組的學(xué)生成績(jī),計(jì)算每一小組的總分與平均分,并按要求輸出。分析分析在任務(wù)在任務(wù)1中,所解決的問(wèn)題是:一個(gè)小組學(xué)生成績(jī)的總分及平均分。中,所解決的問(wèn)題是:一個(gè)小組學(xué)生成績(jī)的總分及平均分。若現(xiàn)在一個(gè)班中有四個(gè)小組,現(xiàn)求每個(gè)小組的學(xué)生成績(jī)的總分及若現(xiàn)在一個(gè)班中有四個(gè)小組,現(xiàn)求每個(gè)小組的學(xué)生成績(jī)的總分及平均分。也就是將任務(wù)平均分。也就是將任務(wù)1重復(fù)進(jìn)行四次,顯然寫(xiě)四段程序是不科學(xué)重復(fù)進(jìn)行四次,顯然寫(xiě)四段程序是不科學(xué)的,科學(xué)的方法是再嵌套一個(gè)循環(huán)。的,科學(xué)的方法是再嵌套一個(gè)循環(huán)。具體實(shí)現(xiàn):具體實(shí)現(xiàn):#include stdio.hmain
36、()int score,i,sum;float avg;int j=1;while(j=4) sum=0;i=1;printf( 請(qǐng)輸入第請(qǐng)輸入第%d小組學(xué)生成績(jī)小組學(xué)生成績(jī):,j);while(i=10)scanf(%d,&score);sum=sum+score;i=i+1; /本小組學(xué)生數(shù)增加本小組學(xué)生數(shù)增加1avg=sum/10.0;printf(本小組本小組10個(gè)學(xué)生的總分為:個(gè)學(xué)生的總分為:%dn,sum);printf(本小組本小組10個(gè)學(xué)生的平均分為:個(gè)學(xué)生的平均分為:%.2fn,avg);j+; /下一個(gè)小組下一個(gè)小組定義變量及賦初值score,i,sum定義平均分float
37、 avg;定義變量j并賦初值1 /j代表小組數(shù),先從第一小組開(kāi)始 j=4賦初值i=1,sum=0 /每個(gè)小組剛開(kāi)始總分為零提示請(qǐng)輸入本小組10個(gè)學(xué)生的成績(jī):i的初值為1i=10輸入成績(jī)scoresum=sum+score; /將成績(jī)累加到總分sum中i+; /學(xué)生人數(shù)增加1計(jì)算平均分輸出總分及平均分j+;程序運(yùn)行結(jié)果一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)體,稱為循環(huán)的嵌套,與一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)體,稱為循環(huán)的嵌套,與if的嵌套相同,的嵌套相同,內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)。內(nèi)層的優(yōu)先級(jí)比外層的高,內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)。內(nèi)層的優(yōu)先級(jí)比外層的高,只有內(nèi)
38、層的執(zhí)行完才能執(zhí)行外層的,循環(huán)嵌套的要領(lǐng)對(duì)各種語(yǔ)言都是一樣的。只有內(nèi)層的執(zhí)行完才能執(zhí)行外層的,循環(huán)嵌套的要領(lǐng)對(duì)各種語(yǔ)言都是一樣的。三種循環(huán)三種循環(huán)(while循環(huán)、循環(huán)、dowhile循環(huán)、循環(huán)、for循環(huán)循環(huán))可以互相嵌套??梢曰ハ嗲短?。三、相關(guān)知識(shí)三、相關(guān)知識(shí)(一一) 常見(jiàn)的循環(huán)嵌套常見(jiàn)的循環(huán)嵌套1. while循環(huán)嵌套循環(huán)嵌套while循環(huán)循環(huán)while( ) while( ) 2. do while循環(huán)嵌套循環(huán)嵌套do while循環(huán)循環(huán) do do while( ); while( );3. for循環(huán)嵌套循環(huán)嵌套for循環(huán)循環(huán) for( ; ; ) for( ; ; ) 4. wh
39、ile循環(huán)嵌套循環(huán)嵌套do while循環(huán)循環(huán) while( ) do while( ); 5. for循環(huán)嵌套循環(huán)嵌套while循環(huán)循環(huán) for( ; ; ) while( ) 6. do while循環(huán)嵌套循環(huán)嵌套for循環(huán)循環(huán) do for( ; ; ) while( );本任務(wù)用本任務(wù)用do while循環(huán)嵌套循環(huán)嵌套do while循環(huán)的程序解決:循環(huán)的程序解決: #include stdio.hmain()int score,i,sum;float avg;int j=1;do sum=0; i=1;printf( 請(qǐng)輸入第請(qǐng)輸入第%d小組學(xué)生成績(jī)小組學(xué)生成績(jī):,j);doscan
40、f(%d,&score);sum=sum+score;i=i+1; /本小組學(xué)生數(shù)增加本小組學(xué)生數(shù)增加1 while(i=10);avg=sum/10.0;printf(本小組本小組10個(gè)學(xué)生的總分為:個(gè)學(xué)生的總分為:%dn,sum);printf(本小組本小組10個(gè)學(xué)生的平均分為:個(gè)學(xué)生的平均分為:%.2fn,avg);j+; /下一個(gè)小組下一個(gè)小組 while(j=4);黃色的循環(huán)包含在玫瑰色的循環(huán)中本任務(wù)用本任務(wù)用for循環(huán)嵌套循環(huán)嵌套for循環(huán):循環(huán): #include stdio.hmain()int score,i,sum;float avg;int j=1;for(;j=4;j+
41、) sum=0;printf( 請(qǐng)輸入第請(qǐng)輸入第%d小組學(xué)生成績(jī)小組學(xué)生成績(jī):,j);for(i=1;i=10;i+)scanf(%d,&score);sum=sum+score;avg=sum/10.0;printf(本小組本小組10個(gè)學(xué)生的總分為:個(gè)學(xué)生的總分為:%dn,sum);printf(本小組本小組10個(gè)學(xué)生的平均分為:個(gè)學(xué)生的平均分為:%.2fn,avg); 黃色的循環(huán)包含在玫瑰色的循環(huán)中本任務(wù)本任務(wù)while循環(huán)嵌套循環(huán)嵌套do while循環(huán)循環(huán) #include stdio.hmain()int score,i,sum;float avg;int j=1;while(j=4
42、) sum=0;printf( 請(qǐng)輸入第請(qǐng)輸入第%d小組學(xué)生成績(jī)小組學(xué)生成績(jī):,j);i=1;doscanf(%d,&score);sum=sum+score;i+;while(i=10);avg=sum/10.0;printf(本小組本小組10個(gè)學(xué)生的總分為:個(gè)學(xué)生的總分為:%dn,sum);printf(本小組本小組10個(gè)學(xué)生的平均分為:個(gè)學(xué)生的平均分為:%.2fn,avg);j+; 黃色的循環(huán)包含在玫瑰色的循環(huán)中思考:用思考:用for循環(huán)嵌套while循環(huán)、do while循環(huán)嵌套for循環(huán)編程解決任務(wù)2?!纠纠?-21】用雙循環(huán)實(shí)現(xiàn)【例】用雙循環(huán)實(shí)現(xiàn)【例3-10】的百錢(qián)買(mǎi)百雞?!康陌馘X(qián)買(mǎi)百雞。分析:假設(shè)公雞買(mǎi)x只,母雞買(mǎi)y只,小雞買(mǎi)z只,則:(1)y可以是1、2、333的一個(gè)值。(2)x可以是1、2、350的一個(gè)值。(3)然后由y及x,顯然可解得z=100-x-y。(4)如果所花的錢(qián)剛好是100,則輸出x,y,z。程序如下:#include main()int x,y,z;for(x=1;x=50;x+) for(y=1;y=33;y+) z=100-x-y; if(2*x+3*y+0.5*z=100) printf(公雞數(shù)為%d,母雞
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- emc買(mǎi)斷合同范本
- 代款合作合同范本
- 2025年抗風(fēng)濕類藥品合作協(xié)議書(shū)
- 合同范本網(wǎng)翻譯
- 合同范本全是正式合同
- 雙方交付款合同范例
- 2025年分離純化控制系統(tǒng)項(xiàng)目合作計(jì)劃書(shū)
- 中英日文合同范本
- 合同范本模板去石墻
- 叉車置換銷售合同范本
- Unit5 What day is it today?(教學(xué)設(shè)計(jì))-2023-2024學(xué)年教科版(廣州)英語(yǔ)四年級(jí)下冊(cè)
- 《網(wǎng)絡(luò)信息安全教學(xué)》課件
- 徐州2025年江蘇徐州市口腔醫(yī)院招聘非在編醫(yī)務(wù)人員53人筆試歷年參考題庫(kù)附帶答案詳解-1
- 2025年01月2025中國(guó)作家協(xié)會(huì)所屬單位公開(kāi)招聘11人筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 影視制作項(xiàng)目委托制作協(xié)議
- 用色彩情感引發(fā)共鳴社交媒體運(yùn)營(yíng)秘訣
- 廣東2024年12月佛山市教育局公開(kāi)選調(diào)1名公務(wù)員筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 植物角創(chuàng)設(shè)培訓(xùn)
- 法院生活費(fèi)申請(qǐng)書(shū)
- 2025年湖南工藝美術(shù)職業(yè)學(xué)院高職單招職業(yè)技能測(cè)試近5年常考版參考題庫(kù)含答案解析
- 2025年江西機(jī)電職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
評(píng)論
0/150
提交評(píng)論