if与if判断

基本的if语句由关键字if开头,在括号里的是表示条件的逻辑表达式,在{}之间的若干表达式.如果表示条件的逻辑表达式结果不是零,那么执行后面{}之间的表达式,否则就跳过这些表达式不执行,而继续执行下面的其他语句.

if 格式

  1. if&else
1
2
3
4
5
if (条件判断){
表达式
} else // 否则{
表达式
}// else后的{}可以不需要
  1. if
1
2
3
if (条件判断){
表达式
}// if后的{}也可以不需要

值得注意的是,可以使用if嵌套

计算两个值之间的关系判断叫关系运算/比较运算

运算符 意义
== 相等
!= 不相等
> 大于
>= 大于或等于
< 小于
<= 小于或等于

优先级

  • 关系运算符的优先级比算术运算符低,但是比赋值高
1
2
3
int x = 4 >= 5 + 3;
// x = ( 4 >= 8)
// x = 0
  • 判断是否相等的==!=优先级比其他关系运算符低,在连续的关系运算符中,优先级的顺序是自左向右运算.
1
2
3
4
5
5 > 3 == 6 > 4
// 1 == 1
6 > 5 > 4
// 6大于5成立,则其值为1
// 1 大于4不成立.则其值为0

代码示例

  1. 计算找零

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include <stdio.h>

    int main() {
    // 初始化
    int price = 0;
    int bill = 0;
    // 让用户输入金额和票面
    printf("请输入金额:");
    scanf("%d", &price);
    printf("请输入票面:");
    scanf("%d", &bill);
    // 判断,当票面大于或等于金额时,执行找零操作
    if ( bill >= price ){
    printf("应当找您:%d\n",bill - price);
    } else{
    printf("您的钱不够");
    }
    return 0;
    }
  2. 计算年龄

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include <stdio.h>

    int main() {
    // 定义初始值
    const int MINOR = 35;
    // 初始化
    int age = 0;
    // 输入年龄
    printf("请输入您的年龄:");
    scanf("%d", &age);
    printf("您的年龄是:%d\n",age);
    // 判断
    if ( age <= MINOR){
    printf("年轻是美好的\n");
    } else{
    printf("年龄决定了您的精神世界,请好好珍惜吧。\n");
    }
    return 0;
    }
  3. 比较大小

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include <stdio.h>

    int main() {
    // 定义变量
    int a , b;
    // 输入整数
    printf("请输入两个整数:");
    scanf("%d %d", &a, &b);
    // 初始化
    int max = 0;
    // 判断
    if ( a > 0 ){
    max = a;
    } else{
    max = b;
    }
    printf("大的值是%d\n",max);
    return 0;
    }

    而上述代码还可以简写成下面的样子

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <stdio.h>

    int main() {
    // 定义变量
    int a , b;
    // 输入整数
    printf("请输入两个整数:");
    scanf("%d %d", &a, &b);
    // 初始化
    /*
    *将b的值赋值给max,而后进行判断,当a的值大于max时将a的值赋值给max
    *而不满足判断时,直接输出max的值(也就是b的值)
    */
    int max = b;
    // 判断
    if ( a > b ){
    max = a;
    }
    printf("大的值是%d\n",max);
    return 0;
    }
  4. 计算薪水

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    /*
    * 按照薪资标准,加班的时间以1.5倍计算
    * 当用户输入工作时长后,进行判断,如果大于每周标准工作时长则进行计算:每周的工资+加班时间*1.5倍工资
    * 否则计算用户输入工作时长*小时薪资
    */
    #include <stdio.h>

    int main() {
    // 定义变量
    const double RATE = 8.25; // 每小时8.25块
    const int STANDARD = 40; // 一周标准工作时长40小时
    double pay = 0.0;
    int hours;
    // 输入工作时长
    printf("请输入工作的小时数:");
    scanf("%d", &hours);
    // 判断
    if ( hours > STANDARD ){
    pay = STANDARD * RATE + (hours - STANDARD) * (RATE * 1.5);
    } else{
    pay = hours * RATE;
    }
    printf("应付工资:%f",pay);
    return 0;
    }
  5. 判断成绩

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include <stdio.h>

    int main() {
    // 定义变量
    const int PASS = 60;
    int source;
    // 输入成绩
    printf("请输入成绩:");
    scanf("%d", &source);
    printf("您输入的成绩是%d\n",source);
    // 判断
    if ( source < PASS ){
    printf("您的成绩不合格!");
    } else{
    printf("您的成绩是合格的!");
    }
    printf("再见");
    return 0;
    }

