(中职)C语言程序设计模块五课件.pptx
(中中职职)C语语言程序言程序设计设计模模块块五五课课件件LOGOC语言程序的三种结构模块55.1算 法 简 述算法是指对整个问题解决过程的描述。这个描述可以是自然语言,也可以是流程图等,其中流程图是算法描述中使用最为普遍的一种。例如:的士计费规则:起步价5元,含2公里范围,210公里(含)以内每公里以1.5元计,10公里以外(超出10公里的部分)每公里以2元计。程序图如图5-1所示。图5-1的士计费规则程序图1有穷性:算法必须能在执行有限个步骤之后终止。2确切性:算法的每一步骤必须有确切的定义。3输入项:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件。4输出项:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的。5可行性:算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称为有效性)。一般来说,算法具备五个明显的特征:5.1算 法 简 述5.2顺序结构程序设计5.2.1顺序结构程序设计示例1.#include stdio.h2.int main()3.4.char a,b,c;/*定义a,b,c三个字符变量*/5.char ch10;/*定义一个名为ch的一维字符数组,数组长度10*/6.printf(Please input T,o,m:n);/*提示输入T,o,m这3个字符*/7.a=getchar();/*从键盘获取一个字符,赋给字符变量a*/8.b=getchar();/*从键盘获取一个字符,赋给字符变量b*/9.scanf(%c,&c);/*从键盘给字符变量c输入值*/10.putchar(a);/*输出字符变量a的值*/5.2顺序结构程序设计5.2.1顺序结构程序设计示例11.putchar(b);/*输出字符变量b的值*/12.printf(%c,c);/*输出字符变量c的值*/13.putchar(!);/*输出一个“!”号*/14.putchar(n);/*输出一个换行符,即换一行*/15.printf(Tom s ASCII is:%dn,a+b+c);/*输出3个字符变量所存放字符的ASCII码之和*/16.printf(Please input Lucy:n);/*提示输入“Lucy”*/17.scanf(%s,ch);/*输入Lucy这个字符串*/18.printf(%sn,ch);/*输出Lucy这个字符串*/19.printf(Lucy s ASCII is:%dn,L+u+c+y);/*输出“Lucy”每个字符的ASCII码之和*/20.字符变量只能用来存放单个字符,在内存中占1个字节的内存空间。5.2顺序结构程序设计5.2.2程序详解1.char a,b,c;字符变量5.2顺序结构程序设计5.2.2程序详解字符变量只能存放单个字符,那字符串怎么办呢?当然得用字符数组了。这里声明了一个名为ch的一维字符数组,长度为10,即字符个数(包括空格及结尾符0。C语言中空格也是字符)不能超过10个。这里要区分两个概念,一个是字符数组实际长度,另一个是字符数组内存长度。例如:char a10=good;字符数组a的实际长度为4(4个字符),内存长度为10。char b=good;字符数组b的实际长度为4,内存长度为5。上列表明,在给字符数组初始化赋字符串时,系统会自动在串后面加上结尾符0,但是不会计入数组的长度,即数组实际长度仍为4。如果没有定义数组长度而初始化了字符串,计算内存长度时要加上这个结尾符(占1 B),如“char b=good;”,则sizeof(b)的结果就是5。2.char ch10;一维字符数组5.2顺序结构程序设计5.2.2程序详解(1)输入字符串:scanf(%s,ch)。(2)输出字符串:printf(%s,ch)。要注意的是:在用scanf输入字符串时,因为scanf以空格、回车和Tab键作为分隔符,因此,若输入了空格,系统将其默认为结尾符,表示输入到此结束,这点要特别注意。而且,数组名代表了数组首元素首地址,不用加地址与&运算符。数组名代表了数组首元素首地址,只需数组名,便可输出整个串。关于数组,我们以后再进行详述,这里略微提及一下。字符数组因为存放的是字符串,因而可以用%s这个字符串格式声明进行输入和输出。举例说明:5.2顺序结构程序设计5.2.2程序详解a=getchar();C语言的getchar()函数。从键盘获取一个字符给字符变量a。getchar()函数是C语言中用于从键盘获取单个字符的函数,不能用于获取字符串。括号中不能有任何参数。给字符变量从键盘输入值,除了用getchar()这个函数外,还可用scanf()函数。例如:a=getchar();/*等同于“scanf(%c,&a);”,第9行就是如此*/3.getchar()函数5.2顺序结构程序设计5.2.2程序详解putchar(a);C语言的putchar()函数。输出变量a的值(字符)。putchar()函数是C语言中用于输出单个字符的函数。其括号中的参数可以是变量,也可以是字符常量,输出字符常量时,要加单引号。例如,第13行的“!”输出“putchar(!);”和第14行的换行符输出“putchar(n);”。除了用putchar()外,单个字符输出当然也可以用printf()函数,如第12行的“printf(%c,c);”。由此可见,若变量a中存放字符g,则输出g的方式:putchar(a);/*等同于“putchar(g);”,等同于“printf(%c,a);”*/4.putchar()函数5.2顺序结构程序设计5.2.2程序详解printf(Toms ASCII is:%dn,a+b+c);输出存放在a、b、c这3个变量里的字符的ASCII码值之和。要注意a、b、c是变量而不是常量字符,因而不能加单引号。第19行的“printf(Lucys ASCII is:%dn,L+u+c+y);”中,L、u、c、y是常量字符,因而需加单引号。5.字符变量与字符常量5.2顺序结构程序设计5.2.3顺序结构程序设计举例【例5-1】求直角三角形的斜边hypot()函数。输入两直角边的值,如果输入了负数,就取其绝对值,求第三边的长。#include#include int main()float x,y,z;printf(Input 2 sides:n);scanf(%f,%f,&x,&y);z=hypot(fabs(x),fabs(y);/*调用数学库函数hypot()求第三边*/printf(The NO.3 side is:%.2fn,z);printf(The NO.3 integer is:%fn,sqrt(abs(z);/*输出整数部分绝对值的开平方值*/5.2顺序结构程序设计5.2.3顺序结构程序设计举例输入输出效果:Input 2 sides:-1,2The NO.3 side is:2.24The NO.3 integer is:1.414214(1)hypot()函数是求直角三角形斜边的长度,包含于数学头文件math.h中。用法是:double hypot(double x,double y)。(2)函数fabs()是取浮点数的绝对值,这里是防止输入了负数,因为边长不能为负。用法是:fabs(double x)。(3)abs()是取整型数的绝对值。用法是:abs(int x)。(4)sqrt()是求算术平方根函数。sqrt(abs(z)意为:先取浮点数z的整数部分的绝对值,再对该绝对值开平方。5.3选择结构程序设计5.3.1程序示例if()简单的单分支选择结构使用方法:if(表达式)语句序列;如果if()括号里的表达式为真,就执行里的语句序列,否则不执行。如果只有一条语句,则可以省略,如本例中就是如此。5.3选择结构程序设计5.3.2程序示例 if()简单的双分支选择结构使用方法:if(表达式)语句序列1;else 语句序列2;如果if()括号里的表达式值为真,执行语句序列1,否则执行语句序列2。5.3选择结构程序设计5.3.2程序示例 if()简单的双分支选择结构【例5-3】输入一个年份,判断是否为闰年。闰年的断定方法是:能被4整除但不能被100整除或能被400整除的年份为闰年。#include int main()int year;scanf(%d,&year);if(year%4=0&year%100=0)|year%400=0)printf(%d 是闰年n,year);elseprintf(%d 不是闰年,year);5.3选择结构程序设计5.3.3程序示例 if()多分支选择结构使用方法:if(表达式1)语句序列1;else if(表达式2)语句序列2;else if(表达式3)语句序列3;else语句序列;哪个if表达式的值为真,就执行它的语句序列,如果都不为真,就执行最后一个else的语句序列。5.3选择结构程序设计5.3.3程序示例 if()多分支选择结构模块5.3.1的火车货运站计费程序我们用多分支结构编写如下:printf(Please input w:);scanf(%d,&w);if(s1000)money=M*s*w;else if(s2000)money=M*0.95*s*w;else if(s3000)money=M*0.92*s*w;else if(s5000)money=M*0.90*s*w;elsemoney=M*0.88*s*w;printf(nmoney=%.2f,money);模块5.3.1的火车货运站计费程序我们用多分支结构编写如下:#include#define M 5.0int main()int s,w;float money;printf(Please input s:);scanf(%d,&s);5.3选择结构程序设计5.3.4程序示例 if语句嵌套的多分支选择结构模块5.3.1的火车货运站计费程序我们用嵌套的多分支结构编写如下:elseif(s3000)money=M*0.92*s*w;elseif(s=1000这个条件,执行这一句*/printf(nmoney=%.2f,money);#include#define M 5.0int main()int s,w;float money;printf(Please input s:);scanf(%d,&s);printf(Please input w:);scanf(%d,&w);if(s=1000)/*在满足这个条件的前提下,执行下面的语句*/if(s2000)money=M*0.95*s*w;5.3选择结构程序设计5.3.4程序示例 if语句嵌套的多分支选择结构要注意一种情况,有多个if和else时,else总是和它最近的if进行配对。如下例,根据对输入的两个整型值进行比较判断,输出相应的结果:if(yy若为1,再判断此处xy为假,直接执行这个else,输出Jack*/#include int main()int x,y;scanf(%d%d,&x,&y);/*输入2个整型值*/if(xy)/*判断xy的逻辑值为1还是0,为1,执行下面的if语句,否则,执行和该if对应的最末尾else,输出Jack*/5.3选择结构程序设计5.3.5程序示例 switch()语句多分支选择结构结构如下:switch(表达式)case 常量1:语句序列1;/*注意常量值后面用的是冒号,不可与分号混淆*/case 常量2:语句序列2;case 常量n:语句序列n;default:语句序列;5.3选择结构程序设计5.3.5程序示例 switch()语句多分支选择结构switch()括号里的表达式将是一个确定的值。如果“”中哪个case后面的常量等于这个值,就从它后面的语句序列开始执行,直到遇到break语句或switch语句结束的“”为止。如果没有和它相等的值,就直接执行default后面的语句序列,退出switch。模块5.3.1的火车货运站计费程序我们用switch语句多分支结构编写如下:分析:条件中里程数都是1 000的倍数,根据题意有以下条件分段:s=1 000&s=2 000&s=3 000&s=5 000去除上述条件后,剩最后这个条件,可设为default5.3选择结构程序设计5.3.5程序示例 switch()语句多分支选择结构由此,我们便可确定switch()括号里的表达式为s/1 000,而case 后面常量则是04的数。case 0:money=M*s*w;break;/*注意:每个case的常量值不能相同*/case 1:money=M*0.95*s*w;break;case 2:money=M*0.92*s*w;break;case 3:/*如果执行相同的语句组,则对应的case语句可以共用一个语句组,如此处3、4*/case 4:money=M*0.90*s*w;break;default:money=M*0.88*s*w;break;/*没有匹配的常量值,执行此句*/printf(nmoney=%.2f,money);#include#define M 5.0int main()int s,w;float money;printf(Please input s:);scanf(%d,&s);printf(Please input w:);scanf(%d,&w);switch(s/1000)5.3选择结构程序设计5.3.5程序示例 switch()语句多分支选择结构说明:(1)switch()括号里表达式的值须与常量值类型一致。(2)常量值后用冒号,语句用分号。(3)如果执行相同的语句组,则对应的case语句可以共用一个语句组,如程序中的case 3和case 4。(4)如果没有break语句,就会一直往下执行,直到遇到break或switch语句结束。(5)每个case的常量值不能相同。(6)case和default的出现次序不影响程序的执行结果。5.4循环结构程序设计5.4.1while语句先判断后执行结构如下:while(条件表达式)循环体语句;如果()里的条件表达式值为真(1),则执行循环体语句,否则不执行。【例54】求n的阶乘(n!)。分析:n!=123(n-1)n,即乘数依次递增1,直到乘数递增到n。(1)这个乘数我们用一个整型变量(如i)来表示,从1开始(i初始化为1),每乘1次,i便递增1次,即i+。(2)相乘的结果(积)保存在一个长整型变量(如j)中。(3)循环的条件是i=n。printf(%ld,s);#include int main()int i=2,n;long s=0;scanf(%d,&n);while(i=n)s+=i;i+=2;/*每加1次便递增2*/printf(%ld,s);/*求1+2+3+n的和*/*求2+4+6+8+n的和(n为偶数)*/#include int main()int i=1,n;long s=0;/*求和为什么要初始化为0?*/scanf(%d,&n);while(i=2时,f(n)=f(n-1)+f(n-2);(3)定义a,b,c三个整型变量,初始化a1,b2,c为第3项开始,则c=a+b;以第4项为例:第2项(b)变为了第1项(a),即a=b;第3项(c)变为了第2项(b),即b=c;第4项变为c,c=a+b。整个过程就这么交替变化,形式如下:5.4循环结构程序设计5.4.1while语句先判断后执行#include int main()int a=1,b=2,c,n=3;/*n=3,意即从第3项开始*/while(n=20)c=a+b;a=b;b=c;n+;printf(NO.20=%d,c);输出结果:NO.20=109465.4循环结构程序设计5.4.1while语句先判断后执行【例5-7】有一分数序列21,32,53,85,138,2113求出这个数列的前20项之和。分析:(1)从第2项开始,分子是前一项的分子分母之和,分母是前一项的分子。(2)依据【例5-6】的思路,设3个浮点型变量(a=2,b=1,c)和一个求和的变量(s=0)以及循环变量(i=1);则在循环体内有以下变化:先求和:s+=a/b;分子分母之和放在变量c中:c=a+b;前一项的分子变分母:b=a;前一项的分子分母之和变分子:a=c;#include int main()int i=1;/*表示第1项*/5.4循环结构程序设计5.4.1while语句先判断后执行float a=2,b=1,c,s=0;/*s用于求和,初始化为0*/while(i=20)s+=a/b;c=a+b;/*分子分母之和放在变量c中*/b=a;/*前一分子变分母*/a=c;/*前面的分子分母之和变分子*/i+;/*项数递增*/printf(s=%f,s);运行结果:s=32.6602595.4循环结构程序设计5.4.1while语句先判断后执行【例5-8】猴子吃桃问题。猴子第1天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了1个。第2天早上又将剩下的桃子吃掉了一半,又多吃了1个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,只剩下1个桃子。求第1天共摘了多少桃子。分析:数学分析就是:设第一天共摘了x个桃子。若用xn表示每天剩下的桃子,如x1,x2,则有:第1天剩:x1=x-(x/2+1)=x/2-1,则x=2x1+2第2天剩:x2=x1-(x1/2+1)=x1/2-1,则x1=2x2+2第10天剩:x10=x9-(x9/2+1)=x9/2-1,则x9=2x10+2,而第10天只剩下1个桃子,这样,就可以初始化变量值为1。通过倒循环9次,得到x的值。5.4循环结构程序设计5.4.1while语句先判断后执行仅需设两个通用变化量x 和x1,最终求得x的值。#include int main()int i=9;/*循环变量,共循环9次*/int x,x1=1;while(i0)x=2*x1+2;/*注意不可写成21,这是数学表达式*/x1=x;i-;printf(x=%d,x);/*输出结果:x=1534*/5.4循环结构程序设计5.4.1while语句先判断后执行【例5-9】统计从键盘输入的字符数,输入的字符以换行符结束。#include int main()int i=0;/*统计变量,初始化为0*/char ch;ch=getchar();/*先输入一个字符,存入字符变量ch中*/while(ch!;n)/*判断输入的是不是换行符*/i+;/*不是换行符,i自增1*/ch=getchar();/*继续从键盘输入字符*/printf(i=%d,i);5.4循环结构程序设计5.4.2do while语句先执行后判断结构如下:do 循环体语句;while(条件表达式);/*注意这里是语句的结束,必须带分号*/先执行循环体语句,再判断while()括号里的条件表达式是否为真(1),如果为真(1),继续执行循环体语句;如果为假(0),则终止循环。因此,dowhile循环至少要循环1次。5.4循环结构程序设计5.4.2do while语句先执行后判断对于【例5-4】求n的阶乘(n!),用dowhile改写如下:#include int main()int i=1,n;long j=1;scanf(%d,&n);do j*=i;i+;while(i=n);printf(%ld,j);5.4循环结构程序设计5.4.2do while语句先执行后判断【例5-5】用dowhile改写如下:/*求1+2+3+n 的和*/*求2+4+6+8+n的和*/#include int main()int i=1,n;long s=0;scanf(%d,&n);dos+=i;i+;while(i=n);printf(%ld,s);/*求1+2+3+n 的和*/*求2+4+6+8+n的和*/#include int main()int i=1,n;long s=0;scanf(%d,&n);dos+=i;i+;while(i=n);printf(%ld,s);5.4循环结构程序设计5.4.2do while语句先执行后判断【例5-6】和【例5-7】用dowhile改写如下:/*1,2,3,5,8斐波那契数列第20项*/#include int main()int a=1,b=2,c,n=3;doc=a+b;a=b;b=c;n+;while(n=20);printf(NO.20=%d,c);/*21,32,53,85,138,2113前20项之和*/while(n=20);printf(NO.20=%d,c);#include int main()int i=1;float a=2,b=1,c,s=0;dos+=a/b;c=a+b;b=a;a=c;i+;while(i=20);printf(s=%f,s);5.4循环结构程序设计5.4.2do while语句先执行后判断【例5-8】和【例5-9】用dowhile改写如下-/*猴子吃桃问题*/#include int main()int i=9;int x,x1=1;dox=2*x1+2;x1=x;i-;while(i0);printf(x=%d,x);/*统计从键盘输入的字符数*/#include int main()int i=0;char ch;ch=getchar();doi+;ch=getchar();while(ch=n);printf(i=%d,i);5.4循环结构程序设计5.4.2do while语句先执行后判断从上面程序来看,while和dowhile在很多情况下似乎一样,但是,还是要细细斟酌。例如,在统计从键盘输入的字符数时,用dowhile写的程序其实有一个漏洞,因为它至少要执行1次,所以,当一开始输入换行符时,程序也要执行1次i+,结果把换行符也当成了一个字符。在这种情况下,用while就能避免这种漏洞。5.4循环结构程序设计5.4.3for语句最灵活的循环语句结构如下:for(式1;式2;式3)循环体语句;说明(假设有循环变量i):(1)“式1”为循环变量设置初值,如i=1;若循环变量已初始化,可省略“式1”。(2)“式2”为循环控制判断条件,一般为关系表达式(如i=10)或逻辑表达式。若省略,则说明循环条件始终为真(1)。(3)“式3”用于修改循环变量的值,如i+等同于i+=1。若省略“式3”,则在循环体内应另设条件以保证循环能正常结束,如“for(i=1;i=10;i+)”将循环10次。具体算法是:计算式1计算式2式2值为真,执行循环体计算式3的值计算式2的值式2值为假,退出循环,停止式3计算,执行循环体下面的语句 具体算法是:对于【例5-4】求n的阶乘(n!),用for改写如下:#include int main()int i=1,n;long j=1;scanf(%d,&n);for(;i=n;)/*循环变量已初始化,省略式1。没有式3,在循环体内设了i+*/j*=i;i+;printf(%ld,j);5.4循环结构程序设计5.4.3for语句最灵活的循环语句对于【例5-5】,用for改写如下:/*求1+2+3+n 的和*/#include int main()int i,n;long s=0;scanf(%d,&n);for(i=1;i=n;i+)s+=i;/*只一句,省略*/printf(%ld,s);/*求2+4+6+8+n的和*/#include int main()int i,n;long s=0;scanf(%d,&n);for(i=2;i=n;)s+=i;i+=2;printf(%ld,s);5.4循环结构程序设计5.4.3for语句最灵活的循环语句【例5-6】和【例5-7】用for改写如下:/*1,2,3,5,8斐波那契数列第20项*#include int main()int a=1,b=2,c,n;for(n=3;n=20;n+)c=a+b;a=b;b=c;printf(NO.20=%d,c);/*21,32,53,85,138,2113前20项之和*/#include int main()int i=1;float a=2,b=1,c,s=0;for(;i=20;i+)s+=a/b;c=a+b;b=a;a=c;printf(s=%f,s);5.4循环结构程序设计5.4.3for语句最灵活的循环语句【例5-8】和【例5-9】用for改写如下:/*猴子吃桃问题*/#include int main()int i,x,x1=1;for(i=9;i0;i-)x=2*x1+2;x1=x;printf(x=%d,x);/*统计从键盘输入的字符数*/#include int main()int i=0;char ch;ch=getchar();for(;ch=n;)i+;ch=getchar();printf(i=%d,i);5.4循环结构程序设计5.4.3for语句最灵活的循环语句【例5-10】循环输入10个整型数值,找出最大数和最小数,并计算10个数的平均值。5.4循环结构程序设计5.4.3for语句最灵活的循环语句#include stdio.hint main()int i,n,max,min,sum;max=-32768;/*用于保存最大值*/min=32767;/*用于保存最小值*/sum=0;for(i=1;imax)max=n;/*每循环一次判断一次,最后保存的是最大的值*/if(nmin)min=n;/*每循环一次判断一次,最后保存的是最小的值*/sum+=n;5.4循环结构程序设计5.4.3for语句最灵活的循环语句printf(Max=%d,Min=%d,Average=%.2f,max,min,(float)sum/10);输入:1,2,3,4,5,6,7,8,9,10。结果:Please input the NO.1 score:1Please input the NO.2 score:2Please input the NO.3 score:3Please input the NO.4 score:4Please input the NO.5 score:5Please input the NO.6 score:6Please input the NO.7 score:7Please input the NO.8 score:8Please input the NO.9 score:9Please input the NO.10 score:10Max=10,Min=1,Average=5.50【例5-11】素数判断。素数只能被1和它本身整除。具体判断方法是:对一个整数开平方取整(或者取此数的1/2),在此范围中循环,若该数能在这个范围内被整除,则肯定不是素数,因为这说明其中含有其因子。5.4循环结构程序设计5.4.3for语句最灵活的循环语句#include#include int main()int number,flag=1,k,i;printf(Input a number:);scanf(%d,&number);k=sqrt(number);/*可改为k=number/2*/for(i=2;i=k;i+)【例5-11】素数判断。素数只能被1和它本身整除。具体判断方法是:对一个整数开平方取整(或者取此数的1/2),在此范围中循环,若该数能在这个范围内被整除,则肯定不是素数,因为这说明其中含有其因子。5.4循环结构程序设计5.4.3for语句最灵活的循环语句if(number%i=0)/*有因子,说明不是素数,标记赋0,退出循环*/flag=0;break;if(flag=1&number=1)/*1不是素数*/printf(n%d is prime,number);elseprintf(n%d isnt prime,number);功能:在循环语句中用于强制跳出循环,执行循环体外下面的语句。在switch语句中,用于强制跳出switch语句,执行switch下面的语句。5.5break和continue控制语句5.5.1break语句 仅用于循环语句和switch语句中【例5-12】程序功能:程序实现并输出122,236,3412的功能,最大输出到相乘结果大于或等于100为止,并按每行5个输出。#include stdio.hint main()int i,j;for(i=1,j=2;i=100)/*如果相乘的结果大于或等于100*/break;/*强制退出for循环*/输出结果如下:1*2=22*3=63*4=124*5=205*6=306*7=427*8=568*9=729*10=9010*11=1105.5break和continue控制语句5.5.1break语句 仅用于循环语句和switch语句中5.5break和continue控制语句5.5.1break语句 仅用于循环语句和switch语句中【例5-13】统计输入的元音字母(包括大小写)个数。#include stdio.hint main()char ch;int total=0;while(ch=getchar()!=n)/*注意括号(ch=getchar()*/switch(ch)/*输入一个字符便判断一次*/case a:case a:case A:case e:case E:case i:case I:5.5break和continue控制语句5.5.1break语句 仅用于循环语句和switch语句中【例5-13】统计输入的元音字母(包括大小写)个数。case o:case O:case u:case U:totalt+;break;/*是元音,统计变量自增,退出switch*/default:break;/*不是元音,退出switch*/printf(Total=%d,total);功能:在循环体中如果continue上面的条件为真,则停止执行continue 下面的语句,直接进行下一轮循环判断;如果continue上面的条件为假,则直接执行continue下面的语句,再进行下一轮循环判断。5.5break和continue控制语句5.5.2continue语句 仅用于循环的语句5.5break和continue控制语句5.5.2continue语句 仅用于循环的语句【例5-14】输出110不能被3整除的数。#include stdio.hint main()int i;for(i=1;i=10;i+)if(i%3=0)continue;/*如果i除3的模运算等于0,跳过下面的语句继续i的判断;否则,执行下面的语句*/printf(%dt,i);/*输出不能被3整除的数*/输出结果:124578105.5break和continue控制语句5.5.2continue语句 仅用于循环的语句【例5-15】输入一个数,对该数分解质因数。分析:首先要清楚质因数的概念。数分质数和合数,如2,3,5,717等是质数,只可分成1和它本身,即只可以分成1和其本身的乘积的数是质数。4,6,8,9,10,12等是合数,如422,8222,12223。可见,分解质因数主要是针对合数而言的。进一步可知:质因数指的是一个合数可以分解成的不可再分解的最小因数,如18的分解过程如下(取除数,除数范围只能是大于或等于2小于其本身):从2开始,18/2=9,说明2是18的第一个质因数;9/2,有余数,说明第二个质因数不再是2;9/3=3,说明3是18的第二个因数;3/31,说明3又是18的第三个质因数。故18233。在程序中,判断能否被整除,用模运算:5.5break和continue控制语句5.5.2continue语句 仅用于循环的语句【例5-15】输入一个数,对该数分解质因数。#include int main()int x,i=2;/*1不是质数,数只能从2开始*/printf(Input a figure:);/*提示输入要分解的数*/scanf(%d,&x);printf(%d=,x);/*输出式子的左边部分*/for(;ix;)/*式1已初始化,i必须小于其本身,式3在循环体中*/if(x%i=0)/*如果x可以被i整除,则说明i是其因子*/5.5break和continue控制语句5.5.2continue语句 仅用于循环的语句【例5-15】输入一个数,对该数分解质因数。printf(%d*,i);/*输出右边的乘积模式*/x/=i;/*取x除以i的结果再从循环处开始执行*/continue;/*如果x不能被i整除,跳出if,执行continue下面的i+*/i+;printf(%d,i);/*输出最后一个i*/输入18,输出182*3*3。5.6goto语句功能:无条件转移程序的执行位置,亦称跳转语句。使用方法:goto 语句标号。#includeint main()int i,sum=0;for(i=1;i=100;i+)sum+=i;if(i=5)goto loop;/*跳转执行标号loop后的语句*/【例5-16】5.6goto语句功能:无条件转移程序的执行位置,亦称跳转语句。使用方法:goto 语句标号。loop:printf(i=%d,Hello,goton,i);/*标号必须带冒号“:”*/printf(sum=%dn,sum);输出结果:i=5,Hello,go to!sum=15说明:(1)标号是一个有效的标识符,其后必须接冒号“:”。(2)goto和标号可以不在同一个循环中,但是必须在同一个函数中。(3)goto通常和if条件语句连用,当条件满足时,跳转到标号处运行。(4)goto语句通常不用,因为它容易导致程序层次不清,且不易读。它一般用于多层嵌套退出情形中。【例5-16】5.6goto语句【例5-17】/*下面的goto与if连用,实现类似循环的功能*/int main()int i=1,sum=0;flag:if(i=100)sum+=i;i+;goto flag;printf(sum=%dn,sum);/*输出:sum=5050*/*与for循环比较*/#include int main()int i=1,sum=0;for(;i=100;i+)sum+=i;printf(sum=%dn,sum);/*输出:sum=5050*/5.7循环的嵌套5.7.1嵌套示例【例5-18】九九乘法表。分析如下:#include int main()int i,j;for(i=1;i=9;i+)for(j=1;j=9;j+)printf(%d*%d=%dt,i,j,i*j);if(j=9)printf(n);/*每行输出9个等式*/5.7循环的嵌套5.7.1嵌套示例输出结果如下:1*1=11*2=21*3=31*4=41*5=51*6=61*7=71*8=81*9=92*1=22*2=4 2*3=62*4=82*5=102*6=122*7=142*8=162*9=183*1=33*2=63*3=9 3*4=123*5=153*6=183*7=213*8=243*9=274*1=44*2=84*3=124*4=16 4*5=204*6=244*7=284*8=324*9=365*1=55*2=105*3=155*4=205*5=25 5*6=305*7=355*8=405*9=456*1=66*2=126*3=186*4=246*5=306*6=36 6*7=426*8=486*9=547*1=77*2=147*3=217*4=287*5=357*6=427*7=49 7*8=567*9=638*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=64 8*9=729*1=99*2=189*3=279*4=369*5=45