7.C语言-选择结构设计

1.IF单分支结构

if(表达式) 语句

表达式可以是任意表达式,语句可以是一条语句,也可以是复合语句,执行过程,先判断表达式是否为真,如果为真,那么执行语句,如果为假,那么跳过语句执行后面的程序。

flowchart LR
      A(过程A)-->B{表达式}
      B--是-->C[语句]
      C-->D(结束)  
#define _CRT_SECURE_NO_WARNINGS
#include

void main() {
  if (0) {
    printf("过程0");
  }
  if (1) {
    printf("过程1");
  }
  if (100) {
    printf("过程2");
  }
  if (-9) {
    printf("过程3");
  }
}

只要是非0就是真

编程实现,输入C语言课程的成绩 如果大于等于60分,则输出"您及格了"。

伪代码

  • 用户输入给变量score赋值
  • 如果score大于等于60,输出您及格了

流程图

flowchart LR
      A(用户输入)-->B[Score赋值]
      B-->C{Score>=60}
      C--是-->D(您及格了)

#define _CRT_SECURE_NO_WARNINGS
#include

void main() {
  int score;
  printf("请输入您的成绩:");
  scanf("%d", &score);
  if (score >= 60) {
    printf("您及格了!");
  }
}

输入三个数,按从小到大的顺序输出

伪代码

申明三个接受变量a,b,c

申明一个临时变量tmp

如果a>b 时b与a交换

如果 a>c时 a与c交换

如果 b>c时b与c交换

打印输入a,b,c

flowchart LR
      A(申明a,b,c三个变量)-->B[申明tmp临时变量]
      B-->C{a>b}
      C--是-->D[a与b交换]
      D-->E{a>c}
      E--是-->F[a与c交换]
      F-->G{b>c}
      G-->是-->H[b与c交换]
      H-->I(打印a,b,c)
#define _CRT_SECURE_NO_WARNINGS
#include

void main() {
  int a, b, c;
  int tmp;
  scanf("%d,%d,%d", &a, &b, &c);
  if (a > b) {
    tmp = a;
    a = b;
    b = tmp;
  }
  if (a > c) {
    tmp = a;
    a = c;
    c = tmp;
  }
  if (b > c) {
    tmp = b;
    b = c;
    c = tmp;
  }
  printf("%d,%d,%d", a, b, c);
}

2.IF双支选择结构

双分支if语句是指由某个条件的两种取值(真或假)构成两个分支,任何时候都会执行其中一个分支,这便形成了“二选一”的结构。

flowchart LR
      A(过程A)-->B{表达式}
      B--是-->C[语句]
      B--否-->D[语句]
      C-->E(结束)  
      D-->E(结束)  
void main() {
  if (1) {
    system("dir");
  }
  else {
    system("ipconfig");
  }
}

用户随机输入一个数字,与系统随机数比较大小

#define _CRT_SECURE_NO_WARNINGS
#include
#include

void main() {
  srand((unsigned)time(NULL));//srand()函数来重新“播种”,这样种子就会发生改变
  int a = rand() % 10; //产生0~9的随机数,注意10会被整除
  int b;
  scanf("%d", &b);
  if (b>=a) {
    printf("您输入的数字%d大于等于%d",b,a);
  }
  else {
    printf("您输入的数字%d小于%d", b, a);
  }
}

输入一个整数,判断是偶数还是奇数

#define _CRT_SECURE_NO_WARNINGS
#include
#include

void main() {
  int a;
  scanf("%d", &a);
  if (a % 2 == 0) {
    printf("您输入的偶数%d", a);
  }
  else {
    printf("您输入的奇数%d", a);
  }
}

3.IF多分支选择结构

if else-if语句用于从多个条件执行一个代码。

输入一个整数,如果大于60我们提示“不错,及格了!”,如果大于90提示“优秀”,如果小于60且大于50提示“只差一点了,加油”,小于50提示“不行呀”

#define _CRT_SECURE_NO_WARNINGS
#include
#include

void main() {
  int a;
  scanf("%d", &a);
  if (a >= 90) {
    printf("优秀!");
  }
  else if (a >= 60) {
    printf("不错,及格了!");
  }
  else if (a >= 50) {
    printf("只差一点了,加油");
  }
  else
  {
    printf("不行呀!");
  }
}

判断输入的字符是数字,大写字母,小写字母

#define _CRT_SECURE_NO_WARNINGS
#include
#include

int main() {
  char a;
  scanf("%c", &a);
  if (a >= 48 && a <= 57) {
    printf("数字!");
  }
  else if (a >= 65 && a <= 90) {
    printf("大写字母");
  }
  else if (a >= 97 && a <= 122) {
    printf("小写字母");
  }
  else {
    printf("其它字符");
  }
}

4.IF 嵌套

嵌套if语句就是在一个if语句中嵌套一个或多个if语句

if( boolean_expression 1)
{
   /* 当布尔表达式 1 为真时执行 */
   if(boolean_expression 2)
   {
      /* 当布尔表达式 2 为真时执行 */
   }
}

输入一个整数,如果大于60我们提示“不错,及格了!”,如果大于90提示“优秀”,如果小于60且大于50提示“只差一点了,加油”,小于50提示“不行呀”

#define _CRT_SECURE_NO_WARNINGS
#include
#include

void main() {
  int score;
  scanf("%d", &score);
  if (score >= 60) {
    if (score >= 90) {
      printf("优秀!");
    }
    else {
      printf("不错,及格了!");
    }
  }
  else {
    if (score >= 50) {
      printf("只差一点!");
    }
    else {
      printf("不行呀!");
    }
  }
}

