编写一个将对三个数字进行排序的程序。用户将在名为num1,num2和num3的变量中输入三个数字。您将通过引用这三个值传递给一个名为sortNums()的函数,然后将它们从最小到最大排序。 Num1将保持最小值,num2将保持中间值,num3将保持最大值。从main()按顺序打印数字。
我如何修复我的if语句。当我把123放到右边时,当我把它拿出来时它就出来了,但是当我把它放到213时它出错了。
//function prototype
void sortNums(int*,int*,int*);
int main()
{
//Variables
int num1;
int num2;
int num3;
//refernce numbers variables
int *one;
int *two;
int *three;
//inputing nums
printf("Please enter num1: \n");
scanf("%d", &num1);
printf("Please enter num2: \n");
scanf("%d", &num2);
printf("Please enter num3: \n");
scanf("%d",&num3);
//putting reference numbers into variables
one = &num1;
two = &num2;
three = &num3;
sortNums(one,two,three);
printf("num1 %d\n",num1);
printf("num2 %d\n",num2);
printf("num3 %d\n",num3);
getch();
return 0;
}
//function
void sortNums(int *one,int *two, int *three)
{
int n1 = *one;
int n2 = *two;
int n3 = *three;
if ((n1 > n2) && (n2 > n3)){
*one = n3;
*two = n2;
*three = n1;
}
else if ((n1 > n2) &&(n2 < n3) ){
*one = n2;
*two = n3;
*three = n1;
}
else {
*one = n1;
*two = n2;
*three = n3;
}
}
答案 0 :(得分:0)
你缺少一些测试。
例如,在中间测试中,您不会检查n1是否大于n3或更小。例如,在中间添加if,可以对第二个最高值和最高值进行排序。如果第一个数字大于第二个数字但小于第三个数字,您也错过了测试。
if ((n1 > n2) && (n2 > n3)){
*one = n3;
*two = n2;
*three = n1;
}
else if ((n1 > n2) &&(n2 < n3) ){
if(n1 > n3) {
*one = n2;
*two = n3;
*three = n1;
} else {
*one = n2;
*two = n1;
*three = n3;
}
} else if(n1 < n2) && (n2 > n3) {
if(n1 > n3) {
*one = n3;
*two = n1;
*three = n2;
} else {
*one = n1;
*two = n3;
*three = n2;
}
} else {
*one = n1;
*two = n2;
*three = n3;
}
添加这些额外的if应该修复它。
如果需要,您也可以删除一些ifs,但是使用不同的if语句可以缩短代码。您还可以采取其他各种措施来改进代码。例如,您不需要从int创建指针然后发送它。你可以sortNums(&num1,&num2,&num3);