机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 6246|回复: 21

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

[复制链接]
发表于 2013-9-14 17:08:27 | 显示全部楼层 |阅读模式
本帖最后由 昨日明月 于 2013-9-14 17:46 编辑 # B4 J% T% o! N( C' @5 Q& {

% w) m* p# c: u! U  D, ?* z# include <stdio.h>! c$ C# [! H0 u, t
int main(void)1 @7 x: j2 v5 ^; `
{
( A& O) ?0 k9 _6 gint i;
% p2 [0 }( T: D# |7 E6 X9 Yint a;
1 @' |% y0 D+ M& C3 w' ~4 z( Bint b;
( N% J3 y6 J! |" |3 ]! g* K8 Zint c;4 o4 ]; ?. R3 @
double n=0;5 x) F, F; q" k) O9 n- {  \
    int  m=22734;0 Q6 \. W, ^; E* |5 j9 H( @
    for(i=1;i<=57;++i)) D: @9 L/ \$ y# n$ q
{
' p* ?0 c" F6 ^4 y/ E6 y/ c+ R  n=m*i;  `* n$ \( |' d2 @& \) z0 @
  a=n/3600;2 l( W/ |' J- S' g
  b=((n/3600)-a)*60;
5 ^2 h  n  M) Z% R; w  c=(((n/3600)-a)*60-b)*60;: i. |3 a: p; V/ N& |; O! a
  printf("%d°%d′%d″\n",a,b,c);
$ ~6 _+ S( s9 \( l}$ i4 A" y6 R, T8 I7 A
return 0;
# e7 P2 y% Y/ l}) D% U2 l& s( Q1 Z1 Q
9 |, a7 q0 c( M% @0 \
输出结果:
8 @  f  I5 g# V# y( O
6°18′54″
+ {- d+ M( l1 ?2 C! u12°37′48″. P& C6 g/ c' b: A) Z* T$ D
18°56′42″
2 T# l- v5 l1 ~5 Q8 j' h0 t25°15′36″3 H# y3 i! {5 @: G1 E# @- A0 Y4 {
31°34′29″
。。。。。
- x+ E1 O% k% ^; a4 k1 n) r+ E& s
341°0′35″: \: u! u6 C: e& x0 H6 _( C+ H
347°19′29″' V& L4 _8 [0 S. w
353°38′23″1 R3 G: X0 i! y1 O5 n# n
359°57′17″
* K0 `: {/ g0 o: x5 ?  j
Press any key to continue
3 e6 t$ w  K- ~8 Y1 R* s第五排正确的结果应该是31°34′30″  想问一下这个程序哪里出问题了,理论计算与计算机程序计算结果相差1秒( Q" z* U# L: Z* p: Z4 ~
ps:1°=60′=3600″
$ ]4 v$ d* q5 t9 k& D. Q
回复

使用道具 举报

发表于 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
9 s( k: B; u) u  e: X4 o不懂

5 c. g0 }) K! @; v3 I$ l就是加工齿轮 需要将360°等分。多少个齿数就多少等分
: j! G& b' g) d4 f
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-14 19:03:12 | 显示全部楼层
本帖最后由 昨日明月 于 2013-9-14 19:04 编辑 & R- Z! }' @% V( Z6 }/ {
& ~2 N. f. o' [& I
http://www.cmiw.cn/forum.php?mod=attachment&aid=Mjk3MDM4fDUwN2E4MmE3NDM3ZmZhZjM0NDc1MWVlNjBmNGM1YzJhfDE3NDM2MzYyMzY%3D&request=yes&_f=.jpg 完善了程序。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2013-9-14 19:12:47 | 显示全部楼层
double也是浮点数据类型,它比float更大,这种东西计算精度不高。
9 O" Y) K: ?) M% U6 _
6 @8 U0 y: E# _+ K  _由于n是doubule型,那a、b、c与n运算后,全部自动升级为double型了。
" |: ]. B: @! Y4 D+ k4 I- u% o6 g% Y4 A3 M! _$ l5 C
由于360*3600=1296000,已经超过int的最大值范围了,对这种超大的整数运算,你需要使用“大数运算”的方法去处理。0 ]/ L8 K( k  N# ]8 V0 ]3 q0 g
2 d6 _9 g& }' l$ T  E; Q' v4 ~
关于C语言的大数运算,网上有很多相关的资料。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-14 19:55:38 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12 " N7 s( O* E8 |" f$ `/ c! m. b
double也是浮点数据类型,它比float更大,这种东西计算精度不高。6 i5 s" s7 G5 \0 B& Z, K5 _) D

% P# Z) v1 p! A# m& t) R5 [3 F0 {1 T由于n是doubule型,那a、b、c与n运算后 ...

3 K% v* u1 ~. p9 h嗯 谢谢。- b7 l4 I6 b! |* Y$ ]! C
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2013-9-14 23:10:45 | 显示全部楼层
fmdd 发表于 2013-9-14 19:12 4 v  u# d4 l8 y0 Y
double也是浮点数据类型,它比float更大,这种东西计算精度不高。: J( ^7 w6 @* u  U" w8 z9 ^
3 b  t$ ]9 i; z; W5 e
由于n是doubule型,那a、b、c与n运算后 ...

/ ^+ }. V) }' Y2 a在32位机器上,int占用4个字节,1个字节8位,故int共可表示2^32=4294967296种信息,32位的第一位为符号位,故其值域为 -2147483648 ~ +2147483648,容纳楼主的数值还是有余的,没有超范围。
( m  n$ ?3 `9 z3 `
* D4 J) A7 l$ c6 l" la=n/3600,在计算n/3600时,会建立一个double型的临时变量用以存放结果,然后再将结果的整数部分赋值给a,而不会将a升级成double型。因为a、b、c被定义成int时,在内存中已经被分配了4个字节,而double型占用的是8个字节,所以它们是不可能升级成double型的。1 G# T7 L* n: p+ N! K$ g0 D9 x; ?5 ^/ _
, U5 l8 A2 D+ F9 S- X3 D
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-3 07:23 , Processed in 0.068106 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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