机械必威体育网址

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 2749|回复: 1
打印 上一主题 下一主题

C语言算法16-26

[复制链接]
跳转到指定楼层
1#
发表于 2017-10-6 15:41:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
【程序16& q) G2 A( a- i
题目:输入两个正整数mn,求其最大公约数和最小公倍数。
# U- Y/ x4 p. r* v6 J( z3 ]2 q- D: x

. o- |* F# |1 ]  Z/ C5 F5 }  w' p6 s, V6 i9 R4 ?( E
作者: zhlei81 2005-1-22 11:30 回复此发言
% x; m, O5 s# _0 n& p: p% |
1 E/ y1 |/ _8 E6 v1 H--------------------------------------------------------------------------------
' }) C$ ?+ B, x! h" I" G: X* |
5 g  ]* K# v: `& a! F$ ]4 回复:经典C源程序100
3 I- m6 K. q/ S5 ^1.程序分析:利用辗除法。 ' M2 @( b" c2 B4 P
' }" ~. E: T8 O0 T4 ~1 D/ b9 V- F  Q
2.程序源代码:
6 d* G& ~/ ~/ u: Wmain() 4 R$ U3 [. a: z# @. C
{ 6 h+ q3 X) }: O7 J% a' P
int a,b,num1,num2,temp;
  S: e9 t4 s: J! e7 pprintf("please input two numbers:\n"); 9 U" T# @' n  Y& V1 @8 l
