机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 5717|回复: 21

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

[复制链接]
发表于 2013-9-14 17:08:27 | 显示全部楼层 |阅读模式
本帖最后由 昨日明月 于 2013-9-14 17:46 编辑 + B: t9 }+ X& ?. }% q, [

; F( k; I( d9 J' a% A; B$ h# R3 a' |( }# include <stdio.h>
7 [2 z0 F* \+ b4 S: C- Lint main(void)# d1 X0 M# X$ w- |, ^9 I
{
8 ]0 @/ I: g7 F' {3 f  r+ n0 a9 `1 Wint i;
- b3 F) Z) p5 ~' ?/ _! ^! H9 Xint a;
! ^! f/ \: O: O8 {. A& ?int b;4 u7 D) c5 `7 `  t1 f
int c;: N* K3 \1 `) C3 G$ G  F: M( Y( f5 b
double n=0;
+ J- `0 o( A" T, L/ s/ \    int  m=22734;, v$ [& p3 g. t# b5 [, G8 y# T2 {
    for(i=1;i<=57;++i)! k+ x/ |) U, Q% b. p0 Q7 E
{
6 l2 d- f% f1 g  W! n  W' G' `9 Y  n=m*i;
7 M) H0 r( J! ?% Y* w9 o# Z  a=n/3600;
' d* C; v! L8 g4 |3 R+ P  b=((n/3600)-a)*60;
3 g9 ?3 N) O) h7 q* u1 e) |( m1 Z  c=(((n/3600)-a)*60-b)*60;# n( U4 Q: }, m/ K" ~2 }
  printf("%d°%d′%d″\n",a,b,c);3 p/ D" w* S) U% F& U3 _6 p0 l
}
) |4 ~" J; ]! U' N% {  _* X/ _) areturn 0;8 j1 K* n4 P  B7 V
}% [( E, x; R9 L& d- D. p3 x6 d
' U+ \2 [2 U5 v+ C5 F1 W
输出结果:9 J" r* J) h# X
6°18′54″
0 x1 ?2 B9 X1 L2 C3 `) e2 Z12°37′48″4 n; h$ }7 V$ t9 \5 v6 j' e9 Z
18°56′42″9 G; _% b7 d; V) s
25°15′36″
) b* g1 J9 d1 H6 T+ d" ?31°34′29″
。。。。。# r- w/ v7 n* l+ O" F$ s
341°0′35″: T" {7 {6 s7 |9 y
347°19′29″8 r' f  g- A. E
353°38′23″
: s/ S6 h. z6 S+ O4 ?( D359°57′17″
4 `7 H5 M# w- ]
Press any key to continue9 A5 _% N. D8 @& K- v, u
第五排正确的结果应该是31°34′30″  想问一下这个程序哪里出问题了,理论计算与计算机程序计算结果相差1秒$ F4 u9 J: V1 g. V& j6 D+ X/ Y( y' s
ps:1°=60′=3600″

, i3 v$ f* v5 v$ j/ D
回复

使用道具 举报

发表于 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
5 C7 U+ E6 [% }; v不懂

4 v7 Q) M( l  `就是加工齿轮 需要将360°等分。多少个齿数就多少等分0 A8 v6 C2 l" K
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-14 19:03:12 | 显示全部楼层
本帖最后由 昨日明月 于 2013-9-14 19:04 编辑
! i7 ?- l. {' e0 J' r/ M5 L) m$ y( Y6 o9 a8 ~
http://www.cmiw.cn/forum.php?mod=attachment&aid=Mjk3MDM4fGM1MjgxMjJiMDM4YmJlNmY3NDZjYzU2NjRkMjRiMGM0fDE3MzIyODcyMDk%3D&request=yes&_f=.jpg 完善了程序。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2013-9-14 19:12:47 | 显示全部楼层
double也是浮点数据类型,它比float更大,这种东西计算精度不高。" \2 `: k) Z- A9 }) y  ?
, a0 C2 u  A4 U5 ?
由于n是doubule型,那a、b、c与n运算后,全部自动升级为double型了。
$ k+ q6 @8 X8 f# n% ^6 X) J3 v* u3 p; q, h
由于360*3600=1296000,已经超过int的最大值范围了,对这种超大的整数运算,你需要使用“大数运算”的方法去处理。
5 [* Q: V/ N# G5 O# i- |
$ ^; f2 L8 t0 v( \+ \* Q关于C语言的大数运算,网上有很多相关的资料。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-14 19:55:38 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12
+ G4 W0 ?- a' e: Idouble也是浮点数据类型,它比float更大,这种东西计算精度不高。8 b$ i7 I& W6 e- k. F
8 e8 A- J9 w' D
由于n是doubule型,那a、b、c与n运算后 ...

- ^& q- h7 }! c2 V嗯 谢谢。9 z% W- o' e, S3 b/ P* Y' K$ V2 d
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2013-9-14 23:10:45 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12   J( r: N0 A  Y- K5 E
double也是浮点数据类型,它比float更大,这种东西计算精度不高。- C/ N- E* f! _; o" J& @  l+ u

. M% _+ y3 E% z) Q由于n是doubule型,那a、b、c与n运算后 ...
( ]- A' Z6 r- s" e; M
在32位机器上,int占用4个字节,1个字节8位,故int共可表示2^32=4294967296种信息,32位的第一位为符号位,故其值域为 -2147483648 ~ +2147483648,容纳楼主的数值还是有余的,没有超范围。9 @+ [* v0 p$ H/ O8 i* c- ~- e
, |+ Y! v1 [  [0 t$ T
a=n/3600,在计算n/3600时,会建立一个double型的临时变量用以存放结果,然后再将结果的整数部分赋值给a,而不会将a升级成double型。因为a、b、c被定义成int时,在内存中已经被分配了4个字节,而double型占用的是8个字节,所以它们是不可能升级成double型的。# M$ _% q3 {& v; c  l: K. J( g; T
- h/ W8 F0 |" Z7 n8 s
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 22:53 , Processed in 0.065141 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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