找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 6780|回复: 21

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

[复制链接]
发表于 2013-9-14 17:08:27 | 显示全部楼层 |阅读模式
本帖最后由 昨日明月 于 2013-9-14 17:46 编辑
$ e5 y  o( W2 O4 }% N$ r8 [1 _0 v% Y  k4 d, e: i
# include <stdio.h>9 e  @6 a. C% |7 ^6 E% t
int main(void)
2 {( u+ ~$ T1 q" R8 W/ M{' \  L. f$ Y6 \% f' x
int i;
- B, [$ ]3 D( k0 E& z+ ~int a;
$ N, J, Q: `2 U) |8 L6 i0 D9 Vint b;! Y7 t* |; m, ?8 j% I3 E- E6 ^
int c;4 y1 R; z+ ]. l- T6 N
double n=0;
: \, g  n. l. }! o. l    int  m=22734;
$ ]$ B+ q' M2 V% r# s8 H    for(i=1;i<=57;++i)
0 z0 G! T" T* @+ c% O: ?- q$ T9 X{
6 X9 t) u0 `- ?- [+ P) g/ e  n=m*i;' j( \. B! |" m- N& T) G  _  I, W
  a=n/3600;
# v, v3 o1 [' Q# |) ^  b=((n/3600)-a)*60;
: b; k3 t, E2 l+ |  c=(((n/3600)-a)*60-b)*60;
; j% F5 _2 a8 h  }$ v$ R$ e4 l  printf("%d°%d′%d″\n",a,b,c);
' [; r3 g3 H' {! _3 y; H7 v* |. I) _# \}
* t7 X8 e+ E* O* v# _) L3 _# [return 0;# d6 `' a0 s: I) w$ E3 d2 F2 J
}6 o5 b( o* Y! ?! H$ x. {0 s, b& \0 g
; D- C: j$ |  ]6 k3 p2 q9 [
输出结果:% R+ y% @- q( Q
6°18′54″3 @3 r" o0 d5 o- ?
12°37′48″
) s# t7 n- j7 e  p, b2 O% y5 A18°56′42″9 I3 t, \1 C" e" l' {# B7 o. \
25°15′36″9 M, Z5 J% F6 T! \! [
31°34′29″
。。。。。8 ?! E- K3 m- q
341°0′35″& F# e1 _: i& p! v  C/ ~
347°19′29″4 p* E; r8 k# I* S( o6 U& M1 m6 j8 Z
353°38′23″, P5 k6 f0 R: V; D
359°57′17″
6 ]$ o2 z) E/ |, G* C8 w
Press any key to continue: {/ c  o( S1 o3 p" Q  D8 x: E
第五排正确的结果应该是31°34′30″  想问一下这个程序哪里出问题了,理论计算与计算机程序计算结果相差1秒3 Q$ q3 X6 T+ G2 @8 b6 e8 d+ f
ps:1°=60′=3600″

5 P2 ~2 D& G' t4 i& d& Q4 ]7 c
回复

使用道具 举报

发表于 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 - ~# j2 p6 \$ L" y7 @
不懂
3 H5 F+ u1 h  A; Y7 q1 _2 f3 V* ?
就是加工齿轮 需要将360°等分。多少个齿数就多少等分
8 k- F2 c9 d  D; T3 {" J5 q; R
 楼主| 发表于 2013-9-14 19:03:12 | 显示全部楼层
本帖最后由 昨日明月 于 2013-9-14 19:04 编辑
  f) n$ c% T, z  e' K" N; S- j. W7 I( x! q( \; h
http://www.cmiw.cn/forum.php?mod=attachment&aid=Mjk3MDM4fDZiNzU0ZTNifDE3NTc5OTc5Mzl8MHw%3D 完善了程序。

本帖子中包含更多资源

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

×
发表于 2013-9-14 19:12:47 | 显示全部楼层
double也是浮点数据类型,它比float更大,这种东西计算精度不高。" O  {: T  j. I  I+ e, W
+ ?9 Q9 h  K% ~
由于n是doubule型,那a、b、c与n运算后,全部自动升级为double型了。  y6 ^& u) n9 Z8 M4 X$ H
  F0 l9 _( @0 j! U" B( c; T5 @/ P
由于360*3600=1296000,已经超过int的最大值范围了,对这种超大的整数运算,你需要使用“大数运算”的方法去处理。
, L! V" u, ~. j( N9 l% [" @5 d' i* k# }% _9 o* }5 R2 M- H- Q  ^
关于C语言的大数运算,网上有很多相关的资料。
 楼主| 发表于 2013-9-14 19:55:38 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12 $ m. s0 I/ }- D9 Y6 ]4 D3 `
double也是浮点数据类型,它比float更大,这种东西计算精度不高。9 a* m4 Z0 Z+ C

- o8 H" }. F7 f- g0 X( f由于n是doubule型,那a、b、c与n运算后 ...

; l& D7 Z, d* H, O7 @' ~  w嗯 谢谢。2 g* \) B  r. c* j- S
发表于 2013-9-14 23:09:36 | 显示全部楼层
学习来了
发表于 2013-9-14 23:10:45 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12 9 I! w; i1 t( h0 Z
double也是浮点数据类型,它比float更大,这种东西计算精度不高。
( ?3 J& \5 E6 a4 f; V: ^
6 m- k1 s5 z# {+ C" B由于n是doubule型,那a、b、c与n运算后 ...

) T# }* K; Z2 r& w: M" ]( g在32位机器上,int占用4个字节,1个字节8位,故int共可表示2^32=4294967296种信息,32位的第一位为符号位,故其值域为 -2147483648 ~ +2147483648,容纳楼主的数值还是有余的,没有超范围。
  |7 _$ z/ H7 O1 \: v5 k" P' c* u! j+ p3 b
a=n/3600,在计算n/3600时,会建立一个double型的临时变量用以存放结果,然后再将结果的整数部分赋值给a,而不会将a升级成double型。因为a、b、c被定义成int时,在内存中已经被分配了4个字节,而double型占用的是8个字节,所以它们是不可能升级成double型的。
7 n' u4 \7 ]4 Y8 q5 A
' C, F5 m2 |- T. o( {% {$ i4 h' }
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-9-16 12:45 , Processed in 0.083774 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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