




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
會計(jì)學(xué)1C語言項(xiàng)目循環(huán)語句分析:如果本小組一共有十個同學(xué),顯然不可能定義十個變量x1,x2,……x10,然后在程序中表示成sum=x1+x2+x3+……+x10。求一個小組的學(xué)生總成績的步驟就是:先輸入第一個學(xué)生的成績,然后將這個成績加到總分中,接下來,輸入第二個學(xué)生的成績,再將第二個學(xué)生的成績加入到總分中,不斷重復(fù),直到小組中最后一個同學(xué)的成績輸入并加入到總分為止。重復(fù)執(zhí)行就是循環(huán)。重復(fù)工作是計(jì)算機(jī)特別擅長的工作之一。任務(wù)1求一個小組學(xué)生成績的總分及平均分
一、任務(wù)提出一個班進(jìn)行了一次考試,現(xiàn)要輸入第一小組學(xué)生的成績,計(jì)算這一小組的總分與平均分,并按要求輸出。二、具體實(shí)現(xiàn)#include"stdio.h"main(){intscore,i,sum=0;floatavg;i=1;printf("請輸入本小組10個學(xué)生的成績:");while(i<=10){scanf("%d",&score);sum=sum+score;i=i+1;}avg=sum/10.0;printf("本小組10個學(xué)生的總分為:%d\n",sum);printf("本小組10個學(xué)生的平均分為:%.2f\n",avg);}while(i<=10){scanf(“%d”,&score);sum=sum+score;i=i+1;}第1頁/共40頁三、相關(guān)知識(一)常見的三種循環(huán)語句1.while循環(huán)【語法】(1)一般格式:
while(循環(huán)繼續(xù)條件){循環(huán)體語句組;}(2)執(zhí)行過程
1)求解“循環(huán)繼續(xù)條件”,如果其值為非0,則轉(zhuǎn)2);否則轉(zhuǎn)3)。
2)執(zhí)行循環(huán)體語句組,然后轉(zhuǎn)1)。
3)退出while循環(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中。第2頁/共40頁任務(wù)情景中的程序及流程圖#include"stdio.h"main(){intscore,i,sum=0;floatavg;i=1;printf("請輸入本小組10個學(xué)生的成績:");while(i<=10){scanf("%d",&score);sum=sum+score;i=i+1;}avg=sum/10.0;printf("本小組10個學(xué)生的總分為:%d\n",sum);printf("本小組10個學(xué)生的平均分為:%.2f\n",avg);}第3頁/共40頁while的進(jìn)一步練習(xí)【例3-1】本學(xué)期期末考試進(jìn)行了三門課程的測試。成績單下來后,8個室友兄弟要一比高低,這就要得到每個人三門課程的總分和平均分,用C語言實(shí)現(xiàn)之。分析:(1)定義五個實(shí)型變量x,y,z,s和avg,依次放每一名學(xué)生的三門課程成績、這三門課程的總成績和平均分;(2)每次取出一名學(xué)生的三門課程成績,依次給x,y,z,然后再一起放到s中,就可以得到該同學(xué)的三門課的總分和平均分。(3)以上步驟重復(fù)執(zhí)行8次。#include"stdio.h"main(){inti;floatx,y,z,sum,avg;i=1;while(i<=8){printf("請輸入第%d個同學(xué)三門課的成績",i);scanf("%f%f%f",&x,&y,&z);sum=x+y+z;avg=sum/3;printf("第%d個同學(xué)的總分為%.2f,平均分%.2f\n",i,sum,avg);i=i+1;}}第4頁/共40頁【例3-2】用while語句求sum=1+2+3+……+100。分析:求sum=1+2+3+……+100,可以分解成:sum=0;sum=sum+1;sum=sum+2;……sum=sum+i……sum=sum+100所以,可以看成sum=sum+i重復(fù)了100次,而i恰好等于1~100#include<stdio.h>main(){inti,sum=0;i=1;while(i<=100){sum+=i;i++;}printf(“1+2+3+……+100的和為:%d\n”,sum);}第5頁/共40頁【例3-3】將1~100之間不能被3整除的數(shù)輸出。分析:定義變量i其初值為1,驗(yàn)證1是否能被3整除?若不能整除,則輸出i,然后將i累加到2,再次驗(yàn)證2是否被被3整除?若不能整除,則輸出i,這樣一直重復(fù),直到i值>100。#include<stdio.h>main(){inti;i=1;while(i<=100){if(i%3!=0)printf(“%3d”,i);i++;}}程序如下第6頁/共40頁do…while語句(1)一般形式:do{循環(huán)體語句組;}while(循環(huán)繼續(xù)條件);(2)執(zhí)行過程1)執(zhí)行do后面的循環(huán)體語句組;2)求解while后面的“循環(huán)繼續(xù)條件”,如果其值為非0,則轉(zhuǎn)1);否則轉(zhuǎn)3)。3)退出while循環(huán)。循環(huán)變量賦初值循環(huán)體語句組while(循環(huán)繼續(xù)條件);第7頁/共40頁求一個小組學(xué)生成績的總分及平均分的程序可改寫為:#include"stdio.h"main(){intscore,i,sum=0;floatavg;i=1;printf("請輸入本小組10個學(xué)生的成績:");do{scanf("%d",&score);sum=sum+score;i=i+1;}while(i<=10);avg=sum/10.0;printf("本小組10個學(xué)生的總分為:%d\n",sum);printf("本小組10個學(xué)生的平均分為:%.2f\n",avg);}do…while,總是先執(zhí)行一次循環(huán)體,然后再求循環(huán)繼續(xù)條件,因此,無論循環(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í)行一次。第8頁/共40頁[例3-4]將例3-1用do…while語句來改進(jìn)實(shí)現(xiàn)。
求8個室友兄弟每個人三門課程的總分和平均分#include"stdio.h"main(){inti;floatx,y,z,sum,avg;i=1;do{printf("請輸入第%d個同學(xué)三門課的成績",i);scanf("%f%f%f",&x,&y,&z);sum=x+y+z;avg=sum/3;printf("第%d個同學(xué)的總分為%.2f,平均分%.2f\n",i,sum,avg);i=i+1;}while(i<=8);}第9頁/共40頁[例3-5]將例3-2用do…while語句來改進(jìn)實(shí)現(xiàn)。
求sum=1+2+3+……+100。#include<stdio.h>main(){inti,sum=0;i=1;do{sum+=i;i++;}while(i<=100);printf(“1+2+3+……+100的和為:%d\n”,sum);}第10頁/共40頁[例3-6]將例3-3用do…while語句來改進(jìn)實(shí)現(xiàn)。
將1~100之間不能被3整除的數(shù)輸出。#include<stdio.h>main(){inti;i=1;do{if(i%3!=0)printf(“%3d”,i);i++;}while(i<=100);}第11頁/共40頁for語句(1)一般形式:
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
循環(huán)體語句(2)執(zhí)行過程
1)先執(zhí)行“表達(dá)式1”;2)然后判別“表達(dá)式2”,當(dāng)“表達(dá)式2”的值為真時,則轉(zhuǎn)3);否則轉(zhuǎn)4)。
3)執(zhí)行循環(huán)體語句組,然后轉(zhuǎn)2)4)退出for循環(huán)。(1)“表達(dá)式1”為初始化表達(dá)式;(2)“表達(dá)式2”為條件表達(dá)式,是一個邏輯量,用于判斷循環(huán)繼續(xù)的條件是否成立,其值為真時,循環(huán)繼續(xù),否則循環(huán)中止;(3)“表達(dá)式3”為修正表達(dá)式,一般為賦值表達(dá)式,用于定義循環(huán)變量的增值。第12頁/共40頁求一個小組學(xué)生成績的總分及平均分的程序可改寫為:#include"stdio.h"main(){intscore,i,sum=0;floatavg;printf("請輸入本小組10個學(xué)生的成績:");for(i=1;i<=10;i++){scanf("%d",&score);sum=sum+score;}avg=sum/10.0;printf("本小組10個學(xué)生的總分為:%d\n",sum);printf("本小組10個學(xué)生的平均分為:%.2f\n",avg);}第13頁/共40頁for的進(jìn)一步練習(xí)【例3-7】將例3-1用for語句來改進(jìn)實(shí)現(xiàn)。(求八位室友每個人三門課的總分及平均分)#include"stdio.h"main(){inti;floatx,y,z,sum,avg;for(i=1;i<=8;i++){printf("請輸入第%d個同學(xué)三門課的成績",i);scanf("%f%f%f",&x,&y,&z);sum=x+y+z;avg=sum/3;printf("第%d個同學(xué)的總分為%.2f,平均分%.2f\n",i,sum,avg);}}第14頁/共40頁【例3-8】將例3-2用for語句來改進(jìn)實(shí)現(xiàn)。求sum=1+2+3+……+100。#include<stdio.h>main(){inti,sum=0;for(i=1;i<=100;i++){sum+=i;}
/*由于循環(huán)體只有一條語句,所以可將“{sum+=i;}”的花括號省略*/printf(“1+2+3+……+100的和為:%d\n”,sum);}程序運(yùn)行結(jié)果為:“1+2+3+……+100的和為:5050”第15頁/共40頁[例3-9]將例3-3用for語句來改進(jìn)實(shí)現(xiàn)。
將1~100之間不能被3整除的數(shù)輸出。#include<stdio.h>main(){inti;for(i=1;i<=100;i++){if(i%3!=0)printf(“%3d”,i);}/*由于循環(huán)體只有一條語句,所以可將“{if(i%3!=0)printf(“%3d”,i);}”的花括號省略*/}第16頁/共40頁[例3-10]編程實(shí)現(xiàn)百錢買百雞。
有一老大爺去集貿(mào)市場買雞,他想用100元錢買100只雞,而且要求所買的雞有公雞、母雞、小雞。已知公雞2元一只,母雞3元一只,小雞0.5元一只。問老大爺要買多少只公雞、母雞、小雞恰好花去100元錢,并且買到100只雞?分析
x+y+z=100x+3y+0.5z=100
y=1.5z-100x=200-2.5z假設(shè)公雞買x只,母雞買y只,小雞買z只,則由題意可得:(1)當(dāng)z=2時,計(jì)算y與x的值(2)當(dāng)z=4時,計(jì)算y與x的值(3)當(dāng)z=8時,計(jì)算y與x的值(4)一直計(jì)算到z=98時,計(jì)算y與x的值顯然,如果x,y的值都大于零,則輸出x,y,z。所以用for循環(huán)的程序如左:#include<stdio.h>main(){intx,y,z;for(z=2;z<=100;z=z+2){y=1.5*z-100;x=200-2.5*z;if(x>0&&y>0)printf(“公雞數(shù)為%d,母雞數(shù)為%d,小雞數(shù)為%d\n",x,y,z);}}第17頁/共40頁知識擴(kuò)展(一)for語句的多種表示方法for語句可省略“表達(dá)式1”。for語句可省略“表達(dá)式2”。for語句可省略“表達(dá)式3”。for語句可省略“表達(dá)式1”和“表達(dá)式3”?!氨磉_(dá)式1”和“表達(dá)式3”可以是一個簡單的表達(dá)式,也可以是逗號表達(dá)式。
for(i=1;i<=10;i++)s=s+i;i=1;for(;i<=10;i++)s=s+i;“表達(dá)式1”的作用是設(shè)置循環(huán)初始條件,“表達(dá)式1”省略后,應(yīng)在for語句前面設(shè)置循環(huán)初始條件。但“表達(dá)式1”后的分號不能省略。
若省略“表達(dá)式2”,則不判斷循環(huán)條件,認(rèn)為循環(huán)條件始終為真,循環(huán)將無終止地進(jìn)行下去。一般用條件語句退出循環(huán)?!氨磉_(dá)式3”可省略,但程序必須在“循環(huán)體語句”中設(shè)置循環(huán)變量增值,來修改循環(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(;i<=10;){s=s+i;i++;}如實(shí)現(xiàn)1+2+3+……+100的和的for語句可以寫為:for(sum=0,i=1;i<=100;i++)sum=sum+i;第18頁/共40頁(二)break語句(1)break語句的一般形式
break;(2)break語句的作用
終止對switch語句或循環(huán)語句的執(zhí)行(跳出這兩種語句),轉(zhuǎn)移到其后的語句處執(zhí)行。在循環(huán)語句中,break語句常常和if語句一起使用,表示當(dāng)條件滿足時,立即終止循環(huán)。注意break語句不是跳出if語句,而是跳出循環(huán)語句。循環(huán)語句可以嵌套使用,break語句只能跳出(終止)其所在的循環(huán),而不能跳出多層循環(huán)。說明for(i=2;i<=x-1;i++)if(x%i==0)break;如果x能被i(i=2,3,…,x-1)整除,則結(jié)束循環(huán)。第19頁/共40頁【例3-11】輸入二個正整數(shù),求它們的最大公約數(shù)。分析(1)若輸入二個正整數(shù)分別為a,b,它的最大公約數(shù)為k,k的值應(yīng)小于等于a,b中的一個相對小數(shù);(2)然后進(jìn)行a%k及b%k的運(yùn)算,若它們的余數(shù)為零,則k就是最大公約數(shù)。(3)若a%k及b%k中至少有一個的余數(shù)不為零,則k=k-1,然后再執(zhí)行(2)。#include<stdio.h>main(){inta,b,k;printf("請輸入二個正整數(shù)");scanf("%d%d",&a,&b);if(a<b)k=a;elsek=b;while(k>=1){if(a%k==0&&b%k==0)break;k--;}printf("最大公約數(shù)為:%d\n",k);}程序的運(yùn)行結(jié)果為:請輸入二個正整數(shù)56最大公約數(shù)為1第20頁/共40頁判斷素?cái)?shù)【例3-12】在數(shù)學(xué)課上,李老師要同學(xué)們對給定的任意正整數(shù)進(jìn)行判斷,看是否為素?cái)?shù),這個數(shù)學(xué)問題,用C語言該如何解決?分析:因?yàn)樗財(cái)?shù)只能被1及本身整除,所以判斷一個大于2的正整數(shù)x是否為素?cái)?shù),就讓x按順序除以i=2、3、…、x-1,若x能被它們中的任一個除盡,就可跳出循環(huán)。因?yàn)榇藬?shù)一定不是素?cái)?shù)。所以判斷x是不是素?cái)?shù),就可以用i的值來衡量,若i=x,則x一定是素?cái)?shù),否則就不是素?cái)?shù)。#include<stdio.h>main(){inti,x;printf("請輸入一個正整數(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);}第21頁/共40頁【例3-13】程序功能:運(yùn)行時輸入10個數(shù),然后分別輸出其中的最大值、最小值。分析:(1)輸入第一個數(shù)x,并假定第一個數(shù)既是十個數(shù)中的最大值max,也是十個數(shù)中的最小值min;(2)然后輸入下一個數(shù)x,將最大值max及最小數(shù)min與x分別相比,若max小于x,則max=x;若min大于x,則min=x;(3)不斷重復(fù)步驟(2),直到第10個數(shù)比完為止;類似10個壯士打擂臺,第一個壯士先上場,認(rèn)為自已是“老大”,然后第二個壯士再上場,與前面的“老大”比武,贏者才是真的“老大”,一直到第十個壯士比完為止。#include<stdio.h>voidmain(){floatx,max,min;inti;printf("請輸入十個同學(xué)的成績:");for(i=1;i<=10;i++){scanf("%f",&x);if(i==1){max=x;min=x;}if(x>max)max=x;if(x<min)min=x;}printf("最高分為%.1f,最低分為%.1f\n",max,min);}在if語句中比較兩個數(shù)相等是“==”符號,而不是數(shù)學(xué)中的“=”符號,在C語言中“=”是賦值號。
第22頁/共40頁【例3-14】程序功能:運(yùn)行時輸入整數(shù)n,輸出n各位數(shù)字之和。(例如:n=1234,則輸出10,n=-123,則輸出6。分析:若n的值為2345,則(1)個位數(shù)的取法是:(2)十位數(shù)的數(shù)字取法是:(3)百位數(shù)的數(shù)字的取法:(4)同理,要取得千位數(shù)的數(shù)字:通過n%10就能獲取個位數(shù)字“5”如果能將2345化為234,則就能輕松地取到4,所以執(zhí)行n=2345/10,再執(zhí)行n=n%10就行
執(zhí)行234/10,即n=n/10,新的n的值將成為23,然后再執(zhí)行n%10就可獲取數(shù)字“3”;
同理,要取得千位數(shù)的數(shù)字,只要執(zhí)行23/10,即n=n/10,新的n的值將成為2,然后再執(zhí)行n%10就可獲取“2”;總結(jié)以上各步驟,可以發(fā)現(xiàn),對任意的一個數(shù)n,執(zhí)行n%10,再執(zhí)行n=n/10,然后不斷的重復(fù),就可以一個一個獲取個位數(shù)字、十位數(shù)字、百位數(shù)字……,所以可以用循環(huán)去執(zhí)行以上的步驟,但是循環(huán)幾次呢?仔細(xì)分析不難發(fā)現(xiàn),經(jīng)過若干次的執(zhí)行n=n/10,則新的n的值肯定會成為0,所以可以得出結(jié)論:循環(huán)條件是n!=0。程序的流程圖為:intn,s=0;提示請輸入一個數(shù):輸入一個數(shù)nn=|n|n≠0s=s+n%10;//將余數(shù)累加到s中n=n/10;
輸出這個數(shù)的絕對值的各位數(shù)字的和#include<stdio.h>#include<math.h>voidmain(){intn,s=0;printf("請輸入一個數(shù):");scanf("%d",&n);n=fabs(n);
while(n!=0){s=s+n%10;n=n/10;}printf(“這個數(shù)的絕對值的各位數(shù)字的和為:%d\n",s);}第23頁/共40頁[例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í)行s=s*3,就能達(dá)到題目的要求。而s=1+11+111+1111+11111+111111+1111111+11111111是一道累加題,只要執(zhí)行8次的s=s+t即可,只不過第一次循環(huán)中的t是1,第二次是11,第三次是111,分析后項(xiàng)與前項(xiàng)的關(guān)系是:前項(xiàng)的10倍加1等于后項(xiàng),即t=10*t+1t=0;for(i=1;i<=8;i++){t=10*t+1;s=s+t;}#include<stdio.h>voidmain(){inti,t=0;longs=0;for(i=1;i<=8;i++) {t=t*10+1;s=s+t;}s=s*3;printf("3+33+333+3333+33333+333333+3333333+33333333=%ld\n",s);}第24頁/共40頁分析:(1)首先認(rèn)為最大值是當(dāng)x=1時的函數(shù)值,即max=1*1-5*1+sin(1);(2)然后計(jì)算出x=2時的f(x)與前面的max相比,如果max<f(x),則max=f(x)(3)將x=3,4,….10不斷重復(fù)步驟(2);(4)輸出max。[例3-16]編程:對x=1,2,3,……10,求f(x)=x*x-5*x+sin(x)的最大值#include<stdio.h>#include<math.h>voidmain(){intx;floatmax;max=1*1-5*1+sin(1);for(x=2;x<=10;x++)if(max<x*x-5*x+sin(x))max=x*x-5*x+sin(x);printf("%f\n",max);}第25頁/共40頁[例3-17]編程找出100~999之間所有的水仙花數(shù)分析:本題的編程思路是用枚舉法:即對100~999之間的每一個數(shù),取出它的百位數(shù)a,十位數(shù)b,個位數(shù)c,如果a*a*a+b*b*b+c*c*c的值等于它自身,則輸出這個數(shù)。顯然a=i/100,b=(i-a*100)/10;c=i-a*100-b*10;#include<stdio.h>#include<math.h>voidmain(){inti,a,b,c;for(i=100;i<=999;i++) { a=i/100; b=(i-a*100)/10; c=i-a*100-b*10; if(i==a*a*a+b*b*b+c*c*c) printf("%disaArmstrongnumber!\n",i); }}第26頁/共40頁分析:因?yàn)橐?jì)算前30項(xiàng)之和,可以用一個循環(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<stdio.h>#include<math.h>voidmain(){floats=0,a=81,i;for(i=1;i<=30;i++){s=s+a;a=sqrt(a);}printf(“%f\n”,s);
}運(yùn)行結(jié)果:121.335854第27頁/共40頁分析:用一個循環(huán),將每一項(xiàng)累加到一個變量中,因?yàn)樗枰行粩?shù)保留10位,所以要定義一個雙精度型變量。【例3-19】編寫程序,完成以下功能:計(jì)算2的平方根、3的平方根、……10的平方根之和,要求計(jì)算結(jié)果具有小數(shù)點(diǎn)后10位有效位數(shù)。#include<stdio.h>#include<math.h>voidmain(){inti;doubles=0;for(i=2;i<=10;i++)s+=sqrt(i);printf("%.10lf\n",s);}程序的運(yùn)行結(jié)果為:21.46828781868第28頁/共40頁【例3-20】韓信點(diǎn)兵:相傳漢高祖劉邦問大將軍韓信現(xiàn)在統(tǒng)御兵士多少,韓信答,每3人一列余1人、5人一列余2人、7人一列余4人、13人一列余6人、17人一列余2人、19人一列余10人。
劉邦茫然而不知其數(shù)。你呢?
你是一位優(yōu)秀的程序員,請你幫劉邦解決這一問題,韓信至少統(tǒng)御了多少兵士。
分析:這道題的本質(zhì)就是;“一個正整數(shù),被3除時余1,被5除時余2,被7除時余4,被13除時余6,被17除時余2,被19除時余10,求這個數(shù)。”所以,我們可以從最小自然數(shù)出發(fā),一個一個地累加,如果它滿足條件,則退出循環(huán)。#include<stdio.h>voidmain(){longi;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ù)有:%ld\n",i);}程序運(yùn)行結(jié)果為:韓信統(tǒng)領(lǐng)的兵數(shù)有:131072第29頁/共40頁任務(wù)2求每個小組學(xué)生成績的總分及平均分一、問題情景一個班進(jìn)行了一次考試,現(xiàn)要輸入全班四個小組的學(xué)生成績,計(jì)算每一小組的總分與平均分,并按要求輸出。分析在任務(wù)1中,所解決的問題是:一個小組學(xué)生成績的總分及平均分。若現(xiàn)在一個班中有四個小組,現(xiàn)求每個小組的學(xué)生成績的總分及平均分。也就是將任務(wù)1重復(fù)進(jìn)行四次,顯然寫四段程序是不科學(xué)的,科學(xué)的方法是再嵌套一個循環(huán)。具體實(shí)現(xiàn):#include"stdio.h"main(){intscore,i,sum;floatavg;intj=1;while(j<=4){sum=0;i=1;printf("請輸入第%d小組學(xué)生成績:",j);while(i<=10){scanf("%d",&score);sum=sum+score;i=i+1;//本小組學(xué)生數(shù)增加1}avg=sum/10.0;printf("本小組10個學(xué)生的總分為:%d\n",sum);printf("本小組10個學(xué)生的平均分為:%.2f\n",avg);j++;//下一個小組}}定義變量及賦初值score,i,sum定義平均分floatavg;定義變量j并賦初值1//j代表小組數(shù),先從第一小組開始j<=4賦初值i=1,sum=0//每個小組剛開始總分為零提示請輸入本小組10個學(xué)生的成績:i的初值為1i<=10輸入成績scoresum=sum+score;//將成績累加到總分sum中i++;//學(xué)生人數(shù)增加1計(jì)算平均分輸出總分及平均分j++;程序運(yùn)行結(jié)果一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)體,稱為循環(huán)的嵌套,與if的嵌套相同,內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)。內(nèi)層的優(yōu)先級比外層的高,只有內(nèi)層的執(zhí)行完才能執(zhí)行外層的,循環(huán)嵌套的要領(lǐng)對各種語言都是一樣的。三種循環(huán)(while循環(huán)、do…while循環(huán)、for循環(huán))可以互相嵌套。第30頁/共40頁三、相關(guān)知識(一)常見的循環(huán)嵌套1.while循環(huán)嵌套while循環(huán)while(){…while(){…}}2.do…while循環(huán)嵌套do…while循環(huán)
do{…do{…}while();}while();3.for循環(huán)嵌套for循環(huán)
for(;;){…for(;;){…}}4.while循環(huán)嵌套do…while循環(huán)
while(){…do{…}while();…}5.for循環(huán)嵌套while循環(huán)
for(;;){…while(){…}…}6.do…while循環(huán)嵌套for循環(huán)
do{…for(;;){…}…}while();第31頁/共40頁本任務(wù)用do…while循環(huán)嵌套do…while循環(huán)的程序解決:#include"stdio.h"main(){intscore,i,sum;floatavg;intj=1;do{sum=0;i=1;printf("請輸入第%d小組學(xué)生成績:",j);do{scanf("%d",&score);sum=sum+score;i=i+1;//本小組學(xué)生數(shù)增加1}while(i<=10);avg=sum/10.0;printf("本小組10個學(xué)生的總分為:%d\n",sum);printf("本小組10個學(xué)生的平均分為:%.2f\n",avg);j++;//下一個小組}while(j<=4);}黃色的循環(huán)包含在玫瑰色的循環(huán)中第32頁/共40頁本任務(wù)用for循環(huán)嵌套for循環(huán):#include"stdio.h"main(){intscore,i,sum;floatavg;intj=1;for(;j<=4;j++){sum=0;printf("請輸入第%d小組學(xué)生成績:",j);for(i=1;i<=10;i++){scanf("%d",&score);sum=sum+score;}avg=sum/10.0;printf("本小組10個學(xué)生的總分為:%d\n",sum);printf("本小組10個學(xué)生的平均分為:%.2f\n",avg);}}黃色的循環(huán)包含在玫瑰色的循環(huán)中第33頁/共40頁本任務(wù)while循環(huán)嵌套do…while循環(huán)#include"stdio.h"main(){intscore,i,sum;floatavg;intj=1;while(j<=4){sum=0;printf("請輸入第%d小組學(xué)生成績:",j);i=1;do{scanf("%d",&score);sum=sum+score;i++;}while(i<=10);avg=sum/10.0;printf("本小組10個學(xué)生的總分為:%d\n",sum);printf("本小組10個學(xué)生的平均分為:%.2f\n",avg);j++;}}黃色的循環(huán)包含在玫瑰色的循環(huán)中思考:用for循環(huán)嵌套while循環(huán)、do…while循環(huán)嵌套for循環(huán)編程解決任務(wù)2。第34頁/共40頁【例3-21】用雙循環(huán)實(shí)現(xiàn)【例3-10】的百錢買百雞。分析:假設(shè)公雞買x只,母雞買y只,小雞買z只,則:(1)y可以是1、2、3……33的一個值。(2)x可以是1、2、3……50的一個值。(3)然后由y及x,顯然可解得z=100-x-y。(4)如果所花的錢剛好是100,則輸出x,y,z。程序如下:#include<stdio.h>main(){intx,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,母雞數(shù)為%d,
小雞數(shù)為%d\n",x,y,z);}}第35頁/共40頁【例3-22】顯示如下的下三角九九乘法表。12436948121651015202561218243036714212835424981624324048566491827364554637281分析:該乘法表要列出1×1,2×1,2×2,3×1,3×2,3×3…,9×9的值,乘數(shù)的范圍是1~9,針對每一個乘數(shù),被乘數(shù)的范圍是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 化纖坯布采購合同范本
- 農(nóng)信社借款合同范本
- 出售液壓設(shè)備合同范本
- 產(chǎn)品貨物裝運(yùn)合同范本
- 出讓生鮮小店合同范本
- 勞務(wù)合同范本字體
- 出口服裝合同范本
- 中介房產(chǎn)股合同范本
- 公司設(shè)計(jì)合同范本
- 乙方基坑支護(hù)合同范本
- 社會工作師《社會工作實(shí)務(wù)(中級)》講義
- 礦山轉(zhuǎn)讓居間合同范本
- 學(xué)前兒童英語教育與活動指導(dǎo)(學(xué)前教育專業(yè))全套教學(xué)課件
- 2024年蘇州市職業(yè)大學(xué)單招職業(yè)適應(yīng)性測試題庫完整版
- 健康管理案例分析
- 患者身份識別制度培訓(xùn)
- 《包裝設(shè)計(jì)》課件-包裝設(shè)計(jì)發(fā)展的歷史
- 全國保密宣傳教育月課件
- 醫(yī)療器械經(jīng)營企業(yè)GSP培訓(xùn)
- 語言藝術(shù)訓(xùn)練智慧樹知到期末考試答案2024年
- 報(bào)價單(產(chǎn)品報(bào)價單)
評論
0/150
提交評論