《C语言(基本控制结构).ppt》由会员分享,可在线阅读,更多相关《C语言(基本控制结构).ppt(44页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第2章章C语言的基本控制结构语言的基本控制结构2.3 循环结构 2.2 选择结构 2.1 顺序结构2.1顺序结构顺序结构顺序结构:按照语句的书写顺序依次执行每条语句。顺序结构:按照语句的书写顺序依次执行每条语句。语句:语句:三三.表达式语句表达式语句(操作语句操作语句)a a=3 =3 a=3;a=3;一一.流程控制语句流程控制语句二二.函数调用语句:如函数调用语句:如 printfprintf(););i=i+1 i=i+1 i=i+1;i=i+1;i+;i+;x+y;x+y;四四.空语句空语句 ;五五.复合语句复合语句 z=x+y;z=x+y;t=z/100;t=z/100;printf
2、(printf(“%f%f”,t,t););此处没有分号此处没有分号 赋值运算符与赋值表达式赋值运算符与赋值表达式 赋值运算符:赋值运算符:=右结合右结合 简单赋值简单赋值运算:运算:变量变量=表达式表达式过程:计算、转换、赋值过程:计算、转换、赋值 自反算术赋值自反算术赋值运算运算(复合复合赋值赋值运算运算)+=+=自反加赋值自反加赋值-=-=自反减赋值自反减赋值*=自反乘赋值自反乘赋值/=/=自反除赋值自反除赋值%=%=自反模赋值自反模赋值如:如:a+=3 a=a+3x*=y+8 x=x*=y+8 x=x*x*(y+8)(y+8)多重赋值运算多重赋值运算a=(b=5)a=(b=5)a=b=
3、5a=b=5a=5+(c=6)a=5+(c=6)c c的值为的值为6 6,a a的值为的值为1111,表达式的值为,表达式的值为11112.2选择结构选择结构选择结构是指根据某些数据的取值或计算结果选择结构是指根据某些数据的取值或计算结果选取不同操作的处理方式。选取不同操作的处理方式。选择结构的描述由两个基本部分组成,一是对选择结构的描述由两个基本部分组成,一是对选择条件的描述;二是对处理分支的描述。选择条件的描述;二是对处理分支的描述。2.2.1 2.2.1 关系运算与逻辑运算关系运算与逻辑运算运算符运算符 功能功能 大于大于 =大于等于大于等于 小于小于 =ca=bc用关系运算符将两个表达
4、式连接起来的式子用关系运算符将两个表达式连接起来的式子优先级:算术优先级:算术 关系关系 赋值赋值 高高低低 a=(bc)a=(bc)a=bca=bc a=(bc)a=(b32如:如:a=3a=3,b=2,c=1b=2,c=1则:则:(ab)=cab)=cd=abd=abd d 的值为的值为1 1f=abcf=abcab ab 的值为的值为1 111c c 的值为的值为0 0f f 的值为的值为0 0值为值为1 1 逻辑运算符逻辑运算符&、|双目运算符,如双目运算符,如 a&ba&b ,左结合左结合&、|的优先级低于关系运算符,的优先级低于关系运算符,!高于高于算术运算符算术运算符&与,与,|
5、或,或,!非非如:如:(!(!a)|(ab)a)|(ab)!a|ab!a|ab(ab)&(xy)(ab)&(xy)ab&xyab&xy!单目运算符,如单目运算符,如 !a a ,右结合右结合判断一个量是否为真时,非判断一个量是否为真时,非0 0为真,为真,0 0为假为假 逻辑表达式逻辑表达式逻辑表达式的值:逻辑表达式的值:1 1 或或 0 0如:如:a=4,!aa=4,!a值为值为0 0a=4,b=5,a&ba=4,b=5,a&b值为值为1 1a|ba|b值为值为1 1!a|ba|b值为值为1 14&0|2 4&0|2 值为值为1 1注意:不是所有的运算符都被执行注意:不是所有的运算符都被执行
6、如:如:a&b&ca&b&ca|b|ca|b|c如已知:如已知:a=1,b=2,c=3,d=4,m=1,n=1a=1,b=2,c=3,d=4,m=1,n=1则:则:(m=ab)&(n=cd)m=ab)&(n=cd)m=0,n=cd m=0,n=cd 不被执行,不被执行,n=1n=1例如:例如:x=0&y+x=0&y+如果如果x x小于小于0 0,将不计算,将不计算y+y+。例如:例如:x=0|y+x=0|y+如果如果x x大于或等于大于或等于0 0,将不计算,将不计算y+y+注意:数学上的注意:数学上的axb不同于不同于C中的中的a=x=b如:如:a=0,b=0.5,x=0.3a=0,b=0.
7、5,x=0.3正确表示:正确表示:a=x&x=b结果为结果为1a=x=b 1=b a=x=b 1=b 结果为结果为0 02.2.2 if2.2.2 if语句语句 lif(if()if(if()else else if(3)if(3)printf printf(“OK”);(“OK”);if(a)if(a)printfprintf(“%d”,a);(“%d”,a);说明:说明:1.1.表达式结果非表达式结果非0 0即为真即为真2.2.在每个分支语句后面有一分号在每个分支语句后面有一分号3.3.ifif和和elseelse后面可以只含一个内嵌的操作语句,后面可以只含一个内嵌的操作语句,也可以是一个
8、复合语句也可以是一个复合语句 例例1:P37分析整数绝对值的计算过程。分析整数绝对值的计算过程。#includemain()intinput,output;printf(“nEnterainteger:”);scanf(“%d”,&input);if(input0)/*判断判断input是否小于是否小于0*/output=-input;elseoutput=input;printf(“ABS(%d)=%dn”,input,output);例:例:输入输入3 3个整数,按由小到大顺序输出。个整数,按由小到大顺序输出。#include include.hvoid main()void main()
9、intint a,b,c,t;a,b,c,t;scanfscanf(“%d%d%d”,&a,&b,&c);(“%d%d%d”,&a,&b,&c);if(ab)if(ab)t=a;a=b;b=t;t=a;a=b;b=t;if(ac)if(ac)t=a;a=c;c=t;t=a;a=c;c=t;if(bc)if(bc)t=b;b=c;c=t;t=b;b=c;c=t;printfprintf(“%d,%d,%d”,a,b,c);(“%d,%d,%d”,a,b,c);输入:输入:3 7 13 7 1输出:输出:1,3,71,3,7Y 交换交换a a、b b ababN Y 交换交换a a、c c aca
10、cN Y 交换交换b b、c c bcbcN#includemain()intx,y;printf(“nEnter2integers:”);scanf(“%d%d”,&x,&y);if(x0)if(y0)printf(“Iquadrantn”);elseprintf(“VIquadrantn”);elseif(y0)printf(“IIquadrantn”);elseprintf(“IIIquadrantn”);P38例例2:输入坐标点,判断该坐标点处于第几象限输入坐标点,判断该坐标点处于第几象限 。内层嵌套的内层嵌套的if语句语句内层嵌套的内层嵌套的if语句语句1.输入坐标点输入坐标点x,y
11、2.如果如果x0 且且y0第第1象限象限 否则第否则第4象限象限3.否则:否则:如果如果y0第第2象限象限 否则第否则第3象限象限例:当输入不同字符时,通过多分支选择结构,例:当输入不同字符时,通过多分支选择结构,显示该字符所属的种类显示该字符所属的种类#include void main()char c;printf(“Enter a character:”);c=getchar();if(c=0&c=A&c=a&c=z)printf(“The character is a lower lettern”);else printf(“is other charactern”);ifif(条件条
12、件1 1)语句语句1 1else ifelse if(条件条件2 2)语句语句2 2else ifelse if(条件条件m m)语句语句m melse else 语句语句nn格式:格式:switchswitch(表达式)表达式)case case 常量常量1 1:语句序列语句序列 break;break;case case 常量常量2 2:语句序列语句序列 break;break;case case 常量常量n n:语句序列语句序列 break;break;defaultdefault:语句序列语句序列 break;break;breakbreak的作用:终止当前语句的执行,的作用:终止当前
13、语句的执行,跳出跳出switchswitch结构结构 首先计算首先计算表达式,将该表达式,将该值与每个值与每个casecase后的常量进行后的常量进行比较;如果等比较;如果等于某个常量,于某个常量,则执行该则执行该casecase后的语句序列,后的语句序列,直到直到switchswitch结结束;如果该值束;如果该值与每个与每个casecase常常量都不相同,量都不相同,则执行则执行defaultdefault后的语句序列。后的语句序列。2.2.3 2.2.3 多路选择和多路选择和switchswitch语句语句每个每个casecase后面的常量不能相同。后面的常量不能相同。例:读入例:读入1
14、 1 7 7之间的某个数,之间的某个数,输出表示一星期中相应某输出表示一星期中相应某一天的单词。一天的单词。#include include.hmain()main()intint number;number;printfprintf(“EnterEnter int int number:number:”););scanfscanf(“%d%d”,&number);,&number);switch(number)switch(number)case case 1 1:printf printf(“MondaynMondayn”);break;);break;case case 2 2:prin
15、tf printf(“TuesdaynTuesdayn”);break;);break;case case 3 3:printf printf(“WednesdaynWednesdayn”);break;);break;case case 4 4:printf printf(“ThursdaynThursdayn”);break;);break;case case 5 5:printf printf(“FridaynFridayn”);break;);break;case case 6 6:printf printf(“SaturdaynSaturdayn”);break;);break;ca
16、se case 7 7:printf printf(“SundaynSundayn”);break;);break;default:default:printf printf(“ErrornErrorn”););#include include.hmain()main()char c;char c;scanfscanf(“%c”,&c);(“%c”,&c);printf printf(“(“nItnIts a”);/*s a”);/*用用输出撇号输出撇号*/*/switch(c)switch(c)case 0:case 0:case 1:case 1:case 9:case 9:printf
17、printf(“(“digiterdigiter.n”);break;.n”);break;case :case :case n:case n:case t:case t:printf printf(“white.n”);break;(“white.n”);break;default:default:printf printf(“char.n”);break(“char.n”);break 例:判断由键盘输入的字符是数字、字母,还是空格。例:判断由键盘输入的字符是数字、字母,还是空格。允许几种允许几种case执行相同的执行相同的语句序列语句序列#include include .hmain()
18、main()double a,b,c;double a,b,c;char op;char op;printfprintf(“n Enter a expression n Enter a expression”););scanfscanf(“%lf%c%lf%lf%c%lf”,&a,&op,&b);,&a,&op,&b);switch(op)switch(op)case case +:c=a+b;break;:c=a+b;break;case case -:c=a :c=a b;break;b;break;case case *:c=a*b;break;:c=a*b;break;case cas
19、e /:c=a/b;break;:c=a/b;break;default :default :printfprintf(“Input ErrornInput Errorn”););break;break;printfprintf(“%lf%c%lf=%lfn%lf%c%lf=%lfn”,a,op,b,c);,a,op,b,c);P41 P41 例例3 3:输入一个格式为输入一个格式为 x+y x+y 的二元算术运算表达式,的二元算术运算表达式,输出这个表达式的计算结果。输出这个表达式的计算结果。Enter a expression Enter a expression 4.3-2.04.300
20、000-2.000000=2.300000例例4 4(自学):(自学):通过键盘读取两个复数和运算符,完成复通过键盘读取两个复数和运算符,完成复数运算的操作,并输出计算的结果。数运算的操作,并输出计算的结果。#includemain()doublea,b,c,d,r,i,t;charop;/*保存运算符保存运算符*/printf(“nEnterthefirstcomplexnumber:”);scanf(“%lf%lf”,&a,&b);printf(“nEnterthesecondcomplexnumber:”);scanf(“%lf%lf”,&c,&d);getchar();printf(“
21、nEnteraoperator:”);scanf(“%c”,&op);/*输入运算符输入运算符*/switch(op)/*检查运算符检查运算符*/见下页见下页printf(“Theresultis%lf+%lfin”,r,i);case+:r=a+c;i=b+d;break;case-:r=ac;i=bd;break;case*:r=a*cb*d;i=b*c+a*d;break;case/:t=c*cd*d;if(t=0)printf(“Thedenominatoris0.n”);return0;r=(a*c+b*d)/t;i=(b*ca*d)/t;break;default:printf(“
22、Invalidationoperator.n”);return0;2.3 2.3 循环结构循环结构 2.3.1 while 2.3.1 while 语句语句 格式:格式:while(while()条件条件语句语句非非00例例:求求#include include.hvoid main()void main()intint i,sum=0;i,sum=0;i=1;i=1;while(i=100)while(i=100)sum=sum+i;sum=sum+i;i+;i+;printfprintf(“%d”,sum);(“%d”,sum);循环体循环体注意:循环体为多个语句时,必须用大括号括注意:循
23、环体为多个语句时,必须用大括号括起来构成复合语句,否则循环范围只到起来构成复合语句,否则循环范围只到while后后面的第一个分号处。面的第一个分号处。P45P45例例5 5:从键盘输入从键盘输入1010个整数,计算它们的平均值个整数,计算它们的平均值#includemain()intsum=0,i=1;intx;/*保存当前输入的数据保存当前输入的数据*/printf(“nEnter10integers:”);while(i=10)scanf(“%d”,&x);/*读入整数读入整数x*/i+;/*累加已输入的数据个数累加已输入的数据个数*/sum=sum+x;/*累加输入的数据总和累加输入的数
24、据总和*/printf(“Theaveragevalueis%lfn”,sum*1.0/(i-1);2.3.22.3.2 for循环语句循环语句格式:格式:for(初值表达式初值表达式;条件表达式;条件表达式;增量表达式增量表达式)循环体语句循环体语句12345真真假假初值表达式:初值表达式:给循环变量赋初值。给循环变量赋初值。条件表达式:条件表达式:循环的条件,循环的条件,决定决定循环是否继续。循环是否继续。增量表达式:增量表达式:改变循环变量的值,改变循环变量的值,给循环变量增加一个定量(步长)给循环变量增加一个定量(步长)。main()main()intint i,n,sum=0;i,n
25、,sum=0;scanfscanf(“%d%d”,&n);,&n);for(i=1;i=n;i+)for(i=1;i=n;i+)sum=sum+i;sum=sum+i;printfprintf(“sum=%dnsum=%dn”,sum);,sum);用用whilewhile实现:实现:i=1;i=1;while(i=n)while(i=n)sum=sum+i;sum=sum+i;i+;i+;例求例求P47P47例例6 6:从键盘读入从键盘读入5 5个字符,找出其中个字符,找出其中ASCIIASCII值最大的值最大的字符,并将该字符输出字符,并将该字符输出1010次。次。#includemain
26、()inti,x,max=0;for(i=0;imax)max=x;for(i=0;i10;i+)putchar(max);#include include.h#define N 10#define N 10main()main()intint score,i,max,min;score,i,max,min;max=0;min=100;max=0;min=100;float sum=0;float sum=0;for(i=1;i=N;i+)for(i=1;imax)max=score;if(scoremax)max=score;if(scoremin)min=score;if(scoremin
27、)min=score;printfprintf(“Canceled max score:%dn”,max);(“Canceled max score:%dn”,max);printfprintf(“Canceled min score:%dn”,min);(“Canceled min score:%dn”,min);printfprintf(“Average score:%fn”,(sum-max-min)/(N-2);(“Average score:%fn”,(sum-max-min)/(N-2);大奖赛评分程序大奖赛评分程序:去掉一个最高分和去掉一个最高分和一个最低分,计算一个最低分,计算
28、平均分。平均分。说明:说明:1.1.for(for(;条件表达式条件表达式;)表达式表达式 1 1、3 3 可省,可省,但分号不能省但分号不能省2.i=1;2.i=1;for(;i=n;i+)for(;i=n;i+)for(i=1;i=n;i+)for(i=1;i=n;i+)3.3.表达式表达式 1 1、3 3 省略省略 i i=1;=1;for(;i=n;)for(;i=n;)sum=sum+i;sum=sum+i;i+;i+;2.3.3dowhile语句语句 格式:格式:do do 循环体语句循环体语句 while(while(条件表达式条件表达式 ););例求例求main()main()
29、intint i,sum=0;i,sum=0;i=1;i=1;do do sum=sum+i;sum=sum+i;i+;i+;while(i=100)while(i=100);printfprintf(“%d”,sum)(“%d”,sum);#include include“stdiostdio.h.h”main()main()char c;char c;do do c=c=getchargetchar();();putcharputchar(c);(c);while(c!=while(c!=nn);例:将输入的字符原样输出例:将输入的字符原样输出P48P48例例7 7:从键盘输入一行字符,统
30、计其中包含的数字字从键盘输入一行字符,统计其中包含的数字字符个数,并输出。符个数,并输出。#includemain()intch,num=0;printf(“Enteralinetext:”);doch=getchar();if(9=ch&ch=0)num+;while(ch!=n);printf(“num=%dn”,num);例:输入一串数字,要求以相反的顺序将它们输出例:输入一串数字,要求以相反的顺序将它们输出#include include“stdiostdio.h.h”main()main()intint number,right;number,right;printfprintf(“
31、Enter your number:n”);(“Enter your number:n”);scanfscanf(“%d”,&number);(“%d”,&number);do right=number%10;do right=number%10;printfprintf(“%d”,right);(“%d”,right);number=number/10;number=number/10;while(number!=0);while(number!=0);printfprintf(“n”);(“n”);执行情况:执行情况:Enter your number:12345 54321第二次:第二次
32、:Enter your number:0 0P49P49例例8 8:输入一个整数:输入一个整数n n,打印输出一个由打印输出一个由n n行字符星行字符星号号*组成的等边三角形;组成的等边三角形;例如,当输入例如,当输入4 4时,输出如下所示的三角形:时,输出如下所示的三角形:*行号行号 1 1 空格数:空格数:3 星号数星号数:1 *_*_*行号行号 2 2 空格数:空格数:2 星号数星号数:2 *_*_*_*_*行号行号 3 3 空格数:空格数:1 星号数星号数:3 *_*_*_*_*_*_*行号行号 4 4 空格数:空格数:0 星号数星号数:4 行行号号 i 空格数:空格数:n-i 星号数
33、星号数:i#includemain()intn,i,j;printf(“Enterthesideofthetriangle:”);scanf(“%d”,&n);for(i=1;i=n;i+)/*循环循环n次,输出次,输出n行行*/for(j=1;j=n-i;j+)/*循环循环n-i次,输出次,输出n-i个个空格空格*/putchar();for(j=1;j=i;j+)/*输出个输出个i星号星号*/putchar(*);if(j!=i)/*如果不是最后一个星号则输出如果不是最后一个星号则输出_*/putchar(_);putchar(n);*_*_*_*_*_*_*_*_*_*_*_*_*第第i
34、行:行:空格数:空格数:n-i 星号数星号数:i语法小结分支结构分支结构1.1.if-elseif-else语句语句 若:若:else分结构为空,分结构为空,else分结构及分结构及else可可省省变为:变为:ifif(条件)语句条件)语句if(if(表达式表达式)语句语句1 1 (ifif分结构)分结构)else else 语句语句2 2 (elseelse分结构)分结构)2.2.switchswitch结构结构 switchswitch(表达式)表达式)case case 常量表达式常量表达式1 1:语句表列语句表列 break;break;case case 常量表达式常量表达式2 2:
35、语句表列语句表列 break;break;case case 常量表达式常量表达式n n:语句表列语句表列 break;break;defaultdefault:语句表列语句表列 break;break;语法小结forfor循环语句的语法规则循环语句的语法规则for(表达式表达式1;表达式;表达式2;表达式;表达式3)循环体循环体表达式表达式1:用于给定循环变量的初值用于给定循环变量的初值表达式表达式2:用于决定是否还继续循环执行用于决定是否还继续循环执行表达式表达式3:用于改变循环变量的值用于改变循环变量的值表达式表达式1 1循环体循环体表达式表达式2表达式表达式3 3YN思考?循环体有可能
36、一次都不执行吗?思考?循环体有可能一次都不执行吗?while循环的语法格式:循环的语法格式:while(表达式表达式)循环体循环体do.while循环的语法格式:循环的语法格式:do循环体循环体while(表达式表达式);表达式表达式循环体循环体YN表达式表达式循环体循环体YNwhilewhile和和do.whiledo.while循环语句的语法规则循环语句的语法规则while语句语句先先判断,判断,后后执行循环体执行循环体do.while语句语句先先执行循环体,执行循环体,后后做判断做判断=while语句的语句的循环体有可能一次也不执行循环体有可能一次也不执行do.while语句的语句的循环体至少执行一次循环体至少执行一次whilewhile和和do.whiledo.while循环语句的区别循环语句的区别