问下各位大神,我这个代码怎么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

 

 

...全文
122 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.

69,371

社区成员

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

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