機械社區(qū)

 找回密碼
 注冊會員

QQ登錄

只需一步,快速開始

搜索
查看: 2728|回復(fù): 1
打印 上一主題 下一主題

C語言算法16-26

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2017-10-6 15:41:14 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
【程序16$ b$ q2 I- n; g) O4 A2 l3 A
題目:輸入兩個正整數(shù)mn,求其最大公約數(shù)和最小公倍數(shù)。
% ]0 H1 d) a: q- U  |4 V2 `( A- f( T7 m/ c5 |% ?7 o2 P& r& @  E
! ^+ v7 E7 F! T  i+ s5 A, Q

5 d6 h& w: o5 N) L7 N  {作者: zhlei81 2005-1-22 11:30 回復(fù)此發(fā)言
! n9 O9 l0 \1 ^0 q& ^/ U. ~+ m  f' x+ {% ]0 L# N
--------------------------------------------------------------------------------
" N+ ^* X1 S5 a' e" g. }' ]- m4 i
4 回復(fù):經(jīng)典C源程序100
6 L. ~( J8 u% d1.程序分析:利用輾除法。 , c9 @. I# P$ i8 C
+ h% b$ W3 ^+ B$ w* v
2.程序源代碼: 2 `0 ]# S1 g7 ]$ B  ~/ G
main() + F+ C/ h6 p- s5 C% s8 \
{
- o# ?6 k- \3 n$ j; R- {1 Gint a,b,num1,num2,temp;
7 i, z; K$ F" Z3 D: f) A0 ]printf("please input two numbers:\n"); . O: w6 Q+ v: `: X" R' v3 T# r
scanf("%d,%d",&num1,&num2);
( O% h9 l/ {3 ]4 @: o+ mif(num1 { temp=num1; ) C# i) n8 g0 \6 P  {
num1=num2; 9 Z* w: e. ]" B* c
num2=temp;
) z) {& ?1 |" r0 n! ]) \}
4 {% [% K7 w( {7 X/ qa=num1;b=num2;
& y" V# j$ n# _' @0 Jwhile(b!=0)/*利用輾除法,直到b0為止*/
) n% Z* X4 B, J! ]* z" X4 u{ ; Y$ n$ N, y* {. X, D4 J! ]
temp=a%b; ; Y8 B# p3 n# g# L. @* a/ u
a=b; 1 {. O2 ~7 }/ a7 F
b=temp;
, G( M6 T% |! E}
4 O0 {' G& C1 Y, X/ Gprintf("gongyueshu:%d\n",a);
) h/ J/ M! E- x1 @8 C& yprintf("gongbeishu:%d\n",num1*num2/a); , Y* H0 n8 ~. }, v5 h( u: O
}
  ^! [( B( f& j==============================================================
/ N! K7 h: I/ {- p【程序17
( f( j3 W+ a8 F- [; t7 d$ s( w' F題目:輸入一行字符,分別統(tǒng)計出其中英文字母、空格、數(shù)字和其它字符的個數(shù)。 . s5 y- v$ r1 x
1.程序分析:利用while語句,條件為輸入的字符不為'\n'.
  B! \0 }+ i9 A8 K, G" J$ F7 ~6 }6 G) l" ]$ J8 u( |
2.程序源代碼: ' d* u7 I0 a; k& d  k! ~
#include "stdio.h"
# V, V3 p* |$ }: }, Lmain() ; A% u# D5 l& m% }
{char c; 0 F$ }+ d; J0 R) |4 _
int letters=0,space=0,digit=0,others=0;
" L0 `. p8 N6 j1 B  j: h; Yprintf("please input some characters\n");
$ n- n5 v, {5 z  v' g% @while((c=getchar())!='\n')
7 L/ h; B8 j! [) i2 x{
' D( c! i0 A# x$ d6 J3 d0 D. `" D/ Pif(c>='a'&&c<='z'||c>='A'&&c<='Z')
3 m9 X, m' p5 `; h* ]% Xletters++;
9 v' U8 B% O, \5 ^/ i' Melse if(c==' ') 4 r* d* ?- m. Z* o; M$ X, X
space++; % u1 g1 o! w) }  m, W
else if(c>='0'&&c<='9') 8 B, E; X& D/ s3 y
digit++;
/ J4 e' J8 C4 d3 w/ S" r! E) ?else 1 ^. f; ~3 ^% T" P+ w
others++;
4 b) `7 S$ U# h9 z; N2 r} & z$ K& l- O. [# H: w. n
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters, 0 ]: r) N( U6 `8 I+ z0 ?
space,digit,others); 8 F, n3 `8 q" T) w: Y! d
} 3 I' t3 c, v9 A/ _) F; j9 c
============================================================== * {% a' }7 z' u3 o* F5 w
【程序18
$ s8 ^$ s- k+ o8 k7 D: Z6 C9 K9 K$ g題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數(shù)字。例如2+22+222+2222+22222(此時
, M$ Z3 x! f  C  ^' y! J共有5個數(shù)相加),幾個數(shù)相加有鍵盤控制。 , w$ X( k3 P2 u" R; J
1.程序分析:關(guān)鍵是計算出每一項的值。
0 m% C7 w" N' |5 @- p+ c, o2.程序源代碼: $ r& D& K! t# a3 Q8 c4 T
main()
4 _( v( I9 h9 b( L4 m4 ^; h{ $ {; [7 Y5 w7 @
int a,n,count=1; 5 k, R2 S2 n1 f% u# u9 ~; b
long int sn=0,tn=0;
0 g. ^5 g; `6 J/ ^7 l8 v  V1 oprintf("please input a and n\n"); " b4 U/ P" N4 u- q, x
scanf("%d,%d",&a,&n); 2 i0 F( `1 k( P. i: z
printf("a=%d,n=%d\n",a,n); / U; x% n# [2 C7 X/ u
while(count<=n)
1 K8 w8 t8 t9 a1 J: X/ S' s{
8 l  i3 a. @: P: f7 Ltn=tn+a;
5 Y: t, ^( m% G  E! f2 R2 Gsn=sn+tn;
" S/ ~" u9 Y3 g( E  Ha=a*10;
& m  g8 Z1 X9 u++count;
' D. k2 |: n, f1 D0 [}
/ G6 W$ ]- G4 h9 r0 l  iprintf("a+aa+...=%ld\n",sn);   @/ [, s( R9 s) r. r6 u) ^0 i
} 4 }  A2 x# C; c# b& @
============================================================== ! N) P' f* }+ U4 C
【程序19
( y% l' [/ j, @! t1 Y題目:一個數(shù)如果恰好等于它的因子之和,這個數(shù)就稱為完數(shù)。例如6=123.編程 6 C1 {6 U& N7 c* j: Y' Z
找出1000以內(nèi)的所有完數(shù)。 , `  C: L, l! f7 a
1. 程序分析:請參照程序<--上頁程序14.
6 _3 _( @- }2 o( \6 b5 Q2.程序源代碼:   y1 H# C" X. J1 ]" W( j
main()
6 T. _7 d* E. C0 C/ P  [{ % N& `- ]4 l3 L. z
static int k[10]; 3 o& n% I. \6 R2 d; _6 b
int i,j,n,s; + W6 `* [8 |- L* j- I2 o6 L
for(j=2;j<1000;j++)
1 B& t, ?3 q8 X2 y6 o2 H  t% N{ # o8 G8 t+ d) e, M2 m
n=-1; ! n- b. b( T; t- @5 H# r
s=j;
& g: k4 H" I% V: f+ Jfor(i=1;i { 8 j- f9 O: \# c
if((j%i)==0) 0 u' C. ^2 ?- p
{ n++;
4 Q; K* K$ ?3 _6 rs=s-i; $ h) J/ L. L; E$ ^
k[n]=i; 7 z6 \4 I  p2 V5 N/ U* j
}
- T& ?0 n+ t+ w; U; L+ @}
3 }2 F0 Y! r- `+ K  xif(s==0)
  I3 G; I! h# K: }4 B{ 9 d0 {( b9 p6 Y! l* j' z7 q
printf("%d is a wanshu",j);
2 T3 T/ y  Z1 D. U& R5 \0 Rfor(i=0;i printf("%d,",k); / y9 `# K1 p( J
printf("%d\n",k[n]);
6 t* T& U$ h+ A8 X$ e- x$ b5 w} 5 \3 }# V" f* T
}
# t7 ?8 j& g1 M  Z' F7 t}
* W+ S5 D' O  j, G6 V$ ^, b============================================================== * X- [' [+ v0 S
【程序20
( E* d9 v* h1 d" x. X; h題目:一球從100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
1 r; T. W5 T2 L; X" e10次落地時,共經(jīng)過多少米?第10次反彈多高? / M7 n9 b0 W4 W4 L3 N! J3 S  c( H7 E
1.程序分析:見下面注釋
; N) g" `+ x: t. y7 ^$ ?/ C, A) `2.程序源代碼: 6 b" U( C5 N5 [0 l3 ^% Z$ H
main() ) P4 o" x& C6 g! a
{
4 Z- ~2 P7 \  b8 C. }# Z) M" D0 G0 Kfloat sn=100.0,hn=sn/2;
4 [' T+ Y; R9 W1 j' \2 Jint n; 5 g5 L/ e8 d4 l* i/ s
for(n=2;n<=10;n++) 6 w6 t* r0 y' w
{
; H& G6 _" D& Z2 O" asn=sn+2*hn;/*n次落地時共經(jīng)過的米數(shù)*/
$ E0 t$ O, N) N9 `: X* U7 ^hn=hn/2; /*n次反跳高度*/ / ?* m; ?" n2 [% a3 y0 P
}
' V" j/ D, h/ p! x, T) G% Uprintf("the total of road is %f\n",sn); 3 s/ E5 q  |& Z" R5 Z
printf("the tenth is %f meter\n",hn);
+ d2 H1 {5 K% F6 l( w}
【程序21
題目:猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個* {" F& k% j+ l' A7 R7 s& u; g0 \
   第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下+ F# Y! s( G( C: J7 Q  d8 I& b& f
   的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。. A8 p5 e' J1 W* u
1.程序分析:采取逆向思維的方法,從后往前推斷。+ ^# ~( A/ v; V- }& i
2.程序源代碼:
! H- N2 P5 @/ H4 x' v  ^main()
. K- p8 s' v+ ^8 f# e4 j) m{
  e" @# j5 c  iint day,x1,x2;6 E9 ]9 y$ }" O* |* G+ }" f; }7 i" l) q/ c
day=9;
7 K! p1 F% D% a5 yx2=1;$ x1 E) |2 ~; \& a3 N
while(day>0); ]0 [3 j- Y. l4 ^- P, t
 {x1=(x2+1)*2;/*第一天的桃子數(shù)是第2天桃子數(shù)加1后的2*/
  N. y- i1 f0 u/ I0 L4 P- J6 O x2=x1;
( L1 i% ^5 [: y6 ^" j) Q day--;
! r0 |9 b# S( S8 p0 e }) [; O3 o: g7 G5 z
printf("the total is %d\n",x1);
. ?) b- T  P. m2 m/ X% x}
9 q! H3 l. z' W==============================================================. L* g" X+ b1 h! ]
【程序221 c0 g$ @8 s2 u( l
題目:兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽簽決定
$ F( z6 j; K3 q. C  I2 r   比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請編程序找出
# S2 t2 b" e5 X3 _6 |   三隊賽手的名單。 9 o; A/ Y) M/ A6 N% O; h5 S
1.程序分析:判斷素數(shù)的方法:用一個數(shù)分別去除2sqrt(這個數(shù)),如果能被整除,
# T9 P9 F. d) h: [# r      則表明此數(shù)不是素數(shù),反之是素數(shù)。       
: V* }3 W  I$ W. v7 h. p2.程序源代碼:6 ?! x- [. `1 l
main()3 o6 C+ \( P0 \2 p( Q; H
{2 _# k  W6 s1 o& s1 x/ U
char i,j,k;/*ia的對手,jb的對手,kc的對手*/
5 G$ b' x* r( {+ E3 Pfor(i='x';i<='z';i++)
; }2 P5 J1 S! ~2 }! w for(j='x';j<='z';j++)
  C/ q0 {. S* d$ S7 j {
" i' f) C( |2 t! H" f1 \, G if(i!=j)3 T4 W) W0 f, c: E
  for(k='x';k<='z';k++)
1 o4 _. T1 Y" y6 n; W6 p# \; S  { if(i!=k&&j!=k)1 q- y# C( J1 @( e  H2 t# c% g
   { if(i!='x'&&k!='x'&&k!='z')
! X" b& n5 O- u* \   printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);% J: z0 z3 _2 r* }+ j
   }- Y$ T; L$ `- r+ p7 q2 b! N' i( a9 ]
  }
; G/ [1 O$ `/ r* z# O }
/ u7 A' t* E- ]& `0 U* E' }2 y}9 Z2 d) X% ?2 H& K+ b6 L" A; I
==============================================================
2 U. u$ r9 T1 |【程序23
+ y/ a. N1 B0 N3 f, l題目:打印出如下圖案(菱形)
*8 n$ [# K) o5 g: l4 ?' C$ e
***% J& T% Y8 B4 X7 ]) c) [9 C
******
" x+ k* U9 b$ u. d& C$ Q4 ^********, U( Z6 _+ I" B8 w! ]% [
******/ d$ ?: L3 S- Q1 g% K  J. c
***
' u6 H, y9 w( |*# A$ I1 L3 H8 G1 w! G; J
1.程序分析:先把圖形分成兩部分來看待,前四行一個規(guī)律,后三行一個規(guī)律,利用雙重
) M4 Q; x8 N: v( ?3 B0 m$ k      for循環(huán),第一層控制行,第二層控制列。
4 M( a. w9 V( I8 @" I2.程序源代碼:
# c, G0 H0 E8 l( f! _" Imain()
# Z! I' D/ L: |0 G{
( T+ x1 s) `, t( I  hint i,j,k;2 ]/ R) V! }/ n) u
for(i=0;i<=3;i++)
7 u# G: ^' ~( _. |. F" s {
, X3 E) ]. V: B' n for(j=0;j<=2-i;j++)/ V+ k  ]& w* C: u& n
  printf(" ");
* G5 R$ C" E9 h7 T for(k=0;k<=2*i;k++)- j2 ^& B8 I8 H# ^! `
  printf("*");5 b/ t! M' Q& ~, p7 Q4 }
 printf("\n");
  ?0 H! q  C' J; ~ }
0 A7 c3 o  ~0 T$ H/ l/ Xfor(i=0;i<=2;i++)
, z7 p) W7 r( w7 u {
' R* K, J3 j5 \  `' i for(j=0;j<=i;j++)
! g( X" H4 w" d0 b( Y; S0 g; e  printf(" ");
( r  i- ?1 z+ c for(k=0;k<=4-2*i;k++)
9 K) J  ~; b! R  printf("*");
$ s) v7 b+ k/ D, N0 s printf("\n");: }: b$ h9 }3 t9 d9 b# K+ J  X" K
 }
+ O: w& P8 k3 q1 l9 F}
, g9 V: x, p/ [# e0 t3 T6 e$ `==============================================================) N, X/ Z/ q+ P; ?$ i+ ^
【程序24. S+ j% b$ M' z* L
題目:有一分數(shù)序列:2/1,3/2,5/38/5,13/821/13...求出這個數(shù)列的前20項之和。
* \4 c1 O  t8 `  \8 I1 D; {/ M1.程序分析:請抓住分子與分母的變化規(guī)律。 " {: S; m) @$ N# b
2.程序源代碼:
+ y# r' V1 q9 F; B3 nmain()8 f8 S" t5 P8 g! ]# ^/ \- w- c* E
{
0 j5 ?& {* ~  U: u* ?6 D( W) oint n,t,number=20;
+ M# D' u$ k0 \float a=2,b=1,s=0;
/ m: p  g3 U- Ffor(n=1;n<=number;n++)9 N' ^9 w( @/ F8 |7 l6 U
 {
! d8 e  q; g9 M# Q+ m s=s+a/b;
, \. l3 ?! e, T# { t=a;a=a+b;b=t;/*這部分是程序的關(guān)鍵,請讀者猜猜t的作用*/
3 Z' ~" G' W) F# m% K; D1 a' d }/ \: B0 \' ~+ @0 g. {* q* k" r
printf("sum is %9.6f\n",s);" A) X. d- M& p3 Q; f: l" U( [
}9 \( f9 C; E; E4 ?' a
==============================================================
5 Z- R3 W- s. X, m, t3 r【程序25嵌入式學(xué)習企鵝要妖氣嗚嗚吧久零就要
3 Y: f  B+ n2 {9 R9 n' v題目:求1+2!+3!+...+20!的和
6 I: `' A. s, q( ]5 l1.程序分析:此程序只是把累加變成了累乘。
/ i, k4 o& P; x0 J2.程序源代碼:
- L' c! \; A6 u+ z3 I1 Lmain()6 K" u; O, Z6 S% Z% }3 i
{
0 {1 T, M* t. Z$ i) O# y/ K1 q) ofloat n,s=0,t=1;
) ^3 ~& H8 t: D. z6 k  g' \3 gfor(n=1;n<=20;n++)
% D( U- a. C+ y! ]2 [ {0 l3 M4 H) N6 O
 t*=n;/ h; l2 z0 k7 K* {0 V% |
 s+=t;
7 Q: {6 h( Z/ o }
) C6 Z! O0 U8 ~( x3 F9 u7 |7 wprintf("1+2!+3!...+20!=%e\n",s);1 m( b$ \9 L' o% M
}
5 o% u& x4 K+ F* C: S+ x. ]==============================================================
: G0 @9 j) {7 K" R- y【程序26
! g7 y7 I$ j' Z1 D7 O題目:利用遞歸方法求5!。
& u# E1 p( o' j1 z( ^5 V  P1.程序分析:遞歸公式:fn=fn_1*4!
  W6 B- z3 v0 ]$ K9 X3 E2.程序源代碼:' A! x$ L5 T7 `! M0 e7 n5 g
#include "stdio.h"9 M# {9 r! E' o  b3 u* n$ f4 }+ w
main()
5 A  C$ m1 O* S" s4 J& M! g# f{
# X' T/ @8 i2 K, U: Oint i;
5 F; ^" b0 L% v, d0 ^5 Lint fact();/ [' `5 ]4 {; v# W5 K5 M
for(i=0;i<5;i++)- e/ h9 [$ n" i, P) Q. g9 R/ r
 printf("\40:%d!=%d\n",i,fact(i));4 G$ U$ N- L+ ?* C* P! I
}
* Y! A! A0 x5 M5 Uint fact(j)7 ~5 O( N$ w8 k9 x* n
int j;' r& q- v8 }  |2 Y
{
  l! Y8 e7 z4 l/ B$ l0 kint sum;
2 A: v* g+ b* e, Q2 j" i. `& e* Wif(j==0)
8 k+ q* k0 r% q% j4 V, J5 n sum=1;# M' H- ?  e, t
else0 }3 ]- Q+ |, w: d
 sum=j*fact(j-1);
: N1 `, Q9 b3 lreturn sum;
7 y7 B% t- N& c$ l! }* r; b! d}  ~) @) ~8 z8 X% k/ r+ j/ |7 d& N
==============================================================
3 d! ~' z% m! d; N$ x' A% J" G
回復(fù)

使用道具 舉報

2#
發(fā)表于 2017-10-9 21:23:19 | 只看該作者
學(xué)習了
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊會員

本版積分規(guī)則

小黑屋|手機版|Archiver|機械社區(qū) ( 京ICP備10217105號-1,京ICP證050210號,浙公網(wǎng)安備33038202004372號 )

GMT+8, 2024-11-9 04:45 , Processed in 0.051934 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表