#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个数字之间的最大值吗?
对于初学者来说,这次调用的参数是
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 语句。
您的
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);
#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;
}
当然,让我们一步步分解代码:
#include
int main() {:这一行标志着main函数的开始,也就是程序的入口点。
int num1, num2, num3, max;:这一行声明了四个整型变量num1, num2, num3, max,用来存储用户输入的三个数字以及其中的最大值。
printf("输入三个数字:");:该行显示提示,要求用户输入三个数字。
scanf("%d %d %d", &num1, &num2, &num3);:该行从用户输入中读取三个整数并将它们存储在变量 num1、num2 和 num3 中。
switch ((num1 >= num2) * 4 + (num1 >= num3) * 2 + (num2 >= num3)) {:这一行根据三个数字使用按位运算的比较计算出一个值,然后使用它作为 switch 语句的控制表达式。
在 switch 语句内,案例根据计算值进行组织。该值确定如下:
如果 num1 大于或等于 num2,则该值加 4。
如果 num1 大于或等于 num3,则该值加 2。
如果 num2 大于或等于 num3,则该值加 1。
这些案例对应于三个数字之间的不同比较组合。根据 switch 表达式中计算的值,落入其中一种情况,并执行相应的操作。
在每种情况下,最大数量是根据注释中指定的条件确定的。然后将最大数字分配给变量 max。
在 switch 语句之后,使用 printf() 打印最大数字。
最后返回0;表示主函数执行成功,程序结束。
如果你想了解更多关于求三个数中最大的程序,你可以查看这个C程序求三个数中最大的