《新C谢丽聪-4程序控制结构》由会员分享,可在线阅读,更多相关《新C谢丽聪-4程序控制结构(175页珍藏版)》请在金锄头文库上搜索。
1、1,第四章 程序控制结构,4.1 C语言的执行语句 4.2 顺序结构 4.3 选择结构 4.4 循环结构,2,4.1 语言的执行语句,程序的结构:,3,C语句可分为以下五类: 1)表达式语句 2)函数调用语句(一般包含在表达式语句中) 3)控制语句 4)复合语句 5)空语句,程序的执行部分是由语句组成的。 程序的功能也是由执行语句实现的。,4,4.1.1 表达式语句,表达式语句由表达式加上分号“;”组成。执行表达式语句就是计算表达式的值。 其一般形式为: 表达式; 例如: x=y+z; y+z; i+; x=0,y=1;,赋值语句,加法运算语句,但计算结果不能保留,无实际意义,自增1语句,i值
2、增1,逗号表达式语句,5,1、赋值语句:,由赋值表达式加上分号“;”构成的表达式语。 语法格式:变量 = 表达式; (1)赋值运算符除“=”外,还包含复合赋值运 算符。例如:a-=a*a; (2)赋值运算符右侧的表达式可以又是一个赋值表达式。例如:a=b=5*3;,等价,a=a-a*a;,等价,a=(b=5*3);,等价,b=5*3; a=b;,6,(3)赋值语句的功能与赋值表达式相同,但性质不同。赋值表达式是一种表达式,它可以出现在任何允许表达式出现的地方,而赋值语句不能出现在表达式中。例如:if (x=y+5) z=x; 语句的功能是,若表达式x=y+5大于0则z=x。if (x=y+5;
3、)0) z=x; 因为x=y+5;是语句,不能出现在表达式中。,合法,不合法,7,(4)赋值表达式的嵌套: 赋值符右边的表达式又是一个赋值表达式: 变量=(变量=表达式); 展开之后的一般形式为:变量=变量=表达式; 例如:a=b=c=d=e=5; 按照赋值运算符的右接合性,等效于:e=5; d=e; c=d; b=c; a=b;,8,(5)变量说明中给变量赋初值和赋值语句的区别: 给变量赋初值是变量说明的一部分,赋初值后的变量与其后的其它同类变量之间仍必须用逗号间隔,而赋值语句则必须用分号结尾。 例如:int a=5,b,c; (6)在变量说明中,不允许连续给多个变量赋初值: 如下述说明是错
4、误的:int a=b=c=5; 而赋值语句允许连续赋值: int a,b,c;a=b=c=5;,9,2、函数调用语句:,函数调用语句由函数名、实际参数加上分号“;”组成。执行函数语句就是调用函数体。 一般形式为: 函数名(实际参数表); 例如: printf(“C Program“); z=x+sin(y);,调用库函数,输出字符串,赋值语句(表达式中包含函数调用),10,4.1.2 空语句,空语句只有分号“;”组成的语句称为空语句。空语句是什么也不执行的语句。 例如while(getchar()!=n);,空语句,本语句的功能是,只要从键盘输入的字符不是回车则重新输入。,11,4.1.3 复
5、合语句,复合语句把多个语句用括号括起来组成的一个语句称复合语句。在程序中应把复合语句看成是单条语句,而不是多条语句。 例如: x=y+z;a=b+c;printf(“%d%d”,x,a);,是一条复合语句。,复合语句内的各条语句都必须以分号“;”结尾,在括号“”外不能加分号。,12,4.1.4 控制语句,控制语句用于控制程序的流程,以实现程序的各种结构方式。可分成以下三类: 1)条件判断语句:if else语句; 2)开关分支语句: switch语句; 3)循环执行语句:do while语句、while语句、for语句; 4)中止循环语句: continue语句、 break语句; 5) 无条
6、件转移语句:goto语句; 6)函数返回语句: return语句。,4.2 顺序结构,按照解决问题的顺序编写相应的语句,程序运行时自上而下依次执行语句 。,14,例1. 输入任意两个整数,求它们的和及平均值。#include void main( ) int num1,num2,sum;float aver;printf(“Please input two integers: n“);scanf(“%d,%d“, 输入: 30000,5005 输出:sum=35005,aver=17502.50,变量定义,输入提示,数据输入,求累计和,求平均值,输出结果,?,sum/2.0,15,例2. 给定
7、一个三位正整数,输出它的个位、十位和百位数。 数字分离方法: 百位数 m2=m/100 十位数 m1=(m-m2*100)/10 个位数 m0=m-m2*100-m1*10个位数 m0=m%10 十位数 m1=(m/10)%10 百位数 m2=m/100,百位:123/100 =1 十位:(123-1*100)/10=2 个位:123-1*100-2*10=3,个位:123%10=3 十位:(123/10)%10=2 百位:123/100=1,16,例2. 给定一个三位正整数,输出它的个位、十位和百位数。 #include void main() int m,m0,m1,m2;scanf(“%
8、d“, 输入:123 输出:1,2,3,个位:m0=123%10=3 十位:m1=(123/10)%10=2 百位:m2=123/100=1,17,例3.取一个16位的二进制数a的7、6、5、4四个位。 如16进制数: a=(a25d)16(1010001001011101)2,1,0,1,0,0,1,0,0,0,1,0,1,0,0,0,0,a4,(04),0000000000000000,1111111111111111,1111111111110000,0000000000001111,18,#include void main() unsigned a,b,c,d;scanf(“%x“,
9、 输入:a25d 输出: a25d5,以十六进制形式输入整数a,以十六进制形式输出a和结果d,右移4位,求低4位,19,表达式可以是任意合法表达式,后面不能加;,4.3 选择结构(if 语句),4.3.1 if语句1、单分支if: if(表达式) 语句语义:如果表达式的值为真,则执行其后的语句,否则不执行该语句。,20,例1:void main()int a,b,max;printf(“n input two numbers: “);scanf(“%d %d“,输入:23 46输出:max=46,此语句用于提示输入,max=23,max=46,21,例2:void main()int a,b,
10、c,t;printf(“n input two numbers: “);scanf(“%d %d %d “ ,输入:1,6,2输出:6 2 1,实现数的互换,功能:输入三个数,按照从大到小顺序输出,22,例3:从键盘输入一个字符,判断它是否小写字母。若是,将其转换成大写字母,否则不进行转换,作后输出该字母。 #include main() char c,a;c=getchar(); if(cz )a=c; if(c=a) a=c-32; printf(“%cn“,a); ,main() char c;c=getchar(); if(c=a)c-=32; printf(“%cn“,c);,判断非
11、小写字母情况,判断小写字母情况,只用一个单分支语句实现,23,2、双分支: if-elseif(表达式) 语句1; else 语句2; 语义:如果表达式的值为真,则执行语句1,否则执行语句2 。,后面不能加;,24,void main()int a, b;printf(“input two numbers: “);scanf(“%d %d“,输入:23 46输出:max=46,输入两个整数,输出其中大数,例4. 例1的改写,25,3、多分支if-else if : if(表达式1)语句1;else if(表达式2) 语句2;else if(表达式3) 语句3; else if(表达式m) 语句
12、m;else 语句n;,语义:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。 如果所有的表达式均为假,则执行语句n。然后继续执行后续程序。,后面不能加;,26,此为真,做语句1,其它语句都不做,27,上面的语句为以下三种格式: 1、空语句 2、一个语句(不引起转移) 3、前后加大括号的语句(复合语句),也叫程序段,如: int a;float b;a=3;b=7.0;,;,允许在复合语句前部定义变量,只能在复合语句中使用,int a; a=3;float b;b=7.0;,变量要在最前面定义,28,ab,t=a; a=b; b=t;,ab,t
13、=a;,a=b; b=t;,使用复合语句,不使用复合语句,N,N,Y,Y,29,#include“stdio.h“void main() 输入:Achar c; 输出:This is a capital letterc=getchar();if(c=0,例5,30,4、在使用if语句中应注意以下问题: 1)在三种形式的if语句中,在if之后均为表达式。 该表达式通常是逻辑表达式或关系表达式, 但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。 例如: if(a=5) 语句;if(b) 语句; 都是允许的。只要表达式的值为非0,即为“真”。 如在: if(a=5);中表达式的值永远为非
14、0,所以其后的语句总是要执行的,当然这种情况在程序中不一定会出现,但在语法上是合法的。,31,又如,有程序段:if(a=b)printf(“%d“,a);elseprintf(“a=0“);本语句的语义是,把b值赋予a,如为非0则输出该值,否则输出“a=0”字符串。这种用法在程序中是经常出现的。,=为赋值运算符,比较运算符为=,32,2)在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。 3)在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用括起来组成一个复合语句。但要注意的是在之后不能再加分号。 例如:if(ab)
15、a+;b+;elsea=0;b=10;,if(ab)a+;b+;;elsea=0;b=10;;,不能写成,33,例如条件语句:if(ab) max=a; else max=b; 可用条件表达式写为: max=(ab)?a:b;,(ab)?max=a:max=b;,(ab)?(max=a): (max=b);,用条件语句实现分支语句功能:,34,例6:计算,方法一: void main( ) float x,y;scanf (”%f ”, ,表达式,成立值为1,y=x3 ? x*x+2 : 3*x+7*x*x;,35,例7:从键盘输入任意的两个实数,按从小到大顺序输出这两个数,请编程实现。 vo
16、id main( ) float a,b;scanf (”%f%f ”,代替,复合语句可以定义变量,实现a与b的互换,36,a=a+b;b=a-b;a=a-bt=a;a=b;b=t,37,例8:计算,方法一: main( ) float x,y;scanf (”%f ”,1=x &可省略吗?,可以,38,方法二:,void main( ) float x,y;scanf (”%f ”, , 、 可省略,y= x1? x :( x10 ? 2*x-1 : 3*x-11);,(、)可省略,39,方法三:,if (x10) if (x1) y=x;else y=2*x-1; else y=3*x-11;,