EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
【程序16】 $ D# r2 t" S7 o7 T3 d3 d& o8 {& B
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 + e$ P! C/ m& f) ^/ v
5 N+ W. A' w* t {+ h- S( x
% E! U7 ^4 x, E: |' t( ~5 g- V) s6 w% E* I; n5 _3 X
作者: zhlei81 2005-1-22 11:30 回复此发言 7 y# ]% y) K: ]) X& J \
" b- F/ m8 ~ f: X- l4 K
-------------------------------------------------------------------------------- ! h/ l/ w1 m J: B
6 V5 c1 n8 w8 U4 回复:经典C源程序100例
& T% l5 W- {) L+ I* J9 @# ~1.程序分析:利用辗除法。 . O% `# b9 [8 l: `% N
$ i6 f6 b" H- ?+ Z2.程序源代码:
3 H3 h; R8 ^* \) Omain() ) L9 \3 _/ {5 b. {& M
{
; c* L2 D* ]8 O( @: zint a,b,num1,num2,temp;
2 f2 ~) p2 E( N; p& bprintf("please input two numbers:\n");
& O* F: X8 f" c- ?9 y2 Pscanf("%d,%d",&num1,&num2); * d2 R3 D* }8 E+ c$ \+ g2 w
if(num1 { temp=num1;
4 l' f0 E& i T% l: ^, Z! k. [num1=num2;
* ^$ I6 |' I5 s' t" ~. Z2 M" y! Inum2=temp; 1 S9 E& G2 h, _! P7 I5 b; C4 d
}
+ O" N5 Y! e' R2 J2 X- q4 l C) ^a=num1;b=num2;
* @" v5 M; R/ G: U. P) r# r$ wwhile(b!=0)/*利用辗除法,直到b为0为止*/ # w$ \9 V/ L0 J: ]. i# A
{ $ Z" R$ L( h/ U; u( O0 ~
temp=a%b; 9 Z( f/ C$ S- h# _# c9 F7 j; r
a=b;
- x! V9 f/ `( w" b5 ]b=temp;
8 X1 _; }& G3 H3 W9 e3 I5 u} 3 r5 W4 J% K. m
printf("gongyueshu:%d\n",a);
0 Y4 o' L i; z* yprintf("gongbeishu:%d\n",num1*num2/a); + e" Z# ?& w3 ]% u* `/ E
} 7 r# V" r8 C' q/ B( @. A
============================================================== " Z* c F% ^1 G0 Z) l3 h
【程序17】
/ F) d! e/ T+ X) c" b b8 Y题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 $ ?/ c# ~9 D# b# k; {
1.程序分析:利用while语句,条件为输入的字符不为'\n'.
1 T* j8 t+ {- I" m+ ~+ H. a2 {' _; Y0 f9 K( r% k
2.程序源代码:
) P( l9 w' [% B& ?4 S, k#include "stdio.h" ' O- {9 t' l$ J% @8 i8 Y; s
main() $ N) Y( d9 I' G' L1 S! Y
{char c; 4 S# N/ q* u1 _; A7 |
int letters=0,space=0,digit=0,others=0;
! _' \4 f* _- B: V5 uprintf("please input some characters\n");
- T+ @* b. O7 J( a+ _) a& Hwhile((c=getchar())!='\n') , O* t+ z6 R Y
{ / \6 J' J/ h7 q- a) p' i- W3 n% A
if(c>='a'&&c<='z'||c>='A'&&c<='Z') 4 R0 i$ x/ \+ I# k
letters++;
+ v# ^) H: e" L0 q* celse if(c==' ') 4 y& K! C8 T. M
space++; " H! \# m/ t5 U4 [6 x. y( t
else if(c>='0'&&c<='9') * K4 T5 R( f$ S! ^, W& C
digit++;
; e. k3 {7 o9 V" Helse 5 R( Z7 J; a( }1 d6 U. _# A
others++;
" z' q6 W5 j/ K}
- x, {: ?( r/ I8 N6 Z- e x' x: Fprintf("all in all:char=%d space=%d digit=%d others=%d\n",letters, 2 `. S8 Q! l8 N, U, j3 M
space,digit,others); # T G5 w, s! U# j6 k1 j+ N
}
4 |3 s5 s* ] C) l5 e2 Y' Z==============================================================
! W5 z& |2 [9 t* o$ F【程序18】 ' F% v. U; M) M5 g( L, {: S
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时 3 i* X k2 v. T+ H. @$ j. s
共有5个数相加),几个数相加有键盘控制。 2 ~2 M) y5 I3 o
1.程序分析:关键是计算出每一项的值。
5 b. R6 U& s" i8 S- b2.程序源代码:
' E D1 H4 W( x# j T+ Emain()
* w& c7 R) t) n. C0 E3 E* ^4 X{ $ Z$ y6 P8 a6 W9 o
int a,n,count=1;
8 F; Z9 M6 m0 B1 D/ N9 Z# vlong int sn=0,tn=0; 1 \. c7 T& c! k; ~5 Q- K2 j
printf("please input a and n\n");
0 {6 W. t/ r7 Zscanf("%d,%d",&a,&n); " u1 c4 ~% U! K' T- s8 B' X1 a
printf("a=%d,n=%d\n",a,n); 8 j- h- q1 s+ @9 f! M
while(count<=n) , ?/ D6 _+ y2 q. w' J4 t& O8 L
{
: A$ P/ Q; M4 {0 V& ptn=tn+a;
- O0 g; P4 q y! c. wsn=sn+tn;
( X) t( ~$ Q5 O( E$ a6 va=a*10; 3 r$ l$ h7 e4 z, b8 Y1 W8 m) a6 Y
++count; & V1 V* ^( L' Q( I+ t
} 3 p. { C/ `* ^- ]
printf("a+aa+...=%ld\n",sn);
1 P2 I* W% V1 g. V}
+ w: V# \ p) _9 d7 i0 F============================================================== / ^, I) E* b- J9 g* p- u
【程序19】 8 I' w1 O! `2 Q9 ?* S0 J# d
题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程 0 s9 C3 l( V) E/ l ^
找出1000以内的所有完数。
( ^1 K) I5 B7 j+ |6 H1. 程序分析:请参照程序<--上页程序14.
5 T/ D, ?% X6 x K9 q2.程序源代码: 9 m; X, K9 A$ c0 A4 ?
main()
, y; d/ ~- E# e/ e7 Q- @! Q{
4 M8 }6 y' \: J) `6 zstatic int k[10]; , x \, z0 |8 o2 N* ?1 x
int i,j,n,s;
: {+ R; C, a. \* u" [for(j=2;j<1000;j++) & Y) k* d2 x0 K9 p: P- k) O8 Z
{ 0 Z0 K3 E" d- b0 I( V
n=-1; 5 e J% ]3 @, @6 ~8 a
s=j;
: i+ O- K0 ^2 d' Zfor(i=1;i {
( j V$ s2 u5 Q$ I; j9 Q, ^5 cif((j%i)==0)
5 f4 Y! y5 g1 f* m" P% X0 B2 U{ n++;
; W6 X* e1 x# F$ s& P9 [9 Ms=s-i;
9 N( p# L& ]+ x. J& W$ c. ^k[n]=i;
5 u2 N, `" K7 X! Y e. \. l}
5 G- u5 k8 s' [$ w" e$ G} + j/ a, p4 ?$ |) E3 g$ S
if(s==0)
$ p" p9 n, X5 U3 w5 @( K{ ' E8 L- l) n3 F3 j9 |" K' t
printf("%d is a wanshu",j);
Q E# w8 B' N! w0 ]) G! A5 ?$ dfor(i=0;i printf("%d,",k); + }( O& n; E$ D8 D
printf("%d\n",k[n]);
0 ^) g! I9 a% M$ ~& K2 H} * C6 Z E& X2 ^5 k. g
}
* }3 I' q5 Q" {9 J}
. u/ J. z# |7 j============================================================== 9 x- J; a& H6 k& j6 v
【程序20】 3 g; J) ^$ {# b& y" c: u. @
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 0 i5 Z. Y. V9 f" m7 O' M
第10次落地时,共经过多少米?第10次反弹多高?
1 k; ^1 J" v1 t# ]* \1.程序分析:见下面注释 2 m' y8 l |; I/ _' k( Z/ s( G
2.程序源代码:
. I/ j5 M1 u4 _7 s# dmain() " @. B/ ]: H) O3 c# K7 R$ @! s
{ # \5 s5 Y7 w! q2 f
float sn=100.0,hn=sn/2;
( I, Z2 n* \: Y% e0 U/ gint n; 9 k5 U# N& P" a8 r9 t/ V
for(n=2;n<=10;n++)
) Y* e' X; ~0 H& O{ # \. W. Q8 U4 S
sn=sn+2*hn;/*第n次落地时共经过的米数*/
$ y/ F3 P, k7 i5 Q9 Dhn=hn/2; /*第n次反跳高度*/
E; @4 M5 E2 e% y' {& B* X2 d0 l} 1 }# n5 I% W/ x/ J; U& |6 E
printf("the total of road is %f\n",sn); ; p3 E* o# u/ {$ \* R
printf("the tenth is %f meter\n",hn); . _* j' f1 n4 g
} 【程序21】 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
F8 M0 u! U3 H5 |( |% ~9 W) h 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下& S& P' Z/ ]$ ~5 Z& w* p
的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 ?6 v8 S# u; ^+ W* A
1.程序分析:采取逆向思维的方法,从后往前推断。; o/ v3 ~/ e7 p1 r. d2 c
2.程序源代码:6 f8 ?$ }7 y } K) g) d" n
main()8 O% {0 U9 e! W# U% M& ?2 E
{
# C, ]6 g$ L1 y% O/ N+ r) n, fint day,x1,x2;
( l0 @6 v* Z- f2 P Oday=9;* ~1 F/ v/ [3 o+ M5 B g
x2=1;
& k6 B* V( B1 \' ?; t. o+ K! w! L# cwhile(day>0), f$ X3 s9 O6 r- P
{x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/
$ s: y: @& C( |6 B) ~; [/ F x2=x1;% n' ?" C. ~! E; J# H2 f
day--;: W0 W8 ]( O- D/ Y' A3 V# E1 {# q2 U5 ^( z
}( h6 B1 B( N7 O# [. q& \# o' S+ C
printf("the total is %d\n",x1);
. P- W0 |0 H8 D/ |: ]! j}
' \5 Y" K! U) c$ w+ \8 r==============================================================. X2 l+ @7 u+ n# }3 j% ^
【程序22】
3 ?1 L: p$ s1 r1 s题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定( e! B& S \( d" B
比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出# v# l, a. W9 }0 @! L5 T8 ~
三队赛手的名单。 . e& T0 C- x9 p! H
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,2 t' N+ f# Z, S$ _
则表明此数不是素数,反之是素数。
8 q1 n& p) W- N! e7 D# I4 d& s3 `( F2.程序源代码:" q% S6 h$ {' ?! K
main()- @) j! S* c3 t
{9 h1 w" [# f1 l, P
char i,j,k;/*i是a的对手,j是b的对手,k是c的对手*/' a0 l6 f& B( q6 K5 `
for(i='x';i<='z';i++)
3 X$ p% l# n3 b- m% r) O for(j='x';j<='z';j++)( U( U6 q% f* D5 M3 u. Y
{
: @) b6 M* S4 B$ @! h if(i!=j)
- O& j w& y# T4 e; W5 u: C* X: z for(k='x';k<='z';k++)" i: n9 n# j/ N; k& u3 N
{ if(i!=k&&j!=k): W( {0 K. i; _
{ if(i!='x'&&k!='x'&&k!='z')* l) P. ~3 U5 h9 G. c% B* ^
printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);2 Y$ E$ Y7 B) I
}* M" p4 A( B0 |0 |
}1 }* C" [& A ]
}& } z5 M- O: z
}
. e; s# o, `6 U: L; o; B==============================================================
" b7 h. P7 _. u$ }' F/ S【程序23】 $ u4 @. F% `7 w {
题目:打印出如下图案(菱形) *
" o( }8 K) M- H* R4 ^% \*** 4 P0 @! x" B9 u3 _, {7 h& J! _. l
****** , X( {3 ~0 m. B
********
/ B" r. l4 t' s' D% }******
! @( b# ^; K) X5 c, S*** + f. ?) Z3 q- l m) p+ M* }
*
- R. k6 O; x6 H; P- U1. 程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重
& k1 ]3 H" i4 `: t for 循环,第一层控制行,第二层控制列。 # ^4 B% N2 ~7 L6 x
2. 程序源代码:; ^3 p7 v: C# _" U- y
main() 1 k' i/ m# a! @+ T
{ 0 l2 X, q0 l& S" m( ^" u! ^
int i,j,k;
4 {! R& _' ~# d+ ]0 c/ @for(i=0;i<=3;i++)
* |0 c; j7 {6 S; u) V. V. a {
" B1 J- p! Z8 A for(j=0;j<=2-i;j++) 9 _( ^" x# G# |3 H( j2 A% W$ `5 h
printf(" ");
) [& ^4 _; y8 g5 n for(k=0;k<=2*i;k++)
: ?- W; h0 L6 o5 ~. }; n printf("*");
+ g# l& u. Q6 p8 N! }; X printf("\n");
% q) f2 f# @& ? }
; c6 b! p# o$ S3 t* n1 w+ @for(i=0;i<=2;i++)
8 J" _# j; q/ A: t {
$ G0 y- @" d+ U7 r' D' O: F4 }5 ?/ O for(j=0;j<=i;j++) - E) `* F/ D0 D9 M% o v0 m# p4 M
printf(" ");
1 l4 Q9 z2 j3 g0 ?2 k8 [9 J* F for(k=0;k<=4-2*i;k++) , e9 g4 c( D+ r' }& Z
printf("*");
) e8 f8 G0 S, _" q% J printf("\n");
! p* w: c( D. w; W; w/ T c } ' m: D) u# z9 N3 l' I0 t* Q
}
, z8 A$ M7 \) L" p============================================================== 2 F$ X) X1 I' Z
【程序24 】
8 X, s* g: \$ b7 Y* i题目:有一分数序列:2/1 ,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。7 ?8 h3 ]. C$ E7 F
1. 程序分析:请抓住分子与分母的变化规律。 6 P, R# ^0 W* m6 u6 e# {
2. 程序源代码:1 M' z6 l* y, Y
main() " T1 q: i. `% A. K4 w+ W0 `1 a
{
" H, @) E# t2 X8 F5 k; Xint n,t,number=20; % d+ o, x( z5 Y1 i! W2 x
float a=2,b=1,s=0; 0 N: e+ H% \# q# Q' e+ L. m8 e
for(n=1;n<=number;n++)
) g$ v' C2 M& t9 B { * S5 y) F6 p L0 g8 M. Y6 F
s=s+a/b;
- f4 V( C+ v% d4 |/ z+ C5 ` t=a;a=a+b;b=t;/* 这部分是程序的关键,请读者猜猜t的作用*/
% W' |- E/ @. n/ _6 \: Z0 _ }
; f$ G _* h1 O7 E& n, Pprintf("sum is %9.6f\n",s); ( E, z0 W' s# v- V6 Z7 j2 H
} % r! f6 O9 r9 {$ _! i1 w5 y. l
============================================================== : P6 ?' q8 n2 [& V
【程序25 】 嵌入式学习企鹅要妖气呜呜吧久零就要
/ }4 ~: T4 O+ U" g/ I' q题目:求1+2!+3!+...+20! 的和
' ]5 T5 j; g/ e' t6 f2 Y! s1. 程序分析:此程序只是把累加变成了累乘。 * t# i2 h% h6 `6 z" c2 |
2. 程序源代码:* |0 b* T! Z0 i( N
main() " ]8 I7 `0 t( V6 {' C0 ]
{
. B9 a9 d) F/ F/ E: X1 g! Rfloat n,s=0,t=1; . [9 V* |6 p. a: l& s
for(n=1;n<=20;n++) 2 `$ t) O/ c' j3 {# F
{
, W. s1 I3 O0 I" { t*=n; 1 ] A9 K* i7 Y/ |
s+=t; , p" H3 @ h$ E0 I% l8 f( E
} 7 z1 M5 b* [8 t( A; O: z: b5 }
printf("1+2!+3!...+20!=%e\n",s);
2 p6 ~5 S' l+ A! k q}
* M( b5 }3 @% I3 S* H# v============================================================== ( j1 F" P# I- n: ?
【程序26 】
2 a* I, G6 g% j题目:利用递归方法求5! 。* E! m& |/ @* s q; _7 M: P- s" R
1. 程序分析:递归公式:fn=fn_1*4!
0 }( `* V6 g3 S5 s$ y2. 程序源代码:
3 q* q1 [3 r; \' j#include "stdio.h"
4 c2 m# q" g' E8 H$ H. v' `main() 3 B" F3 G- H+ a# i* V
{
9 O1 ]' ~5 i0 r+ d' e m; gint i; 0 ^' D- k7 P; \+ W8 w1 a
int fact(); 1 s! U) z3 d' x0 B+ z4 @% A; C
for(i=0;i<5;i++)
2 N& O3 ~# x3 _" J" m printf("\40:%d!=%d\n",i,fact(i)); 0 r; v) o# p* O& W3 E4 \/ V
}
2 i) Q4 d. ^1 O5 r- t% Z( {int fact(j)
0 P% z4 }7 _" d" m9 W% R8 H1 K# [int j; - Q+ h% W% j }. v" A
{
7 Q+ t: Q2 s1 ~3 aint sum; - |. c! A4 s% V9 M
if(j==0)
7 V6 Q! ^, T, P2 c1 a8 k sum=1; - G" S. w8 D# |2 v
else
* G2 e: p6 G# j9 A4 r0 z/ H# e sum=j*fact(j-1);
" v; P+ ~ t% z+ z0 Creturn sum; 3 s* I" U( j$ a5 `) |7 W6 u) p+ H: u
} 5 H( L3 L! N7 P8 f9 U0 i$ H9 I
============================================================== ) N- R8 X+ H7 h- w Y; ^5 R/ w
|