如何编写 C 程序使用 switch 语句查找三个数字之间的最大值?

问题描述 投票:0回答:3
#include <stdio.h>

int main()
{
    int num1, num2, num3;
    printf("Enter three integers to find maximum: \n");
    scanf("%d%d%d", num1, num2, num3);
    switch (num1 > num2)
    {
        switch (num1 > num3)
        {
        case 1:
            printf("%d is maximum", num1);
            break;
            switch (num2 > num1)
            {
                switch (num2 > num3)
                {
                case 1:
                    printf("%d is maximum", num2);
                    break;
                default:
                    printf("%d is maximum", num3);
                }
            }
        }
    }
}

这是我在 VS Code 中编写的

switch
语句程序,用于查找 3 个数字之间的最大值,但它不起作用。我声明了3个变量
num1
num2
num3
然后我将
num1
num2
num3
进行比较,类似地将
num2
num1
num3
进行比较,
num3
default 
.

我们可以写出3个数字之间的最大值吗?

c switch-statement max
3个回答
2
投票

对于初学者来说,这次调用的参数是

scanf

scanf("%d%d%d", num1, num2, num3);

不正确。你需要写

scanf("%d%d%d", &num1, &num2, &num3);

一般来说你应该检查输入是否成功,例如

if ( scanf("%d%d%d", &num1, &num2, &num3) == 3 )
{
    //...
}
else
{
    //...
}

其次,用户可以输入至少两个彼此相等且大于第三个数字的数字。你必须考虑到这一点。

为了使编写 switch 语句更简单,使用 if 语句执行任务将很有用。他们可以看以下方式

    if (!( num1 < num2 ) && !( num1 < num3 ))
    {
        printf( "%d is maximum\n", num1 );
    }
    else if ( !( num2 < num3 ) )
    {
        printf( "%d is maximum\n", num2 );
    }
    else
    {
        printf( "%d is maximum\n", num3 );
    }

所以现在使用 switch 语句重写 if 语句并不难。他们可以看以下方式

    switch (!( num1 < num2 ) && !( num1 < num3 ))
    {
    case 1:
        printf( "%d is maximum\n", num1 );
        break;

    case 0:
        switch (!( num2 < num3 ))
        {
        case 1:
            printf( "%d is maximum\n", num2 );
            break;

        case 0:
            printf( "%d is maximum\n", num3 );
            break;
        }
    }

您可以通过包含标题

0
来使用命名常量
1
false
,而不是在案例标签中使用常量
true
<stdbool.h>

#include <stdbool.h>

//...

    switch (!( num1 < num2 ) && !( num1 < num3 ))
    {
    case true:
        printf( "%d is maximum\n", num1 );
        break;

    case false:
        switch (!( num2 < num3 ))
        {
        case true:
            printf( "%d is maximum\n", num2 );
            break;

        case false:
            printf( "%d is maximum\n", num3 );
            break;
        }
    }

当然还有其他方式来写switch语句,但这种方式已经足够清晰了。

这是一个演示程序。

#include <stdio.h>
#include <stdbool.h>

int main( void )
{
    int num1, num2, num3;

    printf( "Enter three integers to find maximum: " );
    scanf( "%d%d%d", &num1, &num2, &num3 );

    if (!( num1 < num2 ) && !( num1 < num3 ))
    {
        printf( "%d is maximum\n", num1 );
    }
    else if ( !( num2 < num3 ) )
    {
        printf( "%d is maximum\n", num2 );
    }
    else
    {
        printf( "%d is maximum\n", num3 );
    }

    switch (!( num1 < num2 ) && !( num1 < num3 ))
    {
    case true:
        printf( "%d is maximum\n", num1 );
        break;

    case false:
        switch (!( num2 < num3 ))
        {
        case true:
            printf( "%d is maximum\n", num2 );
            break;

        case false:
            printf( "%d is maximum\n", num3 );
            break;
        }
    }
}

它的输出可能看起来像这样

Enter three integers to find maximum: 3 2 3
3 is maximum
3 is maximum

演示程序中包含if语句只是为了表明使用if语句和switch语句的结果是相同的。当然,在你的程序中你应该删除 if 语句。


2
投票

您的

case
语句正文中缺少
default
switch
子句。

另请注意,您必须将目标变量的地址传递给

scanf()
,并且您应该测试此
scanf
是否成功转换了3个整数:它返回成功转换的数量。

这是修改后的版本:

#include <stdio.h>

