找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 6869|回复: 21

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

[复制链接]
发表于 2013-9-14 17:08:27 | 显示全部楼层 |阅读模式
本帖最后由 昨日明月 于 2013-9-14 17:46 编辑 7 g$ s, k3 n8 q) c3 n

& d7 b# [5 Z3 {( E8 W# include <stdio.h># a8 p4 y) h/ G% v0 J; d6 p
int main(void)( L9 T% r( M. b4 `0 `* G7 U3 t
{$ S% w# N+ I) p
int i;, K; f/ p+ k9 G0 I2 x9 ^
int a;
& g! s+ _. z6 d, w/ Mint b;# O7 m8 U3 L) ^/ ^0 ?
int c;
8 G  O8 o' [8 _/ Q, Ldouble n=0;& X  e, c: l& k! _0 j( M  a
    int  m=22734;; |1 M5 _* @7 G
    for(i=1;i<=57;++i)
0 {* q6 |7 |) m5 W{
: f+ G6 H  N7 W9 W  n=m*i;. @( ], a5 T! o3 S+ g/ e3 l+ t
  a=n/3600;
+ L# r" w: V4 c2 l, v. o2 h0 j9 y  b=((n/3600)-a)*60;
1 k( A* \# w- f8 m, i# R2 i  c=(((n/3600)-a)*60-b)*60;1 d8 D1 J1 |$ X, `5 _9 u- s
  printf("%d°%d′%d″\n",a,b,c);1 K* d" t  v0 m3 ^6 G
}
3 x7 f. t' F( w/ w( H7 treturn 0;
. H& E0 y3 ^' [2 _}- P. Y. P3 b+ F8 K# b) f: T3 B
" V- ?" K* k) V% l
输出结果:
, N+ o" E6 l) l- H
6°18′54″: P' Z' a' S1 Z! ~/ S
12°37′48″4 s) ]; v6 S! i7 ?  |! `' F* _, G! F+ d
18°56′42″: M! n2 n# h3 M* s0 _3 N
25°15′36″& L) W  c, I' n+ q; u* M. l
31°34′29″
。。。。。
1 E: T& B# L  \
341°0′35″- B3 ^7 K1 U1 A2 W- h; W! K2 f
347°19′29″5 Z/ m9 a' s1 l: a
353°38′23″
$ c( H# [9 L3 O- Q3 b359°57′17″

' w- t! z" u1 p. g8 W
Press any key to continue
% n' i- d0 r( c; u% ^; C第五排正确的结果应该是31°34′30″  想问一下这个程序哪里出问题了,理论计算与计算机程序计算结果相差1秒0 `1 Z2 F( ~( e$ E- t+ x+ J
ps:1°=60′=3600″

8 b7 i6 X7 V' A# \
回复

使用道具 举报

发表于 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 3 q& w8 b' m" g3 b6 L$ J7 i+ O7 s! F
不懂
+ H1 Y3 {" ]) ]* H
就是加工齿轮 需要将360°等分。多少个齿数就多少等分1 s# q1 S9 g7 k. O# k4 }7 U: ?* K
 楼主| 发表于 2013-9-14 19:03:12 | 显示全部楼层
本帖最后由 昨日明月 于 2013-9-14 19:04 编辑
' K, @* m8 |: P0 |2 V. e7 z/ f% @1 K- R4 U$ P7 U$ Q
http://www.cmiw.cn/forum.php?mod=attachment&aid=Mjk3MDM4fGI3NDUwYjMwfDE3NjA2MjkyMTF8MHw%3D 完善了程序。

本帖子中包含更多资源

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

×
发表于 2013-9-14 19:12:47 | 显示全部楼层
double也是浮点数据类型,它比float更大,这种东西计算精度不高。
5 {2 q- T8 N$ O" {% p* ?, G+ _4 }, S1 ~: k
由于n是doubule型,那a、b、c与n运算后,全部自动升级为double型了。
' v1 y4 k$ T% a2 B/ `% ^, p& A. ]# g* R7 G  Y9 R
由于360*3600=1296000,已经超过int的最大值范围了,对这种超大的整数运算,你需要使用“大数运算”的方法去处理。
0 b0 d+ ]9 _9 P& m* X0 K' p4 t
9 V+ ~. V* X  _8 y8 N关于C语言的大数运算,网上有很多相关的资料。
 楼主| 发表于 2013-9-14 19:55:38 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12
7 O8 D1 H# I" J0 E& {double也是浮点数据类型,它比float更大,这种东西计算精度不高。  b6 F1 O3 C- W: c6 E" Y- _+ M% h$ x

  E2 o1 E" I: D1 y0 e$ z, X1 W由于n是doubule型,那a、b、c与n运算后 ...

: }6 J" p% w( M( P0 I嗯 谢谢。
$ M  Z4 J5 o) r
发表于 2013-9-14 23:09:36 | 显示全部楼层
学习来了
发表于 2013-9-14 23:10:45 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12
/ p- \9 ?% C1 C# `, i& c  ddouble也是浮点数据类型,它比float更大,这种东西计算精度不高。; p3 K4 m! ?, G/ }7 I" s

5 T) ?, ?! ~- ^' q5 Z! b( d由于n是doubule型,那a、b、c与n运算后 ...
0 v+ b; _7 y; V; l1 l
在32位机器上,int占用4个字节,1个字节8位,故int共可表示2^32=4294967296种信息,32位的第一位为符号位,故其值域为 -2147483648 ~ +2147483648,容纳楼主的数值还是有余的,没有超范围。" \- Y1 A, @8 T$ R$ I8 Y/ y- X
. Y9 W2 l7 _; R; t& Z3 }8 W9 V
a=n/3600,在计算n/3600时,会建立一个double型的临时变量用以存放结果,然后再将结果的整数部分赋值给a,而不会将a升级成double型。因为a、b、c被定义成int时,在内存中已经被分配了4个字节,而double型占用的是8个字节,所以它们是不可能升级成double型的。5 Z; X& y. }/ q! J( i' N* v
. @% T) C1 l! Q
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-10-16 23:40 , Processed in 0.087390 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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