【程序16】 $ b$ q2 I- n; g) O4 A2 l3 A
題目:輸入兩個正整數(shù)m和n,求其最大公約數(shù)和最小公倍數(shù)。
% ]0 H1 d) a: q- U |4 V2 `( A- f( T7 m/ c5 |% ?7 o2 P& r& @ E
! ^+ v7 E7 F! T i+ s5 A, Q
5 d6 h& w: o5 N) L7 N {作者: zhlei81 2005-1-22 11:30 回復(fù)此發(fā)言
! n9 O9 l0 \1 ^0 q& ^/ U. ~+ m f' x+ {% ]0 L# N
--------------------------------------------------------------------------------
" N+ ^* X1 S5 a' e" g. }' ]- m4 i
4 回復(fù):經(jīng)典C源程序100例
6 L. ~( J8 u% d1.程序分析:利用輾除法。 , c9 @. I# P$ i8 C
+ h% b$ W3 ^+ B$ w* v
2.程序源代碼: 2 `0 ]# S1 g7 ]$ B ~/ G
main() + F+ C/ h6 p- s5 C% s8 \
{
- o# ?6 k- \3 n$ j; R- {1 Gint a,b,num1,num2,temp;
7 i, z; K$ F" Z3 D: f) A0 ]printf("please input two numbers:\n"); . O: w6 Q+ v: `: X" R' v3 T# r
scanf("%d,%d",&num1,&num2);
( O% h9 l/ {3 ]4 @: o+ mif(num1 { temp=num1; ) C# i) n8 g0 \6 P {
num1=num2; 9 Z* w: e. ]" B* c
num2=temp;
) z) {& ?1 |" r0 n! ]) \}
4 {% [% K7 w( {7 X/ qa=num1;b=num2;
& y" V# j$ n# _' @0 Jwhile(b!=0)/*利用輾除法,直到b為0為止*/
) n% Z* X4 B, J! ]* z" X4 u{ ; Y$ n$ N, y* {. X, D4 J! ]
temp=a%b; ; Y8 B# p3 n# g# L. @* a/ u
a=b; 1 {. O2 ~7 }/ a7 F
b=temp;
, G( M6 T% |! E}
4 O0 {' G& C1 Y, X/ Gprintf("gongyueshu:%d\n",a);
) h/ J/ M! E- x1 @8 C& yprintf("gongbeishu:%d\n",num1*num2/a); , Y* H0 n8 ~. }, v5 h( u: O
}
^! [( B( f& j==============================================================
/ N! K7 h: I/ {- p【程序17】
( f( j3 W+ a8 F- [; t7 d$ s( w' F題目:輸入一行字符,分別統(tǒng)計出其中英文字母、空格、數(shù)字和其它字符的個數(shù)。 . s5 y- v$ r1 x
1.程序分析:利用while語句,條件為輸入的字符不為'\n'.
B! \0 }+ i9 A8 K, G" J$ F7 ~6 }6 G) l" ]$ J8 u( |
2.程序源代碼: ' d* u7 I0 a; k& d k! ~
#include "stdio.h"
# V, V3 p* |$ }: }, Lmain() ; A% u# D5 l& m% }
{char c; 0 F$ }+ d; J0 R) |4 _
int letters=0,space=0,digit=0,others=0;
" L0 `. p8 N6 j1 B j: h; Yprintf("please input some characters\n");
$ n- n5 v, {5 z v' g% @while((c=getchar())!='\n')
7 L/ h; B8 j! [) i2 x{
' D( c! i0 A# x$ d6 J3 d0 D. `" D/ Pif(c>='a'&&c<='z'||c>='A'&&c<='Z')
3 m9 X, m' p5 `; h* ]% Xletters++;
9 v' U8 B% O, \5 ^/ i' Melse if(c==' ') 4 r* d* ?- m. Z* o; M$ X, X
space++; % u1 g1 o! w) } m, W
else if(c>='0'&&c<='9') 8 B, E; X& D/ s3 y
digit++;
/ J4 e' J8 C4 d3 w/ S" r! E) ?else 1 ^. f; ~3 ^% T" P+ w
others++;
4 b) `7 S$ U# h9 z; N2 r} & z$ K& l- O. [# H: w. n
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters, 0 ]: r) N( U6 `8 I+ z0 ?
space,digit,others); 8 F, n3 `8 q" T) w: Y! d
} 3 I' t3 c, v9 A/ _) F; j9 c
============================================================== * {% a' }7 z' u3 o* F5 w
【程序18】
$ s8 ^$ s- k+ o8 k7 D: Z6 C9 K9 K$ g題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數(shù)字。例如2+22+222+2222+22222(此時
, M$ Z3 x! f C ^' y! J共有5個數(shù)相加),幾個數(shù)相加有鍵盤控制。 , w$ X( k3 P2 u" R; J
1.程序分析:關(guān)鍵是計算出每一項的值。
0 m% C7 w" N' |5 @- p+ c, o2.程序源代碼: $ r& D& K! t# a3 Q8 c4 T
main()
4 _( v( I9 h9 b( L4 m4 ^; h{ $ {; [7 Y5 w7 @
int a,n,count=1; 5 k, R2 S2 n1 f% u# u9 ~; b
long int sn=0,tn=0;
0 g. ^5 g; `6 J/ ^7 l8 v V1 oprintf("please input a and n\n"); " b4 U/ P" N4 u- q, x
scanf("%d,%d",&a,&n); 2 i0 F( `1 k( P. i: z
printf("a=%d,n=%d\n",a,n); / U; x% n# [2 C7 X/ u
while(count<=n)
1 K8 w8 t8 t9 a1 J: X/ S' s{
8 l i3 a. @: P: f7 Ltn=tn+a;
5 Y: t, ^( m% G E! f2 R2 Gsn=sn+tn;
" S/ ~" u9 Y3 g( E Ha=a*10;
& m g8 Z1 X9 u++count;
' D. k2 |: n, f1 D0 [}
/ G6 W$ ]- G4 h9 r0 l iprintf("a+aa+...=%ld\n",sn); @/ [, s( R9 s) r. r6 u) ^0 i
} 4 } A2 x# C; c# b& @
============================================================== ! N) P' f* }+ U4 C
【程序19】
( y% l' [/ j, @! t1 Y題目:一個數(shù)如果恰好等于它的因子之和,這個數(shù)就稱為“完數(shù)”。例如6=1+2+3.編程 6 C1 {6 U& N7 c* j: Y' Z
找出1000以內(nèi)的所有完數(shù)。 , ` C: L, l! f7 a
1. 程序分析:請參照程序<--上頁程序14.
6 _3 _( @- }2 o( \6 b5 Q2.程序源代碼: y1 H# C" X. J1 ]" W( j
main()
6 T. _7 d* E. C0 C/ P [{ % N& `- ]4 l3 L. z
static int k[10]; 3 o& n% I. \6 R2 d; _6 b
int i,j,n,s; + W6 `* [8 |- L* j- I2 o6 L
for(j=2;j<1000;j++)
1 B& t, ?3 q8 X2 y6 o2 H t% N{ # o8 G8 t+ d) e, M2 m
n=-1; ! n- b. b( T; t- @5 H# r
s=j;
& g: k4 H" I% V: f+ Jfor(i=1;i { 8 j- f9 O: \# c
if((j%i)==0) 0 u' C. ^2 ?- p
{ n++;
4 Q; K* K$ ?3 _6 rs=s-i; $ h) J/ L. L; E$ ^
k[n]=i; 7 z6 \4 I p2 V5 N/ U* j
}
- T& ?0 n+ t+ w; U; L+ @}
3 }2 F0 Y! r- `+ K xif(s==0)
I3 G; I! h# K: }4 B{ 9 d0 {( b9 p6 Y! l* j' z7 q
printf("%d is a wanshu",j);
2 T3 T/ y Z1 D. U& R5 \0 Rfor(i=0;i printf("%d,",k); / y9 `# K1 p( J
printf("%d\n",k[n]);
6 t* T& U$ h+ A8 X$ e- x$ b5 w} 5 \3 }# V" f* T
}
# t7 ?8 j& g1 M Z' F7 t}
* W+ S5 D' O j, G6 V$ ^, b============================================================== * X- [' [+ v0 S
【程序20】
( E* d9 v* h1 d" x. X; h題目:一球從100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
1 r; T. W5 T2 L; X" e第10次落地時,共經(jīng)過多少米?第10次反彈多高? / M7 n9 b0 W4 W4 L3 N! J3 S c( H7 E
1.程序分析:見下面注釋
; N) g" `+ x: t. y7 ^$ ?/ C, A) `2.程序源代碼: 6 b" U( C5 N5 [0 l3 ^% Z$ H
main() ) P4 o" x& C6 g! a
{
4 Z- ~2 P7 \ b8 C. }# Z) M" D0 G0 Kfloat sn=100.0,hn=sn/2;
4 [' T+ Y; R9 W1 j' \2 Jint n; 5 g5 L/ e8 d4 l* i/ s
for(n=2;n<=10;n++) 6 w6 t* r0 y' w
{
; H& G6 _" D& Z2 O" asn=sn+2*hn;/*第n次落地時共經(jīng)過的米數(shù)*/
$ E0 t$ O, N) N9 `: X* U7 ^hn=hn/2; /*第n次反跳高度*/ / ?* m; ?" n2 [% a3 y0 P
}
' V" j/ D, h/ p! x, T) G% Uprintf("the total of road is %f\n",sn); 3 s/ E5 q |& Z" R5 Z
printf("the tenth is %f meter\n",hn);
+ d2 H1 {5 K% F6 l( w} 【程序21】 題目:猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個* {" F& k% j+ l' A7 R7 s& u; g0 \
第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下+ F# Y! s( G( C: J7 Q d8 I& b& f
的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。. A8 p5 e' J1 W* u
1.程序分析:采取逆向思維的方法,從后往前推斷。+ ^# ~( A/ v; V- }& i
2.程序源代碼:
! H- N2 P5 @/ H4 x' v ^main()
. K- p8 s' v+ ^8 f# e4 j) m{
e" @# j5 c iint day,x1,x2;6 E9 ]9 y$ }" O* |* G+ }" f; }7 i" l) q/ c
day=9;
7 K! p1 F% D% a5 yx2=1;$ x1 E) |2 ~; \& a3 N
while(day>0); ]0 [3 j- Y. l4 ^- P, t
{x1=(x2+1)*2;/*第一天的桃子數(shù)是第2天桃子數(shù)加1后的2倍*/
N. y- i1 f0 u/ I0 L4 P- J6 O x2=x1;
( L1 i% ^5 [: y6 ^" j) Q day--;
! r0 |9 b# S( S8 p0 e }) [; O3 o: g7 G5 z
printf("the total is %d\n",x1);
. ?) b- T P. m2 m/ X% x}
9 q! H3 l. z' W==============================================================. L* g" X+ b1 h! ]
【程序22】1 c0 g$ @8 s2 u( l
題目:兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽簽決定
$ F( z6 j; K3 q. C I2 r 比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請編程序找出
# S2 t2 b" e5 X3 _6 | 三隊賽手的名單。 9 o; A/ Y) M/ A6 N% O; h5 S
1.程序分析:判斷素數(shù)的方法:用一個數(shù)分別去除2到sqrt(這個數(shù)),如果能被整除,
# T9 P9 F. d) h: [# r 則表明此數(shù)不是素數(shù),反之是素數(shù)。
: V* }3 W I$ W. v7 h. p2.程序源代碼:6 ?! x- [. `1 l
main()3 o6 C+ \( P0 \2 p( Q; H
{2 _# k W6 s1 o& s1 x/ U
char i,j,k;/*i是a的對手,j是b的對手,k是c的對手*/
5 G$ b' x* r( {+ E3 Pfor(i='x';i<='z';i++)
; }2 P5 J1 S! ~2 }! w for(j='x';j<='z';j++)
C/ q0 {. S* d$ S7 j {
" i' f) C( |2 t! H" f1 \, G if(i!=j)3 T4 W) W0 f, c: E
for(k='x';k<='z';k++)
1 o4 _. T1 Y" y6 n; W6 p# \; S { if(i!=k&&j!=k)1 q- y# C( J1 @( e H2 t# c% g
{ if(i!='x'&&k!='x'&&k!='z')
! X" b& n5 O- u* \ printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);% J: z0 z3 _2 r* }+ j
}- Y$ T; L$ `- r+ p7 q2 b! N' i( a9 ]
}
; G/ [1 O$ `/ r* z# O }
/ u7 A' t* E- ]& `0 U* E' }2 y}9 Z2 d) X% ?2 H& K+ b6 L" A; I
==============================================================
2 U. u$ r9 T1 |【程序23】
+ y/ a. N1 B0 N3 f, l題目:打印出如下圖案(菱形) *8 n$ [# K) o5 g: l4 ?' C$ e
***% J& T% Y8 B4 X7 ]) c) [9 C
******
" x+ k* U9 b$ u. d& C$ Q4 ^********, U( Z6 _+ I" B8 w! ]% [
******/ d$ ?: L3 S- Q1 g% K J. c
***
' u6 H, y9 w( |*# A$ I1 L3 H8 G1 w! G; J
1.程序分析:先把圖形分成兩部分來看待,前四行一個規(guī)律,后三行一個規(guī)律,利用雙重
) M4 Q; x8 N: v( ?3 B0 m$ k for循環(huán),第一層控制行,第二層控制列。
4 M( a. w9 V( I8 @" I2.程序源代碼:
# c, G0 H0 E8 l( f! _" Imain()
# Z! I' D/ L: |0 G{
( T+ x1 s) `, t( I hint i,j,k;2 ]/ R) V! }/ n) u
for(i=0;i<=3;i++)
7 u# G: ^' ~( _. |. F" s {
, X3 E) ]. V: B' n for(j=0;j<=2-i;j++)/ V+ k ]& w* C: u& n
printf(" ");
* G5 R$ C" E9 h7 T for(k=0;k<=2*i;k++)- j2 ^& B8 I8 H# ^! `
printf("*");5 b/ t! M' Q& ~, p7 Q4 }
printf("\n");
?0 H! q C' J; ~ }
0 A7 c3 o ~0 T$ H/ l/ Xfor(i=0;i<=2;i++)
, z7 p) W7 r( w7 u {
' R* K, J3 j5 \ `' i for(j=0;j<=i;j++)
! g( X" H4 w" d0 b( Y; S0 g; e printf(" ");
( r i- ?1 z+ c for(k=0;k<=4-2*i;k++)
9 K) J ~; b! R printf("*");
$ s) v7 b+ k/ D, N0 s printf("\n");: }: b$ h9 }3 t9 d9 b# K+ J X" K
}
+ O: w& P8 k3 q1 l9 F}
, g9 V: x, p/ [# e0 t3 T6 e$ `==============================================================) N, X/ Z/ q+ P; ?$ i+ ^
【程序24】 . S+ j% b$ M' z* L
題目:有一分數(shù)序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數(shù)列的前20項之和。
* \4 c1 O t8 ` \8 I1 D; {/ M1.程序分析:請抓住分子與分母的變化規(guī)律。 " {: S; m) @$ N# b
2.程序源代碼:
+ y# r' V1 q9 F; B3 nmain()8 f8 S" t5 P8 g! ]# ^/ \- w- c* E
{
0 j5 ?& {* ~ U: u* ?6 D( W) oint n,t,number=20;
+ M# D' u$ k0 \float a=2,b=1,s=0;
/ m: p g3 U- Ffor(n=1;n<=number;n++)9 N' ^9 w( @/ F8 |7 l6 U
{
! d8 e q; g9 M# Q+ m s=s+a/b;
, \. l3 ?! e, T# { t=a;a=a+b;b=t;/*這部分是程序的關(guān)鍵,請讀者猜猜t的作用*/
3 Z' ~" G' W) F# m% K; D1 a' d }/ \: B0 \' ~+ @0 g. {* q* k" r
printf("sum is %9.6f\n",s);" A) X. d- M& p3 Q; f: l" U( [
}9 \( f9 C; E; E4 ?' a
==============================================================
5 Z- R3 W- s. X, m, t3 r【程序25】 嵌入式學(xué)習企鵝要妖氣嗚嗚吧久零就要
3 Y: f B+ n2 {9 R9 n' v題目:求1+2!+3!+...+20!的和
6 I: `' A. s, q( ]5 l1.程序分析:此程序只是把累加變成了累乘。
/ i, k4 o& P; x0 J2.程序源代碼:
- L' c! \; A6 u+ z3 I1 Lmain()6 K" u; O, Z6 S% Z% }3 i
{
0 {1 T, M* t. Z$ i) O# y/ K1 q) ofloat n,s=0,t=1;
) ^3 ~& H8 t: D. z6 k g' \3 gfor(n=1;n<=20;n++)
% D( U- a. C+ y! ]2 [ {0 l3 M4 H) N6 O
t*=n;/ h; l2 z0 k7 K* {0 V% |
s+=t;
7 Q: {6 h( Z/ o }
) C6 Z! O0 U8 ~( x3 F9 u7 |7 wprintf("1+2!+3!...+20!=%e\n",s);1 m( b$ \9 L' o% M
}
5 o% u& x4 K+ F* C: S+ x. ]==============================================================
: G0 @9 j) {7 K" R- y【程序26】
! g7 y7 I$ j' Z1 D7 O題目:利用遞歸方法求5!。
& u# E1 p( o' j1 z( ^5 V P1.程序分析:遞歸公式:fn=fn_1*4!
W6 B- z3 v0 ]$ K9 X3 E2.程序源代碼:' A! x$ L5 T7 `! M0 e7 n5 g
#include "stdio.h"9 M# {9 r! E' o b3 u* n$ f4 }+ w
main()
5 A C$ m1 O* S" s4 J& M! g# f{
# X' T/ @8 i2 K, U: Oint i;
5 F; ^" b0 L% v, d0 ^5 Lint fact();/ [' `5 ]4 {; v# W5 K5 M
for(i=0;i<5;i++)- e/ h9 [$ n" i, P) Q. g9 R/ r
printf("\40:%d!=%d\n",i,fact(i));4 G$ U$ N- L+ ?* C* P! I
}
* Y! A! A0 x5 M5 Uint fact(j)7 ~5 O( N$ w8 k9 x* n
int j;' r& q- v8 } |2 Y
{
l! Y8 e7 z4 l/ B$ l0 kint sum;
2 A: v* g+ b* e, Q2 j" i. `& e* Wif(j==0)
8 k+ q* k0 r% q% j4 V, J5 n sum=1;# M' H- ? e, t
else0 }3 ]- Q+ |, w: d
sum=j*fact(j-1);
: N1 `, Q9 b3 lreturn sum;
7 y7 B% t- N& c$ l! }* r; b! d} ~) @) ~8 z8 X% k/ r+ j/ |7 d& N
============================================================== 3 d! ~' z% m! d; N$ x' A% J" G
|