第3章C语言程序的流程控制.docx
- 文档编号:2854589
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:14
- 大小:98.53KB
第3章C语言程序的流程控制.docx
《第3章C语言程序的流程控制.docx》由会员分享,可在线阅读,更多相关《第3章C语言程序的流程控制.docx(14页珍藏版)》请在冰豆网上搜索。
第3章C语言程序的流程控制
第3章C语言程序的流程控制
利用计算机进行程序设计时,不仅仅只处理一些简单的数据,在大部分的程序设计里处理的问题还是相当复杂的。
对于那些复杂的程序设计,读者不可能直接就能写出程序的源代码,而是要通过一些具体的设计方法(如用程序流程图)把程序设计思想先写出来,然后根据程序流程图编写代码。
本章将具体介绍进行程序设计时使用的基本方法和C程序的流程控制。
3.1程序设计的基本知识
3.1.1程序流程图
在描述一个程序的基本结构思想时有很多种方法,其中程序流程图是最常用也是最基本的方法。
1. 传统程序流程图
传统流程图表示法的特点是用一些图框表示各种类型的操作,用线表示这些操作的执行顺序。
美国国家标准化协会ANSI规定了一些常用的流程图符号,现已为世界各国普遍采用。
我国也有自己的国家标准GB1526-89与该标准基本相同,本书就参照ANSI标准做具体介绍。
标准中各种图示如图3.1所示。
起止框输入输出框判断框处理框
或
流程线连接点注释框
图3.1传统流程图表示法
下面对其中一些主要符号作简要说明:
(1)起止框是用来标识程序的开始和结束位置的。
规定流程图以起止框开始,以起止框结束。
(2)输入输出框也叫数据框,其中可以注明数据名称、来源、用途或其它的文字说明。
(3)菱形框的作用是对一个给定的条件进行判断,根据给定的条件是否成立来决定如何执行其后的操作。
(4)处理框用矩形表示各种处理功能。
例如,执行一个或一组特定的操作,从而使信息的值、信息的形式或所在位置发生变化。
另外在矩形框内可注明特定处理名称或其简要功能。
(5)流程线用带箭头的直线表示程序的执行顺序。
当流程自左向右或自上向下时流程线可以不带箭头,其它情况应加箭头表示流程。
(6)连接点用小圆圈表示将画在不同地方的流程线连接起来。
下图中有两个以①为标志的连接点,它表示这两个点是互联在一起的,实际它们是同一个点。
这种连接通常用在图形画不下而需要分开画时。
①
①
(7)注释框不是流程图的必要部分,其不反映流程操作,只是为了流程图中某些操作做解释补充的,以帮助阅读流程图的人更好的理解流程图的作用。
2. N-S流程图
灵活的流程线在程序设计中有它自己的优点,但也隐藏着许多导致错误的祸根。
因为它允许用流程线使流程任意转移,这对程序设计是一个隐患,它使程序流程看起来很乱,使程序难以理解和维护。
针对这一弊病,1973年美国学者I.Nassi和B.Shneiderman提出了一种无流程线的流程图,称为N-S图。
它的基本表示方法是用一个矩形框,把整个程序算法像堆积木一样组成。
其基本结构如图3.3、3.4、3.5、3.6所示。
3.1.2 程序的三种基本结构
结构化的程序设计方法是面向过程的程序设计的基本方法。
1996年意大利Bobra和Jacopini提出了三种基本程序结构。
已经证明,这三种算法可以解决任何复杂的问题。
1.顺序结构
(传统流程图表示)(N-S流程图表示)
图3.3顺序结构流程图
2. 选择结构
(传统流程图表示)(N-S流程图表示)
图3.4选择结构流程图
3. 循环结构
(1)while循环结构
不成立成立
(传统流程图表示)(N-S流程图表示)
图3.5当型循环结构流程图
(2)do…while循环结构
不成立
成立
(传统流程图表示)(N-S流程图表示)
图3.6直到型流程图
例3.1画出求s=1+2+3+…+100的传统流程图和N-S流程图。
开始
3.2C语言的基本语句
3.2.1 表达式语句
C语言是一种表达式语言,所有的操作运算都是通过表达式来实现的。
由表达式组成的语句称为表达式语句,它是由一个表达式后接一个分号组成。
这里要特别强调,没有分号的不是语句。
1.赋值语句
赋值语句由赋值表达式加一个分号组成。
例如:
i=1;
2. 函数调用语句
函数调用语句由函数调用表达式后跟一个分号组成。
例如:
strcpy(s1,"student",4);
printf("goodafternoon\n");
3. 空语句
空语句是只有一个分号而没有其他表达式的语句。
例如:
;
它不产生任何操作运算,只作为形式上的语句,被填充在控制结构之中。
3.2.2 复合语句
C语言还允许把一组语句放在一对花括号之中,称为复合语句。
要特别强调一点,一个复合语句的后花括号之后不应再写分号。
例如:
{
c=getchar();
b=b+c;
putchar();
}
3.2.3 流程控制语句
选择型结构语句
循环控制结构语句
流程转向语句
……
3.3 选择结构程序设计
在C语言中实现选择结构的语句有两大类:
if语句和switch语句。
3.3.1 if语句
(1)简单if语句
格式:
if(表达式)语句;
功能:
如果表达式的值为真,则执行其后的语句,否则不执行该语句。
其N-S流程图如图3.9表示。
图3.9简单if语句流程图
(2)基本if…else语句
格式:
if(表达式)语句1;else语句2;
功能:
如果表达式值为真,则执行语句1,否则执行语句2。
其执行过程如图3.10所示。
图3.10基本if…else语句流程图
例3.3从键盘输入任意一整数,求其绝对值并输出。
#include
{
intx;
printf("pleaseenteranumber:
");
scanf("%d",&x);
if(x<0)
x=-x;
else
x=x;
printf("numberabsisd%",x);
}
(3)if语句的嵌套
当if语句中执行的语句又是if语句时,那么就构成了if语句的嵌套。
其一般形式可以表示如下:
if(表达式)
if语句1;
else语句2;
else
if语句3;
else语句4;
在if语句的三种形式中,如果所要执行的语句超过一条必须用花括号括起来,构成一条复合语句,才能被完全执行。
例如:
if(a>b)
{a++;
b++;}
else
{a=10;
b=100;
}
3.3.2switch语句
一种用于多分支选择的语句——switch语句,用该语句编写的程序简洁、易懂。
而且,其执行效率要比同样功能的阶梯式if…elseif…else语句要高的多。
1. switch语句的一般形式
switch语句的一般形式如下:
switch(表达式)
{
case常量表达式1:
语句组1;
case常量表达式2:
语句组2;
·
·
·
case常量表达式n:
语句组n;
default:
语句组n+1;
}
2. switch语句的执行过程
系统首先计算“表达式”的值,并逐个与其后的“常量表达式”的值相比较,当“表达式”的值与某个“常量表达式”的值相等时,就以此作为程序执行的入口,执行switch结构中后面的各语句。
如果没有任何一个case后面的“常量表达式”的值与“表达式”的值匹配,则执行default后面的语句(组)。
例3.6 用switch语句实现例3.4的功能。
#include
main()
{
intscore;
printf("pleaseinputscore(0-100):
");
scanf("%d",&score);/*从键盘输入学生成绩*/
switch(score/10);
{
case10:
case9:
printf("excellent\n");break;
case8:
printf("good\n");break;
case7:
printf("medium\n");break;
case6:
printf("pass\n");break;
default:
printf("fail\n");
}
}
3.4 循环结构程序设计
C语言提供了循环控制的三种语句:
while语句、do…while循环语句和for循环语句。
3.4.1while语句
while语句是一种条件循环结构,其控制结构如下:
while(条件表达式)
循环体
例3.7 计算并输出从1加到100的和:
s=1+2+3+┅100。
#include
main()
{
intsum=0,i=1;/*设置和与循环变量*/
while(i<=100)
{sum=sum+i;
i++;
}
printf("Sum=%d",sum);
}
程序执行结果如下:
Thesumof1to100equalsis:
5050
3.4.2 do…while循环语句
do…while结构在C语言中用于实现“直到型”循环。
其一般形式为:
do
循环体
while(条件表达式);
例3.9 用do…while语句求1+2+3+…+100的和。
#include
main()
{
inti=1,sum=0;
do
{sum=sum+i;
i++;
}
while(i<=100);
printf("sum=%d",sum);
}
3.4.3 for循环语句
for语句的使用最为灵活,既可以用于循环次数确定的情况,也可以用于循环次数未知的情况。
for语句的一般形式如下:
for(表达式1;表达式2;表达式3)
循环体
如图3.13所示,for语句的执行流程是:
图3.13for语句的执行流程
例3.10 输入一个整数,求出它的所有因子。
求一个整数n的所有因子可以采用穷举法,对1~n的全部整数进行判断,凡是能够整除n的都是n的因子。
由分析可知,这是一个已知循环次数的循环,因此可以使用for语句。
#include
main()
{
intn,k;
printf("Pleaseinputapositiveinteger:
");
scanf("%d",&n);
printf("Number%dFactors:
",n);
for(k=1;k<=n;k++)
if(n%k==0)
printf("%d",k);
printf("\n");
}
程序某次的运行结果如下:
Pleaseinputapositiveinteger:
36↙
Number36Factors:
123469121836
3.4.4 循环嵌套
一个循环体内又可以包含另外一个完整的循环结构,从而构成多重循环结构,这就是循环的嵌套。
3.4.5continue和break语句
1. continue语句
continue语句可以出现在循环体中,其作用是结束本次循环,但不退出循环结构。
它跳过循环体中下面尚未执行的语句,直接进行下一次是否执行循环的判定。
例3.12输出60~600之间所有不能被9整除的数。
#include
main()
{
intm;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 程序 流程 控制