机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 5021|回复: 21

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

[复制链接]
发表于 2013-9-14 17:08:27 | 显示全部楼层 |阅读模式
本帖最后由 昨日明月 于 2013-9-14 17:46 编辑
3 c- I& F9 W' u* G5 W# A( z: w# l) H# S2 g! v" x0 q) b- s+ a
# include <stdio.h>
" f6 ^- }9 O# R0 tint main(void)
+ E/ }, ]) c" v; Z' s" `5 N{
8 F0 ~/ N) e) p2 H5 hint i;
3 N+ @# `# u/ k' w/ t. u1 g: E* Cint a;
: @7 o. |5 p& b" A9 h& Vint b;
7 w+ @' m+ d2 N  ^int c;! [* P$ T# \( B7 }0 m( v! n4 n
double n=0;
/ j( K# n( l4 K. {& @- F    int  m=22734;
; R: U; L  `2 S% }( w6 e3 o' ]7 I    for(i=1;i<=57;++i)
; o' b" W% ~% \' r# |% S4 d% s{
3 q: }; j" d% P7 \8 P& |  n=m*i;
5 X: n' n' {# k5 A0 E$ G6 Q  a=n/3600;7 F9 w3 j( m% ^4 u+ S/ f9 P: u
  b=((n/3600)-a)*60;* T) n, b' Q1 `7 @* {3 ]
  c=(((n/3600)-a)*60-b)*60;
4 P3 D7 `0 [/ |, J+ m5 G" ?  printf("%d°%d′%d″\n",a,b,c);
7 k( T) o, |& Y4 `}# l5 H( Z" @3 y
return 0;, W8 S2 `' U0 m( i
}* d. E& O6 I1 ?* A0 O
3 e# R: a2 x: G4 V1 c# ^; ~
输出结果:
! R% D/ ]- Y) C1 G: R
6°18′54″
' y3 {% F+ [# d' W" e% B12°37′48″8 Q" T+ |% M8 Y, C+ J
18°56′42″
. o* P" `- O7 D6 V3 G) C25°15′36″
/ y! {" f) O3 I6 f( s! L' Y31°34′29″
。。。。。
3 s& h  _9 M+ a$ }+ Z' K
341°0′35″
0 N# p/ M* c4 x' C0 A0 o* @347°19′29″7 L3 u$ @! n/ Q' [
353°38′23″
& P1 i, [  J; n3 L359°57′17″
+ E4 M6 _0 Q- x8 H
Press any key to continue
  e( T3 i- r+ C, l6 \第五排正确的结果应该是31°34′30″  想问一下这个程序哪里出问题了,理论计算与计算机程序计算结果相差1秒
/ e3 |2 N: h* m- O+ U# _ps:1°=60′=3600″

$ S& O  c6 N8 q: w
回复

使用道具 举报

发表于 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
" }( m9 Y% }- M9 u; `不懂

1 p; [- z+ d! D; c1 t& f' {: y就是加工齿轮 需要将360°等分。多少个齿数就多少等分, |7 n  t5 ~. h# C
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-14 19:03:12 | 显示全部楼层
本帖最后由 昨日明月 于 2013-9-14 19:04 编辑
* _/ W6 c  d6 a) Q% Q6 ~6 M# y" g. g* S$ l6 P8 M) s( D
http://www.cmiw.cn/forum.php?mod=attachment&aid=Mjk3MDM4fDQ4OTkyMDE3NDA3YTkxMmM1NmQ4YmYwYThmNGJiOGZhfDE3MTQxNzUxNDM%3D&request=yes&_f=.jpg 完善了程序。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2013-9-14 19:12:47 | 显示全部楼层
double也是浮点数据类型,它比float更大,这种东西计算精度不高。% ~6 U* G& j, F. c% \2 {
1 e# \$ g2 t; o7 e6 i* q6 K
由于n是doubule型,那a、b、c与n运算后,全部自动升级为double型了。
" p! i; m* a+ X( A6 u( e0 ~! K6 ]4 T
由于360*3600=1296000,已经超过int的最大值范围了,对这种超大的整数运算,你需要使用“大数运算”的方法去处理。
* N* ?" T8 Z) e* v! S( @, M. p$ ?: h7 z; W) a; {' d
关于C语言的大数运算,网上有很多相关的资料。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-14 19:55:38 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12
( \5 h: S# _- n4 I/ Pdouble也是浮点数据类型,它比float更大,这种东西计算精度不高。
, F! |* Y* o% R' }! k
6 d) l& N0 Y- ]$ |2 e由于n是doubule型,那a、b、c与n运算后 ...

( p. B7 U8 e/ k% Q% `嗯 谢谢。( n, P" M% Y( D7 D- U& }& o
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2013-9-14 23:10:45 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12
2 e( Z/ K6 f' J1 x% pdouble也是浮点数据类型,它比float更大,这种东西计算精度不高。
! `' H6 V" a& ~6 y$ C+ H+ l5 [9 M2 w5 }4 B( s( g+ o
由于n是doubule型,那a、b、c与n运算后 ...

2 H7 S! w1 ?1 j在32位机器上,int占用4个字节,1个字节8位,故int共可表示2^32=4294967296种信息,32位的第一位为符号位,故其值域为 -2147483648 ~ +2147483648,容纳楼主的数值还是有余的,没有超范围。
5 ^, D. {" Y2 j3 b* V! ]0 t! L/ j. P/ L
a=n/3600,在计算n/3600时,会建立一个double型的临时变量用以存放结果,然后再将结果的整数部分赋值给a,而不会将a升级成double型。因为a、b、c被定义成int时,在内存中已经被分配了4个字节,而double型占用的是8个字节,所以它们是不可能升级成double型的。4 X% a- x& C$ k4 [4 X6 m
8 X3 O2 J  V- W" N) H- v
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 07:45 , Processed in 0.065062 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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