第5章•5.1C语言语句类型•5.2程序的三种基本结构•5.3if语句•5.4switch语句•5.5while语句•5.6do-while语句•5.7for语句•5.8循环嵌套•5.9break语句和continue语句5.1C语言语句类型•C语句分为5类控制语句函数调用语句表达式语句空语句复合语句空语句只有一个分号(;)的语句(什么也不做)表达式语句语句形式:表达式;例如:a*=10;(a+b*5)20;注意:一个表达式可以成为另一个更复杂的表达式的一部分,而表达式语句则不能。例如:a=b(表达式),可以写(a=b)0a=b;(表达式语句),不可以写(a=b;)0复合语句用一对{}括起来的语句{z=x+y;t=z/100;printf(“%f”,t);}注意:复合语句中最后一个语句中最后的分号不能忽略不写。函数调用语句语句形式:函数名(实参列表);例如:scanf(“%d”,&a);printf(“%d”,a);控制语句用于完成一定的控制功能C语言有9中控制语句:if()else//条件语句,实现选择结构switch//多分支选择语句while()//当型循环语句,实现循环结构dowhile()//直到型循环语句for()//循环语句continue//结束本次循环语句break//中止执行switch或循环语句goto//转向语句return//从函数返回语句5.2程序的三种基本结构•程序的基本结构有三种:(1)顺序结构:各操作步骤顺序执行,是一种最简单的基本结构。(2)选择结构(3)循环结构例交换两个变量的值#includestdio.hvoidmain(){inta=3,b=5,c;printf(“交换前:a=%d,b=%d”,a,b);c=a;a=b;b=c;printf(“交换后:a=%d,b=%d”,a,b);}顺序结构程序设计举例例输入三角形的三边长,求三角形面积。假设:三个边长a,b,c能构成三角形。已知面积公式:area=s=(a+b+c)/2c)-b)(s-a)(s-s(s开始输入三边长计算s计算面积结束#includestdio.h#includemath.hvoidmain(){floata,b,c,s,area;scanf(“%f%f%f”,&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf(“a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n”,a,b,c,s);printf(“area=%7.2f\n”,area);}数学函数库因为要用到其中的sqrt函数运行情况:3.44.55.6↙a=3.40,b=4.50,c=5.60area=7.655.3if语句5.3.1if语句的3种形式•If语句形式if(表达式)语句表达式为条件判断表达式,结果为逻辑值例:if(xy)printf(“%d”,x);表达式语句真(非0)假(0)•if的内嵌语句通常多于一条语句,这时必须使用{}把这些语句括起来,形成复合语句,使其在语法上成为一条单语句•例如:•if(x0)•{•y=1;•z=10;•printf(“y=%d,z=%d\n”,y,z);•}•如果不加{},程序会有什么变化•例:输入一个学生的两门课程考试成绩,如果两门课程成绩均在90分以上,则显示“优秀”。•分析:•输入两门课程的考试成绩(scanf)•判断两门课程成绩是否均在90分以上•如果“是”,则显示“优秀”if•需要定义两个变量x1、x2存放输入的成绩•用scanf接受输入的数据存放到x1、x2中•判断是否是x190并且x290•如果是,则printf(“优秀”);if•#includestdio.h•main()•{•floatx1,x2;•printf(“请输入两门课程的考试成绩:”);•scanf(“%f%f”,&x1,&x2);•if(x190&&x290)•printf(“优秀\n”);•}if-else语句形式if(表达式)语句1else语句2例:if(xy)printf(“%d”,x);elseprintf(“%d”,y);条件语句1语句2YN开始输入a,b输出zabz=az=b结束#includestdio.hvoidmain(){inta,b,z;scanf(“%d,%d”,a,b);if(ab)z=a;elsez=b;printf(“最大数是:%d”,z);}YesNo•例:输入一个英文字母,判断是否为大写字母,若是,则转换成小写字母输出,否则不转换直接输出。•分析:•输入一个英文字母存放在变量ch中•判断ch是否为大写字母•如果是则需要将其转换为小写字母•输出字母•charch;•printf(请输入一个英文字母:);•scanf(%c,&ch);•if(ch='A'&&ch='Z')•ch=ch+32;•else•ch=ch;•printf(%c\n,ch);•例:输入三个整数,将其中最大的整数显示输出。•分析:•输入的三个整数分别放在三个变量a、b、c中。•需要进行两次比较,首先比较a、b谁大,然后用a、b中较大的数再和c比较,因此这里需要有个变量(max)暂时存放a、b中较大的数,并用它来保存最后的最大值。•输入三个数据,放入变量a、b、c中•判断:•如果ab,则max=a,否则max=b;•再判断:•如果maxc,则max=c•inta,b,c,max;•printf(输入三个整数:);•scanf(%d%d%d,&a,&b,&c);•if(ab)•max=a;•else•max=b;•if(cmax)•max=c;•printf(三个数中最大的值为:%d\n,max);if-elseif语句形式:if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3……elseif(表达式m)语句melse语句n3•例:•scanf(“%d”,&grade);•if(grade100||grade0)printf(“error\n”);•elseif(grade=90)score=‘A’;•elseif(grade=80)score=‘B’;•elseif(grade=70)score=‘C’;•elseif(grade=60)score=‘D’;•elsescore=‘E’;例:scanf(“%d”,&grade);if(grade=90&&grade=100)score=‘A’;elseif(grade=80)score=‘B’;elseif(grade=70)score=‘C’;elseif(grade=60)score=‘D’;elseif(grade=0)score=‘E’;•例:求解下面的分段函数并显示结果。•分析:•分段函数中需要用到两个变量x、y•判断x的范围,根据判断结果选择使用哪个公式计算y的值•声明变量x、y•输入x的值•判断:如果x10,则y=2*x;•否则再判断是否x=0并且x=10,如果是,则y=x+1;•否则y=x-10;•输出y的值•intx,y;•printf(请输入x的值:);•scanf(%d,&x);•if(x10)•y=2*x;•elseif(x=0)•y=x+1;•else•y=x-10;•printf(y=%d,y);•例输入某人的身高和体重,根据下面的计算公式判断此人的体重是标准、过胖还是过瘦。•(1)标准体重=(身高-110)公斤;•(2)超过标准体重5公斤为过胖;•(3)低于标准体重5公斤为过瘦。•步骤:•将输入的身高存放到变量h中,体重存放到变量w中•计算标准体重,放到变量bw中(bw=h-110)。•如果w-bw5,则体重过胖,否则进一步进行判断,如果bw-w5,则体重过瘦,否则体重为标准。•#includestdio.h•main()•{•floath,w,bw;•printf(请输入某人的身高和体重(公斤):);•scanf(%f%f,&h,&w);•bw=h-110;•if(w-bw5)•printf(过胖\n);•elseif(bw-w5)•printf(过瘦\n);•else•printf(标准\n);•}•if语句的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套。形式:If(表达式1)if(表达式2)语句1else语句2Elseif(表达式3)语句3else语句4内嵌if•例输入三个数x,y,z,然后按从大到小输出。•如果xy&&xz,说明x最大,应该首先输出,然后判断,如果yz,则接下来应该先输出y然后输出z,否则接下来应该先输出z后输出y。•如果yx&&yz,说明y最大,应该首先输出,然后判断,如果xz,则接下来应该先输出x然后输出z,否则接下来应该先输出z后输出x。•如果以上两种情况都不是,则说明z最大,应该首先输出z的值,然后判断,如果xy,则接下俩应该按照先x后y的顺序输出,否则应该按照先y后x的顺序输出。xy&&xz输出x真yz输出y输出z输出z输出yyx&&yz输出y真xz输出x输出z输出z输出x输出zxy输出x输出y输出y输出x假假假假假真真真•#includestdio.h•main()•{•floatx,y,z;•printf(请输入三个数字:);•scanf(%f%f%f,&x,&y,&z);•printf(三数从大到小为:”);•if(x=y&&x=z)•{•printf(%f\t,x);•if(y=z)•printf(%f\t%f\n,y,z);•else•printf(%f\t%f\n,z,y);•}•elseif(y=x&&y=z)•{•printf(%f\t,y);•if(x=z)•printf(%f\t%f\n,x,z);•else•printf(%f\t%f\n,z,x);•}•else•{•printf(%f\t,z);•if(x=y)•printf(%f\t%f\n,x,y);•else•printf(%f\t%f\n,y,x);•}•}例输入三个数a,b,c,要求按由大到小的顺序输出。Ifab将a和b对换Ifac将a和c对换Ifbc将b和c对换nabacbca和b交换a和c交换c和b交换yyynn#includestdio.hvoidmain(){floata,b,c,t;scanf(“%f,%f,%f”,&a,&b,&c);if(ab){t=a;a=b;b=t;}if(ac){t=a;a=c;c=t;}if(bc){t=b;b=c;c=t;}printf(%5.2f,%5.2f,%5.2f\n,a,b,c);}匹配规则:Else总是与它上面的,最近的,同一复合语句中的,未配对的if语句配对。例:If()if()语句1elseif()语句2else语句3例:If(){if()语句1}elseif()语句2else语句3当if和else数目不同时,可以加花括号来确定配对关系。-1(x0)例有一个函数y=0(x=0),编一程序,输入一个x值,输出y值。1(x0)#includestdio.hvoidmain(){intx,y;scanf(“%d”,&x);{程序段}printf(“x=%d,y=%d\n”,x,y);}上例中的程序段有四个,请判断哪个是正确的?程序1:程序2:if(x0)if(x=0)y=-1;if(x0)y=1;elseelsey=0;if(x==0)y=0;elsey=-1;elsey=1;程序3:程序4:y=-1;y=0;if(x!=0)if(x=0)if(x0)y=1;if(x0)y=1;elsey=0;elsey=-1;正确正确条件运算符和条件表达式•格式:表达式1?表达式2∶表达式3•功能:判断表达式1的值,如果成立就执行表达式2,否则就执行表达式3例:if(