C语言程序设计(第三章 选择结构)

C语言程序设计(第三章 选择结构)

C语言有两种选择语句:

① if语句 用来实现两个分支的选择结构

② switch语句 用来实现多分支的选择结构

1、if语句的一般形式

(1)第一种 没有else子句部分
//if(表达式) 语句1 

if(a>b) printf("a");
(2)第二种 有else子句部分
//if(表达式)
//    语句1
//else
//    语句2

if(x>y)
    printf("x");
else
    printf("y");
(3)第三种 在else部分嵌套多层的if语句
//if(表达式1)	语句1
//else if(表达式2)	语句2
//else if(表达式3)	语句3
//else	语句4

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;      //使用三元运算符,如果变量a属于A~Z的范围中,说明变量a为大写字母,否则为小写字母
    printf("%c\n",a);                   //再将大写字母进行转换,给字符+32,转换成小写。转换成大写字母,则是给小写字母-32
    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<2500
250<=s<5002%
500<=s<10005%
1000<=s<20008%
2000<=s<300010%
3000<=s15%
设基本运费为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;							//3000km以上为同一折扣
    else
        c=s/250;						//3000km以下各折扣不同
    switch(c){
        case 0: d=0;break;
        case 1: d=2;break;
        case 2: 
        case 3: d=5;break;              //c=2、c=3,代表250km~500km以下,折扣为d=5%
        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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

跑不完的脚本

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值