企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

#define _CRT_SECURE_NO_WARNINGS
#include
#include

void main() {
  float money;
  float bonus;

  scanf("%f", &money);

  if (money <=100000) {
    bonus = money * 0.1;
  }
  else {
    if (money <= 200000) {
      bonus = 100000 * 0.1 + (money-100000) * 0.075;
    }
    else {
      if (money <= 400000) {
        bonus = money * 0.1 + (money - 200000) * 0.05;
      }
      else {
        if (money <= 600000) {
          bonus = money * 0.1 + (money - 400000) * 0.03;
        }
        else {
          if (money <= 1000000) {
            bonus = money * 0.1 + (money - 600000) * 0.015;
          }
          else {
            bonus = money * 0.1 + (money - 1000000) * 0.01;
          }
        }
      }
    }
  }
  printf("奖金:%f", bonus);
}

5.Switch语句

一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查。

switch(expression){
    case constant-expression  :
       statement(s);
       break; /* 可选的 */
    case constant-expression  :
       statement(s);
       break; /* 可选的 */
  
    /* 您可以有任意数量的 case 语句 */
    default : /* 可选的 */
       statement(s);
}

switch 语句必须遵循下面的规则:

  • switch 语句中的 expression 是一个常量表达式,必须是一个整型或枚举类型。
  • 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。
  • case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。
  • 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
  • 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。
  • 不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。
  • 一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。

通过用户输入数字,输出星期几

#define _CRT_SECURE_NO_WARNINGS
#include
#include

void main() {
  int num;
  printf("请输入1到7之间的数字:");
  scanf("%d", &num);
  if (!(num >= 1 && num <= 7)) {
    printf("输入数字不符合要求");
    return;
  }
  switch (num)
  {
  case 1:
    printf("星期一");
    break;
  case 2:
    printf("星期二");
    break;
  case 3:
    printf("星期三");
    break;
  case 4:
    printf("星期四");
    break;
  case 5:
    printf("星期五");
    break;
  case 6:
    printf("星期六");
    break;
  case 7:
    printf("星期日");
    break;
  default:
    break;
  }
}

case穿透

#define _CRT_SECURE_NO_WARNINGS
#include
#include

void main() {
    int num;
    printf("请输入1到7之间的数字:");
    scanf("%d", &num);
    if (!(num >= 1 && num <= 7)) {
        printf("输入数字不符合要求");
        return;
    }
    switch (num)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("可怜的上班生活!");
        break;
    case 6:
    case 7:
        printf("浪起来吧!");
        break;
    default:
        break;
    }
}

break是中断操作

每一个case可以想成一个入口

注意:switch结构只进行相等与否的判断,而if.else..结构还可以进行大于小于等范围上的判断。此外,switch无法处理浮点数,只进行整数的判断,而且,case标签值必须是常量,如果涉及到浮点数和变量的判断应当使用if.else.结构。应当从可读性和程序效率多方面综合考虑,适当搭配两种结构,方能写出高质量的代码。

#define _CRT_SECURE_NO_WARNINGS
#include
#include

void main() {
  char c;
  scanf("%c", &c);
  switch (c)
  {
  case 'A':
    printf("优秀");
    break;
  case 'B':
    printf("不错");
    break;
  case 'C':
    printf("加油");
    break;
  default:
    printf("未知!");
    break;
  }
}

6.习题

1.编写一个程序,用户输入ABCDE其中一个字母,然后输出A表示90分以上,B表示80到90分,C表示70到80分,D表示60到70分,E表示60分以下。输入对于的字母输出对应的表示内容。

int main()
{
    char score;
    scanf("%c",&score);
    switch(score){
        case 'A':
        printf("90分以上\n");
        break;
        case 'B':
        printf("80到90分\n");
        break; 
        case 'C':
        printf("70到80分\n");
        break;
        case 'D':
        printf("60到70分\n");
        break; 
        case 'E':
        printf("60分以下\n");
        break; 
        default:
        printf("输入错误\n");
    } 
    return 0;
}

2.判断闰年,已知能被 4 整除但不能被 100 整除或者能被 400 整除的年份是闰年。请编程判断一个年份是否是闰年。

#define _CRT_SECURE_NO_WARNINGS
#include
#include

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

3.医务工作者经广泛的调查和统计分析,根据身高与体重因素给出了以下按“体指数”进行体型判断的方法。体指数计算公式是:

t = w /(h*h)

其中:t是体指数;w是体重,其单位为千克;h是身高,其单位为米。根据给定的体指数t计算公式,可判断你的体重属于何种类型:

  • 当 t<18 时,为低体重;
  • 当 18≤t<25 时,为正常体重;
  • 当 25≤t<27 时,为超重体重;
  • 当 t≥27 时,为肥胖。
int main()
{
  float h, w, t;
  printf("请输入你的身高与体重:\n");
  scanf("%f,%f", &h, &w);
  t = w / (h * h);
  if (t < 18)
  {
    printf("体重太轻了!\n");
  }
  else if (t >= 18 && t < 25)
  {
    printf("标准体重!\n");
  }
  else if (t >= 25 && t < 27)
  {
    printf("有点胖了喔!\n");
  }
  else if (t >= 27)
  {
    printf("太胖了!\n");
  }
  return 0;
}
原文链接:,转发请注明来源!