1、 第四章 语句 计算机应用基础计算机应用基础第一节第一节 概述概述一、三种基本结构的流程图表示一、三种基本结构的流程图表示n结构可用流程图描述。结构可用流程图描述。n常用的流程图有两种:一种是传统流程图,特点是直常用的流程图有两种:一种是传统流程图,特点是直观易懂,如图(观易懂,如图(a)。)。AB (a)n另一种是另一种是N-S图,以创始人图,以创始人Nassi和和Schneiderman名名字首字母命名,是结构化程序设计流程图,如图(字首字母命名,是结构化程序设计流程图,如图(b)所示。所示。AB (b)(一)顺序结构(一)顺序结构n先执行先执行A操作,再执行操作,再执行B操作,操作,A、
2、B是顺序关系,如是顺序关系,如图图4-1所示所示AB (a)AB (b)(二)分支结构(二)分支结构n如果条件如果条件P成立(为真)则执行成立(为真)则执行A,否则(为假)则,否则(为假)则执行执行B,A、B只能执行其一,两条路径会合在一起然只能执行其一,两条路径会合在一起然后出口,如图所示后出口,如图所示假假真真PAB(a)ABP真真假假(b)(三)循环结构(三)循环结构 n循环结构有两种:一种是当型循环,当条件循环结构有两种:一种是当型循环,当条件P为真时,为真时,反复执行循环体,条件反复执行循环体,条件P为假结束循环,如图为假结束循环,如图4-3所所示。另一种是直到型循环,先执行示。另一
3、种是直到型循环,先执行A操作,再判断操作,再判断P,P为真继续执行为真继续执行A,直到,直到P为假结束循环,如图所示。为假结束循环,如图所示。PA假假真真(a)A(b)真真 假假PA(a)A 直到直到P为假为假(b)二、二、C语句分类语句分类nC语言中的语句分类如下:语言中的语句分类如下:表达式语句表达式语句 空语句空语句 复合语句复合语句C语句语句 分支语句分支语句 流程控制语句流程控制语句 循环语句循环语句 转向语句转向语句流程控制语句流程控制语句n流程控制语句用于控制程序的流程,以实现程序的各流程控制语句用于控制程序的流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,如种结构方
4、式,它们由特定的语句定义符组成,如if、for。语言有九种流程控制语句,可分成以下三类:。语言有九种流程控制语句,可分成以下三类:n 分支语句分支语句if语句(单分支语句(单分支if语句,双分支语句,双分支if语句,多分支语句,多分支if语语句)和句)和switch语句。语句。n 循环语句循环语句for语句,语句,while语句,语句,do while语句。语句。n 转向语句转向语句break语句,语句,continue语句,语句,goto语句,语句,return语句语句 第二节第二节 表达式语句和空语句表达式语句和空语句 n一、表达式语句一、表达式语句nC语言是一种表达式语言,所有的操作运算
5、都通过表语言是一种表达式语言,所有的操作运算都通过表达式来实现。达式来实现。n由表达式组成的语句称为表达式语句,它由一个表达由表达式组成的语句称为表达式语句,它由一个表达式后加上一个分号式后加上一个分号“;”组成。组成。n 表达式语句的一般格式:表达式语句的一般格式:表达式;表达式;功能:执行表达式语句就是计算表达式的值。功能:执行表达式语句就是计算表达式的值。二、赋值语句二、赋值语句n赋值语句是由赋值表达式后加上分号构成的表达式语赋值语句是由赋值表达式后加上分号构成的表达式语句。例如:句。例如:c=a+b是赋值表达式,而是赋值表达式,而c=a+b;是赋值语句。;是赋值语句。n赋值语句的一般格
6、式:赋值语句的一般格式:变量变量=表达式;表达式;三、空语句三、空语句n只有分号只有分号“;”组成的语句称为空语句。空语句是什组成的语句称为空语句。空语句是什么也不执行的语句,在程序中空语句可用来作空循环么也不执行的语句,在程序中空语句可用来作空循环体。体。四、复合语句四、复合语句n把多个语句用花括号把多个语句用花括号“”括起来组成的一个语句称括起来组成的一个语句称复合语句。复合语句。n例如:例如:x=y+z;a=b+c;printf(%d%d,x,a);第三节第三节 分支语句分支语句n分支语句的功能是在指定的条件取不同的值时,从一分支语句的功能是在指定的条件取不同的值时,从一个或多个语句中有
7、条件地选择零条或多条语句执行。个或多个语句中有条件地选择零条或多条语句执行。n在在C C语言中表示条件,一般用关系表达式或逻辑表达语言中表示条件,一般用关系表达式或逻辑表达式,除常见的关系表达式或逻辑表达式外,也允许是式,除常见的关系表达式或逻辑表达式外,也允许是其它类型的数据,如整型、实型和字符型等。其它类型的数据,如整型、实型和字符型等。n实现分支结构用实现分支结构用ifif语句或语句或switchswitch语句。语句。一、一、if语句的三种形式语句的三种形式n(一)单分支(一)单分支if语句语句n语句的一般格式:语句的一般格式:if(表达式表达式)语句语句1n功能:当功能:当“表达式表
8、达式”的值不等于的值不等于0(即判定为(即判定为“逻辑逻辑真真”)时,则执行语句)时,则执行语句1,否则直接转向下一条语句,否则直接转向下一条语句执行。执行。例如:例如:if(xy)printf(%d,x);表达式表达式语句语句1非非0(真)(真)0(假)(假)例例4.1求给定整数的绝对值求给定整数的绝对值n求求x绝对值的算法很简单,若绝对值的算法很简单,若x0,则则x即为所求;若即为所求;若x0,则则-x为为x的绝对值。的绝对值。n程序中首先定义整型变量程序中首先定义整型变量x和和y,其中,其中y用于存放用于存放x的的绝对值。绝对值。n输入输入x值之后,执行值之后,执行y=x;语句,;语句,
9、n即先假定即先假定x0,然后再判断,然后再判断x是否是否0,若,若x0,则,则x的绝对值为的绝对值为-x,将将-x赋给赋给y(y中原来的中原来的x值被冲掉了值被冲掉了)后后输出结果。输出结果。n若若x0,则跳过,则跳过y=-x;语句,直接输出结果,此时语句,直接输出结果,此时y中的值仍然是原中的值仍然是原x的值。的值。n 开始 输入xy=x x0 y=-x是 否 输出x,y 结束程序代码如下:程序代码如下:#include stdio.hmain()int x,y;scanf(%d,&x);y=x;if(xb)/*如果如果ab利用中间变量利用中间变量t交换之交换之*/t=a;a=b;b=t;/
10、*不可少,不能只写不可少,不能只写a=b;b=a;*/printf(%5.2f,%5.2f,a,b);(二)双分支(二)双分支if语句语句n语句的一般格式:语句的一般格式:if(表达式表达式)语句语句1 else 语句语句2n功能:如果表达式的值为非功能:如果表达式的值为非0(即真即真),则执行语句则执行语句1;如果表达式的值为如果表达式的值为0(即假即假),则执行语句则执行语句2;例如:;例如:if(xy)printf(%d,x);else printf(%d,y);表达式表达式语句语句1语句语句2非非0(真)(真)0(假)(假)例例4.3 求两个数中的最大值求两个数中的最大值#includ
11、e stdio#include stdio.h.hmain()main()float x,y;float x,y;scanf scanf(%f,%f,&x,&y);(%f,%f,&x,&y);if(xy)printf if(xy)printf(max=%fn,x);(max=%fn,x);else printf else printf(max=%fn,y);(max=%fn,y);例例4.4 输入整数输入整数a,判断其奇偶性,判断其奇偶性n判奇偶最简单的方法是除判奇偶最简单的方法是除2取余看结果。如果余数是取余看结果。如果余数是0,a是偶数;如果余数是是偶数;如果余数是1,a是奇数。是奇数。m
12、ain()main()int int a;a;scanf scanf(%d%d,&a);,&a);if(a%2=0)printf if(a%2=0)printf(%d is even.n%d is even.n,a);,a);else printf else printf(%d is odd.n%d is odd.n,a);,a);(三)多分支(三)多分支if语句语句n语句的一般格式:语句的一般格式:if(if(表达式表达式1)1)语句语句1 1else if(else if(表达式表达式2)2)语句语句2 2else if(else if(表达式表达式3)3)语句语句3 3 .else if
13、(else if(表达式表达式n)n)语句语句n nelse else 语句语句n+1n+1n功能:功能:如果表达式如果表达式1的值为非的值为非0(即真即真),则执行语句则执行语句1;如果表达式如果表达式2的值为非的值为非0(即真即真),则执行语句则执行语句2;如;如果表达式果表达式n的值为非的值为非0(即真即真),则执行语句则执行语句n,否则执行否则执行语句语句n+1。例如:例如:ifif(n500)c=0.15;(n500)c=0.15;elseelse if(n300)c=0.10;if(n300)c=0.10;elseelse if(n100)c=0.07;if(n100)c=0.07
14、;elseelse if(n50)c=0.05;if(n50)c=0.05;elseelse c=0;c=0;流程图流程图表达式表达式1表达式表达式2表达式表达式n语句语句n+1假假假假假假语句语句1语句语句2语句语句n真真真真真真n例例4.5 输入某学生的成绩,输出该学生的成绩和等级。输入某学生的成绩,输出该学生的成绩和等级。n设设90至至100分属于分属于A级,级,80至至89分属于分属于B级,级,70至至79分属于分属于C级,级,60至至69分属于分属于D级,级,0至至59分属分属于于E级。级。n首先提示用户输入成绩,当输入成绩不在合理范围首先提示用户输入成绩,当输入成绩不在合理范围(0
15、 x100)时,提示输入错误,程序结束。否)时,提示输入错误,程序结束。否则满足则满足x90就是满足就是满足100 x90,属于,属于A级;若级;若不满足不满足x90,则,则x x80,属于,属于B级;级;。程序代码如下:程序代码如下:main()main()int int x;x;printf printf(please input x(0=x=100)n);(please input x(0=x100|x100|x=90)else if(x=90)printf printf(x=%d-An,x);(x=%d-An,x);else if(x=80)else if(x=80)printf pr
16、intf(x=%d-Bn,x);(x=%d-Bn,x);else if(x=70)else if(x=70)printf printf(x=%d-Cn,x);(x=%d-Cn,x);else if(x=60)else if(x=60)printf(x=%d-Dn,x);printf(x=%d-Dn,x);else else printf(x=%d-En,x);printf(x=%d-En,x);二、二、if语句的嵌套语句的嵌套n嵌套指三种嵌套指三种if语句中的语句部分又包含有一个或多个语句中的语句部分又包含有一个或多个if语句。语句。n例如:例如:if-else内嵌套内嵌套 if(表达式表达式
17、1)if(表达式表达式2)语句语句1 else 语句语句2 else if(表达式表达式3)语句语句3 else 语句语句4n 嵌套应分层缩进书写,嵌套应分层缩进书写,if与与else内外分层配对出现,清晰度内外分层配对出现,清晰度好,不易出错。好,不易出错。n else总是与它上面最近的总是与它上面最近的if配对。为明确匹配关系,避免匹配对。为明确匹配关系,避免匹配错误,强烈建议将内嵌的配错误,强烈建议将内嵌的if语句一律用花括号括起来语句一律用花括号括起来n if语句允许嵌套,但嵌套的层数不宜太多。在实际编程时,语句允许嵌套,但嵌套的层数不宜太多。在实际编程时,应适当控制嵌套层数应适当控制
18、嵌套层数(23层层)。例例4.6 有一函数:有一函数:-1 (x0)编一程序,输入一个编一程序,输入一个x值,输出值,输出y值。值。main()int x,y;scanf(%d,&x);if(x=0)if(x0)y=1;else y=0;else y=-1;printf(x=%d,y=%dn,x,y);三、三、switchswitch语句语句nswitchswitch语句直接处理多分支选择。语句直接处理多分支选择。n(一)(一)switchswitch语句的一般格式:语句的一般格式:switch(switch(表达式表达式)case case 常量表达式常量表达式1 1:语句:语句1 1 ca
19、se case 常量表达式常量表达式2 2:语句:语句2 2 .case case 常量表达式:语句常量表达式:语句n n default default:语句:语句 n+1n+1 流程图流程图表达式=常量表达式1表达式=常量表达式2表达式=常量表达式n语句1语句2语句n语句n+1是是是否否否否n例如:要求按照考试成绩的等级打印出百分制分数段,例如:要求按照考试成绩的等级打印出百分制分数段,可以用可以用switchswitch语句实现。语句实现。switchswitch(grade)(grade)case case A A:printf:printf(9090100n100n););case
20、case B B:printf:printf(808089n89n););case case C C:printf:printf(707079n79n););case case D D:printf:printf(606069n69n););case case E E:printf:printf(60n60n););default:printfdefault:printf(errornerrorn););(二)带二)带breakbreak语句的语句的switchswitch语句语句n一般来说,在程序设计时经常使用带一般来说,在程序设计时经常使用带breakbreak语句的语句的switchsw
21、itch语句。语句。switch(switch(表达式表达式)case case 常量表达式常量表达式1 1:语句:语句1 1;breakbreak;case case 常量表达式常量表达式2 2:语句:语句2 2;breakbreak;.case case 常量表达式:语句常量表达式:语句n n;breakbreak;defaultdefault:语句:语句 n+1n+1 流程图流程图表达式=常量表达式1表达式=常量表达式2表达式=常量表达式n语句1语句2语句n语句n+1是是是否否否否n例例4.7 从键盘上输入一个百分制成绩从键盘上输入一个百分制成绩score,按下列,按下列原则输出其等级:
22、原则输出其等级:score90,等级为,等级为A;80score90,等级为,等级为B;70score80,等级,等级为为C;60score70,等级为,等级为D;scorenum2)max=num1;else max=num2;if(num3max)max=num3;printf(The three numbers are:%d,%d,%dn,num1,num2,num3);printf(max=%dn,max);n例例4.12 4.12 已知某公司员工的保底薪水为已知某公司员工的保底薪水为500500,某月所接,某月所接工程的利润工程的利润profitprofit(整数)与利润提成的关系如
23、下(整数)与利润提成的关系如下(计量单位:元):(计量单位:元):profit1000profit1000没有提成;没有提成;10001000profit2000profit2000提成提成10%10%;20002000profit5000profit5000提成提成15%15%;50005000profit10000profit10000提成提成20%20%;1000010000profitprofit提成提成25%25%。算法分析:算法分析:n为使用为使用switch语句,必须将利润语句,必须将利润profit与提成的关系转换成某与提成的关系转换成某些整数与提成的关系。分析本题可知,提成的
24、变化点都是些整数与提成的关系。分析本题可知,提成的变化点都是1000的整数倍(的整数倍(1000、2000、5000、),如果将利润),如果将利润profit整除整除1000,则当:,则当:profit1000对应对应0、11000profit2000对应对应1、22000profit5000对应对应2、3、4、55000profit10000对应对应5、6、7、8、9、1010000profit对应对应10、11、12、n为解决相邻两个区间的重叠问题,最简单的方法就是:利润为解决相邻两个区间的重叠问题,最简单的方法就是:利润profit先减先减1,然后再整除,然后再整除1000即可:即可:p
25、rofit1000对应对应01000profit2000对应对应1 2000profit5000对应对应2、3、4 5000profit10000对应对应5、6、7、8、9 10000profit对应对应10、11、12、main()long profit;int grade;float salary=500;printf(Input profit:);scanf(%ld,&profit);grade=(profit-1)/1000;/*将利润将利润-1再整除再整除1000转化成转化成switch语句中的语句中的case标号标号*/switch(grade)case 0:break;/*pro
26、fit1000*/case 1:salary+=profit*0.1;break;/*1000profit2000*/case 2:case 3:case 4:salary+=profit*0.15;break;/*2000profit5000*/case 5:case 6:case 7:case 8:case 9:salary+=profit*0.2;break;/*5000profit10000*/default:salary+=profit*0.25;/*10000profit*/printf(salary=%.2fn,salary);第四节第四节 循环语句循环语句 n根据已有的知识,求
27、根据已有的知识,求1100的累加和可以用的累加和可以用“1+2+100”来求解,但显然很繁琐来求解,但显然很繁琐,并且当累并且当累加的项较多时这种方法也不实用。加的项较多时这种方法也不实用。n首先设置一个累加器首先设置一个累加器sum,其初值为,其初值为0,利用,利用sum+=i来计算(来计算(i依次取依次取1、2、100),这样),这样只要解决以下只要解决以下3个问题即可:个问题即可:将将i的初值置为的初值置为1;每执行一次每执行一次“sum+=i”后,后,i增增1;当当i增到增到101时,停止计算。此时,时,停止计算。此时,sum的值就的值就是是1100的累加和。的累加和。流程图流程图n循
28、环程序的设置循环程序的设置初值:初值:i=1循环条件:循环条件:i=100循环增量:循环增量:i=i+1sum=0i=1i100 真真sum+=isum+=ii i=i+1=i+1假假n在语言中,可用以下语句实现循环:在语言中,可用以下语句实现循环:n 用用for语句。语句。n 用用while语句。语句。n 用用do-while语句。语句。n 用用goto语句和语句和if语句构成循环。语句构成循环。一、一、for语句语句nfor语句的一般格式:语句的一般格式:for(表达式(表达式1;表达式;表达式2;表达式;表达式3)循环体语句循环体语句nfor语句最容易理解的形式:语句最容易理解的形式:f
29、or(循环变量赋初值;循环条件;循环变量增值)(循环变量赋初值;循环条件;循环变量增值)循环体语句循环体语句例如:例如:for(i=1;i=100;i+)sum+=i;n其中:其中:n 表达式表达式1通常是为循环变量赋初值的表达式;表达式通常是为循环变量赋初值的表达式;表达式2是控是控制循环的表达式;表达式制循环的表达式;表达式3通常是改变循环变量值的表达式。通常是改变循环变量值的表达式。n 循环体语句可以是单条语句和复合语句。循环体语句可以是单条语句和复合语句。一、一、for语句语句nfor语句的一般格式:语句的一般格式:for(表达式(表达式1;表达式;表达式2;表达式;表达式3)循环体语
30、句循环体语句n功能:首先计算表达式功能:首先计算表达式1的值,然后检测表达式的值,然后检测表达式2的值,的值,若表达式若表达式2的值为的值为“真真”,则执行循环体语句,执行,则执行循环体语句,执行完毕后,再计算表达式完毕后,再计算表达式3,然后再检测表达式,然后再检测表达式2的值是的值是否为否为“真真”,若为,若为“真真”,继续执行循环体语,继续执行循环体语句,句,若为,若为“假假”,则终止循环,执行,则终止循环,执行for语句语句的后续语句。的后续语句。for语句执行流程图语句执行流程图 计算表达式1表达式2循环体语句计算表达式3真假例例4.13 求求1100的累加和。的累加和。main()
31、int i,sum=0;/*将累加器将累加器sum初始化为初始化为0*/for(i=1;i=100;i+)sum+=i;/*实现累加实现累加*/printf(sum=%dn,sum);例例4.14 求求n的阶乘的阶乘n!(n!=1*2*n)。)。main()int i,n;int fact=1;/*将累乘器将累乘器fact初始化为初始化为1*/printf(Input n:);scanf(%d,&n);for(i=1;i=n;i+)fact*=i;/*实现累乘实现累乘*/printf(%d!=%dn,n,fact);说明说明n“循环变量赋初值循环变量赋初值”、“循环条件循环条件”和和“循环变量
32、增值循环变量增值”部部分均可缺省,甚至全部缺省,但其间的分号不能省略。分均可缺省,甚至全部缺省,但其间的分号不能省略。n 当循环体语句仅由一条语句构成时,可以不使用复合语句当循环体语句仅由一条语句构成时,可以不使用复合语句形式。形式。n“循环变量赋初值循环变量赋初值”表达式,既可以是给循环变量赋初值的表达式,既可以是给循环变量赋初值的赋值表达式,也可以是与此无关的其它表达式(如逗号表达赋值表达式,也可以是与此无关的其它表达式(如逗号表达式)。式)。例如:例如:for(sum=0;i=100;i+)sum+=i;for(sum=0,i=1;i=100;i+)sum+=i;n“循环条件循环条件”部
33、分是一个逻辑量,除一般的关系或逻辑表达部分是一个逻辑量,除一般的关系或逻辑表达式外,也允许是数值(或字符)表达式。式外,也允许是数值(或字符)表达式。一、一、while语句语句nwhile语句用来实现语句用来实现“当型当型”循环结构。循环结构。nwhile语句一般格式:语句一般格式:while(表达式表达式)循环体语句循环体语句n例如:例如:while(i=100)sum+=i;i+;n功能:首先计算表达式的值,若为功能:首先计算表达式的值,若为“真真”,则执行循,则执行循环体语句,执行完毕后,再计算表达式的值,若为环体语句,执行完毕后,再计算表达式的值,若为“真真”,则重复执行循环体语句,直
34、到表达式的值为,则重复执行循环体语句,直到表达式的值为“假假”为止,结束为止,结束while语句的执行,执行语句的执行,执行while语语句的后续语句。句的后续语句。n 表达式是控制循环的条件,它可以是任何类型的表表达式是控制循环的条件,它可以是任何类型的表达式。达式。n 循环体语句语法上定义为一条语句,若循环体含有循环体语句语法上定义为一条语句,若循环体含有多条语句,则必须用花括号把它们括起来,成为复合多条语句,则必须用花括号把它们括起来,成为复合语句。语句。表达式循环体语句真假例例4.15 用用while语句求语句求1100的累加和。的累加和。main()int i=1,sum=0;/*初
35、始化循环控制变量初始化循环控制变量i和累加器和累加器sum*/while(i100”,因此在循环体语句中应该有使,因此在循环体语句中应该有使i 增值以最终导致增值以最终导致i100的语句,今用的语句,今用“i+;”语句来达到此目的。如果无此语语句来达到此目的。如果无此语句,则句,则i的值始终不改变,循环永不结束。的值始终不改变,循环永不结束。n 循环之前要为有关变量赋初值,如本例中的循环之前要为有关变量赋初值,如本例中的i=1,sum=0。n 循环体语句如果包含一个以上的语句,应该用循环体语句如果包含一个以上的语句,应该用括起来,括起来,以复合语句形式出现。如果不加以复合语句形式出现。如果不加
36、,则,则while语句的范围只到语句的范围只到while后面第一个分号后面第一个分号“;”处。例如本例中处。例如本例中while语句如无语句如无,则,则while语句范围只到语句范围只到“sum+=i;”处。处。例例4.16 计算计算s=1+1/2+1/3+1/100。#include stdio.hmain()int i;float sum;sum=0;i=1;while(i=100)sum+=1.0/i;i+;printf(sum=%fn,sum);三、三、do-while语句语句ndo-while语句用来实现语句用来实现“直到型直到型”循环结构。循环结构。ndo-while语句一般格式:
37、语句一般格式:do 循环体语句循环体语句 while(表达式表达式);/*本行的分号不能缺省本行的分号不能缺省*/n例如:例如:do sum+=i;i+;while(i=100);n功能:首先执行循环体语句,然后检测循环控制表达式的值,功能:首先执行循环体语句,然后检测循环控制表达式的值,若为若为“真真”,则重复执行循环体语句,否则退出循环,执行,则重复执行循环体语句,否则退出循环,执行do-while的后续语句。的后续语句。n其中:其中:n do-while语句的表达式是任意表达式,是控制循语句的表达式是任意表达式,是控制循环的条件。环的条件。n 循环体语句可以是单条语句,也可以是多条语句。
38、循环体语句可以是单条语句,也可以是多条语句。循环体语句表达式假真例例4.17 用用do-while语句求解语句求解1100的累加和的累加和main()int i=1,sum=0;/*定义并初始化循环控制变量,以及累加器定义并初始化循环控制变量,以及累加器*/do sum+=i;/*累加累加*/i+;while(i=100);/*循环继续条件:循环继续条件:i=100*/printf(sum=%dn,sum);例例4.18 while和和do-while循环的比较循环的比较 main()int i,sum=0;scanf(“%d”,&i);while(i=10)sum+=i;i+;printf(
39、sum=%dn,sum);main()int i,sum=0;scanf(“%d”,&i);do sum+=i;i+;while(i=10);printf(sum=%dn,sum);四、循环语句嵌套四、循环语句嵌套n循环语句的循环体可以是任何合法的循环语句的循环体可以是任何合法的C语句。若循环语句。若循环语句的循环体语句内又包含另一个完整的循环语句,语句的循环体语句内又包含另一个完整的循环语句,称为循环语句的嵌套。内嵌的循环中还可以嵌套循环称为循环语句的嵌套。内嵌的循环中还可以嵌套循环就形成多重循环。三种循环(就形成多重循环。三种循环(for循环、循环、while循环和循环和do-while循
40、环)可以互相嵌套。循环)可以互相嵌套。n例例4.19 打印九九表,呈下三角形,如图所示。打印九九表,呈下三角形,如图所示。1*1=11*2=2 2*2=41*3=3 2*3=6 3*3=91*9=9 2*9=18 3*9=279*9=81算法分析算法分析用二重循环编程。用二重循环编程。n 外循环,控制打印外循环,控制打印9行。行。n 内循环,控制打印算式,每行算式的个数正好等于内循环,控制打印算式,每行算式的个数正好等于行数,第一行行数,第一行1个,第二行个,第二行2个,第三行个,第三行3个,第个,第i行行i个,个,。n 每行打印完后输出回车换行。每行打印完后输出回车换行。程序代码如下程序代码
41、如下main()int i,j;for(i=1;i=9;i+)for(j=1;j=i;j+)printf(%d*%d=%d ,j,i,i*j);/*内循环内循环i次次*/printf(n);设计一个由*组成的三角形五、程序举例五、程序举例n例例4.20 求求10个数中的最大值。个数中的最大值。main()int i,x,max;scanf(%d,&max);for(i=2;i11;i+)scanf(%d,&x);if(maxx)max=x;printf(max=%dn,max);第五节第五节 转向语句转向语句n为了使程序控制更加灵活,语言提供了为了使程序控制更加灵活,语言提供了break语语句
42、、句、continue语句、语句、goto语句和语句和return语句。语句。n一、一、break语句语句n一般格式:一般格式:break;n功能:功能:break语句只能出现在语句只能出现在switch语句和三种循语句和三种循环语句的循环体语句中,终止它所在的环语句的循环体语句中,终止它所在的switch语句语句或循环语句的执行,然后转向执行下一条语句。或循环语句的执行,然后转向执行下一条语句。n例例4.24 输出输出10100之间的全部素数。所谓素数之间的全部素数。所谓素数n是指,除是指,除1和和n之外,不能被之外,不能被2(n-1)的任何整数)的任何整数整除。整除。n 程序代码程序代码m
43、ain()int i=11,j,counter=0;/*counter的作用是累计输出素数的个数的作用是累计输出素数的个数*/for(;i=100;i+2)/*外循环:为内循环提供一个整数外循环:为内循环提供一个整数i*/for(j=2;j=i)/*整数整数i是素数:输出,计数器加是素数:输出,计数器加1*/printf(%6d,i);counter+;二、二、continue语句语句n一般格式:一般格式:continue;n功能:功能:continue只能出现在三种循环语句的循环体只能出现在三种循环语句的循环体语句中。对于语句中。对于for循环,跳过循环体语句其余未执行循环,跳过循环体语句其
44、余未执行语句,转向循环变量增量表达式语句,转向循环变量增量表达式3的计算;对于的计算;对于while和和do-while循环,跳过循环体语句其余未执行循环,跳过循环体语句其余未执行语句,但转向循环条件的判定。语句,但转向循环条件的判定。n例例4.25 把把100200之间的不能被之间的不能被3整除的数输出。整除的数输出。main()int n;for(n=100;n=200;n+)if(n%3=0)continue;printf(%d ,n);三、三、goto语句语句n一般格式:一般格式:goto 语句标号;语句标号;n其中:其中:n语句标号用标识符表示,它的定名规则与变量名相同,语句标号用标
45、识符表示,它的定名规则与变量名相同,即由字母、数字和下划线组成,其第一个字符必须是即由字母、数字和下划线组成,其第一个字符必须是字母或下划线,不能用整数来做标号。字母或下划线,不能用整数来做标号。n例如:例如:goto label_1;是合法的,而是合法的,而goto 123;是不是不合法的。合法的。n功能:功能:goto语句无条件转向语句标号所标识的语句执语句无条件转向语句标号所标识的语句执行。行。句标号用标识符后跟冒号表示句标号用标识符后跟冒号表示.例例4.26 使用使用if和和goto语句构成循环,实现求解语句构成循环,实现求解1100累加和。累加和。main()int i,sum;sum=0;/*存放累加和的变量初值为存放累加和的变量初值为0*/i=1;/*累加数从累加数从1开始开始*/k:if(i=100)/*累加数不超过累加数不超过100*/sum=sum+i;/*进行累加进行累加*/i=i+1;/*产生下一个累加数产生下一个累加数*/goto k;/*使程序流程转到使程序流程转到if语句,以便继续累加下一个数语句,以便继续累加下一个数*/printf(sum=%dn,sum);