11:42:57计算机程序设计基础----C语言程序设计贾彩燕计算机与信息技术学院11:42:57教学内容及安排(update)结构化程序设计概述1-2学时程序设计初步1-2学时程序控制结构4学时模块化程序设计4学时构造数据类型6学时指针6学时动态数据结构4学时文件2学时面向对象程序设计2学时从结构化程序设计到面向对象程序设计类和对象继承和派生多太性总复习2学时11:42:571.constant常量2.variable变量3.identify标识符4.keywords关键字5.sign符号6.operator运算符7.statement语句8.syntax语法9.Expression表达式10.initialition初始化11.numberformat数据格式12declaration说明13.typeconversion类型转换14.define、definition定义附录11:42:57引例一从键盘输入两个实数,按照从大到小的顺序输出。选择结构ab打印b,a打印a,b11:42:57第三章程序控制结构选择结构程序设计关系运算和逻辑运算if选择结构switch多分支选择结构程序设计举例循环结构程序设计自增和自减运算符while循环和do-while循环for循环循环嵌套break和continue语句程序设计举例小结11:42:57运算符功能与运算量关系要求运算量个数(单、双、多目)要求运算量类型运算符优先级别结合方向结果的类型学习运算符应注意11:42:57关系运算符种类:====!=结合方向:自左向右优先级别:====!=优先级6(高)优先级7(低)例ca+b//c(a+b)ab!=c//(ab)!=ca==bc//a==(bc)a=bc//a=(bc)关系表达式的值:是逻辑值“真”或“假”,用1和0表示例inta=3,b=2,c=1,d,f;ab(ab)==cb+cad=abf=abc//表达式值1//表达式值1//表达式值0//d=1//f=0关系运算符和表达式11:42:57例若a=0;b=0.5;x=0.3;则a=x=b的值为0例5278在C中是允许的,值为0例inti=1,j=7,a;a=i+(j%4!=0);则a=2例‘a’0结果为‘A’100结果为10关系运算注意(1)11:42:57例注意区分“=”与“==”inta=0,b=1;if(a=b)printf(“aequaltob”);elseprintf(“anotequaltob”);例应避免对实数作相等或不等的判断如1.0/3.0*3.0==1.0结果为可改写为:fabs(1.0/3.0*3.0-1.0)1e-60关系运算注意(2)11:42:57ab!a!ba&&ba||b真假真假假假真真逻辑运算符种类:!&&||逻辑运算真值表C语言中,运算量:0表示“假”,非0表示“真”,运算结果:0表示“假”,1表示“真”,真假假假假假真真假假真真真假真真逻辑运算符和表达式(1)11:42:57!(2)&&(11)||(12)高低例a=x&&x=bab&&xya==b||x==y!a||ab优先级:结合方向:!:从右向左&&:从左向右||:从左向右//(a=x)&&(x=b)//(ab)&&(xy)//(a==b)||(x==y)//(!a)||(ab)逻辑运算符和表达式(2)11:42:57!(2)&&(11)||(12)高低优先级:结合方向:!:从右向左&&:从左向右||:从左向右例a=4;b=5;!aa&&ba||b!a||b4&&0||253&&2||84-!0‘c’&&‘d’值为1值为0值为1值为1值为1值为1//(53)&&2||(8(4-(!0)))值为1逻辑运算符和表达式(3)11:42:57!(2)&&(11)||(12)高低优先级:结合方向:!:从右向左&&:从左向右||:从左向右短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符例a&&b&&c//只在a为真时,才判别b的值;只在a、b都为真时,才判别c的值例a||b||c//只在a为假时,才判别b的值;只在a、b都为假时,才判别c的值例a=1;b=2;c=3;d=4;m=1;n=1;(m=ab)&&(n=cd)//结果m=0,n=1逻辑运算符和表达式(4)11:42:57赋值运算符||(或)&&(与)运算符的优先级关系运算符算术运算符高低!(非)11:42:57if语句(条件选择语句)if语句的三种形式形式一:格式:if(expression)statement;执行过程:exprstatement非0=0例:if(xy)printf(“%d”,x);exprstatement1statement2非0=0形式二:格式:if(expression)statement1;elsestatement2;执行过程:例:if(xy)max=x;elsemax=y;选择型程序设计11:42:57形式三:格式:if(expr1)statement1;elseif(expr2)statement2;elseif(expr3)statement3;…...[elsestatementn];expr1statemnt1非0=0expr2expr3statemntnstatemnt3statemnt2非0非0=0=0执行过程:例:if(salary1000)index=0.4;elseif(salary800)index=0.3;elseif(salary600)index=0.2;elseif(salary400)index=0.1;elseindex=0;选择型程序设计11:42:57如:if(a==b&&x==y)printf(“a=b,x=y”);if(3)printf(“OK”);if(‘a’)printf(“%d”,’a’);if后面的表达式类型任意语句可以是复合语句if(x)if(x!=0)if(!x)if(x==0)例1考虑下面程序的输出结果:#includestdio.hmain(){intx,y;scanf(“%d,%d”,&x,&y);if(xy)x=y;y=x;elsex++;y++;printf(“%d,%d\n”,x,y);}CompileError!说明:11:42:57:一般形式:if(expr1)if(expr2)statement1elsestatement2elseif(expr3)statement3elsestatement4内嵌if内嵌ifif(expr1)if(expr2)statement1elsestatement2内嵌ifif(expr1)if(expr2)statement1elsestatement3内嵌ifif(expr1)statement1elseif(expr3)statement3elsestatement4内嵌ifif语句嵌套11:42:57/*ch3_1.c*/#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);}运行:3,2.5,6.02.50,3.00,6.00例1输入三个实数由从小到大的顺序输出11:42:57/*ch3_2.c*/#includestdio.hmain(){intx,y;printf(Enterintegerx,y:);scanf(%d,%d,&x,&y);if(x!=y)if(xy)printf(XY\n);elseprintf(XY\n);elseprintf(X==Y\n);}运行:Enterintegerx,y:12,23XYEnterintegerx,y:12,6XYEnterintegerx,y:12,12X==Y例2输入两数并判断其大小关系11:42:57例3有一分段函数,请编写程序,按照输入的x值,输出对应的y值。y=-1x00x=01x0/*ch3_3.c*/#includestdio.hvoidmain(){floatx,y;scanf(%f,&x);if(x0)y=-1;elseif(x0)y=1;elsey=0;printf(“y=%f”,y);}运行:3y=1.00000011:42:57例4给一个成绩,要求输出成绩等级。90分及以上为‘A’,80-89分为’B’,70-79分为’C’,60-69分为’D’,60分以下为’E’。运行:78CS=90打印‘A’S=80打印‘B’S=70打印‘C’S=60打印‘D’打印‘E’TFFFFTTT/*ch3_4.c*/#includestdio.hvoidmain(){ints;scanf(“%d”,&s);if(s=90)printf(“A”);if(s=80)printf(“B”);if(s=70)printf(“C”);if(s=60)printf(“D”);elseprintf(“E”);}是否正确?/*ch4_7.c*/#includestdio.hvoidmain(){ints;scanf(“%d”,&s);if(s=90)printf(“A”);elseif(s=80)printf(“B”);elseif(s=70)printf(“C”);elseif(s=60)printf(“D”);elseprintf(“E”);}11:42:57例5使用嵌套结构实现:编写程序,按照输入的x值,输出对应的y值。y=-1x00x=01x0/*ch3_5.c*/#includestdio.hvoidmain(){floatx,y;scanf(%f,&x);if(x=0)if(x0)y=-1;elsey=0;elsey=1;printf(“y=%f”,y);}/*ch3_6.c*/#includestdio.hvoidmain(){floatx,y;scanf(%f,&x);if(x0)y=-1;elseif(x0)y=1;elsey=0;printf(“y=%f”,y);}在if中嵌套在else中嵌套11:42:57一般形式:expr1?expr2:expr3执行过程功能:相当于条件语句,但不能取代一般if语句例if(ab)printf(“%d”,a);elseprintf(“%d”,b);printf(“%d”,ab?a:b);例求a+|b|printf(“a+|b|=%d\n”,b0?a+b:a-b);expr1取expr2值取expr3值非0=0例(a==b)?’Y’:’N’(x%2==1)?1:0(x=0)?x:-x(c=‘a’&&c=‘z’)?c-’a’+’A’:c条件运算符可嵌套如x0?1:(x0?-1:0)优先级:13结合方向:自右向左如ab?a:cd?c:dab?a:(cd?c:d)expr1、expr2、expr3类型可不同,表达式值取较高的类型例x?‘a’:‘b’//x=0,表达式值为‘b’;x‡0,表达式值为‘a’xy?1:1.5//xy,值为1.0;xy,值为1.5条件运算符与表达式11:42:57/*ch3_7.c*/#includestdio.hvoidmain(){inta,b,max;scanf(%d,%d,&a,&b);max=ab?a:b;printf(max=%d\n,max