Blog02——关于C语言函数返回多值问题

今天在刷PAT的C语言练习题的时候遇到一个题,本打算用C函数分别返回3数组合成的最大值和最小值,但是最终返回的最大值出现问题!

初始代码如下:

 1 # include <stdio.h>
 2 # include <stdlib.h>
 3 
 4 int compare(int a,int b,int c) {
 5     int max,min,middle,value1,value2;
 6     max = (a>=b)?(a>=c?a:c):(b>=c?b:c);
 7     min = (a<=b)?(a<=c?a:c):(b<=c?b:c);
 8     if (a >= b) {
 9         if (a <= c) {
10             middle = a;
11         }else {
12             if (b >= c) {
13                 middle = b;
14             }else {
15                 middle = c;
16             }
17         }
18     }else {
19         if (b <= c) {
20             middle = b;
21         }else {
22             if (a <= c) {
23                 middle = c;
24             }else {
25                 middle = a;
26             }
27         }
28     }
29     value1 = max * 100 + middle * 10 + min;
30     value2 = min * 100 + middle * 10 + max;
31     return value1,value2;
32 }
33 int main() {
34     int n,i = 1,ge,shi,bai,value1,value2;
35     scanf("%d",&n);
36     int max,min,middle;
37     while (n != 495) {
38         bai = n / 100;
39         shi = (n % 100) / 10;
40         ge = (n % 100) % 10;
41         // 得到组合数
42         value1,value2 = compare(bai,shi,ge);
43         printf("%d %d",value1,value2);
44         break;
45 //        printf("%d: %d - %d = %d\n",i,value1,value2,value1-value2);
46 //        n = value1 - value2;
47         i += 1;
48     }
49     return 0;
50 } 

调试过程发现max、min以及middle得出没有任何问题!而且将compare函数里面的return语言换成printf语句得出的value1和value2也是正确的!

Blog02——关于C语言函数返回多值问题

 

 后面我就意识到C语言函数可能不像python那样可以直接返回多值!于是打算用引用来解决一下这个问题!

 1 # include <stdio.h>
 2 # include <stdlib.h>
 3 
 4 void compare(int &a,int &b,int &c) {
 5     int max,min,middle,value1,value2;
 6     max = (a>=b)?(a>=c?a:c):(b>=c?b:c);
 7     min = (a<=b)?(a<=c?a:c):(b<=c?b:c);
 8     if (a >= b) {
 9         if (a <= c) {
10             middle = a;
11         }else {
12             if (b >= c) {
13                 middle = b;
14             }else {
15                 middle = c;
16             }
17         }
18     }else {
19         if (b <= c) {
20             middle = b;
21         }else {
22             if (a <= c) {
23                 middle = c;
24             }else {
25                 middle = a;
26             }
27         }
28     }
29     a = max;
30     b = middle;
31     c = min;
32 }
33 int main() {
34     int n,i = 1,ge,shi,bai,value1,value2;
35     scanf("%d",&n);
36     int max,min,middle;
37     while (n != 495) {
38         bai = n / 100;
39         shi = (n % 100) / 10;
40         ge = (n % 100) % 10;
41         // 得到组合数
42         compare(bai,shi,ge);
43         value1 = bai * 100 + shi * 10 + ge;
44         value2 = ge * 100 + shi * 10 + bai;
45         printf("%d: %d - %d = %d\n",i,value1,value2,value1-value2);
46         n = value1 - value2;
47         i += 1;
48     }
49     return 0;
50 } 

现在测试得到的结果就是正确的了,当然也可以用指针来解决!毕竟引用是弱化的指针,引用都可以,指针自然行!

Blog02——关于C语言函数返回多值问题

 

上一篇:二分法求函数的零点


下一篇:Struts2 Action中的方法命名不要以get开头