分段函数求法(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月前
分段函数求值
分段函数求值
26 1
|
6月前
|
C语言
【汇编语言实战】求两组给定数组最大值
【汇编语言实战】求两组给定数组最大值
16 0
|
6月前
|
算法 测试技术 C#
【数学 排列组合】1643. 第 K 条最小指令
【数学 排列组合】1643. 第 K 条最小指令
|
6月前
PTA-求交错序列前N项和
求交错序列前N项和
39 2
|
6月前
|
算法 C语言
求解亲密数代码剖析
求解亲密数代码剖析
|
6月前
|
存储 Python
用函数实现求所有(50~100)之间素数的和
用函数实现求所有(50~100)之间素数的和
78 0
C++——第6节 代码世界中的传送阵:goto语句
C++——第6节 代码世界中的传送阵:goto语句
|
算法 C语言
C语言基础(有关三角形面积,阶乘算法,sqrt,pow函数,海伦公式,gets,getchar,scanf的区别,字符转换,增长率计算,的分支和循环的结构程序设计)
C语言基础(有关三角形面积,阶乘算法,sqrt,pow函数,海伦公式,gets,getchar,scanf的区别,字符转换,增长率计算,的分支和循环的结构程序设计)