求解一个C语言程序功能是每隔6°18′54″就增加6°18′54″并输出结果的程序问题。
本帖最后由 昨日明月 于 2013-9-14 17:46 编辑# include <stdio.h>
int main(void)
{
int i;
int a;
int b;
int c;
double n=0;
intm=22734;
for(i=1;i<=57;++i)
{
n=m*i;
a=n/3600;
b=((n/3600)-a)*60;
c=(((n/3600)-a)*60-b)*60;
printf("%d°%d′%d″\n",a,b,c);
}
return 0;
}
输出结果:
6°18′54″
12°37′48″
18°56′42″
25°15′36″
31°34′29″。。。。。
341°0′35″
347°19′29″
353°38′23″
359°57′17″
Press any key to continue
第五排正确的结果应该是31°34′30″想问一下这个程序哪里出问题了,理论计算与计算机程序计算结果相差1秒
ps:1°=60′=3600″
a,b,c怎么能定义整数呢,我去 就是要输出整数,你好好看看程序 不懂 风随意 发表于 2013-9-14 18:47 static/image/common/back.gif
不懂
就是加工齿轮 需要将360°等分。多少个齿数就多少等分
本帖最后由 昨日明月 于 2013-9-14 19:04 编辑
attach://297038.jpg 完善了程序。 double也是浮点数据类型,它比float更大,这种东西计算精度不高。
由于n是doubule型,那a、b、c与n运算后,全部自动升级为double型了。
由于360*3600=1296000,已经超过int的最大值范围了,对这种超大的整数运算,你需要使用“大数运算”的方法去处理。
关于C语言的大数运算,网上有很多相关的资料。 fmdd 发表于 2013-9-14 19:12 static/image/common/back.gif
double也是浮点数据类型,它比float更大,这种东西计算精度不高。
由于n是doubule型,那a、b、c与n运算后 ...
嗯 谢谢。
学习来了 fmdd 发表于 2013-9-14 19:12 static/image/common/back.gif
double也是浮点数据类型,它比float更大,这种东西计算精度不高。
由于n是doubule型,那a、b、c与n运算后 ...
在32位机器上,int占用4个字节,1个字节8位,故int共可表示2^32=4294967296种信息,32位的第一位为符号位,故其值域为 -2147483648 ~ +2147483648,容纳楼主的数值还是有余的,没有超范围。
a=n/3600,在计算n/3600时,会建立一个double型的临时变量用以存放结果,然后再将结果的整数部分赋值给a,而不会将a升级成double型。因为a、b、c被定义成int时,在内存中已经被分配了4个字节,而double型占用的是8个字节,所以它们是不可能升级成double型的。