scanf("%d,%d",&num1,&num2); ; x- ~# m2 M% ^: K. s% m+ \
if(num1 { temp=num1; . |; r1 V" b3 @& c/ x1 d
num1=num2; 4 q# @& _' Y- o* S1 T7 ~5 @3 F
num2=temp; 1 x. P  t! Q; O$ S8 U" |- b0 ?
} / p. s7 y8 @9 P; Q
a=num1;b=num2; 9 q, E2 g  f+ G# }' n
while(b!=0)/*利用辗除法,直到b0为止*/ 4 @: U2 d6 t# q; y
{ 9 J* K$ d( |) l' |. a
temp=a%b; ' I2 G- G4 F# ~+ V' o9 J
a=b;
- H$ O5 h" T. {, Z  ob=temp;
" N  v; [3 H& k+ [, T} 7 p5 f: G& s7 B/ H
printf("gongyueshu:%d\n",a); 3 d% s/ e: r& d# N
printf("gongbeishu:%d\n",num1*num2/a);
) a8 a5 n4 M& g5 n- ^} # S% F8 R1 I% M1 m8 F# k
============================================================== ! B3 H: w$ p) i  g3 E2 b1 w
【程序17
$ }$ V: o, P7 q+ A" [: T* I5 M4 |! }题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
' S4 E3 b. ^6 X1.程序分析:利用while语句,条件为输入的字符不为'\n'. # L9 K* _  Y% V) [2 B) {5 f( y6 M& H: Z
$ E+ p& K( e- W: w3 w
2.程序源代码: & a! q" }& [" w5 |
#include "stdio.h" 5 @+ t5 t# b3 X! n
main() 9 p8 ]& W5 n7 T3 L
{char c; . j  M) V7 J0 q( d9 p
int letters=0,space=0,digit=0,others=0;
3 g* v2 d! R+ _$ @" tprintf("please input some characters\n");
5 F, o: H7 E) j/ l0 b' Pwhile((c=getchar())!='\n')
4 Q! M% l+ ]- a" \: X{ : r# }- T# \8 f9 o3 R5 v
if(c>='a'&&c<='z'||c>='A'&&c<='Z') & _; H( W" V# y$ \  t8 e
letters++; % J- i+ l% E. G7 \& C' {! l
else if(c==' ')
( t3 t) T( i% E( E" Lspace++;
. {3 a+ j* @  o/ O% P" F+ r9 helse if(c>='0'&&c<='9')   K- [& F& J. G( I- i
digit++; ! f* J( k* J1 w6 `, @0 m
else
6 h7 T! m$ y. u* T5 X8 pothers++; # Q, @+ L' i& L  f
} ; A% `4 h5 E" {( S4 k5 {% t
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters, ' u5 G* }  z3 \2 }' `6 @4 X$ H
space,digit,others); 2 y: T- R& ^3 I2 T" ^2 H
} ' T/ u4 j: R, L
============================================================== , e- E/ p) @5 e
【程序18
/ f0 ^, _% D7 \. y题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时 6 C- M  G" g$ s1 g7 O# J6 E
共有5个数相加),几个数相加有键盘控制。 2 P  @! R% s' L
1.程序分析:关键是计算出每一项的值。
' S6 C' u/ h, a$ r  K1 Y2.程序源代码:
2 d, S- u3 _: w+ _) X) ^main() ; ~) k' {. n) N0 m% T5 @% ~
{ ( I: W5 z8 g2 N2 C
int a,n,count=1;
3 {$ o" ]  J5 q) tlong int sn=0,tn=0;
( H# w# M1 R! ?. Kprintf("please input a and n\n"); " @, _# N* V( u7 y4 R( J
scanf("%d,%d",&a,&n); & Z4 n# E) H- P/ T0 o
printf("a=%d,n=%d\n",a,n); 9 d% {. x9 C4 i
while(count<=n) 3 {2 S2 U0 f# Y" ~' G( n$ \  Y7 W5 C
{ + h" z# P+ P; V! e
tn=tn+a;
9 T# h6 x1 h( F6 [2 z% z9 j4 Tsn=sn+tn; # N. m6 T3 k) D5 B9 \  N
a=a*10;
5 g! x. g; m. i# W++count; " m) c1 j7 N8 M# c5 h
} ' V9 J, p7 H7 F( g7 {  d/ |, d
printf("a+aa+...=%ld\n",sn);
3 W! r; f- Y" Q- z1 d# ?! p: c}
2 r3 x2 m% I. v. q1 I; Z* `============================================================== 7 u8 t' h0 T' u0 B  v% _5 @  [( k
【程序19  ], u  F' N" P0 ^7 l/ @' c
题目:一个数如果恰好等于它的因子之和,这个数就称为完数。例如6=123.编程 ! Z8 M% a8 k5 g6 h
找出1000以内的所有完数。 : o- d: [* T0 O. k' {9 s( U
1. 程序分析:请参照程序<--上页程序14.
1 t% @6 I8 J2 a; c# ]3 v) |2.程序源代码: 3 ~. P. g/ I1 L# \
main() 2 C. U8 G" e7 Q( f' d' ]+ f
{
" Z4 T( q% {( D) s* qstatic int k[10]; / L6 n- t7 s2 G( U  |3 @5 f
int i,j,n,s; : I" z  g# j8 a" j# m
for(j=2;j<1000;j++) / N8 s/ e$ A8 A0 O9 Y6 P+ V& O
{ ) Y4 A3 U# y/ y9 M8 v# n8 z
n=-1; % W5 D- B. E# ?9 E7 J+ w8 x. y
s=j;
2 i. F8 E- h! I5 Kfor(i=1;i { ! }' z  {7 D8 ]
if((j%i)==0)
' `" N  f0 u# i0 J6 f: y+ B+ {2 O{ n++; ; k! i. W% B' E! f% U
s=s-i;
: O! G* q0 J4 E6 Ck[n]=i; / G  x/ k/ }" s  n
}
" _* V; a% v1 i} # \/ J$ a, t, A
if(s==0) 5 W: ]5 L% ?5 L$ u1 q
{
; u5 {1 L- b. J  A5 n' hprintf("%d is a wanshu",j); 7 E7 q) W+ u' C
for(i=0;i printf("%d,",k);
( q- K! X4 l5 l6 N* B: kprintf("%d\n",k[n]);
) T1 f, R) o: K}
" |( z/ X' v2 P}
& @7 ]+ S8 w8 @! A1 \} . E% Q5 z! x% p! {% \9 J
============================================================== , L5 o# s! U, `' ^
【程序20
  j1 b" `6 P; @% |0 w  k题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 8 C$ t6 A: D! P$ r. ?
10次落地时,共经过多少米?第10次反弹多高? - k4 ~% T9 C" r0 ?, x/ K
1.程序分析:见下面注释 + e7 H1 w* _( l7 h' }- T) f  r
2.程序源代码:
7 @( K" ~. j* |; E+ `main()
% q+ u' X7 C' t3 t, M4 S{ 5 q& ?5 S: J- K7 s1 O! d" }
float sn=100.0,hn=sn/2; 7 n  k/ ^" U+ K. s
int n;
) S. |$ k6 T4 t4 M9 |for(n=2;n<=10;n++) " }: e$ {6 g# G6 t
{
; T( a4 O& h9 t! Y  d, Nsn=sn+2*hn;/*n次落地时共经过的米数*/ 5 s7 q- M+ ^" s5 w% j. s- c' Q- c
hn=hn/2; /*n次反跳高度*/ " Y+ G  b! j& p
} ( s+ `% v  _7 M4 {% n3 b! y
printf("the total of road is %f\n",sn);
# N& t3 B4 k2 y6 bprintf("the tenth is %f meter\n",hn); , L& i- Y! M  E- V6 a
}
【程序21
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个3 m1 J/ h5 }( u8 `7 E+ |2 D
   第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下0 }5 k0 f$ y' i
   的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
# V0 |. A7 X; F3 G* U' p1.程序分析:采取逆向思维的方法,从后往前推断。/ d8 n5 `; n0 l
2.程序源代码:
- L4 [, q4 F" |* [3 g' f) n/ nmain()1 W% f* O0 p$ h5 c0 N; d$ V
{
! b( S4 d0 k- |7 l. c  M. ]# c/ J7 |int day,x1,x2;
3 X8 P. L8 z* sday=9;- g3 Q# O4 \$ }
x2=1;& u" B0 a: G$ R+ H& |5 M
while(day>0)1 l# f7 G% {' a8 d
 {x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2*/! `, u# @  F1 `$ \
 x2=x1;
/ X# L1 C& l- O2 W2 w" K3 a% Y day--;
2 o6 E2 `) o9 t: c, X; } }
3 K- t. w; G: t8 z  {+ l) Mprintf("the total is %d\n",x1);# b& G% A0 F& q3 c. D5 k- w/ p
}7 o+ N% d$ J5 }
==============================================================6 n# {) n; R& _9 M  Q7 `, {9 I
【程序22
0 K& I3 I9 Z6 i/ P+ w# ?题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定
; D. [, Q' q0 x0 B* Z   比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出" g6 H: {- m3 `1 ]1 }" z# t( e
   三队赛手的名单。
* D( c0 _' f% C3 k2 d. N0 K1.程序分析:判断素数的方法:用一个数分别去除2sqrt(这个数),如果能被整除,
4 I# N# Y% W/ l( E7 {0 b      则表明此数不是素数,反之是素数。       
+ A  g+ o" Q& z3 c% M! E9 e2.程序源代码:9 f4 {$ \1 P; l2 ?1 R4 y4 u
main()" [1 s3 N% @$ X! S
{
3 t- @, q  H* w$ Y( S9 ~3 x- Bchar i,j,k;/*ia的对手,jb的对手,kc的对手*/
0 O3 l4 {2 z7 vfor(i='x';i<='z';i++). a; c7 G. S. d
 for(j='x';j<='z';j++)
7 \$ E; t% k4 z$ n/ P( d7 d  _ {  T; z( j0 y& {0 i
 if(i!=j)
# _4 j: b& H' j  q; P. f) _! y4 `  for(k='x';k<='z';k++)& J9 A) x; r: @% S3 u# v. O
  { if(i!=k&&j!=k)8 i  t( Y, A6 r$ n
   { if(i!='x'&&k!='x'&&k!='z')
8 I  m, @# s0 ?# u$ C- d& c   printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);
5 t  p# L2 m: d   }
0 `. a5 a: F  h4 [% [, ~: Y  }0 m  F2 r; v, O4 B( X' M
 }# ~/ q7 \" }5 E5 U3 Y
}
- p4 Q! t: s( W==============================================================0 D: @. _  m" o% [2 ]
【程序23
: F- n) a7 I4 ]8 h题目:打印出如下图案(菱形)
*
/ U! H8 u- A3 F) [4 b9 ?" M+ `4 A+ b***
4 {5 @6 D- c3 w2 P. S9 f% u******3 W1 N$ H4 d! q7 }8 @" J  Q
********! g# z8 c' }+ o( y2 v" U3 L
******
2 n# P4 |0 d, O6 }! w- A3 f5 j***7 f" |( I( [  B$ _2 T/ z
*
5 N9 o, P6 ]4 n) k/ w6 |1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重
% v9 J' k2 H4 ]! B' y5 j! S      for循环,第一层控制行,第二层控制列。 # M  G5 C' L2 j: z: N
2.程序源代码:4 [7 r, z% ]0 P& i5 S$ ?: i
main()
4 E" l$ Q& j( d- C5 m* X% S; Z* L: x{
- q2 U2 Z; _2 G9 J: d% fint i,j,k;5 q1 D5 j; G# j9 Y1 r
for(i=0;i<=3;i++)
3 u' e3 J/ d1 q% a/ J, {; U4 l {& I3 q- t0 r5 u) R) G
 for(j=0;j<=2-i;j++)
6 Q! d* ]2 B. Q4 i5 Q  printf(" ");
) c; E1 m: D$ Z! ~! v5 q# v% Q for(k=0;k<=2*i;k++)9 x) k) R8 `+ d' d& T
  printf("*");! z" \2 A! m1 y! H4 l0 J* |% T3 A
 printf("\n");
& u! V# Z. |7 e& U( E# a }
- Z. ~; r- L/ n% Qfor(i=0;i<=2;i++)
. n( S9 k$ I0 C( ]5 `* m0 } {2 r; V1 t; c8 {7 y; J$ W+ C- l. u7 t
 for(j=0;j<=i;j++)2 H: D& i4 D) a" y/ H, \
  printf(" ");
/ S- J5 D- d4 T5 _ for(k=0;k<=4-2*i;k++)- s0 B  h( x5 i5 V  Q
  printf("*");
* U0 |5 n: Z, U; ~( e% m4 P printf("\n");
& s4 x" e' o, I) a) R9 X+ p2 ] }# {5 e: Y/ Y7 ]( R" X8 O% d
}
. h' @& y$ L1 o! x+ L6 c0 Z==============================================================
: h* Z( K  M) N4 n' T, W" O【程序24
: U5 \2 @5 l. D! p题目:有一分数序列:2/13/25/38/513/821/13...求出这个数列的前20项之和。
  ]0 j5 N# K5 _1.程序分析:请抓住分子与分母的变化规律。 ; m+ Y: E4 E# K- e$ }6 W, `2 ~
2.程序源代码:
' J5 E# u; b; Cmain()
; S8 ?, k5 M  @{  K7 k$ L" G- i4 N1 u
int n,t,number=20;
" R2 ^1 F; h! o* g! Pfloat a=2,b=1,s=0;. s; {7 ]$ l6 b- e. {( _& m. r# r
for(n=1;n<=number;n++)
# D, a+ U( y8 l( N {, Z4 i, {3 D! {% _
 s=s+a/b;
8 c$ x8 G2 z$ A2 \  L* ^8 V t=a;a=a+b;b=t;/*这部分是程序的关键,请读者猜猜t的作用*/2 d' _/ m1 r; t- t
 }
8 V/ a# Q3 o: c. m, `printf("sum is %9.6f\n",s);
- r% [1 N1 r3 c# M}
  u+ G$ c% ]% U; ]==============================================================# E+ l/ u& E1 a( N7 q' H2 a4 u
【程序25嵌入式学习企鹅要妖气呜呜吧久零就要
# }4 z  I' _# J4 [0 K  {& V% v1 A题目:求1+2!+3!+...+20!的和2 o' Q  V9 k8 B# A. @& @! Y5 ^
1.程序分析:此程序只是把累加变成了累乘。 8 h" F! K& A" `) e2 ]
2.程序源代码:
; F+ D/ a( w4 `main()/ l  y- O8 }1 C
{
. n8 }# d( Y5 o$ T$ J  y* O1 ~float n,s=0,t=1;
" }7 ?; Y) Z: _: |% {! h. wfor(n=1;n<=20;n++)) H( C/ c) z% A
 {! S) k2 @6 v7 H( _7 F$ P
 t*=n;+ G, n$ h; Z0 B
 s+=t;
# u0 A% ^' U9 {& M( e4 G }
9 b: \. x! U  b" x& Y# T$ ^9 }: mprintf("1+2!+3!...+20!=%e\n",s);2 l& c) O! d8 k5 a! q8 ^7 @( d
}
( r9 M) ~' u7 m5 Q- K, h==============================================================8 T5 Q7 B$ |% k6 {9 H
【程序26
2 J% m) K. L8 G$ Q0 K2 n题目:利用递归方法求5!
$ |! I. ?5 r5 j! K3 Z1.程序分析:递归公式:fn=fn_1*4!7 T0 a: h  S0 ]  O( H* L2 _+ u
2.程序源代码:) B5 N/ w8 B  Y5 p2 l# T; g# C5 i: I
#include "stdio.h"
% S6 F1 w' w7 S( q0 \9 ^main()  _$ G) V2 N$ w2 Q$ R$ x; ~/ d
{, ]2 ?4 S0 l4 ?$ s( a# g5 N4 K  n, N
int i;. C1 y& {4 Z1 v2 @( q6 V/ }
int fact();
6 `, \& `' f! k) H9 Hfor(i=0;i<5;i++)
. v& q5 f7 L" i( v4 { printf("\40:%d!=%d\n",i,fact(i));% v% L" R3 K  ]2 a  S$ a9 @$ S8 q
}
/ \! b1 v" s/ H- q( lint fact(j)% g/ W& b1 G7 [8 v; X! m7 }
int j;' U% {+ e7 _2 k$ B) C7 E: L
{5 h) Y' K) h& P- I
int sum;
) n" M) @( u% S8 Nif(j==0)
- s, C7 X. A* f+ p/ V7 M1 U sum=1;
/ R% \0 o5 U* u3 y4 \else
. P3 M1 H6 F+ D0 } sum=j*fact(j-1);) b4 I0 A1 H3 \5 Y6 [
return sum;! {6 u  N: ~1 l) t: B0 `* X7 {
}
) I* w' q; }6 Y0 e- U==============================================================
! M; h% l3 D! M: E# d4 F
回复

使用道具 举报

2#
发表于 2017-10-9 21:23:19 | 只看该作者
学习了
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|机械必威体育网址 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2024-11-27 06:19 , Processed in 0.053186 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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