关于你的语法和算法问题(比如定义的maxx调用时却写的是max,以及maxx函数具体),有其他回答已经解释得比较清楚了。我来详细说说你的算法问题吧。在我看来,你的算法问题非常大——反映的是写代码时逻辑不太清楚。我虽然已经很久没写过C语言了,但是一直在用matlab,语法虽然不同但是算法都是一样的。
写代码相当于在做数学题。算法是数理逻辑,而语法则是语文。对于做数学题,诚然语文重要,但是数理逻辑才是基础。
你的排序算法,问题非常严重。建议这样的程序你都自己带入几个数字用逻辑先推导一下。假设一共有3个数字:3, 1, 2
那么请问,最大的数字是多少?用你的maxx算法会得到多少?我将你的C语言翻译成中文,你自己看看问题出在哪里(其中注释里是具体的计算过程)——注:以下代码只是用来表示逻辑,并不能运行。
如果 x > y % x=3 > y=1 则 m = x % m=x=3 否则 m = y 如果结束 如果 x > z % x=3 > z=2 则 m = x % m=x=3 否则 m = z 如果结束 如果 z > y % z=2 > y=1 则 m = z % m=z=2 否则 m = y 如果结束 输出 m % m=2
所以你看到问题了吗?你的maxx代码无论前面是什么结果,都会被最后一步的结果所覆盖掉。最后实际上你只是在比较 y 和 z 中哪个更大而已。
那么对于这种应该怎么写呢?3个数找到最大的那个,你先拿两个比,比较大的那个和剩下的去比,不就可以了吗?
如果 x > y % x=3 > y=1 则 m = x % m=x=3 否则 m = y 如果结束 如果 m > z % m=3 > z=2 则 m = m % m=m=3 否则 m = z 如果结束 输出 m % m=3
如果有4个数,你可以先举行半决赛,然后决赛找到最大的;你也可以按照冒泡赛的思路去走。下面我用中文写一个冒泡排序吧,无论你有多少个数字(假设N个)组成的数组A[N],都可以将它们从小到大排列出来,然后A[N]就是最大的了。——注:我是按照matlab的风格,从1开始
i 从 1 到 N j 从 1 到 N-i 如果 A[j] > A[j+1] 交换 A[j] 和 A[j+1] 如果结束 j循环结束 i循环结束
学习算法的话,建议看看 数据结构与算法 (不必拘泥于下面的这本)
首先,你函数的声明是maxx,调用却是max,可能是头文件里也有这个函数吧。
第二,你maxx实现的有问题,m总是会被最后一个if覆盖。
第三,请不要把函数声明写在函数里,尽管这似乎不违反标准。
第四,建议只实现2个数的最大值函数,对多个数用前者进行reduce,编译器会帮你内联的。
第五,提问的时候尽量把和问题无关的代码去掉,比如输入的提示信息和最后的暂停。