【程序16】 7 i$ `, J$ K7 Y% k6 c" l
題目:輸入兩個正整數(shù)m和n,求其最大公約數(shù)和最小公倍數(shù)。 ) X( E2 b2 _, q9 g
) Y# ~* u2 K* ~. ?
% J! m( G/ s+ Y B4 K+ V; G. b0 W' d/ g* Z
作者: zhlei81 2005-1-22 11:30 回復此發(fā)言 5 O+ O8 Y# n4 ?$ o) y& C0 I
0 F( s& S% }2 |9 q) G-------------------------------------------------------------------------------- , V, U- w+ A9 Y# o; N
# z" D. X, m; Y$ r# t4 回復:經典C源程序100例 , r2 \. u0 y6 ^2 v. x5 j" A
1.程序分析:利用輾除法。 % ?! J( _( k4 u+ p; H& U( ~7 e
" J3 e6 [5 E$ u0 j* X9 Q4 U; J0 r5 i
2.程序源代碼: + U9 H( |. W F" O! m8 f
main() ( y9 C& u n0 z' W( e5 z* q
{
4 x8 I5 z9 c0 Gint a,b,num1,num2,temp;
% I* `0 t( u+ K1 Pprintf("please input two numbers:\n"); - z! |: M0 n9 e" D: p
scanf("%d,%d",&num1,&num2);
- b$ H, B# N5 m: D. Mif(num1 { temp=num1; 6 M, n0 K9 [$ \; Z: Y( X5 R6 p
num1=num2; ) c* L- x! X6 a$ c
num2=temp;
& @9 o% o5 ^; l% |" \1 L} 7 J" [1 P+ I+ U i
a=num1;b=num2;
- w+ I; j" V- H3 Bwhile(b!=0)/*利用輾除法,直到b為0為止*/
9 _6 [8 c# g& |5 g{
* P& F* [* K( c7 v& U7 N/ vtemp=a%b; - m( I# ]' }/ N! o" B5 u
a=b;
% }; V- _) b" n5 q" d8 n" _9 ib=temp;
* w8 _4 ^, { o} , P: C& q* W. j2 L4 H/ ~
printf("gongyueshu:%d\n",a);
' [/ ?; v! z4 P4 H a: q6 cprintf("gongbeishu:%d\n",num1*num2/a); & P2 S4 X% z+ ?
}
* g4 ]$ i9 s- V& f1 u5 f. N==============================================================
% B) b, R9 A1 b' K9 r" I7 S【程序17】 & }4 M0 o5 s4 c6 K- |; n0 ?
題目:輸入一行字符,分別統(tǒng)計出其中英文字母、空格、數(shù)字和其它字符的個數(shù)。
- d- k, L, h! @$ `1.程序分析:利用while語句,條件為輸入的字符不為'\n'. ! R; C2 O, I9 o& W5 x
3 b4 u! y) \4 [2.程序源代碼: % v7 B8 w) e$ H( q: o
#include "stdio.h"
' H5 n- o7 L* U( a9 u3 Vmain()
6 D3 {! S6 K2 l& t" `0 p, ]/ p; i{char c;
$ z9 o/ ~8 G! [4 N3 b, Y% q. Kint letters=0,space=0,digit=0,others=0;
4 d5 i$ H) {% y B+ aprintf("please input some characters\n");
& _+ a3 G. C3 O/ F8 Mwhile((c=getchar())!='\n') 1 x+ `0 y9 b R$ c0 D
{ 6 g) l( m8 _1 A( K K6 `
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
+ I7 F$ I( j2 t5 d5 |( Wletters++;
6 ^1 n$ c. U% Pelse if(c==' ') + n {; i! n, [
space++;
' r- e8 w5 H% _9 t0 T# Velse if(c>='0'&&c<='9')
1 [3 s; c o$ n( D8 N% E7 o) j/ Rdigit++;
, h( C4 o/ V7 D7 o2 B+ yelse 8 z! j! b2 F+ } R7 `: y5 }4 M* [
others++;
, r6 d, k) K# G& L4 d% ~} % I0 _) Q, R, {8 y" |8 C% `
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters, - J) P$ v5 b f9 c- n1 c
space,digit,others);
/ N$ l s; y5 l1 X} 1 z p. c: S* c4 n7 p' Y9 b! J- l: \9 I
============================================================== / F$ f1 L4 L% a& m# g% b7 a
【程序18】
* p3 X( }/ ?5 B+ }題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數(shù)字。例如2+22+222+2222+22222(此時 3 A! e `9 w4 S
共有5個數(shù)相加),幾個數(shù)相加有鍵盤控制。
+ G8 J; z' {. t5 P$ K: e1.程序分析:關鍵是計算出每一項的值。
, A% c- l: Y( X, o. p6 z2.程序源代碼: 4 ^- J$ K! c2 B. G
main() / e7 @4 q% n/ @% j
{ " |: F' T8 v! S8 G4 ^7 Q
int a,n,count=1;
# u% V2 O, w# v% elong int sn=0,tn=0; : f5 r2 K7 G2 T
printf("please input a and n\n");
6 G; x& t; D- ~scanf("%d,%d",&a,&n); 9 D; v) x, B7 O( e9 q, D
printf("a=%d,n=%d\n",a,n);
5 V0 g! {5 V. C* `' X& |3 S6 E- Ewhile(count<=n)
$ v% A) R, G: p; O6 w# i; B! |: f{
$ | C( J( R+ o+ j% v$ l* a1 Ntn=tn+a; ( ?; @- k4 U# n0 l! c
sn=sn+tn; ! F: ]2 I* H U9 R, ~. h
a=a*10;
3 H' M# H# ^( `& p; k++count;
4 s, o+ C% L3 ^" t5 ?( a6 H}
$ s& o* t9 i& V+ }printf("a+aa+...=%ld\n",sn);
/ n& a; j! L0 R6 A4 ?5 E" F}
$ I* c; K. m. Z) S' O& J============================================================== % i/ p' N0 z+ J2 G
【程序19】
$ T/ e3 u9 y+ y t8 x, {) D0 j& k! `題目:一個數(shù)如果恰好等于它的因子之和,這個數(shù)就稱為“完數(shù)”。例如6=1+2+3.編程
- h/ i- S) V6 {找出1000以內的所有完數(shù)。
8 N5 o3 @7 Q0 X- X# h7 o' x i, r1. 程序分析:請參照程序<--上頁程序14.
2 n& c# a) \& ~. y5 ^8 B/ T: U2.程序源代碼:
7 Y4 c5 t" g. J: A& @main()
$ a8 B" y4 I* C* f, S9 p{ 1 X; m5 V a; P- @) h. T
static int k[10];
Y* ^4 Q. M y7 q4 Dint i,j,n,s; 7 s" Y0 m+ x8 N- W
for(j=2;j<1000;j++)
( _/ }( O6 @* Y2 |! p) `{
4 k+ @0 x7 Q/ u6 Tn=-1;
# d Z2 M2 u4 R8 j7 v8 O5 W; xs=j;
. |, h- u) B4 kfor(i=1;i {
4 O1 _4 a) p4 a& mif((j%i)==0) ) J7 e( Y- ~/ A4 f# S& b
{ n++; 5 a3 i" M5 X% u
s=s-i;
) ~6 b' i/ x6 `( }k[n]=i;
. m" Q/ y- Q% {}
H8 E3 t# h r; {- A}
$ R x4 e! v" z9 ^$ Fif(s==0)
0 W# z4 ~ ?5 O% {{ . S% y/ G: ^: f0 ^% q% h
printf("%d is a wanshu",j);
1 @ W G7 x y; x1 zfor(i=0;i printf("%d,",k);
8 O! Q; |, q, T$ \0 Bprintf("%d\n",k[n]);
+ x0 L/ G5 [# {/ @6 R N} ( J7 b% ]' c2 C, l0 W' K+ `$ Q. V
} . z) N+ P! p& F6 t4 @
} . D4 i& D' @( K/ E) g
============================================================== 6 ?4 l# S3 |* r" H, g" J' T
【程序20】 ' j* q) C' y2 O- y
題目:一球從100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 0 M/ ^, T3 r6 r! F" I" G
第10次落地時,共經過多少米?第10次反彈多高?
6 `9 t2 k$ U Z; P; _0 Q1.程序分析:見下面注釋 . M: f8 u6 e$ _0 C' f
2.程序源代碼: * f- U P1 X u8 w& h9 @
main() " F8 x k& ^3 T) o8 W
{
* t7 \) B+ a T3 p" @* Jfloat sn=100.0,hn=sn/2; + l/ Z6 Q* ?% h) A3 l8 d
int n; ' m L' W7 h( Y7 I8 E$ Z3 X
for(n=2;n<=10;n++)
3 A. ^* q& |8 O. C, E6 x{ * O. ]0 b* l- y) R
sn=sn+2*hn;/*第n次落地時共經過的米數(shù)*/ 4 d+ @% g. w& P: O( J9 [: u1 @
hn=hn/2; /*第n次反跳高度*/ & R! w( e1 H C V$ X% d0 w# @
} 2 g1 p: d2 E, t# \' W. o
printf("the total of road is %f\n",sn);
; n# R0 c1 P: Y- H) E4 zprintf("the tenth is %f meter\n",hn); 6 A+ O1 B( F6 J' X9 y
} 【程序21】 題目:猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個2 [4 \ V- x3 A$ R
第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下. P+ ~* F l- h! M
的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。' L# l/ h+ i4 N. D: f# u
1.程序分析:采取逆向思維的方法,從后往前推斷。 }( {- g, P3 S* c- y, H8 R
2.程序源代碼:
* j$ a4 }$ R/ w( M' lmain() K: ?4 |0 c4 M4 }9 Y; J6 H9 S
{
0 p' v c* M) o% {% X6 ]) I# C- Zint day,x1,x2;$ }' A, l0 f e$ t. q
day=9;
$ `, X" B7 u, F, L" Vx2=1;9 I8 g% ~2 c3 b5 {9 R! G) ~- J+ A
while(day>0)
: |' [ G- L) X3 i {x1=(x2+1)*2;/*第一天的桃子數(shù)是第2天桃子數(shù)加1后的2倍*/7 \0 Y, _0 e* H% A' A7 Q& [
x2=x1;
6 a0 ~% N { ?+ D) Y; w, U day--;
/ c# a( g& N* G% h }6 i# ^1 q$ n7 D: {- t& x t
printf("the total is %d\n",x1);
6 b6 v, [: _& e; I/ c9 X}. y# Z) E l: K3 _' ^. ^ i- x
==============================================================
+ e( J6 W; t# j- r* [【程序22】
5 G" F3 _- _. a0 G" v* z9 H題目:兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽簽決定( U% }6 s$ n1 R) t- i! ~8 R& ]
比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請編程序找出
+ H- {0 z( J9 _ 三隊賽手的名單。 8 ^2 r( F/ c/ P8 p( V# Q4 t* J
1.程序分析:判斷素數(shù)的方法:用一個數(shù)分別去除2到sqrt(這個數(shù)),如果能被整除,* _, `$ [% s: S3 j8 D' D6 \9 b
則表明此數(shù)不是素數(shù),反之是素數(shù)。
# t' Z/ J% L/ i; @2 W2.程序源代碼:
: n3 ^# x+ N7 J6 q# }" ]3 ymain()
9 a: O9 h. |7 v. G& f; B{9 i8 S1 n: K2 ^1 d1 O* W
char i,j,k;/*i是a的對手,j是b的對手,k是c的對手*/, Q3 }5 b- b/ |
for(i='x';i<='z';i++); B% r1 t7 q* ^
for(j='x';j<='z';j++)
* { Z9 f9 Q" a/ C5 p/ f; V4 F5 e {+ R0 U y1 n4 K
if(i!=j)4 ~% O3 x N' K M8 P# H* _
for(k='x';k<='z';k++)
9 x; C4 i; Q! Q4 y6 I% y# k { if(i!=k&&j!=k)
. E6 G2 b/ g# A. R. a0 Y { if(i!='x'&&k!='x'&&k!='z')
5 Y$ J, t; d) u$ h3 { printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);& m2 y6 j) ^7 t4 g' U
}9 E' x% k/ B2 G0 h
}# \3 R* I, @2 R' G
}7 m; C' I* p% N2 X9 h4 H# B: H
}
* w( ]6 a; l3 o4 K==============================================================5 T7 W' z. p: C8 `
【程序23】
4 B! B5 l( |, E! K8 O2 K題目:打印出如下圖案(菱形) *) j. w& J7 R- T: D8 A: U/ S; M
***7 L# N' k2 {6 V6 I. }) F
******
" w/ E4 s- H) F% @********, {. [) E" _# E7 S7 K
******
/ Q ]; T {" w5 Q***
& t1 S* b( z. ^1 Y. I0 a( F$ ?*. ~8 \" U' K; W9 v* l
1.程序分析:先把圖形分成兩部分來看待,前四行一個規(guī)律,后三行一個規(guī)律,利用雙重
/ Q0 v/ X( z! r for循環(huán),第一層控制行,第二層控制列。 7 p1 x" t/ S5 A
2.程序源代碼:
9 @$ q' }! a) |! d' J' ]: H3 Smain()
4 _0 h! V% Z# o& h, z, A, {6 u{
4 [3 j* J* i( M7 g( Tint i,j,k;
; V% ~* N, P/ afor(i=0;i<=3;i++)
6 A% ~' k: P6 X2 D {( B# D; V, {# d: q
for(j=0;j<=2-i;j++), z/ M1 O: f* K- z4 K
printf(" ");
# X0 l- r' c$ ` B7 \5 [7 l for(k=0;k<=2*i;k++)
, c9 U* J9 {4 u6 k4 N& Q; N printf("*");
$ F" B) T5 Y0 j1 J; L3 o printf("\n");
, t1 @2 u( c0 Q) f7 u E+ o. R9 b }
, B! @! F0 s; a% u" i2 }, h3 P Z+ afor(i=0;i<=2;i++)0 D8 k4 ~" f9 L( l. o
{6 K- G% T; |, u U0 a
for(j=0;j<=i;j++)! t; C& {& L; _$ N b+ o1 ]: B
printf(" "); \/ Y; x. e$ S
for(k=0;k<=4-2*i;k++)
3 P' M/ f! A/ A% z) j+ U7 m# \ printf("*");
g. z9 W$ B8 D! L u6 N printf("\n");
( z) p) H+ N7 B* e* o }
( a7 U) v- e# Z/ K% N}
$ y/ M3 l, C0 m s6 Z% {==============================================================6 e- W, _7 G0 h5 Y0 h+ \ L
【程序24】
. j$ Z4 I$ d1 [# a/ o2 Y0 | ?2 W題目:有一分數(shù)序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數(shù)列的前20項之和。
3 a8 v9 L; y+ Q* N2 ^/ t' r8 |1.程序分析:請抓住分子與分母的變化規(guī)律。
- m+ _& i4 {! P8 a2.程序源代碼:3 p$ r: z/ c% h3 ~
main()
! J% Z( Z5 d) q3 Q. S{
1 Y: r4 y- o3 R9 k6 w; @ |int n,t,number=20;
3 R o- m/ K$ G4 R- O; C# I1 H3 Nfloat a=2,b=1,s=0;$ A) c% I1 |7 {
for(n=1;n<=number;n++)7 Z/ U7 N) U) A [! }% \: l
{9 \8 g* o( }* u, _$ R* p* p) o! |
s=s+a/b;
3 e3 M' \. _1 g2 }* t2 W; ^* Q; x1 E! u) s t=a;a=a+b;b=t;/*這部分是程序的關鍵,請讀者猜猜t的作用*/
$ m+ g1 E4 c: {$ a* F0 |7 b& W }2 B( _1 F3 Q& F: Q6 R& m7 b: [
printf("sum is %9.6f\n",s);) f5 N0 m" h: C/ a
}
' x; W: g- j# L( _==============================================================+ H: |8 _1 y4 i1 _* S
【程序25】 嵌入式學習企鵝要妖氣嗚嗚吧久零就要' t8 X4 b6 l! C4 X$ ]7 ?
題目:求1+2!+3!+...+20!的和3 b9 |! Z9 o2 ?9 R
1.程序分析:此程序只是把累加變成了累乘。
7 s: ]9 A8 n) l5 P' }2 D% R# D" Y$ f2.程序源代碼:
% w" e; g P/ _; `9 p# q( ^6 `* Cmain()
4 ^) O( V" `, D# e{7 E0 {1 ^5 ?* @ R
float n,s=0,t=1;$ q- X* B4 {! Z f. I1 n( J3 k
for(n=1;n<=20;n++)
5 v: z" f$ s" k {/ J* e8 j4 G) D6 x$ A
t*=n;5 j6 L+ u6 @- K" y. u5 i
s+=t;
( s# t1 j5 o; y) g) u6 \. U* E& D9 r }5 _- n5 f" K7 e) f. _
printf("1+2!+3!...+20!=%e\n",s);
6 y3 A( Q, E. J* S8 B/ N3 s}
3 d1 u1 ^5 w* l0 y* d6 h==============================================================
! D2 d: {$ o2 b* V【程序26】
! K- \# q; ? B/ C題目:利用遞歸方法求5!。, g0 _' S7 ^ j5 J _7 @
1.程序分析:遞歸公式:fn=fn_1*4!4 s6 ^8 ^$ s( B) U% q
2.程序源代碼:& i# m5 p; I/ z' J- ]; W0 `+ j: D
#include "stdio.h"
1 D- c+ G' P( zmain()
, S8 B, |/ E9 {' n2 F1 r{
6 s% B0 h) J" h9 E+ `int i;7 g4 v3 x* W" F
int fact();
' H% j% I8 E; p7 H' dfor(i=0;i<5;i++)) |7 G6 q% y& n6 N& I- H% u( c( P
printf("\40:%d!=%d\n",i,fact(i));4 I% Z B+ @; h' t, |* ~
}/ ?7 s4 E/ K' m; V' @1 ~* b4 D
int fact(j)
" e$ }& Z9 t( c* |: U( ?6 v9 x" y9 F" gint j;* c2 n: M+ A+ C9 M2 z6 P% g
{5 ^6 v: ]6 s4 N! X& O B
int sum;3 j0 o( k. I! c- C6 O
if(j==0)
# J, F9 L* g X3 f. _2 |: K sum=1;5 \. y5 k) I* V: @5 a/ G3 t
else
W7 K6 t8 v9 j1 x9 t7 k! j sum=j*fact(j-1);
1 p1 j7 u* L- {6 K0 U4 ]return sum;
( B8 R% C3 N9 p; M Y}
- u2 ~: U% P# H8 _+ D0 J2 F. ?============================================================== 6 u3 |1 }9 s, X+ P7 E- z& G- |
|