找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 6662|回复: 21

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

[复制链接]
发表于 2013-9-14 17:08:27 | 显示全部楼层 |阅读模式
本帖最后由 昨日明月 于 2013-9-14 17:46 编辑 1 F9 O- z- p/ q( J) t
9 w( q1 `: t( c- O. Z* M
# include <stdio.h>
7 Y* p8 y0 h1 U  ~int main(void): M1 P; m6 [  e+ n
{
2 E& e7 _8 R; Y9 P2 S+ j% G9 jint i;# ?8 n9 ^1 z- }
int a;
0 N/ _- m; w, d9 oint b;9 V, Q3 t& ^. m+ o! C* m3 i- I9 ]
int c;
7 ?( s6 Q8 c! J( Z$ \double n=0;
1 O1 ]% e) y& R4 B    int  m=22734;
& L4 \* V3 f8 C0 c9 _    for(i=1;i<=57;++i)* N' \! G4 g) ?( t: d; a
{9 R8 e: p: n% b/ p; ^- ~
  n=m*i;
3 c0 D7 s1 s1 c  a=n/3600;& u  X5 I* j+ U: V+ ]
  b=((n/3600)-a)*60;
8 E/ F0 M3 I% r# K! G8 t  c=(((n/3600)-a)*60-b)*60;
! K) V4 z6 p1 H( M8 p  printf("%d°%d′%d″\n",a,b,c);
! G' o& a4 Z# J" N3 n) `}8 G1 ~0 ^& J3 N4 {3 o* u5 O! m- V1 G
return 0;& h! D5 a# \" j3 x
}. Z2 n# ^- p8 v3 c: ?; O, C

" d; v$ E8 t' z7 K( E7 ~输出结果:
$ B" |) h! C# R
6°18′54″$ m* \/ M9 q3 T' e% T
12°37′48″
2 z% b& c0 D( T+ C3 [9 s: `18°56′42″# W% e7 v  T6 X" V
25°15′36″& M' o' Y9 t3 @3 u* ]
31°34′29″
。。。。。, G* E  c, t: M6 G
341°0′35″8 ~/ q3 e/ X# O
347°19′29″
/ k$ F7 A9 ?2 l353°38′23″
4 b% x/ ?9 O/ X, I! K) o3 i359°57′17″
- o; h( `6 J: h3 D$ Q
Press any key to continue9 [! U+ Y% R& j
第五排正确的结果应该是31°34′30″  想问一下这个程序哪里出问题了,理论计算与计算机程序计算结果相差1秒3 e( D8 t+ {8 {
ps:1°=60′=3600″

( e6 o! J0 Z; \& D
回复

使用道具 举报

发表于 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 f0 d" b" j( K" r  B5 C
不懂

5 R2 G4 f* |* ^# T就是加工齿轮 需要将360°等分。多少个齿数就多少等分
. B+ ~1 X$ F0 x: h4 Q
 楼主| 发表于 2013-9-14 19:03:12 | 显示全部楼层
本帖最后由 昨日明月 于 2013-9-14 19:04 编辑
4 s  J6 W9 K9 `; c! q0 o
' C1 a! X9 _9 T$ E8 j) w' bhttp://www.cmiw.cn/forum.php?mod=attachment&aid=Mjk3MDM4fDExMzdmZmE1fDE3NTUxNzg3MTB8MHw%3D 完善了程序。

本帖子中包含更多资源

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

×
发表于 2013-9-14 19:12:47 | 显示全部楼层
double也是浮点数据类型,它比float更大,这种东西计算精度不高。
4 z3 U( X& R: z: S; O: V3 m/ o/ y: {
由于n是doubule型,那a、b、c与n运算后,全部自动升级为double型了。# t3 G# t4 i7 a1 d- f6 g- @1 b
6 P! i7 {/ [) {
由于360*3600=1296000,已经超过int的最大值范围了,对这种超大的整数运算,你需要使用“大数运算”的方法去处理。
7 K$ A- M* U* n* u$ s' k, Y' k% f4 u, T; K( T$ q' V
关于C语言的大数运算,网上有很多相关的资料。
 楼主| 发表于 2013-9-14 19:55:38 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12 6 ~4 d  u' ~6 T) X! M  |4 T2 L
double也是浮点数据类型,它比float更大,这种东西计算精度不高。' {2 h. |( O: a5 ]

0 x! V2 W: g5 K' P; [, N% @8 g; E由于n是doubule型,那a、b、c与n运算后 ...

8 x# H/ y; S: Q  h6 D嗯 谢谢。
  x, H. `% G* L. o, y5 A
发表于 2013-9-14 23:09:36 | 显示全部楼层
学习来了
发表于 2013-9-14 23:10:45 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12 1 g: v: Q0 u0 n. h3 ]
double也是浮点数据类型,它比float更大,这种东西计算精度不高。" l6 P) q* g6 D* w0 y: _) n

- _  U8 X) g3 T1 t0 L7 q- v% W& K由于n是doubule型,那a、b、c与n运算后 ...
! x; N$ }/ ~+ A* Z% Q9 }
在32位机器上,int占用4个字节,1个字节8位,故int共可表示2^32=4294967296种信息,32位的第一位为符号位,故其值域为 -2147483648 ~ +2147483648,容纳楼主的数值还是有余的,没有超范围。2 i' R7 W6 B) @" A$ f& f* y
* ]$ }  e7 P8 M
a=n/3600,在计算n/3600时,会建立一个double型的临时变量用以存放结果,然后再将结果的整数部分赋值给a,而不会将a升级成double型。因为a、b、c被定义成int时,在内存中已经被分配了4个字节,而double型占用的是8个字节,所以它们是不可能升级成double型的。
  R7 h0 \. K# \  R- |. E" I
; K/ U% v9 _7 r8 O, y
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-8-14 21:38 , Processed in 0.104770 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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