百科问答小站 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语言,那么,c++会不会替代c语言来进行单片机编程 ? 
  学了四年算法,码了五万行代码,但是大一期末C语言模拟及不了格怎么办? 
  大学c语言学习的考题中,故意用相同变量名来命名形参实参,局部变量和全局变量让学生区分,有实际意义吗? 
  C语言中for语句的赋初值用int i=1和i=1有什么区别? 
  为什么知乎用户 vczh 不建议初学编程的人把 C 作为入门语言? 
  如果有两颗药丸,一颗吃了让你写代码100%不出错,另一颗吃了能让你100%发现并修改bug,选哪颗? 
  为什么说C++的main函数最后不写 return 0; 是不好的习惯? 
  fopen()的第二个参数为什么会采用字符串形式? 
  <<深度探索c++对象模型>>中的虚继承看着蛋疼,感觉这在实际中也没多大用,需要继续深究吗? 
  C/C++中按值传递比按地址传递更快吗, 引用呢? 

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





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