百科问答小站 logo
百科问答小站 font logo



为什么我写的c语言三个数求最大值,最后出来的结果总是第一个? 第1页

  

user avatar   phosphates-30 网友的相关建议: 
      

关于你的语法和算法问题(比如定义的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循环结束     


学习算法的话,建议看看 数据结构与算法 (不必拘泥于下面的这本)


user avatar   233-26-96 网友的相关建议: 
      

首先,你函数的声明是maxx,调用却是max,可能是头文件里也有这个函数吧。

第二,你maxx实现的有问题,m总是会被最后一个if覆盖。

第三,请不要把函数声明写在函数里,尽管这似乎不违反标准。

第四,建议只实现2个数的最大值函数,对多个数用前者进行reduce,编译器会帮你内联的。

第五,提问的时候尽量把和问题无关的代码去掉,比如输入的提示信息和最后的暂停。




  

相关话题

  C语言中指针与数组都可以用a[3]表示,那它们是不是相同? 
  对于学习代码困难的人来说,应该如何学习代码比较合适? 
  C语言的设计模式有哪些? 
  C 语言中指针数组和数组指针、函数指针、指向函数的指针等等该怎么理解? 
  C 语言用 换行后就无法再回到上一行了吗? 
  如何让自己孩子生下来学会的第一门语言是C语言? 
  写库函数供他人用的原理是什么? 
  第2个孩子不是应该在第4个孩子之前完成任务吗? 
  为什么C语言用int *a 来声明指针变量,而不是int &a声明? 
  C语言和C++中,为什么malloc函数需要传入申请的内存大小,而free时候却不需要传大小呢? 

前一个讨论
「半导体」是一种什么样的物质?有什么样的特点?
下一个讨论
在上学的同时自学完这些物理、数学、计算机技术、哲学等内容,大概需要多长时间?





© 2024-11-08 - tinynew.org. All Rights Reserved.
© 2024-11-08 - tinynew.org. 保留所有权利