C语言程序设计(第三章 选择结构)
C语言有两种选择语句:
① if语句 用来实现两个分支的选择结构
② switch语句 用来实现多分支的选择结构
1、if语句的一般形式
(1)第一种 没有else子句部分
if ( a> b) printf ( "a" ) ;
(2)第二种 有else子句部分
if ( x> y)
printf ( "x" ) ;
else
printf ( "y" ) ;
(3)第三种 在else部分嵌套多层的if语句
if ( number>= 90 )
printf ( "成绩优秀" ) ;
else if ( number>= 60 && number< 90 )
printf ( "成绩合格" ) ;
else if ( number< 60 )
printf ( "成绩未及格" ) ;
else if ( number= 0 )
printf ( "0分" ) ;
else
printf ( "成绩有误) ;
相当于:
if(number>=90)
printf("成绩优秀");
else
if(number>=60 && number<90)
printf("成绩合格");
else
if(number<60)
printf("成绩未及格");
else
if(number=0)
printf("0分");
else
printf("成绩有误");
2、关系运算符及其优先级
符号 说明 优先级 < 小于 II(优先级高) <= 小于等于 II(优先级高) > 大于 II(优先级高) >= 大于等于 II(优先级高) == 等于 I(优先级低) != 不等于 I(优先级低)
例如:
表达式 说明 c>a+b 等价于 c>(a+b) 关系运算符的优先级低于算术运算符 a>b==c 等价于 (a>b)==c 同为关系运算符,但是>的优先级高于== a== b<c 等价于 a==(b<c) 同为关系运算符,但是<的优先级高于== a=b>c 等价于a=(b>c) 关系运算符的优先级高于赋值运算符
关系表达式:用关系运算符将两个数值或数值表达式连接起来的式子
3、逻辑运算符
C语言逻辑运算符及其含义:
运算符 含义 举例 说明 && 逻辑与(AND) a&&b 如果a和b都为真,则结果为真,否则为假 || 逻辑或(OR) a||b 如果a和b有一个以上为真,则结果为真,二者都为假时,结果为假 ! 逻辑非(NOT) !a 如果a为假,则!a为真,如果a为真,则!a为假
运算符的优先级排序:
运算符 优先级 !(非) 最高 算术运算符 高 关系运算符 中 &&和|| 略低 赋值运算符 低
4、条件运算符和条件表达式
条件运算符由两个符号(?和:)组成,必须一起使用,要求有三个操作对象,称为三元运算符(三目运算符),是C语言中的唯一一个。
条件表达式一般形式为:表达式一?表达式二:表达式三
例如:
a>b?(max=a):(max=b) //如果a>b为真,则将a赋值给max,如果为假,则将b赋值给max
a>b?printf("%d",a):printf("%d",b) //如果a>b为真,则输出a,如果为假,则输出b
例题:输入一个字符,判别他是否为大写字母,如果是,则将它转换成小写字母;如果不是则不转换,使最终输出的为一个小写字母。
# include <stdio.h>
int main ( )
{
char a;
printf ( "请输入一个字母:" ) ;
scanf ( "%c" , & a) ;
a= ( a>= 'A' && a<= 'Z' ) ? ( a+ 32 ) : a;
printf ( "%c\n" , a) ;
return 0 ;
}
运行结果:
请输入一个字母: F
f
5、if语句的嵌套使用及switch语句的使用
例题1:写一个程序,判断某一年是否为闰年
方法一:
# include <stdio.h>
int main ( )
{
int year, a;
printf ( "请输入年份:" ) ;
scanf ( "%d" , & year) ;
if ( year% 4 == 0 ) {
if ( year% 100 == 0 ) {
if ( year% 400 == 0 ) a= 1 ;
else a= 0 ;
}
else a= 1 ;
}
else a= 0 ;
if ( a) printf ( "%d是闰年" , year) ;
else printf ( "%d不是闰年" , year) ;
return 0 ;
}
方法二:
# include <stdio.h>
int main ( ) {
int x, y;
scanf ( "%d" , & x) ;
if ( ( x% 100 != 0 && x% 4 == 0 ) || x% 400 == 0 )
printf ( "%d为闰年\n" , x) ;
else
printf ( "%d不是闰年\n" , x) ;
return 0 ;
}
例题2:求ax^2+bx+c=0方程的解
1. a=0,不是二次方程
2. b^2-4ac=0,有两个相等实根
3. b^2-4ac>0,有两个不等实根
4. b^2-4ac<0,有两个共轭复根,应该以p+qi和p-qi的形式输出,其中p=-b/2a,q=sqrt(b^2-4ac)/2a。
# include <stdio.h>
# include <math.h>
int main ( )
{
double a, b, c, disc, x1, x2, shi, xu;
printf ( "请输入a,b,c的值:" ) ;
scanf ( "%lf,%lf,%lf" , & a, & b, & c) ;
if ( fabs ( a) <= 1e-6 )
printf ( "不是二次方程" ) ;
else {
disc= b* b- 4 * a* c;
if ( fabs ( disc) <= 1e-6 )
printf ( "有两个相等实根:%7.4f\n" , - b/ ( 2 * a) ) ;
else {
if ( disc> 1e-6 ) {
x1= ( - b+ sqrt ( disc) / ( 2 * a) ) ;
x2= ( - b- sqrt ( disc) / ( 2 * a) ) ;
printf ( "有两个不相等实根:%7.4f和%7.4f\n" , x1, x2) ;
}
else {
shi= - b/ ( 2 * a) ;
xu= sqrt ( - disc) / ( 2 * a) ;
printf ( "两个共轭复根:\n" ) ;
printf ( "%7.4f+%7.4fi\n" , shi, xu) ;
printf ( "%7.4f-%7.4fi\n" , shi, xu) ;
}
}
}
return 0 ;
}
例题3:运输公司对用户计算运输费用,路程越远,运费越低,标准如下:
距离(s) 折扣 s<250 0 250<=s<500 2% 500<=s<1000 5% 1000<=s<2000 8% 2000<=s<3000 10% 3000<=s 15%
设基本运费为p,货物重为w,距离为s,折扣为d,总运费为f,则计算公式为f=p×w×s×(1-d)
# include <stdio.h>
int main ( ) {
int c, s;
float p, w, d, f;
printf ( "请输入单价、重量、距离:" ) ;
scanf ( "%f,%f,%d" , & p, & w, & s) ;
if ( s>= 3000 )
c= 12 ;
else
c= s/ 250 ;
switch ( c) {
case 0 : d= 0 ; break ;
case 1 : d= 2 ; break ;
case 2 :
case 3 : d= 5 ; break ;
case 4 :
case 5 :
case 6 :
case 7 : d= 8 ; break ;
case 8 :
case 9 :
case 10 :
case 11 : d= 10 ; break ;
case 12 : d= 15 ; break ;
}
f= p* w* s* ( 1 - d/ 100 ) ;
printf ( "折扣后运费为:%10.2f\n" , f) ;
return 0 ;
}
运行结果:
请输入单价、重量、距离: 150 , 30 , 500
折扣后运费为: 2137500.00