C语言学习与总结---第四章:选择结构程序设计

选择结构程序设计

  • 4.1 if语句
  • 4.2 关系运算符和关系表达式
    • 4.2.1 关系运算符
    • 4.2.2 关系表达式
  • 4.3 逻辑运算符和逻辑表达式
    • 4.3.1 逻辑运算符
    • 4.3.2 逻辑表达式
  • 4.4 条件运算符和条件表达式
  • 4.5 选择结构的嵌套
  • 4.6 switch语句
  • 4.7 程序应用

4.1 if语句

If语句有三种基本形式
(1)

if (判断条件) 执行语句;

(2)

if (判断条件) 执行语句1;
else  执行语句2;

(3)

if (判断条件1) 执行语句1;
else if (判断条件2)  执行语句2;
 ……
else if (判断条件n)  执行语句n;
else  执行语句n+1;

例,输入两个数a,b按由小到大的顺序输出

#include  
int main()  
{  
    float a, b, t;  
    scanf_s("%f,%f", &a, &b);  
    if (a > b)  
    {  
        t = a;  
        a = b;  
        b = t;  
    }  
    printf("%5.2f, %5.2f", a, b);  
    return 0;  
}

例,输入三个数a,b,c,按由小到大的顺序输出

#include  
int main()  
{  
    float a, b, c, t;  
    scanf_s("%f,%f,%f", &a, &b, &c);  
    if (a > b)  
    {  
        t = a;  
        a = b;  
        b = t;  
    }  
    if (a > c)  
    {  
        t = a;  
        a = c;  
        c = t;  
    }  
    if (b > c)  
    {  
        t = b;  
        b = c;  
        c = t;  
    }  
    printf("%5.2f, %5.2f, %5.2f", a, b, c);  
    return 0;  
} 

4.2 关系运算符和关系表达式

4.2.1 关系运算符

关系运算符有
(1)

>、<、>=、<=

(2)

==(等于)、!=(不等于)

其中,优先级:(1)高于(2)
此外,优先级顺序:

 算数运算符>关系运算符>赋值运算符

4.2.2 关系表达式

用关系运算符将表达式连接起来的式子称为关系表达式,例如

a > b,   a + b > b + c,   (a = 3) > (b = 5),   ’a’ < ‘b’,   (a > b) > (b < c)

关系表达式的值是一个逻辑值,即“真”或“假”。逻辑运算中,1代表“真”,0代表“假”
例如,

a=3,b=2,c=1;

则,
关系表达式a>b的值为“真”,表达式的值为“1”;
关系表达式c>b的值为“假”,表达式的值为“0”;
关系表达式

(a>b)==c

的值为“真”,表达式的值为“1”
关系表达式b+c

4.3 逻辑运算符和逻辑表达式

4.3.1 逻辑运算符

&&(与)、||(或)、!(非)
a&&b:a、b都真,则表达式为真;
a||b:a、b有真则真;
!a:若a真,则!a假;
优先级:!(非)> 算数运算符>关系运算符>&&和||>赋值运算符

(a>b)&&(x>y)  等价于  a>b && x>y

(a==b)||(x==y) 等价于  a==b || x==y

(!a)||(a>b)     等价于  !a || a>b

4.3.2 逻辑表达式

用逻辑运算符将关系表达式或逻辑量连接起来的式子称为逻辑表达式,逻辑表达式的值是一个逻辑量“真”或“假”,任何非零的数值被认作“真”。

例:设a = 4,b = 5,则
!a的值为0 ;
a&&b的值为1;
a||b的值为1;
!a||b的值为1;
4&&0||2的值为1;

例:‘c’&&’d’的值为1;

例:5>3&&8<4-!0的值为0;
注:
在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行,例如
a||b||c:只要a为真,则不必判断b和c的值,只有当a为假时才继续判断;

4.4 条件运算符和条件表达式

条件运算符的格式:

表达式1?表达式2:表达式3

先求解表达式1,若其值为真,则将表达式2的值赋给整个表达式;否则将表达式的值赋给整个表达式。例如

max=(a>b)? a:b;

其含义是:若a>b成立,则max=a;若a>b不成立,则max=b
用条件表达式:

if (a > b) max = a;  
else    max = b;

优先级:算数运算符>关系运算符>条件运算符>赋值运算符

max=(a>b)? a:b; 相当于 max=a>b? a:b;
a>b? a:b+1; 相当于 a>b? a:(b+1);

例,输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。输出最后得到的字符。

#include  
int main()  
{  
    char ch;  
    scanf_s("%c", &ch);  
    ch = (ch >= 'A' && ch <= 'Z') ? (ch + 32) : ch;  
    printf("%c", ch);  
    return 0;  
}

4.5 选择结构的嵌套

在if语句中可以包含一个或多个if语句,形式:

if()
   if() 语句1
   else 语句2
