机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 5065|回复: 21

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

[复制链接]
发表于 2013-9-14 17:08:27 | 显示全部楼层 |阅读模式
本帖最后由 昨日明月 于 2013-9-14 17:46 编辑
- ?2 D+ W" |8 j+ F6 m1 P& V, Y# S  I  f+ e9 M8 P
# include <stdio.h>
- h3 `' ]+ }& ~7 C9 B: zint main(void)
: T/ {; t$ D7 v5 F" ^" @% \{+ v: J! T  L+ r8 }
int i;; q" P. s0 N) O
int a;
! H% s. Y( R$ v1 s' m; `% s  I1 g: Wint b;% L6 H' R0 n) E$ u: i2 G
int c;2 k+ v7 y  u0 Y8 }
double n=0;
5 E, `: ^5 F# P' A0 _' q8 e  d; H$ ?    int  m=22734;" L: ]/ u# p! l2 T# i' O! V
    for(i=1;i<=57;++i)2 d5 Y) Z, B$ d2 A, F
{
; b' M% ^+ F) w: V  n=m*i;  E2 }0 g, B) m* `
  a=n/3600;% ~0 P- [. V) {  w3 O
  b=((n/3600)-a)*60;
8 H8 [6 _% _4 `0 L0 J  c=(((n/3600)-a)*60-b)*60;
0 @* S% t5 z% J8 ]5 V' B  printf("%d°%d′%d″\n",a,b,c);
; n2 K) _% P, x( h7 ^9 K7 L. D) n}9 ?2 ]2 A+ U- I. ]" T* C7 c/ n: F8 Z
return 0;
, }. W0 e, F% x' n. Z6 x}, @& p& p, |; [% Y5 `

/ D+ K% M# c# h输出结果:8 b1 k' G% u3 q6 A$ Z& D
6°18′54″  m+ W7 B! F* N* k6 p8 Z' r
12°37′48″
" \& I- e9 i. R* h. a! q: z% ]18°56′42″* m* `3 {: ]4 N& H$ \5 |
25°15′36″
+ k% S; h( |  U31°34′29″
。。。。。! w- f% y2 \) k0 [/ j
341°0′35″
( I3 H- P6 l' O8 O! Y347°19′29″+ t% a7 u, ?; k3 |+ x
353°38′23″
& I! I; r4 y6 Z9 w& O+ J6 j359°57′17″
# G, G9 A+ ]; H0 y: `1 D; w
Press any key to continue; Y9 A; n2 [. E" @8 |  l" K
第五排正确的结果应该是31°34′30″  想问一下这个程序哪里出问题了,理论计算与计算机程序计算结果相差1秒
7 v, L- a* K% J- T/ ^ps:1°=60′=3600″
5 ?; p% z" `! I* K( `( R
回复

使用道具 举报

发表于 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
* j: o9 W+ ?8 N0 y8 a不懂

" K2 R0 I; d1 x! J: _" H& K2 g1 y就是加工齿轮 需要将360°等分。多少个齿数就多少等分+ y; p0 N7 @* x' m
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-14 19:03:12 | 显示全部楼层
本帖最后由 昨日明月 于 2013-9-14 19:04 编辑 , m  U* H  d+ y$ i

& G2 K0 }' v* f, g- Q8 Yhttp://www.cmiw.cn/forum.php?mod=attachment&aid=Mjk3MDM4fDVhZTJmZTBhYTI4ZWVlNTU3ODQ4YWY4MGFiMzM4YTFjfDE3MTUwNjE0Nzc%3D&request=yes&_f=.jpg 完善了程序。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2013-9-14 19:12:47 | 显示全部楼层
double也是浮点数据类型,它比float更大,这种东西计算精度不高。
1 l2 w" v* m! ?: e% }3 ~
- @9 `3 g* i$ |7 I) ?# W由于n是doubule型,那a、b、c与n运算后,全部自动升级为double型了。. c+ @/ E3 q/ T4 z3 }/ B

" }5 K$ M+ E8 `+ _' ]由于360*3600=1296000,已经超过int的最大值范围了,对这种超大的整数运算,你需要使用“大数运算”的方法去处理。
) q0 t: I% T! ~, e" p. O% ]$ X4 A# |0 A4 J) P: O
关于C语言的大数运算,网上有很多相关的资料。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-14 19:55:38 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12 " ~8 w  @# G' ^
double也是浮点数据类型,它比float更大,这种东西计算精度不高。4 `, H) e) V2 I& l/ C1 J3 @& f* N
! i/ I2 }! c7 [1 H  m
由于n是doubule型,那a、b、c与n运算后 ...

% n" G! z+ u8 P: l* ]9 D: _, v嗯 谢谢。" S5 U0 m+ N% z, b2 J$ E  e
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2013-9-14 23:10:45 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12 / s  X9 q, e- ^8 a
double也是浮点数据类型,它比float更大,这种东西计算精度不高。
# H, K" e6 h- T9 x0 n* \7 W% v4 ?9 v; i2 k1 X
由于n是doubule型,那a、b、c与n运算后 ...

1 Q( A; {4 [: g: d2 T* @在32位机器上,int占用4个字节,1个字节8位,故int共可表示2^32=4294967296种信息,32位的第一位为符号位,故其值域为 -2147483648 ~ +2147483648,容纳楼主的数值还是有余的,没有超范围。0 q$ K1 O& n, O2 A

  o" [! c; \4 Oa=n/3600,在计算n/3600时,会建立一个double型的临时变量用以存放结果,然后再将结果的整数部分赋值给a,而不会将a升级成double型。因为a、b、c被定义成int时,在内存中已经被分配了4个字节,而double型占用的是8个字节,所以它们是不可能升级成double型的。. ]; |3 |! U1 U, `+ o8 b- P

8 b# ?# j8 `7 W) h6 y6 i1 n+ O& g
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 13:57 , Processed in 0.070289 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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