if嵌套

在嵌套中,if没有{}的情况下,else通常是和最近的if匹配

同时,else不会被代码缩进影响

所以标准写法还是在if和else后加上{},哪怕是只有一条语句

  1. 判断大小

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
       #include <stdio.h>

    int main() {
    int a,b,c;
    printf("请输入任意三个整数:");
    scanf("%d %d %d", &a, &b, &c);
    int max = 0;
    if ( a > b ) {
    if ( a > c ){
    max = a;
    } else{
    max = c ;
    }
    } else{
    if ( b > c ){
    max = b;
    } else{
    max = c;
    }
    }
    printf("最大值是:%d",max);
    return 0;
    }

    可以简化成下面的样子

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include <stdio.h>

    int main() {
    int a, b, c;
    printf("请输入任意三个整数:");
    scanf("%d %d %d", &a, &b, &c);
    int max = 0;
    if (a > b)
    if (a > c)
    max = a;
    else
    max = c;
    else if (b > c)
    max = b;
    else
    max = c;
    printf("最大值是:%d", max);
    return 0;
    }
  2. 级联判断/分段函数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include <stdio.h>

    int main() {
    int x,f;
    x = 0;
    f = 0;
    scanf("%d", &x);
    if ( x < 0){
    f = -1;
    } else if ( x == 0){
    f = x;
    } else {
    f = 2 * x;
    }
    printf("f=%d",f);
    return 0;
    }

switch

switch语句的作用就是基于计算的跳转,当满足表达式的值之后,程序会跳转到对应的case(分支标号)处

但分支标号只是作为switch的标记,在switch内的表达式后面如果没有break作为结束,将会继续执行下一个case内的表达式,直至遇到一个break或整个switch执行完毕

  1. 级联与switch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main() {
int type;
scanf("%d",&type);
if ( type == 1){
printf("早上好");
} else if ( type == 2){
printf("中午好");
} else if ( type == 3){
printf("晚上好");
} else{
printf("再见!");
}
return 0;
}

这种代码看上去十分繁琐,使用switch就能轻松实现

switch的语法与if大同小异,而且代码明了高效率

1
2
3
4
5
6
7
8
9
switch (整型变量或表达式){
// xx可以为整型表达式例如1+1,也可以为整型常量
case xx;
//表达式;
break;
case xx;
//表达式;
break;
}

用switch把上面的if转换成简单易懂的风格就是如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>

int main() {
int type;
scanf("%d", &type);
switch( type ){
case 1:
printf("早上好");
break;
case 2:
printf("中午好");
break;
case 3:
printf("晚上好");
break;
default:
printf("再见!");
}
return 0;
}
  1. 题目-成绩转换

将百分制成绩转换成五分制成绩,并严格遵循如下转换规则:

  • 大于等于90分为A
  • 小于90且大于等于80为B
  • 小于80且大于等于70为C
  • 小于70且大于等于60为D
  • 小于60为E

输出格式

输入在一行中给出1个整数的百分制成绩

输出格式

在一行中输出对应的五分制成绩

输入样例

90

输出样例

A

解题思路:除了级联if嵌套以外,还可以使用switch来判断并输出,碍于需要判断大小于,所以可以将输入的整数进行/10的操作,只取前1位有效数作为变量,实现代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>

int main() {
int score;
scanf("%d", &score);
// 成绩取一位有效数
score /=10;
switch (score){
case 10:
case 9:
printf("A");
break;
case 8:
printf("B");
break;
case 7:
printf("C");
break;
case 6:
printf("D");
break;
default:
printf("E");
break;
}
return 0;
}

如此,便满足了题目要求

评论