機(jī)械社區(qū)
標(biāo)題: C語言算法16-26 [打印本頁]
作者: tainqing 時(shí)間: 2017-10-6 15:41
標(biāo)題: C語言算法16-26
【程序16】
& I1 b; z& t4 C( D$ Y- I+ J題目:輸入兩個(gè)正整數(shù)m和n,,求其最大公約數(shù)和最小公倍數(shù),。 ! [ e: h7 S* ]" J- ?
# d1 C4 P$ N& ?' j6 o) n0 t
" M3 g3 v7 D2 v1 m) F, H
" E# x/ m! F* R, H3 v
作者: zhlei81 2005-1-22 11:30 回復(fù)此發(fā)言 1 D# [, {3 f" l* M; x" b9 h
# x5 ~8 D6 j8 g* S4 r6 ?--------------------------------------------------------------------------------
; p# x" ?3 w9 P5 |9 Q
9 T1 I' h9 ]4 b4 回復(fù):經(jīng)典C源程序100例
) M: P5 E# P% M, R3 S- Y/ R; K6 R1.程序分析:利用輾除法,。 , L) [! |/ _2 y
$ T' A3 Q- _/ x i
2.程序源代碼:
9 u. S! z3 B9 L- s% Omain() - p7 r H' g9 S$ r1 r F6 p3 c
{ 9 z% _' r6 b" N+ M" F3 X7 K& V
int a,b,num1,num2,temp; - w& n+ B9 i; t& x( H* G# c
printf("please input two numbers:\n"); ; X5 z; F3 O* _1 J" J0 Y% T
scanf("%d,%d",&num1,&num2); - A, y5 K" t' e7 F; X! r( o% I
if(num1 { temp=num1; 0 O4 v/ X/ j1 t# t
num1=num2;
) G! a b' g H+ D8 gnum2=temp; % o- U# V4 s( g7 ^6 O
}
/ i5 S5 c& z) o* J: l8 |a=num1;b=num2; ' M0 L% L" ^. y- a1 M
while(b!=0)/*利用輾除法,,直到b為0為止*/
Q) M( y3 Q( s- i0 C1 r" o1 }" s{
# G/ o. U6 T9 T/ e+ ttemp=a%b;
6 j* M0 Y# R2 b/ n0 m- v9 Xa=b;
3 ~5 I$ d G; b5 i9 `b=temp;
% o0 D# F8 z8 j} F" y& v+ u8 q! D! o# Y
printf("gongyueshu:%d\n",a);
# l5 N& o1 u3 T, ]. S% t9 L/ Gprintf("gongbeishu:%d\n",num1*num2/a); ! m: J) w h) L* P7 y: L" M1 h
} & A7 _$ I6 \7 [" Z5 U
============================================================== $ ?4 W2 G* C+ T5 ]! N6 [
【程序17】
+ {& t* m# c s+ N1 g0 O8 M# O6 r題目:輸入一行字符,,分別統(tǒng)計(jì)出其中英文字母,、空格,、數(shù)字和其它字符的個(gè)數(shù),。
; u% H: w Q2 Y1.程序分析:利用while語句,條件為輸入的字符不為'\n'.
7 g, U) P2 B0 X& ^2 o9 \
: d% }6 b) o. q2.程序源代碼:
1 e0 T9 Q7 H8 ]1 N4 ]* ?1 t) C#include "stdio.h" ; d2 R2 i6 e( D6 Y/ C" n8 a
main() 5 X9 a; b' y, V9 R$ o5 w( R% P
{char c; . ^: k7 N2 T$ ~) `
int letters=0,space=0,digit=0,others=0; 9 g |0 {) J' z- C. ]. u
printf("please input some characters\n");
; y- L; z! z+ T5 N& {while((c=getchar())!='\n')
r- p0 K5 d. w{ 7 y, g0 g* Q9 r7 d
if(c>='a'&&c<='z'||c>='A'&&c<='Z') X s: S# W8 p6 Z4 t/ C7 P2 v- w
letters++; ; W" h4 P0 y; @) P* W8 G7 W- l
else if(c==' ')
! J% U1 Q* w+ u' z0 pspace++; ! W7 f8 b0 O( P* z2 G: `( H1 x" U
else if(c>='0'&&c<='9') : ^& }0 I1 B9 ]: B& l4 s1 ]
digit++; 4 K* s0 S8 X0 Z O5 I1 {8 Q4 J* v; I% U
else
6 v3 o5 F5 G7 q2 h5 r$ nothers++; ; Q; `( p# n3 X/ I/ U' g: @$ l
} 4 q0 c0 Y/ G* S4 m2 f# e: P
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters, ( R3 Y2 Z6 D: ^/ w; ` n$ u
space,digit,others);
! v4 U( [) y( H$ w( E3 x} . |6 f- J. K9 h3 h5 I
============================================================== 5 @/ D4 B& S Y2 n9 P6 f$ i
【程序18】 ) S' U9 f( Y: z! `- _0 f
題目:求s=a+aa+aaa+aaaa+aa...a的值,,其中a是一個(gè)數(shù)字,。例如2+22+222+2222+22222(此時(shí)
, l$ s1 x& r1 m1 g+ n& ?共有5個(gè)數(shù)相加),幾個(gè)數(shù)相加有鍵盤控制,。 4 T0 w' x* \. @6 b' G7 W1 M) o
1.程序分析:關(guān)鍵是計(jì)算出每一項(xiàng)的值,。 3 {" |: ?8 h' h/ A6 p6 I8 n/ m
2.程序源代碼:
0 g5 @7 [, I; L4 j; c, d3 Kmain()
7 i" b& E$ M9 N* m0 O7 V' G{ ; S/ q8 d4 E. e8 J
int a,n,count=1;
. o3 W1 A' K, c" f6 _* X* flong int sn=0,tn=0; + V+ A, H9 F* C. u# ?. X
printf("please input a and n\n");
6 N+ G0 d! H- i( O' |' p7 Fscanf("%d,%d",&a,&n);
0 a( E; e3 `, A) S% e4 Q- vprintf("a=%d,n=%d\n",a,n); + T7 T6 r4 I5 R4 K& _1 P2 O! t3 F1 n
while(count<=n)
% J# L! _: `1 O# Z1 ]3 K{
0 x4 E3 H5 Y% V: Jtn=tn+a;
' S- b3 s0 j: D2 Msn=sn+tn;
7 F8 m k: X9 v. h$ T" |+ W6 ia=a*10; - s! Q2 q8 j/ o$ v1 g' |
++count;
+ @/ C: n3 i4 |# Y} 3 g+ `% v+ `# w2 O& j* p' g+ u- M
printf("a+aa+...=%ld\n",sn);
7 d, g, P1 J/ t: \}
' V' X/ N }$ I============================================================== * b7 P% [1 N+ O; f
【程序19】 y9 C, D" @6 y! U# P4 [: K* B
題目:一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱為“完數(shù)”,。例如6=1+2+3.編程 . x' a: q9 S( |. t. k) \* Z
找出1000以內(nèi)的所有完數(shù),。
# J( l2 e% _, F* E5 w% l. T% }$ _1. 程序分析:請(qǐng)參照程序<--上頁程序14. * o3 Z5 Y% H$ ^
2.程序源代碼: 0 j: T8 |1 b/ n) ]4 c
main() , x+ M h4 ?3 B8 Q9 }" j
{ : ?% e7 x; I; l! _0 }
static int k[10];
' }+ w2 G9 q# a* I! E6 L# zint i,j,n,s;
1 J/ m5 E6 E3 T4 b" K: q2 V* W9 {) vfor(j=2;j<1000;j++)
[! ?. Y* r8 R* ?{
# x" b" W7 O! `n=-1;
9 q( y7 q! A* x. ms=j;
$ |$ _; F8 Z1 |& o sfor(i=1;i { ( T& G: w; }- h" ^9 @
if((j%i)==0)
* v3 i9 _' U5 S& v{ n++; 3 F4 b: e0 M o# f* V$ a6 D
s=s-i;
4 w- A" O z: L+ ~) T, J+ dk[n]=i; 8 F( T$ g! K- r+ w. m: O7 K* m6 l
}
. u1 Q& j$ {; e- w}
' v' t# I7 u( ]3 U v9 iif(s==0)
$ V- O3 Z9 ]8 i `{
2 P- I ?. q# B# _2 y. rprintf("%d is a wanshu",j); & Z& D& y$ }& N6 `% B- q
for(i=0;i printf("%d,",k); 7 l4 m5 h/ Q9 X# o
printf("%d\n",k[n]);
. \$ v% L, Y) W1 k' {& b0 {/ s} - L* L7 f: i9 ~* O4 W/ x
} ; j) Z9 B9 V% ?( P8 f
}
$ g* v. n" A" \# q5 h7 L6 W) _============================================================== $ K2 h" P, v/ W# M3 K# S
【程序20】
6 B! o# c) u( Z# B題目:一球從100米高度自由落下,每次落地后反跳回原高度的一半,;再落下,,求它在
& F5 ?( p& |+ L9 x第10次落地時(shí),共經(jīng)過多少米,?第10次反彈多高,? ; P. Q, {& @3 z3 w# |
1.程序分析:見下面注釋
+ E" @, ]5 Q2 K. ^2 x$ x2.程序源代碼:
) z# I3 u( b2 Q. Ymain() ( \$ M$ L) S' K/ \ q x7 m
{ ( T b x# _7 N! I3 x
float sn=100.0,hn=sn/2; ' ?# b9 {* Y: p: I0 }/ g" b+ W
int n; , R: X; V; g/ a% }: T
for(n=2;n<=10;n++)
7 k8 f8 n3 v/ Y{
k; y& K# G0 V: e) Gsn=sn+2*hn;/*第n次落地時(shí)共經(jīng)過的米數(shù)*/
! y! [# j O% U- _2 z3 _hn=hn/2; /*第n次反跳高度*/ 3 `6 \( Y6 Z' u+ K, n
}
" u2 c1 W* `" P5 _4 B9 L7 {4 Oprintf("the total of road is %f\n",sn); 5 L1 P( n: V! T7 A/ L, y
printf("the tenth is %f meter\n",hn); ( m8 J. f c s3 S% i4 q0 @3 C
}
【程序21】
題目:猴子吃桃問題:猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,,還不癮,,又多吃了一個(gè)
! |0 P( d1 c" }2 H 第二天早上又將剩下的桃子吃掉一半,又多吃了一個(gè),。以后每天早上都吃了前一天剩下; q: L* X6 F7 ~) \& P
的一半零一個(gè),。到第10天早上想再吃時(shí),見只剩下一個(gè)桃子了,。求第一天共摘了多少,。3 \' W0 A( F" {4 ]; D: y, o" R
1.程序分析:采取逆向思維的方法,,從后往前推斷。
0 M; @- `% |7 G& R u2.程序源代碼:
, D. I2 T8 S9 h/ I& Lmain(), \: u8 M+ c; N3 I: B, c# R* L1 n I# g! W
{
+ w4 @. \7 C0 h9 jint day,x1,x2;
( S% Y: l A6 V- T% b; uday=9;
9 U3 ], O p% `2 L0 U- Mx2=1;- g% Z( r% D. [: O- M. z2 E9 E
while(day>0)) ~& [" f- W4 _, L. a$ d7 b
{x1=(x2+1)*2;/*第一天的桃子數(shù)是第2天桃子數(shù)加1后的2倍*/. H7 J2 O* W1 \ s7 I9 g
x2=x1;/ @6 O' Z) _; u( C1 {$ n
day--;/ p9 v; u; T' O9 C/ B/ t
}
" V* \6 z. Y1 Q1 c) |7 ~* @2 jprintf("the total is %d\n",x1);
* [8 M3 A+ i! i9 p, D5 t1 p9 ~}
6 z* k* x2 O1 g0 P' f v==============================================================5 @% p& }6 ~0 }# ], O- s
【程序22】
# n4 a. f8 T- d. ]題目:兩個(gè)乒乓球隊(duì)進(jìn)行比賽,,各出三人,。甲隊(duì)為a,b,c三人,乙隊(duì)為x,y,z三人,。已抽簽決定3 s4 e' ` s: |3 i9 q0 i0 L0 C
比賽名單,。有人向隊(duì)員打聽比賽的名單。a說他不和x比,,c說他不和x,z比,,請(qǐng)編程序找出
9 V2 V2 Y- I1 m 三隊(duì)賽手的名單。
& _! b# ?& q) v3 m0 s2 Z8 M1.程序分析:判斷素?cái)?shù)的方法:用一個(gè)數(shù)分別去除2到sqrt(這個(gè)數(shù)),,如果能被整除,
, ^8 E$ {: C9 _$ ]1 g! {# _ 則表明此數(shù)不是素?cái)?shù),,反之是素?cái)?shù),。 3 L$ r8 m0 ?* V5 V) b5 _+ z! h
2.程序源代碼:; i1 I4 z8 C2 |3 n5 `3 b0 Y" ?
main()' t$ T, W0 `+ |6 A5 t8 A
{! ]# m; v* G4 s5 Y
char i,j,k;/*i是a的對(duì)手,j是b的對(duì)手,,k是c的對(duì)手*/
- f+ s7 A7 V5 X1 Bfor(i='x';i<='z';i++)
5 ?- ~# _3 @4 E- [% p# {% M for(j='x';j<='z';j++)% e- J5 _9 r4 j# X. [7 r k5 o
{
- h b3 G/ f) p: r( j if(i!=j)! F) [3 t4 O9 D% [* U8 k
for(k='x';k<='z';k++)
, \1 p1 z1 e- }8 ^ { if(i!=k&&j!=k)' |* V: w7 u* M! ~5 Q( P
{ if(i!='x'&&k!='x'&&k!='z')
3 z6 y7 S+ i# F printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);* W4 b6 Z0 x' D7 T$ T
}
+ B4 x' Y" a% o1 `# O/ `" a% j }
" h; @6 [ u& N9 o: L }
" _$ c. E4 s8 u( B ~$ X}
' ?+ e2 M/ {! j8 `==============================================================7 q0 u% i: P1 _4 e/ n
【程序23】 4 \, y0 r8 z' d' u* e/ m e
題目:打印出如下圖案(菱形)
*
% S/ u2 Q; M) Q% l***: R3 w! }; z# {9 A. U% o* F
******
* i o$ K; C7 ^7 q d8 P* Q********6 i& w, {+ }1 C, `+ [- U
******- P$ V& e2 E* }3 {8 J
***
P* T. |& }' L( p2 d# e3 [*
* w4 ]! P5 N% Y6 B% \1.程序分析:先把圖形分成兩部分來看待,,前四行一個(gè)規(guī)律,后三行一個(gè)規(guī)律,,利用雙重
+ ]. h( l4 ^; T5 Y for循環(huán),,第一層控制行,第二層控制列,。
9 p- }- @ H y8 z1 b; c2 @0 G2.程序源代碼:
% e6 a8 w% z! @& |3 j4 omain()
5 a4 D5 y3 R& n S# H% g{
7 U0 k/ {) T8 R" l# _int i,j,k;8 v! `- i7 i S
for(i=0;i<=3;i++)) ]5 B& O+ u8 U
{
( n/ q+ b* X1 a* j for(j=0;j<=2-i;j++)
3 K+ Y1 @, G, t( z m& C printf(" ");6 o) ?+ P2 s8 R
for(k=0;k<=2*i;k++)
1 _! _5 s# j" n6 L3 e# w2 C0 W4 V printf("*");( [5 t) ?5 J1 Q0 ~
printf("\n");9 e1 n9 b8 V1 Q
}- K N, g4 m7 Y- h1 A6 X& s5 j
for(i=0;i<=2;i++); `( _) k# ]7 r; Q: {) M
{) B) e1 L$ |; M3 l
for(j=0;j<=i;j++)
- r# I) q! N. i( H; _ printf(" ");
. O3 |. q* `- l for(k=0;k<=4-2*i;k++)
, }8 x+ [; D( l6 C5 } printf("*"); W V5 V2 c1 v3 @ n/ U7 F
printf("\n");
& `2 n0 D2 ?6 m+ M) x2 |5 w }. \+ B3 n( U. d
}
/ o2 C) ^! F2 c+ l==============================================================
3 r6 z$ ?8 `+ ]【程序24】 % [! k8 K5 c6 k
題目:有一分?jǐn)?shù)序列:2/1,,3/2,5/3,,8/5,,13/8,21/13...求出這個(gè)數(shù)列的前20項(xiàng)之和,。# T$ K' L( D) o' N0 {
1.程序分析:請(qǐng)抓住分子與分母的變化規(guī)律,。
# y3 e# f3 Z+ I7 q* ]! C" S- v2.程序源代碼:
2 h, ]! r* Q$ J Qmain()# w* m1 q. n; ?8 |
{2 C+ ~* X* _$ h7 n
int n,t,number=20;
3 p6 I% W1 a+ r& ~- H3 Q# c2 ^. Xfloat a=2,b=1,s=0;0 A9 t9 C7 s' U) \% ~7 p0 ~
for(n=1;n<=number;n++)5 M2 s3 X, N* ^; e
{
$ ~; ^+ `: e U* j# p0 q/ W s=s+a/b;* P/ z8 G B$ S# f, ~: B
t=a;a=a+b;b=t;/*這部分是程序的關(guān)鍵,請(qǐng)讀者猜猜t的作用*/5 l# n' n( M* ?2 A: P
}
. n- a S8 ^) f9 tprintf("sum is %9.6f\n",s);: a6 K: ^ ?$ }! D7 A9 Z5 i
}
4 d C$ v2 D9 J4 f& p9 ]==============================================================8 ~% I5 C: {' M% k% ]; ^
【程序25】 嵌入式學(xué)習(xí)企鵝要妖氣嗚嗚吧久零就要* P3 ~( U) V; R0 P3 o
題目:求1+2!+3!+...+20!的和
6 V5 |# d6 y: _% {3 Z7 }1.程序分析:此程序只是把累加變成了累乘,。
3 z6 q. W2 r/ s3 ?/ G. _; O' l2.程序源代碼:
! b( g8 V6 @4 kmain()
h$ }0 d8 p& h( I- }6 B{
/ `9 n* T, i' @- x: [- S- ifloat n,s=0,t=1;
7 h" |. T& X6 `& d/ W8 ?for(n=1;n<=20;n++)
9 h( h d; ?' M6 P4 | {0 {% \! ^' q5 y d1 G
t*=n;
7 V3 f7 Q- B" ^& j9 _! W s+=t;) S1 [ E4 ~0 m
}
$ W# q2 `; i: B/ O0 t& Vprintf("1+2!+3!...+20!=%e\n",s);
# p9 e' I, h0 v8 _}; k9 G9 @! d, p7 A( M
==============================================================
* a( K5 R5 [; y4 c1 V+ N5 O【程序26】 4 B) o5 P7 ~4 i) r ]
題目:利用遞歸方法求5!,。
- b; K2 O7 E5 v" \1.程序分析:遞歸公式:fn=fn_1*4!+ l6 @* u5 O0 N" K+ \( P3 ?
2.程序源代碼:4 Y, T3 G( Q. k. \7 K+ G
#include "stdio.h"+ E0 @0 y" P, P, z4 m6 H/ D: Y1 O' m
main()
3 I$ N* N- p' \% d6 S3 J C{
2 n% O" S( n$ K7 D' q# Y6 x* qint i;
# C9 x# e* ~3 i& uint fact();
+ [! C9 c) G6 B% |$ ufor(i=0;i<5;i++)& B2 G$ b+ Q) @' V* h/ u# m" Q
printf("\40:%d!=%d\n",i,fact(i));
w/ r# P; a/ ~1 C) R}4 u5 Z- Y/ M/ t; b# m4 W
int fact(j)
# r! l' ~5 i" p; I9 t% I6 x3 D. yint j;
9 N; I% C! f- k* m" q5 \{
, J# }0 F' ~1 j' E0 o+ Bint sum;! @0 i, A d& g/ l& ?( U
if(j==0)
3 x; H2 v5 O! S7 v6 S3 v sum=1;
# u) k7 @$ k, t$ D( Felse
$ e! C- E! ~" f# ?6 l7 B sum=j*fact(j-1);
! [) e( U% P$ ]+ Q- @return sum;
& p+ X1 j; [1 L! ^" ^4 ?* b [}
; W5 K+ S4 n q- ]==============================================================
% U( E, }6 k4 t: k, i c
作者: danxiaogui2017 時(shí)間: 2017-10-9 21:23
學(xué)習(xí)了
歡迎光臨 機(jī)械社區(qū) (http://97307.cn/) |
Powered by Discuz! X3.4 |