机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 5692|回复: 21

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

[复制链接]
发表于 2013-9-14 17:08:27 | 显示全部楼层 |阅读模式
本帖最后由 昨日明月 于 2013-9-14 17:46 编辑
( g6 g- i, g% d) T& k: ~9 F  e2 Q" g" L1 l/ `- }
# include <stdio.h>- h$ t, C* I( M3 k' b
int main(void)$ w& X& j% h7 p
{. F* Q" \: q: _, x' |9 n
int i;/ [6 F& G) c0 d  j
int a;
3 c# I7 V! B: v) L: Yint b;
- O8 Y0 K9 t) l  p: P2 j3 `int c;
( @# D% V) d* Cdouble n=0;
7 P, ]& r+ g4 G, N" J, k    int  m=22734;
" p8 d9 @. L! J    for(i=1;i<=57;++i)
: e2 ]" ~; ?1 \* `{) J8 @, z8 d  T4 y
  n=m*i;8 A3 G2 K# J* @# S8 Q5 N+ l
  a=n/3600;& m3 C& q" P  E
  b=((n/3600)-a)*60;
& W' q% C; o6 K# ~& b  c=(((n/3600)-a)*60-b)*60;3 u+ c9 \! w: w9 b6 W
  printf("%d°%d′%d″\n",a,b,c);
+ p% C6 a& i' q% z) E/ y}( S1 H, J0 N# ]# h/ ?. N3 m( ?
return 0;1 ^# C" y0 C3 W% O
}
) V8 e2 s8 K! O$ T3 p8 S+ R" I" H
$ o6 X1 Y: }$ {) i, q输出结果:9 t" _& n$ d* O  P  L) T* C
6°18′54″
# [3 y9 f: O- l5 ?* a2 S12°37′48″$ q. `' H. M7 y2 B. o  R
18°56′42″
( q% _4 c$ l( B25°15′36″0 I6 e7 C- n" S- G
31°34′29″
。。。。。" H7 I! `7 O: z4 X4 K2 _
341°0′35″2 |* w1 h4 G' }* H
347°19′29″
& Z: v/ U6 v7 N- ?! q; @353°38′23″
# r1 U" U! a0 e359°57′17″
2 q+ |, l7 `& w- z" t2 ^6 ~1 r
Press any key to continue$ T8 O: j7 \# K; T+ H
第五排正确的结果应该是31°34′30″  想问一下这个程序哪里出问题了,理论计算与计算机程序计算结果相差1秒% Z: n1 ]% b$ T$ l0 E) t
ps:1°=60′=3600″

5 J3 G$ O& X, s) L* |# K
回复

使用道具 举报

发表于 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 ' W) d, x7 G3 \9 s. L2 t5 t
不懂
( A) `8 k% K8 F/ x
就是加工齿轮 需要将360°等分。多少个齿数就多少等分) Q" _! w: ?% _5 o- x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-14 19:03:12 | 显示全部楼层
本帖最后由 昨日明月 于 2013-9-14 19:04 编辑
( ]6 U: K; {2 Z7 D
& y1 [  h2 V& E1 F3 v# z  c# q% lhttp://www.cmiw.cn/forum.php?mod=attachment&aid=Mjk3MDM4fDI0M2FjMzllMmYyZmJhODExY2IyNzBiNGQyOTBlMTgxfDE3MzE2MDc0NjQ%3D&request=yes&_f=.jpg 完善了程序。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2013-9-14 19:12:47 | 显示全部楼层
double也是浮点数据类型,它比float更大,这种东西计算精度不高。" `4 e7 ~$ f  u% J5 ?

2 }* h9 W' W- Z! T! v6 T由于n是doubule型,那a、b、c与n运算后,全部自动升级为double型了。
+ ]5 q3 x# ?, u
& X* L+ F- Q) A4 {; @& d% W+ Q/ z由于360*3600=1296000,已经超过int的最大值范围了,对这种超大的整数运算,你需要使用“大数运算”的方法去处理。3 \7 g! E3 f% W, T0 d/ ]$ f

. U; E4 ^0 `3 a( y关于C语言的大数运算,网上有很多相关的资料。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-14 19:55:38 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12
2 l9 s1 j: L8 r8 b) O+ Ydouble也是浮点数据类型,它比float更大,这种东西计算精度不高。
' _3 U0 p+ ]0 _, U- W9 S+ w! l' m# \7 f0 w  W9 d; B4 e- J
由于n是doubule型,那a、b、c与n运算后 ...
. Q$ v* A% ?0 k' M
嗯 谢谢。
# |3 |; P  C+ {9 s  P# L4 R% }% J
回复 支持 反对

使用道具 举报

发表于 2013-9-14 23:09:36 | 显示全部楼层
学习来了
回复 支持 反对

使用道具 举报

发表于 2013-9-14 23:10:45 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12 0 I5 h5 B9 }9 m
double也是浮点数据类型,它比float更大,这种东西计算精度不高。: A, P% G: o. W
0 Z0 J6 \7 J, b4 n5 {* V" w
由于n是doubule型,那a、b、c与n运算后 ...

3 W1 l5 a7 _. w" n+ e9 d5 J在32位机器上,int占用4个字节,1个字节8位,故int共可表示2^32=4294967296种信息,32位的第一位为符号位,故其值域为 -2147483648 ~ +2147483648,容纳楼主的数值还是有余的,没有超范围。
  b8 F( i4 t- a; G& Y) T; c* }" q. S! o1 F9 o/ o4 t
a=n/3600,在计算n/3600时,会建立一个double型的临时变量用以存放结果,然后再将结果的整数部分赋值给a,而不会将a升级成double型。因为a、b、c被定义成int时,在内存中已经被分配了4个字节,而double型占用的是8个字节,所以它们是不可能升级成double型的。: o+ ]4 ~( \2 l& Z- @' G
- M" S+ F6 E8 U
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2024-11-15 02:04 , Processed in 0.057587 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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