找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 6563|回复: 21

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

[复制链接]
发表于 2013-9-14 17:08:27 | 显示全部楼层 |阅读模式
本帖最后由 昨日明月 于 2013-9-14 17:46 编辑   U' p  z; q0 B

! @' M& j$ @% A; |% v- k# include <stdio.h>6 _5 A4 q" P, v8 b8 A/ c
int main(void)
$ ?" Y  {6 T; R5 I2 e# v" n6 X6 p{6 v, I% ^4 I! H8 a1 V; T
int i;
3 p/ |! U! [0 e* @: Uint a;
. _6 n: m6 I1 y% }+ ^int b;! t; B$ l0 R2 K. ^9 C" f8 V- `
int c;
, |& ^2 g8 T  m6 Z# rdouble n=0;
7 _; p; f) c% C! _2 ?: K    int  m=22734;
7 Y4 C; t! v, j. m) }    for(i=1;i<=57;++i)  [- u, Z0 D' x, M8 Z% s+ \& O1 U
{3 B/ D9 ]" X4 W2 w$ Z. g7 w
  n=m*i;
9 Z& u) r$ @. a! A. A7 D3 ?0 _  a=n/3600;7 i' r5 v" a0 t( `6 C: y/ p
  b=((n/3600)-a)*60;  e. [) c2 ?' A% Z3 V8 ?* \
  c=(((n/3600)-a)*60-b)*60;
' E/ _0 E6 ]+ t. y" E) I  printf("%d°%d′%d″\n",a,b,c);' u) q0 e8 X% H" {0 j
}
- ^% Q- K' R" r4 Z' U) sreturn 0;  }" _2 ]" B! w/ K7 V2 v
}
" C& V: w3 f' o$ l$ L. Y% D- Y1 I
) J& T  O8 Q8 [输出结果:9 R' v' f+ x2 I. l) F9 a& d
6°18′54″
9 _7 z2 Y3 {8 J12°37′48″, x7 Z; E3 v% F7 [$ b
18°56′42″
+ @& }, K, A/ L9 s% @+ E3 K. a25°15′36″" h( S) h6 i' i/ [, U+ \& O  ^
31°34′29″
。。。。。
; r% X+ X5 T! s1 |' C% [
341°0′35″
% y) z$ e0 C6 L. h4 N347°19′29″
. \; w' W3 t$ G! N5 O: c353°38′23″3 B7 F; n9 }- h/ M
359°57′17″

2 e. X3 \& e' x' x+ v% L  h1 T
Press any key to continue
( X* r3 `+ Z% Z( z  a7 C% ~& |4 K第五排正确的结果应该是31°34′30″  想问一下这个程序哪里出问题了,理论计算与计算机程序计算结果相差1秒
7 g* I% G0 _$ P' r  H8 yps:1°=60′=3600″

4 \& A6 o$ T/ F" l% N5 S# q1 }
回复

使用道具 举报

发表于 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
/ l# i  \# v( e2 f3 ^- c不懂
7 d9 ~* c  e- d
就是加工齿轮 需要将360°等分。多少个齿数就多少等分8 r3 w) D/ g% V: }
 楼主| 发表于 2013-9-14 19:03:12 | 显示全部楼层
本帖最后由 昨日明月 于 2013-9-14 19:04 编辑
7 w/ R$ I2 p* T; u
' K1 f1 q8 h4 y. Y2 P) qhttp://www.cmiw.cn/forum.php?mod=attachment&aid=Mjk3MDM4fDFjZmMwYjA1fDE3NTI2MTQwMjR8MHw%3D 完善了程序。

本帖子中包含更多资源

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

×
发表于 2013-9-14 19:12:47 | 显示全部楼层
double也是浮点数据类型,它比float更大,这种东西计算精度不高。+ M. H  o9 W1 |" _% ]. M

$ ?" H6 d% r9 ~6 X由于n是doubule型,那a、b、c与n运算后,全部自动升级为double型了。
1 h% K1 V+ s; e
( p) ]" k* s; E8 \1 k! s* l由于360*3600=1296000,已经超过int的最大值范围了,对这种超大的整数运算,你需要使用“大数运算”的方法去处理。+ @3 |3 h+ [3 S' Y$ P
% w+ w3 n+ m& b5 p  F: _
关于C语言的大数运算,网上有很多相关的资料。
 楼主| 发表于 2013-9-14 19:55:38 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12
2 Y  J0 @0 ^: idouble也是浮点数据类型,它比float更大,这种东西计算精度不高。  a4 V: L# v, @- j5 j

4 J  P1 M3 N$ m  p6 `& r  g% L由于n是doubule型,那a、b、c与n运算后 ...
) L, }0 U/ L/ ?6 @" |9 y
嗯 谢谢。
+ J( ^* b* J3 C- `1 Y2 }
发表于 2013-9-14 23:09:36 | 显示全部楼层
学习来了
发表于 2013-9-14 23:10:45 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12
1 I- o0 t% T2 d/ g, Ddouble也是浮点数据类型,它比float更大,这种东西计算精度不高。. T6 _$ N2 T+ b* W4 [4 I$ X) L

+ W2 M- [4 w4 R- ~/ p; o由于n是doubule型,那a、b、c与n运算后 ...
2 ^3 z& M& D3 o
在32位机器上,int占用4个字节,1个字节8位,故int共可表示2^32=4294967296种信息,32位的第一位为符号位,故其值域为 -2147483648 ~ +2147483648,容纳楼主的数值还是有余的,没有超范围。
) i9 g- _0 c6 y: B0 l! u5 y& ^2 I7 R9 Z$ B9 Y
a=n/3600,在计算n/3600时,会建立一个double型的临时变量用以存放结果,然后再将结果的整数部分赋值给a,而不会将a升级成double型。因为a、b、c被定义成int时,在内存中已经被分配了4个字节,而double型占用的是8个字节,所以它们是不可能升级成double型的。
  Y# d* W* _, w" p
2 b9 N- G9 E4 D) K- h! u
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-7-16 05:13 , Processed in 0.089383 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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