分段函数求法(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

目录
相关文章
|
6月前
PTA-求简单交错序列前N项和
求简单交错序列前N项和
59 0
|
4月前
|
算法 测试技术 PHP
通过阶乘获取一个一维PHP数组中全部的组合情况
在PHP中,`FactorialHandler`类通过递归实现了数组的全组合,`getArrAllCombineByFactor`方法逐个添加元素至所有子组合中。示例代码展示了一个包含组合生成的过程,输出了所有可能的排列。此外,还提供了一个深度优先搜索的递归函数`depth_picker`,用于生成数组的所有组合,从选择单个元素到选择所有元素。这两个示例揭示了递归在处理数组组合问题中的应用,常见于算法设计和测试用例生成。
24 0
通过阶乘获取一个一维PHP数组中全部的组合情况
|
6月前
|
存储 算法
73. 矩阵置零
73. 矩阵置零
|
6月前
分段函数求值
分段函数求值
28 1
|
6月前
|
C语言
【汇编语言实战】求两组给定数组最大值
【汇编语言实战】求两组给定数组最大值
18 0
|
6月前
PTA-求交错序列前N项和
求交错序列前N项和
41 2
|
算法 Java
算法-矩阵置零
算法-矩阵置零
|
6月前
|
存储 Python
用函数实现求所有(50~100)之间素数的和
用函数实现求所有(50~100)之间素数的和
90 0