C程序设计内容与例题讲解 -- 第四章--选择结构程序设计第二部分(第五版)谭浩强

简介: C程序设计内容与例题讲解 -- 第四章--选择结构程序设计第二部分(第五版)谭浩强

前言:在前面我们学习了选择结构和条件判断,用if语句实现选择结构,关系运算符和关系表达式,逻辑运算符和逻辑表达式等知识。今天我们将接着上一篇未讲完的继续讲解。

鸡汤:种一棵树最好的时间是十年前,其次是现在!加油各位一起努力!

4.1 选择结构的嵌套

在if语句中又包含一个或者多个if语句称为"if语句的嵌套"。
其一般格式如下:

我们应当注意if与else的配对关系:
else总是与它上面最近的未配对的if配对。

我们来看一道例题

例题:有一阶跃函数(如下图),编写一程序,输入一个x的值,要求输出对应y的值。

代码:

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

4.2 用switch语句实现多分支选择结构

if 语句只有两个分支可供选择,而实际问题中常常需要用到多分支的选择。例如,学生成绩分类(85分以上为A等,70 ~ 84分为B等,60 ~ 69分为C等),人口统计分类(按年龄分为老、中、青、年、少、儿童),工资统计分类,银行存款分类等。当然这些也可以用嵌套的If语句来处理,但如果分支较多,则嵌套的if语句层数较多,程序冗长而且可读性降低。因此我们可以使用C语言提供的switch语句直接处理多分支的选择。switch语句是多分支选择语句。

看例题:要求按照考试成绩的等级输出百分制分数段,85分以上为A等,70 ~ 84分为B等,60 ~ 69分为C等,60分以下为D等。成绩等级由键盘输入。

int main()
{
  char grade = 0;
  scanf("%c", &grade);
  printf("请输入你的成绩\n");
  switch (grade)
  {
  case 'A':
    printf("你的成绩是:100 ~ 85\n");
    break;
  case 'B':
    printf("你的成绩是:84 ~ 70\n");
    break;
  case 'C':
    printf("你的成绩是:69 ~ 60\n");
    break;
  case 'D':
    printf("你的成绩是:小于60分\n");
    break;
  default:
    printf("输入错误,请重新输入\n");
    break;
  }
  return 0;
}


运行结果:

运行流程图:

我们可以看到,switch语句的作用是根据表达式的值,使跳转流程转到不同的语句,switch语句的一般形式如下:

我们再来看一个例题:用 switch语句处理菜单命令。在许多应用程序中,用菜单对流程进行控制,例如从键盘输入一个’A’或’a’字符,就会执行A操作,输入一个’B’或’b’字符,就会执行B操作。可以按照以下以下思路编写程序。

int sum(int x, int y)
{
  return x + y;
}

int diff(int x, int y)
{
  return x - y;
}

int main()
{
  int a = 0;
  int b = 0;
  char ch = 0;
  printf("请输入三个数,前两个输入整数,后一个表示执行的操作\n");
  scanf("%d %d %c", &a, &b,&ch);
  switch (ch)
  {
  case 'A':
  case 'a':
    printf("sum = %d\n", sum(a, b));
    break;
  case 'B':
  case 'b':
    printf("diff = %d\n", diff(a, b));
    break;
  default:
    printf("输入错误,请重新0入\n");
  }
  return 0;
}

运行结果:

本章习题与习题讲解

习题1:请写出下面各逻辑表达式的值。设a = 3,b = 4,c = 5

(1) a + b > c && b = = c

题目分析:

a + b > c为真b == c为假,所以整体为假,所以表达式的值为0

(2)a || b + c && b - c

题目分析:

因为a为真 b + c也为真,所以 a || b + c整体为真,又因 b - c整体为真,所以a || b + c && b - c整体为真。故答案为1。

(3) !(a > b) && !c || 1

题目分析:

因为!的优先级在这里的逻辑运算符中是最高的所以优先算!的值,因a > b整体为假所以!(a > b)整体真,又因为c为真,所以!c为假,所以!(a>b) && !c整体为假,又因1为真,所以!(a > b) && !c || 1整体为真,故答案为1。

(4) !(x = a) && (y = b) && 0

题目分析:

因x = a为真,所以!(x = a)整体为假,所以!(x = a) && (y = b)这个整体为假,所以可以推出!(x = a) && (y = b) && 0这个整体为假,故而答案为0。

