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

目录
相关文章
|
C语言
C语言程序设计——if与else if的区别及用法
C语言程序设计——if与else if的区别及用法
|
存储 移动开发 搜索推荐
利用C语言实现十大经典排序算法的方法
利用C语言实现十大经典排序算法的方法
509 1
|
搜索推荐 算法 测试技术
八大排序算法(C语言实现)
八大排序算法(C语言实现)
499 0
|
C语言
【c语言】【典例】将字符串中指定字符删除
【c语言】【典例】将字符串中指定字符删除
547 0
|
3天前
|
数据采集 人工智能 安全
|
12天前
|
云安全 监控 安全
|
4天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1056 151
|
4天前
|
编解码 人工智能 机器人
通义万相2.6,模型使用指南
智能分镜 | 多镜头叙事 | 支持15秒视频生成 | 高品质声音生成 | 多人稳定对话
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1738 9