1、 第四章第四章 语句语句主要内容主要内容:基本语句基本语句 顺序结构顺序结构 选择结构:选择结构:ifelse、switch 循环结构:循环结构:while、dowhile、for4.1 基本语句基本语句一、表达式语句:一、表达式语句:形式形式:表达式;表达式;如如:n+;二、空语句:二、空语句:形式形式:;什么也不执行,在程序中空语句可用来作空循环体。什么也不执行,在程序中空语句可用来作空循环体。如如:while(getcharwhile(getchar()!=n)()!=n);本语句的功能是,本语句的功能是,只要从键盘输入的字符不是回车则继续循环。只要从键盘输入的字符不是回车则继续循环。三
2、、复合语句:三、复合语句:形式形式:语句组语句组在程序中应把复合语句看成是单条语句,而不是多条在程序中应把复合语句看成是单条语句,而不是多条语句。语句。如如:x=y+z;a=b+c;printf(“%d%d x=y+z;a=b+c;printf(“%d%d”,x x,a)a);说明说明:当需要一次同时执行若干句时要使用复合语句:当需要一次同时执行若干句时要使用复合语句.4.2 4.2 顺序结构顺序结构 顺序结构主要来设计顺序化的程顺序结构主要来设计顺序化的程序,执行完一条语句后,直接执序,执行完一条语句后,直接执行书写在该语句之后的语句。语行书写在该语句之后的语句。语句的执行顺序是至上而下,逐
3、条句的执行顺序是至上而下,逐条执行。顺序结构的流程图见右:执行。顺序结构的流程图见右:C C语言中有一些语句属于顺序语语言中有一些语句属于顺序语句,即执行完后接着执行下一条句,即执行完后接着执行下一条语句。语句。包括包括:输入语句,输出语:输入语句,输出语句,赋值语句等。句,赋值语句等。流程图:流程图:AB4.3 选择结构选择结构根据所指定的条件是否满足,决定从给定的操作中选根据所指定的条件是否满足,决定从给定的操作中选择其一。择其一。例如例如:if(x0)y=1;else y=-1;if(x0)y=1;else y=-1;下一步要做的事取决于上一步的判断,判断的结果不下一步要做的事取决于上一
4、步的判断,判断的结果不同,选择执行的方向也不同。同,选择执行的方向也不同。C C语言的语言的ifif语句可以实现语句可以实现选择结构的流程图。选择结构的流程图。一一、ifif语句的基本形式:语句的基本形式:格式格式:if(if(表达式表达式)语句语句1 1 else else 语句语句22功能功能:先计算表达式的值,若为非:先计算表达式的值,若为非0(即真即真),则执行语,则执行语句句1,尔后转去执行,尔后转去执行if的后续语句;若为的后续语句;若为0(即假即假),有两,有两种情况:种情况:无无else时时,什么也没做,直接执行,什么也没做,直接执行if的后续语的后续语句;句;有有else时时
5、,则先执行语句,则先执行语句2,再转去执行,再转去执行if的后续的后续语句。框图如下:语句。框图如下:表达式值?表达式值?语句语句1 1ifif后续语句后续语句(无无else)else)真真假假表达式值?表达式值?语句语句1 1语句语句2 2ifif后续语句后续语句(有有else)else)真真假假说明说明:1、表达式表达式:须用圆括号,为任意类型,非:须用圆括号,为任意类型,非0即为真,即为真,如如:if(2+3)printf(“%d”,a);/*2+3为真为真*/if(a)printf(“%d”,s);/*a为真为真*/2、语句语句1、语句、语句2:可以是一条语句或复合语句。:可以是一条语
6、句或复合语句。例例1:void main()int num;scanf(%d,&num);if(numb)c=a;else c=b;printf(“%dn”,c);例例3:将实数:将实数a、b、c、d中最小的数输出。中最小的数输出。main()float a,b,c,d,min;scanf(“%f%f%f%f”,&a,&b,&c,&d);min=a;if(bmin)min=b;if(cmin)min=c;if(db)t=a;a=b;b=t;if(ac)t=a;a=c;c=t;if(bc)t=b;b=c;c=t;printf(“%d,%d,%dn”,a,b,c);框图:框图:ab?交换交换a、b
7、ac?交换交换a、cbc?交换交换b、c输出输出a、b、c真真假假假假假假真真真真二二、if语句的多分支形式:语句的多分支形式:格式格式:if(表达式表达式1)语句语句1else if(表达式表达式2)语句语句2else if(表达式表达式n)语句语句nelse 语句语句n+1功能功能:先计算表达式:先计算表达式1的值的值,若非若非0,即为真,则执行语句即为真,则执行语句1,尔后转去执,尔后转去执行行if后续语句;若为后续语句;若为0(假假),则计算,则计算表达式表达式2的值,若非的值,若非0(真真),则执行,则执行语句语句2,尔后转去执行,尔后转去执行if后续语句;后续语句;,依此类推,若,
8、依此类推,若n个表达式值个表达式值均为均为0,有,有else时,则执行语句时,则执行语句n+1,尔后转去执行尔后转去执行if后续语句后续语句;无无else时时,则什么也没做,直接转去执行则什么也没做,直接转去执行if的后的后续语句。续语句。框图框图(有有else):表达式表达式1 1表达式表达式2 2表达式表达式n n语句语句1语句语句2语句语句n语句语句n+1if后续语句后续语句真真真真真真假假假假假假例例:据学生的考试:据学生的考试成绩划分等级如下成绩划分等级如下:分数分数 等级等级 90100 A 7589 B 6074 C 059 D从键盘输入分数,从键盘输入分数,转换成相应等级。转换
9、成相应等级。main()int cj;/*cj变量存放分数变量存放分数*/char dj;/*dj变量存放等级变量存放等级*/scanf(“%d”,&cj);if(cj=90)dj=A;else if(cj=75)dj=B;else if(cj=60)dj=C;else dj=D;printf(“cj=%d,dj=%cn”,cj,dj);三三、if语句的嵌套形式:语句的嵌套形式:在在ifif语句中又包含一个或语句中又包含一个或多个多个ifif语句,称为语句,称为ifif语句语句的嵌套。的嵌套。常见格式常见格式:if(if(表达式表达式1)1)if(if(表达式表达式11)11)语句语句1111
10、 else else 语句语句1212 else else 语句语句2 2说明说明:1 1、使用使用ifif嵌套时,要将一个嵌套时,要将一个ifif块完整的嵌套到另外一个块完整的嵌套到另外一个ifif块中,不能出现交叉现象。块中,不能出现交叉现象。2 2、当一个、当一个ifif块或块或elseelse块中包块中包含多个语句时应该使用复合语含多个语句时应该使用复合语句形式,即加上句形式,即加上 。3 3、elseelse总是和它上面最近的总是和它上面最近的且未与其它且未与其它elseelse配对的配对的ifif相匹相匹配。配。语句语句1例例:用:用if嵌套形式求:嵌套形式求:-1(x0)main
11、()int x,y;scanf(“%d”,&x);if(x=0)if(x0)y=1;else y=0;else y=-1;printf(“%dn”,y);改用多分支形式:改用多分支形式:main()int x,y;scanf(“%d”,&x);if(x0)y=-1;else if(x=0)y=0;else y=1;printf(“%dn”,y);四四、switch语句语句(开关语句开关语句):实际应用中常常需要用到多分支的选择,选择嵌套太实际应用中常常需要用到多分支的选择,选择嵌套太多,用之前的多,用之前的if语句来编写程序,易引起混乱,程序阅语句来编写程序,易引起混乱,程序阅读起来比较困难。
12、为此,读起来比较困难。为此,C语言还提供了语言还提供了switchswitch语句,语句,可用来实现多分支的选择结构。可用来实现多分支的选择结构。格式格式:switch(switch(表达式表达式)case case 常量表达式常量表达式1 1:语句组:语句组1 break;1 break;case case 常量表达式常量表达式2 2:语句组:语句组2 break;2 break;.case case 常量表达式常量表达式n n:语句组:语句组n break;n break;default default:语句组:语句组n+1n+1 功能功能:先计算表达式的值:先计算表达式的值(不是逻辑值不
13、是逻辑值),再将该值,再将该值依次依次和和case后的常量表达式的值比较,当后的常量表达式的值比较,当表达式值与某个表达式值与某个常量表达式值相同常量表达式值相同时,则执行该常量表达式后的语句时,则执行该常量表达式后的语句组,若语句组后跟有组,若语句组后跟有break;则执行完该语句组后退出;则执行完该语句组后退出switch语句;若语句组后没有语句;若语句组后没有break;则继续执行后面;则继续执行后面的语句组,执行过程中若遇到的语句组,执行过程中若遇到break;则退出;则退出switch语语句。若句。若表达式值与所有的常量表达式值都不相同表达式值与所有的常量表达式值都不相同,有,有de
14、fault时,则执行语句组时,则执行语句组n+1后退出后退出switch语句语句(常规常规形式形式);无;无default时,则什么也没做,直接退出时,则什么也没做,直接退出switch语句,语句,执行执行 后的语句。后的语句。说明说明:1、常量表达式常量表达式类型:类型:整型整型或或字符型字符型,一般和,一般和表达式表达式类类型一致;型一致;2、常量表达式常量表达式值互不相等,但不同的值互不相等,但不同的常量表达式常量表达式可以可以共用一个语句组,共用一个语句组,如如:case A:case B:case C:printf(“*”);break;3、break语句:强制退出语句:强制退出sw
15、itch语句和循环语句,在语句和循环语句,在此是为了保证每个分支的正确执行,只能用在此是为了保证每个分支的正确执行,只能用在switch语句和循环语句中;语句和循环语句中;4、语句组:多个语句可以不用、语句组:多个语句可以不用 相括。相括。例例1:写出下列程序的输出结果:写出下列程序的输出结果main()int n;scanf(“%d”,&n);switch(n)case 1:printf(“*n”);break;case 2:printf(“*n”);break;default:printf(“*n”);分析分析:1、当、当n=1时,时,输出输出:*2、当、当n=2时,时,输出输出:*3、当
16、、当n为其它时,为其它时,输出输出:*上例改为上例改为:main()int n;scanf(“%d”,&n);switch(n)case 1:printf(“*n”);case 2:printf(“*n”);default:printf(“*n”);分析分析:1、当、当n=1时,时,输出输出:*2、当、当n=2时,时,输出输出:*3、当、当n为其它时,为其它时,输出输出:*上例改为上例改为:main()int n;scanf(“%d”,&n);switch(n)default:printf(“*n”);case 2:printf(“*n”);case 1:printf(“*n”);分析分析:1
17、、当、当n=1时,时,输出输出:*2、当、当n=2时,时,输出输出:*3、当、当n为其它时,为其它时,输出输出:*例例2 2:从键盘上输入一个月份,输出该月对应的天数:从键盘上输入一个月份,输出该月对应的天数分析分析:设设2月份为月份为28天,则:天,则:1、31天天的月份:的月份:1、3、5、7、8、10、122、30天天的月份:的月份:4、6、9、113、28天天的月份:的月份:2 main()int month,day;scanf(“%d”,&month);switch(month)case 4:case 6:case 9:case 11:day=30;break;case 2:day=
18、28;break;default:day=31;printf(“day=%dn”,day);4.4 循环结构循环结构之前学过的语句,最多只能执行一次,有的还不被之前学过的语句,最多只能执行一次,有的还不被执行,但实际应用时常常需要重复执行某一程序段。执行,但实际应用时常常需要重复执行某一程序段。循环控制语句的功能循环控制语句的功能:实现一个语句块的重复执行。实现一个语句块的重复执行。循环多次判断是否满足循环多次判断是否满足指定条件指定条件,即条件表达式是否,即条件表达式是否成立?值是否为非成立?值是否为非0(0(即真即真),满足则再执行一次语句块;,满足则再执行一次语句块;不满足则退出循环,执
19、行循环结构后面的语句。不满足则退出循环,执行循环结构后面的语句。其中:指定条件称为其中:指定条件称为循环条件循环条件;语句块称为;语句块称为循环体循环体,循环体含有多条语句时要用循环体含有多条语句时要用 括起来,即复合语句。括起来,即复合语句。循环控制语句循环控制语句一、一、whilewhile语句语句格式格式:while(while(表达式表达式)语句语句 /*循环体循环体*/流程图流程图:功能功能:先计算表达式逻辑值,若先计算表达式逻辑值,若非非0(0(即真即真),则执行语句,则执行语句,尔后再次计算表达式的逻尔后再次计算表达式的逻辑值,若仍为真,则再次辑值,若仍为真,则再次执行语句,如此
20、反复多次执行语句,如此反复多次,直至表达式值为直至表达式值为0(0(即假即假)时,退出时,退出whilewhile循环,执行循环,执行whilewhile之后的语句。之后的语句。表达式是否成立表达式是否成立表达式?表达式?语句语句假假真真whilewhile之后语句之后语句例例1:求和:求和:sum=1+2+3+100分析分析:设变量设变量sum存放累存放累加和,初值为加和,初值为0;n为数列的某一项为数列的某一项.sum=sum+1 sum=sum+2 sum=sum+100可看出,要可看出,要重复执重复执行的程序段行的程序段为:为:sum=sum+n n=n+1 main()int n,s
21、um;sum=0;n=1;/*n n初值为初值为1*/while(n=100)sum=sum+n;n=n+1;printf(“%dn”,sum);printf(“%dn”,n);sum+=n;n+;sum+=n+;输出输出:5050 101问题展开问题展开:1、sum=1+3+5+99 while(n=1)sum+=n;n-;3、循环体一次都不执行循环体一次都不执行 n=101;while(n100)break;说明说明:1、是、是当型循环当型循环,循环体可能一次也没执行;,循环体可能一次也没执行;2、表达式值可恒真,若有、表达式值可恒真,若有break;则不会死循环;则不会死循环;3、循环体
22、可以是空语句,、循环体可以是空语句,如如:.n=0;n=10;while(n+0);printf(“%dn”,n);printf(“%dn”,n);.输出输出:输出输出:4、实际应用时循环体中应有控制循环结束的语句,不、实际应用时循环体中应有控制循环结束的语句,不会死循环,如例题程序中的会死循环,如例题程序中的n+;11-15 5、循环体多条语句必须使用循环体多条语句必须使用 ;6 6、出现死循环时按两次出现死循环时按两次Ctrl+BreakCtrl+Break,再回车,最后,再回车,最后按按ESCESC键,中止运行,返回编辑界面。键,中止运行,返回编辑界面。例例1 1:若输入:若输入AB20
23、dfz5AB20dfz5,则下列程序输出结果?,则下列程序输出结果?#include#include main()main()char c;char c;while(c=getchar while(c=getchar()!=n)()!=n)if(c=a&c=a&cz)c+=1;c+=1;if(c=z)c=a;if(c=z)c=a;putchar(c putchar(c););输出输出:AB20ega5例例2:写出下列程序运行结果:写出下列程序运行结果:main()int m=1;while(m=5)switch(m%2)case 0:m+;printf(“#”);break;case 1:m+
24、=2;printf(“*”);default:printf(“n”);m+;分析分析:第一次循环第一次循环:m=1,1%2为为1,m=3,输出输出*与与换换行行,m=4;第二次循环第二次循环:4%2为为0,m=5,输出输出#后跳出后跳出switch语语句句,m=6,则循环结束则循环结束输出输出:*#例例3:找出:找出100内被内被2与与3除均余除均余1的正整数。的正整数。分析分析:用循环产生:用循环产生1100的所有整数,每循环一次产的所有整数,每循环一次产生一个,再进行判别,若符合条件则输出。生一个,再进行判别,若符合条件则输出。main()int m=1;while(m=100)if(m%
25、2=1&m%3=1)printf(“%dt”,m);m+;输出:输出:1 7 13 19 25.(略)(略)例例4:找出:找出100内被内被2与与3除均余除均余1的最小的前的最小的前10个正整数。个正整数。main()int m,count;m=1;count=0;while(m=100&count10)if(m%2=1&m%3=1)printf(“%dt”,m);count+;m+;例例5 5:计算:计算s=10!s=10!分析分析:累乘器:累乘器s s初值为初值为1 1 main()main()int int n;n;longlong s;s;n=s=1;n=s=1;while(n whi
26、le(n=10)=10)s=s s=s*n;n;n+;n+;printf(“%printf(“%ldldnn”,s);”,s);例例6 6:计算:计算s=1!+2!+s=1!+2!+10!+10!main()main()int int n;n;long s,sum;long s,sum;n=s=1;sum=0;n=s=1;sum=0;while(n while(n=10)=10)s s*=n;=n;sum+=s;sum+=s;n+;n+;printf(“%ldn printf(“%ldn”,sum);”,sum);输出输出:3628800输出输出:4037913例例7 7:输入一英文句子:输入
27、一英文句子(以句号结束以句号结束),要求将句中单词,要求将句中单词分行输出分行输出#include main()char s;while(s=getchar()!=.)if(s!=)putchar(s);else putchar(n);二二、dowhile语句语句格式格式:dodo 语句语句 /*循环体循环体*/while(while(表达式表达式);流程图:流程图:功能功能:先执行语句,再计算表达先执行语句,再计算表达式逻辑值,若非式逻辑值,若非0(0(即真即真),则再次执行语句,尔后又则再次执行语句,尔后又计算表达式逻辑值,若仍计算表达式逻辑值,若仍为真,则再次执行语句,为真,则再次执行语
28、句,如此反复多次如此反复多次,直至表达式直至表达式值为值为0(0(即假即假)时,退出循时,退出循环,执行环,执行dowhilewhile之后的之后的语句。语句。表达式?表达式?语句语句假假真真dowhile之后语句之后语句说明说明:1、直到型循环,先执行一次循环体,、直到型循环,先执行一次循环体,如如:main()main()int x=1,y=4;int x=1,y=4;while(x3)do y=y+3;y=y+3;printf(“%dn”,y);while(x3);printf(“%dn”,y);输出输出:4 输出输出:72、其它与当型循环、其它与当型循环while相同。相同。例例1:写
29、出下列程序输出结果:写出下列程序输出结果 main()int a,y;a=10;y=0;do a+=2;y+=a;if(y50)break;while(a=14);printf(“a=%d y=%dn”,a,y);输出输出:a=16 y=60a=16 y=60例例2:产生数列:产生数列1、1、2、3、5、8的前的前20项,每项,每行输出行输出2项。项。main()int k,a=1,b=1;printf(“%d,%dn”,a,b);k=1;do a=;b=;printf(“%d,%dn”,a,b);k=k+1;while();1,12,35,813,2134,5589,144233,377(略
30、略)a+ba+bk=9三三、for语句语句(常用于循环次数已知时常用于循环次数已知时)格式格式:for(表达式表达式1;表达式;表达式2;表达式;表达式3)语句语句(循环体循环体)功能功能(分三步分三步):1、先计算表达式、先计算表达式1值;值;2、再计算表达式、再计算表达式2逻辑值,若非逻辑值,若非0(即为真即为真),则执行语,则执行语句句(循环体循环体),然后执行第,然后执行第3步,若为步,若为0,则退出循环,则退出循环,执行循环后语句;执行循环后语句;3、计算表达式、计算表达式3的值,转回第的值,转回第2步。步。框图框图:表达式表达式1 1表达式表达式2 2?语句语句(循环体循环体)表达
31、式表达式3 3真真假假for循环之后语句循环之后语句例例1:求:求sum=1+2+3+.+100 main()int i,sum=0;for(i=1;i=100;i+)sum+=i;printf(“sum=%dn”,sum);说明说明:1、表达式、表达式1:给循环变量:给循环变量i赋初值;赋初值;2、表达式、表达式2:循环变量:循环变量i是否超过终值,是循环条件,是否超过终值,是循环条件,决定是否进入循环;决定是否进入循环;3、表达式、表达式3:循环变量:循环变量i的步长,对循环变量的步长,对循环变量i有规律的有规律的进行增或减。进行增或减。等价形式等价形式:i=i+1i+=1+i4、for循
32、环也是先判断是否进入循环,与循环也是先判断是否进入循环,与while相同,相同,循环体可能一次都不执行;循环体可能一次都不执行;5、语句、语句for(i=1;i=100;i+)与下面与下面等价等价:i=1;for(;i=100;i+)6、for(i=1;i=100;i+)for(i=1;i=100;)sum+=i;sum+=i;i+;7、for(i=1;i=100;i+)i=1;sum+=i;for(;i=100;)sum+=i;i+;等价等价等价等价8、sum=0;for(i=1;i=100;i+)可将上两句写成下面一句可将上两句写成下面一句(表达式表达式1为逗号表达式为逗号表达式):for
33、(sum=0,i=1;i=100)break;10、表达式表达式3可以是逗号表达式,可以是逗号表达式,如如:for(i=1;i=100;i+,i+)i=i+2例例2:求和:求和:1!+2!+n!,n由键盘输入由键盘输入 main()int i,n;long s=1,sum=0;scanf(“%d”,&n);for(i=1;i=;i+)s=s*i;sum=sum+s;printf(“%ldn”,sum);n例例3 3:求:求10001000内能被内能被2929整除的最大整数整除的最大整数main()int i;for(i=1000;i-)if(i%29=0)break;printf(“%dn”,
34、i);例例4:写出运行结果:写出运行结果 main()int i,j=4;for(i=j;i=1四四、goto语句语句格式格式:goto 标号;标号;功能功能:无条件转向标号所对应的语句:无条件转向标号所对应的语句说明说明:1、标号:用标识符命名;、标号:用标识符命名;2、标号对应语句的形式:、标号对应语句的形式:标号:语句标号:语句3、常用、常用if与与goto构成循环,但尽量不使用构成循环,但尽量不使用goto与与if构构成循环,易出乱。成循环,易出乱。例例:求:求sum=1+2+100 main()int i,sum;i=1;sum=0;loop:if(i=100)sum+=i;i+;g
35、oto loop;printf(“%dn”,sum);五五、continue语句语句-循环中专用语句循环中专用语句格式格式:continue;功能功能:执行至该语句时,则:执行至该语句时,则本次循环结束本次循环结束(循环体中在循环体中在continue之后的语句被跳过之后的语句被跳过),进行下一次循环是否执,进行下一次循环是否执行的判断。行的判断。例例1:写运行结果:写运行结果 main()main()int m;int m;for(m=0;m5;m+)for(m=0;m5;m+)if(m=3)break;if(m=3)continue;printf(“%dt”,m);printf(“%dt”
36、,m);输出输出:0 1 2 输出输出:0 1 2 4例例2 2:main()int m;for(m=1;m=5;m+)if(m%2)printf(“*”);else continue;printf(“#”);printf(“$n”);例例3:main()int m=1;while(m=15)if(+m%3!=2)continue;else printf(“%d,”,m);printf(“n”);输出输出:2,5,8,11,14,输出输出:*#*#*#$例例4:main()int m,s;m=1;s=3;do s+=m+;if(s%7=0)continue;else +m;while(s15)
37、;printf(“%d”,m);s=s+m;m=m+1;输出输出:8等价等价六六、循环嵌套、循环嵌套例例1:写结果:写结果 main()int i,j;for(i=1;i=2;i+)for(j=1;j=3;j+)printf(“%d,%dn”,i,j);输出输出:1,11,21,32,12,22,3通常是外循环通常是外循环循环一次,内循环一次,内循环循环一遍循环循环一遍上例上例流程图流程图如下:如下:i=1i=2?j=1j=3?输出输出i、jj+i+真真真真假假假假双重循环结双重循环结束,执行其束,执行其后的语句后的语句例例2:用双重循环输出如右图形:用双重循环输出如右图形分析分析设:外循环变
38、量为设:外循环变量为i,内循环变量为,内循环变量为j;1 1、外循环控制行数,有、外循环控制行数,有5 5行,应循环行,应循环5 5次;次;2 2、内循环控制每行、内循环控制每行*的个数,即每行输出的个数,即每行输出几个几个*,关键是内循环的次数关键是内循环的次数。由图可知,。由图可知,当当i=1i=1即第一行时即第一行时,输出输出1 1个个*,内循环循环内循环循环1 1次次;当当i=2i=2即第二行时即第二行时,输出输出2 2个个*,内循环循环内循环循环2 2次次;当当i=5i=5即第五行时即第五行时,输出输出5 5个个*,内循环循环内循环循环5 5次次;因此,若内循环的循环变量因此,若内循
39、环的循环变量j j的初值为的初值为1 1,则则终值应小等于终值应小等于i i。*或或:1 1 2 1 2 3 1 2 3 4 1 2 3 4 5程序如下程序如下:main()int i,j;for(i=1;i=5;i+)for(j=1;j=i;j+)printf(“*”);printf(“n”);/*每行输出后要换行每行输出后要换行*/第二个图形第二个图形:printf(“%2d”,j);此句改为此句改为:for(j=1;j=2*i-1;j+)输出结果?输出结果?main()int i,j,s,max,x,sum;max=sum=0;for(i=1;i=8;i+)s=0;for(j=1;j=5
40、;j+)scanf(“%d”,&x);s+=x;printf(“s=%dn”,s);sum+=s;if(maxs)max=s;printf(“max=%dt”,max);printf(“sum=%dn”,sum);例例3 3:8 8人参加期末的人参加期末的5 5门课程考试,门课程考试,4040个分数个分数由键盘输入,编程计算由键盘输入,编程计算每人的总分,每人的总分,8 8个人分个人分数的总和,并输出最高数的总和,并输出最高的总分。的总分。分析分析 设:变量设:变量x x接收接收分数,分数,i i、j j为循环变量,为循环变量,s s为个人总分,为个人总分,sumsum为为8 8个人的总分,个
41、人的总分,maxmax为最为最高的总分高的总分例例4:用多重循环输出如右图形:用多重循环输出如右图形 main()int x,i,n;for(x=1;x=5;x+)for(i=1;i=9-x;i+)printf(“”);for(n=1;n=2*x-1;n+)printf(“*”);printf(“n”);*例例5 5:#include“stdio.h”main()int j,k;for(k=0;kk;j-)putchar(A+k);putchar(n);例例6 6:main()int k,n=0;for(k=2;k5;k+)do if(k%3)continue;n+;while(!k);n+;
42、printf(“n=%dn”,n);A A A AB B BC CD n=4例例7:找出所有的:找出所有的”水仙花数水仙花数”,水仙花数是指一,水仙花数是指一个三位数,其各位个三位数,其各位 数字的立方和等于该数本身,如:数字的立方和等于该数本身,如:371=3*3*3+7*7*7+1*1*1,371是一个水仙花数。是一个水仙花数。法法1 1:main()int i,j,k;for(i=1;i=9;i+)for(j=0;j=9;j+)for(k=0;k=9;k+)if(i*100+j*10+k=i*i*i+j*j*j+k*k*k)printf(“%d%d%dn”,i,j,k);法法2:main
43、()int i,j,k,n;for(n=100;n1000;n+)i=n/100;/*百位上的数字百位上的数字*/j=n/10%10;/*十位上的数字十位上的数字*/k=n%10;/*个位上的数字个位上的数字*/if(n=i*i*i+j*j*j+k*k*k)printf(“%dt”,n);课课 堂堂 练练 习习1、main()int x,i;for(i=1;i=100;i+)x=i;if(+x%2=0)if(+x%3=0)if(+x%7=0)printf(“%dt”,x);28 702 2、产生数列、产生数列1,1,2,3,5,81,1,2,3,5,8.前前2020项,每行输出两项,每行输出两
44、项。项。main()int a,b,i;a=b=1;for(i=1;i=10;i+)printf(%d,%dn,a,b);_;_;a=a+b;b=a+b;3、求求sn=a+aa+aaa+aaa之值,其中之值,其中a是数字。如:是数字。如:2+22+222+2222+22222+222222(此时此时n=6),),n由键盘由键盘输入。输入。main()int i,n;long a,tn=0,sn=0;scanf(“%ld%d”,&a,&n);for(i=0;in;i+)tn=tn+a;sn=sn+tn;a=a*10;printf(“%ldn”,sn);n个个a作业作业3:1、以下程序输入三个整数
45、以下程序输入三个整数a,b,ca,b,c,程序把,程序把b b中的值给中的值给a a,c c中的值给中的值给b b,a a中的值给中的值给c c,交换后输出,交换后输出a,b,ca,b,c的的值。请填空:值。请填空:main()int a,b,c;_;scanf(“%d%d%d”,_);_;a=b;b=c;_;printf(“a=%d b=%d c=%dn”,a,b,c);2 2、以下程序不借助任何变量把、以下程序不借助任何变量把a a、b b中的值进行交换,中的值进行交换,请填空:请填空:main()int a,b;scanf(“%d%d”,&a,&b);a+=_;b=_;a-=_;prin
46、tf(“%d,%dn”,a,b);3 3、从键盘上输入四个整数,编一程序按大到小的顺、从键盘上输入四个整数,编一程序按大到小的顺序输出四个数。序输出四个数。4 4、按工资高低纳税,已知不同工资、按工资高低纳税,已知不同工资s s的税率的税率p p如下:如下:s1000 p=0%s1000 p=0%1000s2000 p=5%1000s2000 p=5%2000s3000 p=8%2000s3000 p=8%3000s5000 p=10%3000s5000 m=5;switch(m)case 0:p=0;case 1:p=0.05;break;case 2:p=0.08;break;case 3
47、:case 4:p=0.1;break;case 5:p=0.15;break;t=s*p;s1=s-t;printf(“%.2f,%.2f”,t,s1);5、输入一行字符分别统计出其中英文字母、空格、数字、输入一行字符分别统计出其中英文字母、空格、数字、和其他字符的个数。和其他字符的个数。#include main()char c;int le=0,sp=0,di=0,qt=0;while(_!=n)if(c=a&c=A&c=Z)le+;else if(c=)sp+;else if(_)di+;else qt+;printf(le=%d,sp=%d,di=%d,qt=%dn,le,sp,di
48、,qt);6、求数列和,要求累加到最后一项的值小于、求数列和,要求累加到最后一项的值小于0.0001,s=1+1/(1*2)+1/(2*3)+1/(n*(n+1)+main()int n=1;float s=1;while(_)s+=_;n+;printf(“%fn”,s);7、写结果:、写结果:main()int a,b;for(a=1,b=1;a=20)break;if(b%3=1)b+=3;continue;b=b-5;printf(“a=%dn”,a);输出输出:a=88、main()int i,j,x=0;for(i=0;i2;i+)x+;for(j=0;j=4;j+)if(j%2)continue;x+;x+;printf(“x=%dn”,x);X=10