找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

C语言经典算法16-26

[复制链接]

114

主题

136

帖子

1000

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
【程序16
+ [6 j$ W* ]/ G& |* s2 S, A题目:输入两个正整数mn,求其最大公约数和最小公倍数。 5 h" a8 g6 B% t, A8 n. }# {: l
4 Y) S# g( E7 B( a. I  V$ J

) s1 q8 S* @7 a1 O1 N) E
( t9 m5 m0 p4 q6 L/ Y. G7 c6 ]作者: zhlei81 2005-1-22 11:30 回复此发言
; D& O1 U# K  c' t' `' D
$ s/ [/ l& u- `1 ^$ N-------------------------------------------------------------------------------- , ?6 D1 k4 ?9 Z+ S. [# T/ j. p# `7 |
8 N; g/ u+ z& H  [; E0 _
4 回复:经典C源程序1001 b$ E5 X7 o! \5 S, G. @4 ~
1.程序分析:利用辗除法。 & a- c# r; H: K/ ]; I
' q$ l  j2 V' P$ M$ _
2.程序源代码:
9 ]2 e5 Y5 {: T6 [1 M* Zmain()
( K! s& S# o& v, V& n$ v' h/ K& G{ 1 m9 c3 ?6 P9 t4 I
int a,b,num1,num2,temp; 2 e5 w& A( L' e0 Q4 w
printf("please input two numbers:\n"); . o+ C8 v. k0 x7 f$ b
scanf("%d,%d",&num1,&num2); ) J; C! I: _7 C6 r0 r. f$ f* W
if(num1 { temp=num1; 4 o, N5 [# d2 u0 u: K  g- w& x, n  q
num1=num2; 3 {) V9 c0 a: e+ ^+ n; e4 q
num2=temp; 6 E+ X* O8 ~# k7 Y! d* n% z; a+ S& P
} 0 {, i2 y( K# M; A0 y0 [
a=num1;b=num2;
9 U& f/ x8 a4 z6 Hwhile(b!=0)/*利用辗除法,直到b0为止*/
; m1 X" d) n" q& Y7 e" b{
; g' i+ @$ b6 w0 |; Vtemp=a%b; 0 M3 W$ \( ~* r2 c% s# J9 R) I0 i2 m; t
a=b; , b' p& P9 i8 B2 g+ t" Y8 ~! \1 D
b=temp;
' {# _: Z3 |( ]% p8 w9 v} " K. c6 P  J6 U1 h' o5 f! f% ?9 `
printf("gongyueshu:%d\n",a); 3 y- x/ r& \% p
printf("gongbeishu:%d\n",num1*num2/a); 8 |0 s2 \' y, ?7 w
}
9 s3 V( ?/ I% h' @0 Z3 r/ M' t0 L' v5 w============================================================== 2 C5 a2 E4 _$ R$ y
【程序17. p' e& w1 i9 \8 R6 ?4 Q5 h
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 5 S/ }, r, W3 A" h0 Q2 H& e
1.程序分析:利用while语句,条件为输入的字符不为'\n'. % {% }  s1 i0 [" s" [) l- [& [" E0 B
  u, Z( U. j& b9 D4 w9 ~
2.程序源代码: 3 L& @5 h, Q) j7 L. y+ _
#include "stdio.h"
. Z* b+ `0 C2 V( |1 Z) ]: L7 imain() ; n' p6 F! _$ P- R: _! e+ N2 `
{char c;
2 T6 H& [& m# S$ U7 E) Nint letters=0,space=0,digit=0,others=0; 0 \3 X) D. F0 \# `0 Z. \
printf("please input some characters\n");
0 W# |" ^* u! \7 T1 _! |  kwhile((c=getchar())!='\n') / m1 J0 U  m3 g* R4 K% {: Y; ~: |
{ 6 o+ e" \) P, W3 t8 w
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
4 O; K6 h% ]! J! Q( Vletters++; ; c( K1 S! a- J9 V$ F3 c+ d
else if(c==' ') ( ?. g% w$ O0 ~6 T
space++; % q" E' c9 k! h
else if(c>='0'&&c<='9')
% }" L% B' t. P  kdigit++;
! b- E, v6 t; z! ~& {; s, S0 |else
4 ~* ^* A# [8 Rothers++;
0 W4 @" |( F3 V}
5 X! _( \6 W! i+ @! K" L6 V+ \printf("all in all:char=%d space=%d digit=%d others=%d\n",letters, . Q* }. B1 Z; k: C; o" p9 v
space,digit,others);
- v$ z6 F% k& W2 Y" \# H} 5 P5 \4 z2 V& ~% P! W9 T) u
============================================================== 7 D" x: A5 J. q5 x! o: r
【程序18; L6 N/ t5 H8 p- i3 L
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时 2 L& Z# I' L% ?9 N3 T6 I7 F
共有5个数相加),几个数相加有键盘控制。
* P/ _: f8 G( o$ t; O1.程序分析:关键是计算出每一项的值。 3 i7 z) J+ i1 A1 O- w/ p9 t
2.程序源代码: 3 U! o8 @  M. m" c- m5 G
main() * h, H# U1 z4 S1 C9 m9 e/ n6 Q& X
{
# C: F+ @& S2 C4 F* _  sint a,n,count=1; 7 C/ G% f6 @3 g1 n- k; k. U
long int sn=0,tn=0;
6 g2 C! Z& D2 n6 B5 T; g' Oprintf("please input a and n\n"); 0 z  O1 m* X) `& _+ g# j% u
scanf("%d,%d",&a,&n);
# M6 {1 `4 o' y6 ?7 f; ^' |, U. Uprintf("a=%d,n=%d\n",a,n);
5 u  B, K1 f. m" uwhile(count<=n)
$ l+ N" e% u& O# y{
' C0 M1 v" y* Y" O% g" ^* ]+ |tn=tn+a;
4 u7 K8 @" J# x6 Bsn=sn+tn;
1 f  y1 M4 G8 O' a6 g: |a=a*10;
7 {# K4 Z, G6 U# ?3 p; G3 I++count; + q4 q2 R( K8 W( C8 J
}
+ U# U. W  g# `6 Y/ zprintf("a+aa+...=%ld\n",sn); 3 z: n  Z9 {! J6 X% X" ?! a
} , B# \, P  S& q
==============================================================
5 B4 G8 f2 l/ l" W- t* a5 e【程序19
4 L) K6 Y" a" }# W题目:一个数如果恰好等于它的因子之和,这个数就称为完数。例如6=123.编程
$ \+ f/ L# M, c1 Z& K2 i8 i找出1000以内的所有完数。 6 Z  G# a1 ~. C/ ~+ X
1. 程序分析:请参照程序<--上页程序14. - X1 T+ a6 w. d: F1 D- w6 \0 x
2.程序源代码:
9 F& ^* x0 W7 smain()
3 g. ^' d5 H6 w7 ?: v+ [{ 3 O$ h: s  h. g, V" e* S' o# L
static int k[10];   L! a5 p% @3 C$ u, p3 ~9 A; {
int i,j,n,s; 7 [8 Y7 g4 X  v* \
for(j=2;j<1000;j++) 8 H8 @; z' C0 K& y( {8 B
{   R; q# H5 X: w. L
n=-1; ( D" B- |! p4 O% t0 c1 R! S
s=j; $ g# A$ e1 Z! ]% r
for(i=1;i {
3 l# d4 S0 l# t$ ?- |1 G4 kif((j%i)==0)
0 `2 [! {4 T. g6 t# P! F! g) z: R& d2 z{ n++; 8 j, E+ Y! z5 G% v4 D. \
s=s-i;
) q6 t# @7 l( [) m: ck[n]=i;   T2 V+ f4 f: m& x8 d1 |
}
; x% _7 T6 d" K/ ]) U2 M}
( L" L0 Q, I  j1 d+ x$ rif(s==0) ' s! z& `& A! n/ X
{ + C9 r/ @% e; D6 Y
printf("%d is a wanshu",j);
3 K1 l/ @0 ]& v3 Cfor(i=0;i printf("%d,",k);
/ F8 t" j  B$ {3 k. D; rprintf("%d\n",k[n]);
" Z# L1 C& E; s}
. D5 U" m1 q  U  S0 V3 ~}
5 H/ z, h6 D3 o& G+ E}
" S# ~/ y9 q4 `6 N! z" q==============================================================   F4 S* e5 a4 }0 o
【程序20
/ y8 m5 \% z1 R% p( }8 n题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
+ G+ F) h4 p* ~2 K8 P$ m3 h9 ]10次落地时,共经过多少米?第10次反弹多高? . B; q% A8 G* x3 I
1.程序分析:见下面注释 ; U  z3 V" m5 I  \, F8 t
2.程序源代码:
$ q: M, m% Z8 a( c6 G( omain() + i9 v% Y3 X' \7 o7 j1 Q) b$ a( u
{ : g* G' {7 K+ l# H! J" J( H* Q: Y0 y
float sn=100.0,hn=sn/2;
" h, p* i1 f! d( ~int n;
% M* x; k' u5 \! a/ M7 s6 G: Tfor(n=2;n<=10;n++)
% @4 G# |7 g& \# A{ * r! N1 \4 d6 a% j7 {3 k+ u
sn=sn+2*hn;/*n次落地时共经过的米数*/ ! P! p. q& D- v  O
hn=hn/2; /*n次反跳高度*/ " I3 W! S* c4 b6 Q
}
! s2 k  L. x6 ~0 pprintf("the total of road is %f\n",sn); / T4 D. B# }5 g+ b/ t
printf("the tenth is %f meter\n",hn); 9 Z. d' K; ]. K( x5 V1 H
}
【程序21
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个4 _$ f" U0 N% E+ \- S7 @/ M
   第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
) A7 Z4 a/ ]! V- q   的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
- H0 x2 W& c  `0 }3 X, [1.程序分析:采取逆向思维的方法,从后往前推断。! J8 e" S: b: N
2.程序源代码:
. q" m" S( \$ X3 `* q, Cmain()
+ B  m% U: _; H* S- r3 X4 X{
# x9 _* n+ G0 pint day,x1,x2;! l# x5 N2 E& s& D
day=9;
3 ?9 Y9 N4 x$ j5 ?8 @: k- i# _x2=1;
# I! ], h! B9 j# F% _while(day>0)
9 |& w! h, R6 J" |' w {x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2*/9 f% C7 n) W2 F9 B/ ^) K" T
 x2=x1;
7 _  t; ~6 W( j; T( }. J$ L; _! J9 m day--;
2 X/ }, U  {3 D0 m7 j }
8 P. P& |; @8 ?; m2 I" _printf("the total is %d\n",x1);0 r* T3 C3 j5 u& Y; Y2 d+ j
}
7 @' z7 F# z: A0 D2 F' `==============================================================& S& m8 G. X8 ~, J, K# X4 t
【程序22
6 L. ?* t' N+ Q3 \题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定
) d. d9 M  G; C9 M   比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出
8 b# Z# w: a. |* ^; z   三队赛手的名单。
/ `5 a9 H& u- P  [; A1.程序分析:判断素数的方法:用一个数分别去除2sqrt(这个数),如果能被整除,
, {" L9 [$ z9 n" _$ ?3 D9 h      则表明此数不是素数,反之是素数。       
; O2 h% b' E; w2.程序源代码:9 y0 T5 o/ L! q1 u- o
main()* [9 Y  v/ J, k# X8 Q
{
( Z. b9 @. E. _" s3 p8 Y$ Xchar i,j,k;/*ia的对手,jb的对手,kc的对手*/% |, t* s* h: o! K/ T5 h
for(i='x';i<='z';i++)# i+ u# v: X5 H, X+ p' P. ?
 for(j='x';j<='z';j++)& @# b0 n  ?0 b% s+ A; W/ K
 {
* a7 Z6 H; g5 u; n' {5 ^0 }2 D if(i!=j); h2 h: O! I; e/ N/ }1 O" {
  for(k='x';k<='z';k++)
* @5 B  k/ p; R, W  { if(i!=k&&j!=k): L2 i  [8 C8 v2 h; t! U, D9 V
   { if(i!='x'&&k!='x'&&k!='z'): }  t' g) v7 |
   printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);* k  m) d7 r/ |; v6 O# ]8 ^
   }
( s- ]" `% K) |* B' q. s  }& _  r! ]( n- M8 O, R9 Q" Q
 }
' T* I. J, [) _. u: S; ^}' v, o, C* O, M6 a
==============================================================
" K: L" D  J! j2 d【程序23
; s- a8 D- Y5 h题目:打印出如下图案(菱形)
*
0 C: M) Z0 \  S! I$ C: t. V***
: B8 s/ G4 E9 G6 F' B$ X( ^0 c' V******9 P/ f: O6 p+ p  m/ C8 s. @
********
% z8 D% D) N4 r  j******1 ]3 j: x4 Q* f7 v9 |  z
***
& M6 H( r4 Q9 ]4 l! j. `5 E# v; H/ C0 j*0 C! q5 N% B" B; s
1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重& n, K  r8 h' {, J
      for循环,第一层控制行,第二层控制列。 6 E5 J; U# }/ z. h- @
2.程序源代码:9 ]( M) X4 s2 F2 W; W4 ^9 _; C4 S  l
main()
1 j" _6 k) R4 a{! h1 u. w8 s4 K5 b( w
int i,j,k;# h0 W" ?! F+ l* m
for(i=0;i<=3;i++)  y' [8 K! I5 W. v1 K
 {
" U9 s2 V2 m  t  Y for(j=0;j<=2-i;j++)0 `: h( m$ g* y( ^
  printf(" ");: M1 S/ L, e' ]1 E- P
 for(k=0;k<=2*i;k++)
( X  N  \, w0 |  printf("*");
& f# t0 D$ l: `- G- ~ printf("\n");
! s. V" d  [. P; i" X9 z }( N; b+ C( Q3 n- i
for(i=0;i<=2;i++)
; R) ^! ]  }/ L$ J {; C8 H# ]8 D6 [
 for(j=0;j<=i;j++)
$ f: q$ m- x+ A/ _/ j$ z) f  printf(" ");, l& n3 U- b9 ^' c( {* N) G8 w
 for(k=0;k<=4-2*i;k++)* A! q; i8 h( q
  printf("*");
0 U) e: ^' Z% N, Q9 K# e& w& I- N printf("\n");& O1 ~* {2 p. t: k/ R
 }
; V+ s2 ?& ]: l9 a  \- O# A}
$ k. u% I" k$ q4 T==============================================================% s. S5 N6 g' p  u  F" S2 _
【程序24! L& M; m, [( i; [( K0 [4 h9 Q
题目:有一分数序列:2/13/25/38/513/821/13...求出这个数列的前20项之和。% R( ?. |9 ^$ c1 Y3 p! A
1.程序分析:请抓住分子与分母的变化规律。
- g6 I) ^: ~' K, J2.程序源代码:
, L2 s6 o2 F1 x# h/ }* Ymain()
3 E1 q6 M2 z9 h' K+ _{7 t# z+ I# \9 y1 X: X/ J( G& z  \
int n,t,number=20;4 @9 l6 J$ a8 E5 o* n
float a=2,b=1,s=0;( R3 c6 t2 c' L1 [+ A, v
for(n=1;n<=number;n++)6 u- V$ h& E) R& ]4 M
 {
1 s3 U/ s1 Z; A0 c2 [3 ] s=s+a/b;8 O7 d& x: q0 X4 @2 N, c: f+ Z- p
 t=a;a=a+b;b=t;/*这部分是程序的关键,请读者猜猜t的作用*/$ r' w+ t8 c9 C1 \) D8 p
 }- k# q& h; T, Z! c3 f
printf("sum is %9.6f\n",s);
9 h- i. W  K' H: C" O& `: o1 i8 Q. {}
5 q- g1 y* h0 R7 o==============================================================
6 c! I* \! a/ v- p【程序25嵌入式学习企鹅要妖气呜呜吧久零就要
& M7 i2 M0 O9 Q) J6 u- I题目:求1+2!+3!+...+20!的和0 @0 K0 [0 \. M( s; B1 |
1.程序分析:此程序只是把累加变成了累乘。 " c# @) k: r* O* q
2.程序源代码:! A! V- F/ W% Y! U/ T( t: v' L
main()
) g) i% m8 A% g8 j% _' [{
4 M# ^- W* [  k0 ]float n,s=0,t=1;& y' {& m7 M; w! ~9 [- y
for(n=1;n<=20;n++)
7 r! A5 D- ?& i) r {
& E; ~, i7 Q3 t' o+ c t*=n;
* u+ n1 d8 e5 m9 c) }" R  e1 w  q s+=t;
9 x( c, J2 D, T) }6 ^ }
( ]+ I2 F" y. ]& Z. pprintf("1+2!+3!...+20!=%e\n",s);7 g8 k4 j; a4 T* {; Y6 G  c; g
}
2 B5 o1 [- s8 L6 n==============================================================2 `* z7 ]. W, J( \6 l" c
【程序26- E- D" M, J- X
题目:利用递归方法求5!
6 |! f1 `( J3 Q8 ^. }1.程序分析:递归公式:fn=fn_1*4!
7 _# {8 _0 z& _+ x3 y* l2.程序源代码:/ E8 m1 I& v& i
#include "stdio.h"
) k4 _  J9 }0 _% Y) y! G8 c% }1 pmain()
- D- `4 Q# q2 k' R" u9 ]1 Z3 O6 Z; G6 \{' G# w5 I" G; P# w6 S
int i;: v, z5 l& }5 g, {: ^7 Y6 K$ i
int fact();/ `+ Z; G7 F5 N2 I7 W5 |' ^( B1 P: r
for(i=0;i<5;i++)
5 s- u, z0 B2 G1 r' i; _ printf("\40:%d!=%d\n",i,fact(i));7 m7 h8 o0 q, Y& m" E$ Y
}: T- M* f4 z+ }/ G
int fact(j)$ H, x/ z; Y; ]1 ^
int j;
; {! ~8 j. I5 D9 X* S, }{
+ p  T4 [, n( X# H# Xint sum;
6 x) _- v, R1 g2 w/ wif(j==0)
0 x& L, v( ?9 E: Z sum=1;9 ]$ C) a0 N( @, i+ ^6 `
else
6 }) c4 ]/ b; T2 A* Y- o* t1 X sum=j*fact(j-1);
9 ]" c+ J+ I, g# b& s7 @/ O9 oreturn sum;* N4 R/ ?. m" K; C/ z
}
: M. R& d- ]& V4 T==============================================================

; S2 Z2 b* T* _1 d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

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

GMT+8, 2025-7-1 03:40 , Processed in 0.058632 second(s), 31 queries , Gzip On.

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

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

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