机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 6036|回复: 21

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

[复制链接]
发表于 2013-9-14 17:08:27 | 显示全部楼层 |阅读模式
本帖最后由 昨日明月 于 2013-9-14 17:46 编辑 ! o4 n8 ]7 S' C
2 ~0 m9 \- n& i7 A' r; V9 H
# include <stdio.h>& g- b2 o9 {0 k: w& B" ^
int main(void)+ B/ k" G- W$ m. h
{* t  l/ ?# W: l: p9 n. n* p: y
int i;
/ x' H% l  U! T& Zint a;
4 Y  l0 t- ^7 P' \$ y5 nint b;
7 p' G. R+ B( o! a4 w- }7 j  Fint c;# e% d1 w2 J9 F% z5 t
double n=0;8 Y: Q7 ~" S7 B; C' _! f# ?
    int  m=22734;7 `3 `% x$ f9 f5 o/ G, w
    for(i=1;i<=57;++i)
* m5 Q7 D! Y# y' c{9 O3 T. f0 w  ~* ?/ n3 i. V
  n=m*i;' {- k2 _/ i5 k1 R
  a=n/3600;6 r2 a8 I2 Z1 q4 e
  b=((n/3600)-a)*60;- X4 ^: u3 v) _5 o
  c=(((n/3600)-a)*60-b)*60;! W( v! V, ?4 B' v4 z
  printf("%d°%d′%d″\n",a,b,c);
9 {  U, z& P2 j# q6 @0 |: z}
) a  r$ M- m7 O/ b; B! Breturn 0;
: U$ S1 z% p* ?4 f% p2 b) n}, S6 ^& W$ R: m- R

0 q7 N6 [/ S( C% l& J  ?& V输出结果:: u8 g& n( b7 s# \& Z1 h3 k
6°18′54″
6 M, n4 Y3 [1 U4 x12°37′48″
! d: v8 z& a5 |7 x2 k2 k18°56′42″1 h6 z6 z! C, o6 r/ N# Q6 P+ @9 @8 V% p  c
25°15′36″
/ J% {! o3 H0 ^; A31°34′29″
。。。。。- k; v% F1 P  a4 `5 ^, o7 Y
341°0′35″
0 Y5 `( M4 \) O8 u347°19′29″7 o- u3 i$ F6 I8 e- m6 I1 Z
353°38′23″
" z8 [3 D$ L$ X3 i359°57′17″

, E3 N+ M6 x9 C& Z
Press any key to continue  D$ u- s& T# R$ I/ i# ]6 e
第五排正确的结果应该是31°34′30″  想问一下这个程序哪里出问题了,理论计算与计算机程序计算结果相差1秒" [) U# B, `& h2 t" g" x
ps:1°=60′=3600″
- ~* o: W2 ^' C3 q7 N+ z
回复

使用道具 举报

发表于 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" L. S3 x- o8 t. ~8 ]不懂
8 E$ m% K" Y, L9 e2 Q4 Q# @6 C
就是加工齿轮 需要将360°等分。多少个齿数就多少等分
; F- O% Q+ F4 `+ L+ }, Z
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-14 19:03:12 | 显示全部楼层
本帖最后由 昨日明月 于 2013-9-14 19:04 编辑
" Z' d8 O& Q; a* }/ ?  o, ]( H1 d; M# u! f
http://www.cmiw.cn/forum.php?mod=attachment&aid=Mjk3MDM4fDIxYjY5NGJiNDdkODFmMjA4MDM5YTc3ZTk1MDAyZGZifDE3Mzk5MTU3MTk%3D&request=yes&_f=.jpg 完善了程序。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2013-9-14 19:12:47 | 显示全部楼层
double也是浮点数据类型,它比float更大,这种东西计算精度不高。+ V2 t8 i! e! R* A2 q

! D) a+ {3 a9 A. [: K由于n是doubule型,那a、b、c与n运算后,全部自动升级为double型了。; E# {$ ]  W. c) g2 L5 y- W

6 N* L" h! E! K0 `0 B/ S) Z( t: V由于360*3600=1296000,已经超过int的最大值范围了,对这种超大的整数运算,你需要使用“大数运算”的方法去处理。
$ a3 t7 ^* ~1 }" d
8 m+ c6 \* t1 @7 ?* o# @6 a关于C语言的大数运算,网上有很多相关的资料。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-14 19:55:38 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12 1 m3 p- @0 b, a4 _6 c
double也是浮点数据类型,它比float更大,这种东西计算精度不高。
( D# v% [) p  t1 V- \! S9 {, {% P7 F+ C% S- W
由于n是doubule型,那a、b、c与n运算后 ...

/ j; F; S8 }& D% b嗯 谢谢。' `' R9 ^0 J; i8 P' z- a
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2013-9-14 23:10:45 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12 ) q9 `# ?: A2 Y  l/ F* Y( q0 {6 [
double也是浮点数据类型,它比float更大,这种东西计算精度不高。5 r/ Q/ f  V8 @7 q$ s

4 L+ H- O; s4 s) u由于n是doubule型,那a、b、c与n运算后 ...

; a. E: A+ l5 A* s# n$ z: i) I0 m- p在32位机器上,int占用4个字节,1个字节8位,故int共可表示2^32=4294967296种信息,32位的第一位为符号位,故其值域为 -2147483648 ~ +2147483648,容纳楼主的数值还是有余的,没有超范围。1 i9 ]% y. U, N( H1 h

, S. B" b% l9 P) J1 ka=n/3600,在计算n/3600时,会建立一个double型的临时变量用以存放结果,然后再将结果的整数部分赋值给a,而不会将a升级成double型。因为a、b、c被定义成int时,在内存中已经被分配了4个字节,而double型占用的是8个字节,所以它们是不可能升级成double型的。
: t/ U0 X2 e  @: K6 K# v$ ?
  x# o! P* e0 o, H( n5 I
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-19 05:55 , Processed in 0.071907 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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