机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 5732|回复: 21

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

[复制链接]
发表于 2013-9-14 17:08:27 | 显示全部楼层 |阅读模式
本帖最后由 昨日明月 于 2013-9-14 17:46 编辑
* ]2 ?8 ]& P# B+ `' G# T7 `, r2 J# Y4 M+ E) U$ W; a
# include <stdio.h>
  a' z  o7 p! L+ @4 i, S# D7 a2 {int main(void)
  X1 O$ b5 {5 T3 j  I{5 q8 ?* x5 d! H) W+ C
int i;
) Y: P* s! p9 S* P# Q# `int a;
0 F9 P9 y* U* Q  k2 ^: ]int b;8 K. V1 L9 U  L) |7 z% |
int c;
9 d9 u' a# j; g- F- ldouble n=0;  B! w; a$ x8 U3 ^( }1 `( l- f. j
    int  m=22734;
4 G4 Q/ ^, ~4 E) E    for(i=1;i<=57;++i)+ q; p4 x; c) ?- i" J
{
. E  }+ Y0 \' g  H- G( \  n=m*i;2 o3 r& o9 X5 k* h8 J4 K
  a=n/3600;
5 `. [1 S5 L4 U9 [' t; g  b=((n/3600)-a)*60;) \( C; G# A3 m5 r4 ^
  c=(((n/3600)-a)*60-b)*60;  C0 _4 s- c; q- {% Y
  printf("%d°%d′%d″\n",a,b,c);1 x5 [/ e; W9 N% t: D
}
/ N, P" c% V, o9 C+ p7 yreturn 0;
9 }& w! |( l7 W' x# ]5 _! \$ `}' s; R$ d  c, }) v0 d
/ H# @1 L8 K! w2 @# U9 y
输出结果:
2 D3 p. t$ A# ]/ K8 {7 D( ?3 k
6°18′54″
# }; l" ?5 F/ @! b% q* A12°37′48″
7 A; r2 x1 t6 Z18°56′42″* W* y2 z' n6 y3 L0 o, x7 A3 s
25°15′36″0 b: ^! [# `# V* K  |- {2 b
31°34′29″
。。。。。
% h" D4 O- Q- [( k" c# G, [, W% U3 ?
341°0′35″+ o- g" t! {% Y* ?0 d8 L
347°19′29″
4 r6 s# [# g! H5 p353°38′23″
# f! j/ A0 x) Z" i359°57′17″
7 {; B5 p; v8 X2 j
Press any key to continue
2 a1 N) A. b7 J( R5 H第五排正确的结果应该是31°34′30″  想问一下这个程序哪里出问题了,理论计算与计算机程序计算结果相差1秒2 `; t& f2 j( B1 Q0 B
ps:1°=60′=3600″

$ S1 L5 g+ c; y. 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 ( P) O+ ^  V0 p9 ]2 |
不懂

& M5 z4 }: A' Q& `; |就是加工齿轮 需要将360°等分。多少个齿数就多少等分
! U7 W+ ~" i) q
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-14 19:03:12 | 显示全部楼层
本帖最后由 昨日明月 于 2013-9-14 19:04 编辑
/ _) H! e' F; y; `/ `
8 r# \3 R- t, I% c6 Z8 R; ~http://www.cmiw.cn/forum.php?mod=attachment&aid=Mjk3MDM4fDBmODhjMmNiMjI5MTBjMzcyZDU4NDljMjU4YTQzZjA0fDE3MzI1MjAzOTI%3D&request=yes&_f=.jpg 完善了程序。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2013-9-14 19:12:47 | 显示全部楼层
double也是浮点数据类型,它比float更大,这种东西计算精度不高。( D' v) o8 k6 l
0 S  C: e' h1 D
由于n是doubule型,那a、b、c与n运算后,全部自动升级为double型了。
8 [: d) e2 D' b
# \1 @, C( A) b$ |由于360*3600=1296000,已经超过int的最大值范围了,对这种超大的整数运算,你需要使用“大数运算”的方法去处理。* h# X# L! q  ~2 K. E. u5 P* _

2 }0 }0 M) o7 u# O+ a/ n关于C语言的大数运算,网上有很多相关的资料。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-14 19:55:38 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12 + u/ @9 ^; L; G4 ~
double也是浮点数据类型,它比float更大,这种东西计算精度不高。
, Q: |8 L# U8 e- }& x+ w8 ^8 w$ |
由于n是doubule型,那a、b、c与n运算后 ...

/ z4 y7 V6 P/ I, c" i嗯 谢谢。
& B- f3 N" ?/ B& [6 \; u
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2013-9-14 23:10:45 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12 0 q8 E5 y0 D& z8 V4 W" l
double也是浮点数据类型,它比float更大,这种东西计算精度不高。
+ \' z! q/ T. p9 q- w( w7 W! |2 t1 n. g% @+ \; k! F$ }
由于n是doubule型,那a、b、c与n运算后 ...
. Q9 J* c: Z3 `/ r
在32位机器上,int占用4个字节,1个字节8位,故int共可表示2^32=4294967296种信息,32位的第一位为符号位,故其值域为 -2147483648 ~ +2147483648,容纳楼主的数值还是有余的,没有超范围。' }4 m3 p" c5 l& [9 x0 g# w) g* g

/ n/ h; P' M; q0 Q7 T/ p  |a=n/3600,在计算n/3600时,会建立一个double型的临时变量用以存放结果,然后再将结果的整数部分赋值给a,而不会将a升级成double型。因为a、b、c被定义成int时,在内存中已经被分配了4个字节,而double型占用的是8个字节,所以它们是不可能升级成double型的。6 n( N' @! S- o. S  b. A5 D: a* i; ]4 }

1 w+ u7 C+ [1 L8 ^- Z! u
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 15:39 , Processed in 0.060105 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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