机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 6308|回复: 21

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

[复制链接]
发表于 2013-9-14 17:08:27 | 显示全部楼层 |阅读模式
本帖最后由 昨日明月 于 2013-9-14 17:46 编辑 ; h/ T8 x7 m3 Y1 t4 L9 w, i
9 s: f( @) f, o$ g5 `% r5 U+ s
# include <stdio.h>
' Q2 ~7 [( i( x/ ?5 o/ Yint main(void)  E# [# c( m$ Y2 A3 U
{
( u# m. K# ^8 Y: N% w( Zint i;! [# j2 C* f, o' v" E
int a;
4 q( q5 s0 |% S, k! f" Bint b;0 g; ^; b! z' _3 N: l
int c;1 w3 Y; u/ s0 Z- J3 E0 [3 \
double n=0;5 r# L: U. C, ^8 s, Q# c: K# C. ?- `
    int  m=22734;
, S, Z, |* a# X) q, U+ s& l    for(i=1;i<=57;++i)
- _* d/ C5 W: X1 s{
8 b0 g, ^" T, T1 J3 |+ J* f  n=m*i;
8 P. T1 d, z: L1 x# J+ R  a=n/3600;3 G8 g8 R8 U: L% c7 e
  b=((n/3600)-a)*60;! X8 j& H+ m% ?5 X
  c=(((n/3600)-a)*60-b)*60;& f4 q6 y1 I: c
  printf("%d°%d′%d″\n",a,b,c);6 g, W2 I$ p( }, O5 J
}  K: H  v' C& Y* |
return 0;
! `/ a. O$ r2 J% \+ A  v$ d# {6 a3 L}& u, Y. H; o% B) p$ \0 V
" d6 T6 L3 ~& V
输出结果:9 R5 d3 X" v# @: Z( v8 l$ D  a
6°18′54″
5 h5 T( b" L3 `* Z% b% a' N' j+ y5 V12°37′48″
. x6 [/ {$ j) R' t18°56′42″: T' ~% ?/ m* v" T/ u, L# Q
25°15′36″; M: _  q" C. U- G& n  |' j. [
31°34′29″
。。。。。( [( K+ b' v0 s4 }* \1 ~( T
341°0′35″
0 v8 |2 p0 l7 A7 A347°19′29″
; S: h5 `$ w* Z4 e: S353°38′23″( [7 V3 k3 N6 L1 ]/ h7 v# o
359°57′17″
5 u+ f2 ?. b- v0 E6 x2 w' k" j
Press any key to continue
7 o; T! M3 q' G% p* P/ w. `第五排正确的结果应该是31°34′30″  想问一下这个程序哪里出问题了,理论计算与计算机程序计算结果相差1秒
. n+ x& d% p" s3 m- Rps:1°=60′=3600″

( K. ~8 c: e( x$ Y
回复

使用道具 举报

发表于 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
7 p9 ?- N* a  i* ?不懂
) X5 J7 ?) f, \  e
就是加工齿轮 需要将360°等分。多少个齿数就多少等分
1 B' r' R, T; G. Z, z
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-14 19:03:12 | 显示全部楼层
本帖最后由 昨日明月 于 2013-9-14 19:04 编辑
7 Q- ~5 O1 ]4 r& v4 q$ g2 \
, G* w$ J7 \. C1 P& ], v! `1 B+ Zhttp://www.cmiw.cn/forum.php?mod=attachment&aid=Mjk3MDM4fGVhOTFmYzYwNTE4YWZlZGJkYjk0M2M5YzQ4YjNjMTNjfDE3NDYwNzM0NDA%3D&request=yes&_f=.jpg 完善了程序。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2013-9-14 19:12:47 | 显示全部楼层
double也是浮点数据类型,它比float更大,这种东西计算精度不高。; o  z" z3 U7 O3 W
* J5 o+ q, x8 ~& D  G% X
由于n是doubule型,那a、b、c与n运算后,全部自动升级为double型了。1 }5 @* C, c) O
# _! B: {4 N9 V
由于360*3600=1296000,已经超过int的最大值范围了,对这种超大的整数运算,你需要使用“大数运算”的方法去处理。4 x7 s$ c! v' }! Z

2 H) e7 R6 O  B- o, L# K关于C语言的大数运算,网上有很多相关的资料。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-14 19:55:38 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12 " C. _' `! u3 m6 D2 E' f
double也是浮点数据类型,它比float更大,这种东西计算精度不高。! c) N* ?# ?8 C% h
* ]6 R& R2 c! i- E+ N' x0 w
由于n是doubule型,那a、b、c与n运算后 ...
7 c; ]2 j1 \! s
嗯 谢谢。& d9 L1 g7 z6 [. Q* N
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2013-9-14 23:10:45 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12
9 H" ]! j: B$ s) E" `3 `  @double也是浮点数据类型,它比float更大,这种东西计算精度不高。
% j8 e& r; r) y5 O% Q, }; ~5 e9 g1 Z1 L6 n
由于n是doubule型,那a、b、c与n运算后 ...

2 x# {1 Y0 s. W9 G% \在32位机器上,int占用4个字节,1个字节8位,故int共可表示2^32=4294967296种信息,32位的第一位为符号位,故其值域为 -2147483648 ~ +2147483648,容纳楼主的数值还是有余的,没有超范围。& H, g: R8 g) H6 p( F8 V% ]
* r2 I% r0 T) N; Z* y
a=n/3600,在计算n/3600时,会建立一个double型的临时变量用以存放结果,然后再将结果的整数部分赋值给a,而不会将a升级成double型。因为a、b、c被定义成int时,在内存中已经被分配了4个字节,而double型占用的是8个字节,所以它们是不可能升级成double型的。
. y/ `/ P3 Y# V9 k0 s
3 u3 S* q; Z9 `0 h$ U0 e$ f
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-1 12:24 , Processed in 0.091348 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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