




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第5章主要內(nèi)容一、循環(huán)的概念二、用while語句實現(xiàn)循環(huán)三、用do-while語句實現(xiàn)循環(huán)四、用for語句實現(xiàn)循環(huán)五、break語句和continue語句六、循環(huán)嵌套七、應(yīng)用舉例思考求1~100的累加和。分析換一種思路:首先設(shè)置一個累計器sum,其初值為0,利用sum+=n來計算(n依次取1、2、……、100),只要解決以下3個問題即可:
(1)將n的初值置為1;
(2)每執(zhí)行1次“sum+=n;”后,n增1;
(3)當(dāng)n增到101時,停止計算。此時,sum的值就是1~100的累計和。sum=1+2+…+100;.sum=sum+n;格式while(循環(huán)條件表達(dá)式)
{循環(huán)體語句}P70說明1、循環(huán)體如果包含一個以上的語句,必須使用復(fù)合語句形式。2、在循環(huán)體中,必須有使循環(huán)條件趨向于不滿足(假)的語句。3、先判斷表達(dá)式,后執(zhí)行語句。功能當(dāng)表達(dá)式成立(表達(dá)式的值為非0值)時,執(zhí)行while語句中的循環(huán)體語句。執(zhí)行過程表達(dá)式循環(huán)體語句不成立成立§5.1while語句?sum=凵5050舉例例5.1:求1~100的累加和。#include<stdio.h>intmain(){
int
i,sum;i=1;sum=0;while(i<=100)
{
sum=sum+i;i++;
}
printf("sum=%5d\n",sum);return0;}思考1、如果去掉循環(huán)體中的大括號,執(zhí)行過程將會怎樣變化?2、在循環(huán)體中,使循環(huán)條件趨向于不滿足(假)的語句是哪條?3、變量i和sum在循環(huán)外不賦予初值行不行?i=1;sum=0;?1求1~50的累加和.2求1~100的奇數(shù)和.3求1~100的偶數(shù)和.求1到100的奇數(shù)和
#include<stdio.h>
intmain()
{
inti,sum;
i=1;sum=0;
while(i<100)
{
sum=sum+i;
i++;i++;
}
printf("sum=
%d\n",sum);return0;
}運(yùn)行結(jié)果:凵2500說明:(1)循環(huán)體如果包含一個以上的語句,應(yīng)該用花括弧括起來,以復(fù)合語句形式出現(xiàn)。
(2)在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語句舉例練習(xí):1、求1到100之間的偶數(shù)和;2、求N!#include<stdio.h>intmain(){
inti,sum=0;i=1;while(i<=100){if(i%2==0)sum=sum+i;i++;}
printf("%d\n",sum);return0;}#include<stdio.h>intmain(){
inti=1,n;floatfac=1;
printf("請輸入n:");
scanf("%d",&n);while(i<=n){fac=fac*i;i++;}printf("%.0f\n",fac);return0;}運(yùn)行結(jié)果:凵2550請輸入n:5運(yùn)行結(jié)果:120利用公式:sum=1-3+5-7+9-11…,求前10項的和。#include<stdio.h>intmain(){
int
s,i,sum,t,n;i=0;n=1,sum=0,t=1,s=1;
while(i<10){sum=sum+t;n=n+2;s=-s;t=s*n;i++;}
printf("sum=%d\n",sum);return0;}s:變化的符號i:第i項n:第i項的絕對值t:第i項的值sum:和運(yùn)行結(jié)果:sum=-10舉例舉例例5.2:設(shè)s=1×2×3×……×n,求s不大于400000時最大的n。#include<stdio.h>intmain(){
intn=1;longints=1;
while(s<=400000){n=n+1;s=s*n;}
printf("不大于400000時的最大n為:%d\ns值為:%ld\n",n-1,s);return0;}運(yùn)行結(jié)果:不大于400000時的最大n為:9s值為:3628800前n項的乘積舉例現(xiàn)有某班20名學(xué)生的C語言成績,求該班學(xué)生的C語言的平均成績。即:輸入20個學(xué)生的成績,計算平均值,輸出平均值。分析:定義變量表示學(xué)生的成績、全班總和、平均成績。算法設(shè)計:
第一步:輸入20個學(xué)生的成績
第二步:計算成績總和(用累加求和的方法)
第三步:計算平均值(總和/人數(shù))
第四步:輸出平均值如果定義20個變量保存20個成績,程序中計算成績總和會有什么問題?回顧例題:求1到100的奇數(shù)和
#include<stdio.h>
intmain()
{
inti,sum;
i=1;sum=0;
while(i<100)
{
sum=sum+i;
i=i+2;
}
printf("sum=
%d\n",sum);return0;
}用while循環(huán)實現(xiàn)累加求和累加項是誰?累加項是如何不斷被更新的?ii=i+2;例題現(xiàn)有某班20名學(xué)生的C語言成績,求該班學(xué)生的C語言的平均成績。即:輸入20個學(xué)生的成績,計算平均值,輸出平均值。運(yùn)行結(jié)果:
請輸入學(xué)生成績:23凵89凵67凵78凵94凵56凵34凵83凵90
凵67凵48凵72凵81凵65凵74凵87凵73凵67凵90凵98
20名學(xué)生的C語言平均成績?yōu)椋?1.8#include<stdio.h>intmain(){floatscore,total=0,average;
inti=1;
printf("請輸入學(xué)生成績:");
while(i<=20){
scanf("%f",&score);total=total+score;i++;}average=total/20;printf("20名學(xué)生的C語言平均成績?yōu)椋?5.1f\n",average);return0;}total前i名學(xué)生的成績的和score每一名學(xué)生的成績average
平均成績i用來計數(shù)舉例
從鍵盤輸入一個非負(fù)整數(shù),判斷m是否是素數(shù)。素數(shù)(質(zhì)數(shù)):只能被1和它本身整除的數(shù)。判別方法:57:若2~56之間的每一個數(shù)都不能整除56,則57為素數(shù),否則57不是素數(shù)。m,k=m-1,i=2~k:若每一個i的值都不能整除m,則m為素數(shù),否則m不是素數(shù)。flag=1;k=m-1;for(i=2;i<=k;i++)if(m%i==0)flag=0;if(flag==1)printf(“yes!”);elseprintf(“no!”);k=m-1;for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1)printf(“yes!”);elseprintf(“no!”);k=m-1;k=[m/2];[(m+1)/2];k=[sqrt(m)];[sqrt(m+1)]#include"math.h"#include"stdio.h"intmain(){
int
m,flag=0,i=2,k;
printf("請輸入一個非負(fù)整數(shù):\n");
scanf("%d",&m);k=sqrt(m);
while(i<k&&flag==0) {
if(m%i==0) flag=1;//m不是素數(shù),修改flag的值
elsei++; }
if(flag==0)
printf("%d是素數(shù)。\n",m); else
printf("%d不是素數(shù)。\n",m); return0;}舉例求兩個非負(fù)整數(shù)m和n的最大公約數(shù)和最小公倍數(shù)。#include<stdio.h>intmain(){int
m,n,t;
printf("請輸入兩個非負(fù)整數(shù):");
scanf("%d%d",&m,&n);t=(m<=n)?m:n;while(m%t!=0||n%t!=0)//t能否整除m、nt--;
printf("最大公約數(shù)為:%d\n",t);t=(m>n)?m:t;while(t%m!=0||t%n!=0)//m、n能否整除tt++;
printf("最小公倍數(shù)為:%d\n",t);return0;}找m、n中較小數(shù)找m、n中較大數(shù)格式do
{循環(huán)體語句}while(循環(huán)條件表達(dá)式);說明1、循環(huán)體如果包含一個以上的語句,必須使用復(fù)合語句形式。2、在循環(huán)體中,必須有使循環(huán)條件趨向于不滿足(假)的語句。3、先執(zhí)行循環(huán)體語句,后判斷表達(dá)式的值。含義執(zhí)行do-while語句中的循環(huán)體語句,直到表達(dá)式的值為假(0)才跳出循環(huán)。執(zhí)行過程至少執(zhí)行一次§5.2do-while語句表達(dá)式循環(huán)體語句假真舉例例5.6求1~100之間的奇數(shù)和。
#include<stdio.h>intmain(){inti,sum;i=1;sum=0;do{sum=sum+i;i++;
i++;}while(i<=100);printf("sum=%5d\n",sum);return0;}思考1、如果去掉循環(huán)體中的大括號會怎樣?2、在循環(huán)體中,使循環(huán)條件趨向于不滿足(假)的語句是哪條?運(yùn)行結(jié)果:凵2500舉例while和do-while循環(huán)的比較。
#include<stdio.h>intmain(){int
i,sum=0;scanf("%d",&i);while(i<=10){sum=sum+i;i++;}printf("sum=%d\n",sum);return0;}#include<stdio.h>intmain(){int
i,sum=0;scanf("%d",&i);do{sum=sum+i;i++;}while(i<=10);printf("sum=%d\n",sum);return0;}輸入:1輸入:11sum=55輸出:sum=55sum=0輸出:sum=11此程序的功能?什么情況下兩者結(jié)果相同?舉例例5.7設(shè)有一張厚為x毫米,面積足夠大的紙,將它不斷對折。試問對折多少次后,其厚度可達(dá)8848米的珠穆朗瑪峰的高度。P76#include<stdio.h>intmain(){
inti=0;floatx;
printf("請輸入紙張的厚度:");
scanf("%f",&x);x=x*0.001;//將毫米轉(zhuǎn)換為米
do{x=x*2;i=i+1;}while(x<8848);
printf("折疊次數(shù)=%d\n",i);return0;}數(shù)據(jù)描述:x:紙張厚度i:對折次數(shù)對折后紙張厚度運(yùn)行結(jié)果:請輸入紙張的厚度:1
折疊次數(shù)=24格式for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句P77for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)語句執(zhí)行過程(1)先求解表達(dá)式1;(2)求解表達(dá)式2,若其值為真,則執(zhí)行循環(huán)體語句,然后執(zhí)行第(3)步;若為假,則結(jié)束循環(huán),轉(zhuǎn)到第(5)步;(3)求解表達(dá)式3;(4)轉(zhuǎn)向步驟(2);(5)循環(huán)結(jié)束,執(zhí)行for語句下面的一個語句?!?.3for語句表達(dá)式2循環(huán)體語句假真求解表達(dá)式1求解表達(dá)式3sum=5050舉例求1~100的累加和。#include<stdio.h>intmain(){inti,sum;sum=0;for(i=1;i<=100;i++)sum=sum+i;printf(“sum=%5d\n”,sum);return0;}?1求1~55的累加和.2求1~100的奇數(shù)和.3求1~100的偶數(shù)和.for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句說明三個表達(dá)式都可以省略。表達(dá)式2循環(huán)體語句假真求解表達(dá)式3表達(dá)式1省略需在循環(huán)體外賦初值循環(huán)體語句求解表達(dá)式1求解表達(dá)式3表達(dá)式2省略恒真循環(huán)表達(dá)式2循環(huán)體語句假真求解表達(dá)式1表達(dá)式3省略兩種情況?結(jié)果?說明1i=1;for(;i<=10;i++)sum=sum+i;2for(i=1;
;i++)sum=sum+i;?3for(i=1;i<=10;){sum=sum+i;i++;}for(i=1;i<=10;i++)sum=sum+i;表達(dá)式1可以省略,但其后的分號不可以省略。沒有循環(huán)結(jié)束條件,構(gòu)成了死循環(huán)for(i=1;i<=10;i++)sum=sum+i;說明45for(;;)sum=sum+i;6表達(dá)式1和表達(dá)式3可以是與循環(huán)變量無關(guān)的表達(dá)式。for(;i<=10;){sum=sum+i;i++;}7表達(dá)式2一般是關(guān)系表達(dá)式,也可以是數(shù)值或字符表達(dá)式。while(i<=10){sum=sum+i;i++;}while(1)sum=sum+i;表達(dá)式1和表達(dá)式3可以同時省略,此時等同于while語句。for(sum=0,i=1;i<=100,i++)sum=sum+i;例建議:for語句中只放與循環(huán)控制有關(guān)的語句。說明:①for(i=0;(c=getchar())!=′\n′;i+=c);
在表達(dá)式2中先從終端接收一個字符賦給c,然后判斷此賦值表達(dá)式的值是否不等于′\n′(換行符),如果不等于′\n′,就執(zhí)行循環(huán)體。注意:此for語句的循環(huán)體為空語句,把本來要在循環(huán)體內(nèi)處理的內(nèi)容放在表達(dá)式3中,作用是一樣的??梢奻or語句功能強(qiáng),可以在表達(dá)式中完成本來應(yīng)在循環(huán)體內(nèi)完成的操作。說明:②for(;(c=getchar())!=′\n′;)
printf(″%c″,c);
for語句中只有表達(dá)式2,而無表達(dá)式1和表達(dá)式3。其作用是每讀入一個字符后立即輸出該字符,直到輸入一個“換行”為止。請注意,從終端鍵盤向計算機(jī)輸入時,是在按Enter鍵以后才將一批數(shù)據(jù)一起送到內(nèi)存緩沖區(qū)中去的。運(yùn)行情況:Computer↙(輸入)Computer(輸出)而不是Ccoommppuutteerr舉例#include<stdio.h>intmain(){floatsum=0.0;
intn;
for(n=1;n<=30;n++)sum=sum+(float)n/(float)(n+1);
printf("sum=%5.2f\n",sum);return0;}例5.8:計算。格式表達(dá)式1,表達(dá)式2,…,表達(dá)式nP79說明1.逗號表達(dá)式常用于for循環(huán)語句中。2.并不是在所有出現(xiàn)逗號的地方都組成逗號表達(dá)式,如:int
a,b,c;scanf("%d%d%d",&a,&b,&c);含義從左到右,依次計算各表達(dá)式的值,最后一個表達(dá)式的值即為整個逗號表達(dá)式的值。逗號運(yùn)算符和逗號表達(dá)式
思考是不是所有出現(xiàn)逗號的地方都組成逗號表達(dá)式。?舉例例5.10若a=5,求下列表達(dá)式及經(jīng)過運(yùn)算后a的值:a=(3+2,7+8)a=2*5,a*3(a=3*5,a*4),a+5,a+=10結(jié)果:15結(jié)果:10結(jié)果:25格式while(表達(dá)式1){…if(表達(dá)式2)break;
…}舉例
…...sum=0;for(i=1;i<=10;i++){if(i>5)break;sum=sum+i;}
printf(“sum=%5d\n”,sum);…...while(表達(dá)式1){…if(表達(dá)式2)conitue;
…}結(jié)束整個循環(huán)結(jié)束本次循環(huán)
…...sum=0;for(i=1;i<=10;i++){if(i<=5)continue;sum=sum+i;}
printf(“sum=%5d\n”,sum);…...§5.4break和continue語句舉例例5.11分析下面程序的運(yùn)行結(jié)果。結(jié)束整個循環(huán)#include<stdio.h>intmain(){
inti=0,a=0;
while(i<20){if(i%10==0)break;elsei++;}i+=11;a+=i;
printf("%d\n",a);return0;}
ii%10第1次執(zhí)行循環(huán)00條件表達(dá)式i%10==0成立,執(zhí)行break語句,跳出循環(huán)運(yùn)行結(jié)果:11舉例例5.12:輸出100以內(nèi)能被7整除的最大數(shù)。結(jié)束整個循環(huán)#include"stdio.h"intmain(){
intn;
for(n=100;n>=1;n--)if(n%7==0){printf("100以內(nèi)能被7整除的最大數(shù)為:“);
printf("%d\n",n);
break;}return0;}
nn%7第1次執(zhí)行循環(huán)1002第2次執(zhí)行循環(huán)
99
1第3次執(zhí)行循環(huán)980第4次執(zhí)行循環(huán)時條件表達(dá)式n%7==0成立,執(zhí)行break語句,跳出循環(huán)運(yùn)行結(jié)果:100以內(nèi)能被7整除的最大數(shù)為:98舉例例5.13:分析下面程序的運(yùn)行結(jié)果。結(jié)束本次循環(huán)#include"stdio.h"intmain(){
inti=0,s=0;do{if(i%2)//n為奇數(shù)
{i++;continue;}i++;s+=i;}while(i<7);
printf("%d\n",s);return0;}
ii%2i++scontinue
是否執(zhí)行第1次執(zhí)行循環(huán)0011否第2次執(zhí)行循環(huán)1
121是第3次執(zhí)行循環(huán)2034
否第4次執(zhí)行循環(huán)3144
是第5次執(zhí)行循環(huán)4059否第6次執(zhí)行循環(huán)5169是第7次執(zhí)行循環(huán)60716否此時條件表達(dá)式1<7不成立,結(jié)束循環(huán)運(yùn)行結(jié)果:16#include<stdio.h>intmain(){
inti;for(i=1;i<=5;i++){ if(i>3)break; if(i%2)printf("*"); elsecontinue;
printf("#"); }
printf("$\n");return0;}分析如下程序的輸出結(jié)果:
*#*#$舉例舉例把100~200之間的能被13整除的數(shù)輸出。
#include"stdio.h"
intmain()
{
intn;
for(n=100;n<=200;n++)
{
if(n%13!=0)
continue;
else
printf("%d",n);
}
printf("\n");
return0;
}運(yùn)行結(jié)果:104117130143156169182195說明:當(dāng)n不能被13整除時,執(zhí)行continue語句,結(jié)束本次循環(huán)(即跳過printf函數(shù)語句),只有n能被13整除時才執(zhí)行printf函數(shù)。結(jié)束本次循環(huán)1、三種循環(huán)語句在處理循環(huán)問題時,一般可以相互替代。2、對于循環(huán)次數(shù)固定的問題,用for語句實現(xiàn)比較簡單。3、對于循環(huán)次數(shù)不確定的問題,可用while語句或do-while語句實現(xiàn)。4、while語句:先判斷,后執(zhí)行。
do-while語句:先執(zhí)行,后判斷。§6.7幾種循環(huán)語句的比較概念一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結(jié)構(gòu),稱為循環(huán)嵌套。舉例例5.15馬克思曾經(jīng)做過這樣一道趣味數(shù)學(xué)題:有30個人在一家小飯館里用餐,其中有男人、女人和小孩。每個男人花3先令,每個女人花2先令,每個小孩花1先令,共花去50先令。問男人、女人和小孩各幾人(男人、女人和小孩均存在)?P83#include"stdio.h"intmain(){int
man,women,child;
for(man=1;man<29;man++)
for(women=1;women<=29-man;women++) {child=30-man-women;
if(man*3+women*2+child*1==50)
printf("man=%-6dwowen=%-6dchild=%-6d\n",man,women,child);}return0;}§5.5循環(huán)嵌套男人人數(shù),最多28人女人人數(shù),29-man小孩人數(shù)=30-man-women運(yùn)行結(jié)果:man=1women=18chile=11man=2women=16chile=12man=3women=14chile=13man=4women=12chile=14man=5women=10chile=15man=6women=8chile=16man=7women=6chile=17man=8women=4chile=18man=9women=2chile=19舉例例5.16打印乘法口訣表。#include"stdio.h"intmain(){inti,j,result;for(i=1;i<=9;i++){for(j=1;j<=9;j++){result=i*j;//計算i行j列上的元素值
printf("%d*%d=%-3d\t",i,j,result);}printf("\n");}return0;}
resulti=1,j=11*1j=21*2j=31*3
┇
j=91*9i=2,j=12*1j=22*2
┇j=92*9……i=9,j=19*1j=29*2┇j=99*91*1=11*2=2…1*9=92*1=22*2=4…2*9=18…9*1=99*2=18…9*9=81
124369481216#include<stdio.h>intmain(){
int
i,j;for(i=1;i<=4;i++)
{for(j=1;j<=i;j++)printf(“%4d”,i*j);
printf(“\n”);
}
return0;}思考1#include<stdio.h>intmain(){
inti,j;for(i=1;i<=4;i++)
{for(j=1;j<=5-i;j++)printf(“%4d”,i*j);
printf(“\n”);
}
return0;}思考2
1234246364#include<stdio.h>intmain(){
inti,j;for(i=1;i<=4;i++)
{for(j=1;j<=4-i;j++)printf(“%4c”,’‘);for(j=5-i;j<=4;j++)printf(“%4d”,i*j);
printf(“\n”);
}return0;}思考34686912481216#include<stdio.h>intmain(){
inti,j;for(i=1;i<=4;i++)
{for(j=1;j<=i-1;j++)printf(“%4d”,’‘);for(j=i;j<=4;j++)printf(“%4d”,i*j);
printf(“\n”);
}return0;}思考4
123446891216舉例例5.17求Fibonacci數(shù)列的前40個數(shù)。按每行4個進(jìn)行輸出。#include"stdio.h"intmain(){
intn;longintf1,f2;f1=1;f2=1;printf("%10d%10d",f1,f2);
for(n=1;n<=19;n++){if(n%2==0)
printf("\n");f1=f1+f2;f2=f2+f1;printf("%10d%10d",f1,f2);}
printf("\n");return0;}特點:第1、2個數(shù)為1、1。從第三個數(shù)開始,該數(shù)是其前面兩個數(shù)之和。F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n>=3)
1123581321345589144……§5.8程序舉例求Si=a+aa+aaa+……+的值。如a=5,i=3時,即求表達(dá)式5+55+555的值。a和i由鍵盤輸入。舉例#include"math.h"#include"stdio.h"intmain(){intj,i,a,s=0;
printf("請輸入a和i的值:\n");
scanf("%d%d",&a,&i);longintsum=0
for(j=1;j<=i;j++){s=s+a*(int)pow(10,(j-1));sum=sum+s;}
printf("SUM=%ld\n",sum);return0;}pow()函數(shù):求xy程序顯示:請輸入a和i的值:用戶輸入:53并回車程序輸出:SUM=615i:第i項n:第i項的分母t:第i項的值sum:和舉例利用公式:sum=1+1/3+1/5+1/7+1/9…,求前10項的和。#include<stdio.h>#include<math.h>intmain(){
int
s,i,n;floatt,sum;i=0;n=1,sum=0,t=1.0;
while(i<10){sum=sum+t;n=n+2;t=1.0/n;i++;}
printf("sum=%.2f\n",sum);return0;}運(yùn)行結(jié)果:sum=2.13舉例利用公式sum=1-3+5-7+9-11…求前10項的和。#include<stdio.h>#include<math.h>intmain(){
int
s,i,sum,t,n;i=0;n=1,sum=0,t=1,s=1;
while(i<10){sum=sum+t;n=n+2;s=-s;t=s*n;i++;}
printf("sum=%d\n",sum);return0;}s:變化的符號i:第i項n:第i項的絕對值t:第i項的值sum:和運(yùn)行結(jié)果:sum=-10舉例利用公式:
/4=1-1/3+1/5-1/7+…求
的近似值,直到某一項的絕對值小于10-6為止。#include<stdio.h>#include<math.h>intmain(){
ints;floatn,t,pi;t=1;pi=0;n=1.0;s=1;
while((fabs(t))>1e-6)
{
pi=pi+t;n=n+2;s=-s;t=s/n;}pi=pi*4;
printf("pi=%10.6f\n",pi);return0;}思考:使用那一種循環(huán)控制語句?pi=1-1/3+…輸出4*pis=1(-1)n=1,3,5,7…t=s/n運(yùn)行結(jié)果:sum=3.141594舉例輸出101~200之間的全部素數(shù)。每行輸出10個。#include<stdio.h>#include<math.h>voidmain(){
intm,k,i,n=0;for(m=101;m<=200;m=m+2){k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1)
{printf("%d",m);n=n+1;if(n%10==0)printf("\n");
}
}
printf("\n");}正常結(jié)束循環(huán)m不是素數(shù)例5.18用雙重for循環(huán)打印出下列圖形。P86
* *** ***** ******* ***** *** *
#include"stdio.h"intmain(){
int
i,j;
for(i=1;i<=4;i++)
{
for(j=1;j<=4-i;j++)
printf("");
for(j=1;j<=2*i-1;j++)
printf("*");
printf("\n");
}for(i=1;i<=3;i++)
{
for(j=1;j<=i;j++)
printf("");
for(j=1;j<=7-2*i;j++)
printf("*");
printf("\n");
}return0;}打印上三角(1-4行)打印下三角(1-3行)舉例#include"stdio.h"intmain(){charch;
intletter=0,space=0,number=0,other=0;
printf("請輸入一串字符");scanf("%c",&ch);
while(ch!='\n')
{if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')letter++;elseif(ch=='')space++; elseif(ch>='0'&&ch<='9')number++; elseother++;
scanf("%c",&ch);}
printf("字符數(shù)=%d\n空格數(shù)=%d\n數(shù)字?jǐn)?shù)=%d\n其它字符的個數(shù)=%d\n",letter,space,number,other);return0;}letter:字符個數(shù)space:空格個數(shù)number:數(shù)字個數(shù)other:其它字符個數(shù)例5.19例
輸入一行字符,分別統(tǒng)計出其中英文字母、空格、數(shù)字和其它字符的個數(shù)。舉例舉例譯密碼。輸入一行字符,輸出其相應(yīng)的密碼。譯碼規(guī)律:將字母變成其后的第4個字母,非字母字符不變。#include<stdio.h>voidmain(){charc;while((c=getchar())!='\n'){if((c>'a'&&c<='z')||(c>'A'&&c<='Z')){
c=c+4;if((c>'Z'&&c<='Z'+4)||c>'z')c=c-26;
}
printf("%c\n",c);}}循環(huán)部分編程及上機(jī)要注意的問題:1、for循環(huán)的末尾不能有:for(i=0;i<10;i++);
2、循環(huán)控制變量在循環(huán)體內(nèi)最好不要重新賦值:x=a;for(x=1;x<=n;x++)
sn=sn+x;x=x*10+a;3、注意循環(huán)中使用的{}m=a;for(x=1;x<=n;x++){sn=sn+m;m=m*10+a;}for(x=1;x<=n;x++){y=(pow(10,x)-1)*a/9
sn=sn+y;}4、countine的用法:當(dāng)countine后面沒有語句時,可以省略for(x=1,t=0;x<=n;x++){t=t+a;
sn=sn+t;a=a*10;}if(i%7==0)
printf(“%8d”,i);else
countine;注意一.選擇題C語言程序的三種基本結(jié)構(gòu)是順序結(jié)構(gòu)、選擇結(jié)構(gòu)和()。A.遞歸結(jié)構(gòu) B.轉(zhuǎn)移結(jié)構(gòu)C.循環(huán)結(jié)構(gòu) D.嵌套結(jié)構(gòu)2.
下面程序段中while循環(huán)執(zhí)行的次數(shù)是()。
intt=0;
while(t=1)t=t+1;A.無限次 B一次也不行C執(zhí)行一次 D有語法錯,不能執(zhí)行3.以下程序的輸出結(jié)果是()。
#include<stdio.h>
intmain(){inti,sum;for(i=1;i<6;i++)sum+=i;
printf("%d\n",sum);return0;}A.15 B.14 C.0 D.不確定作業(yè)及練習(xí)4.設(shè)x和y均為int型變量,則執(zhí)行下面的循環(huán)后,x值為()。
for(y=1,x=1;y<=50;y++){
if(x>=10)break;if(x%2==1) {x+=5;continue;}x-=3;}
printf("%d",x);A.4 B.6 C.8 D.105.指出程序結(jié)束之時,i,j,k的值()。
#include"stdio.h"
intmain(){
inta=10,b=5,c=5,d=5;
inti=0,j=0,k=0;
for(;a>b;++b)i++;
while(a>++c)j++;dok++;
while(a>d++);return0;}A.i=5j=5k=6 B.i=5j=4k=6C.i=6j=5k=7 D.i=6j=6k=66.下面程序的輸出是()。
#include<stdio.h>
intmain()
{inti,j;for(i=0,j=10;i<j;i+=2)j=j-1;printf("i=%d,j=%d\n",i,j);return0;
}A.i=8,j=6 B.i=8,j=5 C.i=8,j=7 D.i=8,j=87.若已有定義inti,j,k;執(zhí)行語句scanf(“%d%d%2d”,&i,&j,&k);時的鍵盤輸入為:
123<回車>456789<回車>所得的i,j,k的值分別為()。A.123,456和789 B.1,2和3C.123,456和78 D.1,4和788.
若已定義inti,x,則for(i=0,x=0;i<=9&&x!=5;i++,x++)控制的循環(huán)體執(zhí)行()次。A.10 B.9 C.5 D.69.
若已定義a、b為整型變量,用scanf(“%d%d”,&a,&b);語句輸入a、b的值時,不可以用()作為輸入的分隔符。A., B.空格 C.回車 D.Tab10、執(zhí)行下列程序的輸出顯示是()。
intmain()
{intx=1,y=2,z;z=x+++y;
printf(“%d%d%d\n”,x,y,z);return0;}A.223 B.123 C.224 D.13411.有以下程序段,其中x為整形變量:
x=0;
while(!x!=0)x++;一下選項中正確的是()。
A.
退出循環(huán)后x得值為0
B.
退出循環(huán)后x得值為1
C.while的控制表達(dá)是非法
D.
while循環(huán)執(zhí)行無數(shù)次
12.表達(dá)式3&&6&&9的值為()。A.3 B.6 C.9 D.113.以下while循環(huán)中,循環(huán)體執(zhí)行的次數(shù)是()。
k=1;while(--k)k=10;A.10次 B.一次也不執(zhí)行 C.無限次 D.1次14.有以下程序段,其中t為整形變量:
t=1;
while(-1)
{t--;
if(t)break;
}
以下選項中敘述正確的是()。
循環(huán)1次也不執(zhí)行 B.循環(huán)執(zhí)行一次C.循環(huán)控制表達(dá)式不合法 D.循環(huán)執(zhí)行兩次15.有以下程序段,其中x為整形變量:
x=-1;do
{;}
while(x++);
printf(“x=%d\n”,x);
以下選項中敘述正確的是()。
程序錯誤 B.x=1 C.x=-1 D.x=01.下面程序的輸出結(jié)果是________。#include"stdio.h"intmain(){
int
x,i;
for(i=1;i<=100;i++){x=i;if(++x%2==0)if(++x%3==0)if(++x%7==0)
printf("%d\n",x);}return0;}2.下面程序的輸出結(jié)果是________。#include"stdio.h"intmain(){
int
i,k=19;
while(i=k-1){k-=3;if(k%5==0){i++;continue;}elseif(k<5)break;i++;}
printf("i=%d,k=%d\n",i,k);return0;}二.程序分析題3.下面程序的輸出結(jié)果是________。#include"stdio.h"intmain(){int
i,j;floats;
for(i=6;i>4;i--){s=0.0;
for(j=i;j>3;j--)s=s+i*j;}
printf("%f\n",s);return0;}4.下面程序的輸出結(jié)果是________。#include"stdio.h"intmain(){inta=10,b=0;
while(a!=0){--a;if(a%3!=0)continue;b++;
if(a<=4)break;}
printf("b=%d\n",b);return0;}5.下面程序的輸出結(jié)果是________。#include<stdio.h>intmain(){int
i,k=19;
while(i=k-1){k-=3;if(k%5==0){i++;continue;}elseif(k<5)break;i++;
}printf("i=%d,k=%d\n",i,k);return0;}6.下面程序的輸出結(jié)果是________。#include<stdio.h>intmain(){int
i,j;floats;
for(i=6;i>4;i--){s=0.0;
for(j=i;j>3;j--)s=s+i*j;}
printf("%f\n",s);return0}7.下面程序的輸出結(jié)果是
。#include<stdio.h>intmain(){int
a,b;
for(a=1,b=1;a<=100;a++){if(b>=10)break;if(b%3==1){b+=3;continue;}}
printf(“%d\n”,a);return0;}8.下面程序的輸出結(jié)果是
。
#include<stdio.h>
intmain(){intI=0;
for(I+=3;I<=5;I=I+2)switch(I%5){case0:printf(“*”);case1:printf(“#”);break;
default:printf(“!”);break;case2:printf(“&”);}return0;}9.當(dāng)給x輸入789時,下面程序段的輸出結(jié)果是________。
intmain(){int
r,x;
printf(“Inputx:”);scanf(“%d”,&x);
while(x!=0){r=x%10;printf(“%d”,r);x=x/10;}return0;}10.下面程序段的輸出結(jié)果是________。
intmain(){intx=2;
while(x--);
printf(“%d\n”,x);return0;}11.下面程序段的輸出結(jié)果是________
。
intx=3;do{printf(“%3d”,x-=2);}while(!(--x));12.下面程序段的輸出結(jié)果是________。
intn=0;
while(n++<=2);printf(“%d\n”,n);13.下面程序段的輸出結(jié)果是________。
intk=10;
while(k=0)k=k-1;14.下面程序段的輸出結(jié)果是________。
intx;
for(x=3;x<6;x++)printf((x%2)?(“**%d”):(“##%d\n”),x);15.下面程序段的輸出結(jié)果是________。
intmain(){intx=2;
while(x--);
printf(“%d\n”,x);return0;}1.下面程序功能是打印100以內(nèi)個位數(shù)為6且能被3整除的所有數(shù)。
#include<stdio.h>
intmain(){inti,j;for(i=0;⑴;i++)
{j=i*10+6;if(⑵)continue;
printf("%d,",j);}return0;}三、程序填空題2.下面程序的功能是求1至1000之間滿足“用3除余2;用5除余3;用7除余2”的數(shù),且一行只打印五個數(shù)。#include"stdio.h"intmain(){inti=1,j=0;do{if(⑴){printf("%4d",i);j=j+1;if(⑵)printf("\n");}i=i+1;}while(i<1000);return0;}3.下面程序的功能是計算正整數(shù)234的各位數(shù)字之和。
#include<stdio.h>
intmain(){int
n,sum=0;n=234;
while(n){sum+=n%10;n=(1);}
printf(“sum=%d\n”,sum);return0;}4.下面程序的功能是計算xy
。
#include<stdio.h>
intmain(){inti;doublex,y,z;
printf(“Input
x,y”);
scanf(“%f%f”,&x,&y);z=1;for(i=1;(1);i++)z=z*x;
printf(“z=%f\n”,z);return0;}1.輸入一整數(shù)初始值,輸出該初始值后的20個不能被3整除的自然數(shù)。四、編程題#include"stdio.h"intmain(){int
num,count=0;
printf("請輸入初始數(shù)值num的值:\n");
scanf("%d",&num);
while(count<20)
{if(num%3==0)
{num++;continue;}else
{
printf("%d\t",num); count++; num++;
}
}return0;}2.雞和兔一共有40只,腳共有100只,計算雞兔各有多少只。#include"stdio.h"intmain(){int
chicken,rabbit;
for(chicken=1;chicken<40;chicken++)
{rabbit=40-chicken;
if(chicken*2+rabbit*4==100)
printf("雞=%d\t兔=%d\t\n",chicken,rabbit);
}return0;}3.求1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值。#include"stdio.h"intmain(){ints=0,sum=0,i,n;
printf("請輸入n的值:\n");
scanf("%d",&n);
for(i=1;i<=n;i++){s=s+i;sum=sum+s;}
printf("sum=%d\n",sum);return0;}4.打印出所有的“水仙花數(shù)”。所謂“水仙花數(shù)”是指一個三位數(shù),其各位數(shù)字立方和等于該數(shù)。例:153=13+53+33#include"stdio.h"intmain(){int
num,x,y,z;
for(num=100;num<1000;num++)
{x=num/100;y=num/10%10; z=num%10;
if(x*x*x+y*y*y+z*z*z==num)
printf("%d\n",num);
}return0;}5.輸入兩個正整數(shù)m和n,用輾轉(zhuǎn)相除法求m和n的最大公約數(shù),然后再求它們的最小公倍數(shù)。#include"stdio.h"intmain(){int
m,n,r,temp;
printf("請輸入m和n的值:\n");
scanf("%d%d",&m,&n);
if(m<n)
{temp=m;m=n;n=temp;
}r=m%n;
while(r!=0)
{m=n;n=r;r=m%n;}
printf("最大公約數(shù)是%d\n",n);return0;}6.求100~200之間的素數(shù),把它們按每行5個數(shù)全部顯示出來,并給出素數(shù)的個數(shù)。#include<stdio.h>#include<math.h>intmain(){int
m,k,i,n=0;
for(m=101;m<=200;m=m+2)
{k=(int)sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)break;
if(i>=k+1)
{
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 IEC TS 62453-53-31:2025 EN Field Device Tool (FDT) Interface Specification - Part 53-31: Communication implementation for CLI and HTML – IEC 61784 CP 3/1 and CP 3/2
- 【正版授權(quán)】 IEC 60335-2-13:2002+AMD1:2004 CSV FR-D Household and similar electrical appliances - Safety - Part 2-13: Particular requirements for deep fat fryers,frying pans and similar
- 【正版授權(quán)】 IEC 60095-1:2006 FR-D Lead-acid starter batteries - Part 1: General requirements and methods of test
- 晚托班課程故事
- 中藥飲片處方管理規(guī)范
- 冰雪奇緣特色課件
- 2025年幼兒園春季個人工作方案演講稿
- OGTT的檢測及護(hù)理
- 2025年小班春季教育教學(xué)工作方案
- 酒店禮儀知識培訓(xùn)課件
- 建模師職業(yè)生涯規(guī)劃與管理
- 華為財務(wù)管理(6版)-華為經(jīng)營管理叢書
- 化工工藝有機(jī)廢氣處理裝置技術(shù)規(guī)范
- 食品欺詐和預(yù)防知識專題培訓(xùn)課件
- 吐魯番地區(qū)鄯善縣區(qū)域環(huán)境概況自然及社會環(huán)境概況
- 超聲技術(shù)學(xué)智慧樹知到課后章節(jié)答案2023年下杭州醫(yī)學(xué)院
- 鹽酸乙醇標(biāo)準(zhǔn)溶液配制方法
- 網(wǎng)絡(luò)經(jīng)濟(jì)學(xué)PPT完整全套教學(xué)課件
- 薄膜材料與技術(shù)(全套課件)上
- 廠區(qū)動火作業(yè)安全規(guī)程
- 急診科運(yùn)用PDCA對急診患者預(yù)檢分診登記系統(tǒng)使用率低原因分析品管圈魚骨圖柏拉圖對策擬定
評論
0/150
提交評論