int main(void) {
    int num1, num2, num3;

    printf("Enter three integers to find maximum: \n");

    if (scanf("%d%d%d", &num1, &num2, &num3) != 3) {
        printf("invalid input\n");
        return 1;
    }

    switch (num1 > num2) {
    case 1:
        switch (num1 > num3) {
        case 1:
            printf("%d is maximum\n", num1);
            break;
        default:
            printf("%d is maximum\n", num3);
            break;
        }
    default:
        switch (num2 > num3) {
        case 1:
            printf("%d is maximum\n", num2);
            break;
        default:
            printf("%d is maximum\n", num3);
            break;
        }
    }
    return 0;
}

这是一个带有单个

switch
语句的替代方案:

#include <stdio.h>

int main(void) {
    int num1, num2, num3;

    printf("Enter three integers to find maximum: \n");

    if (scanf("%d%d%d", &num1, &num2, &num3) != 3) {
        printf("invalid input\n");
        return 1;
    }

    switch ((num1 >= num2) + 2 * (num1 >= num3) + 4 * (num2 >= num3)) {
    case 3:
    case 7:
        printf("%d is maximum\n", num1);
        break;
    case 4:
    case 6:
        printf("%d is maximum\n", num2);
        break;
    case 0:
    case 1:
        printf("%d is maximum\n", num3);
        break;
    default:
        printf("CPU is broken\n");
        break;
    }
    return 0;
}

最后,滥用规则,这是一个仍然使用

switch
语句的简化版本,很容易扩展到更大的数字集:

#include <stdio.h>

int main(void) {
    int num1, num2, num3, max;

    printf("Enter three integers to find maximum: \n");

    if (scanf("%d%d%d", &num1, &num2, &num3) != 3) {
        printf("invalid input\n");
        return 1;
    }

    switch (max = num1,
            max = (max >= num2) * max + (max < num2) * num2,
            max = (max >= num3) * max + (max < num3) * num3)
    {
    default:
        printf("%d is maximum\n", max);
        break;
    }
    return 0;
}

为了完整起见,上面的

switch
语句可以用空主体重写:

    switch (max = num1,
            max = (max >= num2) * max + (max < num2) * num2,
            max = (max >= num3) * max + (max < num3) * num3)
        /* empty body */;

    printf("%d is maximum\n", max);

0
投票
#include <stdio.h>
int main() {
int num1, num2, num3, max;

// Input three numbers from the user
printf("Enter three numbers: ");
scanf("%d %d %d", &num1, &num2, &num3);

// Find the maximum using a switch statement (not recommended)
switch ((num1 >= num2) * 4 + (num1 >= num3) * 2 + (num2 >= num3)) {
    case 7: // num1 >= num2 && num1 >= num3
        max = num1;
        break;
    case 6: // num1 >= num2 && num3 >= num1
    case 5: // num1 >= num3 && num1 >= num2
        max = num1;
        break;
    case 4: // num2 >= num1 && num2 >= num3
        max = num2;
        break;
    case 3: // num2 >= num1 && num3 >= num2
    case 2: // num2 >= num3 && num2 >= num1
        max = num2;
        break;
    case 1: // num3 >= num1 && num3 >= num2
    case 0: // num3 >= num2 && num3 >= num1
        max = num3;
        break;
    }

// Print the maximum number
printf("Maximum number is: %d\n", max);

return 0;
}

当然,让我们一步步分解代码:

  1. #include :这一行包含了C语言的标准输入输出库,其中包含printf()和scanf()等函数。

  2. int main() {:这一行标志着main函数的开始,也就是程序的入口点。

  3. int num1, num2, num3, max;:这一行声明了四个整型变量num1, num2, num3, max,用来存储用户输入的三个数字以及其中的最大值。

  4. printf("输入三个数字:");:该行显示提示,要求用户输入三个数字。

  5. scanf("%d %d %d", &num1, &num2, &num3);:该行从用户输入中读取三个整数并将它们存储在变量 num1、num2 和 num3 中。

  6. switch ((num1 >= num2) * 4 + (num1 >= num3) * 2 + (num2 >= num3)) {:这一行根据三个数字使用按位运算的比较计算出一个值,然后使用它作为 switch 语句的控制表达式。

  7. 在 switch 语句内,案例根据计算值进行组织。该值确定如下:

  8. 如果 num1 大于或等于 num2,则该值加 4。

  9. 如果 num1 大于或等于 num3,则该值加 2。

  10. 如果 num2 大于或等于 num3,则该值加 1。

  11. 这些案例对应于三个数字之间的不同比较组合。根据 switch 表达式中计算的值,落入其中一种情况,并执行相应的操作。

  12. 在每种情况下,最大数量是根据注释中指定的条件确定的。然后将最大数字分配给变量 max。

  13. 在 switch 语句之后,使用 printf() 打印最大数字。

  14. 最后返回0;表示主函数执行成功,程序结束。

如果你想了解更多关于求三个数中最大的程序,你可以查看这个C程序求三个数中最大的

© www.soinside.com 2019 - 2024. All rights reserved.