亚洲欧美日韩国产一区二区精品_亚洲国产精品一区二区动图_级婬片A片手机免费播放_亚洲国产成人Av毛片大全,男女爱爱好爽好疼视频免费,中文日韩AV在线,无码视频免费,欧美在线观看成人高清视频,在线播放免费人成毛片,成 人 网 站 在 线 视 频A片 ,亚洲AV成人精品一区二区三区

機械社區(qū)

標題: 求解一個C語言程序功能是每隔6°18′54″就增加6°18′54″并輸出結(jié)果的程序問題,。 [打印本頁]

作者: 昨日明月    時間: 2013-9-14 17:08
標題: 求解一個C語言程序功能是每隔6°18′54″就增加6°18′54″并輸出結(jié)果的程序問題,。
本帖最后由 昨日明月 于 2013-9-14 17:46 編輯 . ?& H5 R: B% f! \0 h
( O9 s) g2 k7 U0 x+ g
# include <stdio.h>
+ |- O# |: E2 W, E( ?3 _! |2 aint main(void)
5 h  ]& ]% H- l) e{- B" s' i. j! S9 T1 {+ n. S& H, X
int i;% V- }# s3 k8 j1 V4 p
int a;" c% W5 o9 g% A& u3 C
int b;
0 J9 i+ e2 d( x# i: pint c;( g# T' _( g# C' K0 d2 v7 o
double n=0;
+ A3 B5 ?) z$ l7 w7 c    int  m=22734;
6 L( C. \) N- v3 E5 e* e" ?    for(i=1;i<=57;++i)
# T* F4 ~# e- u5 F6 m1 a{
. I9 v9 G  z9 O* u5 d& w  n=m*i;
& d0 N8 m, ~( }' M' A  a=n/3600;
. ?) l  H! z0 p2 ]2 p  W  b=((n/3600)-a)*60;) ~5 X+ g  r8 y# R9 h
  c=(((n/3600)-a)*60-b)*60;9 F7 S* M0 {; c, ], l" y* ]$ a; i
  printf("%d°%d′%d″\n",a,b,c);
, }) Z+ a% s  n5 N1 O0 K}
5 q, i% D7 ^! O9 H& |return 0;! k2 W8 i( |+ o4 E
}% V; j9 L. \0 Y  n. k) Q

