计算机计算机C++ C语言编程 程序控制_第1页
计算机计算机C++ C语言编程 程序控制_第2页
计算机计算机C++ C语言编程 程序控制_第3页
计算机计算机C++ C语言编程 程序控制_第4页
计算机计算机C++ C语言编程 程序控制_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章程序控制

提纲

N4.1switch多路选择结构

4.2循环的本质

4.3计数器控制的循环

4.4for循环结构

N4.5break和continue语句

4.6逻辑运算符

4.7相等测试运算符==和赋值运算符=

4.8结构化程序设计小结

switch多路选择结构

if(day=0)

语句有单分支和双分支结

•ifprintf("SundayW);

构elseif(day=l)

•考虑下面要求:变量day取printf("Monday"');

值为0〜6,0代表周日、elseif(day=2)

1~6代表周一到周六。输prints“Tuesday\n");

出要求:当day==O时输elseif(day=3)

出“Sunday”,day==l时printf("Wednesday^");

输出“Monday”...elseif(day==4)

prints“Thursday'n");

•这种多分支的选择结构可elseif(day=5)

以使用switch语句来实现。printf("Friday"');

elseif(day=6)

print4“Saturday\n");

else

print4"In两国@叫

4.1switch多路选择结构

用某个表达式单独测试每一个可能的整数值常

量,然后做出相应的动作。

Lswitch语句的一般形式

switch(表达式){

case常量表达式1:语句组;break;

case常量表达式2:语句组;break;

case常量表达式n:语句组;break;

[default:语句组;[break;]]

4.1switch多路选择结构

执行过程

———%---------------------------------------.

(1)计算switch后面“表达式”的值,当其

与某个case后面的“常量表达式”的值相同时,就

执行该case后面的语句(组);当执行到break语行

时,跳出switch语句,转向执行switch语句后的下一

条语句。

(2)如果没有任何一个case后面的“常量表

达式”的值与“表达式”的值匹配,则执行default

后面的语句(组)。然后,再执行switch语句后的

下一条语句。

7.如果不是判断表达式等于某个值,而是

判断表达式的值在某个范围内,如:

if(i>=-10&&i<=10)

main()

printf(nAn);

(

intday;elseif(i>10&&i<=20)

nM

scanf(n%dn,&day);printf(B);

switch(day){elseif(i>20&&i<=30)

case0:printf(nSuprintf(nCM);

case1:printf(nMelse

case2:printf(nTiprintf(nDM);

case3:printf(nW则不能用switch语句。

case4:printf(nTl

case5:printf(nFriuay\uj;ureaK;

case6:printf(nSaturday\nn);break;

default:printf(nInvalidday!\nn);break;

system(npausen);

return0;

4.1switch多路选择结构

不要忘记break,除当输入为6时,输出为:

旧你真的是不需要。Saturday

intday;

scanf(n%dn,&day);Invalidday!

switch(day){

当输入为7时,输出为:

case0:printf(nSunday\nn);

case1:printf(nMonday\nn);Invalidday!

case2:printf(nTuesday\nn);

case3:printf(nWednesday\nn)case后面的常量表达式仅起语句

case4:printf(nThursday\nn);标号作用,并不进行条件判断。

case5:printf(nFriday\nn);系统一旦找到入口标号,就从此

case6:printf(nSaturday\nn);标号开始执行,不再进行标号判

n

default:printf(Invalidday!\n'断,直到遇到break,或者到

switch语句结束。

system(npausen);

4.1switch多路选择结构

switch(grade){

多个case子句,可case'A:

共用同一语句

(组),表示这些case'a':printf(“85・100\n");break;

条件有同一组操作ccase'B':

caseb:printf(“70・84'n");break;

当grade为'A'或

者时,均输case'C':

出85/00case'c':printf(u60-69\n,J);break;

case'D':

case'd':printf(ubelow60\n,J);break;

default:printf(uinputerror!\nJ,);

)

节选教材86页例题

while((grade=getchar())!=EOF){/*CTRL+Z组合键表示EOF,值为一1*/

switch(grade){

case'Atcase'a,:/*成绩为'A'或'a'*l.getchar():从键盘读

aCount++;取一个字符;

break;2.case'A':ca§e'a':

case'B':case'b':/*成绩为B'或'b'*aCount++;

bCount++;

break;break;

case,C:caseP:/*成绩为'C'或*)相当于

cCount++;case'A':

break;case'a’:

case'nlcase—:/*输入为空格或换行刃aCount++;

break;

default:break;

printf(nIncorrectlettergradeentered.0);

printf(nEntereanewgrade.\nn);

}/*switch*/

}/*while*/

4.1switch多路选择结构

•练习:输入年份和月份,输出该年截至该月共

有多少天。要求在判断某个月有多少天时用

switch语句o

闰年的判断条件:

year能被4整除但不能被100整除;或者能被

400整除。

#include<stdio.h>

#include<stdlib.h>

main()

(

intyear,month,day;

intyearDaysj;

printf(ninputyear-month-day:\nn);

nn

scanf(%d-%d-%d,&year,&month9&day);

yearDays=0;

for(i=1;i<=month-1;i++){

〃求第i月的天数

switch(i){

casel:case3:case5:case7:case8:case10:case12:

yearDays+=31;break;

case4:case6:case9:case11:

yearDays+=30;break;

case2:

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

yearDays+=29;

else

yearDays+=28;

break;

default:

printf("invalidmonth!");

)

)

printf(Hthedaysare%dH,yearDays+day);

system(HpauseH);

提纲

N4.1switch多路选择结构

4.2循环的本质

4.3计数器控制的循环

4.4for循环结构

N4.5break和continue语句()

4.6逻辑运算符

4.7相等测试运算符==和赋值运算符=

4.8结构化程序设计小结

4.2循环的本质

“循环:在循环条件为真时反复执行的一组指令:

循环分成两类:

1)计数器控制的循环;

2)标记控制的循环;

IJ

4.2循环的本质

一、计数器控制的循环

»事先知道循环次数,又称“定数循环”;

»用控制变量来计算循环的次数。控制变量的值

在每次执行完一组循环指令后递增(或递减)。

当控制变量的值达到预定的循环次数时,循环

终止并继续执行循环结构后面的语句。

4.2循环的本质

二、标记控制的循环

»事先不知道循环次数,又称“不定数循环”;

A标记值表示获取数据的结束。标记值是在所有

合法数据项都提供给程序后键入的值,必须不

同于正常的数据项。

提纲

74.1switch多路选择结构

4.2循环的本质

4.3计数器控制的循环

4.4for循环结构

N4.5break和continue语句

4.6逻辑运算符

4.7相等测试运算符==和赋值运算符=

4.8结构化程序设计小结

4.3计数器控制的循环

计数控制的循环要有:

1)控制变量(即循环计数器);

2)控制变量的初始值;

3)在每次循环中用来修改控制变量的递增(或

递减)值;

4)测试控制变量最终值的条件。

提纲

74.1switch多路选择结构

4.2循环的本质

4.3计数器控制的循环

4.4for循环结构

N4.5break和continue语句

4.6逻辑运算符

4.7相等测试运算符==和赋值运算符=

4.8结构化程序设计小结

4.4for循环结构

/*使用结构的计数器控制的循环*/

forcounter=1

main()counter<=10

printf(k*%d\n*\countcr)

intcounter;countcr-H-

/*控制变量的初始化、循环条件、循环计数器*/

/*值的递增(递减)都包含在for结构的头部*/

for(counter=1;counter<=10;counter++)

printf(u%d\n^,counter)

}

for循环指定了计数循环所需的每一方面的内容

4.4for循环结构

for语句的一般格式:

|fbr(表达式1;表达式2;表达式3)"}表达式1

表达式2

表达式1:初始化循环控制变量

语句组

表达式2:循环条件

表达式3:递增(递减)循环控制整表达式3

UJ|±±

大多数情况下for语句等价于以下的while语句:

表达式1;

while(表达式2){

语句组;例外情况:当for循

表达式3;环体中有continue语

}句时,以后会讲

4.4for循环结构

for(表达式1;表达式2;表达式3)

>表达式1和表达式3可以是用逗号格开的表达式列表。

如:for(i=l,j=50;i<=10&&j>=20;i++,j-=5)

A在for结构中,表达式1和表达式3部分应该只放置包含

控制变量的表达式。对其他变量的操作应该放在循环

体之前或循环体之后;

>循环控制第件要防止“丢一错误”,理堇用<=(或>=)

而不用v(或>)o如counterv=l0,而不写成counter<ll;

Afor结构中的三个表达式是可有可无的:如果在程序的

其他地方初始化了控制变量,则可以省去表达式1;如

果省略了表达式2,则假定条件为真,建立了一个“无

限循环”;如果在for结构体中计算了递增(递减)表

达式或者不需要递增(递减)表达式,则可以省去表

达式3。

4.4for循环结构一应用举例

例2:求Fibonacci数列的前40个数。该数列的生成方

Fibonacci数列示例:

1,1,2,3,5,8,13,21,34

求Fibonacci数列

输出fl和f2的值

3=>i

i<=40

「Hf2二〉f

输出f的值

f2=>fl

f=>f2

【算法1】每循环一次,求得一个值

求Fibonacci数列

1二:fl:l=>f2:

l=>i

i<=20

输出门和f2的值

门“2二"2

i+I=>i

【算法2】每循环一次,求得两个值。且比

算法一少用了一个变量。

求Fibonacci数歹上【算法2】的源程序

#include<stdio.h>

main()

{

longintfl,f2;/*定义并初始化数列的头2个数*/

inti;/*定义并初始化循环控制变量i*/

fl=l,f2=l;

for(i=l;i<=20;i++){/*1组2个,20组40个数*/

printf("%151d%151d”输出当前的2个数*(

if(i%2==0)printf(“\n”);/*输出2次(4个数),换行*/

fl+=f2;/*计算下2个数*/

f2+=fl;

}

提纲

74.1switch多路选择结构

4.2循环的本质

4.3计数器控制的循环

4.4for循环结构

N4.5break和continue语句

4.6逻辑运算符

4.7相等测试运算符==和赋值运算符=

4.8结构化程序设计小结

4.5break和continue语句

为了使循环控制更加灵活,C语言提供了break语句和

continue语句。

1.一般格式:break;

continue;

2.功能

(1)break:强行结束循环,转向执行循环语句的下

一条语句。用于switch语句和循环语句中。

(2)continue:用于循环语句中。对于for循环,跳过

循环体其余语句,转向循环变量增量表达式3的计算;对于

while和do-while循环,跳过循环体其余语句,转向继续循

环条件的判定。

4.5break和continue语句

在while结构中使用break语句

#include<stdio.h>

#include<stdlib.h>强行结束循环,

main()转向执行循环语

句的下一■条语句

intx=l;

输出结果:

while(x<=10){

if(x==5)break;

printf(H%dn,x);1234

x++;Brokeoutofloopatx==5

)

printf(n\nBrokeoutofloopatx==%dn,x);

system(HpauseH);

return0;

)

4.5break和continue语句

在for结构中使用break语句

#include<stdio.h>

#include<stdlib.h>

main()

(输出结果:

intx;

for(x=l;x<=10;x++){1234

if(x==5)break;Brokeoutofloopatx==5

printf(n%dn,x);

}

printf(n\nBrokeoutofloopatx==%d'\x);

system(npausen);

return0;

4.5break和continue语句

在while结构中使用continue语句

#include<stdio.h>

#include<stdlib.h>

main()跳过循环体其余

语句,转向继续

intx=l;循环条件的判定

while(x<=10){

if(x==5)continue;死循环!

printf(u%dn,x);

x++;

printf(n\nBrokeoutofloopatx==%d”,x);

system(npausen);

return0;

4.5break和continue语句

在for结构中使用continue语句

#include<stdio.h>

#include<stdlib.h>

跳过循环体其余语

main()句,转向循环变量

增量表达式3的计算

intx;

输出结果:

for(x=l;x<=10;x++){

if(x==5)continue;1234678910

printf(“%d”,x);

}

system(npausen);

return0;

}

当for循环中有continue语句时

main()

main()

({

intx;intx;

x=l;

for(x=l;x<=10;x++){

while(x<=10){

if(x==5)continue;

if(x==5){

printf("%d”,x);

x++;/*不可少*/

)continue;

system(npausen);

}

printf(n%dM,i);

x++;

4.5break和continue语句

循环嵌套时,break和continue只影响包

、含它们的最内层循环,与外层循环无关,

#include<stdio.h>输出结果:

#include<stdlib.h>

mainOX:1,y:1

(x:1,y:2

intx,y;x:1,y:3

for(x=1;x<=2;x++){x:1,y:4

for(y=1;y<=10;y++){x:2,y:1

if(y==5)break;x:2,y:2

Hn

printf(x:%2d,y:%2d\n,x,y);x:2,y:3

}x:2,y:4

)请按任意键继续・.・

system(Hpausen);

return0;

/O

与全部使用标准控制流程编写的程序相比,使

用break和continue语句的结构较差。

\_________________________________________________________________________

提纲

74.1switch多路选择结构

4.2循环的本质

4.3计数器控制的循环

4.4for循环结构

N4.5break和continue语句

4.6逻辑运算符

4.7相等测试运算符==和赋值运算符=

4.8结构化程序设计小结

4.6逻辑运算符

逻辑运算符:将简单条件组合成复杂条件

您胃^符TTTTTf定乂.TTTTT例子。,

t度度+t~~t与tt-V-♦(nmnl<5)&&.(nmti2<

T||TTTTTT或TTTTT(巾皿1<5川(》11城<10)〃

TITTTTT->fTTTf|(llUItll<5)*,

表3・3,・遢|前称

包含&&的表达式如果已经知道结果为假、包含||的表达

式如果已经知道结果为真就会停止进一步计算。所以在包

含&&的表达式中,把最可能为假的条件放在最左边;在

包含||的表达式中,把最可能为真的条件放在最左边,这

样可以减少程序执行的时间。

4.6逻辑运算符

例:假设a=l,b=2,c=3,d=4,m=l,n=l,经

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论