现在的位置: 首页 > 综合 > 正文

C语言—数据类型(两个易错的小程序)

2013年12月10日 ⁄ 综合 ⁄ 共 1247字 ⁄ 字号 评论关闭

第一个程序

#include<stdio.h>
int main(void)
{
	float a,b,c;
	
	b = 2.0e4 + 1.0;
	a = b - 1.0;
	c = b - 2.0e4;
	printf("%f %f %f\n",a,b,c);

	b = 2.0e10 + 1.0;
	a = b - 1.0;
	c = b - 2.0e10;
	printf("%f %f %f\n",a,b,c);
	
	b = 2.0e20 + 1.0;
	a = b - 1.0;
	c = b - 2.0e20;
	printf("%f %f %f\n",a,b,c);

	getchar();
	return 0;
}

运行结果是:
20000.000000 20001.000000 1.000000
20000000000.000000 20000000000.000000 0.000000
200000004008175470000.000000 200000004008175470000.000000 4008175468544.000000
程序解释如下:
首先说明,不同的编译器结果不一样的。出现这种奇怪的结果是由于计算机缺乏足够的进行正确运算所需的十进制位数。
第一个输出明显是正确的结果。
第二个输出,发现不对了,没错,因为他们存储的值已经超过了能表示的最大范围,所以对于科学技术法而言,只会存储指数和底数,那么很明显就丢失了精度。所以才会输出20000000000.000000 20000000000.000000 0.000000。
第三个输出,如果要正确计算,那么计算机要存储21位的数字,但是float数字只有6.7位有效数字,所以出现错误,但是如果将e20改为e4就能全部输出正确,因为float可以存储5位数字。我觉得为什么都错了,是因为我的系统是32位的系统,最大值为2的32次方,当数据的指数为20时候,已经超过了计算机系统能表示的最大的浮点数,(不同意的可以用64位系统帮忙测试一下,我是32位系统没法测试)所以会出现一些不知所云的错误,这个我也不明白,有哪位大哥懂得话,望指教一下小弟。
还有要提醒的是:一般进行浮点类型数据处理时候,不仅效率慢,而且精度低,当然现在已经研制出专门进行浮点运算的CPU了,效率有所提高。还可用这个程序测试其他数据

第二个程序:

#include<stdio.h>
int main(void)
{
	float salary;
	
	printf("\aEnter your salary:");
	printf(" $_______\b\b\b\b\b\b\b");
	scanf("%f",&salary);
	printf("\n\t$%0.2f a month is $%0.2f a year .",salary,salary * 12);
	printf("\rGee!\n");
	
	return 0;
}

运行结果如下:
Enter your salary: $3000___
【这是一行空行】
Gee!    $3000.00 a month is $36000.00 a year .
Press any key to continue
这个程序很简单,我稍微说一下,\b退格键,\r回车符,\t制表符

【上篇】
【下篇】

抱歉!评论已关闭.