, J' O0 u+ b' }( H+ R6 Y% F輸出結(jié)果:
" \: X4 V$ W# W+ v' c& q. J# B
6°18′54″; w2 F  N8 Z3 |+ x
12°37′48″$ V' P1 Q( f4 y* P4 T
18°56′42″, l3 e& S! w: N0 Z. J$ k* O4 E# f# ^
25°15′36″( f% \: D* t) Z4 i& A
31°34′29″
。,。,。。,。
/ e& {# @% U0 E1 D: i3 s. _& b# L# C
341°0′35″6 {, W4 V( y, e$ y
347°19′29″
3 ^$ P- H( ], J8 M& @353°38′23″8 v3 D7 t  V7 `
359°57′17″
4 B( T, N9 }0 b+ l/ S1 K
Press any key to continue& t: L4 l. P4 W4 E; f/ {
第五排正確的結(jié)果應(yīng)該是31°34′30″  想問一下這個程序哪里出問題了,,理論計算與計算機程序計算結(jié)果相差1秒- O& J5 ~: z1 H* x
ps:1°=60′=3600″
! Z8 O, m3 x" v, L* Y

作者: wf2725864    時間: 2013-9-14 17:29
a,b,c怎么能定義整數(shù)呢,我去
作者: 昨日明月    時間: 2013-9-14 17:32
就是要輸出整數(shù),,你好好看看程序
作者: 風隨意    時間: 2013-9-14 18:47
不懂
作者: 昨日明月    時間: 2013-9-14 18:53
風隨意 發(fā)表于 2013-9-14 18:47 6 C8 [, _$ Y! a
不懂
" G7 }, n& |, D
就是加工齒輪 需要將360°等分,。多少個齒數(shù)就多少等分5 T5 g7 T0 v, y. V6 _+ d

作者: 昨日明月    時間: 2013-9-14 19:03
本帖最后由 昨日明月 于 2013-9-14 19:04 編輯
. Y6 h0 \6 b0 T+ D
/ ^8 H+ c2 u& _  H, f$ {http://giwivy.com.cn/forum.php?mod=attachment&aid=Mjk3MDM4fGM3NWJiMGI4MWFiOTAyZTU0ZTkyODI5MTJiNWMzZjVlfDE3MzkzNjkxMTU%3D&request=yes&_f=.jpg[attach]297037[/attach] 完善了程序。
作者: fmdd    時間: 2013-9-14 19:12
double也是浮點數(shù)據(jù)類型,,它比float更大,,這種東西計算精度不高,。
5 z+ F. d8 G: t& j9 ?
4 ]- V6 k, N8 L/ P由于n是doubule型,,那a、b,、c與n運算后,,全部自動升級為double型了。3 {2 l6 i1 D. N5 n% Q$ C3 ?

2 e- F( {5 q' S6 }) w9 Z由于360*3600=1296000,,已經(jīng)超過int的最大值范圍了,,對這種超大的整數(shù)運算,你需要使用“大數(shù)運算”的方法去處理,。
0 e/ O. B& E1 B$ H1 j1 M/ r1 `1 e$ x9 o) o3 X9 T# A/ x( v
關(guān)于C語言的大數(shù)運算,,網(wǎng)上有很多相關(guān)的資料。
作者: 昨日明月    時間: 2013-9-14 19:55
fmdd 發(fā)表于 2013-9-14 19:12 & w+ h4 a* s6 m, N9 m" K! k* h, `
double也是浮點數(shù)據(jù)類型,,它比float更大,,這種東西計算精度不高。1 t# ?( i. ?: D- x( r0 D

' e5 b, u& _& O由于n是doubule型,,那a,、b、c與n運算后 ...

3 E- d3 m* Y" }# B嗯 謝謝,。
2 i" N7 Z8 q: R$ g0 K3 `
作者: 如果云知道    時間: 2013-9-14 23:09
學習來了
作者: 逍遙處士    時間: 2013-9-14 23:10
fmdd 發(fā)表于 2013-9-14 19:12 * U$ x- S5 G/ ]. M' ?" f
double也是浮點數(shù)據(jù)類型,,它比float更大,這種東西計算精度不高,。
6 n( M& m0 J: z8 n8 @; O1 h- N) j6 r2 s1 Q* C
由于n是doubule型,,那a,、b、c與n運算后 ...

1 ~$ t  ^% h( H在32位機器上,,int占用4個字節(jié),,1個字節(jié)8位,故int共可表示2^32=4294967296種信息,,32位的第一位為符號位,,故其值域為 -2147483648 ~ +2147483648,容納樓主的數(shù)值還是有余的,,沒有超范圍,。8 q- H: L" I' h
9 n1 X. {. B7 O% ]$ r: X
a=n/3600,在計算n/3600時,,會建立一個double型的臨時變量用以存放結(jié)果,,然后再將結(jié)果的整數(shù)部分賦值給a,而不會將a升級成double型,。因為a,、b、c被定義成int時,,在內(nèi)存中已經(jīng)被分配了4個字節(jié),,而double型占用的是8個字節(jié),所以它們是不可能升級成double型的,。
. L$ E/ ?" e: D9 O) _0 R, N8 q; ~+ w- f: i

作者: 逍遙處士    時間: 2013-9-14 23:11
本帖最后由 逍遙處士 于 2013-9-14 23:35 編輯 ' y% _6 F+ x( L( g: r
. }0 Y+ d" z3 L* ^
[attach]297069[/attach]" K5 ]* i" l8 ?: ~
7 R+ T7 o' J: X( A! I) B
這是用MathCAD做的計算,,程序跟一樓一樣,可見第5個也是29,,就這來看樓主的程序可能有缺陷,。
. x4 p: _+ G) T  ^: C假如齒數(shù)為57,則360*3600/57不能整除,,問題是否出在這兒,?
( [4 [* D* `2 l
; V9 j4 N5 v3 X* ~$ C# S; u9 N# o假設(shè)所給齒數(shù)能整除的話,不妨只考慮將第一個角度依次翻倍,,代碼如下:' ]( Z% d3 }1 }: S0 E8 H7 n

8 z' m7 \+ V! K* r5 T+ C; kint a=0, b=0, c=0;
9 w8 ?% ]" m! l% ^8 @while ( a<360 )
; C3 t! l. |4 H, g+ |6 t{  ^4 H+ d4 i" |- g( m- N7 S
  c=(c+s)%60; if ( (c+s)>=60 )  b=(c+s)/60;
- p" I9 T- L$ F  b=(b+f)%60; if ( (b+f)>=60 )  a=(b+f)/60; " k$ [) a& N6 p. P4 _  Y, H
  a=a+j;* P+ I6 |. _+ H! @
  printf("%d°%d′%d″\n",a,b,c);
/ t- n; }9 N* t/ Q1 b0 l& g}- _7 p( @/ L' P
, \! R: @% t5 \  G3 @# M% \2 X
不妨試一試,,看下結(jié)果。
, j$ q# `/ a1 }9 }* s) y% M% U+ }/ o; C$ ?

