EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
【程序16】
, S6 f, B9 `9 ]: H4 G6 C题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 + t |& D+ T1 Q9 A
1 @2 }2 c( G; {! C8 F
% r1 T9 W& m/ k+ f: \4 k3 D; G: J% _- T8 J
作者: zhlei81 2005-1-22 11:30 回复此发言
, Y6 O f4 L n' {; i& w; n Y& `" U" I
-------------------------------------------------------------------------------- 9 k, n# i% [9 a" t1 _# q
, B* _( W3 k, }% H0 ^/ x
4 回复:经典C源程序100例 4 Z" w& @: [$ G2 z
1.程序分析:利用辗除法。 ; u7 K7 G6 @3 z; ]5 w/ q
' p" x4 W# q1 L- r& \% g/ u8 D2.程序源代码: ( }* j" a% h8 x
main() 6 e% \! {' n8 o* @ N U y4 w. _
{
; j# U7 M+ K* P- L3 nint a,b,num1,num2,temp; , M0 T0 D e: F; B8 a, X* j
printf("please input two numbers:\n");
( ?5 l( V, ^, O9 Escanf("%d,%d",&num1,&num2);
) c! b a" X4 f7 ?3 O; }4 q- oif(num1 { temp=num1;
6 Z8 J8 {- z! [" c. Z$ lnum1=num2; " t* }5 J1 v: N! i! o9 T0 O3 S
num2=temp;
, \! G' n: W/ N' x}
# D7 B- e' A" v- S! ia=num1;b=num2;
- b( t" K4 T0 P; r# zwhile(b!=0)/*利用辗除法,直到b为0为止*/
) [5 g7 q" x0 d. J% W% G- t{
2 u" E$ j7 `" M |0 k6 W gtemp=a%b; ' w4 ]! a1 |6 e4 A# t' \4 {
a=b; 4 I! h" Z' y c
b=temp;
3 B/ U! V! i* J+ P} - t3 n3 C5 ^9 M) f# p+ W6 H
printf("gongyueshu:%d\n",a); * u) o# ~& G+ m- T8 J6 s/ B! S1 W
printf("gongbeishu:%d\n",num1*num2/a); + I( ~ w" M# _- A# E$ \8 Q
}
; `, B. }) }$ _2 r$ \# m============================================================== 3 p& B/ ]. O y1 M
【程序17】 ! d u' J' _% [ o; Z4 w& y+ v3 D
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
4 s1 I% e' L0 S, L+ [7 \3 C1.程序分析:利用while语句,条件为输入的字符不为'\n'. . @$ t3 }; {" i4 C, k: D5 e
0 R9 S" B+ ^/ \; o* o7 |, B! p- Q2.程序源代码: - ]9 b; [% Z8 k9 L
#include "stdio.h"
@/ j9 I" y, V1 l( z2 L" D/ L4 Xmain()
/ g: N$ c* N4 K7 `9 |{char c;
5 }$ c- J, o% x' F& Jint letters=0,space=0,digit=0,others=0; / X; z1 m' M- X$ m8 i( i- ~
printf("please input some characters\n"); $ R6 ^2 f1 G1 |0 P4 T
while((c=getchar())!='\n') ! B8 [; U# m& ^ ^6 r( \
{ * k, a. p9 ~. Z7 Y
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
( ?3 l! b7 d, Xletters++;
9 {8 R8 X8 n: [4 O/ kelse if(c==' ') ! D- n3 a" F. ~0 L. ~; d I
space++; ( a, C9 G& a7 o$ O$ u9 J+ f
else if(c>='0'&&c<='9') ; _. G, z- c, o8 g7 D; ~
digit++; ; x5 V1 r `& I5 X
else
7 x; [- u' S! W0 |6 i' D/ @others++; 0 d, @1 |* ~: z/ Q4 _4 `0 |
} 3 {, x4 A- j0 y) s0 V/ Q# e
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters, - _; z: U2 B m; W. z$ h" ?
space,digit,others);
% \( {7 R: h6 Y+ ]+ l1 q} " O1 N/ F6 U. u" ^' b, A
============================================================== ! N2 @ {+ c# l! h
【程序18】
6 u6 E7 Q+ F2 g7 M5 K, [% g题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时 " h1 c$ }. |/ `* M+ w) v8 C
共有5个数相加),几个数相加有键盘控制。 & i6 i( r+ Y0 i
1.程序分析:关键是计算出每一项的值。
9 E# h* {% K/ k- O2.程序源代码:
. F1 A( H5 Z$ ^# r Hmain() ], l4 p+ J, I5 q' D; `4 |/ {
{
$ x! D: G& B( V- } h/ oint a,n,count=1;
* p/ J: d* E+ D) d0 S" v3 D hlong int sn=0,tn=0;
& x f0 B* l* }7 }' [printf("please input a and n\n"); + {% u0 q# s% B2 z/ m9 o- m+ [4 h" a
scanf("%d,%d",&a,&n); 3 u$ Q' {; Q$ _
printf("a=%d,n=%d\n",a,n); - G6 M4 D9 H1 G, x/ l( |! z
while(count<=n) ) B, H3 V; ^3 `2 y( _5 }* J/ N
{
& y7 D3 }* y" Q6 `5 p- ftn=tn+a;
' E4 [6 E2 a( d& ?) |sn=sn+tn; 0 d* {$ C: j3 `* W& W
a=a*10; 6 s* s# s. {) s; W
++count;
1 h- t7 v0 P1 o8 n} 2 i( ^1 V. W9 t8 K, G& U
printf("a+aa+...=%ld\n",sn); 4 q4 U9 h' @/ N* n e
}
& a; F% W6 C/ [0 D: G( V8 \============================================================== " Z Z% g4 \+ O, u3 W; h, o
【程序19】 ! v$ S8 g- z9 b. s
题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程 ) N( _3 ` u- k$ ~6 b$ x0 c0 h
找出1000以内的所有完数。 U6 y! W: I {2 r# @
1. 程序分析:请参照程序<--上页程序14.
$ A q* i( u+ F# Y1 E1 c2.程序源代码:
8 A& h; l# K9 w/ x% D& p- ~! Fmain() : V& g! x, l# f8 K
{ 6 h3 L9 l; y. \' M: A( v6 C
static int k[10];
O2 H o& H1 oint i,j,n,s; ) q4 ^" |! u& ~3 w: W2 K
for(j=2;j<1000;j++) 0 a# @' a3 K7 d, I5 V$ _9 t
{
- ~4 q& ]0 x* T$ Rn=-1;
5 A ~7 E% t( rs=j; . z* P: u5 d6 m
for(i=1;i { : c: H# f* y2 L& W
if((j%i)==0) 8 Z( E0 n% Z0 z# i/ X8 G# w- i' o
{ n++; & Q- L' o; \- J. V
s=s-i;
1 d5 l5 U/ g9 ^$ S, W. |3 c7 Mk[n]=i;
: \ l5 R3 y# s% G, Y8 e} 6 P$ x7 j+ P" s- Q6 T8 c7 g( M
} - F" W3 q3 {0 B) f% r, E# w
if(s==0)
, |7 x, ]# B% Q1 D{
- C6 o4 s5 J: lprintf("%d is a wanshu",j);
: u* {. D; S7 r5 q7 vfor(i=0;i printf("%d,",k); & l# u; P6 W7 y- T( \& p1 T
printf("%d\n",k[n]);
+ D3 i) ~! V4 j" [/ o3 ]* _; x; Q+ |} ( N4 u$ n' M7 Z; G. L- @5 }9 f' m
} 1 W7 h i3 z0 U- z9 M
}
5 t- l( i( t+ p6 I6 Q2 }9 d==============================================================
5 k }" x* c9 v `: M& k【程序20】 H5 G7 G3 |* {/ ?8 g6 `
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 . t9 f4 o1 h) T, a# v
第10次落地时,共经过多少米?第10次反弹多高? ; m+ v& K+ k* F1 @5 n0 m
1.程序分析:见下面注释 6 v" i) f% _3 N' u: |) G! t% |# I
2.程序源代码: $ P/ E( m u( Q$ l$ W* d3 a
main() 6 g5 p1 f3 v. _5 X
{ 2 t3 i t/ O6 v
float sn=100.0,hn=sn/2; ; B" s2 X% f7 y1 ^# [- P
int n;
1 ~, i! A- t3 @for(n=2;n<=10;n++)
9 g8 J! Q* L7 z5 H; I{
! V! {; d8 h( H7 }8 k2 a. qsn=sn+2*hn;/*第n次落地时共经过的米数*/
, ^ l3 Y& A8 k* ]hn=hn/2; /*第n次反跳高度*/ 9 N. T+ V. S8 m9 S% j3 d9 t
}
! Z* O) d6 t4 e" H9 Rprintf("the total of road is %f\n",sn); 5 P0 ~2 T; R4 X, J! L! |3 S
printf("the tenth is %f meter\n",hn);
/ Q2 O1 _3 m1 O0 Z! T} 【程序21】 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个3 l! x" o( U: T8 F: S& b8 B- }
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下- m! @4 w7 j2 a; _$ n3 \
的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。. ?: i+ Z7 G0 |, E7 j" A/ u
1.程序分析:采取逆向思维的方法,从后往前推断。
% M+ L; o% {. `: P2.程序源代码:1 B* C" e, s3 U K0 j" z) I
main()
/ n9 H1 H0 A2 q# Z8 t{
$ B: \+ e, X5 {7 m" d1 jint day,x1,x2;
i( ?* B5 \0 Y9 Y, W2 ]day=9;5 n8 A0 |$ |8 I. G9 u9 ]
x2=1;$ u' J5 C* {& E' `- Z
while(day>0)7 i# y4 O; F+ Z7 H" f
{x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/
5 I) m: }2 n6 k4 v; p x2=x1;3 h4 O# b7 O( ^2 t& x: `& ~9 B4 G
day--;8 o( B5 [8 @. K& m
}
: \3 `& r/ u/ \4 _2 |6 h+ @printf("the total is %d\n",x1);6 G! Q- E& i: S5 a
}
; L0 X8 o) u1 B0 o. W==============================================================, r; @5 z( L+ d8 s( [, F @4 X0 J
【程序22】& m. B4 t/ G% V. q& J3 G/ `
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定
! P, {9 P, b1 X) }4 Q# X- s2 D( w 比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出/ ]* X6 i _; R0 ]; [ s
三队赛手的名单。 ) n7 }" ]0 c- H0 ?. Y2 ^7 q
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
1 C+ a( A% }. n0 j! v) B4 n" R 则表明此数不是素数,反之是素数。
" a+ ^. C ]' J* ~; |2 i3 @5 |0 {2.程序源代码:: r" s9 A' _ I6 j$ e' c3 b
main()
) i+ T0 _; J4 n$ d2 q: R{
# g5 q+ b: [. q7 f8 q; schar i,j,k;/*i是a的对手,j是b的对手,k是c的对手*/7 N( E" t7 s/ T% s. b
for(i='x';i<='z';i++)% o( }2 P) x1 q2 i; J. z
for(j='x';j<='z';j++)
: u: {1 r4 n. u m2 h {- U: k: G* D. J7 ~5 H# W \! q
if(i!=j)
, T/ p; y, q3 x' M1 z! X* V6 N for(k='x';k<='z';k++)
$ z. I" D. m# M3 Z { if(i!=k&&j!=k)
/ k8 _/ f7 E8 E, q { if(i!='x'&&k!='x'&&k!='z')
' c" R7 V$ h7 c$ ?. l printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);, ^' V" G" |: f: ?
}
8 [. Z0 m- X! d }& G; L) _5 [3 t( S: F* ~4 m
}
+ k6 k* V0 Q% R ?& x5 s! d}
$ u2 T) x6 F5 \4 Y& T/ K==============================================================7 s2 p) i! Y6 y" {3 N7 F/ ]4 i
【程序23】 / s+ M, @- M8 s9 Z' W
题目:打印出如下图案(菱形) * ( B. l5 g8 q. x% h6 g7 K! T2 H! ?7 u, L
*** : N4 P0 q0 Z( r! }9 p
******
+ a: O! J7 h' [2 J% i$ j******** 3 B# U: B7 t( n% J; u; U$ t3 v7 F3 [
****** 3 r& h4 |$ @% d- V, o
***
' ?9 b" M8 `7 m8 v: p* + i7 p8 O+ ~" Z% ~( h( x
1. 程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重
2 t% q$ A1 e% ]9 _. r4 I; V* F& `1 q6 R2 v for 循环,第一层控制行,第二层控制列。
5 |3 Q5 f7 z* a2. 程序源代码:' O# M$ m5 w# G) ?( H
main()
9 a3 E$ B. m' x{ ' E7 Q L; v4 z R' }
int i,j,k; & }8 o0 m, H- {# h6 r& {+ ^
for(i=0;i<=3;i++) ) o) K, W6 e$ P U# P3 v
{ ) W& f& e, M* \% s9 c% Q. y F
for(j=0;j<=2-i;j++)
* o4 V# Q; L/ w8 z printf(" ");
9 Y. N8 ?: f5 l" }, N2 ] for(k=0;k<=2*i;k++) 2 D5 X( e. _8 I3 H* |/ G. g
printf("*");
! H, h! k" Y, a printf("\n");
) z: X, N5 j; V! d/ B1 {- h3 K" f }
% d$ j+ O, }7 X. M1 `1 Nfor(i=0;i<=2;i++)
& W- _0 U, ^9 Y0 B- ] {
8 r7 c s$ R2 g/ z: t; g for(j=0;j<=i;j++) $ Z0 v# @+ ~; P$ t6 x( S
printf(" "); 8 g5 G: q* s9 y: c5 b
for(k=0;k<=4-2*i;k++)
J @! r0 K/ Q5 k2 k% R& n printf("*");
. E! ]5 I( a8 } V printf("\n");
5 d; [' Z. C; f }
' j* l- |' {" a1 A}
; s* a) P3 Y" L* N; b, S' S) @% z============================================================== / ~1 t# H1 b8 Z6 n: d1 k8 @
【程序24 】 ! t6 }1 b- {8 g
题目:有一分数序列:2/1 ,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
/ W7 x/ ?: |4 A8 g4 f# _$ m/ ^3 l1. 程序分析:请抓住分子与分母的变化规律。
5 Z& j- s" m, \ s1 q4 b2. 程序源代码:+ d) O" e1 I9 ^/ p G; |9 x
main() . M4 ^) o# I' `& s( h
{ ; c$ ?- n9 w5 F i1 \$ Z9 t6 e$ u
int n,t,number=20; - H8 z9 }- p7 L% n0 o; F; |
float a=2,b=1,s=0;
8 a7 E4 g5 G% z- d% V: l6 Q2 Nfor(n=1;n<=number;n++) 9 T0 |" {: Y( A! {# c
{ * d8 Z# v1 Q. I" C9 Z. e; _9 \
s=s+a/b;
) {2 m7 j" I ~1 Z t=a;a=a+b;b=t;/* 这部分是程序的关键,请读者猜猜t的作用*/9 z! d6 y" r' |" t
}
% ?' \) ]; d" Y4 c# ~printf("sum is %9.6f\n",s);
0 i6 Z7 S; p& `: [+ N; P5 c} / R, {6 Q7 m0 l# G: z/ b1 v" I3 Z" C
==============================================================
7 F4 \4 d% @. @【程序25 】 嵌入式学习企鹅要妖气呜呜吧久零就要 5 T$ s) x, h, H' ?) E9 n
题目:求1+2!+3!+...+20! 的和; t5 C( k$ h0 z9 F# |/ Y
1. 程序分析:此程序只是把累加变成了累乘。 5 c$ b& Z* l. g" r( S% v; V
2. 程序源代码:$ H2 J4 ^: o( \0 m
main() * p# Q x" q2 [, l. ]/ M
{
3 c, }( r" C, ^% q+ T/ Hfloat n,s=0,t=1; 7 A0 U* n$ G4 H, m q3 r
for(n=1;n<=20;n++) ' w6 I% f7 _+ B% ?- w
{
8 v- @* s+ Z" _ I+ a t*=n; 9 U( |5 C7 r5 V" w; x" v; X
s+=t;
3 c: B. c( Q7 e }
6 g/ \5 y1 V( N* Xprintf("1+2!+3!...+20!=%e\n",s); , u+ y# e5 T/ F$ L+ S+ q
}
* m# S# G2 p0 h" q+ ^1 z==============================================================
- w$ h/ |8 A9 I+ s, e/ O# J【程序26 】
) r8 q- v( P. j- J题目:利用递归方法求5! 。
5 r' a3 S, ] Z1. 程序分析:递归公式:fn=fn_1*4!' n1 G8 K0 T$ ]# v- G$ t% A
2. 程序源代码:$ j* s" p; c: \8 f. ?
#include "stdio.h"
/ Z+ W5 ]/ W3 n$ Bmain()
5 L' E; I- @+ S3 a; p- d9 f{
6 [% ^1 N! k+ X& h- o% {* t) {int i;
* X0 K% E) F2 Tint fact();
( k* y# Q! b: Qfor(i=0;i<5;i++) 0 z2 o3 N" u! z; b5 M
printf("\40:%d!=%d\n",i,fact(i));
) y/ k, O- a7 V% E8 ^& V} % }% }# B% o* n% @2 h
int fact(j)
2 ~8 o; c* u6 Q5 L0 }int j; 1 o( w: g* x9 J# ~
{
6 E+ `; J& S8 Y% Y$ K- l3 G+ {int sum; - u: G6 b7 A7 \# q
if(j==0)
, ~. [. a0 D# p6 z7 v3 C, e/ L) K' ~ sum=1; ) C c3 H) C! G" c( U1 t H
else
n5 B4 o) y* ~( N8 [2 }# A sum=j*fact(j-1);
2 [7 v5 I6 P2 W, u) L/ nreturn sum;
& |; f8 M8 k5 b2 x* k! S} 4 M$ I T4 Y1 L1 S
============================================================== 4 I8 s, o1 y4 n, y
|