键盘输入三个整数,得出最大值和最小值并输出
今天在学习c语言的过程中遇到一道十分简单的题,要求从键盘输入三个整数,然后的出其中的最大值和最小值并输出结果。本来这是一道很简单的题,但是我在做的过程中发现了一些问题,于是记录下来希望大家吸取经验
以下是我最开始写的题解,可以看到其中运用了大量的if嵌套,阅读起来十分困难并且还存在逻辑错误。
void test06()
{
int data1 = 0;
int data2 = 0;
int data3 = 0;
//先定义三个变量
int max = 0;
int min = 0;
//max,min分别记录最大值和最小值
printf("输入3个int数值\n");
//提示输入
scanf("%d %d %d", &data1, &data2, &data3);
//从键盘录入三个值
max = data1;
//max预设为data1
if (data1 < data2)
{
if (data2 < data3)
{
max = data3;
//当data3大于data2且大于data1时,max更新为data3
}
else
{
max = data2;
//否则max更新为data2
}
}
min = data1;
//min预设为data1
if (data1 > data2)
{
if (data2 > data3)
{
min = data3;
//当data3小于data2且小于data1时min更新为data3
}
else
{
min = data2;
//否则更新为data2
}
}
printf("最大值=%d,最小值=%d\n", max, min);
//分别输出最大值max和最小值min
return;
}
因为求最大值的程序并没有错误所以这这里主要讨论求最小值的过程。下图是我求最小值的流程图,大家可以发现如下的测试用例的输出结果min的值将会是2,但是实际最小值应该是1。(红线是程序执行路径)
经过改进后的程序如下
void test06()
{
int data1 = 0;
int data2 = 0;
int data3 = 0;
int max = 0;
int min = 0;
printf("输入3个int数值\n");
scanf("%d %d %d", &data1, &data2, &data3);
max = data1;
if (data2 > max)
{
max = data2;
}
if (data3 > max)
{
max = data3;
}
min = data1;
if (data2 < min)
{
min = data2;
}
if (data3 < min)
{
min = data3;
}
printf("最大值=%d,最小值=%d\n", max, min);
return;
}
改进后的代码逻辑上的错误已经改正了,并且还进行了一定的优化,现在的可读性也提升了一些。
当然当前的代码还可以继续优化,以达到更高的可读性和简洁度。复杂的代码不仅可读性不佳而且更容易出错,并且在出错之后很难找出错误所在,所以我们在编写的过程中应该对自己有更高的要求。总之,简洁、清晰和高效的代码是编写高质量程序的关键。通过合理地组织逻辑和选择适当的算法,我们可以编写出既易于理解又性能良好的代码。