作者: fmdd    時間: 2013-9-15 08:20
隱含的升位運算和強制降位運算都會遭遇精度損失,,如果取值范圍夠用的話,,參與運算的數(shù)據(jù)最好都統(tǒng)一為一種類型,比如全部為float型,。
2 V% D* m; Z  f! g, {
* l3 y$ M( R0 L3 P: i7 N! R樓主程序中的* j8 I& B3 ~  k* R8 k( n  o

' u& T: m' d1 t  p4 m    int  m=22734;5 f6 L2 \0 j/ e- B1 o4 E) l& i% H

1 T1 o/ t& K/ |1 Q該值是做什么用的,?該值如何來的?
作者: 昨日明月    時間: 2013-9-15 08:22
fmdd 發(fā)表于 2013-9-15 08:20
1 o6 C8 e# N( V2 |; A! q+ k隱含的升位運算和強制降位運算都會遭遇精度損失,如果取值范圍夠用的話,,參與運算的數(shù)據(jù)最好都統(tǒng)一為一種類 ...
* x; b; w7 d# [0 t" G
取的值,,可以變化的。是6°18′54″轉(zhuǎn)化為秒數(shù)2 F' y  J; j; m! Q4 S, h4 d! v

作者: fmdd    時間: 2013-9-15 08:31
本帖最后由 fmdd 于 2013-9-15 08:33 編輯 ' {' B; v- q  ^$ b. m+ h8 \3 w/ }
昨日明月 發(fā)表于 2013-9-15 08:22
( X! o# b" X! r: H取的值,,可以變化的,。是6°18′54″轉(zhuǎn)化為秒數(shù)

1 L! }& i: u# ?+ J  y+ Y4 s這個取值本身就損失了精度
2 }1 O, ^9 N4 L( c( v) u
, J/ z5 {5 a" r# O6°18′54″是指一個齒的轉(zhuǎn)角是么?這個值的精度不夠,,計算出來是6.31578947……°
$ V) j9 t  O  U, Y* n/ m' ?5 A' Z% B
這里的精度損失造成了最后累加數(shù)值偏差,。  r1 E+ l' J$ r" v2 m0 ^4 n

作者: 昨日明月    時間: 2013-9-15 08:33
fmdd 發(fā)表于 2013-9-15 08:31
& u* n& Z3 J% E* M& `- p$ s這個取值本身就損失了精度# Y9 {+ I; d) p& \7 A
/ P# Q3 t% h; U2 Q& F' W
6°18′54″是指一個齒的轉(zhuǎn)角是么?這個值的精度不夠,,計算出來是6.3157894 ...

# I  ~. |& U- Z老式銑床精度要求沒那么高,。。,。 達到秒數(shù)就夠了,。。,。
- W! B+ F; F! f) ]9 f
作者: 昨日明月    時間: 2013-9-15 09:03
逍遙處士 發(fā)表于 2013-9-14 23:11
  G5 J" R* a  B這是用MathCAD做的計算,,程序跟一樓一樣,可見第5個也是29,,就這來看樓主的程序可能有缺陷,。
  v* t4 m, @/ D6 c假如齒數(shù) ...

/ C. }: d+ x1 ], i6 z" q6 q[attach]297095[/attach][attach]297094[/attach]按照逍遙前輩的代碼運行還是有問題呢?
作者: zmq    時間: 2013-9-15 10:39
這是一個很有意思的問題,。我也試了以下,,結(jié)果當i = 5的時候,,c 確實等于29,。為此,當i = 5的時候,,檢查 c 取整以后的余數(shù) =1 ,,也是一個整數(shù)。它就是 c 所差的數(shù),,由此,,我就懷疑程序本身的內(nèi)部函數(shù)在處理“余數(shù)”的問題?,!為此,,我把6°18′54″化成22734″的數(shù)值改成了22734.0001″,結(jié)果一切正常,。這說明你所編的程序并沒有錯,。請試試看。
作者: 逍遙處士    時間: 2013-9-15 10:41
把那兩行改成這樣試一試:
- N$ D3 a3 p9 j' g5 uif ( (c+s)>=60 )  b=(c+s)/60; c=(c+s)%60;
4 ^3 ?5 T8 m' V+ k5 @; D8 d2 ?; Uif ( (b+f)>=60 )  a=(b+f)/60;  b=(b+f)%60;
作者: 昨日明月    時間: 2013-9-15 11:42
逍遙處士 發(fā)表于 2013-9-15 10:41 , X7 _0 \0 _( f/ r+ j
把那兩行改成這樣試一試:
! S# W) I9 @% |$ W- ~if ( (c+s)>=60 )  b=(c+s)/60; c=(c+s)%60; 9 E! g$ i. T) d# u/ [/ ~8 A( U
if ( (b+f)>=60 )  a=(b+f)/60;  ...
! L% g, G( N) W: f) G
[attach]297112[/attach]改后是這個結(jié)果,也不行,。
作者: 逍遙處士    時間: 2013-9-15 11:57
本帖最后由 逍遙處士 于 2013-9-15 12:00 編輯 9 m' ^6 u+ q+ e0 J, |" r+ C2 C
昨日明月 發(fā)表于 2013-9-15 11:42
9 B) J4 y1 W+ y, a改后是這個結(jié)果,,也不行。
[attach]297115[/attach]3 E8 C5 t) _$ W7 N- p
* V7 B5 j4 Z8 Y# n" s
漏掉了一個 號,,哈哈,!
8 _6 O( p2 v" q# ]: Z吾寶刀未老也!
5 L. ?" V7 L" E: S. A& ?
" e; U9 z6 `3 Q
作者: fmdd    時間: 2013-9-15 21:11
int運算除法,,當不能整除時,,小數(shù)點后面的數(shù)值會被省略,計算精度比較差, c- D  Y) t6 I, d5 [$ x
( O( P+ J5 K" U: s
# include <stdio.h>
9 g7 g$ u, L  ^; L
: W# o/ L" b3 [2 lint main(void)
7 c& d# |3 R9 J. j{( x" h( O, N8 K# G* K' D

$ I% n- M, `* q1 Oint a=0;
+ o; V) x8 q3 I; Cint b=0;  J3 ?0 Y+ W# x7 ~: C: p0 Z& z% {
int c=0;
) _1 B* L/ Y7 b$ R
1 k4 x8 U/ ]7 r' S" {  `int n=1;
: |, T3 E3 e& S5 ]% r: ]; H, f5 P
printf("輸入齒數(shù): ");
# a  S# }% c: lscanf("%d",&n);
  Q/ E5 u  s- c6 o: h, {) f1 z; B8 V; t9 @% r6 U: k
int m=360*60*60;
/ T; Z- M* ^" `( d, K; [
/ ^, |; \( O; v    m=360*60*60/n;
% Y8 a1 V! a/ z8 k5 X      ( U% r: ^7 [. f3 Z8 H; [% j
int p=0;; W+ q& e1 g$ r/ K! y
& p3 g7 E! `' J* ?+ t/ p
printf("No.    度   分   秒\n");
+ l- Y) s$ {6 F6 Y4 V/ u) o, I% m. p, ^) [; d6 I0 X3 L

) J1 y* P* R5 t& ~. E/ `& ]; Dfor(int i=1;i<=n;i++)/ Q3 A; M" {0 L0 k: X% c" k3 i

, }; r0 L8 T6 _2 I{. h. e: e/ t& s+ r
        printf("%d      ",i);
% i- z; o% g( Z        9 l  Z* ^$ K9 |9 V; h/ f* b
        p+=m;
% c. L6 B" ]( ^    2 J- [' u/ p  H9 o
        a=p/3600;               //度
# {% m& @% z* m7 D        printf("%d° ",a);9 @4 o* A7 l$ J* s" P+ S- }

9 O9 E4 E& R) x8 |6 h        b=(p-a*3600)/60;        //分 ; v6 n8 o* S" H  p9 F* A
        printf("%d′ ",b);( P2 m9 Y  _% L& r5 X+ e
        1 m5 a# u% N/ P6 c1 u
        c=p-a*3600-b*60;        //秒 & S) q" e! c6 f6 V  `. d" u
        printf("%d″",c);
8 U+ g. u7 O; D7 s$ B' C        6 A) Y) j% X+ A) p" a2 Z( y
        printf("\n");# @* K" u/ Y6 H& R- j3 [% Y* \
}
7 `4 H0 N$ m, S3 B. Jreturn 0;8 R+ u% ?7 |' ?
}
6 c9 l' `3 L$ u' v6 Q& v- _' g1 J0 c9 C/ o; v; ]3 F
[attach]297171[/attach]8 ?; `0 r; \- I& X

3 o/ ]* W/ x& f4 @5 i
, O; p  z7 c* m! N: \: g- [7 O3 t[attach]297172[/attach]
, Q6 k# D/ w5 G/ l6 l$ ^
作者: wangyuanokok    時間: 2013-9-16 19:32
數(shù)據(jù)類型與精度




歡迎光臨 機械社區(qū) (http://giwivy.com.cn/) Powered by Discuz! X3.4