找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 3015|回复: 1

C语言算法16-26

[复制链接]
发表于 2017-10-6 15:41:14 | 显示全部楼层 |阅读模式
【程序160 a7 V% e1 q, V- [& v' e7 w
题目:输入两个正整数mn,求其最大公约数和最小公倍数。
, I: c2 ]0 K5 T, f, p' D" R, H8 D

# l: S6 y' e1 D1 L' H) E) H
) w- Q8 P" q. Y5 ~3 y1 M作者: zhlei81 2005-1-22 11:30 回复此发言 % M6 ]5 r  n9 K! R6 n5 r9 y
  l# d" \! y) y0 T1 _
--------------------------------------------------------------------------------
9 q) l0 o: Y1 c; x8 `& R$ P7 I3 u( L
4 回复:经典C源程序100
, l2 c2 m* [, D: p, k# m8 y6 u1.程序分析:利用辗除法。 4 ]$ o* u' B7 {' p' a4 _/ g* O

2 m. H5 T* M" w! P) s/ R+ J. X2.程序源代码: 6 A9 v, k0 I  r9 ?
main()
8 ^, N8 x% t  ?5 x( `) M{
: b3 y# M" S- p0 Fint a,b,num1,num2,temp; 0 A, |$ T5 _9 h! Y0 t" r) m
printf("please input two numbers:\n");
8 Z# b  L* q/ g' i$ |0 d# Tscanf("%d,%d",&num1,&num2);
1 m8 f# e7 P1 _if(num1 { temp=num1; # u  o8 T+ T2 C; g3 h  E9 R
num1=num2;
/ s9 a" D& h6 t" K; bnum2=temp;
4 p1 ?. H0 ]0 X! {} & o: r* `4 |# `: D) I) s) b7 F2 V
a=num1;b=num2; - x/ C: k; D6 Z: p3 x7 ^
while(b!=0)/*利用辗除法,直到b0为止*/ : @6 _( e5 z: {) X+ W1 y
{ - Z) u" L, o* z4 q
temp=a%b;
8 w+ S  E8 [3 xa=b;
/ M. @5 Z4 e: @8 ?. vb=temp;
, l' P' p( c; r( v9 n, f} 8 B* R$ _. v. H# |& O( N
printf("gongyueshu:%d\n",a); 8 K; N5 @% {* z& [5 B0 |5 O# z
printf("gongbeishu:%d\n",num1*num2/a); : S, {) P- d/ L! X$ r5 Y
}
* l; I: a1 }8 m+ }- p6 @) l, B7 ?; B============================================================== 1 c% `& Y( ?3 [' J) g& A
【程序173 |4 D1 D7 Q& v: }0 f9 t3 |
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
8 s6 {0 W9 b0 q% i1.程序分析:利用while语句,条件为输入的字符不为'\n'.
# l6 F+ B, w; [- }' q8 q! s4 S6 {- I: b4 z; U
2.程序源代码:
& O; B; K: f/ A9 ?' b+ Y7 w6 H- U#include "stdio.h" 5 O! |% B& i/ E" m! ?
main()
& K0 S1 }' O3 z$ X{char c;
! x7 g  }0 m# ~int letters=0,space=0,digit=0,others=0;
, ~) V  x  q! vprintf("please input some characters\n");
3 m! U) d% V0 `* |- L, x5 wwhile((c=getchar())!='\n')
' P  K: l$ R( x* l. [: b) F{ : f* t9 \) n4 X9 o
if(c>='a'&&c<='z'||c>='A'&&c<='Z') ( v. n4 C# m& ~' M% u3 Y
letters++;
) {$ ~. m+ R% {9 ]- W% [# lelse if(c==' ') 3 J" ]9 A2 N6 h; L, N. T
space++;
% _, B( D- ]6 m' s7 {else if(c>='0'&&c<='9') $ p) E( n7 z. ^! c, N) ~% N8 b
digit++; 4 h6 Y, G' ?: ~
else
' X0 S  A: ^& [6 J$ k9 D3 @others++; ; p+ q) O& j+ J  x. Y
}
. Y2 Q# X7 j- I" vprintf("all in all:char=%d space=%d digit=%d others=%d\n",letters,
2 }3 Z7 D( b) u; |space,digit,others);
' i" u' |$ |2 F( c} , z7 V* k) [# U" r; W3 Z8 d$ c0 t& x0 u8 c
==============================================================
0 `3 T( v; _3 i( v( [; Q; q/ u( D. o【程序18, m: N  u3 i# ^2 O
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时
0 _1 q- f: Z+ F1 f7 O7 p共有5个数相加),几个数相加有键盘控制。 8 R6 S& d" i3 `1 Y
1.程序分析:关键是计算出每一项的值。 0 l# [! @& O- x8 e" A  b
2.程序源代码:
3 h7 q/ i* j! ?$ `main()
1 N! `; A  \4 C. Q{
1 s9 @) ?1 O% Q( v, B5 W2 x6 t: J" Sint a,n,count=1; ! I: ^9 U) ]# Y* P
long int sn=0,tn=0;
6 X6 s7 `. S6 f( o3 Y1 Cprintf("please input a and n\n"); & ?$ x) V* w2 l) B. F
scanf("%d,%d",&a,&n); * n9 Z- K4 q6 L
printf("a=%d,n=%d\n",a,n);
$ F% v; V' l- ^7 d$ ywhile(count<=n) + t$ {: P7 i. ?: |2 D
{
) F$ {+ J) d! I# J: @9 i/ ctn=tn+a;
+ t( h# U  `* S2 Vsn=sn+tn;
! Z9 }. @1 W2 fa=a*10; : |" e4 {/ H% ]
++count;
  ?3 h0 I2 k! o# z}
& D) K( [+ @/ q/ Zprintf("a+aa+...=%ld\n",sn); , V9 N, x( u" r8 t
} 5 ~# [# V% h- b
==============================================================
6 P! a& \1 V; Z5 S3 Z9 e3 s2 r7 d【程序19: z, i& \1 T' _
题目:一个数如果恰好等于它的因子之和,这个数就称为完数。例如6=123.编程
1 ~) U9 d- {  u8 _2 b% B找出1000以内的所有完数。
5 Q+ u$ M+ Q  t/ \) }* ?1. 程序分析:请参照程序<--上页程序14.
+ L0 X3 G0 h/ Z4 T2.程序源代码:
" ]4 I( o& x2 P/ K4 R  l# g( Mmain()
8 U  K; ?4 q" u  s& F! f; |{ ! H" X4 l9 ]( ^# f
static int k[10]; 9 w* e- r5 q  k# }7 v& |, o
int i,j,n,s;
+ a( I1 k: c9 m& T% B7 M) n& qfor(j=2;j<1000;j++) , g9 |& y$ {% X3 N) t5 v! G
{ ( y" H- B' S6 R& P) L: Q
n=-1;
5 t7 _  P+ n9 N& w# N. p/ Is=j;
- t, B4 A! t, ]for(i=1;i {
- m7 I- k, ^& ]; V% T7 C$ ]if((j%i)==0)
) K" l* F1 m3 ]' S) Q# f{ n++;
  h: k) V: g  q+ k# ts=s-i; 7 e) O7 Q0 D5 e3 d+ V% \* o
