向c函数中传入参数时,参数值在函数内部发生了变化,不知道是什么原因,已经发了个贴,但还是不知道什么原因

zhjzh1016 2009-02-23 09:01:08
谢谢各位的耐心解答,但是我还是没明白,我重新贴下程序如下,我在输入时为“2,3,4”,屏幕上打印的结果为:
2,3,4
2.000000,3.000000,4.000000
0.000000,2.000000,0.000000
-63150641081726803000000000000000000.......请按任意键继续. . .
为什么传进去的参数值发生了变化??红色字体显示的

程序:
#include <stdio.h>
#include <string.h>
int main(){
float a,b,c;
scanf("%f,%f,%f",&a,&b,&c);
printf("%f,%f,%f",a,b,c);
printf("\n");
printf("%f",getTriangleArea(a,b,c));
return 0; /* Program termination. */
}
//求三角形的面积
float getTriangleArea(float x,float y ,float z)
{
float s=(x+y+z)/2;
float area=sqrt(s*(s-x)*(s-y)*(s-z));
printf("%f,%f,%f",x,y,z);
return area;
}
...全文
790 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Darkneece 2009-02-24
  • 打赏
  • 举报
回复 1
隐式的函数声明不会报错,但是会默认为返回值类型为int

所以math.h没包含也不会有编译、链接错,但是对于返回值不是int的sqrt等运行的时候就会有问题了。

而且C语言编译没有多次扫描,所以调用前必须先声明,不然会被当成默认的类型
waizqfor 2009-02-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhjzh1016 的回复:]
我用的vs2005,保存的名字为test.c,当时一直想不通,难道是和编译器有关系吗?晚上再回去试试
[/Quote]

#include <stdio.h>
#include <string.h>
#include <math.h>
float getTriangleArea(float x,float y ,float z) ;
int main(){
float a,b,c;
scanf("%f,%f,%f",&a,&b,&c);
printf("%f,%f,%f",a,b,c);
printf("\n");
printf("%f",getTriangleArea(a,b,c));
return 0; /* Program termination. */
}
//求三角形的面积
float getTriangleArea(float x,float y ,float z)
{
float s=(x+y+z)/2;
float area=sqrt(s*(s-x)*(s-y)*(s-z));
printf("%f,%f,%f",x,y,z);
return area;
}

这样应该没问题了 LZ试试 在我机器跑没问题
zhjzh1016 2009-02-23
  • 打赏
  • 举报
回复
我用的vs2005,保存的名字为test.c,当时一直想不通,难道是和编译器有关系吗?晚上再回去试试
zhjzh1016 2009-02-23
  • 打赏
  • 举报
回复
我用的vs2005,保存的名字为test.c,当时一直想不通,难道是和编译器有关系吗?
  • 打赏
  • 举报
回复
不要一次接收3个数据,一个一个接收,刷新缓冲区就可以了啊.
scanf("%f",&a);
scanf("%f",&b);
scanf("%f",&c);
我写成这样就没问题了.
chenzhp 2009-02-23
  • 打赏
  • 举报
回复
有这种事情?
sagegz 2009-02-23
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <string.h>
#include <math.h> //这个没有能用sqrt?

float getTriangleArea(float,float,float); //前置声明

int main(){
float a,b,c;
scanf("%f,%f,%f",&a,&b,&c);
printf("%f,%f,%f",a,b,c);
printf("\n");
printf("Area=%f",getTriangleArea(a,b,c));
return 0;
}

//求三角形的面积
float getTriangleArea(float x,float y ,float z){
float s=(x+y+z)/2;
float area=sqrt(s*(s-x)*(s-y)*(s-z));
printf("%f,%f,%f\n",x,y,z);
return area;
}

输入:2,3,4
输出:
2.000000,3.000000,4.000000
2.000000,3.000000,4.000000
Area=2.904737请按任意键继续. . .
沙漠里的海豚 2009-02-23
  • 打赏
  • 举报
回复

楼主你的开发环境是什么啊
我这里没问题啊

结果如下:

2,3,4
2.000000,3.000000,4.000000
2.000000,3.000000,4.0000002.904737
bitxinhai 2009-02-23
  • 打赏
  • 举报
回复
不知道你用的什么编译器,我用的vc6.0,运行是正常的!!!!

#include <stdio.h>
#include <string.h>
#include<math.h>

float getTriangleArea(float x,float y ,float z) ;
int main(){
float a,b,c;
scanf("%f,%f,%f",&a,&b,&c);
printf("%f,%f,%f",a,b,c);
printf("\n");
printf("%f",getTriangleArea(a,b,c));
return 0; /* Program termination. */
}
//求三角形的面积
float getTriangleArea(float x,float y ,float z)
{
float s=(x+y+z)/2;
float area=sqrt(s*(s-x)*(s-y)*(s-z));
printf("%f,%f,%f",x,y,z);
return area;
}
ldd909 2009-02-23
  • 打赏
  • 举报
回复
在main()函数执行前,应声明getTriangleArea函数
zhjzh1016 2009-02-23
  • 打赏
  • 举报
回复
我没有引用math.h,但是在编译是没有提示错误,当时我也觉得奇怪,晚上加上去看看有没有问题
内容概要:本文研究了一种基于Rao-Blackwellized粒子滤波(RBPF)与多融合策略全阶扩展卡尔曼滤波(EKF)相结合的双车协同SLAM(同步定位与地图构建)方法,旨在提升多自动驾驶车辆在复杂环境下的协同导航精度与鲁棒性。研究通过Matlab代码实现了该算法,融合了测距测角、纯方位等多种传感器信息,并引入数据关联与传感器融合策略,有效解决了传统SLAM存在的状态估计误差累积与非线性问题。文章深入探讨了RBPF在处理混合线性与非线性状态估计方面的优势,以及全阶EKF在状态更新的高效性,通过双车协同架构显著提升了整体系统的定位精度与地图构建能力。此外,研究还提供了完整的Matlab仿真代码,便于算法的复现与进一步优化。; 适合人群:具备一定控制理论、概率统计与机器人学背景,熟悉Matlab编程,从事自动驾驶、SLAM算法研究或智能系统开发的研究生、科研人员及工程技术人员。; 使用场景及目标:① 多自动驾驶车辆协同SLAM系统的算法设计与仿真验证;② Rao-Blackwellized粒子滤波与扩展卡尔曼滤波的原理学习与融合策略研究;③ 基于Matlab平台实现复杂状态估计算法,为实际机器人系统开发提供理论支持与代码参考。; 阅读建议:此资源以Matlab代码实现为核心,强调算法的可复现性与实用性。学习者应结合提供的代码,深入理解RBPF与EKF的数学推导及融合机制,并在仿真环境调整参数、测试不同传感器配置,以掌握协同SLAM系统的设计精髓。
内容概要:本文围绕芯片设计仿真数据的可视化,构建了一套面向芯片行业应用的综合分析平台,旨在通过数据可视化手段解决现代SoC设计日益复杂的序违例、功耗热点和信号完整性问题。文章系统介绍了序分析、功耗分布、信号眼图及多工艺角对比等核心场景的可视化方法,并提供了完整的Python代码实现,涵盖从数据生成到多种高级图表(如小提琴图、热力图、桑基图、眼图、雷达图等)的绘制,全面展示了如何利用Matplotlib、Seaborn和Plotly等工具进行专业级EDA数据分析与呈现。; 适合人群:具备一定Python编程基础,从事集成电路设计、验证或物理实现的工程师,以及对芯片设计自动化(EDA)工具开发感兴趣的科研人员和技术开发者。; 使用场景及目标:①在RTL验证、综合与布局布线阶段快速识别序违例路径;②通过功耗热力图定位芯片热点区域,优化电源网络设计;③分析高速接口信号质量,评估眼图张开度与抖动特性;④在签核阶段完成多工艺角性能对比,支撑设计鲁棒性决策; 阅读建议:此资源不仅提供理论讲解,更强调实战编码能力,建议读者结合代码逐模块运行调试,深入理解每种可视化技术背后的工程意义,并可将其扩展应用于实际项目的数据分析流程。

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