(5) !(a + b) + c - 1 && b + c / 2

题目分析:因为!优先级最高,所以 !(a + b)为假值为0,所以 !(a + b) + c - 1值为4为真,又因为b + c /2值为真,所整体为真。

习题2:给出一位不多于5位的正整数,要求:

(1)求出它是几位数

代码分析:

int digit(int n)
{
  int count = 1;
  while (n /=  10)//任何数最少是一位数
  {
    count++;
  }
  return count;

}
int main()
{
  int num = 0;
  scanf("%d", &num);
  int count = digit(num);
  printf("%d\n", count);
  return 0;
}

运行结果:

(2)分别输出每一位数字

代码分析:

int digit(int n)
{
  int count = 1;
  while (n /=  10)//任何数最少是一位数
  {
    count++;
  }
  return count;

}
int main()
{
  int num = 0;
  scanf("%d", &num);
  int count = digit(num);//求出位数
  //printf("%d\n", count);
  int e_digit = 0;
  int i = 0;
  for (i = 0; i < count; i++)
  {
    e_digit = num % 10;//将每一位数保存
    printf("每一位数是从低位到高位:%d\n", e_digit);
    num /= 10;
  }
  return 0;
}

运行结果:

(3)按逆序输出各位数字,例如原数321,应输出123。

int digit(int n)
{
  int count = 1;
  while (n /=  10)//任何数最少是一位数
  {
    count++;
  }
  return count;

}
int main()
{
  int num = 0;
  scanf("%d", &num);
  int count = digit(num);//求出位数
  //printf("%d\n", count);
  int e_digit = 0;
  int i = 0;
  printf("逆序输出的结果是:");
  for (i = 0; i < count; i++)
  {
    e_digit = num % 10;
    //printf("每一位数是从低位到高位:%d\n", e_digit);
    printf("%d", e_digit);
    num /= 10;
  }
  return 0;
}

运行结果:

结尾:好了,今天的内容讲解就到了这里了,如果各位觉得讲的好的话,就给作者一个三连吧,讲的不好的地方也麻烦各位多多指出,作者都会努力改进的,谢谢各位观看。


相关文章
|
3月前
|
C语言
C程序设计内容与例题讲解 -- 第四章--选择结构程序设计(第五版)谭浩强
C程序设计内容与例题讲解 -- 第四章--选择结构程序设计(第五版)谭浩强
|
3月前
|
机器学习/深度学习 人工智能 C语言
【c语言基础题】— —第五版,可当作日常练习和期末复习,有奇效哟!
【c语言基础题】— —第五版,可当作日常练习和期末复习,有奇效哟!
64 1
|
3月前
|
存储 C语言
C程序设计内容与例题讲解 -- 第三章第二部分(第五版)谭浩强
C程序设计内容与例题讲解 -- 第三章第二部分(第五版)谭浩强
|
3月前
|
存储 移动开发 C语言
# C程序设计内容与例题讲解 -- 第三章第一部分(第五版)谭浩强
# C程序设计内容与例题讲解 -- 第三章第一部分(第五版)谭浩强
|
3月前
|
C语言 数据格式
C程序设计内容与例题讲解 -- 第三章第三部分(第五版)谭浩强
C程序设计内容与例题讲解 -- 第三章第三部分(第五版)谭浩强
|
3月前
|
程序员 C语言 CDN
【c语言基础题】— —第三版,可当作日常练习和期末复习,有奇效哟!
【c语言基础题】— —第三版,可当作日常练习和期末复习,有奇效哟!
92 0
|
3月前
|
算法 调度
C程序设计内容与例题讲解 -- 第二章(第五版)谭浩强
C程序设计内容与例题讲解 -- 第二章(第五版)谭浩强
|
3月前
|
自然语言处理 Java C#
C程序设计内容与例题讲解 -- 第一章(第五版)谭浩强
C程序设计内容与例题讲解 -- 第一章(第五版)谭浩强
|
3月前
|
C语言 wax
【c语言基础题】— —第四版,可当作日常练习和期末复习,有奇效哟!
【c语言基础题】— —第四版,可当作日常练习和期末复习,有奇效哟!
101 0
|
3月前
第四章:分支结构程序设计(练习题2.0)
第四章:分支结构程序设计(练习题2.0)
42 0