第4章 程序流程控制_第1页
第4章 程序流程控制_第2页
第4章 程序流程控制_第3页
第4章 程序流程控制_第4页
第4章 程序流程控制_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

第4章程序流程控制算法C语言的基本语句顺序结构选择结构循环结构14.1算法数据结构+算法=程序数据结构+算法+程序设计方法+语言环境=程序4.1.1算法的概念算法的五个特性:有穷性、确定性、可行性、输入、输出。算法设计注意:正确性、可读性、健壮性、高效性。24.1.2算法的组成要素1、操作:

包括算术运算、逻辑运算、关系运算、函数运算、位运算、I/O操作等。2、控制结构:

控制算法中各个操作的执行顺序。三种基本控制结构是:

顺序结构(顺序执行)选择结构(比较判断)循环结构或称重复结构(反复执行)34.1.3算法的描述自然语言流程图N-S图PAD图伪代码语句2语句1语句1语句2判断YN语句43.复合语句一般形式:{[内部数据说明部分;]执行语句部分;}2.表达式语句运算符表达式语句:计算表达式的值。函数调用表达式语句:调用函数。4.2C语言的基本语句声明语句用于声明合法标识符(变量名或函数名),可在函数体或复合语句中使用,且须写在其他语句前面。例:x=(a+3)*b;a=sin(x);y=x++;例如:inta,b;doublex,y,z;5空语句只有分号组成的语句,什么也不执行。流程控制语句条件判断语句if语句、switch语句。循环执行语句do…while语句、while语句、for语句。流程转向语句break语句、goto语句、continue、语句return语句。如:main(){inta=1,b=4;…..{intb;b=3;printf(“%d\n”,a+b);}printf(“%d”,a+b);}

输出:45说明:

}后不加分号。语法上和单一语句相同。复合语句可嵌套。复合语句中的变量只在本部分有效。64.3顺序结构顺序结构程序由简单语句组成,程序流程如图3.1所示,语句按书写顺序执行,先执行A,再执行B。BA顺序结构执行流程例:main(){inta,b=4;a=b*2;printf(“%d”,a);}74.4选择结构4.4.1if…else语句结构形式:if(表达式)语句1;else语句2;执行过程:先判断表达式,成立就执行语句1,否则执行语句2。例:if(x>y)max=x;elsemax=y;注意:

if…else中表达式可为关系表达式、逻辑表达式、数值表达式。

if…else中语句1、语句2可以为简单语句或复合语句。

if…else中分号的使用位置。表达式语句1真假语句2双分支选择84.4.2if语句结构形式:if(表达式)语句;执行过程:先判断表达式,若成立则执行语句,否则跳过该语句而直接执行该结构后的下一条语句。注意:此处,不管分支语句是否执行,if后的表达式一定执行。表达式语句真假单分支选择例:main(){inta=1,b=3,max;max=a;

if(a<b)max=b;printf(“%d”,max);}94.4.3elseif语句一般形式:if(表达式1)语句1;elseif(表达式2)语句2;…elseif(表达式n)语句n;else语句n+1;执行过程:执行时先判断表达式1的值,非0就执行下面的语句,若为0就执行下一个判断,一直这样做下去直到得出最后结果。

表达式1真语句1假表达式2表达式3语句4语句3语句2真真假假多分支选择例:if(score>=90)grade=‘A’;elseif(score>=80)grade=‘B’;elseif(score>=70)grade=‘C’;elseif(score>=60)grade=‘D’;elsegrade=‘E’;104.4.4if语句的嵌套当if(表达式)或else后面的语句本身又是一个if语句结构时,就形成了if语句的嵌套结构。一般形式:if(表达式1)if(表达式1_2)语句1_1else语句1_2elseif(表达式2_1)语句2_1else语句2_2注意:当程序中存在嵌套的if….else结构时,每个else都与其前面最近的if配对,由内层向外层逐步处理。11if(expr1)if(expr2)statement1elsestatement2elseif(expr3)statement3elsestatement4内嵌if内嵌ifif(expr1)if(expr2)statement1elsestatement2内嵌ifif(expr1){if(expr2)statement1}elsestatement3

内嵌ifif(expr1)statement1elseif(expr3)statement3elsestatement4内嵌if例如:12if(z>y)if(z>x)max=z;elseif(y>x)max=y;if(z>y){if(z>x)max=z;}else{if(y>x)max=y;}

二者有何区别?13#include“stdio.h”main(){inta,b;printf("Enterintegera:");scanf("%d",&a);printf("Enterintegerb:");scanf("%d",&b);if(a==b)printf("a==b\n");elseprintf("a!=b\n");}例输入两个数并判断两数是否相等运行:Enterintegera:12

Enterintegerb:12a==b

运行:Enterintegera:12

Enterintegerb:9a!=b

14#include“stdio.h”main(){charc;c=getchar();if(c<0x20)printf(“Thisisacontrolcharacter\n");elseif(c>='0'&&c<='9')printf(“Thisisadigit\n");elseif(c>='A'&&c<='Z')printf(“Thisisacapitalletter\n");elseif(c>='a'&&c<='z')printf(“Thisisalowerletter\n");elseprintf("Thecharacterisothercharacter\n");}例判断输入字符种类运行:Enteracharacter:8Thecharacterisadigit运行:Enteracharacter:DThecharacterisacapitalletter运行:Enteracharacter:hThecharacterisalowerletter运行:Enteracharacter:#Thecharacterisothercharacter15例:输入两数并判断其大小关系#include“stdio.h”main(){intx,y;printf("Enterintegerx,y:");scanf("%d,%d",&x,&y);

if(x!=y)

