文章目录
- 一、逻辑运算符和逻辑表达式
- 二、条件运算符和条件表达式
- 举例2.1
- 三、选择结构的嵌套
- 举例3.1
- 四、用switch语句实现多分支结构
- 举例4.1
- 举例4.2
- 五、选择结构程序综合举例
- 选择结构程序综合举例5.1
- 选择结构程序综合举例5.2
- 选择结构程序综合举例5.3
一、逻辑运算符和逻辑表达式
优先次序:!(非)→&&(与)→‖(或), 即“!”为三者中最高的; 逻辑运算符中的“&&”和“‖”低于关系运算符,“!”高于算术运算符
在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。
举个小例子
判别用year表示的某一年是否闰年,可以用一个逻辑表达式来表示。闰年的条件是符合下面二者之一: ①能被4整除,但不能被100整除,如2008。②能被400整除,如2000。
(year % 4 == 0 && year % 100 != 0) ‖ year % 400 == 0
二、条件运算符和条件表达式
表达式1 ? 表达式2 : 表达式3
条件运算符的执行顺序: 先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值。
举例2.1
输入一个字符,判别它是否为大写字母,如果是,将它转换成小写字母;
如果不是,不转换。然后输出最后得到的字符。
#include <stdio.h>
int main()
{
char ch;
scanf("%c",&ch);
ch=(ch>='A'&&ch<='Z')?(ch+32):ch;
printf("%cn",ch);
return 0;
}
三、选择结构的嵌套
if与else的配对关系。
else总是与它上面的最近的未配对的if配对。
编程序者把else写在与第1个if(外层if)同一列上,意图是使else与第1个if对应,但实际上else是与第2个if配对,因为它们相距最近。
如果if与else的数目不一样,为实现程序设计者的思想,可以加花括号来确定配对关系。
举例3.1
算法步骤
S1:输入x
S2:若x<0,则y=-1
S3:否则
S4:若x=0,则y=0
S5:否则(即x>0),则y=1
S6:输出y
方法1.无嵌套
#include <stdio.h>
int main()
{
int x,y;
scanf("%d",&x);
if(x<0) y=-1;
if(x==0) y=0;
if(x>0) y=1;
printf("x=%d,y=%dn",x,y);
return 0;
}
方法2.嵌套
#include <stdio.h>
int main()
{
int x,y;
scanf("%d",&x);
if(x<0)
y=-1;
else
if(x==0) y=0;
else y=1;
printf("x=%d,y=%dn",x,y);
return 0;
}
方法3嵌套
#include <stdio.h>
int main()
{
int x,y;
scanf("%d",&x);
if(x>=0)
if(x>0) y=1;
else y=0;
else y=-1;
printf("x=%d,y=%dn",x,y);
return 0;
}
四、用switch语句实现多分支结构
switch(表达式)
{
case 常量1 : 语句1
case 常量2 : 语句2
⋮ ⋮ ⋮
case 常量n : 语句n
default : 语句n+1
}
(1) 括号内的“表达式”,其值的类型应为整数类型(包括字符型)。
(2) 花括号内是一个复合语句,内包含多个以关键字case开头的语句行和最多一个以default开头的行。case后面跟一个常量(或常量表达式),它们和default都是起标号作用,用来标志一个位置。执行switch语句时,先计算switch后面的“表达式”的值,然后将它与各case标号比较,如果与某一个case标号中的常量相同,流程就转到此case标号后面的语句。如果没有与switch表达式相匹配的case常量,流程转去执行default标号后面的语句。
(3) 可以没有default标号,此时如果没有与switch表达式相匹配的case常量,则不执行任何语句。
(4) 各个case标号出现次序不影响执行结果。
(5) 每一个case常量必须互不相同;否则就会出现互相矛盾的现象。
(6) case标号只起标记的作用。在执行switch语句时,根据switch表达式的值找到匹配的入口标号,在执行完一个case标号后面的语句后,就从此标号开始执行下去,不再进行判断。因此,一般情况下,在执行一个case子句后,应当用break语句使流程跳出switch结构。最后一个case子句(今为default子句)中可不加break语句。
(7) 在case子句中虽然包含了一个以上执行语句,但可以不必用花括号括起来,会自动顺序执行本case标号后面所有的语句。当然加上花括号也可以。
(8) 多个case标号可以共用一组执行语句。
举例4.1
要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分,C等为60~69分,D等为 60分以下。成绩的等级由键盘输入。
#include <stdio.h>
int main()
{
char grade;
scanf("%c",&grade);
printf("Your score:");
switch(grade)
{
case 'A': printf("85~100n");break;
case 'B': printf("70~84n");break;
case 'C': printf("60~69n");break;
case 'D': printf("<60n");break;
default: printf("enter data error!n");
}
return 0;
}
举例4.2
用switch语句处理菜单命令。在许多应用程序中,用菜单对流程进行控制,例如从键盘输入一个′A′或′a′字符,就会执行A操作,输入一个′B′或′b′字符,就会执行B操作。
#include <stdio.h>
int main()
{ void action1(int,int),action2(int,int); //函数声明A,B操作
char ch;
int a=15,b=23;
ch=getchar();
switch(ch)
{ case 'a':
case 'A': action1(a,b);break; //调用action1函数,执行A操作
case 'b':
case 'B': action2(a,b);break; //调用action2函数,执行B操作
⋮
default: putchar('a'); //如果输入其他字符,发出警告
}
return 0;
}
void action1(int x,int y) //执行加法的函数设为A操作
{ printf("x+y=%dn",x+y);
}
void action2(int x,int y) //执行乘法的函数设为B操作
{ printf("x*y=%dn",x*y);
}
五、选择结构程序综合举例
选择结构程序综合举例5.1
写一程序,判断某一年是否为闰年。
判别用year表示的某一年是否闰年,可以用一个逻辑表达式来表示。闰年的条件是符合下面二者之一: ①能被4整除,但不能被100整除,如2008。②能被400整除,如2000。
方法1
#include <stdio.h>
int main()
{
int year,leap;
printf("enter year:");
scanf("%d",&year);
if(year%4==0)
{
if(year%100==0)
{
if(year%400==0)
leap=1;
else
leap=0;
}
else
leap=1;
}
else
leap=0;
if(leap)
printf("%d is ",year);
else
printf("%d is not ",year);
printf("a leap year.n");
return 0;
}
方法2
#include <stdio.h>
int main()
{
int year,leap;
printf("enter year:");
scanf("%d",&year);
if(year%4!=0)
leap=0;
else if (year%100!=0)
leap=1;
else if(year%400!=0)
leap=0;
else
leap=1;
if((year%4==0 && year%100!=0) || (year%400==0))
leap=1;
else
leap=0;
}
注意:仔细分析方法2
选择结构程序综合举例5.2
求ax2+bx+c=0方程的解
#include <stdio.h>
#include <math.h>
int main()
{ double a,b,c,disc,x1,x2,realpart,imagpart;
scanf("%lf,%lf,%lf",&a,&b,&c);
printf("The equation ");
if(fabs(a)<=1e-6)
printf("is not a quadraticn");
else
{ disc=b*b-4*a*c;
if(fabs(disc)<=1e-6)
printf("has two equal roots:%8.4fn",-b/(2*a));
else
if(disc>1e-6)
{ x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("has distinct real roots:%8.4f and %8.4fn",x1,x2);
}
else
{ realpart=-b/(2*a); //realpart是复根的实部
imagpart=sqrt(-disc)/(2*a); //imagpart是复根的虚部
printf("has complex roots:n");
printf("%8.4f+%8.4fin",realpart,imagpart); //输出一个复数
printf("%8.4f-%8.4fin",realpart,imagpart); //输出另一个复数
}
}
return 0;
}
选择结构程序综合举例5.3
运输公司对用户计算运输费用。路程越远,运费越低。标准如下:
s<250没有折扣
250≤s< 5002%折扣
500≤s< 10005%折扣
1000≤s< 20008%折扣
2000≤s< 300010%折扣
3000≤s15%折扣
p:每吨每千米货物的基本运费
w:货物重量
s:运输距离
d:折扣
f:总运费
f=pws*(1-d)
#include <stdio.h>
int main()
{ int c,s;
float p,w,d,f;
printf("please enter price,weight,discount:");//提示输入的数据
scanf("%f,%f,%d",&p,&w,&s); //输入单价、重量、距离
if(s>=3000) c=12; //3000km以上为同一折扣
else c=s/250;//3000km以下各段折扣不同,c的值不相同
switch(c)
{ case 0: d=0;break; //c=0,代表250km以下,折扣d=0
case 1: d=2;break; //c=1,代表250~500km以下,折扣d=2%
case 2:
case 3: d=5;break; //c=2和3,代表500~1000km,折扣d=5%
case 4:
case 5:
case 6:
case 7: d=8;break; //c=4~7,代表1000~2000km,折扣d=8%
case 8:
case 9:
case 10:
case 11: d=10;break; //c=8~11,代表2000~3000km,折扣d=10%
case 12: d=15;break; //c12,代表3000km以上,折扣d=15%
}
f=p*w*s*(1-d/100); //计算总运费
printf("freight=%10.2fn",f); //输出总运费,取两位小数
return 0;
}
最后
以上就是俊秀灰狼为你收集整理的C Programming学习笔记【谭浩强老师编】(第四章选择结构程序设计)02 逻辑运算符和逻辑表达式一、逻辑运算符和逻辑表达式二、条件运算符和条件表达式三、选择结构的嵌套四、用switch语句实现多分支结构五、选择结构程序综合举例的全部内容,希望文章能够帮你解决C Programming学习笔记【谭浩强老师编】(第四章选择结构程序设计)02 逻辑运算符和逻辑表达式一、逻辑运算符和逻辑表达式二、条件运算符和条件表达式三、选择结构的嵌套四、用switch语句实现多分支结构五、选择结构程序综合举例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复