机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 6039|回复: 21

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

[复制链接]
发表于 2013-9-14 17:08:27 | 显示全部楼层 |阅读模式
本帖最后由 昨日明月 于 2013-9-14 17:46 编辑
: t% N' n/ e6 r' d/ J. ]# k4 q1 l- s- c
# include <stdio.h>
( Q0 u* y0 I& h* Gint main(void)) t* f" K2 [0 F
{3 L) M5 m9 \2 E- ?+ _7 z
int i;& V* Y5 k- Z% w5 Y' n" W
int a;
$ i& Q+ n6 G' A. Pint b;5 Y6 c/ S  U. n- q% h
int c;2 v$ D( S, \3 @( k) E1 _' ~4 W
double n=0;
# @& B6 \6 |) R, R    int  m=22734;
) ?1 M% G3 z  t' j% ]* P    for(i=1;i<=57;++i)
2 o* f6 Y% Y! \! ]{0 [# N! l. K# @3 a1 Y! O
  n=m*i;" M1 H5 d( x9 m$ `* ^+ A) x% d
  a=n/3600;
  L8 Z9 v7 D4 m0 j6 [# w" h3 ^  b=((n/3600)-a)*60;" `4 l) Q$ u* v; ]0 e
  c=(((n/3600)-a)*60-b)*60;: M# X6 n- X: W" b  J! I7 c. C
  printf("%d°%d′%d″\n",a,b,c);, x& ~5 z' t: e, Z. r9 D
}
! I& g6 r1 ]4 _/ J2 Vreturn 0;
0 l# U+ A2 U3 t* G* ~6 T}
3 B" f. r& ?" K3 c& Y/ x4 u5 N+ ~0 S& ~. u
输出结果:
- L2 G9 t8 I) l) G$ G  l
6°18′54″* r+ h# k: Q/ u2 P
12°37′48″7 r  g2 g6 K9 Y/ K3 w
18°56′42″
7 E& x- O  D/ G3 h( p# f25°15′36″
, G+ y# `$ w2 s# _, u31°34′29″
。。。。。  W% v4 R/ G3 C
341°0′35″
+ z" T# U, _  l' C. n347°19′29″0 r1 H& K9 C+ y) d) o
353°38′23″! q; U/ D. Q( I" E
359°57′17″
# e9 V* Z: f) O- A; J# ~
Press any key to continue  D5 g3 M& s* d0 I' _. F% t
第五排正确的结果应该是31°34′30″  想问一下这个程序哪里出问题了,理论计算与计算机程序计算结果相差1秒5 @2 O$ {- L- T) B$ O* D9 ?1 g& a
ps:1°=60′=3600″

- e. E; d; u/ M" D) ?& k, n& b
回复

使用道具 举报

发表于 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 ?8 p. u1 I" f  Y  x不懂
- ^9 u/ o) G- v/ k4 L
就是加工齿轮 需要将360°等分。多少个齿数就多少等分& |" e0 R$ [( d% z, h) w  F/ b
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-14 19:03:12 | 显示全部楼层
本帖最后由 昨日明月 于 2013-9-14 19:04 编辑
: R0 e1 z, M( S9 o4 o9 p1 F
5 \* z3 O$ y) L$ x/ F/ H/ v( Zhttp://www.cmiw.cn/forum.php?mod=attachment&aid=Mjk3MDM4fGUwYzVmZGMzMWJkZTgyNWViZDRhYjg2NWM3ZDgxZjRlfDE3Mzk5MjA0MjU%3D&request=yes&_f=.jpg 完善了程序。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2013-9-14 19:12:47 | 显示全部楼层
double也是浮点数据类型,它比float更大,这种东西计算精度不高。
% W2 [0 H0 E1 V& A% q: `/ k' M6 T! S5 b
由于n是doubule型,那a、b、c与n运算后,全部自动升级为double型了。
6 _  G4 G' q. y  g( [: `+ d
  A6 b, F0 ^5 [% w+ Q! [由于360*3600=1296000,已经超过int的最大值范围了,对这种超大的整数运算,你需要使用“大数运算”的方法去处理。) l& ~' I. w# k, Z$ w, z

4 ^8 B  A6 L" r, B关于C语言的大数运算,网上有很多相关的资料。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-14 19:55:38 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12 : P# F) i% u- e* n) U; U
double也是浮点数据类型,它比float更大,这种东西计算精度不高。) W! L$ |8 o+ |& U: v
5 Q4 }$ X" v; \1 g) m- ^4 c/ \
由于n是doubule型,那a、b、c与n运算后 ...
! [( f1 ]4 h/ A/ y2 X" M7 c# q. C1 z5 t
嗯 谢谢。: T( J% F6 B4 u: B* V, q! I" B) |
回复 支持 反对

使用道具 举报

发表于 2013-9-14 23:09:36 | 显示全部楼层
学习来了
回复 支持 反对

使用道具 举报

发表于 2013-9-14 23:10:45 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12 * m2 i( M0 X8 A' k
double也是浮点数据类型,它比float更大,这种东西计算精度不高。
) o$ R+ t1 h' m1 U- E/ |2 D! q
8 W$ F) A& j% f, `由于n是doubule型,那a、b、c与n运算后 ...
2 I7 [: S8 I1 Y8 A# N0 A
在32位机器上,int占用4个字节,1个字节8位,故int共可表示2^32=4294967296种信息,32位的第一位为符号位,故其值域为 -2147483648 ~ +2147483648,容纳楼主的数值还是有余的,没有超范围。
  f. P6 b: {0 B' K
4 l0 A5 b7 O8 L! r+ Xa=n/3600,在计算n/3600时,会建立一个double型的临时变量用以存放结果,然后再将结果的整数部分赋值给a,而不会将a升级成double型。因为a、b、c被定义成int时,在内存中已经被分配了4个字节,而double型占用的是8个字节,所以它们是不可能升级成double型的。
+ N+ L( \+ v- Q7 R
  s8 c" u( l+ n* M8 P# Q0 b
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-2-19 07:13 , Processed in 0.065326 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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