




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Q南大附中有南大附中有4位同学中的一位做了好事,不留名,位同学中的一位做了好事,不留名,表扬信来了之后,校长问这表扬信来了之后,校长问这4位是谁做的好事。位是谁做的好事。QA说:不是我。说:不是我。QB说:是说:是C 。QC说:是说:是D 。QD说:他胡说。说:他胡说。Q已知已知3个人说的是真话,一个人说的是假话,现在个人说的是真话,一个人说的是假话,现在要根据这些信息,找出做好事的人要根据这些信息,找出做好事的人Q5.1.1关系运算符:关系运算符:,=,= 高高=,!= 低低 优先级:高于赋值运算符,低于算术运优先级:高于赋值运算符,低于算术运算符算符 结合方向:自左向右结合方向:自左向右
2、5.1.2关系表达式的一般格式:关系表达式的一般格式:变量变量1 关系运算符关系运算符 变量变量2#include main() printf(32的逻辑值是的逻辑值是%dn,32);printf(3=2的逻辑值是的逻辑值是%dn,3=2);printf(3=2的逻辑值是的逻辑值是%dn,3=2);printf(32的逻辑值是的逻辑值是%dn,32);printf(3=2的逻辑值是的逻辑值是%dn,3=2);printf(3!=2的逻辑值是的逻辑值是%dn,3!=2);Q关系表达式的值两种:关系表达式的值两种: “真真”(非非0) 即为即为1 “假假”(0) 即为即为0Q定义字符型变量定义字符
3、型变量为了完成任务为了完成任务4.1,将,将4个人所说的个人所说的4句话写成关句话写成关系表达式。为此,要定义一种字符型变量。这系表达式。为此,要定义一种字符型变量。这里用里用thisman表示要寻找的做了好事的人。表示要寻找的做了好事的人。char thisman=;Q让让“”在这里的含义为在这里的含义为“是是”,Q让让“!”在这里的含义为在这里的含义为“不是不是”说话人说话人说的话说的话写成关系表达写成关系表达式式A“不是我不是我”thisman!=AB“是是C”thisman=“C”C“是是D”thisman=“D”D“他胡说他胡说”thisman!=“D”Q在在C中字符在存储单元中是以
4、中字符在存储单元中是以ASCII码形码形式存放的因此式存放的因此thisman=A 或或thisman=65这两个赋值语句都是等效的这两个赋值语句都是等效的如:如:printf(65=A-关系表达式的值为关系表达式的值为%dn,65=A);Q结合任务结合任务4.1分析,分析,A,B,C,D4个人,只有个人,只有一位是做好事者。令一位是做好事者。令做好事者为做好事者为1,未做,未做好事者为好事者为0,可以有,可以有如下如下4种情况:种情况:状状态态ABCD11000201003001040001状态状态赋值表达式赋值表达式1thisman=A2thisman=B3thisman=C4thisma
5、n=DQ显然第一种情况是假定显然第一种情况是假定A是做好事者,第二是做好事者,第二种情况是假定种情况是假定B是做好事者,。是做好事者,。Q所谓所谓枚举枚举:是按照这:是按照这4种假定逐一地去测试种假定逐一地去测试4个人的话有几句是真话,如果不满足个人的话有几句是真话,如果不满足3句句为真,就否定掉这一假定,换下一个状态为真,就否定掉这一假定,换下一个状态再试。再试。Q具体做法如下:具体做法如下:状态状态说的话说的话关系表达式关系表达式 值值Athismanthisman!=!=A;A;A!=A0Bthismanthisman=C;C;A=c0Cthismanthisman=D;D;A=D0DT
6、hismanThisman!=!=D;D;A!=D14个关系表达式值的和为个关系表达式值的和为1不为不为3,显然不是,显然不是A做的好事!做的好事!状态状态说的话说的话关系表达式关系表达式 值值Athismanthisman!=!=A;A;B!=A1Bthismanthisman=C;C;B=c0Cthismanthisman=D;D;B=D0DThismanThisman!=!=D;D;B!=D14个关系表达式值的和为个关系表达式值的和为2不为不为3,显然不是,显然不是B做的好事!做的好事!状态状态说的话说的话关系表达式关系表达式 值值Athismanthisman!=!=A;A;C!=A1
7、Bthismanthisman=C;C;C=c1Cthismanthisman=D;D;C=D0DThismanThisman!=!=D;D;C!=D14个关系表达式值的和为个关系表达式值的和为3,就是,就是C做的好事!做的好事!Q综上所述,一个人一个人去试,就是枚举。综上所述,一个人一个人去试,就是枚举。Q从编写程序来看,实现枚举最好用从编写程序来看,实现枚举最好用循环结循环结构。构。Q5.3.1 使用循环结构的部分程序:使用循环结构的部分程序:for(k=1;k=4;k=k+1)thisman=64+k; sum=(thisman!=A)+(thisman=C)+(thisman=D)+(
8、thisman!=D);Qfor语句的格式为:for(表达式(表达式1;表达式;表达式2;表达式;表达式3)循环体(语句组)循环体(语句组)Qfor语句的执行过程,见下图求解表达式求解表达式1测试表达式测试表达式2执行循环语句执行循环语句求解表达式求解表达式3执行执行for的下一条语句的下一条语句真假(1)求解表达式)求解表达式1,置循环控制变量的初值。,置循环控制变量的初值。(2)测试表达式)测试表达式2,测试是否为到循环控制变量,测试是否为到循环控制变量的终值。的终值。如果表达式如果表达式2的值为真,则执行(的值为真,则执行(3)如果表达式如果表达式2的值为假,则推出循环转(的值为假,则推
9、出循环转(5)(3)执行循环体语句组之后转()执行循环体语句组之后转(4)(4)求解表达式)求解表达式3,让循环控制变量增值或减值,让循环控制变量增值或减值,再转(再转(2)(5)执行下一条语句。)执行下一条语句。Q 1.求自然数求自然数1100之和之和#include void main()int i=0,sum=0;for (i=1;i=100 ;i=i+1 )sum=sum+i;printf(自然数自然数1100之和为之和为%dn,sum);Q(1)将原来的将原来的for(i=1;i=100;i=i+1)修改为修改为: for(i=1;i=100;i=i+2)问问:这是哪些自然数在求和这
10、是哪些自然数在求和,答案是多少答案是多少?Q(2)将原来的将原来的for(i=1;i=100;i=i+1)修改为修改为:for(i=1;i=100000;i=i+1)执行程序能够得到正确结果吗执行程序能够得到正确结果吗?如果不能如果不能,自己想办自己想办法解决法解决.Q(2)求10的阶乘Q思路:将10!展开为10*9*8*7*6*5*4*3*2*1.让整型变量i去表示10,9,1.让长整型变量sum来表示乘积,初始时让其为1将求10的阶乘考虑成累乘问题,让i=10去乘sum再将乘积存至sum中,即sum=sum*i,之后,让i=i-1,再永上式累乘,不断地反复做这两个运算,从i=10i=1.就
11、完成了求10!的任务.恰好计算机擅长做这种重复操作.for为最佳选择!循环体控制变量i就是数字10,9,1.i的初值为10,终值为1./*程序名: ex5-4.c*/*主要功能:计算10的阶乘*/#include void main()int i=0,j=0,k=0;long sum=1;for (i=10;i=1 ;i- )printf(i=%d,i);sum=sum*i; /*每一步乘积*/printf(tsum=%ldn,sum); /*显示每一步乘积显示每一步乘积*/for(j=1;j=5500;j+); /*用用for循环延迟时间循环延迟时间*/for (k=1;k=10000;k+
12、; ) /*用用for循环延迟时间循环延迟时间*/printf(10!=%ldn,sum); /*显示运算结果显示运算结果*/Q为了完成任务为了完成任务5.1,光有循环结构不行光有循环结构不行,还要有判断是还要有判断是否已经有否已经有3个人的话是真话的分支结构个人的话是真话的分支结构.Q这个程序段如下这个程序段如下:if(sum=3)printf(“this man is %cn”,64+k); /*输出做好事的人输出做好事的人*/g=1; /*将本题的有解标志置为将本题的有解标志置为1*/Q1.第一种情况第一种情况:if(表达式表达式) 语句语句1;/*如果表达式为真如果表达式为真,则只执行
13、语句则只执行语句1;否则什么都不做否则什么都不做*/Q2.第二种情况第二种情况:if(表达式表达式)语句块语句块1; /*如果表达式为真如果表达式为真,则执行语句块则执行语句块1(多条语句多条语句)的内的内容容;否则什么都不做否则什么都不做*/ Q 3.第三种情况第三种情况:if(表达式表达式) 语句语句1;else语句语句2; /*如果表达式为真如果表达式为真,则执行语句则执行语句1否则执行语句否则执行语句2*/Q 4.第第4种情况种情况:if(表达式表达式)语句块语句块1;else 语句块语句块2; /*如果表达式为真如果表达式为真,则执行语句块则执行语句块1否则执行语句块否则执行语句块2
14、*/main( ) int x, y; scanf(“%d”,&x); if(x0) y= -1; else if(x=0) y=0; else y=1; printf(“x=%d, y=%dn”,x,y); -1 (x0)用不同方法编程,判正确与否用不同方法编程,判正确与否输入:输入: -1234 0 756 输出:输出:x= -1234, y= -1 x=0, y=0 x=756, y=1例例: 有一符号函数有一符号函数for(k=1;k=4;k+)被试者被试者thisman=64+k;sum=(被试者被试者thisman!=A)+ (被试者被试者thisman= =C)+ (被试者被试者
15、thisman= =D)+ (被试者被试者thisman!=D);SUM= =3真假真假g!=1输出该被试者;有解标志g1;输出无解信息;Q第一块是循环结构,功能是产生被试对象,第一块是循环结构,功能是产生被试对象,依次为,并测试句话有依次为,并测试句话有多少句为真,如果有多少句为真,如果有3句为真,则可确定做句为真,则可确定做好事者,同时置有解标志为好事者,同时置有解标志为1.Q第二块是分支结构,功能是判断是否无解,第二块是分支结构,功能是判断是否无解,如果为真,则输出无解信息如果为真,则输出无解信息Q细看,在第一块的循环体中有两小块组成,细看,在第一块的循环体中有两小块组成,第一小块由两条
16、赋值语句构成,第二小块第一小块由两条赋值语句构成,第二小块含一分支语句含一分支语句Q 程序一程序一/*程序名:程序名:ex5-5.c*/*功能:谁做的好事判断功能:谁做的好事判断*/#include void main()int k=0,sum=0,g=0;char thisman=c;for(k=1;k=4;k=k+)thisman=64+k;sum=(thisman!=A)+(thisman=C)+(thisman=D)+(thisman!=D);if(sum=3)printf(做好事者为做好事者为%cn,64+k);g=1;if(g!=1)printf(cant found!);运行结果
17、:做好事者为运行结果:做好事者为CQ 程序二程序二/*程序名:程序名:ex5-6.c*/*功能:谁做的好事判断功能:谁做的好事判断*/#include void main()int k=0,sum=0,g=0;for(k=1;k=4;k=k+)sum=0;/*循环体内初始化循环体内初始化*/if(k!=1) sum=sum+1; /*如如A的话为真,则让的话为真,则让sum加加1*/if(k=3) sum=sum+1; /*如如B的话为真,则让的话为真,则让sum加加1*/if(k=4) sum=sum+1; /*如如C的话为真,则让的话为真,则让sum加加1*/if(k!=4) sum=su
18、m+1; /*如如D的话为真,则让的话为真,则让sum加加1*/ if(sum=3)printf(做好事者为做好事者为%cn,64+k);g=1;if(g!=1)printf(cant found!);/*程序名:程序名:ex5-7.c*/*功能:谁做的好事判断功能:谁做的好事判断*/#include void main()int k=0,g=0;for(k=1;ky & c例:例:main( ) int a= -5,i,j,k,l,m; float b=0.01; i= !a;j=a & b; k= a | | b; l=(5 3 & 2 | | 84- !0); m= a 9 ; prin
19、tf (“i=%d,j=%d,k=%d, l=%d, m=%dn”, i, j, k,l, m); 运行结果:运行结果: i=0, j=1, k=1, l=1, m=0在在计算逻辑表达式计算逻辑表达式过程中,并过程中,并不一定不一定需要需要计算所有逻辑计算所有逻辑运算符运算符。只要能确定表达式的逻辑值,即结束表达式计算只要能确定表达式的逻辑值,即结束表达式计算。 (1) 逻辑与运算符:逻辑与运算符: &如有逻辑表达式:如有逻辑表达式:a & b & c执行过程是:执行过程是:当当a为为0时,时,b和和c不用再判断不用再判断了,了, 逻辑与运算符将不再执行,结果为逻辑与运算符将不再执行,结果为0
20、,否则还要继续后边的运算。否则还要继续后边的运算。 abc 0(假)假)非非0(真)真)0(假假)非非0(真)真)1(真)(真)0(假假)0(假假)(2) 逻辑或运算符:逻辑或运算符:| | 如有逻辑表达式:如有逻辑表达式:a | | b | | c 执行过程是:执行过程是: 当当a为非为非0时,时,b和和c不用再判断不用再判断了,逻辑或运算符将不了,逻辑或运算符将不 再执行,其结果为再执行,其结果为1,否则继续执行后面的运算。,否则继续执行后面的运算。 abc0非非0(真)真)非非0(真真)非非0(真真)0(假)(假)1(真真)0例:例:main( ) int a, b=0, c=0, d=
21、0; scanf(“%d”,&a); d = a & (b=5) & (c=3); printf (“a=%d, b=%d, c=%d, d=%dn”, a, b, c, d); 输入:输入: 1 输出:输出:a=1, b=5, c=3, d=1 0 a=0, b=0, c=0, d=0 例例: main( ) int a, b=0, c=0, d=0; scanf(“ %d”,&a); d=a | | (b=5) | | (c=3) ; printf (“a=%d, b=%d, c=%d, d=%d, n”,a, b, c, d); 输入:输入: 1 输出:输出:a=1, b=0, c=0,
22、 d=1 0 a=0, b=5, c=0, d=1在在C中,中,巧妙地使用逻辑表达式巧妙地使用逻辑表达式,可以表示一个复杂的问题,可以表示一个复杂的问题 如:关于闰年问题:符合下列条件之一,均为闰年。如:关于闰年问题:符合下列条件之一,均为闰年。 (1)能被)能被4整除并且不能被整除并且不能被100整除整除 (2)能被)能被4整除并且能被整除并且能被400整除整除 其逻辑表达式为:其逻辑表达式为: (year % 4=0 & year % 100!=0) | | (year % 400=0 & year % 4=0)由于能被由于能被400 整除的年份一定能被整除的年份一定能被4 整除,所以可省
23、去后一部分,整除,所以可省去后一部分,即:即: (year % 4 = =0 & year % 100 != 0) | | (year % 400 =0 ) 若判断非闰年,只在闰年表达式前加若判断非闰年,只在闰年表达式前加 ! , 即:即: !(year % 4 = = 0 & year % 100 != 0) | | ( year % 400 = = 0)Q将案情的每一条写成将案情的每一条写成逻辑表达式逻辑表达式,从第从第1到到第第6条依次用条依次用cc1,cc6表示表示.cc1: A和和B至少有一个至少有一个人作案人作案.令令A变量表示变量表示A作案作案,B变量表示变量表示B作案作案.显然
24、这是显然这是或或的关系的关系.因此因此有有:CC1=(A|B)ABCC1000101011111Qcc2: A和和D不可能是不可能是同案犯同案犯.A如果是案犯如果是案犯,D一定一定不是案犯不是案犯,写成写成 A&(!D)D如果是案犯如果是案犯,A一定一定不是案犯不是案犯,写成写成 D&(!A)这两者是这两者是或或的关系的关系.因此因此有有:CC2=!(A&D)ADA&D CC21001111000010101Q cc3: A、E、F至少有至少有2人人涉嫌作案涉嫌作案.Q 三种可能:三种可能:A和和E作案作案,写成写成 (A&E)A和和F作案作案,写成写成 (A&F)E和和F作案作案,写成写成
25、(E&F)这三种可能性是这三种可能性是或或的关系的关系.因因此有此有:CC3=(A&E)| (A&F) |(E&F)AEFCC311111101101101 110010010010000000Q cc4: B和和C同时作案,或都与本案无关同时作案,或都与本案无关Q 两种可能:两种可能: 同时作案同时作案,写成写成 (B&C) 都与本案无关都与本案无关,写成写成 (!B&!C)这两种可能性是这两种可能性是或或的关系的关系.因此有因此有:BC!B!CB&C !B&!CCC31100100100100001100000011011CC4 =(B&C)| (!B&!C)Qcc5: C和和D中有且仅有
26、一人作案,写成中有且仅有一人作案,写成Q两种可能:两种可能:C作案同时作案同时D不作案不作案,写成写成 (C&!D)D作案同时作案同时C不作案不作案,写成写成 (D&!C)这两种可能性是这两种可能性是或或的关系的关系.因此有因此有:CC5= (C&!D)|(D&!C)Qcc6: 如果如果D没有参与作案,则没有参与作案,则E也不可能参与也不可能参与作案。作案。Q分析这一条比较麻烦一些,可列出真值表再归分析这一条比较麻烦一些,可列出真值表再归纳。纳。DE!ECC6 含义含义分析分析1101D作案,作案,E也作案也作案可能可能1011D作案,作案,E不作案不作案可能可能0011D不作案,不作案,E也
27、不可也不可能作案能作案可能可能0100D不作案,不作案,E却作案却作案不可能不可能CC6 =D| (!E)Q将案情分析的将案情分析的6条归纳成一个破案综合判条归纳成一个破案综合判断条件断条件CC。QCC=CC1&CC2&CC3&CC4&CCC5&CC6Q当当CC为为1时时,说明说明6条的每一条都满足了条的每一条都满足了,可以结案了可以结案了.Q定义定义6个整型的变量个整型的变量A、B、C、D、E、F,分别表示分别表示6个嫌疑人。让变量的取值为个嫌疑人。让变量的取值为0表示不是作案人,为表示不是作案人,为1表示是作案人,每表示是作案人,每个人都有作案和没作案两种可能,个人都有作案和没作案两种可能
28、,Q作为作为6个人的一个整体,存在个人的一个整体,存在26种可能,种可能,依次为第依次为第0种可能到第种可能到第63种可能。种可能。NABCDEF100000020000013000010 63 111111QN为组合数,为组合数,n为为0的的情况是情况是6个人没作案,个人没作案,n为为63的情况是的情况是6个人个人都是作案者。都是作案者。Q枚举枚举ABCDEF,让整,让整个整体从个整体从000000111111,又,又要用到要用到循环结构循环结构。NABCDEF100000020000013000010 63 111111Q对于对于F,n每次加每次加1,F变号(从变号(从0变变1,从,从1变
29、变0)Q对于对于E,n每次加每次加2,E变号(从变号(从0变变1,从,从1变变0)Q对于对于D,n每次加每次加4,D变号(从变号(从0变变1,从,从1变变0)NABCDEF100000020000013000010 63 111111Q对于对于C,n每次加每次加8,C变号(从变号(从0变变1,从,从1变变0)Q对于对于B,n每次每次16,B变号(从变号(从0变变1,从,从1变变0)Q对于对于A,n每次每次32,A变号(从变号(从0变变1,从,从1变变0)Q可见,可见,F变化最快,变化最快,A变化最慢。可以用变化最慢。可以用6重循环。重循环。Q循环控制变量分别是循环控制变量分别是A、B、C、D、
30、E、F,初值为初值为0,终值为,终值为1。QA循环在最外层,循环在最外层,F循环在最里层,如左循环在最里层,如左图。图。for (A=0;A=1;A+)for (B=0;B=1;B+)for (C=0;C=1;C+)for (D=0;D=1;D+)for (E=0;E=1;E+)for (F=0;F=1;F+)循环体循环体for (A=0;A=1 ;A+ ) for (B=0;B=1 ;B+ )for (C=0;C=1 ;C+ )for (D=0;D=1 ;D+ )for (E=0;E=1;E+ )for (F=0;F=1 ;F+ )循环体循环体for (A=0;A=1 ;A+ )for (B
31、=0;B=1 ;B+ )for (C=0;C=1 ;C+ )for (D=0;D=1 ;D+ )for (E=0;E=1;E+ )for (F=0;F=1 ;F+ )循环体循环体Q 为了给出每个人是否为罪犯的信息,可以定义一个字为了给出每个人是否为罪犯的信息,可以定义一个字符类型的二维数组符类型的二维数组Q char info216=“is not criminal”,“ is a criminal”Q char是说,是说,info数组的元素为字符数组的元素为字符,2为下标,表示有为下标,表示有两个字符串,每个字符串最多有两个字符串,每个字符串最多有16-1个字符。每一字个字符。每一字符串后面
32、自动跟一个空字符符串后面自动跟一个空字符0isn 0t criminal0isacriminal012345678910111213141516main()int cc1,cc2,cc3,cc4,cc5,cc6;int A,B,C,D,E,F;char info216=is not criminal,is a criminal; for(A=0;A=1;A+) for(B=0;B=1;B+)for (C=0;C=1;C+) for(D=0;D=1;D+) for(E=0;E=1;E+) for(F=0;F0解题的步骤:解题的步骤:输入输入x xx0 x0是是 y=3-xy=3-xy=2/xy=
33、2/x否否 输出输出y y的值的值 第五章第五章 选择结构程序设计选择结构程序设计 C语言用来设计条件选择语言用来设计条件选择结构程序的选择语句有两结构程序的选择语句有两种:种: if语句、语句、switch语句。语句。 5.1 if5.1 if语句语句 1、单分支选择、单分支选择if语句语句if语句有三种形式:单分支选择语句有三种形式:单分支选择if语句、双分支语句、双分支面具选择面具选择if语句、多分支选择语句、多分支选择if语句。语句。 语句形式:语句形式: if (表达式)表达式) 语句;语句; 语句执行流程:语句执行流程: 表达式表达式语句语句真真(非非0)假假(0) 第五章第五章
34、5.1 if5.1 if语句语句5.1.1 if5.1.1 if语句的三种形式语句的三种形式例例5-1:从键盘输入两个整:从键盘输入两个整数数a和和b,如果,如果a大于大于b则交换则交换两数,最后输出两个数。两数,最后输出两个数。 #include 输入输入a,ba,babab交换交换a a、b b输出输出结束结束真真假假 void main() int a,b,t; scanf(%d,%d,&a,&b); if(ab) t=a;a=b;b=t; printf(a=%d,b=%dn,a,b); 第五章第五章 5.1 if5.1 if语句语句 第五章第五章 5.1 if5.1 if语句语句注意:
35、注意: (1 1)ifif语句自动结合一个语句,当满足条件需语句自动结合一个语句,当满足条件需要执行多个语句时,应用一对大括号要执行多个语句时,应用一对大括号将需要执将需要执行的多个语句括起,形成一个复合语句。行的多个语句括起,形成一个复合语句。 (2 2)ifif语句中表达式形式很灵活,可以是常量语句中表达式形式很灵活,可以是常量、变量、任何类型表达式、函数、指针等。只、变量、任何类型表达式、函数、指针等。只要表达式的值为非零值,条件就为真,反之条要表达式的值为非零值,条件就为真,反之条件为假。件为假。 2、双分支选择双分支选择if语句语句语句形式:语句形式:if (表达式)表达式) 语句语
36、句1;else 语句语句2 ; 语句执行流程:语句执行流程: 表达式表达式语句语句1真真(非非0)假假(0)语句语句2第五章第五章 5.1 if5.1 if语句语句例例5-2 5-2 输入两个整数,输输入两个整数,输出其中较大的数。出其中较大的数。 #include #include void main()int x,y,max; scanf(%d,%d,&x,&y); if(xy) max=x; else max=y; printf(max=% %dn,max); 输入输入x,yx,yxyxymax=xmax=x输出最大值输出最大值结束结束真真假假max=ymax=y 第五章第五章 5.1
37、if5.1 if语句语句注意注意第五章第五章 5.1 if5.1 if语句语句if和和else语句之间只能有一个语句,当语句之间只能有一个语句,当ifelse之间之间的语句不只一句时,应用一对的语句不只一句时,应用一对将语句括起。将语句括起。 if(ab) a+;b+;else a=0;b=10; 3、多分支选择、多分支选择if语句语句语句形式:语句形式:if (表达式表达式1) 语句语句1;else if (表达式表达式2)语句)语句2; else if (表达式表达式n)语句)语句n; else 语句语句n+1;第五章第五章 5.1 if5.1 if语句语句语句执行流程:语句执行流程: 表
38、达式表达式1 1语句语句1真真(非非0)假假(0)语句语句2表达式表达式2 2真真(非非0)表达式表达式2 2语句语句n语句语句n+1假假(0)假假(0)第五章第五章 5.1 if5.1 if语句语句例例4-3:计算分段函数。:计算分段函数。第五章第五章 5.1 if5.1 if语句语句x5x1y2 x1x1 03x1 0 x1 0 假假输入输入x xX=1X=1真真X10X10y=3/(x-10)y=3/(x-10)y=2xy=2xy=x+5y=x+5假假真真#include void main()float x,y; printf(enter x:); scanf( %f ,&x); el
39、se if (x=1) y=x+5; else if (x0) y=1 (x0) y=1; ; elseelse y=0; y=0;在同一复合语句在同一复合语句内内,elseelse总是与其前最总是与其前最近近的的尚未配对尚未配对的的if if 配对配对! ! y=0 (x0)y=0 (x0) y=1 (x0) y=-1;y=-1; ifif (x!=0) (x!=0) if if (x0) y=1 (x0) y=1; ; elseelse y=0; y=0; y= -1 (x0)y= -1 (x0) y= 1 (x0)if( y0 )x=-y;if( y0 )x=-y;elseelsex=y
40、;x=y;等价等价等价等价说明:说明:if_ elseif_ else可以完成与条件可以完成与条件运算符运算符( ( ? :? : ) )完全相同的完全相同的任务,但条件表达式表达任务,但条件表达式表达更简洁。更简洁。x x= = (y0)(y0)? ? -y-y: :y y; ;(y0)(y=60n);break; default:printf(grade60);各各casecase和和defaultdefault子句的先后顺序可以变动,而子句的先后顺序可以变动,而不会影响程序执行结果。不会影响程序执行结果。 第五章第五章 5.2 switch5.2 switch语句语句defaultdef
41、ault语句可以省略不用。语句可以省略不用。casecase和和defaultdefault与其后面的常量表达式间至少有与其后面的常量表达式间至少有一个空格。一个空格。switchswitch语句可以嵌套,语句可以嵌套,breakbreak语句只跳出它所在语句只跳出它所在的的switchswitch语句。语句。 第五章第五章 5.2 switch5.2 switch语句语句例例5-5 5-5 企业发放的奖金根据利润提成。从键盘输入企业发放的奖金根据利润提成。从键盘输入当月利润,求应发放奖金总数?当月利润,求应发放奖金总数? 10%1012%102014%204016%406018%601002
42、0%100利润利润万利润利润万利润利润万奖金利润利润万利润利润万利润利润万 第五章第五章 5.2 switch5.2 switch语句语句利润xx=1010 x2020 x4040 x6060 x100100 x (int )x/10 常量常量0,11,22,3,44,5,66,7,8,9,1010以上用这种方法转换后,用这种方法转换后,n n出现了在不同区域有重复数字出现了在不同区域有重复数字的情况。解决的方法有很多,其中一种是可以采用当的情况。解决的方法有很多,其中一种是可以采用当x x为为1010的整数倍时,将计算出的的整数倍时,将计算出的n n值减值减1 1。 使用使用switchsw
43、itch解题的解题的关键,关键,通过分通过分析找到析找到表达式表达式,将问,将问题分成题分成几种情几种情况。况。 第五章第五章 5.2 switch5.2 switch语句语句#include stdio.hvoid main()float x,y;int n;scanf(%f,&x);n=(int)x/10;if(int)x%10=0) n-;switch(n)case 0:y=x*0.1;break;case 1:y=x*0.12;break;case 2:case 3:y=x*0.14;break;case 4:case 5:y=x*0.16;break;case 6:case 7:ca
44、se 8:case 9:y=x*0.18;break;default:y=x*0.2;printf(y=%.2fn,y); 程序如下:程序如下: 第五章第五章 5.2 switch5.2 switch语句语句5.3 5.3 选择结构程序设计举例选择结构程序设计举例 例例5 5-7-7 将任意三个整数按从大到小的顺序输出。将任意三个整数按从大到小的顺序输出。 #include stdio.hvoid main()int x,y,z,t;scanf(%d,%d,%d,&x,&y,&z);if(xy) t=x;x=y;y=t; /*交换交换x,y的值的值*/if(xz) t=x;x=z;z=t; /
45、*交换交换x,z的值的值*/if(yc&a+cb&b+ca) if(a=b&b=c) printf(equalateral triangle.n); else if(a=b|a=c|b=c) printf(isoscelestriangle.n); else printf(other triangle.n); else printf(can notn);第五章第五章 5.3 5.3 程序设计举例程序设计举例例例5-10 5-10 从键盘输入一个年份,判断是否是闰年。从键盘输入一个年份,判断是否是闰年。第五章第五章 5.3 5.3 程序设计举例程序设计举例#include stdio.hvoid
46、 main()int year; scanf(%d,&year); if(year%400=0|(year%4=0&year%100!=0) printf(%d is a leap yearn,year);else printf(%d is not a leap yearn,year);1.main()int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+;break; case 1:b+;break; case 2: a+;b+;break; case 3:a+;b+;printf(“a=%d,b=%dn”,a,b); 结果结果
47、:a=2,b=1课堂练习课堂练习#include main()int a,b,c;a=2;b=7;c=5; switch (a0) case 1: switch (b10) case 1: printf();break; case 0: printf(!);break; case 0:switch (c=5) case 0: printf(*);break; case 1: printf(#);break; default: printf(%);break; default: printf(&); printf(n);1. 以下程序的运行结果是什么?以下程序的运行结果是什么?main() int a=100,x=10,y=20,ok1=5,ok2=0;if (x0) s=s+1;if(ab)t=s+t;else if (a=b) t=5;else t=2*s;printf(s=%d,t=%d,s,t);3.编一个程序,对于给定的一个百分制成绩,编一个程序,对于给定的一个百分制成绩,输出相应的五分制成绩输出相应的五分制成绩设:分以上为设:分以上为,分为分为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 IEC 60670-1:2024 EN-FR Boxes and enclosures for electrical accessories for household and similar fixed electrical installations - Part 1: General requirements
- 水泥路面施工承包合同
- 办公楼装修合同合同
- 委托招聘合同协议
- 招标信息合作协议书
- 出版业数字化出版与版权保护管理方案
- 建筑原材料采购合同
- 楼房租赁合同
- 传统行业数字化转型路径选择及实施方案研究项目
- 电子行业电子设备保修协议
- 数字媒体艺术概论数字媒体艺术理论概述
- 企业开展防震减灾知识讲座
- 中石油反恐风险评估报告
- 110kV全封闭组合开关电器GIS扩建及改造项目技术规范书专用部分
- 工程质量管理体系及保证措施
- 办公室压力缓解方法
- 销售序列学习成长地图2021
- 我的家乡湖北荆门介绍
- 遮瑕(美容化妆技术课件)
- 不锈钢金属边框施工方案
- 民企与央企合作协议
评论
0/150
提交评论