找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 61|回复: 0
打印 上一主题 下一主题

C语言经典算法16-26

[复制链接]

114

主题

136

帖子

1000

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1000
跳转到指定楼层
1#
发表于 2017-10-6 14:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
【程序16
7 ^; R6 `# V4 V$ g7 f: o7 n题目:输入两个正整数mn,求其最大公约数和最小公倍数。
# a% Z% w6 {7 L" `6 g1 T- s6 [& i5 [) D! k% p

7 u% b$ G( f  \3 V: _0 z5 D: l. Q+ ?7 l
作者: zhlei81 2005-1-22 11:30 回复此发言
! g; h! x5 q5 V1 ]5 c2 T( w  c! s& Q( a; d, Y/ R7 T( ]8 N, \7 h. a
-------------------------------------------------------------------------------- $ ?' s. l. L) U

& }# r$ n- {& ^; d/ d( ^4 回复:经典C源程序100; y* c- ?9 c2 y- f  N: l
1.程序分析:利用辗除法。
7 Z  y, Y" Y, G- I, O
. _7 b' H/ l% h+ c* B3 M2.程序源代码: 1 q, R9 ]/ |) x5 I
main()
6 a9 H$ x6 {* H- I, k{ ( O) e- s" P0 [
int a,b,num1,num2,temp;   v1 E- O% t* Q6 t4 P# z
printf("please input two numbers:\n"); 4 F( H3 T) h% j, F& n
scanf("%d,%d",&num1,&num2);
4 \* M) C- P* X4 c  I: sif(num1 { temp=num1; # @! L/ j9 b: s9 u: A
num1=num2;
- }- {' T* Q+ Z9 tnum2=temp;
+ J1 z7 A" s! n3 e6 E}
$ c, a3 A5 b4 q3 B" Va=num1;b=num2;
8 E4 [& B, j0 I3 l, `# Uwhile(b!=0)/*利用辗除法,直到b0为止*/
( v3 n0 ^1 i4 `{ . b3 b, c/ j3 D. }2 c! ?
temp=a%b; 2 D8 u: m/ P% W# }% _. ^
a=b;
9 \5 q4 ]+ c/ ?0 gb=temp; 0 ?2 z5 R4 W& _6 G$ U- x0 M
} 2 w/ w' `( D& I
printf("gongyueshu:%d\n",a); / e* x8 K; e0 a) t( {! X
printf("gongbeishu:%d\n",num1*num2/a); & F' g- T& N9 y2 G3 D
} + F& W! T' z" ]; V6 c) \
==============================================================
& r- Y) W5 F' J7 L- M. y. R* V【程序17
$ ~6 P6 r  f" h0 m" U题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
( Y* U! [% B" J+ D  n: i& e1.程序分析:利用while语句,条件为输入的字符不为'\n'.
( g, b; h  U9 x/ |; M
/ X! d# \1 Z) @2.程序源代码: 1 j5 ?# C+ z! z" A
#include "stdio.h" ; C; j+ `: }; O" X7 {! A- `" n
main() ! m8 n* A4 }( l6 O+ {* \( X
{char c; # x) [7 l1 y" m: P2 k
int letters=0,space=0,digit=0,others=0; / S2 N8 P# l  \# t
printf("please input some characters\n"); % ?' R5 y) _9 z: G1 i+ U# O9 S
while((c=getchar())!='\n') : t) C; a( M$ f0 o
{
4 D8 e4 a( N# ?- eif(c>='a'&&c<='z'||c>='A'&&c<='Z')
" M: v, }$ n( H+ e& jletters++; 8 N' W3 C% Q) B3 u! q# J" [
else if(c==' ') 3 g1 Z0 U6 w5 Q4 p" B! r/ _3 L& a
space++;
9 o  w' x$ i* g( @0 p# a5 Oelse if(c>='0'&&c<='9') 8 ^' M% {' q( {3 ]0 a4 k; w; I& F
digit++;
$ Z* ?7 U  \, r  Y. }. Y2 W. pelse
  l  p7 c, S6 }# fothers++; + [8 \  u2 J. D% y/ u9 Q) c5 }8 ]3 E) Z
} 2 x2 Q* x( L7 |5 F3 J
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters, 5 t1 l( I( ]! ~  ^: y; r- u$ H. ~
space,digit,others);
6 a9 T& k( J' b/ A- w3 G+ `; X5 t8 D1 ^}   B8 l7 g4 R5 ?$ J1 X! ]" u  v+ U
==============================================================
$ h$ X( N3 a6 v【程序18
: T/ F5 ^9 }8 O) @8 o题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时
+ J# d- p0 L( p共有5个数相加),几个数相加有键盘控制。 $ a, A! M5 Q3 Q0 m
1.程序分析:关键是计算出每一项的值。 & w& Z- }5 B2 ]- V/ Y
2.程序源代码: 8 m) _! G. a- Q) e# g" S  X
main()
! @6 Z8 ~/ |. Z- k+ B$ ^9 q) ^4 f{ 0 D! T2 y9 R! K3 ~7 ~4 p
int a,n,count=1; 5 {. _! m0 w# C2 f- B8 }
long int sn=0,tn=0;
) ]4 [! a) }; A# t4 dprintf("please input a and n\n"); * i1 z7 R5 v8 N2 e/ A5 U) e5 C. V  t
scanf("%d,%d",&a,&n);
6 @. W( @7 V( m  l2 I9 ?* g. mprintf("a=%d,n=%d\n",a,n);
, I! @0 Q" W* k! nwhile(count<=n)
5 e4 Q# L# Z, E' S9 ~! g8 U{
8 _% N6 V) J% Z: C/ {5 f5 n2 ]tn=tn+a; : N' H- z+ s3 ?# X5 B
sn=sn+tn;
! j& c' v. @" c1 \a=a*10; ( |1 {: v8 m( z3 B  N3 l/ v
++count; 0 K, t! D8 _# Z2 [" R7 D3 S& l3 S
}   B( K' l! F; `( h. K+ w
printf("a+aa+...=%ld\n",sn); / B% V% V8 t& |- D! t0 y
}
( f( A1 N2 Q+ ?$ u, H& F/ I============================================================== % d0 o1 V1 {+ O( L5 I
【程序19/ S6 p% }3 V, {' ~9 G6 m( [) @
题目:一个数如果恰好等于它的因子之和,这个数就称为完数。例如6=123.编程 $ E1 t& H# P, n# [2 C
找出1000以内的所有完数。
) Z  N" m) x. O1. 程序分析:请参照程序<--上页程序14. . {- {! F, @0 g* V& b/ z* ~( Y$ w
2.程序源代码: ! \: \7 T! H! j9 p
main() ; p4 E( `, V8 j) `/ {& V
{
' z2 q3 t3 a$ C0 Pstatic int k[10]; 3 ?! Z$ \) T* t, x
int i,j,n,s; 3 Q7 f1 `5 z+ s$ z3 ?3 X" {5 I: ?
for(j=2;j<1000;j++) 8 k4 D# c( w0 Z0 P
{
/ t% ?1 B  _& J* I( J1 dn=-1;
( O# x% H3 `6 `s=j; $ \& i6 u& S1 `1 J' L  B/ V
for(i=1;i { 2 e& \% |" w9 Q4 d9 m5 G
if((j%i)==0) ! X  m) L* w5 z& M( s
{ n++;
  `4 q- U" k5 l5 V1 r+ \: Ss=s-i;
7 M6 T* a9 u, C6 W8 Y" I& ]3 Ik[n]=i;
& m( s- k* d$ ]" y% M0 ]5 O} & s% {  a& Y# h
} ' q1 F9 X0 B6 H: p) |- n$ v
if(s==0)
5 d, J" A+ M9 m' j" x{
. D) c' v3 Z% Oprintf("%d is a wanshu",j);   B1 B# P, s5 l/ l# x9 q" M' E
for(i=0;i printf("%d,",k); 8 i& C4 I6 @8 N
printf("%d\n",k[n]); * B8 S3 q" F" V0 H2 J( ]$ ]
} : h9 V) Q; i. [4 M! R% _. I
} 8 ]) d* l3 A8 P% I3 S
}
% G  v! X, n1 H7 r$ v============================================================== ; H2 l7 B4 |' s% f  r
【程序20& R8 i4 _2 ]( N/ ~; D
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
4 E/ X% k# q# }2 E" `10次落地时,共经过多少米?第10次反弹多高? . J  ]( _, h, D$ A8 k, M3 G- }  ^7 R
1.程序分析:见下面注释 / t. }$ z# ^' `: ~
2.程序源代码: ' `" y+ u% K& \# m
main()
  W. {" M1 @) n- @1 x8 R0 V6 w{ . I, _1 ]) z2 S" z  }
float sn=100.0,hn=sn/2; # k% M" |9 f1 ^$ ^2 J8 m" K. E
int n;
( }! b5 O1 V" X2 ?' ^* d% t1 _4 Kfor(n=2;n<=10;n++) . e& B" Q+ G3 F6 k! h
{
/ u1 d: y& [7 F+ i, Vsn=sn+2*hn;/*n次落地时共经过的米数*/
7 w& f% |$ O/ z3 F6 i1 E+ L" t7 Khn=hn/2; /*n次反跳高度*/ 1 ?) G- y, `2 T$ b5 t+ C/ y
}
0 r# H  [3 {$ J/ ^. n. X2 A, Mprintf("the total of road is %f\n",sn);
. t4 S+ Q9 W" X: X9 J2 w2 W2 {printf("the tenth is %f meter\n",hn); ; x' A# Q4 ]7 N+ H8 U, m
}
【程序21
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
: `  X/ o5 f: K" D   第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下% n: Q- N) h' ]  u, Z1 n) |1 v
   的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。+ a, w/ M# \, O1 d! t
1.程序分析:采取逆向思维的方法,从后往前推断。
4 z( J& H3 U" q% D7 {8 Y: _2.程序源代码:: I4 X4 |2 t( w: D9 x# L' e
main()4 i+ y0 L4 U. }
{3 D3 P1 ~: K. v0 X( T7 b
int day,x1,x2;
1 L0 v6 o0 D  C1 Z  m% wday=9;
5 B$ a9 G4 F, x; C& e& u4 u4 ]8 sx2=1;
# |2 f6 M$ d7 S, ]8 V" t8 Xwhile(day>0)* X! H7 w$ A+ t" T7 S; Y- x
 {x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2*/( J+ j1 ]% R) g0 n( `9 p
 x2=x1;
6 T  z# @) _. I" { day--;
# d$ G5 ^4 l% P }
0 \! g3 z/ y7 ]# M( dprintf("the total is %d\n",x1);  h0 N  Z" |$ H. N
}' d. u' R8 F7 W: p2 R
==============================================================
" s4 q/ K4 W8 ~+ o7 f* \1 ]【程序22- D0 E& H8 l2 a* Q) f
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定
& X9 p/ f" l4 [# n4 g2 w   比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出
2 @% s  R  x  D, _   三队赛手的名单。 9 s! y$ h! j/ Z4 _# I! u  }! F2 P
1.程序分析:判断素数的方法:用一个数分别去除2sqrt(这个数),如果能被整除,
6 j5 N9 f  O) [% q2 {$ {' o5 g( S      则表明此数不是素数,反之是素数。       5 n# z' O3 f7 Z- `' t8 w* p
2.程序源代码:9 @- y4 a* Q2 K( }7 b7 H0 ~
main(). V2 O! g. t* }$ ]' `1 v- s( C+ J# Z8 I/ e
{
, N! N  i7 J9 p- M) g: w% rchar i,j,k;/*ia的对手,jb的对手,kc的对手*/% O2 Z0 C$ I0 c: f. f# n
for(i='x';i<='z';i++)
/ a) I1 m4 D# {: j5 j' ~ for(j='x';j<='z';j++)8 S. c. h  k  @( Y+ i
 {* g+ a0 X4 v% S9 C: M% Y
 if(i!=j)
. W4 A% x/ B2 d/ s; K4 `+ {: d  for(k='x';k<='z';k++)" G0 i+ I" ], {& U+ c
  { if(i!=k&&j!=k)
8 w. U3 |# ?6 E( h   { if(i!='x'&&k!='x'&&k!='z')
' ]% [' c( I2 t" m/ T   printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);% ?5 A3 R$ g) O$ ?3 f9 g: ~
   }
8 H" g& B" ?* F5 s: Y9 G  }
# _, Y' R8 u* ?$ _5 d }
: x& p0 X, ~9 W9 R' I/ G8 r}% O% n9 e4 Y, ?9 n5 O  d& @
==============================================================0 g3 o  ?9 U5 O' {/ b& j
【程序23
& u! ]% w5 ]& U' B. l- u4 O- a题目:打印出如下图案(菱形)
*
4 s6 r1 C2 P+ x% T***
" j& N  i! y; K# y  t******
/ p: z# z, R) D' a+ t7 X********
  y" J# J# [) i8 j******* }) X' L* \$ T+ z0 u/ d4 r& z
***
  z5 y, i7 j! ]  m1 W- e*
8 s1 B( y( V2 N1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重1 C4 ~0 D- _/ M
      for循环,第一层控制行,第二层控制列。
2 t0 b9 L) ^; G6 a6 W' a* r) O2.程序源代码:' z* Z" e: L4 Y
main()
4 {! C9 P. F8 i4 ?{
+ x- }( f" w& [int i,j,k;3 `) c$ E+ @9 K* m# z
for(i=0;i<=3;i++)1 l" c. f7 o) A, @  @6 k* ~
 {
4 l3 Y& Q0 @. Z for(j=0;j<=2-i;j++)
: v* q% {2 O+ T  i  printf(" ");
# |! Y6 S6 t, U* m" `- i, N for(k=0;k<=2*i;k++)
+ n' v" J$ L. u. g" Z, e* P0 W& i  printf("*");1 h6 h. K+ p7 x& ], _) ?
 printf("\n");9 c5 S& Q+ S& f( K# v" i- S7 u
 }
4 p: Y8 V2 c0 y$ r( Pfor(i=0;i<=2;i++)
- P# p( c! _0 c$ J* ^. V {
# A0 U" H- G% ?7 ]6 N6 {; P( | for(j=0;j<=i;j++)
* Z- @; B9 C( \3 U' N* l$ ]; j  printf(" ");
4 q! f- p. Y/ N3 p' f for(k=0;k<=4-2*i;k++)
& `. [, ~4 l# p2 \4 Z  printf("*");
$ |7 T0 \  \/ ?; a: h printf("\n");; w; S% e; Q( W
 }
9 y2 ^% O5 K, d; Q}/ l3 C- _9 {. c
==============================================================
  c5 s% F% \; K9 A& J【程序24
' V8 _8 x/ P' Y4 @* p( [8 _) q/ I- @题目:有一分数序列:2/13/25/38/513/821/13...求出这个数列的前20项之和。
9 [8 \( [* w% m9 G" w1.程序分析:请抓住分子与分母的变化规律。 / s- m* m5 b# r& ]4 D0 ?. t& ]
2.程序源代码:
# V$ e) T8 e# t4 G  \main()
% r+ T* x# h8 e9 H: B{
1 G# q: J& z: g. c# [/ G, fint n,t,number=20;" ^1 r# I% T$ J( }6 L/ u$ [: J
float a=2,b=1,s=0;( X3 {5 X3 S" g, L. i2 |
for(n=1;n<=number;n++)
# D) H; V5 L3 I8 l: D {7 o4 @' p0 H$ J: c
 s=s+a/b;
7 r. V9 F# W& r0 I; V; K! n t=a;a=a+b;b=t;/*这部分是程序的关键,请读者猜猜t的作用*/
/ X, t# x3 Z+ l) D. o% U5 o }
/ M2 I5 x& O0 ]1 J8 L$ v- gprintf("sum is %9.6f\n",s);$ t8 `0 e' a- G# B9 A$ R
}& U# ^2 J9 W9 ?
==============================================================
+ ~9 h+ V/ v9 B7 ?【程序25嵌入式学习企鹅要妖气呜呜吧久零就要
# x/ k2 s0 o. V$ Z题目:求1+2!+3!+...+20!的和
7 ]$ C. f3 Y) ~1.程序分析:此程序只是把累加变成了累乘。 & ^7 `4 m( \% S/ L; L+ [
2.程序源代码:
7 N! \7 x6 z' C* d* dmain()  P% G! C# c1 Q% Y8 c$ p
{
9 k6 ]) [* j! [+ c2 X7 Nfloat n,s=0,t=1;) V6 w# ?' j+ z: Z
for(n=1;n<=20;n++)5 F" {" K7 [; x
 {5 C8 N) ~: j1 l- F; N/ V
 t*=n;
" n. C* O6 U+ }, v$ d0 U( N s+=t;
! N5 v' j* |6 b7 { }( [% m" G" B8 A9 \1 `( J
printf("1+2!+3!...+20!=%e\n",s);( R% a! I( Y' y4 x7 s, a
}
9 \  {1 B" o6 y; U+ u4 J==============================================================) o" G& N" b& k& f9 N* w
【程序26) ?" s0 u# {! t5 u6 T8 X
题目:利用递归方法求5!
- s+ D5 O. y9 d7 j; |1.程序分析:递归公式:fn=fn_1*4!
+ |$ x) v" |+ X! F2.程序源代码:
4 a6 p( t) n; A- @0 b3 D6 |#include "stdio.h"
- G" E5 X/ |7 C3 h' \1 Nmain()
8 Y' C( o$ B9 `! O4 h1 k{5 |5 s; Y- ]- o, }( e! U1 {
int i;
( W4 x( h, z( Sint fact();
) d0 c0 M5 Y' L# ^for(i=0;i<5;i++)$ N) ], \0 r* C5 _+ Q" L. o2 Z0 D
 printf("\40:%d!=%d\n",i,fact(i));) H# \* A0 r; l0 Z
}
5 B+ f6 a! M9 h3 c7 |$ p6 Zint fact(j)
9 N. Z6 o7 v( [  X8 qint j;
! y& f8 ^& {* H- l3 Z0 R{! ~2 g( s7 f9 [% n9 Q0 S: ^2 ]* `6 g
int sum;
; j2 a: u. ^$ X# g$ Nif(j==0)  `8 o1 S) z$ ^4 E
 sum=1;
9 V: [  m5 b& J0 {else3 p! B5 s% t; [
 sum=j*fact(j-1);; E5 c4 i$ G) X7 g, \+ F7 o
return sum;% g/ t' ]- W  X; P& _+ L
}- @, ~$ ~. D5 R
==============================================================

- |# i& A# z9 }7 d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2025-2-1 04:08 , Processed in 0.061566 second(s), 33 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表