分段函数求法(if和switch)

简介: 分段函数求法(if和switch)

文章目录


题目描述:

计算函数值。如果x≥100或x<36,则输出y无定义的信息。

首先是整型变量的设置以及x的输入

ef3697b168bd15f22709c9698b90229.png

int x,y
printf("请输入x:>");
scanf("%d",&x);

其次对输入的x进行判断

x≥100或x<36,或在c语言中用 “||”表示

if(x >= 100 || x < 36)
{
  printf("输入无效\n"):
  return ;
}


79bad82bc3064369bef9416fa6ab2db5.jpg

当我们输入的值在上述范围内时程序会直接跳出结束,我们可以用while循环来使程序一直运行。

while(!)
{
  printf("请输入x:>");
  scanf("%d",&x);
  if(x >= 100 || x < 36)
  {
    printf("输入无效,请重新输入\n"):
    continue;
  }
}

9e825181df004a8582025c6370de6ce7.jpg

当输入无效时continue跳出,重新进入循环,重新输入重新判断。

当输入有效x后,根据x进行相关函数的计算;有两种方法可以实现计算(if语句和switch语句)

方法一

if语句

根据输入的x进行判断,再进入相应的语句中

    if (x >= 81 && x < 100)
    {
      y = x + 2;
    }
    if (x >= 64 && x < 81)
    {
      y = 2 * x + 3;
    }
    if (x >= 49 && x < 64)
    {
      y = 2 * x + 4;
    }
    if (x >= 36 && x < 49)
    {
      y = 4 * x + 5;
    }

根据输入的x输出对应的y值

以下是运行过程的整个代码

#include<stdio.h>
int main()
{
  while (1)
  {
    int x, y;
    printf("请输入x:>");
    scanf("%d", &x);
    if (x >= 100 || x < 36)
    {
      printf("输入无效...\n");
      continue;
    }
    else
    {
      if (x >= 81 && x < 100)
      {
        y = x + 2;
      }
      if (x >= 64 && x < 81)
      {
        y = 2 * x + 3;
      }
      if (x >= 49 && x < 64)
      {
        y = 2 * x + 4;
      }
      if (x >= 36 && x < 49)
      {
        y = 4 * x + 5;
      }
    }
    printf("y=%d\n", y);
    break;
  }
  return 0;
}

不难发现用if分支实现求解过程很容易理解,但是连续使用if语句是整个代码看起来过于复杂,因此我们可以使用switch语句来简化上述过程。

方法二

switch语句

前面部分跟上述一样不同的是else语句后面,但是我们应如何得到case语句中的整形常量表达式

int t = (x >= 36) + (x >= 49) + (x >= 64) + (x >= 81);

当输入的x与判断条件匹配时,得到1,反之为0;

当81≤x<100时,t=1;

当64≤x<81时,t=2;

当49≤x<64时,t=3;

当36≤x<49时,t=4;

这种判断可以通过t的值得出case的整形常量表达式。

代码如下:

int t = (x >= 36) + (x >= 49) + (x >= 64) + (x >= 81);
    switch (t)
    {
    case 1:
      y = x + 2;
      break;
    case 2:
      y = 2 * x + 3;
      break;
    case 3:
      y = 2 * x + 4;
      break;
    case 4:
      y = 4 * x + 5;
      break;

运用switch解决了if语句的复杂

全部代码:

   #include<stdio.h>
int main()
{
  while (1)
  {
    int x, y;
    printf("请输入x:>");
    scanf("%d", &x);
    if (x >= 100 || x < 36)
    {
      printf("输入无效...\n");
      continue;
    }
    else
    {
      int t = (x >= 36) + (x >= 49) + (x >= 64) + (x >= 81);
    switch (t)
    {
      case 1:
        y = x + 2;
        break;
      case 2:
        y = 2 * x + 3;
        break;
      case 3:
        y = 2 * x + 4;
        break;
      case 4:
        y = 4 * x + 5;
        break;
    }
    printf("y=%d\n", y);
    break;
  }
  return 0;
}

运行结果

66bad4ca01224c03b33076a69e532b34.png

总结:通过不同种方法巧妙化简代码的复杂性以及重复性,但是并不是所有的switch语句比if简单,根据实际情况再选择使用,做到简化代码,举一反三,为以后的代码打下坚实基础。这种方法也可用于计算个人所得税……

b8476391048c4a839588f642b8e393d9.jpg

目录
相关文章
|
7月前
|
机器学习/深度学习 编译器 C语言
【C语言】数据输出的域宽控制(如何在输出数据时控制0占位)(如何输出前导0)(保留几位小数)(乘法口诀表打印不齐)等问题
【C语言】数据输出的域宽控制(如何在输出数据时控制0占位)(如何输出前导0)(保留几位小数)(乘法口诀表打印不齐)等问题
117 0
|
4月前
|
存储
两个变量数值的交换
两个变量数值的交换
|
7月前
分段函数求值
分段函数求值
37 1
|
7月前
|
存储 C语言
学习总结(位操作符;循环输入的三种方式;交换两个变量值的三种方法;打印数字对应的二进制;unsigned int 与int 的区别;改变特定位数0/1;&&和||的连续操作(与前置,后置结合))
学习总结(位操作符;循环输入的三种方式;交换两个变量值的三种方法;打印数字对应的二进制;unsigned int 与int 的区别;改变特定位数0/1;&&和||的连续操作(与前置,后置结合))
78 0
|
7月前
对调 2个变量的值若干种方式
对调 2个变量的值若干种方式
49 0
C++——第6节 代码世界中的传送阵:goto语句
C++——第6节 代码世界中的传送阵:goto语句
13:分段函数
13:分段函数
121 0
编程基本功:while/for循环中,如果有switch,注意break是中断的哪一层
编程基本功:while/for循环中,如果有switch,注意break是中断的哪一层
107 0