百科问答小站 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 语言的共用体来实现 Base64 编码,为什么失败了? 
  为什么MSVC比GCC/Clang差(功能支持也差,译后性能也差),微软做不好一个C语言编译器吗? 
  如何用 C 语言画「心形」? 
  请问如何区分c语言中float和double的用法? 
  如何解决windows上用fwrite()向文件写入内容时末尾的 问题? 
  C/C++中按值传递比按地址传递更快吗, 引用呢? 
  如何用一段简单的代码讲述一个悲伤的故事? 
  c/c++怎么把一个bool数组(刚好8个元素)转换成char? 
  如何用最简短的二进制代码表示一张19*19的围棋棋盘的情况? 

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





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