找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

C语言经典算法16-26

[复制链接]

114

主题

136

帖子

1000

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
【程序16" _2 j9 A1 B% |& O2 ]* k  f2 C. H
题目:输入两个正整数mn,求其最大公约数和最小公倍数。
) x8 v# b7 V# X' Q
& ]) m7 y" v/ |1 `
1 L! i8 m, z) \0 a0 S5 L4 [7 G$ F
作者: zhlei81 2005-1-22 11:30 回复此发言 " m# U. z: A7 m9 k6 H0 V3 G

, {' [' U: N0 k% L--------------------------------------------------------------------------------
/ \& g3 y- k+ h7 r) u$ R
- o8 I# }" D5 y+ H. [2 f4 回复:经典C源程序100. U/ r, O  P" f! e, o' @
1.程序分析:利用辗除法。 ! D' l: j4 q1 w
2 M  z; Y" M, A( B" ^6 y3 p
2.程序源代码: ' a8 W, [4 O6 u3 b4 S' _3 C
main() + v! O- c" Z+ K
{
$ k: C0 ~2 \1 {0 Oint a,b,num1,num2,temp; " m. N# i$ p( K; g, {  m
printf("please input two numbers:\n"); # |; I, B# U# ?/ ?" o, ]
scanf("%d,%d",&num1,&num2);
6 {8 U/ q. A& P+ [if(num1 { temp=num1;
8 W0 \" Z8 l1 Z7 Q" _' D' inum1=num2;
. n5 ^  ~$ j/ H/ _& m+ gnum2=temp;
+ V/ W; @! l+ v" t) ~$ B; E% \5 x* W}
# }( {' A# C  ?: Ra=num1;b=num2;
% W7 l4 n/ L% C  ^0 M( }4 |while(b!=0)/*利用辗除法,直到b0为止*/
; C: U% ^' K# j) y0 Y- q. t( H7 W{
* f0 i1 d5 i. |$ a2 _0 Htemp=a%b; $ [2 Y6 P3 S/ ^2 Z' j2 a9 q
a=b; 1 d  x1 l4 Z1 f. Q
b=temp; ) t% U7 _' K! h" H& ]
} ) u# e% c: Z* D8 c* k7 E
printf("gongyueshu:%d\n",a);
6 J4 x' t3 Q& }4 }printf("gongbeishu:%d\n",num1*num2/a); ( P* d1 @- n4 i0 D9 G
}
: p( ^' z$ i; i& s* P& ^' Y==============================================================
6 J! B4 u* C- ?【程序17
3 _6 H# I2 |6 ]* J题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
3 ]* i. L( H' B1.程序分析:利用while语句,条件为输入的字符不为'\n'. - q1 w% {. E$ B9 g: B# T! j

+ ~" y3 b5 f9 r2.程序源代码: # \. P, r. ?' }2 U) b) [
#include "stdio.h" " ^0 Y7 V" D. F7 Z* U
main() ) ~/ h4 ~. F, f
{char c;
7 e; \# s3 c3 O5 @' S. p, O  Cint letters=0,space=0,digit=0,others=0;
: z0 m5 N2 a! Lprintf("please input some characters\n");
( z( \+ L" o1 {+ j2 vwhile((c=getchar())!='\n') 2 T/ K) `$ H: z
{ 9 q% m7 q- ?0 R: ?
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
- E% N9 m/ n' d. l/ v0 r5 E+ nletters++; # G/ o0 x0 G* x3 }7 ^* W4 q
else if(c==' ')
% K" V9 L& W3 {' N9 H/ x& Zspace++; - l9 j9 ^$ O$ n' D! C
else if(c>='0'&&c<='9')
3 \3 \7 n7 D! h$ v5 [: E+ S+ j% Gdigit++;
5 @3 L! M4 v2 x% q4 u4 relse
- T5 z* Z) k% }4 Vothers++;   E: u) V* d+ |$ O5 V
} 7 |* t3 X/ o) _5 ]+ [+ g8 c
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters, 7 N" t+ D* n' s3 h9 g
space,digit,others);
# L$ g9 G3 U7 g, Q, v0 k  }} 2 P% x- }. c" `; f% t" \
==============================================================
5 P" T" i. o' s【程序18
* u  {- r+ d, o题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时 , y1 p+ m' }8 h4 I' j
共有5个数相加),几个数相加有键盘控制。
+ R; M1 [6 g8 y; v) e8 A" o' b1.程序分析:关键是计算出每一项的值。
" B5 p9 f3 ]6 f# ~, E2.程序源代码:
: X2 x2 D; k) `" P, N9 W9 B4 Xmain() * p8 r. _. s2 R% o9 m. ^
{
0 D5 v6 W) F& C. O$ f% xint a,n,count=1;
; h* \1 g( i' }/ [  ulong int sn=0,tn=0; 4 t! {+ G5 h+ ?+ t3 n
printf("please input a and n\n"); 4 `' }# l" _1 g/ z: k
scanf("%d,%d",&a,&n); ' V, b7 N6 O3 w/ i
printf("a=%d,n=%d\n",a,n);
- L3 i( p- J" _0 W: |; y; j0 ?while(count<=n)
, b5 x* O' f* d( ^{ / @% ~, W1 w  x& |
tn=tn+a; 7 a0 {% P/ ?4 v
sn=sn+tn;
9 v, t- D( X. Aa=a*10; * x# @3 R# p" W# }# F
++count;
2 ~5 j, |) z# R  c. L' B}
# U9 u/ d! b7 d* xprintf("a+aa+...=%ld\n",sn);
% f$ L" N8 C3 H8 g) S4 d}
7 U) B- N2 y; Q4 Q( z============================================================== * z( X0 {7 X# g, t) |% `
【程序19
5 C0 V% W3 S6 C; q题目:一个数如果恰好等于它的因子之和,这个数就称为完数。例如6=123.编程 8 u7 {+ }3 H) m3 L: B5 K% u( C& P
找出1000以内的所有完数。 " t/ A7 y: t$ T5 f% s
1. 程序分析:请参照程序<--上页程序14.
1 P% E) e* _6 e. u1 q6 J2.程序源代码: 5 Z, X2 [2 j0 T! V
main()
9 L# L- z) i% q{
( S; ^1 E9 k% k5 B: ]7 y# Rstatic int k[10];
# J5 D0 |- l( ?9 e7 Kint i,j,n,s; : X  t( O5 m5 ]. l
for(j=2;j<1000;j++)
# X6 |5 r4 A* {7 w, b{ ! o8 ~3 E, g8 l# A2 G" d% S2 \- x
n=-1;
+ L$ ]+ H7 c* {' ~s=j;
3 `" W8 F8 z- Qfor(i=1;i {
1 Z6 {! d, c! s3 X* b& S) l! i# g$ b. {if((j%i)==0)
9 J- A# L  D! A  E, o{ n++;
: ~* I0 @. Z' ]& z& ss=s-i; 3 T) _& e" f# s8 o, t" G, i2 b" O
k[n]=i; + z- \9 a( _. Y* q0 ~
}
1 Z5 ^0 ]# g- `& |8 }+ S: c: C4 t}
' F2 Z* h; r& }( lif(s==0) . U( y6 p: n0 h% ?2 t" @% P, ~1 _, I* Z
{ . K- }$ R1 k! F/ C% v
printf("%d is a wanshu",j); 8 ~- V+ |6 e) m  B9 o5 y4 ~0 `  L7 ^5 K7 V
for(i=0;i printf("%d,",k); " |8 f( N. ^5 \/ I: U3 C
printf("%d\n",k[n]);
2 L7 Y: m+ N  s; t}
- r" B% H3 H$ S: k+ I4 f4 c: h}
: f: X3 I. U  a5 o: ^; p}
5 s, Z- s* M, }/ v============================================================== ( ^8 D. U. m3 m  M: z4 h
【程序20
, c" M! t% O7 u. ]; @4 k0 \题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在   }6 J2 S: @, s, H8 v, [" F
10次落地时,共经过多少米?第10次反弹多高?
& ~" X& q  {  {5 F9 d9 g1.程序分析:见下面注释 1 Y& y2 t3 s( J; j5 q/ G
2.程序源代码:
3 ]; \2 V* V1 g  A2 \- i$ @main() , M+ O) S8 P, L' o6 o/ Z9 `$ A3 U
{
) X% Z) ?9 ]+ m  I% Sfloat sn=100.0,hn=sn/2;
; z! D5 L7 [9 G8 E! c& xint n;
8 @8 y0 x/ L' ufor(n=2;n<=10;n++)
( ?. n. B* L6 ^: U7 z{
4 J) h# |$ T, w( fsn=sn+2*hn;/*n次落地时共经过的米数*/ / y" o; G( @# e2 ]/ n
hn=hn/2; /*n次反跳高度*/ $ K1 z' V& `; w2 w, U
}
9 T/ a2 B& T0 ~/ l$ s( i3 c" Xprintf("the total of road is %f\n",sn); 2 T, }0 E5 ?" x- H& }( D
printf("the tenth is %f meter\n",hn); + I! h) R% B% Q% {$ T) `: H  i
}
【程序21
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个0 q  s& d7 H9 z/ `
   第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
7 o; Q  K5 Y# G, b1 i   的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。1 Q3 }( u4 c9 C
1.程序分析:采取逆向思维的方法,从后往前推断。% ~0 v! C" P2 O5 h# c; z
2.程序源代码:) G' p9 Y2 q! r3 E+ I% H7 l7 ]5 X
main()
0 P7 c2 R& b2 N2 A* [, J{4 l; _8 I% G3 y0 e/ F9 Q2 v
int day,x1,x2;8 }8 G4 Y. p4 q, _# y: n
day=9;
; B) J$ _& s+ X% t  E2 Wx2=1;
6 R/ {! x* D, M& z# @" B, A- g( _: ywhile(day>0)- G4 r2 ]/ f) L0 G- }
 {x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2*/
- M9 |' @: s$ T4 j. d x2=x1;
2 X! L( K. ^: [+ P. g day--;; L: C- @1 u1 E
 }  z, J* A7 t5 [3 r$ p, T* W
printf("the total is %d\n",x1);5 g  U& t1 R8 p. h2 L
}1 Q8 u5 K1 Y: I; k& ?7 W
==============================================================
/ |( E& r6 F- u4 e【程序226 r) n2 Z6 L* _/ P2 u* h
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定' h4 j% l3 S6 {5 k: r
   比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出2 z4 J3 s+ P% U- U* G% s  X/ N
   三队赛手的名单。
. B9 X8 {( \8 V7 a% L6 n1.程序分析:判断素数的方法:用一个数分别去除2sqrt(这个数),如果能被整除,6 @# M# ^( x* h& c5 D* Z
      则表明此数不是素数,反之是素数。       3 R8 e2 N! X# u. v
2.程序源代码:
) \* W& X- A# ?3 e: Umain()% ^8 q$ W$ \) D  a/ U' p3 M& {
{
5 \8 y0 Y8 z4 ?& ~& m/ R' achar i,j,k;/*ia的对手,jb的对手,kc的对手*/
& c) x3 T. y) Lfor(i='x';i<='z';i++), h0 u( N5 e; T
 for(j='x';j<='z';j++)" K( |$ F& Q: Q
 {
$ {4 {5 E! U- C3 X if(i!=j)- q* F: N1 C: L% b2 I+ B) ?. s
  for(k='x';k<='z';k++)
% q& S8 i0 S0 v4 a2 R, e% ~1 b+ p  { if(i!=k&&j!=k)
2 {, @) {" y- y8 G+ b, k3 [$ j   { if(i!='x'&&k!='x'&&k!='z')  j8 `' r. v- r& x: R! ~3 K6 h! ^1 F
   printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);9 z% O, j, z8 y8 w
   }
! n$ c/ y: T8 g& r) H- |0 l! V, h  }
+ Q- o' n( t3 u3 T. J- q) j }# K: R! S$ K/ W
}
  |, c0 T6 C8 ]( I) f3 v6 q==============================================================
/ d( y" n6 b; O* f+ T; [7 c【程序23
, J/ D! [) Z: N" W$ p题目:打印出如下图案(菱形)
*
$ k. y# c8 }6 K( W***. A. j" P: H  @% n: `* L4 X
******+ L7 W& b4 }6 H
********' p2 _8 N. [( |$ v
******! Y2 X: f3 z' T. F8 F6 O
***
8 N0 \! M( i& p6 ~3 q- A*$ _# Z0 R% _3 c, y
1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重
% N! C/ U8 j% x/ e      for循环,第一层控制行,第二层控制列。 6 \( M2 M3 w- W, |4 F2 O8 E8 A( l1 F
2.程序源代码:! P& c( L4 i" D
main()
: ?+ w5 h! d! s* N. c{/ d. l+ Q% d4 z5 L7 j
int i,j,k;7 h8 ^2 c9 b1 H9 S
for(i=0;i<=3;i++)
# z3 b) f- J0 }; ]7 g. E {8 o8 G3 X) n8 k' {8 }7 X7 f
 for(j=0;j<=2-i;j++)+ ~( Z' p7 k! a, v: K
  printf(" ");/ ]3 J2 j" T5 M5 `0 T6 ]
 for(k=0;k<=2*i;k++)
# v. Q$ J; [' j* s2 T. h  printf("*");- b* x) b7 \  s$ b+ _$ I" h
 printf("\n");4 Z. |2 C2 Z) }1 w+ l
 }. E5 m7 b6 _/ G. |- x
for(i=0;i<=2;i++)7 P" I9 v: U3 m% N- w7 j
 {- D% @5 }& w7 m) q4 C, n1 E
 for(j=0;j<=i;j++)6 G' ^" O' ~; o# C$ n, K
  printf(" ");
* @. ~0 P4 f/ |% O5 Y for(k=0;k<=4-2*i;k++)! V* Q! h  i7 {+ v. @. y- K0 Z4 p  G* K
  printf("*");
; D, n4 O$ a) L2 L0 [. _# ` printf("\n");
& L) ]& ]/ Z! z- \' Y6 Q }: B3 ^; L/ E- \3 t" `! `
}* _- j/ g" U& a2 H3 k
==============================================================7 u  ]  T4 S8 a* |1 z
【程序240 B) i! [3 k0 f' Y- e' F
题目:有一分数序列:2/13/25/38/513/821/13...求出这个数列的前20项之和。
! ]) m+ [2 @/ b1 k3 }1.程序分析:请抓住分子与分母的变化规律。 6 @: E/ x1 F0 e% v
2.程序源代码:8 J3 J  i) a& G# A5 O/ D0 e* {5 S
main()$ k" S1 [4 i) J- E8 E: H+ H6 Y
{/ g9 T1 [* `4 K/ W/ @7 k. F
int n,t,number=20;! f8 r6 J9 b. h( U, }9 m8 `! D
float a=2,b=1,s=0;
7 B" I6 f& ?4 d2 t8 ]% S! G) m/ D, ?for(n=1;n<=number;n++)
4 c9 h  ]% D; C$ x8 ^ {
, B8 ~' V1 T" I5 o s=s+a/b;; y& R$ s: R; I5 D( a* e% _0 ?
 t=a;a=a+b;b=t;/*这部分是程序的关键,请读者猜猜t的作用*/. M; K3 l( ^. F' I
 }5 ?9 c0 M7 a5 f" g" K& y
printf("sum is %9.6f\n",s);2 ?* k7 D. C+ T: \1 j9 {* @
}
+ c; l: C* O9 t! i( X& C& R' ~9 Y==============================================================. K& w2 g* X( D% P! N, G% A
【程序25嵌入式学习企鹅要妖气呜呜吧久零就要
5 K5 b5 p/ b& [题目:求1+2!+3!+...+20!的和
$ I3 ^5 K, T$ c2 `- D8 t3 g" ~$ I1.程序分析:此程序只是把累加变成了累乘。
0 E/ \7 r' N4 A5 {& R( @2.程序源代码:' `9 r2 f& w' q
main()
- `6 r4 \0 ?5 h8 p; t& P+ i3 m6 ~# j+ \{
$ P) X  i8 k" B  P: afloat n,s=0,t=1;
  {* M3 P) E4 `  Y/ m- afor(n=1;n<=20;n++)+ m$ B; y; C8 z2 C. Z
 {2 |# q1 j# g4 i* x! D
 t*=n;2 E# S) C/ s- k* G
 s+=t;; O2 r$ ^( K$ U' V4 O5 F
 }- g5 ]$ i& U9 ^9 W: h/ G0 Z9 n
printf("1+2!+3!...+20!=%e\n",s);
% K3 Z( x8 }' o}9 ^5 S/ I  H  G' B
==============================================================
) e! I0 ]! {; n4 K- v, z  `5 T8 V【程序262 r  r- i2 K* w: \
题目:利用递归方法求5!2 D6 h7 H: b0 ~
1.程序分析:递归公式:fn=fn_1*4!9 C3 u* n! q2 z# y8 w
2.程序源代码:
# q7 _4 s. u, H7 j8 X% l2 X#include "stdio.h"2 B1 [  u& n! m* i' v) d6 h
main()
1 M7 r% A* a' }- f0 v: z# N3 k- Q( r9 U2 O2 u{
  o) G( G' c0 W8 y7 F" y0 w' Y- tint i;
  z6 a# q% c4 U, H  f# }: L/ Zint fact();
5 f; a; V% z9 ?, M/ o3 |for(i=0;i<5;i++)4 X. F: y" g8 P/ r6 r' B
 printf("\40:%d!=%d\n",i,fact(i));4 n/ C( F# v' B" h% m! Z2 p
}, |0 C' h+ V0 Y! {" X
int fact(j): ?! n7 s7 m1 U$ @7 L' L9 _
int j;
9 f% E7 I6 B" X4 {8 I4 a& B{1 q/ [4 f+ C+ z: r% S. ~3 [
int sum;
4 @' V* y: c4 H$ Cif(j==0)% C' B! H/ ]+ g8 A6 L4 g
 sum=1;
2 Z" m0 p, F6 L4 U2 delse% p) w9 c" S: ?3 ?
 sum=j*fact(j-1);
. `! i$ z* z" }return sum;) o4 E" h$ q; b" h  \& @
}
% I7 X+ A- ~4 a" Y==============================================================

9 d2 j9 C# X2 w( z0 s/ [: Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-11-3 22:24 , Processed in 0.103134 second(s), 33 queries , Gzip On.

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

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

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