机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 6306|回复: 21

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

[复制链接]
发表于 2013-9-14 17:08:27 | 显示全部楼层 |阅读模式
本帖最后由 昨日明月 于 2013-9-14 17:46 编辑 * e2 ~& `( d2 Q' K: S2 e% Y) a

) h" O9 ^1 A. `0 }6 k1 y: [2 [. G# include <stdio.h>! D! R! S0 R) S' P/ `0 d8 {9 [
int main(void)
6 |! ~+ M+ X8 Q; v{% l; D, m% t3 d5 v
int i;- i2 Z2 B3 X9 v7 m2 q* ?
int a;
% K$ I8 Z3 K$ N% N3 D: w: }5 }int b;" q- G9 o  _/ |; ^, m9 G
int c;: }: {# m  d: ^3 U( P/ a2 g
double n=0;
5 N" C" Z; _" _% D: v    int  m=22734;
, W# v5 q) p6 r& o  l    for(i=1;i<=57;++i)6 Q) R0 N8 w+ u, V0 [2 f. S
{; Q8 `2 Z  R8 ?, W3 g# W, `! p
  n=m*i;
- t2 b- q2 w' h/ x- s9 @+ {% l  a=n/3600;
9 C( k; c+ Q, w+ n; N9 t* {0 I  b=((n/3600)-a)*60;
/ ^( F* L) A; M( M  c=(((n/3600)-a)*60-b)*60;7 h" [- u, E6 H) O% V2 N
  printf("%d°%d′%d″\n",a,b,c);
" g9 [: @4 m4 i}
, D% h; X4 p+ d( {4 l* b  Breturn 0;
" Y- T0 J- `$ Q  R}
1 L! @2 N- r, T" X' G  [' a
2 ~- }9 E# o+ r3 c+ ?) c输出结果:5 P" V) O  y4 i  R
6°18′54″
8 r% w  g4 c* n0 y6 x, G12°37′48″
  e0 I1 J* v  V" K. H# k7 R6 Z18°56′42″; I( M6 a  }8 N/ L: }9 j/ k/ I
25°15′36″4 ^2 g3 S2 o/ O' }8 i
31°34′29″
。。。。。. P2 b9 L* Z  w" N4 a# s: Y
341°0′35″
8 q7 Q/ g8 W  V4 e$ Y347°19′29″
* Z6 I! V- p! w7 T2 u2 l8 q7 C353°38′23″, W- V- s9 k' I5 R( U
359°57′17″

: ^" Y6 g$ H+ M1 P& w
Press any key to continue
7 E7 F/ |( \- z8 g, f4 P6 m+ y第五排正确的结果应该是31°34′30″  想问一下这个程序哪里出问题了,理论计算与计算机程序计算结果相差1秒
& S, S/ v1 S7 M& a  eps:1°=60′=3600″
) ~9 @+ g7 i' i$ [  h
回复

使用道具 举报

发表于 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 % M% H2 C% e/ J$ ]
不懂
1 p) K! ?5 N' m$ x' L% ~* U2 G
就是加工齿轮 需要将360°等分。多少个齿数就多少等分
* H2 G; ]0 c7 L
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-14 19:03:12 | 显示全部楼层
本帖最后由 昨日明月 于 2013-9-14 19:04 编辑 + T( ], U9 H8 S! x

& t4 Q+ t, E- Q; Zhttp://www.cmiw.cn/forum.php?mod=attachment&aid=Mjk3MDM4fGZlNmFmNDM1YWMxZDhmZjJiZTEzYTAxMTk4MmVkYzI5fDE3NDYwNTM4MTg%3D&request=yes&_f=.jpg 完善了程序。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2013-9-14 19:12:47 | 显示全部楼层
double也是浮点数据类型,它比float更大,这种东西计算精度不高。
( T- o& w% Q9 |" ~. P- e4 q0 B  \, b  R9 z
由于n是doubule型,那a、b、c与n运算后,全部自动升级为double型了。3 O- F, M% l, `0 N
# S: `# R( m! _4 V/ k0 L% x5 E
由于360*3600=1296000,已经超过int的最大值范围了,对这种超大的整数运算,你需要使用“大数运算”的方法去处理。1 }) f7 ?. `% i7 ^. c9 t

/ j% R8 `' J4 R关于C语言的大数运算,网上有很多相关的资料。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-14 19:55:38 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12
( U$ e! i8 u: i2 hdouble也是浮点数据类型,它比float更大,这种东西计算精度不高。
7 z" v5 `7 q, m0 j' a, d
# v2 q, s0 y5 f; [8 g% V; H由于n是doubule型,那a、b、c与n运算后 ...
, ^" ~- A( b6 ^6 m6 E
嗯 谢谢。
' g4 B, ~: l+ }4 C
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2013-9-14 23:10:45 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12
  |  `! m" K8 hdouble也是浮点数据类型,它比float更大,这种东西计算精度不高。
8 b" K: a( v6 G
% ?( N+ s0 o% k由于n是doubule型,那a、b、c与n运算后 ...

' B1 ~. l& ?3 L/ o& d6 r% g在32位机器上,int占用4个字节,1个字节8位,故int共可表示2^32=4294967296种信息,32位的第一位为符号位,故其值域为 -2147483648 ~ +2147483648,容纳楼主的数值还是有余的,没有超范围。
% R& q$ e) O* Y7 [* z/ v$ z3 e4 Q7 v; z4 N
a=n/3600,在计算n/3600时,会建立一个double型的临时变量用以存放结果,然后再将结果的整数部分赋值给a,而不会将a升级成double型。因为a、b、c被定义成int时,在内存中已经被分配了4个字节,而double型占用的是8个字节,所以它们是不可能升级成double型的。
( ]  B8 g1 F1 k. \6 k( K1 K: Y/ Q% F, K  A6 @6 D
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-1 06:56 , Processed in 0.076150 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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