版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1
页第四章程序流程控制语句
C语言的基本语句上机调试程序的方法基本的程序设计方法
输出简单图形穷举法本章要点第2
页第四章程序流程控制语句第一节
C语言语句概述 第四章第二节注释语句 第四章第三节复合语句 第四章第四节选择语句 第五章第五节循环语句 第六章第六节转移语句 第六章第七节简单应用综合举例第3
页§4-1C语言语句概述按照C语言语句的作用分类:
说明语句
注释语句
程序流程控制语句声明变量名称、数据类型及其存储属性的说明性语句编程者对程序本身的解释是“可执行”的语句,构成程序的主体第4
页§4-1C语言语句概述-语句分类选择语句if-else switch forwhiledo-while循环语句转移语句breakcontinuegotoreturn标号语句表达式语句casedefault标号赋值表达式+分号(;)第5
页§4-1C语言语句概述-语句分类按照C语言语句的功能分类:
控制语句函数调用语句表达式语句空语句复合语句控制程序的走向(流程)由一个函数调用加一个分号赋值表达式加分号只有一个分号
;一对{}括起来的语句序列第6
页§4-1C语言语句概述-简单实例#include<stdio.h>main()/*
简单程序实例*/{
inta=10,b=20,c;if(b>a)
{c=a+b;
printf(”%d\n”,c);
}
else
;
}控制语句表达式语句复合语句函数调用语句空语句说明语句注释语句C的语句以分号(;)结束第7
页§4-2注释语句注释语句格式以“/*”开头、以“*/”结尾的说明性文字说明(注释)信息可以是中文,也可以是英文注释语句的目的备忘作用增加程序的可读性,便于编程者和其它程序阅读者理解程序注释语句的使用方法
可以注释程序的功能、变量的含义、函数间接口关系、编程使用的算法和技巧等信息第8
页§4-2
注释语句-实例实例 #include"stdio.h"main(){printf("Hello!\n");
/*
printf("Thanks!\n");*/}合法的注释
x=y+5;
/*
xisintegernumber,x是整型
*/
x=10+
/*
合法的注释但不是好的注释
*/
5;不合法的注释
swi/*
不能在标识符中间插入注释
*/tch(c){...
/*
thisisanoutercommentx=y/a;
/*
注释不允许嵌套
*/
*/第9
页§4-3复合语句复合语句格式用
{
和
}括起来的若干合法的C语句。复合语句的目的语法上等价于单一语句。因此在C语言中,凡是可以使用单一语句的地方,均可使用复合语句。明确层次关系复合语句的使用方法复合语句允许嵌套,且嵌套层次没有限制对于复合语句,右花括号“}”的后面不必再跟一个分号(;)第10
页§4-3复合语句-实例例C3_3001.C:判断输入整数的正负性和奇偶性。 1.main() 2.{
intx; 3. printf("Enterainteger:");scanf("%d",&x);
4. if(x!=0) 5. {
/*处理x不等于0的情况*/ 6.if(x>0)/*若x大于0成立*/ 7.{
x=x%2;/*则计算x除以2的余数*/ 8.if(x==0)printf(”Isapluseven.\n"); 9.elseprintf(”Isaplusoddnumber\n"); 10.} 11.else
/*否则,处理x为负数的情况*/ 12.{
x=x%2;/*计算x除以2的余数*/ 13.if(x==0)printf(”Isaminuseven.\n"); 14.elseprintf(”Isaminusoddnumber\n"); 15.} 16. } 17. else
printf("Thisintegeriszero.\n"); 18.}第11
页§4-4选择语句提出问题二重分支的条件语句if多重分支的条件语句switch?根据学生分数判断是否及格?根据学生分数如何进行分级?如何解决?自然语言:如果…那么…
否则…C语言:
分支语句第12
页§4-4-1选择语句-if语句if语句格式格式1:if
(表达式)
语句;格式2:if
(表达式)
语句1;
else
语句2;if语句的执行流程流程1:
流程2:表达式执行语句成立不成立表达式执行语句2执行语句1成立不成立分支条件第13
页§4-4-1选择语句-if语句
例C3_4101.C:求a和b两数中较大的一个。#include<stdio.h>main()/*程序功能:求a和b的最大值*/{inta,b,max;
printf("Inputaandb=");
scanf("%d%d",&a,&b);/*inputnumberaandb*/
if(a>b)
max=a;
/*如果a>b,则将a=>max*/
else
max=b;
/*否则,b=>max*/
printf("Themaxofaandb:%d\n",max);}a>b?max=bmax=a成立不成立例C3_4101if语句中进行条件判断的“表达式”必须用()括起来且不可省略第14
页§4-4-1选择语句-if语句
例C3_4101.C:求a和b两数中较大的一个。#include<stdio.h>main()/*程序功能:求a和b的最大值*/{inta,b,max;
printf("Inputaandb=");
scanf("%d%d",&a,&b);max=a;if
(max<b
)
max=b;
printf("Themaxofaandb:%d\n",max);}例C3_41011以上两个程序等价max<bmax=b成立不成立第15
页§4-4-1选择语句-if语句
例C3_4102.C:从键盘输入被除数a和除数b,求商。
main(){inta,b;
printf("Entertwonumbers:");
scanf("%d%d",&a,&b);
if(b!=0)printf("%d\n",a/b);
else
printf("cannotdividebyzero.\n");}b?printf...printf...非00if(b)printf("%d\n",a/b);else
printf(”error.\n");等价!第16
页§4-4-1选择语句-if语句if语句嵌套义:在if语句的“语句1”或“语句2”中又包含着if语句 例C3_4103.C:比较两个整数的之间的关系(大小/相等)。#include<stdio.h> main() { intx,y;
printf("EnterintegerXandY:");
scanf("%d%d",&x,&y);
if(x!=y)
if(x>y)printf("X>Y\n");
else
printf("X<Y\n");
elseprintf("X=Y\n"); }例C3_4103说明:在if-else语句中,一般采用“缩进”的书写形式来表示“语句1”或“语句2”所属的层次。注意:缩进仅是一种书写的形式,不具有逻辑意义第17
页§4-4-1选择语句-if语句嵌套if-else语句的配对关系例:if(a>b) /*………………1*/ if(a>c) /*………………2*/ if(a>d)flag=1; /*………………3*/ elseflag=2; /*………………4*/ elseflag=3; /*………………5*/
问题:第四行和第五行的else语句与哪一个if语句相匹配呢?分析:匹配方案可以有很多种,(2-4,1-5),(3-4,2-5),(1-4,…)…匹配规则:在嵌套的if-else语句中,else子句总是与上面的、离它最近的、且在同一复合语句中还没有配对的if子语配对。第18
页§4-4-1选择语句-if语句1、if(a>b)
if(a>c) if(a>d)flag=1; elseflag=2;
elseflag=3;
程序含义:当c>=a>b
时,flag=32、if(a>b)
{
if(a>c) if(a>d)flag=1; else
flag=2;
}
/*以上是一个完整的复合语句*/
elseflag=3;
程序含义:当a<=b时,flag=3
第19
页§4-4-1选择语句-if语句3、if(a==b)if(b==c)printf("a=b=c\n");elseprintf(”a!=b\n”);
尽管书写格式如此,真实的正确的含义是:
if(a==b)
if(b==c)printf("a=b=c\n");
else
printf("a!=b\n”);
通过加{},可以改变配对关系:
if(a==b)
{
if(b==c)printf("a=b=c\n");
}
else
printf(”a!=b\n”);
第20
页§4-4-1选择语句-if语句例C3_4104.C:已知银行整存整取存款月息利率分别为:一年期:0.63%二年期:0.66%三年期:0.69%五年期:0.75%八年期:0.84%其它:0要求输入存钱的本金和期限,求到期时利息与本金合计。银行到期利息计算公式:利息=本金×月息利率×12×存款年限程序中应当根据存款的年限确定利率第21
页§4-4-1选择语句-if语句 #include<stdio.h>main(){intyear;floatmoney,rate,total;/*本金,月利率,本利合计*/
printf("Inputmoneyandyear=?");
scanf("%f%d",&money,&year);/*输入本金和年限*/
if(year==1)rate=0.0063;/*根据年限定利率*/
elseif(year==2)rate=0.0066;
else
if(year==3)rate=0.0069;
else
if(year==5)rate=0.0075;
else
if(year==8)rate=0.0084;
else
rate=0.0;total=money+money*rate*12*year;
printf("Total=%.2f\n",total);}第22
页§4-4-1选择语句-if语句采用if-elseif结构改写。#include<stdio.h>main(){intyear;floatmoney,rate,total;/*本金,月利率,本利合计*/
printf("Inputmoneyandyear=?");
scanf("%f%d",&money,&year);/*输入本金和年限*/
if(year==1)rate=0.0063;/*根据年限定利率*/
elseif(year==2)rate=0.0066;
else
if(year==3)rate=0.0069;
else
if(year==5)rate=0.0075;
else
if(year==8)rate=0.0084;
elserate=0.0;total=money+money*rate*12*year;
printf("Total=%.2f\n",total);}第23
页§4-4-1选择语句-if语句例C3_4105.C:通过键盘输入字符,将输入的字符分为控制、数字、大写字母、小写字母和其他字符等五类。
ASCII码表中的前32个字符为控制字符,‘0’~‘9’为数字,‘A’~‘Z’为大写字母,‘a’~‘z’为小写字母,其它。 #include<stdio.h>main(){charc;
printf("Enteracharacter:");c=getch();
if(c<0x20)printf("\nIsacontrolcharacter.\n");
elseif(c>='0'&&c<='9')
printf("\nIsadigitcharacter.\n");
elseif(c>='A'&&c<='Z'
)
printf("\nIsacaptalcharacter.\n");
elseif(c>='a'&&c<='z')
printf("\nIsalowercharacter.\n");
elseprintf
("\nIsaothercharacter.\n");}例C3_4105第24
页§4-4-1选择语句-if语句if语句与条件运算的关系例:求一个数的绝对值if(y<0)
x=-y;else
x=y;(y<0)?
x=-y:
x=y;等价等价x=(y<0)?
–y:
y;说明:ifelse可以完成与条件运算符(?:
)完全相同的任务,并且可以进行相应的转换。第25
页§4-4-1选择语句-if语句if语句与条件运算的区别:条件运算符形式比较简单,有较强的灵活性,可以替代部分if语句。例:if(cans==1)
printf(”Youneed1
canofpaint.”);
else
printf(”Youneed2
cansofpaint.”);
转换:(cans==1)?printf(”Youneed1canofpaint.”) :printf(”Youneed2cansofpaint.”);
转换:printf(cans==1?
”Youneed1canofpaint.”
:
”Youneed2cansofpaint.”);
转换:printf(”Youneed%d
%sofpaint.”, cans,cans==1
?
”can”
:
”cans”);可以在函数中方便地使用条件运算第26
页§4-4-2选择语句-switch语句switch语句格式
switch(表达式){
case
常量1:
语句序列1
break; case
常量2: 语句序列2
break;
……
default:
语句序列n+1
}执行语句序列1=常量1?计算表达式的值相等不相等break执行语句序列2=常量2?相等不相等break执行语句序列n+1有default?有没有第27
页§4-4-2选择语句-switch语句switch(number){ case1: statement1; break; case2: statement2; break; case3: statement3; break; default: statement4;}statement5;当number的值为2时第28
页§4-4-2选择语句-switch语句switch语句使用注意事项
1.switch语句与if语句不同,仅能判断一种关系:是否恒等。
2.switch语句中case子句的常量可以是整型常量、字符型常量、枚举型数据,或是整型常量表达式,不允许是变量。
3.在同一个switch中,case子句的常量不能相同;在嵌套的switch语句中,不同层次的switch之间,可有相同的常量。
4.default子句可以省略。
5.case和default子句只能在switch语句中使用,且case和default只起标号作用,可出现在switch中的任何位置。
6.case
和default
子句后面的语句序列允许由多个可执行语句组成,且不必用“{}”括起来,也可以为空语句。
7.switch语句中可省略break语句,但省略后会改变流程。第29
页§4-4-2选择语句-switch语句例C3_4104.C:计算存款本利。采用switch改写。 #include<stdio.h>main(){intyear;floatmoney,rate,total;/*本金,月利率,本利合计*/
printf("Inputmoneyandyear=?");
scanf("%f%d",&money,&year);/*输入本金和年限*/
switch(year)/*根据年限定利率*/
{
case1: rate=0.0063;break;
case2: rate=0.0066;break;
case
3: rate=0.0069;break;
case5: rate=0.0075;break;
case
8: rate=0.0084;break;
default: rate=0;
}total=money+money*rate*12*year;
printf("Total=%.2f\n",total);}第30
页§4-4-2选择语句-switch语句例C3_4203.C:输入year年份和月month,求该月天数。如何判断闰年?闰年:能够被4整除且不能被100整除的年份
或能够被400整除的年份例如:1996年、1980年是闰年
1970年、1900年是平年2000年是闰年判断闰年的C语言公式year%4==0&&year%100!=0||year%400==0当year=1996时,结果为1当year=1997时,结果为0当year=1900时,结果为0当year=2000时,结果为1
若为闰年:结果为1若为平年:结果为0第31
页§4-4-2选择语句-switch语句
main(){intyear,month,days;
scanf("%d%d",&year,&month);
switch(month)
{
case
1:case
3:case
5:case
7:
case
8:case
10:case
12:
/*处理“大”月*/
days=31;break;
case4:case6:case9:case11:
/*处理“小”月*/
days=30;break;
case2:
/*处理“平”月*/
if(year%4==0&&year%100!=0||year%400==0)days=29;/*如果是闰年*/
elsedays=28;/*不是闰年*/
break;
default:
/*月份错误*/
printf("Inputerror!\n");days=0;
}
if(days!=0)printf(”%d,%dis%ddays\n",year,month,days);}省略case子句之后的语句第32
页§4-4-2选择语句-switch语句省略break语句例如:某程序段中,error是进行出错处理的函数。
flag=-1;/*errormarker*/switch(i){
case
1:
case2:case3: flag=0;/*noerror*/
break;
case4: flag=1;/*error#1*/
case5: error(flag);/*errorprocess*/
break;default: flag=2;/*othererror*/} /*假定函数error是出错处理函数*/
当i=1,2,3时:flag=0;退出。 当i=5时:flag=-1;调用erorr(flag);退出。 当i=4时:flag=1;调用error(flag);退出。第33
页§4-4-2选择语句-switch语句例C3_4202.C:请编写一个程序计算表达式:data1opdata2的值。
main(){ floatdata1,data2;charop; /*定义操作数、操作符变量*/
printf("Enteryourexpression:");
scanf(”%f%c%f”,&data1,&op,&data2);/*输入表达式*/
switch(op) /*根据操作符分别进行处理*/
{
case
’+’: /*处理加法*/
printf("%.2f+%.2f=%.2f\n",data1,data2,data1+data2);break;
case
’-’: /*处理减法*/
printf("%.2f-%.2f=%.2f\n",data1,data2,data1-data2);break;
case
’*’: /*处理乘法*/
printf("%.2f*%.2f=%.2f\n",data1,data2,data1*data2);break;
case
’/’: /*处理除法*/
if(data2==0) /*若除数为0*/
printf("Divisionbyzero.\n");
else
printf("%.2f/%.2f=%.2f\n",data1,data2,data1/data2);
break;
default: /*输入其它运算符*/
printf("Unknownoperater.\n");
}}例C3_4202第34
页§4-5循环语句提出问题?提问:从键盘上输入10个整数并求和,怎么编程?回答:在程序中写入10个scanf()语句。提问:从键盘上输入500个整数并求和,怎么编程?回答:这个,嗯……???不会让我写500个......老师:让我们换一个角度来看待这些问题,以上问题的实质是:将scanf函数重复执行N遍。学生:对!好象是这么回事......老师:我们可以引出一个概念“循环”,简单而言:循环就是不断反复地执行同一段程序。学生:这就是我们今天要学的新东西?第35
页§4-5循环语句循环反复执行同一段程序,直到满足一定的条件后才停止执行该段程序。C语言中控制循环的语句:
whilefordo-while第36
页§4-5-1while语句while语句格式while(表达式)语句;
说明:语句部分可以是简单语句,也可 以是复合语句。while语句的执行流程表达式?执行语句成立不成立执行while循环之后的语句循环控制条件循环体第37
页§4-5-1while语句-实例例C3_5101.C从键盘输入10个整数,求这10个整数的和。 #include<stdio.h>main(){intcount,num,total;
/*count:计数器,num:输入的整数*/
count=0;total=0;/*total:存放累加和*/
while(count<10)/*循环控制条件*/{
count++;/*循环体*/
printf("EntertheNo.%d=",count);
scanf("%d",&num);total+=num;/*计算累加和*/
}
printf("Total=%d\n",total);}例C3_5101第38
页§4-5-1while语句-实例例:分析程序的运行结果 #include<stdio.h>main(){ intn=0; while(n<3)
printf(”nis%d\n”,n); n++;
printf(”That\’sallthisprogramdoes.\n”);}结果:程序将不停的打印“nis0”,直至终止程序无法正常终止的程序,称为“死循环”。结论:while语句循环体中,一定要有能够对循环控制条件产生影响的语句。避免出现“死循环”现象。例C3_51011{}第39
页§4-5-1while语句-实例例1:分析下列程序段
index=1; while(index<5)
printf(”Goodmorning!\n”); 分析:
程序段将无限制打印字符串。 因为循环中没有任何语句可以改变循环控制变量index的初值1。第40
页§4-5-1while语句-实例例2:分析下列程序段
index=1; while(--index<5)
printf(”Goodmorning!\n”); 分析:
仍有问题,程序改变了index,但方向错了。 在index达到系统能够处理的最大负数时,将会产生下溢而终止程序。 结论: 循环体中必须有能够使循环正常停止的条件。第41
页§4-5-1while语句-实例例C3_5103.C:从键盘中读入一系列字符,直到输入字母a时才停止。 分析:由于不知道要输入的字符数量,只知停止条件是输入字母a,则只能将循环控制条件设为ch!='a'。 #include<stdio.h> main() {charch='
'; while(
ch!='a')
putchar(
ch=getch());
}例C3_5103改写:
#include<stdio.h> main() {charch; while(
(ch=getch())
!='a'
)
;
}例C3_51031循环体为空语句第42
页§4-5-1while语句-实例例C3_5104.C:对输入的行和字符进行计数。
分析:\n作为行结束标记的,DOS中有[CTRL+Z]作为文件结束标记 #defineEOF-1
#include<stdio.h>main(){ int
c,nl=0,nc=0;
while((c=getchar())!=EOF) {
++nc;
if(c=='\n'
) ++nl;
}
printf("chars=%d,lines=%d\n",nc,nl);}例C3_5104
定义文件结束标记
nl行计数器nc字符计数器
进行字符计数
如果找到\n,则行计数第43
页§4-5-1while语句-实例例3:求1到100的之和。
main(){inttotal=0,i=1;
while(i<=100) {
total=total+i;
i++;
}
printf(”Total=%d\n",total);}例C3_51041
变形1:while(i<=100) total+=i++;
==>total+=i;
++i
变形2:int
i=0;
while(++i<=100) ==>++i;判断i<=100 total+=i;
变形3:int
i=0;
while(i++<
100) ==>判断i<100;i++ total+=i;
变形4:int
i=0;
while(i
<100) total+=++i;
==>++i;total+=i第44
页§4-5-1while语句-实例循环嵌套在循环体中,又包含有循环语句,构成循环嵌套。
例C3_5107.C:输出下三角形乘法九九表。123456789---------------------------------------12436948121651015202561218243036714212835424981624324048566491827364554637281假设:行号为i,列号为ji=6j=5i*j(1<=i<=9)(1<=j<=i)则:第i
行中一共要输出i个乘积第45
页§4-5-1while语句-实例#include<stdio.h>main(){int
i=1,j;/*i:行计数器j:列计数器*/
while(i<=9)/*控制打印表头*/
printf("%4d",i++);
printf("\n------------------------------------\n");
i=1;while(i<=9)
{
j=1;/*列计数器置1*/
while(j<=i)/*嵌套的二重循环。输出第i行*/
{
printf("%4d",i*j
);
j++;/*列计数器+1*/}
printf("\n");/*一行输出结束后,输出\n*/
i++;/*行计数器+1*/}}例C3_5107外层循环体执行1次,内层循环要完整执行1次第46
页§4-5-1while语句-实例while使用注意1.while(0){....}由于循环的条件表达式恒等于0,循环体永远也不会执行,是编程者的错误。2.while(1){....}由于循环的条件表达式恒等于1,所以不可能通过循环控制条件来结束循环体的执行,称为“死循环”。3.为了保证循环正常运行,应该特别注意:循环控制条件控制条件的初始状态(初始值)循环体内部对控制条件的影响第47
页§4-5-2for语句for语句格式for(表达式1;表达式2;表达式3)语句;for语句的执行流程循环初始条件循环控制条件表达式2?执行语句成立不成立执行for循环之后的语句执行表达式3执行表达式1循环体for语句等价于下列语句:表达式1;while(表达式2){
语句;
表达式3;}第48
页§4-5-2for语句-实例例C3_5203.C:求1到10的阶乘。 递推公式: n!=1 当n=1时
n!=(n-1)!*n 当n>1时#include<stdio.h> main() {longintn=1;
inti;
for
(
i=1;i<=10;i++
)
{
n=n*i;/*求N!*/
printf("%2d!=%ld\n",i,n);
}
}例C3_5203for语句最常用的形式for(初值;控制条件;增量)语句;第49
页§4-5-2for语句-实例例C3_5202.C:用for语句实现打印乘法九九表。#include<stdio.h>main(){inti,j; for(i=1;i<10;i++)
printf("%4d",i);/*打印表头*/
printf("\n-----------------------------------\n");
for(i=1;i<10;i++
)/*控制打印表体*/
for(j=1;
j<=i;
j++
)
printf((j==i)?
"%4d\n"
:"%4d",i*j);}例C3_5202输出函数printf中使用了“?”操作,含义相当于:
if(j==i)printf("%4d\n",i*j);
else
printf("%4d",i*j);第50
页§4-5-2for语句for语句的变化形式
for语句中的三个表达式中的任意一个都是可以省略的,但是分号不能省略。1.省略表达式2,则:for(表达式1;;表达式3)就形成了一个死循环。2.省略表达式1和表达式3,则:for(;表达式2;)等同于:while(表达式)
据此结论:所有用while语句实现的循环都可以用for语句实现。3.表达式1、2、3全省略,则:for
(;;)
等同于:while
(1)第51
页§4-5-2for语句-实例例C3_5204.C:数列1、1、2、3、5、8、13、21、…是著名的菲波那奇数列,其递推通项公式为: U1=U2=1 Un=Un-1+Un-2 (n>=3)
为求出第N项的值,请编写程序。
根据递推通项公式,可用递推法编写程序,计算第N项的值。递推法:由初始的已知条件开始,先计算出第(N-1)步的结果,再利用前面已知的(N-1)项结果,按照递推公式(或遵照递推规则),推出第N步结果。
递推法是程序设计中最常用的方法之一,使用递推法必须有明确的递推初始值和递推规则(递推公式)。第52
页§4-5-2for语句-实例例C3_5204.C程序#include<stdio.h>main(){intn,i,un1,un2,un;
for(;;){
printf("Inputn=?");scanf("%d",&n);
if(n>=3)
break;/*退出for循环*/
else
printf("\nInputniserror!\n");}
/*控制输入正确的N值*/
un=un2=1;/*设置递推初始值*/
for(i=3;i<=n;i++)/*用递推法计算第N项的值*/
{
un1=un2;un2=un;un=un1+un2;
}
printf("No.%dis%d\n",n,un);}例C3_5204第53
页§4-5-2for语句-实例语句中的逗号(,)运算
逗号(,)运算常见的三种用途是:1.在变量说明表中用来分隔变量,起分隔符的作用。如:inti,
j,k,
m[3],*p;2.在函数的参数表中分隔参数。如:printf("n=%d,x=%d\n",n,x);3.在语句中使用。其形式是:表达式n1,表达式n2;
用逗号分隔开的表达式从左到右进行计算,结果的类型和值是最右边表达式的类型和值。第54
页§4-5-2for语句-实例例C3_5205.C:用逗号运算输出下列字符串。azbycxdwevfugthsirjqkplomn
分析:奇数位上的字符从'a'开始逐次递增,偶数位上的字符从'z'开始逐次递减 #include<stdio.h>main(){chari,j; /*i:奇位字符
j:偶位字符
*//*i从’a’开始逐次递增,j从’z’开始逐次递减*/
for(i='a',j='z';i<j;i++,
j--)
printf(”%c%c”,i,j);/*输出两个字符*/
printf("\n");}例C3_5205第55
页§3-5-3do-while语句do-while语句格式
do
语句
while(
表达式);do-while语句的执行流程表达式?执行语句成立不成立执行while子句之后的语句循环控制条件循环体第56
页§4-5-3do-while语句do-while语句特点
do-while与while和for的最大区别:
do-while语句先执行循环体然后再判断循环控制条件,而while和for却是先判断条件之后再执行循环体。 使用do-while构成的循环,循环体部分至少要执行一次; 而采用while和for构成的循环,循环体部分有可能一次也不会执行。第57
页§4-5-3do-while语句-实例例C3_5301.C:输入一个>=0的整数,要求以相反的顺序输出该数。例如:输入12345,则输出为54321。
基本思路:可以从个位开始,按位输出整数的每一位
main(){unsignedintnumber;
printf("Inputthenumber:");
scanf("%d",&number); do{
printf("%d",number%10);
number/=10;/*number缩小10倍*/ }while(number!=0);}例C3_5301思考:使用while或for语句,如何实现?例C3_53011两个程序有何区别?前面的程序可以处理数字0,后面的程序不能处理第58
页§4-5-3do-while语句-实例例C3_5302.C从键盘输入任意的字符,按下列规则进行分类计数。第一类'0','1','2','3','4','5','6','7','8','9'第二类'+','-','*','/','%','='第三类其它字符当输入字符'\'时先计数然后停止接收输入。第59
页§4-5-3do-while语句-实例
main(){intclass1=0,class2=0,class3=0;charch; do{
putchar(ch=getch());/*函数的嵌套调用*/
switch
(ch)
{case’0’:case’1’:case’2’:case’3’:
case’4’:case’5’:case’6’:case’7’:
case’8’:case’9’:class1++;break;/*对分类1计数*/
case’+’:case’-’:case’*’:case’/’:
case’%’:case’=’:class2++;break;/*对分类2计数*/
default:class3++;break;/*对分类3计数*/
}}while(ch!=’\\’);
printf("class1=%d,class2=%d,class3=%d\n",class1,class2,class3);}例C3_5302第60
页§4-5-4循环语句小结C语言提供了三种循环语句:for、while、do-while。特点如下:
1、for和while先判断循环条件后执行循环体,do-while语句先执行循环体后判断循环条件。 2、while和do-while语句的条件表达式只有一个,for语句有3个。 3、while、do-while、for可以相互替换使用。 4、while语句多用于不需要赋初值的或循环次数不定的情况。
for语句多用于要赋初值或循环次数固定的情况。
do-while语句多用于至少要运行一次的循环。 5、循环语句可以嵌套,可以并列,但不能交叉。第61
页§4-5-4循环语句小结为了保证循环体正常运行,应该特别注意:循环控制条件控制条件的初始状态(初始值)循环体内部对控制条件的影响以上三个方面相互配合,相互影响,共同完成循环控制第62
页§4-6转移语句转移语句的作用改变程序的运行流程。C语言转移语句
breakcontinue
gotoreturn第63
页§4-6-1break语句格式break;break语句的功能1.在switch语句中结束case子句,使控制转到switch语句之外。2.在循环语句的循环体中使用,结束循环过程,使控制转移到整个循环语句之外的下一条语句处。第64
页表达式2?成立不成立执行后续语句执行表达式3执行表达式1§4-6-1break语句break语句的执行流程表达式?成立不成立执行后续语句breakbreak表达式?成立不成立执行后续语句breakwhile语句for语句do-while语句第65
页§4-6-1break语句-实例例C3_6101.C:求555555的约数中最大的三位数是多少?
main(){intj;longn;
printf("Pleaseinputnumber:");
scanf("%ld",&n);/*所求的约数的可能取值是从999到100,j从大到小*/
for(j=999;j>=100;j--)
if(n%j==0)/*若能够整除j,则j是约数*/
{
printf(”3digitsin%ld=%d\n”,n,j);
break;/*控制退出循环*/
}}例C3_6101第66
页§4-6-1break语句-实例break语句使用注意:
1、在嵌套循环中,break语句仅能退出一层(当前)循环。 2、若在循环语句中包含了switch语句,那么switch语句中的break语句仅能使控制退出switch语句。
3、break语句并不是程序设计中必不可少的语句,可以通过改变程序的结构去掉。第67
页§4-6-2continue语句continue语句格式continue;continue语句的功能
co
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 普通述职报告
- 新应急预案编制
- 保护家庭网络安全的方法
- 股票实战课件教学课件
- 交通安全人人有责
- DB1304T 492-2024农村消防设施管理指南
- 传媒经营管理
- 校园艾滋病健康
- 初中引体向上教案
- 菱形的性质说课稿
- GB/T 16716.5-2024包装与环境第5部分:能量回收
- 2024年消防月全员消防安全知识专题培训-附20起典型火灾案例
- 恒牙临床解剖-上颌中切牙(牙体解剖学课件)
- 戏剧鉴赏学习通超星期末考试答案章节答案2024年
- NBT 31021-2012风力发电企业科技文件规档规范
- 2024年国家公务员考试行测真题及解析(完整版)
- 《县委书记的榜样-焦裕禄》课件
- 10以内口算100道题共16套-直接打印版
- 群众问题诉求台帐.doc
- 高强Q460钢焊接作业指导书
- APL-期刊模板
评论
0/150
提交评论