k[n]=i;
) @/ H. j" R# c& |" M  Y} , c. ]* l2 k1 D( v7 v
} ) d" M4 _& [7 N$ G
if(s==0) . ^5 X1 v1 G  o' L' I: `* w+ y
{
: P% k& N1 o, S$ b6 |printf("%d is a wanshu",j);
7 G. W+ e: N  efor(i=0;i printf("%d,",k);
, o: ]' X- e9 r' s' _printf("%d\n",k[n]); & F, B0 o7 \6 l  Y0 l
} 4 [; |  d3 D8 I0 a, p' I% S) B0 k
} : S/ i# W8 Z( ?* N  q
}
- r8 }/ t# s8 @% r9 {: z: L' ?$ X4 j- P==============================================================
5 y& |" U+ V: P  V9 }8 e【程序20  u* o9 V4 l3 F$ J& B+ r
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 ! C. z" ]4 L1 ]: O- S# C7 ?
10次落地时,共经过多少米?第10次反弹多高?
# t: k9 w' l, C# Q% ]; `1.程序分析:见下面注释 5 @0 Z/ a0 X9 @; Q0 h4 ~
2.程序源代码:
* Z  k  d# o3 d# s4 v, }/ A7 Imain()
& n+ r9 |* u$ q+ g: [- i" i{ ' l6 z& S. Z: K" E
float sn=100.0,hn=sn/2; ( _+ R3 ^( a) D# G4 ~) g, l1 t- X
int n;
3 k5 `, K# @9 V4 m4 Z5 \for(n=2;n<=10;n++)
( g: \0 J0 U* ]& k{ ; F/ G2 O; \4 p, l! z. t) k
sn=sn+2*hn;/*n次落地时共经过的米数*/ 4 h2 b- _, |2 C1 E" a
hn=hn/2; /*n次反跳高度*/ . P, i. W: e- z9 P8 E
} 7 ]# I3 G  C; k! f
printf("the total of road is %f\n",sn);
/ ?' Y; I" [1 X' f$ ~printf("the tenth is %f meter\n",hn);
' Y9 o- B  F) H" K2 ?}
【程序21
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个. J) `5 a3 _  N# a3 }: Y( }; r
   第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
( h1 y! O. x+ u( R% w( \   的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。# a! Z% g) g. A' A: S& B
1.程序分析:采取逆向思维的方法,从后往前推断。* r5 X8 v* k7 D( }% j% }0 e# H) \
2.程序源代码:
+ c* U9 H$ ^0 _+ P3 T% ?, ?- mmain()
' W7 M9 M# x' h{* k5 j0 u6 o: g$ \& z2 M. U
int day,x1,x2;
, o. N, x* v- |+ o# `/ @0 xday=9;) }- F, [3 E! w# A. `* C
x2=1;
- S& V5 _: v) J: A, W1 m) gwhile(day>0); h( u  Z2 f: j0 ]! ~  f+ \
 {x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2*/2 @" R! r0 N! B$ s+ P# P
 x2=x1;
& @7 u: l1 A) _9 U day--;
/ d! W% m7 G/ _3 D3 Y6 l }
9 ?! u# t7 E1 Q7 W2 i) x1 sprintf("the total is %d\n",x1);4 Y5 R0 G! j* v) J5 c' {
}7 C/ {  d# t2 E9 w0 W' m6 g
==============================================================
( A1 q. G# ]. Z) b/ T) G/ d# m- ~4 l【程序22
- Z( ~; |! \1 D1 H  F5 A题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定7 r& H/ C3 V/ ?. I# i8 ]
   比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出
. @+ P" H+ \0 y2 x  @9 C5 ~; C! E   三队赛手的名单。
5 X5 P7 U  [0 @- a1.程序分析:判断素数的方法:用一个数分别去除2sqrt(这个数),如果能被整除,
: A. l/ ?: e7 f2 p3 N      则表明此数不是素数,反之是素数。       / {/ J. @* g, `: t0 j
2.程序源代码:
4 @8 v" u8 S$ Vmain()
) X( |/ A: }* X9 i{
* I+ V$ H. Q! v5 z3 v0 {char i,j,k;/*ia的对手,jb的对手,kc的对手*/3 u& H3 ~$ d) r" d9 g7 P8 C
for(i='x';i<='z';i++)
& K8 ?4 ]! p+ B' k0 W0 n3 K0 L for(j='x';j<='z';j++)' k; F+ ~  S5 U7 i- z4 F
 {) P, e7 Z! Q: v7 r: a% r
 if(i!=j)
. h' l' A2 @9 f0 D$ U  for(k='x';k<='z';k++)
, p+ B" S7 L+ B4 l  { if(i!=k&&j!=k)1 ^/ y9 `' [9 a, q6 g+ \
   { if(i!='x'&&k!='x'&&k!='z')9 Z' w: G: K/ X1 c) T$ L( |+ G
   printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);3 b( e5 \" J) P# q
   }
( ~9 O5 K* W4 v' S8 r2 Z  }
4 P7 o: u, I) h0 h( @ }- o, c1 f- Y- [' _3 [' u
}
7 t# k( d7 I+ X==============================================================
8 V$ I& S" B2 A8 U" _# g7 z' M【程序23! J+ D6 k8 k1 c, t4 M4 z1 t: {
题目:打印出如下图案(菱形)
*) `: ^( o) H3 ]0 o
***
/ A6 W2 [1 ~. N- ?' K( R******
* L& L0 K! ]6 Z5 h( c( Q********9 b! C. W- y' m3 T6 X
******
) X( T& B+ I/ ?% j; ?***
8 c, M9 f# t8 N3 l8 N*
0 c& T3 y6 u, a( ^. v1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重5 |$ ^' s7 f5 H8 |
      for循环,第一层控制行,第二层控制列。 ! J% I* U: {8 F: u  }
2.程序源代码:& ~" `* N3 c, d8 q; ?# h' C4 o
main()
! u" [+ }3 `  l+ [9 [{. O4 U) z9 t/ w( x$ _& I: c  \
int i,j,k;0 {' U! o' c- k  A# C- P
for(i=0;i<=3;i++)7 ?# `! C, A, K$ O) ~# ]
 {
9 V( \' `1 U& q" L for(j=0;j<=2-i;j++)/ M) B, k! O6 f: ^2 l
  printf(" ");" a, m$ s' k+ D: C! ~' b' k
 for(k=0;k<=2*i;k++)
9 ~7 c1 |* a* b% h: F3 g  printf("*");
4 W' @& f& b9 }4 a6 b1 N printf("\n");8 D/ @9 O0 M) y6 x9 T9 C, r4 ]
 }4 F( I$ }6 h5 e, l
for(i=0;i<=2;i++)
! [8 u8 l" ^$ K5 H+ v2 K0 @ {" u, P8 J4 e% p# E2 ?
 for(j=0;j<=i;j++)- C1 z1 s" A9 ^, ?
  printf(" ");
2 D' Q9 \: \! N1 a2 v/ I$ ] for(k=0;k<=4-2*i;k++)  F. f8 ]& S+ q! \
  printf("*");
! G- t/ s( M: G printf("\n");, r3 M! F  r. A% j( w$ p; ]6 Z! ?
 }9 Q4 U! C7 ^( [# z- n7 Z; E/ j; g
}
3 g+ p) ~' d; S==============================================================7 J: N5 t  c) B8 [' d6 N1 K
【程序24. v# ]* T5 T; l  Z2 t( W
题目:有一分数序列:2/13/25/38/513/821/13...求出这个数列的前20项之和。9 _2 O' d1 k/ s
1.程序分析:请抓住分子与分母的变化规律。 6 q& t4 U' \/ X1 m' T8 w
2.程序源代码:' q0 ^$ a- s$ @3 g
main()8 r, w7 t: Y6 \/ v
{
5 F' A3 e% D2 q+ M6 y' O& H. _int n,t,number=20;
5 ?% ]9 w2 N& [0 n  gfloat a=2,b=1,s=0;9 o4 q+ D+ B& w$ O+ B9 T9 e" q, g* p
for(n=1;n<=number;n++)# |: T& U+ c% w
 {4 {" t1 S; X: ]/ _
 s=s+a/b;
8 p1 `1 v9 g; r t=a;a=a+b;b=t;/*这部分是程序的关键,请读者猜猜t的作用*/$ N' P# ~4 C$ P5 n
 }6 V. R# N  z2 a7 {. ?
printf("sum is %9.6f\n",s);
" R' X4 d' ?; T& y; X" a4 Z  f}4 m  B2 y. v- _' T' |; N
==============================================================, m6 }+ D. z) `( V
【程序25嵌入式学习企鹅要妖气呜呜吧久零就要/ ]/ y6 |! T! \0 p: u
题目:求1+2!+3!+...+20!的和
6 s' F0 ~1 a& a4 i) D/ h/ K1.程序分析:此程序只是把累加变成了累乘。 . M* K; j* o& e9 F% E
2.程序源代码:! m' F7 Y" b4 i
main()1 x; |! e9 X) `# f
{9 K/ }- C) A  ^+ r7 J9 U4 O
float n,s=0,t=1;- C' l# h7 _. q
for(n=1;n<=20;n++). L2 {& [: t: ~: o* u
 {( r( Y" t0 l) _1 M, U! E. {+ v
 t*=n;
- Z2 m+ ]7 j7 F: C s+=t;' O2 T8 Y4 l5 {" e0 F2 T
 }
5 _9 Q  {- |6 N/ s: s3 c/ i/ o- yprintf("1+2!+3!...+20!=%e\n",s);
8 T# F# W+ j4 \4 S) ~}
. w+ p$ x6 ^3 e4 {6 ~3 y==============================================================
/ ]8 s! t; C1 n- K【程序26
! P2 O, A1 \; R; [# f% K! Z题目:利用递归方法求5!
8 X0 ~6 g& V( T1.程序分析:递归公式:fn=fn_1*4!  r' c3 g  Q" Z1 [
2.程序源代码:
: T$ c9 s. i0 |#include "stdio.h"4 W" u8 O& u8 U' p) g5 O; |
main()5 O+ v( w3 J8 w- Y7 Z- }) M7 C
{* V, Z; G. E$ H  U; o& [; x
int i;
$ [$ L% B$ V" Z; Iint fact();" |" Q" v& \8 p1 `3 n0 j# ~0 g; D
for(i=0;i<5;i++), q3 [% J2 ?* s. [
 printf("\40:%d!=%d\n",i,fact(i));, e* n0 I% h9 M7 b; p
}
, H" d; V0 B: o: b9 Z% lint fact(j): D3 Q0 J6 g. e" T
int j;% R6 I, F; d  t9 H" w: Z) b
{; S4 {- _* F5 c! ~' n! q! v/ v+ ^
int sum;
, s2 _$ c$ {3 O: K( b1 a2 ^) V6 v. Hif(j==0)
/ A' k; r4 C8 }3 i+ g8 b: Y sum=1;7 D# c6 L. y# v3 X; U9 K4 Q  f
else
, K, [' D2 k9 m: b2 U, E" g: t0 k1 R sum=j*fact(j-1);
6 w- Q) c- A' {! S* d- ^  K+ mreturn sum;$ `4 a) C: ?! n4 a5 F
}
( G; M- @5 h7 |: ?==============================================================
8 Y4 u" d* l' l( ?' p  I& b7 i
回复

使用道具 举报

发表于 2017-10-9 21:23:19 | 显示全部楼层
学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Archiver|手机版|小黑屋|机械社区 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2025-7-6 11:55 , Processed in 0.067619 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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