找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 6872|回复: 21

求解一个C语言程序功能是每隔6°18′54″就增加6°18′54″并输出结果的程序问题。

[复制链接]
发表于 2013-9-14 17:08:27 | 显示全部楼层 |阅读模式
本帖最后由 昨日明月 于 2013-9-14 17:46 编辑 6 l+ w0 |! e+ k; x5 l' }5 d5 O( I
( y) ?1 `( a$ }% b! L
# include <stdio.h>  y8 G/ z3 H" M- G) c6 n
int main(void)5 h5 n8 ~' t8 E! B
{/ }. d' P' H* `  s1 ~, E4 J6 i
int i;
& H7 F" u: u3 h, `" }, d8 bint a;9 e& h/ c8 c% I, n: t
int b;
9 C  u0 v" F& jint c;
& q4 q0 V& ~" N( q/ _! x/ Ddouble n=0;6 K1 y  b( z6 [) v3 H9 I/ {% {
    int  m=22734;
' A& A/ O' W' t  b! ?    for(i=1;i<=57;++i)
' ~2 a1 b! y0 A# [8 ~{+ s" _3 h( S% h8 W1 x
  n=m*i;% f; t5 C. o4 }1 u" i
  a=n/3600;7 [0 c: C# V( A9 q0 K9 z$ ?
  b=((n/3600)-a)*60;
' W( Z# D& V! O' f+ Y9 I6 y( E  c=(((n/3600)-a)*60-b)*60;
  y' M% O. u& U8 \' Z6 u1 b: j  printf("%d°%d′%d″\n",a,b,c);) \& L8 L, y5 P2 g
}! O+ E# g* j4 U) B
return 0;% Y5 h) y. f% M! S) k1 u9 i. B% O: S
}* G" ]8 W- ^' }' A! Z+ q/ v) G
6 _( b* }9 S. k- G) f' O# N' H7 k- h
输出结果:( A; a* a" t) J3 h
6°18′54″7 G, w' @/ X' y/ d# G  M4 m
12°37′48″
7 c: X, d& D. u/ ~; a18°56′42″
( M$ H  ?/ e4 q) d' E2 g25°15′36″
/ i; a' n- G3 n( K+ `: y31°34′29″
。。。。。
5 D: e" v+ ]" |" J
341°0′35″
3 x" v& O4 H# i, N- j" `+ v4 k7 P! _347°19′29″
; J( h% T$ s+ O0 q/ M: g353°38′23″& @; r& V, B. R
359°57′17″
9 N: k1 C$ Z" C/ a: ~
Press any key to continue
* W  ^+ Z0 R# L第五排正确的结果应该是31°34′30″  想问一下这个程序哪里出问题了,理论计算与计算机程序计算结果相差1秒' ~0 u7 k; J& P. I! f
ps:1°=60′=3600″

; l5 P% R: s0 l. P  Q% h/ o
回复

使用道具 举报

发表于 2013-9-14 17:29:19 | 显示全部楼层
a,b,c怎么能定义整数呢,我去

点评

就是要输出整数,你好好看看程序  发表于 2013-9-14 17:32
 楼主| 发表于 2013-9-14 17:32:07 | 显示全部楼层
就是要输出整数,你好好看看程序

点评

不可能吧,就那个算错了,其它56结果都是对的。  发表于 2013-9-14 17:35
我也是提个建议呵呵  发表于 2013-9-14 17:35
整数精度不够吧  发表于 2013-9-14 17:34
发表于 2013-9-14 18:47:47 | 显示全部楼层
不懂
 楼主| 发表于 2013-9-14 18:53:44 | 显示全部楼层
风随意 发表于 2013-9-14 18:47
3 ~  ^/ e: _; w2 P) ~不懂
! l% K7 a3 z5 K( ~  ]
就是加工齿轮 需要将360°等分。多少个齿数就多少等分
- T" X( G" a: }( R/ a& R# K9 Y/ I* M( p
 楼主| 发表于 2013-9-14 19:03:12 | 显示全部楼层
本帖最后由 昨日明月 于 2013-9-14 19:04 编辑
9 @: y# p: \4 K4 W
5 J/ q8 @+ y! }% `http://www.cmiw.cn/forum.php?mod=attachment&aid=Mjk3MDM4fDA1OGI1MzQyfDE3NjA2OTk3NDd8MHw%3D 完善了程序。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
发表于 2013-9-14 19:12:47 | 显示全部楼层
double也是浮点数据类型,它比float更大,这种东西计算精度不高。* T- P0 @; s% B2 s/ @& Q
! D% e* O7 J5 r( l
由于n是doubule型,那a、b、c与n运算后,全部自动升级为double型了。& \, O* [  B2 t) a, u( L7 P

* D: H" [  G/ b+ S, i5 ]# g2 ^由于360*3600=1296000,已经超过int的最大值范围了,对这种超大的整数运算,你需要使用“大数运算”的方法去处理。- p  l( R2 l) P8 d$ ~9 K

+ o7 u4 _! o" I5 S' }5 r关于C语言的大数运算,网上有很多相关的资料。
 楼主| 发表于 2013-9-14 19:55:38 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12 ( S% E. S! @4 H+ O! L6 e( k
double也是浮点数据类型,它比float更大,这种东西计算精度不高。+ s& k2 h  H. h- X2 D

8 E* w1 ^' u+ e由于n是doubule型,那a、b、c与n运算后 ...

8 O$ R9 j7 o* H/ R) x嗯 谢谢。
% u* l& y- m' y% @/ S( o1 n
发表于 2013-9-14 23:09:36 | 显示全部楼层
学习来了
发表于 2013-9-14 23:10:45 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12
' x% o3 r1 H" p+ Mdouble也是浮点数据类型,它比float更大,这种东西计算精度不高。( F# V6 C% \8 U% {

$ P$ x- ?) Z7 [' ]4 U. o由于n是doubule型,那a、b、c与n运算后 ...
+ S% y! M$ }' a& {5 Y
在32位机器上,int占用4个字节,1个字节8位,故int共可表示2^32=4294967296种信息,32位的第一位为符号位,故其值域为 -2147483648 ~ +2147483648,容纳楼主的数值还是有余的,没有超范围。
' H, U/ C0 X5 P4 |0 [- m* L: b7 |9 f: T0 o% Q- H
a=n/3600,在计算n/3600时,会建立一个double型的临时变量用以存放结果,然后再将结果的整数部分赋值给a,而不会将a升级成double型。因为a、b、c被定义成int时,在内存中已经被分配了4个字节,而double型占用的是8个字节,所以它们是不可能升级成double型的。" F3 K1 |9 }* e* X8 V0 n9 G

. U2 k2 f: ~6 ^3 J% H
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Archiver|手机版|小黑屋|机械社区 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2025-10-17 19:15 , Processed in 0.093419 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表