找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 6488|回复: 21

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

[复制链接]
发表于 2013-9-14 17:08:27 | 显示全部楼层 |阅读模式
本帖最后由 昨日明月 于 2013-9-14 17:46 编辑 5 F2 E6 k5 z( |, s9 @$ ^, t
$ `. n/ f2 Y  g2 c
# include <stdio.h>
' I/ ]. \+ F; y1 Fint main(void)0 u/ g  W: q5 H6 d
{4 \7 f* e2 F; e0 [6 r
int i;9 \" q- `  D% B' O9 n% D: |
int a;1 e, V/ q5 C4 w
int b;
3 E6 ^# t! J0 d8 w0 x5 ^int c;
/ l; `% A$ H6 A' l1 ?- B9 adouble n=0;
0 F# i2 r5 u% `: q) j    int  m=22734;
3 g6 F5 I& |" v5 B; {    for(i=1;i<=57;++i)
  b7 @  N# t' u/ b$ U& A. A& N{' L6 u8 D" b8 c* d  q
  n=m*i;
7 I) a5 ]" n1 D6 S  a=n/3600;# x- A$ o; N4 N" o- ]' O; P
  b=((n/3600)-a)*60;0 h# h( V' P4 Y$ e, M0 z8 u- X( m
  c=(((n/3600)-a)*60-b)*60;
: A1 t1 |0 w+ P) [  B  printf("%d°%d′%d″\n",a,b,c);7 m, Y; D4 c: a( v+ O2 D4 u+ k
}7 Q3 f& w; E' D9 ]7 y
return 0;
' N9 _8 Z. V4 A. E, z" K}2 o+ p+ R& X5 ]8 |' w

2 ?7 T, d/ j) x$ |1 i, ?输出结果:
! t' C2 j" q2 h: ~  q  W
6°18′54″
3 j* |2 e/ x8 q5 l9 s12°37′48″3 T4 `, _* @% M# c# @" B
18°56′42″  {3 r* G: n% h+ x& l
25°15′36″
2 l5 |) s3 W) _+ i# o0 F& W31°34′29″
。。。。。4 Y2 f' F* z+ ~! F" J/ _9 c" k
341°0′35″
3 g) e7 p+ O: V. _0 z# Z347°19′29″6 \& t) j- r& p
353°38′23″
# q) z" W# Q  ^  l  w359°57′17″

7 J& m! }+ j# a% c7 e
Press any key to continue  ^; s* y4 [& f; [% @' q3 L2 f
第五排正确的结果应该是31°34′30″  想问一下这个程序哪里出问题了,理论计算与计算机程序计算结果相差1秒  I( {6 B+ f/ t$ h
ps:1°=60′=3600″
6 `5 `9 p+ B0 N9 N+ O
回复

使用道具 举报

发表于 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
+ Q/ w% u. x1 P0 `! T' A' q不懂

+ Z1 \4 E$ c3 c就是加工齿轮 需要将360°等分。多少个齿数就多少等分8 Z( ?1 t3 @4 a7 m7 ?
 楼主| 发表于 2013-9-14 19:03:12 | 显示全部楼层
本帖最后由 昨日明月 于 2013-9-14 19:04 编辑 + P' ?, w8 k1 G

! @% B; a! f0 F: A3 Thttp://www.cmiw.cn/forum.php?mod=attachment&aid=Mjk3MDM4fDZlZGVhYmYxfDE3NTA1MjQzNzJ8MHw%3D 完善了程序。

本帖子中包含更多资源

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

×
发表于 2013-9-14 19:12:47 | 显示全部楼层
double也是浮点数据类型,它比float更大,这种东西计算精度不高。
& E9 M; }8 G0 k1 v8 ^4 u  a( l8 Z9 s5 b
由于n是doubule型,那a、b、c与n运算后,全部自动升级为double型了。8 _  j' s2 o) `5 t5 S, O

: f" p5 [' @  r: p+ \  `4 W由于360*3600=1296000,已经超过int的最大值范围了,对这种超大的整数运算,你需要使用“大数运算”的方法去处理。
, }# ~& L0 Q3 X8 f1 ^8 a  h8 m
3 D! J( y, y" ~# @" C关于C语言的大数运算,网上有很多相关的资料。
 楼主| 发表于 2013-9-14 19:55:38 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12
- x4 R( w) W9 d1 n' N. z6 f. udouble也是浮点数据类型,它比float更大,这种东西计算精度不高。  B, D3 i& P3 I" E- ]4 [

* X/ R7 Y% [4 x: x6 }; `由于n是doubule型,那a、b、c与n运算后 ...

( T. a1 O, a. f嗯 谢谢。& t/ i2 a. O# ~" f, Q
发表于 2013-9-14 23:09:36 | 显示全部楼层
学习来了
发表于 2013-9-14 23:10:45 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12 9 _/ L  n, r" Q0 O0 d4 S! e
double也是浮点数据类型,它比float更大,这种东西计算精度不高。
0 U1 K+ v6 |( k/ e8 w8 c
# ?% C. _3 x/ C% z  b2 N由于n是doubule型,那a、b、c与n运算后 ...
: G) R" n1 E2 W( m9 E$ _, |
在32位机器上,int占用4个字节,1个字节8位,故int共可表示2^32=4294967296种信息,32位的第一位为符号位,故其值域为 -2147483648 ~ +2147483648,容纳楼主的数值还是有余的,没有超范围。- |+ [3 h6 d7 E+ T# Y" F: ?2 B3 X

2 t8 X* U  e: _4 j  \+ ra=n/3600,在计算n/3600时,会建立一个double型的临时变量用以存放结果,然后再将结果的整数部分赋值给a,而不会将a升级成double型。因为a、b、c被定义成int时,在内存中已经被分配了4个字节,而double型占用的是8个字节,所以它们是不可能升级成double型的。# b: _6 L2 ^  w! r' d2 T0 H$ W
7 H5 {2 m5 _0 V: N) C4 I6 K
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-6-22 00:46 , Processed in 0.069968 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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