机械必威体育网址

找回密码
注册会员

QQ登录

只需一步,快速开始

搜索
查看: 5205 | 回复: 21
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2013-9-14 17:08:27 | 只看该作者 回帖奖励 | 倒序浏览 | 阅读模式
本帖最后由 昨日明月 于 2013-9-14 17:46 编辑
# h+ X5 l$ u* `% i, _7 i/ J! ^" i# V" F/ v7 p# d7 b9 Y K# g2 M a, R/ B
# include
, z8 [- s1 P" b; Zint main(void)% j0 q8 o9 f- |
{5 x1 r9 E- W$ Y$ `" H: Q
int i;
( o$ \ r/ l; G9 T0 b6 m" P* q6 _7 Hint a;+ v* n) I1 V7 m9 J& M/ c+ R9 ~' {
int b;
- y# a3 Z, M+ Kint c;
' F) M' y( F- {, |) O7 zdouble n=0;3 Q# @9 t$ T! @2 K& p- b
int m=22734;
& ~0 j8 n* d6 F( a# pfor(i=1;i<=57;++i)3 A& s8 _8 {* ~8 a
{: n4 D: {/ v+ K0 H. t8 H8 H
n=m*i;
: d, f( g. k; ia=n/3600;: H: I* _" D( C) j
b=((n/3600)-a)*60;2 M) b0 i+ f2 G6 _$ }
c=(((n/3600)-a)*60-b)*60;' o2 g! D4 k" w
printf("%d°%d′%d″\n",a,b,c);; _+ \& ^% I3 n7 o; c; h, q k2 U
}
2 h; Z9 e6 t: E3 qreturn 0;# f% c& _6 |; z& s, W, E
}7 K: y$ G9 r# s% O# [$ N: I8 K
; w; n: ]6 |% A {
输出结果:
& K' \; P9 p# W7 ^* g8 o2 n
6°18′54″
! H J- N$ U, x8 U1 \; I8 P6 U12°37′48″ 2 N( w E H0 G$ D7 {
18°56′42″
/ `0 [. {" M6 e, E, E25°15′36″ + h, e0 P/ S) N. @
31°34′29″
。。。。。 # D% H9 n4 n0 k% F, w
341°0′35″
& L8 E7 G& g! V! A% j, y5 U% w347°19′29″
* B# {. r. L& {% r1 d0 l3 ?9 e353°38′23″
# z; ~4 u5 |8 _9 c6 z359°57′17″

7 ~1 ?8 `. i! ] o* f
Press any key to continue ' E3 c1 x k+ e2 U, Y" X$ W' ?
第五排正确的结果应该是31°34′30″ 想问一下这个程序哪里出问题了,理论计算与计算机程序计算结果相差1秒 $ ?- C$ T3 N0 @5 }* H) V, T
ps:1°=60′=3600″
! E, E( U: p9 d' W. A6 S: |
2#
发表于 2013-9-14 17:29:19 | 只看该作者
a,b,c怎么能定义整数呢,我去

点评

就是要输出整数,你好好看看程序 发表于 2013-9-14 17:32
3#
楼主 | 发表于 2013-9-14 17:32:07 | 只看该作者
就是要输出整数,你好好看看程序

点评

不可能吧,就那个算错了,其它56结果都是对的。 发表于 2013-9-14 17:35
我也是提个建议呵呵 发表于 2013-9-14 17:35
整数精度不够吧 发表于 2013-9-14 17:34
4#
发表于 2013-9-14 18:47:47 | 只看该作者
不懂
5#
楼主 | 发表于 2013-9-14 18:53:44 | 只看该作者
风随意 发表于 2013-9-14 18:47 4 E: \2 k6 r: m" J. t0 U
不懂

+ I& l9 _& I1 f* M" {# y, a就是加工齿轮 需要将360°等分。多少个齿数就多少等分! S: L4 J e" k/ v' I. L% {
6#
楼主 | 发表于 2013-9-14 19:03:12 | 只看该作者
本帖最后由 昨日明月 于 2013-9-14 19:04 编辑
( f& H" w- o: F! p- u
5 `0 V# Y% M0 A, m//www.szfco.com/forum.php?mod=attachment&aid=Mjk3MDM4fGVhNzQxMWJkM2RlMjFiNmIzMTY3YzdjYjNkNThlNjFhfDE3MTc4ODYxNDM%3D&request=yes&_f=.jpg 完善了程序。

本帖子中包含更多资源

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

x
7#
发表于 2013-9-14 19:12:47 | 只看该作者
double也是浮点数据类型,它比float更大,这种东西计算精度不高。; f' e. a7 H8 H$ b$ b% ]! c/ N7 h

7 p, S) I# e1 {由于n是doubule型,那a、b、c与n运算后,全部自动升级为double型了。
2 o1 g. Y* D+ l/ O4 o8 K9 i+ ]# }& T# P' j3 U
由于360*3600=1296000,已经超过int的最大值范围了,对这种超大的整数运算,你需要使用“大数运算”的方法去处理。7 z( u1 _+ s+ q/ V5 Q n& D
& |: E, j9 s6 _; U& ~$ ~0 U) p& ^
关于C语言的大数运算,网上有很多相关的资料。
8#
楼主 | 发表于 2013-9-14 19:55:38 | 只看该作者
fmdd 发表于 2013-9-14 19:12 7 C+ T) n/ s' k" `0 o% g6 ]
double也是浮点数据类型,它比float更大,这种东西计算精度不高。 ; u J; A* C9 j- o4 M9 h- ^: F
2 T) {9 m, x, B' b: T) {/ u
由于n是doubule型,那a、b、c与n运算后 ...

0 z0 K; I4 }$ V5 M2 [1 h7 h+ b嗯 谢谢。
( d( H9 ^7 J. P0 g* B9 n
9#
发表于 2013-9-14 23:09:36 | 只看该作者
学习来了
10#
发表于 2013-9-14 23:10:45 | 只看该作者
fmdd 发表于 2013-9-14 19:12 : t2 y4 H8 ~! t% I4 F8 u5 C7 s
double也是浮点数据类型,它比float更大,这种东西计算精度不高。 + p V! y: v) w8 j* c& v
. m+ C: Y7 ^2 _) O# m) G
由于n是doubule型,那a、b、c与n运算后 ...

2 S3 b2 j( [0 R5 F. S: I, v在32位机器上,int占用4个字节,1个字节8位,故int共可表示2^32=4294967296种信息,32位的第一位为符号位,故其值域为 -2147483648 ~ +2147483648,容纳楼主的数值还是有余的,没有超范围。; C' c" G3 `4 u( _5 ?, s

; e5 ~& d) t ?+ y' s4 t3 ra=n/3600,在计算n/3600时,会建立一个double型的临时变量用以存放结果,然后再将结果的整数部分赋值给a,而不会将a升级成double型。因为a、b、c被定义成int时,在内存中已经被分配了4个字节,而double型占用的是8个字节,所以它们是不可能升级成double型的。
. n: w0 i9 s4 R7 i( K& ?
. F' F& O0 A) w, b
您需要登录后才可以回帖 登录| 注册会员

本版积分规则

小黑屋|手机版|Archiver|机械必威体育网址(京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号)

GMT+8, 2024-6-9 06:35, Processed in 0.061054 second(s), 22 queries , Gzip On.

Powered byDiscuz!X3.4Licensed

? 2001-2017Comsenz Inc.

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