问下各位大神,我这个代码怎么t输入18.6-18.9,结果都是错的,输入18.6 s1应该等于1,怎么等于0 18.5结果是对的

fghg00112 2023-03-19 12:39:31
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#define S_crane 300;
#define D_crane 400;
#define ts_Lv 50;
int t1, s1;
void title();
int Coe(int t,int s);
int ch_option();


int main() 
{

	title();//欢迎
	int t;//吨位
	int c;//价格系数
	int ch;
	float s;//跨度
	int jieguo;

	printf("请输入吨位和跨度,按回车确认。\n");
	scanf("%d", &t);//获取吨位

	printf("请输入吨位和跨度,按回车确认。\n");
	scanf("%f", &s);//获取跨度

	c = Coe(t, s);//价格系数
	ch = ch_option();
	if (ch == 111)
		jieguo = c + S_crane;
	if (ch == 121)
		jieguo = c + D_crane;
	if (ch == 221) 
	{
		jieguo = c + D_crane;
		jieguo = jieguo * 1.5;
	}
	if (ch == 211)
	{
		jieguo = c + S_crane;
		jieguo = jieguo * 1.5;
	}


	printf("%d", jieguo);



	return 0;
}



void title() 
{
	printf("**********************************************\n");
	printf("*      欢迎使用起重机检验价格查询系统        *\n");
	printf("**********************************************\n\n\n\n");
}//欢迎

int Coe(t,s) 
{
	printf("%f", s);
	if (t <= 20)
	{
		t1 = 0;
	}
	else if (t - 20 < 10)
	{
		t1 = 1;
	}
	else if (t - 20 >= 10)
	{
		t1 = (t - 20) / 10 + 1;
	}

	if (s <= 18.5)
	{
		s1 = 0;
	}
	else if (s - 18.5 <= 5)
	{
		s1 = 1;
	}
	else if (s - 18.5 > 5)
	{
		s1 = (s - 18.5) / 5 + 1;
	}
	return (t1 + s1) * ts_Lv;
}//价格系数

int ch_option()
{
	int ch_1, ch_2, ch_3;//选择
	printf("请问是年审还是监检或者单梁新装,\n年审请输入1\n监检或者单梁新装2\n");
	scanf("%d",&ch_1);
	printf("请问是单梁还是门机双梁,请输入1或2\n");
	scanf("%d", &ch_2);
	printf("请问是否为正常工作环境,正常选1,有毒高温选2,请输入1或2\n");
	scanf("%d", &ch_3);
	if(ch_1 == 1 && ch_2 ==1 && ch_3 ==1)
		return 111;
	if (ch_1 == 1 && ch_2 == 2 && ch_3 == 1)
		return 121;
	if (ch_1 == 2 && ch_2 == 1 && ch_3 == 1)
		return 211;
	if (ch_1 == 2 && ch_2 == 2 && ch_3 == 1)
		return 221;
	if (ch_1 == 1 && ch_2 == 1 && ch_3 == 2)
		return 112;
	if (ch_1 == 1 && ch_2 == 2 && ch_3 == 2)
		return 122;
	if (ch_1 == 2 && ch_2 == 1 && ch_3 == 2)
		return 212;
	if (ch_1 == 2 && ch_2 == 2 && ch_3 == 2)
		return 222;
	
}

 

s输入18.6      s1应该等于1,    怎么等于0

 

 

...全文
181 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
forever74 2023-03-21
  • 打赏
  • 举报
回复 1

随意敲数据类型的后果。

赵4老师 2023-03-21
  • 打赏
  • 举报
回复 1

代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

zara 2023-03-20
  • 打赏
  • 举报
回复 1

不调试么,走一边大概就能知道问题在哪里吧;好像数据类型有不对

zara 2023-03-20
  • 举报
回复 1
@zara Coe() 里的 s ,最前面的声明是 int 但看函数里的使用,又是 float
Shinebone 2023-03-19
  • 打赏
  • 举报
回复 1

