機械社區
標題: C語言算法16-26 [打印本頁]
作者: tainqing 時間: 2017-10-6 15:41
標題: C語言算法16-26
【程序16】 9 u3 @' M/ ^8 }3 R) L$ I, R
題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。
6 q/ g+ Z) {0 |, D9 e9 M( a# {/ R1 U
7 B k2 U7 V# q& @1 O$ S; X2 v0 J& U
/ y4 C9 W! J/ ^# g
作者: zhlei81 2005-1-22 11:30 回復此發言 # f9 u' A0 Y% A/ ~- l" c* E
' p( n0 K1 B' U2 R! i
--------------------------------------------------------------------------------
0 _- k4 @5 f! L% O4 [0 T q! F. [; p. i3 |$ ?: i6 i; x; Y
4 回復:經典C源程序100例
/ `2 t$ B, e1 g( z; T& h1.程序分析:利用輾除法。 . @' o1 Q" H* c: Z/ V8 h0 i4 _
. g: ]/ c) ^! W5 y1 ?2.程序源代碼:
$ j7 j C9 f9 X7 Emain()
' u# I4 d, z2 j( h0 K+ N4 [{ 5 y- Y7 ~; n3 T+ T6 v; m
int a,b,num1,num2,temp;
3 s7 b5 K9 q+ f# ]- B& s# p9 Dprintf("please input two numbers:\n"); ) g8 m, n. f& J6 G, l% C
scanf("%d,%d",&num1,&num2);
* H+ @" ?8 D) J. j: p& |1 iif(num1 { temp=num1; " y. `; y: ^- q$ F; w+ A
num1=num2;
, w4 Y# i1 b0 b" }" Hnum2=temp;
* M2 z9 @4 ?; K}
* f9 \' ?! y1 s& Ca=num1;b=num2; . ^7 M7 O( A E4 p
while(b!=0)/*利用輾除法,直到b為0為止*/ / R/ d/ Z, l* V* f" h
{ " T+ ], G; q+ u4 ]# s, S9 X
temp=a%b; + N3 D1 {4 |( Z3 l
a=b;
9 K& q$ b g0 }& V! e3 |8 bb=temp;
; O1 M$ {- k- z; v% L( `}
; o. Z/ b* [0 K' O$ Xprintf("gongyueshu:%d\n",a);
1 X/ I7 Y. B& t* x( `0 H- Lprintf("gongbeishu:%d\n",num1*num2/a);
' S w0 H: ~0 Z1 {1 S5 j} * x, o+ N' u+ i* k
==============================================================
9 Q4 @' L. X; s9 p【程序17】 ; G0 a. W/ o8 j8 N5 Q
題目:輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。 ' a5 m9 {0 c1 l$ P
1.程序分析:利用while語句,條件為輸入的字符不為'\n'. * i& ` v _( c1 D) u
g1 W* J5 ]( I9 L8 O6 E
2.程序源代碼:
/ I8 d I6 k, ^7 w, e1 t& e% Q8 L#include "stdio.h" $ U0 {6 t) ]$ s4 p0 ]' } Q! b$ H
main() 9 \0 S- m: k' b
{char c; ) I: v2 v0 {: A' M( p% w! j* V
int letters=0,space=0,digit=0,others=0; + p' v0 f2 a, E0 h* \( u* W
printf("please input some characters\n"); $ a& c' m' A W9 C a* z5 l" t, L
while((c=getchar())!='\n')
; y7 a2 Z, {$ N/ ?{
+ _1 z8 l S2 l& `$ G( r! Gif(c>='a'&&c<='z'||c>='A'&&c<='Z')
: @& {" V- L! B3 ^7 W0 a* Nletters++; ' p4 G( H6 D8 b
else if(c==' ') % H/ e7 O' \( R# P" _8 z F
space++; - Y- {9 t/ p2 r3 u. G* S
else if(c>='0'&&c<='9') 3 l* L% W' w$ {- K( b* R8 Y) }
digit++; - \( e& D& V3 Y4 ?
else ; m7 B/ h+ X. g' {# }1 i
others++;
% D" H/ i* V. O( L/ z% _}
7 M ^( G& t% W4 C& P0 i: [ ^printf("all in all:char=%d space=%d digit=%d others=%d\n",letters, , c; y# d t0 b! R+ B: g; C; r, Q
space,digit,others); 3 I" s _1 _1 ]2 w) B6 b( Y
}
0 ^; C2 R$ o; p2 u: W" P==============================================================
8 H) Y; y8 U' W: ~3 k【程序18】
2 t M1 a, L- g9 K; V題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時
k$ d+ V: L% m8 _, o0 S共有5個數相加),幾個數相加有鍵盤控制。
' j+ {; I6 U, Q& ?# X1.程序分析:關鍵是計算出每一項的值。
* c7 L6 D1 b/ {5 X8 z& ~2.程序源代碼:
+ k8 w9 E E% f, c. M4 j) l' R# Z: h2 [main()
! N6 {* J0 Y" R0 ]8 x* M{
. K% y8 |5 X2 ~int a,n,count=1; # G- Y, T4 a1 U5 U8 A* j4 M3 j
long int sn=0,tn=0;
/ o5 E, V2 E+ i+ a6 Cprintf("please input a and n\n");
" I% ~! @; C" C3 Zscanf("%d,%d",&a,&n);
" f, K3 `. n4 ^6 ]2 \* eprintf("a=%d,n=%d\n",a,n); & Y+ p, `" N3 p% w/ B/ J9 o
while(count<=n)
7 Z, n% v, o) Z9 ^. ^& z{
6 h% b* i7 L0 j7 X" X1 L. Otn=tn+a;
( n3 Z/ E9 v$ ?sn=sn+tn; & l2 c: Q0 A: F2 [* G2 |
a=a*10;
% j; d5 e5 o1 m! {/ D! F+ z Q++count; + W# M4 ~. Z$ I4 m; ?7 }
} ' V! E+ P! U0 h& `: D9 c/ O
printf("a+aa+...=%ld\n",sn);
) H& o+ M# T' j0 u @$ S1 z$ w}
8 F$ W- _0 b1 f0 F: I/ |: I==============================================================
/ D& S; N% e. D" o【程序19】 % e0 \. F; I) i
題目:一個數如果恰好等于它的因子之和,這個數就稱為“完數”。例如6=1+2+3.編程
- X, _2 H3 v- b; {1 H$ v0 u找出1000以內的所有完數。
0 V3 I- F* k8 K) v1. 程序分析:請參照程序<--上頁程序14. " M$ L1 q' J. ]. K, x# Q
2.程序源代碼: - J& A6 j3 a! Q: L @3 \
main()
0 j3 p% |( P c- i% M$ _{
; n2 H! d% }2 Z! f* n1 wstatic int k[10]; , [- s: D! f% V
int i,j,n,s;
) a; n# S0 S3 b9 Ofor(j=2;j<1000;j++)
, z) e% t- ~+ l6 t3 s5 x{ / ?# N& Q9 T. g# w6 M4 I4 A
n=-1;
: _ S# Z" m/ J" P4 |) _6 `s=j;
# r7 M; K; E4 [4 L8 `) qfor(i=1;i {
) ]; }$ ^% f# S: g$ ?! W$ |: j/ ^if((j%i)==0) 9 e4 T G2 y9 C
{ n++; 0 G+ @5 {/ X1 Y
s=s-i; ' K- D& J q0 G D) Q2 U' \
k[n]=i;
! }" V2 c8 Y# [9 J- S, k4 w4 T6 r} 6 a* V# m+ I% ~! H
} % w2 t* ]6 F* J& q3 `% e0 D
if(s==0)
, `$ g/ s: }4 i# A2 w3 Z3 I{
! H! e, O- P* }! Sprintf("%d is a wanshu",j);
4 C! m3 o* o* r" a5 }7 C& }% Bfor(i=0;i printf("%d,",k); 5 a$ q; e9 d$ d, r1 F5 k% h
printf("%d\n",k[n]); 7 k3 T2 P% o: r: j+ s
}
! s- I0 d! r5 ^% R: z. F. X) B1 H}
. N" o/ p! m! M( V6 B q} ) L" c/ p" T( ?! y) C
==============================================================
4 D& w7 t4 {, w! @9 h6 `$ D【程序20】 ' {, T( O, l/ g, b
題目:一球從100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
3 R4 q* D* j/ d5 k第10次落地時,共經過多少米?第10次反彈多高?
2 D0 O% Y6 u* Y7 ^2 m1.程序分析:見下面注釋
7 \5 }( k' |& j* W+ f2.程序源代碼:
& Z4 F. r! \8 R6 ^. y7 D/ a% Qmain()
8 Q0 |" e, M# \1 e4 g{
& U: k7 N" g' {* s8 lfloat sn=100.0,hn=sn/2; 1 a! m7 M6 _- i. H) B' k* [
int n;
9 E* {( b h1 N5 e$ Hfor(n=2;n<=10;n++) % I" ^: X/ M, e% ?' e5 U
{
4 A8 n8 ?( ?. q# Psn=sn+2*hn;/*第n次落地時共經過的米數*/ . b- P; m/ K7 F+ L; \
hn=hn/2; /*第n次反跳高度*/
+ y& k. j3 z/ D$ u* l# _}
2 W; } t |$ v% [. ]% t0 l* iprintf("the total of road is %f\n",sn);
: Z) p9 U. U% X. E1 P( f6 Xprintf("the tenth is %f meter\n",hn);
( W- M5 w- w4 S, ?' E- w" x8 l}
【程序21】
題目:猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個
- j4 z. }) ~* w1 O% E3 t9 z 第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下9 r: J3 e. j. ^$ _4 Y
的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。
$ U) Y; ^: J$ A: J* Q" d% ^0 o1.程序分析:采取逆向思維的方法,從后往前推斷。
$ [1 T( P$ P. L9 T( w2.程序源代碼:* j: d' X: g4 _* d
main()6 B, D) A4 _- w6 T' Q$ P! R) L
{
$ t# }) P' @ e9 t* M) uint day,x1,x2;% b: A7 f* _6 e+ a/ h6 S3 J3 H: ]
day=9;
5 V2 \9 I" E+ Rx2=1;1 L6 _) e* Z- ?- Z. S7 P
while(day>0)
1 |- M }3 [+ z, M6 ]0 X {x1=(x2+1)*2;/*第一天的桃子數是第2天桃子數加1后的2倍*/
( ^4 v" M6 _6 ~' F1 [7 E$ M% ` x2=x1;0 q& w8 n$ B7 I" S; Z C3 u
day--;
* e4 R7 J1 ]! G1 o. u% [ }- J0 h1 t$ _# _ x& D5 C- w
printf("the total is %d\n",x1);- v7 f4 P" Z) V$ A3 F( x1 X7 m& T( x
}8 j2 {& f0 n O- a6 q" J; @; H
==============================================================
2 s0 `+ i1 \: m: W: O【程序22】) f& H3 R$ @$ S! i
題目:兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽簽決定
' l0 `" c6 k' [! {5 g) U) x3 y2 ? 比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請編程序找出* ]* N8 i. P" r7 B. Q0 q3 D
三隊賽手的名單。
$ w9 n8 M- h9 n& I! M' ^1.程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,& ^6 y: A1 u6 h% r& |9 M/ _
則表明此數不是素數,反之是素數。 ; U1 X) v8 A# c8 K/ a+ Q; ]9 G
2.程序源代碼:
, l( \& S2 {, p2 ?6 hmain()# j+ z, H, b9 Z1 }* w
{4 n. A6 E# t( v0 a6 b1 \" h
char i,j,k;/*i是a的對手,j是b的對手,k是c的對手*/8 E$ w7 j" B$ c- n3 X, Y2 H' G
for(i='x';i<='z';i++)
# Q! }# Q; K4 P% K for(j='x';j<='z';j++)9 t+ ]% \* X) D6 [
{
( r% m5 ^4 n, Z5 o( G; h$ h" u if(i!=j); X9 @, y2 r; m7 N# I5 h
for(k='x';k<='z';k++)
4 s. [4 I& M! ^4 h4 w( Y3 l7 t3 H { if(i!=k&&j!=k)5 Z8 O6 J: p: K# X5 X- v
{ if(i!='x'&&k!='x'&&k!='z')
7 q. i5 z2 n4 z& u printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);
' _2 R T" V0 `/ ~2 m }
4 h7 s! _3 g8 t }
: \* X. j) @2 s6 R6 O0 A* o }3 k2 s* b1 [& a
}
* Z+ C; ~* y. d* k$ R, B3 \==============================================================) q! t I& i d' R7 A
【程序23】 6 ? z. e; {( B! B6 C" B( L- M! \
題目:打印出如下圖案(菱形)
*
8 Z; D9 [0 b1 O& _# S7 a***; n* K' X9 C/ y, G0 X C8 Z! E
****** Q7 ~2 i1 x \! O
********
5 U3 Z( _( X( R& d******
9 }: @$ Q' _9 Y***
3 k1 m0 O! x2 h; r. t: b*
; E) s3 G1 u9 H4 u# `) L! I1.程序分析:先把圖形分成兩部分來看待,前四行一個規律,后三行一個規律,利用雙重
3 A; _# i; O5 C% _! p3 o for循環,第一層控制行,第二層控制列。 H+ F' _$ F$ E; i
2.程序源代碼:
; g. }( `+ l! J2 T" ~0 Hmain()6 }) k3 }6 y4 Q
{
8 J3 }" U5 l; ]% A7 |3 M; Nint i,j,k;4 M* S. N" y8 Q0 v6 f
for(i=0;i<=3;i++)
# p2 R5 i( |5 ]1 l {) \, `& N7 r$ I+ E8 H8 T- ^8 i" p
for(j=0;j<=2-i;j++)# m' r$ o' ~4 ]+ X0 E
printf(" ");
" P: g6 k" T& @( i for(k=0;k<=2*i;k++)3 X; K# L4 x% d- ?& d, u$ t
printf("*");
) Z' @3 y4 q; `% l5 o printf("\n");
$ O ^- u' t9 i d. g }- W% m% h% A Q; W
for(i=0;i<=2;i++)
9 P" \' _! ]+ v" c* L; Z3 J4 i {! n/ M+ Y" z4 h
for(j=0;j<=i;j++): m* M5 `/ a/ i8 H4 o
printf(" ");
/ }# s9 W8 p: A ?" z/ j3 M for(k=0;k<=4-2*i;k++)
; m) l5 J# F* k, t, p printf("*");. k6 R7 b* H, F) ?+ z- m1 v
printf("\n");, G7 l; R! b% ~, y
}
/ J6 T2 q% j4 T+ d: ~* d}
/ I# E3 T7 g: Z: [, C7 J==============================================================
% s* H, ?$ G5 G% ^【程序24】
. p# O; V1 K @題目:有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前20項之和。( Q, [8 S3 i* f; A! X
1.程序分析:請抓住分子與分母的變化規律。 6 S+ {$ R+ h* |4 q
2.程序源代碼:" L* }* Z* f' z# C% G3 W& {
main()* G( S* X! t# Q$ t% m x% ^, m' D' I
{4 E8 _% ], H2 o, X
int n,t,number=20;, v6 F1 R" q G) u4 S+ W$ _" o
float a=2,b=1,s=0;
8 K8 t5 @/ X9 z- Q" q' y7 yfor(n=1;n<=number;n++)
! W/ `* y, m4 [, H+ o( [5 N& W {
1 e* }. [! N0 r s=s+a/b;: b, N/ C5 E8 W b( B6 x/ @: u, o
t=a;a=a+b;b=t;/*這部分是程序的關鍵,請讀者猜猜t的作用*/
1 O! g& z5 A( O: i% s( x6 O }8 x" u0 @! \3 H" `8 v6 G' o! r6 k
printf("sum is %9.6f\n",s);
& `& v, R& D0 `- \}6 o9 \( K3 C1 K% A3 N
==============================================================
( s" T8 D% F* Q5 Y' U1 M0 b【程序25】 嵌入式學習企鵝要妖氣嗚嗚吧久零就要/ G+ ^! h# [1 _' P, n
題目:求1+2!+3!+...+20!的和& \$ ?0 {: L G
1.程序分析:此程序只是把累加變成了累乘。 * k4 s. X1 F2 X( U3 Z2 t# \
2.程序源代碼:" {- p8 n/ x" j% z, V: _
main()
x, Z/ V) Z) t% d* X% M0 e* s{- V3 |+ ]% V4 \- b# T# \7 O
float n,s=0,t=1;
/ G3 k6 C2 a0 Y0 N) gfor(n=1;n<=20;n++)
5 V2 C ]9 [) f& @; M( @3 V { p: X2 g" S+ |
t*=n;6 ~ D. v/ P& P( U- _( V, {
s+=t;6 f S3 g6 Y- u
}
* F( ~& k1 p( D# s1 b, Cprintf("1+2!+3!...+20!=%e\n",s);9 @/ N) t2 ~( o2 @
}
t) I1 v1 ~- v. a' B) U% Y, n7 v==============================================================0 R1 S7 T& o' m! ]3 S3 h0 x% J2 M; O
【程序26】 % ]2 a& Q3 a8 a/ A: Y+ m
題目:利用遞歸方法求5!。0 Q6 U, v' C$ Q' M5 e' w
1.程序分析:遞歸公式:fn=fn_1*4!/ l) m) _& r' X* J5 \5 l. b/ `
2.程序源代碼:
. p* i2 b6 D+ T/ k( v+ m#include "stdio.h"9 E9 h$ h! h( U# o7 y
main()' g% `: F2 ^/ _$ o; {1 b
{4 y9 R. z1 A5 \/ r, v/ u5 f" B9 D
int i;$ [7 f5 j4 j0 j" O9 c
int fact();3 u' P0 e# W6 t# S6 p: w
for(i=0;i<5;i++)
0 q: S+ w; Y8 i3 B8 e( o printf("\40:%d!=%d\n",i,fact(i));
+ |( I) P% Y5 K" `3 r}
* ^! P {. E/ k t ]int fact(j)4 [: ^7 p8 x( ~# J
int j;
/ b% `; \# I' M8 r6 n{
( l! s$ s- r; |: `- oint sum; h. D5 {" G" N, S
if(j==0)" [- P+ B( n7 T ^ Y2 k4 D' o
sum=1;
) y2 Y5 Y: C$ P0 ]7 yelse ~. R& I& b1 ? `( n' r7 M
sum=j*fact(j-1);
, ?% q* j% s; L4 Areturn sum;/ T* U4 a5 S( s- q
}
( A2 V, z O# B6 r==============================================================
, h2 O) q6 C! t1 O5 v
作者: danxiaogui2017 時間: 2017-10-9 21:23
學習了
歡迎光臨 機械社區 (http://www.ytsybjq.com/) |
Powered by Discuz! X3.5 |