C语言程序设计3-4-PPT精选文档
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
公鸡:cock 母鸡:hen 小鸡:chick
公鸡5块钱/只,母鸡3块钱/只,小鸡3只1块钱。 问: 100块钱买100只鸡,每只鸡各买多少只。
分析: cocks=0
当cocks<=19时 {hens=0 当hens<=33时 {chicks=100-cocks-hens 如果(5*cocks+3*hens+1/3*chicks=100)则输 出
{printf("%d,%d,%d\n",s,w,100-10*s-5*w);
c++; }
printf("\n%d\n",c); }
§3.7 控制转移语句
3.7.1 break 语句 3.7.2 continue 语句 3.7.3 goto 语句
3.7.1 break语句 形式: if(表达式) break;
3.5 选择程序控制结构 3.6 循环程序控制结构
循环的逻辑含义:当满足某个特定条件时,重复
执行某段程序,直到条件不满足为止。两种循环结构:
① 当型循环结构。
当P条件成立时,
反复执行A操作。
直到P为“假”时
才停止循环。
先判断,后执行。
图1 当型循环结构
② 直到型循环结构。 先执行A操作; 再判断P是否为”真”;
{ y=y+x; if(y>3) break; } printf(“y=%d\n”,y);
当for循环执行到y=y+x时,y的值 已经大于3,此时执行break语句, 直接跳出for循环,执行for循环下 面的打印语句。
【例】从键盘输入10个数,并求和。如果输入的
是负数,则提前结束循环。
# include<stdio.h> main( ) { int x, n=0,s=0; for ( ; n<10; n++) while (n<10) { scanf(“%d”,&x); if (x<0) break; s+=x; n++; }
若P为“真”,则执
行A,如此反复;
真 假
直到P为假
直到P为“假”为止。
先执行,再判断。
图2 直到型循环结构
§3.6 循环程序控制结构
3.6.1 while 语句(当型循环结构)
3.6.2 do-while 语句(直到型循环结构) 3.6.3 for 语句(多功能型循环结构)
3.6.4 循环结构的嵌套
do {
}
printf(“%c”,ch); ch--; }while(ch>= ‘a’);
3.6.3 for语句 for语句可以用于循环次数已经确定的情况, 还可用于循环次数不确定而只给出循环结束条 件的情况,它可以代替while和do-while语句。 1)for语句的语法形式和语义 for( 表达式1 ; 表达式2 ; 表达式3)
2019/2/14
用while语句改写do-while语句: #include<stdio.h> main( ) { int i=0,sum=0; while(i<3) { i++; sum=sum+i ; } printf(“sum=%d”,sum); } 运行结果为:sum=6
2019/2/14
2)while与do-while循环的比较
运行结果:
2019/2/14
sum=6
【思考题】对于下面的这个程序,如果循环体改
为{i++; sum=sum+i;}后,结果会一样吗?
2019/2/14
【例】do…while语句逆序输出26个小写字母:
#include <stdio.h> main() { char ch; ch=‘z’;
公鸡5元/只,母鸡3元/只,小 鸡3只1元。问: 100块钱买 100只鸡,每只鸡各买多少只。
公鸡5元/只,母鸡3元/只,小 #include "stdio.h" 鸡3只1元。问: 100块钱买 main() {int cocks,hens,chicks; 100只鸡,每只鸡各买多少只。 for(cocks=0;cocks<20;cocks++) { for(hens=0;hens<33;hens++) { chicks=100-cocks-hens; if(5*cocks+3*hens+1/3*chicks==100) printf("%d,%d,%d\n",cocks,hens,chicks); } } }
}
hens加1}
#include "stdio.h" main() {int cocks,hens,chicks; cocks=0; while(cocks<20) { hens=0; while(hens<33) {chicks=100-cocks-hens; if(5*cocks+3*hens+1/3*chicks==100) printf("%d,%d,%d\n",cocks,hens,chicks); hens++; } cocks++; } }
3.6.1 while 语句
1、while语句的形式:
while(表达式)
循环体;
执行过程: 先求表达式的值;
用来判别是否执行循环体
需要重复执行的动作
当表达式值为非0时,执行循环体中 的语句。
再判定表达式的值,再执行循环体。 直到表达式值为0,结束循环。
【例】
#include<stdio.h> 循环体可以是单语句、多 语句或空语句;若为多语 main( ) 句,则必须用一对大括号 括起来。 { int k=4;
定义变量区域
输入n 设计一个循环结构来 计算1*2*…*n的值 输出最终的结果
#include <stdio.h> main( ) { int i,n,result=1;
循环结构:循环变量的 初值、循环结束条件、 修改循环变量的表达式、 循环体的内容。
/*提高程序的可读性*/ printf(“Enter n:”); scanf(“%d”,&n); for(i=1;i<=n;i++) {result=result*i;} printf(“%d!=%d\n”,n,result);
}Байду номын сангаас
3.6.4 循环结构的嵌套
一个循环体内又包含另一个完整的循环结构, 称为循环的嵌套。内嵌的循环中还可以嵌套循环, 这就是多层循环。三种循环(while循环、do while循环和for循环)可以互相嵌套。例如,下面几 种都是合法的形式:
(1)while( ) { … while( ) {…} }
printf(“和s=%d”, s); }
3.7.2 continue语句
形式:if(表达式)continue; 只能用于循环体结构中。
功能:结束本次循环,转入下一次循环条件的判断与执 行,即开始下一轮循环,并不结束循环;
while(表达式1) { … if(表达式2) continue; … } do { … if(表达式1) continue; … } while(表达式2) for(exp1;exp2;exp3) { … if(表达式4) continue; … }
【例】用while语句逆序输出26个小写字母。
#include <stdio.h> 编程思路: main() 涉及到循环语句 { 时,应首先判断 循环条件,再判 char ch; 断循环体都应包 ch=‘z’; 含哪些操作。 while (ch>=‘a’) { printf(“%c”,ch); ch--; } }
【例】对键盘输入的字符进行统计并输出其中数字字 符的个数,约定用换行符结束循环。
输入一个字符
不断的接收从键盘输入的数
据,循环终止条件是:输入的字 符是换行符。判断是否是数字 字符,是的话变量n加1 输出数字字符的个数
2019/2/14
#include<stdio.h>
main() { int n=0;char c; c=getchar( );
while (k>2) { printf("*"); k--;} printf("k=%d\n",k); } 运行结果为:**k=2
【例】 k=4;
循环体中应该有不断修改 表达式的值,使循环能够 趋于结束,否则将造成死 循环。
while(k>2) { printf(” * ”);
k=k+1; }
printf( ” k=%d”,k);
【例3】 i=1; for(product=1; i<3; i++ ) product=product*i;
表达式1可以是设置 循环变量初值的赋 值表达式,也可以 是与循环变量无关 的其他表达式。
【例4】 i=1; for( ; i<5; )
可以省略表达式1和表达式3,只 有表达式2,即只给循环条件,在 这种情况下,完全等同于while语 句,因此在循环体内必须有改变循 环变量的语句。
while(c!=‘\n’) { if(c>=’0’&&c<=‘9’) c=getchar( ); } n++; printf(“n=%d\n”,n); }
3.6.2 do-while语句(直到型) do-while语句的形式为:
do 循环体; while(表达式);
特点: 先执行循环体, 再判断条件是 否成立。
换零钱问题:将100块整钱兑换成1元,5元,10元 的零钱,共有多少种不同的换法?(每种钱至少一 个) #include "stdio.h"
main()
{int s,w,c=0;
s:十块钱的个数,w:五块钱的个数,c:次数
for(s=1;s<=9;s++)
for(w=1;w<=(100-s*10)/5-1;w++)
{ 循环体;} 给循环控制 变量赋初值 结束循环的 控制条件 修改循环 变量值
【例1】for( i=1; i<4; i++ ) product=product*i;
【例2】i=1;
for( ; i<3; i++ )
循环体
product=product*i; for语句一般形式 中的“表达式1”可 以省略,此时应在 for语句之前给循 环变量赋初值。
(3)for( ; ; ) { … for( ; ; ) {…} }
(4)while( ) { … do { … }while( ); … }
(5)for( ; ; ) { … while( ) { … } }
# include <stdio.h> main( ) {int i, n, p, s; s=0; n=1; while(n<=4) { p=1; for(i=1;i<=n;i++) p=p*i; s=s+p; n++; } printf(“s=%d\n”, s); } 功能:求1!+2!+3!+
功能:用在当前循环中,使程序跳出最近一 层的循环体,终止当前的循环; 注意:break语句只能用在switch语句和循 环语句中,不能出现在其他地方。
【例】 ① while(1) ② { while( 1 ) ③ { …… break; } ④ …… ⑤ }
【例】for (x=1,y=3;x<=10;x++)
n<=4
Y p=1; 求解i=1 i<=n Y p=p*i N
N
i++ s=s+p; n++;
百鸡问题:今有鸡翁一,值钱伍;鸡母一, 值钱三;鸡雏三,值钱一。凡百钱买鸡百只, 问鸡翁、母、雏各几何? 公鸡5块钱/只,母鸡3块钱/只,小鸡3只1块 钱。问: 100块钱买100只鸡,每只鸡各买 多少只。
2019/2/14
【例】用while语句,求
#include<stdio.h> 1+2+3+ +99+100 1*2*3*…… *99*100 main( ) { int
sum=1; i=1; i=1,sum=0;
while (i<101) { sum+=i ; i; sum*= i++; } printf(“sum=%d\n",sum); }
直到表达式值为假
do-while循环结构
【例】阅读程序写出程序运行结果。 #include<stdio.h> main( ) { int i=0,sum=0; do { i++; sum=sum+i ; } while(i<3) ; printf(“sum=%d”,sum); } 程序的运行结果为:sum=6
假图2直到型循环结构361while语句当型循环结构当型循环结构362dowhile语句直到型循环结构直到型循环结构36循环程序控制结构363for语句多功能型循环结构364循环结构的嵌套1while语句的形式
从程序流程的角度来看,程序可 以分为三种基本结构,即顺序结构, 选择结构,循环结构。这三种基本结 构可以组成所有的各种复杂程序。 3.4 顺序程序控制结构
{ product=product*i; i++;
}
2019/2/14
【例5】 i=1;
for( ; ; ) if(i<5) {
for语句的各表达式都可 以省略,但分号间隔符不 能少;三个表达式都可省 略;但在循环体有控制循 环结束的语句。
{ product=product*i;
i++; } }
【例】编写求n!的程序,即计算1*2*3*4*…*n的值, 并输出。
公鸡5块钱/只,母鸡3块钱/只,小鸡3只1块钱。 问: 100块钱买100只鸡,每只鸡各买多少只。
分析: cocks=0
当cocks<=19时 {hens=0 当hens<=33时 {chicks=100-cocks-hens 如果(5*cocks+3*hens+1/3*chicks=100)则输 出
{printf("%d,%d,%d\n",s,w,100-10*s-5*w);
c++; }
printf("\n%d\n",c); }
§3.7 控制转移语句
3.7.1 break 语句 3.7.2 continue 语句 3.7.3 goto 语句
3.7.1 break语句 形式: if(表达式) break;
3.5 选择程序控制结构 3.6 循环程序控制结构
循环的逻辑含义:当满足某个特定条件时,重复
执行某段程序,直到条件不满足为止。两种循环结构:
① 当型循环结构。
当P条件成立时,
反复执行A操作。
直到P为“假”时
才停止循环。
先判断,后执行。
图1 当型循环结构
② 直到型循环结构。 先执行A操作; 再判断P是否为”真”;
{ y=y+x; if(y>3) break; } printf(“y=%d\n”,y);
当for循环执行到y=y+x时,y的值 已经大于3,此时执行break语句, 直接跳出for循环,执行for循环下 面的打印语句。
【例】从键盘输入10个数,并求和。如果输入的
是负数,则提前结束循环。
# include<stdio.h> main( ) { int x, n=0,s=0; for ( ; n<10; n++) while (n<10) { scanf(“%d”,&x); if (x<0) break; s+=x; n++; }
若P为“真”,则执
行A,如此反复;
真 假
直到P为假
直到P为“假”为止。
先执行,再判断。
图2 直到型循环结构
§3.6 循环程序控制结构
3.6.1 while 语句(当型循环结构)
3.6.2 do-while 语句(直到型循环结构) 3.6.3 for 语句(多功能型循环结构)
3.6.4 循环结构的嵌套
do {
}
printf(“%c”,ch); ch--; }while(ch>= ‘a’);
3.6.3 for语句 for语句可以用于循环次数已经确定的情况, 还可用于循环次数不确定而只给出循环结束条 件的情况,它可以代替while和do-while语句。 1)for语句的语法形式和语义 for( 表达式1 ; 表达式2 ; 表达式3)
2019/2/14
用while语句改写do-while语句: #include<stdio.h> main( ) { int i=0,sum=0; while(i<3) { i++; sum=sum+i ; } printf(“sum=%d”,sum); } 运行结果为:sum=6
2019/2/14
2)while与do-while循环的比较
运行结果:
2019/2/14
sum=6
【思考题】对于下面的这个程序,如果循环体改
为{i++; sum=sum+i;}后,结果会一样吗?
2019/2/14
【例】do…while语句逆序输出26个小写字母:
#include <stdio.h> main() { char ch; ch=‘z’;
公鸡5元/只,母鸡3元/只,小 鸡3只1元。问: 100块钱买 100只鸡,每只鸡各买多少只。
公鸡5元/只,母鸡3元/只,小 #include "stdio.h" 鸡3只1元。问: 100块钱买 main() {int cocks,hens,chicks; 100只鸡,每只鸡各买多少只。 for(cocks=0;cocks<20;cocks++) { for(hens=0;hens<33;hens++) { chicks=100-cocks-hens; if(5*cocks+3*hens+1/3*chicks==100) printf("%d,%d,%d\n",cocks,hens,chicks); } } }
}
hens加1}
#include "stdio.h" main() {int cocks,hens,chicks; cocks=0; while(cocks<20) { hens=0; while(hens<33) {chicks=100-cocks-hens; if(5*cocks+3*hens+1/3*chicks==100) printf("%d,%d,%d\n",cocks,hens,chicks); hens++; } cocks++; } }
3.6.1 while 语句
1、while语句的形式:
while(表达式)
循环体;
执行过程: 先求表达式的值;
用来判别是否执行循环体
需要重复执行的动作
当表达式值为非0时,执行循环体中 的语句。
再判定表达式的值,再执行循环体。 直到表达式值为0,结束循环。
【例】
#include<stdio.h> 循环体可以是单语句、多 语句或空语句;若为多语 main( ) 句,则必须用一对大括号 括起来。 { int k=4;
定义变量区域
输入n 设计一个循环结构来 计算1*2*…*n的值 输出最终的结果
#include <stdio.h> main( ) { int i,n,result=1;
循环结构:循环变量的 初值、循环结束条件、 修改循环变量的表达式、 循环体的内容。
/*提高程序的可读性*/ printf(“Enter n:”); scanf(“%d”,&n); for(i=1;i<=n;i++) {result=result*i;} printf(“%d!=%d\n”,n,result);
}Байду номын сангаас
3.6.4 循环结构的嵌套
一个循环体内又包含另一个完整的循环结构, 称为循环的嵌套。内嵌的循环中还可以嵌套循环, 这就是多层循环。三种循环(while循环、do while循环和for循环)可以互相嵌套。例如,下面几 种都是合法的形式:
(1)while( ) { … while( ) {…} }
printf(“和s=%d”, s); }
3.7.2 continue语句
形式:if(表达式)continue; 只能用于循环体结构中。
功能:结束本次循环,转入下一次循环条件的判断与执 行,即开始下一轮循环,并不结束循环;
while(表达式1) { … if(表达式2) continue; … } do { … if(表达式1) continue; … } while(表达式2) for(exp1;exp2;exp3) { … if(表达式4) continue; … }
【例】用while语句逆序输出26个小写字母。
#include <stdio.h> 编程思路: main() 涉及到循环语句 { 时,应首先判断 循环条件,再判 char ch; 断循环体都应包 ch=‘z’; 含哪些操作。 while (ch>=‘a’) { printf(“%c”,ch); ch--; } }
【例】对键盘输入的字符进行统计并输出其中数字字 符的个数,约定用换行符结束循环。
输入一个字符
不断的接收从键盘输入的数
据,循环终止条件是:输入的字 符是换行符。判断是否是数字 字符,是的话变量n加1 输出数字字符的个数
2019/2/14
#include<stdio.h>
main() { int n=0;char c; c=getchar( );
while (k>2) { printf("*"); k--;} printf("k=%d\n",k); } 运行结果为:**k=2
【例】 k=4;
循环体中应该有不断修改 表达式的值,使循环能够 趋于结束,否则将造成死 循环。
while(k>2) { printf(” * ”);
k=k+1; }
printf( ” k=%d”,k);
【例3】 i=1; for(product=1; i<3; i++ ) product=product*i;
表达式1可以是设置 循环变量初值的赋 值表达式,也可以 是与循环变量无关 的其他表达式。
【例4】 i=1; for( ; i<5; )
可以省略表达式1和表达式3,只 有表达式2,即只给循环条件,在 这种情况下,完全等同于while语 句,因此在循环体内必须有改变循 环变量的语句。
while(c!=‘\n’) { if(c>=’0’&&c<=‘9’) c=getchar( ); } n++; printf(“n=%d\n”,n); }
3.6.2 do-while语句(直到型) do-while语句的形式为:
do 循环体; while(表达式);
特点: 先执行循环体, 再判断条件是 否成立。
换零钱问题:将100块整钱兑换成1元,5元,10元 的零钱,共有多少种不同的换法?(每种钱至少一 个) #include "stdio.h"
main()
{int s,w,c=0;
s:十块钱的个数,w:五块钱的个数,c:次数
for(s=1;s<=9;s++)
for(w=1;w<=(100-s*10)/5-1;w++)
{ 循环体;} 给循环控制 变量赋初值 结束循环的 控制条件 修改循环 变量值
【例1】for( i=1; i<4; i++ ) product=product*i;
【例2】i=1;
for( ; i<3; i++ )
循环体
product=product*i; for语句一般形式 中的“表达式1”可 以省略,此时应在 for语句之前给循 环变量赋初值。
(3)for( ; ; ) { … for( ; ; ) {…} }
(4)while( ) { … do { … }while( ); … }
(5)for( ; ; ) { … while( ) { … } }
# include <stdio.h> main( ) {int i, n, p, s; s=0; n=1; while(n<=4) { p=1; for(i=1;i<=n;i++) p=p*i; s=s+p; n++; } printf(“s=%d\n”, s); } 功能:求1!+2!+3!+
功能:用在当前循环中,使程序跳出最近一 层的循环体,终止当前的循环; 注意:break语句只能用在switch语句和循 环语句中,不能出现在其他地方。
【例】 ① while(1) ② { while( 1 ) ③ { …… break; } ④ …… ⑤ }
【例】for (x=1,y=3;x<=10;x++)
n<=4
Y p=1; 求解i=1 i<=n Y p=p*i N
N
i++ s=s+p; n++;
百鸡问题:今有鸡翁一,值钱伍;鸡母一, 值钱三;鸡雏三,值钱一。凡百钱买鸡百只, 问鸡翁、母、雏各几何? 公鸡5块钱/只,母鸡3块钱/只,小鸡3只1块 钱。问: 100块钱买100只鸡,每只鸡各买 多少只。
2019/2/14
【例】用while语句,求
#include<stdio.h> 1+2+3+ +99+100 1*2*3*…… *99*100 main( ) { int
sum=1; i=1; i=1,sum=0;
while (i<101) { sum+=i ; i; sum*= i++; } printf(“sum=%d\n",sum); }
直到表达式值为假
do-while循环结构
【例】阅读程序写出程序运行结果。 #include<stdio.h> main( ) { int i=0,sum=0; do { i++; sum=sum+i ; } while(i<3) ; printf(“sum=%d”,sum); } 程序的运行结果为:sum=6
假图2直到型循环结构361while语句当型循环结构当型循环结构362dowhile语句直到型循环结构直到型循环结构36循环程序控制结构363for语句多功能型循环结构364循环结构的嵌套1while语句的形式
从程序流程的角度来看,程序可 以分为三种基本结构,即顺序结构, 选择结构,循环结构。这三种基本结 构可以组成所有的各种复杂程序。 3.4 顺序程序控制结构
{ product=product*i; i++;
}
2019/2/14
【例5】 i=1;
for( ; ; ) if(i<5) {
for语句的各表达式都可 以省略,但分号间隔符不 能少;三个表达式都可省 略;但在循环体有控制循 环结束的语句。
{ product=product*i;
i++; } }
【例】编写求n!的程序,即计算1*2*3*4*…*n的值, 并输出。