EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
【程序16】 * m7 i) c4 ~/ R7 v0 G* m
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 . R) n* z4 e- F
. I' Z7 K$ G3 ^" K* U
9 }# K3 r+ h5 T# P" X* E
# W/ ~8 t' u, [9 c. y, v作者: zhlei81 2005-1-22 11:30 回复此发言 ! Z/ w7 n2 H; Y
^8 V M; L2 y2 i" ]-------------------------------------------------------------------------------- ! Z8 P/ b- ^+ I( _& _
- j3 ?, r. i8 R6 ^4 `
4 回复:经典C源程序100例
, f+ N. W+ K/ @2 ^7 _; @; y# K1.程序分析:利用辗除法。 : }% A4 U3 E" B) B
( O4 y M$ m+ @% z2.程序源代码:
) ~; _# ~) P" U$ H4 Dmain()
F- P t2 n7 A( b V4 l{
$ c* g$ u8 v9 p/ xint a,b,num1,num2,temp; # o @9 |& |) A" O
printf("please input two numbers:\n"); $ k$ n" D5 x; j; z, V
scanf("%d,%d",&num1,&num2);
$ x& g/ j5 J# D/ k/ aif(num1 { temp=num1;
! w! k! G W& i$ xnum1=num2;
$ j$ |! o' @8 Y- U" D- Bnum2=temp; % ^# t! E2 W! s6 p+ S% ?
} " L# A7 S; F0 Y1 g
a=num1;b=num2; 9 C5 C1 h1 i- {1 Z3 h/ m
while(b!=0)/*利用辗除法,直到b为0为止*/ $ }" I3 H, Y/ A! F, H% ^
{ 5 n; d4 `* a& B
temp=a%b; $ B0 D4 u5 f1 W
a=b; $ I7 ?4 X N# z! q
b=temp; % t$ c7 X$ S! ^( W$ |
} 7 |- D3 m2 S/ q! Q% X: T H
printf("gongyueshu:%d\n",a);
$ y2 y6 D* ~$ {; t( z( G( E- N- P8 ]printf("gongbeishu:%d\n",num1*num2/a); 7 ?8 P3 N- J+ {0 z
} : O3 }9 \& G' m! Z) V
============================================================== E1 x# i- F2 }4 G9 s; g$ R8 a* _
【程序17】
. V6 G |) u3 {0 Q; A题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 ; R# I& Y- e+ B7 q2 D! b8 y
1.程序分析:利用while语句,条件为输入的字符不为'\n'.
( [4 ~5 C8 a3 \3 R4 y2 W5 D6 _
: m' X* y5 d) q( u2.程序源代码: ; |/ @7 h9 Q7 j( ]" z
#include "stdio.h" , S. \) G1 [# O
main() $ E! i7 }5 W- B# K2 q+ Y2 A! }2 \
{char c; ' F5 ?& n' _% t
int letters=0,space=0,digit=0,others=0; $ [# C2 N1 f0 r( o- L
printf("please input some characters\n"); 5 i" ^, X& x1 E: q& c& w7 z
while((c=getchar())!='\n')
! R4 ^9 X: h- ~9 @{ ( a! ~$ m7 ^, e/ w6 z
if(c>='a'&&c<='z'||c>='A'&&c<='Z') ) j1 w' e/ j5 {, Y
letters++; $ [) z2 W9 R' F" j1 z
else if(c==' ')
- Q! {2 m) C+ V w) D4 uspace++;
- E4 I6 w& W; jelse if(c>='0'&&c<='9') 0 v1 B1 Z8 g/ A1 y& G9 O# C8 H, V
digit++; $ Y4 t* h( g, Q) k! t: {6 S ?. y7 h
else
) ?% x2 k3 Z) \others++; " q/ R) i+ B$ Z( T
}
- `% E3 `; w6 w; Zprintf("all in all:char=%d space=%d digit=%d others=%d\n",letters, 1 [) D$ h0 p4 a" O! C# J
space,digit,others); + ~6 q/ J/ v- {: }
} # `1 E k( r5 D, K# Z3 u5 r) Y+ g
============================================================== 8 J4 H3 J. S! c1 W
【程序18】 ' y8 P6 i3 h6 e9 \8 J
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时 . J1 }+ G1 z1 N9 ]' ?
共有5个数相加),几个数相加有键盘控制。 2 T! }$ J9 D" n
1.程序分析:关键是计算出每一项的值。 $ t& L2 Q: g3 X, C( k
2.程序源代码:
- n1 Y0 {3 t6 I9 q' [* T- j4 mmain() - v% S' f: t, Z, g w; n
{ & @ o, ?3 g. b2 D/ S+ g
int a,n,count=1;
1 Y# B7 e* ?' _2 B6 llong int sn=0,tn=0;
0 F+ T0 w ]# L; ]printf("please input a and n\n");
0 p. B5 ?- v8 w* Q: E- k6 Xscanf("%d,%d",&a,&n);
# j6 a6 e: [: `5 Qprintf("a=%d,n=%d\n",a,n);
5 d7 t% g- S$ Z5 f& uwhile(count<=n) " ~$ f& t/ |5 N8 |
{
3 g" H9 e; F Q! P+ ~tn=tn+a;
" w) W; f9 W. ~$ D% k, xsn=sn+tn;
* X& ^6 d; M# I: I9 i9 la=a*10; ; M+ J$ k: D3 @$ N9 |* l
++count;
. f! C/ w' T- P& w4 F5 K; x} % |; \' _% u# h4 y
printf("a+aa+...=%ld\n",sn); 2 s' T4 h8 j# T. j0 D0 p
}
, r4 ^5 `5 ^9 M0 h! o m============================================================== 6 U+ Z5 l: u& P3 Z. K# ^
【程序19】
) N0 O' d. ]: E; y& O题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程
4 p: I, d7 x, ]$ T找出1000以内的所有完数。
7 I' ?( t, N- F0 o) v5 l- z& U1. 程序分析:请参照程序<--上页程序14.
* j ?) A H" ~2.程序源代码: ( q' u! @% G8 I4 {
main() 8 L9 [- |$ W- H* {4 o
{
2 S+ o i% c$ q# jstatic int k[10]; % R( S0 ~$ s; \* K6 K; x
int i,j,n,s; , a) _0 a, O4 R ?+ u
for(j=2;j<1000;j++)
' k8 p/ j% P2 m# b- I. G8 Z{
% A- T2 S+ l7 r% l, fn=-1;
7 }3 M$ i! u js=j;
) }/ d9 P0 G9 Z$ L' ~$ f i! Gfor(i=1;i { 4 \$ B( p; Q9 A# C3 o! S
if((j%i)==0) % A* }8 }* T/ n0 n2 E% [" O9 \
{ n++; 4 M2 w2 i# _; X0 m% y& ]& ?
s=s-i;
! T. k: o' u1 L7 v+ jk[n]=i;
9 M1 J" v7 o) |4 Z$ j( F; h3 v2 x} $ Z7 f0 r5 ^+ `6 T1 J( C( w, t
}
/ |- {0 ?) x E1 r% H2 T. hif(s==0)
* g& e8 L- ], ~- X) h1 U# z{ , S. V% Y! f1 {3 A! W( R; B
printf("%d is a wanshu",j); 0 `5 E/ `% g% y: J: t
for(i=0;i printf("%d,",k); ' _: E* R% s! U2 |5 J" i
printf("%d\n",k[n]); , _$ N' x# m! u: ?
} ) T4 W! X9 d4 L, ?+ }
}
. H1 G v6 |, M0 u) S( F$ G}
" Q# y. Z$ u4 x; h- d( D# L==============================================================
# _. l0 w0 W' P; e0 \' V9 D# z" V【程序20】
, y, n+ e% x3 R2 b9 v& B题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 9 }% a+ E. D R: F
第10次落地时,共经过多少米?第10次反弹多高?
) m9 q7 Q+ }: y o1 A1.程序分析:见下面注释 - p. _) V$ B- s( z+ ^' P
2.程序源代码: 1 X2 ~0 |0 X, J+ q9 Y8 D- P
main()
' f' t* \% k" k4 e" j{ 8 b" c1 b) A& I: b* k+ K! L: g
float sn=100.0,hn=sn/2; / o, g, T( o: M, ~
int n; 0 e9 o) j/ r( v6 f% l4 Q
for(n=2;n<=10;n++)
, R& d: o1 T% {4 T8 O+ ?3 B{
% ~' S0 u8 @9 I; m! Nsn=sn+2*hn;/*第n次落地时共经过的米数*/ 5 B: H' J. V; r; E+ T3 w
hn=hn/2; /*第n次反跳高度*/
" x2 L% B5 V& B1 C* Q' Q, T} $ Y6 t1 i" A+ A: c- {
printf("the total of road is %f\n",sn); 3 G# n: J3 O* p/ Y: i0 m8 Y$ ^! F
printf("the tenth is %f meter\n",hn); ( s( D' K$ A: n# E. P& ?
} 【程序21】 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
. w# z) e1 j8 g# h- b* d) G3 c8 N 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
2 Y$ P/ Q V) S! w3 w5 i 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
2 H# G" G' v# g! f' u1.程序分析:采取逆向思维的方法,从后往前推断。5 l: d9 o* _. o' ^! Y: C
2.程序源代码:3 K8 ^9 [$ F, E' c1 y5 O: A
main()4 n0 ^9 A) d: ?) ?. E
{& ^/ G# y$ C& M9 q" X- I
int day,x1,x2;1 N h# {/ R0 q9 b$ J* l& F
day=9;' O4 h+ D+ g3 U: Y" m' h& c
x2=1; N; N! ?% L+ E
while(day>0)" W# ^. S% @' \# S( u5 a
{x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/
6 p; v" B7 \6 {- } x2=x1;
# W8 V5 s3 j1 }9 q( R9 C/ p5 X3 q day--;
! G( F5 e" U# o. m8 B }
5 H. @: b. a1 z- Hprintf("the total is %d\n",x1);# f4 h- v7 J7 M8 i% \- E d
} j2 Y. a- Y( _
==============================================================9 ]* j' t* ?/ A A4 H# i
【程序22】0 a" T# q5 y) U% _8 f9 Q1 z
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定
9 s# n# j4 P# x/ z& a 比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出
! O0 j7 a H5 L6 A9 C" x 三队赛手的名单。
5 @4 g9 z$ i2 ?8 _1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
2 V6 B- i0 G8 {3 e- L7 a M 则表明此数不是素数,反之是素数。 3 s9 Z* L% x- |. M# @; `
2.程序源代码:
H8 i+ [4 T, k9 @- c* s6 Rmain()
T- ` d9 P. P9 o, H{# c/ A8 S/ Y% a; N
char i,j,k;/*i是a的对手,j是b的对手,k是c的对手*/
4 }8 I- B; J7 m- p9 efor(i='x';i<='z';i++)6 v0 S$ j1 W s+ v; D
for(j='x';j<='z';j++), Y+ R1 Z/ o( c6 Q1 m9 U
{
- a9 ^" X! y$ z8 ]0 R if(i!=j)! V, X7 Q: h; N# k
for(k='x';k<='z';k++)0 E9 n7 x! Z) Q: w. [0 g& D$ z
{ if(i!=k&&j!=k)' f1 Y) x" U; j( a6 \" \
{ if(i!='x'&&k!='x'&&k!='z')
% Q" s# Z r& s' @$ t printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);
( I! w/ {( p. [$ P/ }; Y5 K( U }
* y0 l9 Q9 l: I$ x: m }/ A' c9 K* R$ ?6 E' a! s
}
: u" N8 e; J" ], I: o. b}
\" {4 E% n* r3 f8 X' m+ F' }2 P( ?5 p==============================================================
. F6 W+ G. x4 r* H. y1 b: k【程序23】 2 F% U' [5 B" [, q: t
题目:打印出如下图案(菱形) *
' f# y' c' A. i, V* j( r*** / f6 }; [* \6 `( a
****** + E' A4 Y! p% Z5 _" ]" g' C- {& _; i5 F
******** 6 A# y6 x- E1 s0 a
******
* d* Y& V- D3 Y/ D; X% E***
) [9 T4 P5 U) b* % Q$ |" Y) W9 n' M J
1. 程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重7 \5 {" o, F0 b
for 循环,第一层控制行,第二层控制列。
5 U0 K# y! W3 J2. 程序源代码:
g* D: R/ {. d, tmain()
# P- o; H+ V6 y{ 4 U# x* u3 l! c! m+ F. Y5 R' g
int i,j,k; ) {4 w# q$ {# N; P
for(i=0;i<=3;i++)
! l* _6 O7 L. A! W/ L) l! P+ H { % ^4 p+ X1 A1 J- U% R1 o
for(j=0;j<=2-i;j++)
+ v. _% M+ R4 @2 k8 F printf(" "); 0 H: k4 }4 `6 r
for(k=0;k<=2*i;k++) " t$ b& [2 L, X& u# u8 s
printf("*"); % k+ o2 Z }* s' @8 L1 |, m2 x
printf("\n"); + \1 U- R! b' B
}
' `/ i* I5 b% `4 ?for(i=0;i<=2;i++) 5 D7 }, b, ^! R# l1 J V
{
9 ^ t8 ^( N1 G( u; ~: N for(j=0;j<=i;j++) 6 N" h+ f6 A/ L$ B0 d
printf(" ");
1 u0 y1 d4 c& f, Q: N for(k=0;k<=4-2*i;k++)
9 I/ _% O* _. j2 M+ t printf("*");
2 {( H3 R" _1 h printf("\n");
: {/ P/ j' s. }' \$ [2 l, [ } & C1 r6 \0 K' D- Y" |+ t
} & g n/ B/ |* I: @+ ]+ J: ]
============================================================== 1 x, K. l8 j" j, u1 {8 _. D [
【程序24 】
/ q% b) @: d k, Y) U5 P题目:有一分数序列:2/1 ,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
$ V/ c, L2 {( b3 o% g6 P1. 程序分析:请抓住分子与分母的变化规律。
. Z+ U+ M" [" d2. 程序源代码:
, S4 G3 X* r8 {3 b8 `* D: o2 Pmain() . K9 v' E9 u% ]) S
{
. r2 d/ |6 h9 m& ]0 y+ \int n,t,number=20; 7 ^7 G: f9 }7 R* S
float a=2,b=1,s=0; , w- [; v# h" {! I: V9 ^; N
for(n=1;n<=number;n++) 9 F9 }7 T/ S( P# ~
{ ! ]# H0 V* M, A& l# O3 P3 Q: [
s=s+a/b; " k+ O" t: V ~4 g
t=a;a=a+b;b=t;/* 这部分是程序的关键,请读者猜猜t的作用*/' n9 x! f* w; m/ ~2 l
}
5 J* J& X- B2 Y! o7 ?6 }printf("sum is %9.6f\n",s);
" B, u6 Q0 V D' a, ^} n$ X' y' H+ E y$ V, m
==============================================================
# U( p2 |( W( c* r" q" H【程序25 】 嵌入式学习企鹅要妖气呜呜吧久零就要
5 ^! X0 x6 T- Y: k, {+ Y- i题目:求1+2!+3!+...+20! 的和$ |1 b) U6 ~, {, t
1. 程序分析:此程序只是把累加变成了累乘。 4 m) Q0 X. o& k# F5 g7 L& {
2. 程序源代码: d2 y1 H9 \) |1 n8 t! j
main()
7 @: Q1 U; Q, z. N9 {( _* h; c' {{
/ x1 n% t' H( Y& x% ffloat n,s=0,t=1;
6 @2 s$ m1 B( t# V9 O$ Mfor(n=1;n<=20;n++) 9 P* n" S/ T+ w% N: A
{ : X& \3 H1 K+ y$ A/ S
t*=n;
1 a: ~7 g* m0 U G s+=t; ; P7 J, Z+ a. ]! l N
}
) ]3 g& T z/ c% m. Yprintf("1+2!+3!...+20!=%e\n",s); : M$ C d4 k' g6 u/ n8 q; Y: l
} 7 v$ P$ I# \+ i7 I2 l* O: I+ a* {
============================================================== 6 T8 h3 v: K- m- O0 r
【程序26 】
8 a; @, t5 @6 a, [6 M6 Z% I! G题目:利用递归方法求5! 。
; K5 w3 |) J5 R/ o9 K$ k0 G1. 程序分析:递归公式:fn=fn_1*4!
; x) h8 j! ^! n9 m! s) A2. 程序源代码:# g3 e" l0 k$ {5 J4 }% o. O
#include "stdio.h"
' U5 f, F8 }" S5 n# Qmain() 6 |& y2 l! ~0 P8 _ o& f1 R( ]6 k
{
$ k" n3 q3 r& k8 b- O. T i% n4 W0 xint i;
, B2 z. t& z" G* P v& L( Qint fact(); 1 s. T: S. p: Y0 E+ T- ]- ]1 H
for(i=0;i<5;i++) " r! u! }$ @7 d- b. E0 b8 S
printf("\40:%d!=%d\n",i,fact(i));
( `1 }+ m, L) g3 V}
# I" o) @: w% @ i+ S- y0 vint fact(j)
4 p' @0 D* G% j0 [int j; 0 p; D- m4 ]9 E. d9 z
{ " T7 M- u. W% _
int sum; 2 K1 `& l2 Y8 y+ {4 ~; l2 G. v
if(j==0) 8 l9 R9 j) ]) C v( O7 B( T, O" n
sum=1;
* P8 _. ~) c& o6 E, belse
: _ v; x# E6 \) s1 \ sum=j*fact(j-1); $ @4 g7 n# r0 ]3 Q, V9 d
return sum; ' S! Y. w" I- h( e% y
} . q7 d$ u# [% W2 A7 v& w+ B# Y- Z2 m8 k
==============================================================
/ P! e7 C3 @" u! n b% J8 ^: @ |