《C语言及程序设计》实践参考——分段函数求值switch语句版

返回:贺老师课程教学链接  项目要求


【项目:分段函数求值switch语句版】
从键盘输入x的值(要求为整型),根据公式1计算并输出x和y的值。要求用switch语句完成。

[参考解答]

解法1:
各分段的标准都为2的倍数,所以,构造表达式 t= x/2,根据t的取值决定switch分支;

#include <stdio.h>
#include <math.h>
int main ( )
{
    int x, a;
    double y;
    scanf("%d", &x);
    a = x/2;   //注意是整数相除
    if (a<0)
        a=0;    //这样,x<0时,a值也是0
    switch(a)
    {
    case 0: //即x<2时
        y=x;
        break;
    case 1:
    case 2://a为1、2,对应x>=2 && x<6时
        y=x*x+1;
        break;
    case 3:
    case 4://a为3、4,对应x>=6 && x<10时
        y=sqrt(x+1);
        break;
    default://如果走到这一分支,对应的是x>=10的所有情况
        y=1.0/(x+1);
    }
    printf("%f\n", y);
    return 0;
}


解法2:构造表达式 t=(x<2) + (x<6) + (x<10)。由于关系表达式(x<a)的值为0或1(真为1,假为0),所以t能表示x究竟满足了几个条件。t值为3时,相加的三个关系表达式全为真,对应x<2;而t值为0时,相加的三个关系表达式全为假,对应x≥10,其他类似。根据t的取值,可以决定switch分支。
#include <stdio.h>
#include <math.h>
int main ( )
{
    int x, t;
    double y;
    scanf("%d", &x);
    t = (x<2) + (x<6) + (x<10);   //括号中的关系表达式有几个为真(1),确定了t的值,实则反映的是x的范围
    switch(t)
    {
    case 3: //(x<2) 、 (x<6) 、 (x<10) 全部为真,自然x<2
        y=x;
        break;
    case 2: //(x<2) 、 (x<6) 、 (x<10) 为真有2,自然x>=2,且x<6
        y=x*x+1;
        break;
    case 1: //(x<2) 、 (x<6) 、 (x<10) 为真有1,自然……
        y=sqrt(x+1);
        break;
    case 0://只有(x<2) 、 (x<6) 、 (x<10) 全0了.也可写作default:
        y=1.0/(x+1);
    }
    printf("%d\n", y);
    return 0;
}




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迂者-贺利坚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值