版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章程序设计语句
3.3循环结构3.4break、continue和goto语句3.5程序案例本章小结学生自我完善练习目录3.1程序的语句与结构3.2选择结构3.1程序的语句与结构语句是完成一定任务的命令,语句书写格式是以分号(;)作为结束符。和其他高级语言一样,C语言的语句用来向计算机系统发出操作指令。C语言的语句可分为5种类型,下面分别作以介绍。1.表达式语句由一个表达式加一个分号构成。表达式语句一般形式如下:表达式;执行表达式语句就是计算表达式的值。例如:赋值表达式+分号=赋值语句注意没有分号不能称为语句。3.1.1程序的语句3.1程序的语句与结构2.函数调用语句由一个函数调用加上一个分号构成函数调用语句,其作用是调用函数体并把实际参数赋给函数定义中的形式参数,然后执行被调用函数体中的语句,求取函数值。其一般形式为:例如:printf(“Hello,BoysandGirls!”); /*调用库函数,输出字符串*/函数名(实际参数);3.1.1程序的语句3.1程序的语句与结构3.控制语句控制语句完成一定的控制功能,以实现程序的结构化。C语言有9种控制语句,可分为以下3类:(1)条件判断语句(2)循环语句if()…else…
(二选一的分支语句)switch (多选一的分支语句)while()… (当型循环语句)do…while() (直到循环语句)for()… (结构化的当型循环)3.1.1程序的语句3.1程序的语句与结构3.控制语句(3)流程转向语句4.复合语句复合语句是把一组语句用一对花括号“{}”括起来,又称为分程序。形式上是几条语句,但在语法上相当于是一条语句。5.空语句只有一个分号的语句,即“;”,空语句是什么也不执行的语句。在有的循环中,循环体什么都不做,就用空语句来表示。break(跳出语句,终止执行switch或循环)continue(提前结束本次循环语句)goto(无条件转向语句)return(函数返回语句)3.1.1程序的语句3.1程序的语句与结构即一个C程序可以由若干个源程序文件组成,每个源程序可以由若干个函数组成。C语言程序结构如图3-1所示。图3-1C语言程序结构3.1.2程序的结构3.1程序的语句与结构【案例3-1】从键盘输入两个整数,求这两个整数的差。单击打开源程序程序运行结果3.1.2程序的结构3.1程序的语句与结构在C语言中,程序结构一般分为顺序结构、选择结构和循环结构。任何复杂的程序都是由这三种基本结构组成。(1)顺序结构:从流程上是从前向后顺序执行。(2)选择结构:根据判断条件的结果有选择地执行。(3)循环结构:有条件地重复执行某一过程。3.1.2程序的结构图3-2C语言程序函数内语句结构3.1程序的语句与结构1.确定该程序所用的各个变量及其数据类型。2.确定算法。该步骤是最重要的,本章学习的各种结构就是实现编写程序算法的基础。3.开始编写程序(主函数中结构)。(1)定义各变量。(2)输出提示信息。(3)输入各变量的初始值。(4)编写实现功能的算法语句。(5)输出结果变量的值。4.调试运行程序。某一函数内的语句结构通常如图3-2所示。3.1.3如何设计C语言程序3.1程序的语句与结构所谓顺序结构,就是指按照语句在程序中的先后次序一条一条地顺次执行。顺序结构是最简单、最基本的结构。其特点是程序运行时按语句书写的次序依次执行。【案例3-2】从键盘输入两个整数,交换这两个整数并输出。单击打开源程序程序运行结果3.1.4顺序结构3.2选择结构在C语言中,使用if语句和switch语句来进行实现。
常用的if定义格式有单分支if语句、双分支if语句和复合if语句三种。1.单分支if语句单分支if语句定义格式如下:if(表达式)
语句3.2.1条件语句——if语句3.2选择结构其含义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。其过程如图3-6所示。图3-6单分支if语句的流程示意图3.2.1条件语句——if语句3.2选择结构【案例3-3】输入两个整数,判断两数大小,并在第一个数中存放这两个数的较大值,输出这两个数。单击打开源程序程序运行结果程序运行时,输入37<回车>,则运行结果如下左图所示。若输入73<回车>,则运行结果如下右图所示。3.2.1条件语句——if语句3.2选择结构说明:(1)if语句自动结合跟在其后面的一个语句,当满足条件需要执行多个语句时,应用一对大括号{}将需要执行的多个语句括起,形成一个复合语句。(2)if语句中表达式形式很灵活,可以是常量、变量、任何类型表达式、函数、指针等。只要表达式的值为非零值,条件就为真,反之条件为假。3.2.1条件语句——if语句3.2选择结构2.双分支if语句双分支if语句定义格式如下:其含义是:如果表达式的值为真(非0),则执行其后的语句1,否则执行语句2。其过程如图3-7所示。if(表达式)语句1else语句2图3-7双分支if语句的流程示意图3.2.1条件语句——if语句3.2选择结构说明:(1)if后面圆括号中的表达式,可以是任意合法的C语言表达式(如逻辑表达式、关系表达式、算术表达式、赋值表达式等),也可以是任意类型的数据(如整型、实型、字符型等)。(2)无论是否有else子句,if子句中如果只有一条语句,则此语句后的分号不能省略。若if子句中有多条语句,则应将这些语句用花括号括起,形成一条复合语句。3.2.1条件语句——if语句3.2选择结构【案例3-4】从键盘输入一个学生成绩(浮点数,值在0-100之间),若该值大于等于60,则输出该学生成绩为及格,否则输出该学生成绩不及格。单击打开源程序程序运行结果程序运行时,输入分数88<回车>,则运行结果如下左图所示。若输入分数37<回车>,则运行结果如下右图所示。3.2.1条件语句——if语句3.2选择结构3.if语句的嵌套if和else子句中可以是任意合法的C语句,也可以是if语句,通常称此为嵌套的if
语句。内嵌的if语句既可以嵌套在if子句中,也可以嵌套在else子句中。(1)在if子句中嵌套具有else子句的if语句。语句形式如下:if(表达式1)
if(表达式2)语句1
else语句2else
语句3当表达式1的值为非0时,执行内嵌的if-else语句;当表达式1的值为0时,执行语句3。3.2.1条件语句——if语句3.2选择结构(2)在if子句中嵌套不含else子句的if语句。语句形式如下:if(表达式1){if(表达式2)语句1}else
语句2注意:此if子句中的一对花括号不可缺少,表示第二个if是第一个if的执行语句。3.2.1条件语句——if语句3.2选择结构(3)在else子句中嵌套具有else子句的if语句。嵌套的if语句带有else,语句形式如下:
if(表达式1)语句1elseif(表达式2)语句2else语句3此时第二个if语句作为第一个if表达式1不成立时的执行语句。当表达式2成立时执行语句2,不成立时执行语句3。3.2.1条件语句——if语句3.2选择结构(4)在else子句中嵌套不含else子句的if语句。嵌套的if语句不带else,语句形式如下:if(表达式1)语句1elseif(表达式2)语句2此时第二个if语句作为第一个if表达式1不成立时的执行语句。当表达式2成立时执行语句2,不成立时什么都不执行。3.2.1条件语句——if语句3.2选择结构4.复合if语句复合if语句的形式如下:虚线方框提示该部分可以看作是上一级else的一条语句。执行过程:从上向下逐行对if后的表达式进行检测。当某一个表达式的值为非零时,就执行与此有关子句中的语句,阶梯形中的其余部分被越过去。如果所有表达式的值都为零,则执行最后的else子句。此时,如果程序中最内层的if语句没有else子句,即没有最后的那个else子句,那么将不进行任何操作。3.2.1条件语句——if语句3.2选择结构复合if语句的流程图如图3-8所示。图3-8复合if语句的流程图3.2.1条件语句——if语句3.2选择结构【案例3-5】设计一个程序,用复合if语句实现由键盘输入一个成绩,输出该成绩的等级。其中90~100分为优秀,80~89分为良好,70~79分为中等,60~69分为及格,60分以下为不及格。如果成绩不在0~100之间则输出错误信息。单击打开源程序程序运行结果3.2.1条件语句——if语句3.2选择结构用if语句只能进行两路选择,在实现多路选择时须使用多个if语句,因此用if语句解决多路问题非常不方便,这时可利用switch语句实现多条件多分支程序设计。1.switch语句形式3.2.2开关语句——switch语句3.2选择结构2.switch语句的执行过程
程序执行至switch语句首先对括号内的表达式进行计算,然后按顺序找出某个与常量值相匹配的case,以此作为入口,执行case语句后面的各个语句组,直到遇到break或switch语句的右花括号终止语句。如果没有任何一个case能与表达式值相匹配,则执行default语句后的语句组,若default及其后语句组省略,则不执行switch中任何语句组,而继续执行下面的程序。3.2.2开关语句——switch语句3.2选择结构3.使用switch语句应注意的问题(1)default语句及其后面语句组可以省略。(2)switch后圆括号内表达式可以是整数表达式、字符表达式或枚举表达式。case后面是整数或字符,也可以是不含变量和函数的常量表达式。同一个switch语句中的case后面的值不能相同。(3)case及其后语句和default及其后语句出现次序可以任意。(4)case与其后的常量表达式之间要有空格,否则系统会识别不出该常量表达式。(5)执行完一个case语句后,程序自动转到后面的语句执行,直到遇到break或switch语句的右花括号终止语句。3.2.2开关语句——switch语句3.2选择结构【案例3-6】设计一个程序,用switch语句实现由键盘输入一个成绩,输出该成绩的等级。其中90~100分为优秀,80~89分为良好,70~79分为中等,60~69分为及格,60分以下为不及格。如果成绩不在0~100之间则输出错误信息。单击打开源程序程序运行结果3.2.2开关语句——switch语句3.3循环结构广义地说,为解决一个问题而采取的方法和步骤统称为“算法”。下面举一个最原始的例子。求1×2×3×4×5的结果。可以用最原始的方法进行求解:步骤1:先求1×2,得到结果2;步骤2:将步骤1的结果2乘以3,得到结果6;步骤3:将步骤2的结果6乘以4,得到结果24;步骤4:将步骤3的结果24乘以5,得到结果120。这个算法是正确的,但太烦琐。如果要求1到100的自然数的乘积,要写99个步骤,这显然是不可取的。所以应该另找一种方便实现的表示方法。3.3.1程序的设计过程3.3循环结构因为C语言中变量的值是可变的,所以考虑设置两个变量,一个变量代表乘数,一个变量代表被乘数。不另设变量,而直接将每一步骤的结果放在被乘数的变量中。例如,这里用s代表被乘数,i为乘数。用循环算法来求解,可以将算法改为:步骤1:令s=1;步骤2:令i=2;步骤3:令s×i,乘积仍放在s中,可表示为:s*i→s;步骤4:使i的值增1,即i+1→i;步骤5:如果i的值不大于5,返回重新执行步骤3及以后的步骤4和5;否则,算法结束。3.3.1程序的设计过程3.3循环结构while循环是当型循环,先判断循环条件,再根据条件决定是否执行循环体。1.while语句形式while语句的一般格式为:若循环体内需要多个语句,应该用大括号括起来,组成复合语句。while语句流程图如图3-9所示。while(表达式)循环体语句3.3.2当型循环——while循环3.3循环结构2.while语句的执行过程首先计算while后圆括号中表达式的值,当值为非零时,执行循环体语句,执行完后再次判断表达式的值,当表达式的值为非零时,继续执行循环体;当值为零时,退出循环。3.3.2当型循环——while循环3.3循环结构【案例3-7】设计一个程序,用while循环语句实现1~100自然数的和。程序设计思路如下。(1)定义变量sum和i,分别存放累计和及循环次数。(2)累计和变量sum赋初值0,循环次数i赋初值1。(3)while循环求和。先将i加到sum中,再将i自增1。反复执行循环体,直到i大于100跳出循环。单击打开源程序程序运行结果3.3.2当型循环——while循环3.3循环结构1.do-While语句的基本形式2.do-while语句的执行过程(1)执行do后面循环体中的语句。
(2)计算while后圆括号中表达式的值。当值为非零时,转去执行步骤(1);当值为零时,结束do-while循环。do-while语句的流程图如图3-10所示。3.3.3直到型循环——do-while循环3.3循环结构3.do-while语句与while语句的区别由do-while构成的循环与while循环十分相似,它们之间的重要区别是:while循环控制条件出现在循环体之前,只有当while后面表达式的值为非零时,才可能执行循环体,所以while语句当表达式初值就为假时,循环体一次都不执行;在do-while构成的循环中,总是先执行一次循环体,然后再求表达式的值,因此,无论表达式的值是零还是非零,do-while循环体至少执行一次。3.3.3直到型循环——do-while循环3.3循环结构3.使用while语句注意的问题(1)循环体如果包含一个以上的语句,应该用花括号括起来,以复合语句的形式出现。如果不用花括号,则while语句的范围只到while后面第一个分号处。(2)在循环体中应该有使循环趋向于结束的语句。如无此语句,循环将永不结束。(3)当第一次判断条件就为假时,循环体一次都不执行。3.3.3直到型循环——do-while循环3.3循环结构【案例3-8】设计一个程序,用do-while循环语句实现1~100自然数的和。程序分析
参照案例3-7的思路,只需要修改程序的循环体就可以实现该程序。单击打开源程序程序运行结果3.3.3直到型循环——do-while循环3.3循环结构1.for语句基本形式for是C语言的关键字,其后的圆括号中通常含有三个表达式,各表达式之间用“;”隔开。这三个表达式可以是任意形式的表达式,通常主要用于for循环的控制。紧跟在for之后的循环体语句,在语法上要求是一条语句;若在循环体内需要多条语句,应该用大括号括起来组成复合语句。for(表达式1;表达式2;表达式3)循环体语句3.3.4格式化的当型循环——for循环3.3循环结构根据for语句的执行特点,可以表示成如下形式:2.for语句的执行过程(1)执行“循环变量赋初值”为循环体变量赋初值(注意,该语句在整个循环中只在开始时执行一次)。(2)判断“循环继续条件”是否成立:若其值为非零,转步骤(3);若其值为零,转步骤(5)。(3)执行一次for循环体语句。(4)执行“循环变量增值”,转向步骤(2)。(5)结束循环,执行for循环之后的语句。for(循环变量赋初值;循环继续条件;循环变量增值)循环体语句3.3.4格式化的当型循环——for循环3.3循环结构3.for语句的使用说明(1)for语句中的表达式可以部分或全部省略,但两个“;”不可省略,例如:for(;;)printf("*");三个表达式均省略,但因缺少条件判断,循环将会无限制地执行,而形成无限循环(通常称为死循环)。(2)for后括号中的表达式可以是任意有效的C语言表达式。例如:for(sum=0,i=1;i<=100;sum=sum+i,i++){…}其中表达式1和表达式3都是一个逗号表达式,在逻辑上被认为是一条语句。3.3.4格式化的当型循环——for循环3.3循环结构【案例3-9】设计一个程序,用for循环语句实现1~100中所有奇数的和。程序分析1~100中所有奇数即1、3、5……设自变量为i,则i的初值为1,循环中下次的i值为i+2即可;单击打开源程序程序运行结果3.3.4格式化的当型循环——for循环3.3循环结构1.循环嵌套的形式若循环语句中的循环体内又完整地包含另一个或多个循环语句,称为循环嵌套。前面介绍的三种循环都可以相互嵌套。循环的嵌套可以多层,但每一层循环在逻辑上必须是完整的。例如,二层循环嵌套(又称二重循环)结构如下:3.3.5循环的嵌套3.3循环结构3.3.5循环的嵌套3.3循环结构2.循环嵌套的执行过程很多初接触C语言的读者会弄不清循环嵌套的执行过程。实际上,C语言的循环嵌套有一个很简单的执行原则:外层循环执行一次(等于某个值)时,内层循环从初值到终值循环执行一遍。例如:for(i=1;i<=3;i++)for(j=1;j<=5;j++)printf(“%d+%d=%d”,i,j,i+j);该循环嵌套外层变量i从1到3执行3次,内层变量j从1到5执行5次,则输出语句的执行次数为3*5=15次。三重循环也使用类似方法计算循环体的执行次数。3.3.5循环的嵌套3.3循环结构但如果内层循环变量的终值与外层循环变量有关,则必须计算每次外层变量等于某值时,内层循环执行多少次,然后将多次循环的具体执行次数累加即可。例如:for(i=1;i<=3;i++)for(j=1;j<=i;j++)printf(“%d+%d=%d”,i,j,i+j);该循环嵌套外层变量i从1到3执行3次,内层变量j从1到i执行i次。则当i=1时,内层j循环1次;当i=2时,内层j循环2次(从1到2);当i=3时,内层j循环3次(从1到3)。将三次的循环次数累加1+2+3=6。所以该循环嵌套循环体语句执行次数为6次。3.3.5循环的嵌套3.3循环结构【案例3-10】设计一个程序,在屏幕上输出下三角九九乘法表。程序分析:
乘法表第一行输出的是1*1=1,第二行输出的是2*1=22*2=4,第三行输出的是3*1=33*2=63*3=9以此类推,可以发现每行上面各个式子的第一个数值不变,第二个数值从1变化到与第一个数相同的值。所以可以设置两个整型变量i和j,i为外层循环体变量,j为内层循环体变量,让i从1循环到9,而j从1循环到i(这点特别重要),这样在循环内输出i、j和i*j的值即可。单击打开源程序程序运行结果3.3.5循环的嵌套3.4break、continue和goto语句在循环中,除了当条件表达式的值为假时能够跳出循环,还可以使用break语句和continue语句来提前结束循环。break语句基本形式如下:break语句只能在循环体内和switch语句体使用。当break出现在switch语句体内时,其作用只是跳出该switch语句。当break出现在循环体中,一般是与if条件合在一起构成跳出本层循环的另一个条件。例如:for(i=0;i<100;i++)if(i>25)break;break;3.4.1break语句3.4break、continue和goto语句【案例3-11】设计一个程序,判断一个正整数是否为素数。程序分析:素数就是除了1和它本身,不能被任何数整除的数。因此,如果一个数x是素数,就不能被2~x-1之间的任何一个数整除。为减少循环次数,进一步思考,如果x在2~
之间有一个数a可以被其整除,则在
~x-1之间也会有一个数b存在,满足x=a×b成立,例如x=16,则有2×8=16满足条件,其中2<4=,8>4=。3.4.1break语句3.4break、continue和goto语句所以在查找时,只要x在2~
之间没有任意一个数能被整除,则x在
~x-1区间内也不会有任意一个数能被整除(即循环终值为
而不是x-1)。所以程序中使用x%i的余数是否为0来判断x是否能被i整除。退出循环后,如果i>,表示x不能被2~
中任何一个数整除,则x是素数,否则x不是素数。图3-12【案例3-11】的程序流程图3.4.1break语句3.4break、continue和goto语句单击打开源程序程序运行两次,分别输入13和25两个数,程序运行结果如下:3.4.1break、continue和goto语句3.4break、continue和goto语句continue语句基本形式如下:continue语句一般用于循环体中,其作用是提前结束本次循环,即跳过本次循环体中余下尚未执行的语句,接着再一次进行循环的条件判定。注意:执行continue语句并没有使整个循环终止,而是结束本次循环,继续判断循环条件。continue;3.4.2continue语句3.4break、continue和goto语句1.goto语句形式goto语句又称为无条件跳转语句,功能是将程序转到goto后面的标号所在处继续执行程序。一般来说,如果要使用goto语句构成循环,一般是用if语句和goto语句配合使用的。当if语句条件为真时无条件转到标号所在程序行执行,而且可以也构成一个循环结构。goto语句标号;3.4.3goto语句3.4break、continue和goto语句例如,求1到100自然数的和,程序段如下:intsum=0,i=1;a1:sum=sum+i;/*本语句前面的a1就是标号*/i++;if(i<=100)gotoa1; /*流程转向语句,一般与if语句一起构成循环*/请读者将该程序完整写出来,并上机验证。3.4.3goto语句3.4break、continue和goto语句2.说明(1)语句标号仅仅对goto语句有效,对其他语句不影响。(2)同一个程序中,不允许有同名标号。(3)goto语句通常与条件语句配合使用,可用来实现条件转移、构成循环、跳出循环体等功能。3.4.3goto语句3.5程序案例【案例3-12】从键盘上输入一个数学四则运算表达式(a+b、a-b、a*b或a/b),要求计算出该表达式的值。程序分析:分析题意,设两个单精度浮点float型变量a和b,再设一个存放运算符的字符型变量ch,然后根据ch的值来进行相应的运算,将结果输出即可。单击打开源程序程序运行结果输入两个运算式:4.26*3.78和4.26&3.78,结果前一个为正常值,后一个表达式提示错误。3.5.1典型案例——求四项表达式的值3.5程序案例【案例3-13】从键盘输入一个正整数,求1+1+2+1+2+3+1+2+3+4+…+1+2+…+n数列的和。程序分析分析这个数列,能发现第一个数1自己一组,第二组数为1和2,第三组数为1,2,3,第四组数为1,2,3,4,……以此类推,最后一组数为1,2,3,……,n。求的是所有数的和。这样可以设置两重循环。假设外层循环变量设为i,值从1到n。内层循环变量设为j,值从1到i。3.5.2典型案例——求1+(1+2)+(1+2+3)+(1+2+3+4)+…+(1+2+…+n)数列的和3.5程序案例这样第一次内层循环的j值为1,第二次j值为1,2,第三次j值为1,2,3……在内层循环中求从1到i的累加和。在外层循环将内层所求的和再加到最终的和上。循环完成后,即求得该数列的和。单击打开源程序运行时输入的n值为15时,程序运行结果如下:3.5.2典型案例——求1+(1+2)+(1+2+3)+(1+2+3+4)+…+(1+2+…+n)数列的和3.5程序案例【案例3-14】编写一个程序,首先输入正确的密码进入游戏,密码输入三次错误退出程序。密码通过后,每次输入一个数字,系统会给出对应的提示,如“
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 花生露地栽培管理规范
- 污染物排放台账管理办法
- 农膜回收利用处置实施方案
- 高尿酸血症饮食管理指导方案
- 高血压人群膳食营养干预手册
- 专项应急预案编制管理规范
- 体成分分析仪数据分析标准
- 个人职业病防护用品管理细则
- 居家老年人防跌倒看护应急预案
- 针对久坐人群的肩颈松解手法
- 信息技术(基础模块)(WPSOffice)中职上下两册全套教学课件
- 奥氏体不锈钢焊管固溶热处理工艺规范(征求意见稿)
- HGT 6188-2023 聚丙烯共聚反应器 (正式版)
- 锂电池充放电循环测试课件
- DL∕T 2009-2019 超高压可控并联电抗器继电保护配置及整定技术规范
- 2024年贵州匀影文旅投资集团有限公司招聘笔试参考题库含答案解析
- 基于STM32智能台灯的设计与实现
- 九年级道德与法治的知识竞赛题
- 基于PLC控制的机械手设计
- DB4206-T 60-2023 实验室气瓶安全管理规范
- 输配电线路单线图绘制要求
评论
0/150
提交评论