if(x>y)printf("X>Y\n");elseprintf("X<Y\n");elseprintf("X==Y\n");}运行:Enterintegerx,y:12,23X<YEnterintegerx,y:12,6X>YEnterintegerx,y:12,12X==Y16例考虑下面程序输出结果:main(){intx=100,a=10,b=20;intv1=5,v2=0;if(a<b)if(b!=15)if(!v1)x=1;elseif(v2)x=10;elsex=-1;printf(“%d”,x);}结果:-1174.4.5switch语句结构一般形式:执行过程:switch(表达式){caseE1:语句组1;caseE2:语句组2;…….caseEn:语句组n;[default:语句组;]}switch表达式语句组1语句组2语句组n语句组…...E1E2Endefaultcase

例:switch(i)

{case1:printf(“A\n”);break;

case2:printf(“B\n”);break;

case3:printf(“C\n”);break;case4:printf(“D\n”);break;

default:printf(“E\n”);

}18说明:E1,E2,…En是常量表达式,且值必须互不相同每个分支必须用break跳出case后可包含多个可执行语句,且不必加{}switch可嵌套多个case可共用一组执行语句如:……case‘A’:case‘B’:case‘C’:printf(“score>60\n”);break;……..19例switch(score){case5:printf(“Verygood!”);case4:printf(“Good!”);case3:printf(“Pass!”);case2:printf(“Fail!”);default:printf(“dataerror!”);}运行结果:score为5时,输出:Verygood!Good!Pass!Fail!dataerror!20例main(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf(“\na=%d,b=%d”,a,b);}运行结果:a=2,b=1214.5循环结构循环控制:记数法和标志法。4.5.1穷举与迭代算法穷举问题所涉及的情况。答案需要满足的条件。迭代确定迭代变量。建立迭代关系式。对迭代工程进行控制。224.5.2while语句一般格式:while(循环条件表达式)循环体语句;执行过程:先计算循环条件表达式的值,若为真则执行循环体语句,重复上述过程,直到循环条件表达式的值为假时,循环结束。注意:先判断,后执行。循环条件表达式只要其值非0,就可以执行循环体。循环体由多个语句组成时,须用花括号形成复合语句。为使循环最终能结束,每执行一次循环体,循环条件表达式的值应趋于0变化。如果表达式的值一开始就为0,则语句一次也会被不执行。#include“stdio.h”main(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d",sum);}234.5.3do…while语句一般格式:do{循环体语句;}while(循环条件表达式);执行流程:先执行循环体语句,然后对循环条件表达式进行计算,若其值为真则重复上述过程,直到循环条件表达式的值为假时,循环结束。注意:如果表达式的值一开始就为0,也会执行一次语句,此处异于while语句。循环控制变量值在循环体内必须有所改变。#include“stdio.h”main(){inti,sum=0;i=1;do{sum+=i; i++;}while(i<=100);printf("%d",sum);}244.5.4for语句一般形式:for([表达式1];[表达式2];[表达式3])

循环体语句;其中:表达式1常用于给循环变量赋初值,可选。表达式2是循环条件,可选。表达式3常用来修改循环变量的值,可选。expr2循环体假(0)真(非0)forexpr1expr3说明:

for语句中三个表达式的类型任意,自身都可省略,但

分号不可省。无限循环:for(;;)for语句可以转换成while结构。表达式1;while(表达式2){

循环体语句; 表达式3;}#include“stdio.h”main(){inti,sum=0;for(i=1;i<=100;i++)sum+=i;printf("%d",sum);}25例:main(){inti,sum=0;

for(i=1;i<=100;i++)sum+=i;printf(“%d”,sum);}例:main(){inti=1,sum=0;

for(;i<=100;i++)sum+=i;printf(“%d”,sum);}例:main(){inti=1,sum=0;

for(;i<=100;sum+=i++);printf(“%d”,sum);}264.5.5流程转向语句功能:改变程序的结构,使程序从其所在的位置转向另一处。1.break语句语句形式:break;作用:在switch分支结构中,可以使流程跳出switch分支结构;在循环结构中,使流程跳出当前的循环层,转向执行该循环结构后面的语句。说明:break只能终止并跳出最近一层的结构。break不能用于循环语句和switch语句之外的任何其它语句之中。27例:main()

{

inti=1,sum=0:

for(;;)

{sum+=i;i++;if(i>100)break;/*如果i>100,则退出循环*/

}

printf(“sum=%d”,sum);

}

本程序中,当i>100时,强行终止for循环,继续执行for语句下一条语句。282.continue语句语句形式:continue;作用:使本次循环提前结束,即跳过循环体中尚未执行的循环体语句,但不结束整个循环,而继续进行下一次循环的条件判别以决定是否进入下一次循环。说明:仅用于循环语句中。3.函数的调用和返回作用:使程序流程转向被调用函数,而函数返回语句return的功能是使流程从被调用函数返回主调函数。29例:显示输入的字符,如果按的是Esc键,则退出循环;如果按的是Enter键,则不做任何处理,继续输入下一个字符。#include<stdio.h>main(){charch;for(;;){ch=getchar();/*字符输入函数*/if(ch==27)/*Esc键的ACSII码为27*/

break;/*退出循环*/if(ch==13)

continue;/*按的是Enter键,跳过字符输出语句*/putchar(ch);/*显示输入的字符*/}getchar();/*让程序停一下,拍任意键继续*/}304.goto语句goto语句被称为无条件转移语句,由两部分组成:

goto标号;和标号:语句其中:标号必须是一个合法的标识符,把它放在一个语句前面,后跟一个冒号,表示程序流程将转向此语句。注意:goto语句和break语句相比最大的好处是可以一下跳出多重循环,但不能从外面跳入循环体内。goto语句应有限制地进行使用。main(){intsum=0,n=1;loop:if(n<

温馨提示

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

评论

0/150

提交评论