else
   if() 语句3
   else 语句4

例,有一个函数 y = { − 1 x < 0 0 x = 0 1 x > 0 , y=\begin{cases}-1 & x<0\\0 & x=0\\1 & x>0\\\end{cases}, y=101x<0x=0x>0, 编写程序,输入一个x值,输出y值

#include  
int main()  
{  
    float x;  
    int y;  
    scanf_s("%f", &x);  
    if (x < 0) y = -1;  
    else  
    {  
        if (x == 0) y = 0;  
        else y = 1;  
    }     
    printf("%d\n", y);  
    return 0;  
}

当然,上面程序的选择结构也可以为:

if (x < 0) y = -1;  
if (x == 0) y = 0;  
if (x > 0) y = 1; 

4.6 switch语句

switch语句是多分支选择语句,一般形式为:

switch(表达式)
{
 case 常量1:语句1
 case 常量2:语句2
 …
 case 常量n:语句n
 default:     语句n+1    [可以缺省]
} 

注:
(1) switch后面括号内的“表达式”,其值可以是整型或字符型。
(2) 当表达式的值与某一个case后面的常量相等时,就执行此case后面的语句。若没有与表达式相匹配的case常量,就执 行default后面的语句。
(3) 每一个case的常量的值必须互不相同,否则就会互相矛盾。
(4) 各个case分支和default的出现次序不影响执行结果。
(5) 可以多个case共用一组执行语句。

例,按照考试成绩的等级输出百分制分数段

#include  
int main()  
{  
    char grade;  
    scanf_s("%c", &grade);  
    switch (grade)  
    {  
    case 'A':printf("85-100\n"); break;  
    case 'B':printf("70-84\n"); break;  
    case 'C':printf("60-69\n"); break;  
    case 'D':printf("0-59\n"); break;  
    default:printf("Error\n");  
    }  
    return 0;  
} 

再如,

#include  
int main()  
{  
    char grade;  
    scanf_s("%c", &grade);  
    switch (grade)  
    {  
    case 'A':  
    case 'B':  
    case 'C':printf("及格\n"); break;   //A/B/C三个等级共用了一条语句  
    case 'D':printf("不及格\n"); break;  
    default:printf("Error\n");  
    }  
    return 0;  
} 

4.7 程序应用

(1)输入一个年份,判断是否是闰年。
判断条件:能被4整除,但不能被100整除或者能被100整除,又能被400整除。

#include  
int main()  
{  
    int year;  
    scanf_s("%d", &year);  
    if ((year % 4 == 0 && year % 100 != 0) || (year % 100 == 0 && year % 400 == 0))  
        printf("%d年是闰年\n", year);  
    else printf("%d年不是闰年\n", year);  
    return 0;  
}

(2),输入a,b,c的值,求二次方程 的根
算法:

若a=0,不是二次方程;
若a!=0,
	若 b^2-4ac>0,方程有两个不等的实根 ;
	若 b^2-4ac=0,方程有两个相等的实根 ;
	若 b^2-4ac<0,方程有两个共轭复根;
#include  
#include  
int main()  
{  
    double a, b, c, d, x1, x2, re, im;  
    scanf_s("%lf,%lf,%lf", &a, &b, &c);  
    if (fabs(a) <= 1e-6) printf("不是二次方程\n");  
    else  
    {  
        d = b * b - 4 * a * c;  
        if (fabs(d) <= 1e-6)  
            printf("方程有两个相等的实根:x1 = x2 = %8.4f\n", -b / (2 * a));     
        else if (d > 1e-6)  
        {  
            x1 = (-b + sqrt(d)) / (2 * a);  
            x2 = (-b - sqrt(d)) / (2 * a);  
            printf("方程有两个不等的实根:x1 = %8.4f, x2 = %8.4f\n", x1, x2);  
        }  
        else  
        {  
            re = -b / (2 * a);  
            im = sqrt(-d) / (2 * a);  
            printf("方程有两个共轭复根:x1 = %8.4f +%8.4fi, x2 = %8.4f -%8.4fi\n", re, im, re, im);  
        }  
    }  
    return 0;

(3)运输公司对用户计算运费
路程越远,每公里运费越低。标准如下:

s<250                 没有折扣
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)$
 

C语言学习与总结---第四章:选择结构程序设计_第1张图片
分析折扣变化的规律性:
折扣的“变化点”都是250的倍数 在横轴上加一种坐标c,c的值为s/250。

c<1,             无折扣;
1≤c<2,         折扣d=2%;
2≤c<4,         d=5%;
4≤c<8,         d=8%;
8≤c<12,       d=10%;
c≥12,           d=15%。
#include  
int main()  
{  
    int c, s;  
    float p, w, f, d;  
    scanf_s("%f,%f,%f", &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", f);  
    return 0;  
} 

你可能感兴趣的:(C语言,选择结构程序设计)