这个问题可能与浮点数精度有关,因为浮点数在计算机中的表示方式可能存在精度损失。在程序中,你将浮点数输入到s变量中,但在Coe函数中,你将其与18.5进行比较。由于在计算机内部存储和表示浮点数时的精度限制,可能会导致s变量与18.5进行比较时的结果不是你期望的。因此,建议你可以将s变量与一个非常接近的整数进行比较,而不是浮点数18.5。例如,你可以定义一个整数常量,如下所示:

#define BASE_S 185

然后,将s与BASE_S进行比较,如下所示:

if (s <= BASE_S)
{
    s1 = 0;
}
else if (s - BASE_S <= 5)
{
    s1 = 1;
}
else if (s - BASE_S > 5)
{
    s1 = (s - BASE_S) / 5 + 1;
}

这样,你就可以将浮点数s转换为整数进行比较,避免了由于精度误差导致的计算结果错误的问题。

fghg00112 2023-03-25
  • 举报
回复
@Shinebone 谢谢🙏,懂
fghg00112 2023-03-19
  • 打赏
  • 举报
回复

t输入16 s输入18.6 ch选择211 结果应该是525,输出的却是450.

内容概要:本文系统研究了Picard迭代法在非线性常微分方程参数估计中的应用,深入阐述了该方法的数学原理及其在参数辨识中的收敛性与稳定性优势。通过构建最小化误差的目标函数,并结合数值积分技术,采用迭代方式逐步逼近系统的真实参数值,有效解决了非线性动态系统中因缺乏解析解而难以进行精确建模的问题。文中提供了完整的Matlab代码实现,涵盖模型定义、迭代求解、参数更新与结果可视化等关键环节,增强了方法的可操作性与工程实用性。研究通过典型非线性系统案例验证了算法的有效性,展示了其在科学计算与工程建模中的良好适应性与推广潜力。; 适合人群:具备常微分方程理论、数值分析基础及Matlab编程能力,从事系统建模、参数辨识、动力学仿真等相关方向的研究生、科研人员和工程技术开发者。; 使用场景及目标:①解决实际工程中非线性微分方程模型的未知参数估计问题;②深入理解Picard迭代法在科学计算中的实现机制与数值特性;③为学术论文复现、科研项目开发或课程设计提供可运行、易调试的技术方案与代码参考。; 阅读建议:建议读者结合文中的数学推导与Matlab代码逐行分析,重点关注迭代流程、目标函数构造与数值积分的耦合实现,通过修改模型结构或噪声条件进行扩展实验,以深化对算法鲁棒性与适用边界的理解。配套资源可通过指定公众号和网盘链接获取,推荐同步学习以加速科研进程。
内容概要:本文详细介绍了一种基于多尺度集成极限学习机(Extreme Learning Machine, ELM)的回归方法,并提供了完整的Matlab代码实现。该方法通过构建多尺度特征表示与集成学习机制,有效提升了ELM在处理非线性、高维复杂数据时的预测精度与模型鲁棒性,特别适用于时间序列回归任务。文档不仅阐述了算法的核心原理与技术流程,还系统展示了其在风电功率预测等工程场景中的应用潜力。同时,文中附带了丰富的科研仿真案例集合,涵盖智能优化算法、深度学习、信号处理、电力系统调度等多个前沿方向,体现了多学科交叉融合的技术优势与实践价值。; 适合人群:具备一定Matlab编程能力,从事科学研究或工程应用的研究生、科研人员及工程技术开发者,尤其适合专注于机器学习、智能算法优化、新能源预测与电力系统建模等相关领域的专业人员。; 使用场景及目标:①用于风电、光伏、负荷等时间序列数据的高精度回归预测任务;②为科研工作者提供可复现的多尺度集成ELM模型代码框架,支持快速算法验证与二次开发;③满足实际工程项目中对高效建模、实时预测与智能决策的技术需求。; 阅读建议:建议读者结合所提供的Matlab代码进行动手实践,深入理解多尺度特征构造与集成策略的设计思想,同时可参考文档中其他相关算法案例进行横向比较与综合应用,以提升整体科研创新能力。

70,039

社区成员

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

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