机械必威体育网址

 找回密码
 注册会员

QQ登录

只需一步,快速开始

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

C语言算法16-26

[复制链接]
跳转到指定楼层
1#
发表于 2017-10-6 15:41:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
【程序16# [* g3 x% ~: a( K. z
题目:输入两个正整数mn,求其最大公约数和最小公倍数。
4 h% F- N! m( t0 {: g
8 O6 {6 d5 B+ {4 G( v! U: t( }9 a, {. _* y7 m
& [5 _- [2 e  b1 |" r
作者: zhlei81 2005-1-22 11:30 回复此发言 # B3 n6 t2 f- p8 R! e

9 d& I6 Q9 b' ^' M--------------------------------------------------------------------------------
6 e: J: r% |2 a3 b1 {! o
2 r9 o$ I) M, t1 U4 M4 回复:经典C源程序100
4 |+ Z( U, B4 }9 ~% X3 C6 P1.程序分析:利用辗除法。 % Y2 ~+ B3 |1 n( R- t* A8 O
( l9 t2 g- T! X" T9 R
2.程序源代码: . F" Y  `, _- i( [
main() 3 q; A; a; e+ e, O: B  o
{
, N& [. Y* d3 ^, p+ yint a,b,num1,num2,temp;
: K- x, z& V1 {printf("please input two numbers:\n"); 3 d+ L" r8 }' D9 D1 y
scanf("%d,%d",&num1,&num2); 6 U: I% `) O1 {4 u4 L$ K! n
if(num1 { temp=num1; 4 w% X- w4 u* Z
num1=num2;
5 A7 G4 W; ^" x1 Gnum2=temp; 1 o/ s' c  t* ~8 p/ j
}
3 @1 y, G0 {' e) S% e- ^! F7 X0 Ia=num1;b=num2;
9 h5 l0 F& D  z* Z& Pwhile(b!=0)/*利用辗除法,直到b0为止*/ ; B# C3 v1 I/ I$ G, L
{
, G8 n5 [2 ^6 `& Ttemp=a%b;
7 U" B$ u3 d; Z. ua=b;
  H* {- P+ o$ A' _' c+ A0 Db=temp;
$ s4 l" f2 q) I}
$ `7 M4 R5 @  t: k% ^! q: S$ Jprintf("gongyueshu:%d\n",a);
: e' n' b+ J6 o8 a7 eprintf("gongbeishu:%d\n",num1*num2/a); / B/ h2 A- D- |# i1 e+ @
}
( W) B# I( S$ u* }+ B==============================================================
/ J1 m! u" @' W! e* N' n【程序17! m; O/ R2 l. ~& ~& j# i8 x; k/ |2 C# J
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
; f# m4 P" c% M$ l' ]7 N2 R1.程序分析:利用while语句,条件为输入的字符不为'\n'. * Z4 A& [+ o6 a) h& p; _

/ V0 \2 {/ B* @" g& ~% R2.程序源代码:
! }' e! T0 E1 s! n& S#include "stdio.h"
+ Q/ C: E7 ]7 }8 {2 {, ]% F" n- ^main()   f7 N* S6 T6 X" n8 y
{char c;   ~1 n! Q6 V# q* b  f" d
int letters=0,space=0,digit=0,others=0; - B7 |+ o6 ]- d/ @
printf("please input some characters\n");
' n+ s# H* e! C* X) ^- Xwhile((c=getchar())!='\n')
) L) J6 D( a7 o" l0 `9 R3 N) O9 U{
0 h6 R% {2 L  q' G$ A" B0 sif(c>='a'&&c<='z'||c>='A'&&c<='Z') / u$ I6 `! B" D8 }" d% I# Z; \
letters++;
' t4 a- |; X( V4 Q6 y- ~else if(c==' ')
" N" q6 p& {" i9 y* espace++;
( P. G' Z8 f' B6 R: n4 {$ ]else if(c>='0'&&c<='9') 3 h+ K) P8 x( L2 P3 @4 W( Z/ {' z) Q
digit++;
1 j% Z5 L& ]- ]% ^1 ?5 m6 {7 Helse 1 ^2 N2 d: s/ v# \
others++;
- L" c' A) H5 c2 h. l+ A} % d- s* g) z% k  a2 k- U
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters, ! n4 c5 \9 E/ a5 U' U5 o
space,digit,others); 4 q$ Y6 T1 u% S0 x6 j6 z; L; C
}
) ~; `5 \2 n+ C7 w, ?$ G============================================================== # \& k- {- y. h* k' j5 C! T1 Z9 J1 y
【程序18* ~0 f% x: y1 X7 i
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时 , N% [6 M: z  o' |% S
共有5个数相加),几个数相加有键盘控制。
" y' e/ x1 [/ P7 K( ^1.程序分析:关键是计算出每一项的值。
& W. T( b$ s7 {& h7 m7 T- b2.程序源代码:
# q! o9 U, Y9 fmain() ! W$ D% p# M0 S- v5 N6 s' m% V8 F
{ ; ~* e2 a/ o1 J* @# ^; w8 ]! b
int a,n,count=1; ( f8 O5 c6 l3 f' w% P
long int sn=0,tn=0; 4 W, ?* |: F( Q) a! G
printf("please input a and n\n"); , [# e% [4 `- f3 Q; ]- a6 I* X
scanf("%d,%d",&a,&n); . @) `  |: U  q; Y' f: P) U
printf("a=%d,n=%d\n",a,n); " T2 t; c( c9 d1 }
while(count<=n) % e- ~3 t+ C: Z: j2 p
{ $ a  I0 d: A9 r. j( B& ~
tn=tn+a;
1 Z& X8 k. j% F9 m5 ^7 usn=sn+tn; 8 h0 Y4 @8 ]; O2 U( g6 K
a=a*10; $ s4 a% k' |; O
++count; . s1 Y6 f) }' x9 y4 }; W1 T7 u
} : V* [% u) {. [$ q
printf("a+aa+...=%ld\n",sn); 3 V; ~3 q! t/ B6 @+ V6 n# D' K
}
$ }- B7 c( B/ H0 L* q- x# Z==============================================================
9 f2 A8 ^, ?8 Z8 G, r2 v' }# ~( U【程序19
5 E( ^+ y% m& A* J, R4 \题目:一个数如果恰好等于它的因子之和,这个数就称为完数。例如6=123.编程
& B5 b& }$ r5 Y# e$ p9 E0 D, y% r/ f9 ^# }找出1000以内的所有完数。 , L) T- }; D" N5 b$ h
1. 程序分析:请参照程序<--上页程序14.
; {# G4 t" M& f  T2.程序源代码:
+ R3 V8 ~: x' x( H" {2 l' Ymain()
  U) w$ E' P& |: Y{ 7 K/ r$ h( ~3 {7 g' U
static int k[10]; : H& @/ Q# g5 v# e5 K9 i. c" C
int i,j,n,s; " f3 r5 T3 f: A9 e* s
for(j=2;j<1000;j++) 4 c+ D+ H$ u* J4 M, x2 c4 p- ]. d
{ & Y5 n- M& a- ?0 \; y2 R
n=-1;
( P8 M9 ^8 J$ us=j;
) n5 W  h6 w0 H: M6 O7 h+ tfor(i=1;i {
1 c6 M1 S* n+ u, vif((j%i)==0) # J) o- N2 {" [: a0 V
{ n++; 0 ~: n% [! l; J/ Q9 V
s=s-i;
: H+ a& d& w. k+ `: yk[n]=i;
% m6 F; f6 A$ q- {} , c; q$ E/ D+ _: [
}
8 v5 g" D0 ?- l& E5 P" r, Nif(s==0) # S" j, A7 ^6 o( n: x
{   b  |) s. l0 A7 O) Z# a
printf("%d is a wanshu",j); ) c& W$ t* p$ k5 V. r7 h; P
for(i=0;i printf("%d,",k); ; i! {# y) [7 }4 h" W  t
printf("%d\n",k[n]);
% x: V* I% v# y' j6 ~}
9 [. u! \+ g$ b2 Y& C6 \/ i}
1 Y# P& {$ F" K% w}
* D% V+ z* L. p8 u. [. ?============================================================== 7 v' z! p+ c3 L* V- J
【程序20! D9 u; P3 h* d+ _1 V
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
; E- c7 L: ~4 X& [7 L! U5 j10次落地时,共经过多少米?第10次反弹多高? % S7 [: f  E. v/ P
1.程序分析:见下面注释
4 g. S5 I) @/ L1 _) M4 K2.程序源代码:
% T2 F( d' U$ T5 @! {2 F0 @+ ~5 Zmain()
! s3 T  k5 p8 Z' b7 b{
' S# b) D$ N6 Q! A0 z4 i2 a, ^float sn=100.0,hn=sn/2;
: o0 J/ T0 b, t; f4 nint n; & p* q7 @. B0 F( X
for(n=2;n<=10;n++)
1 B3 i3 o9 |) ]2 `. t8 a) G{
$ o8 V) n( e; \6 R0 r) a% ^sn=sn+2*hn;/*n次落地时共经过的米数*/ ; Y6 j! p& ]5 R; `4 K
hn=hn/2; /*n次反跳高度*/ + T% I1 M5 d6 ~( T% @3 N8 J
}
. X& s* }; p- P- U6 u1 ?( F6 c$ Sprintf("the total of road is %f\n",sn); ) a) g, ~* a1 y
printf("the tenth is %f meter\n",hn);
+ R" i, w6 y% x3 B( U}
【程序21
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
9 U2 Z9 c. [2 T" H' B- m   第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下% [0 ?, Q& L) K0 Y+ {  p
   的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
% O$ B2 j( w, N$ O) }" Q  ]1.程序分析:采取逆向思维的方法,从后往前推断。" M  H2 w$ U+ `
2.程序源代码:
5 d& y% w/ J3 c2 cmain()
8 m/ Z5 Q- S5 x( N, X9 g0 V5 v% A{. G1 e5 @+ V- x9 |" r- u
int day,x1,x2;- ~6 l9 \2 f* d
day=9;
# _3 f: O$ ?  O4 v0 e  p3 \x2=1;' k& q8 ~7 f$ J: M
while(day>0)) a/ j. G; Y. K# W3 a; i/ d
 {x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2*/' c1 ]8 C: |; [7 l+ a
 x2=x1;1 b) j5 X3 t2 \- W" D: k
 day--;
! m( d0 B% M" H5 h3 M, O }
4 V5 M$ c" Q5 z( c4 C8 w* K5 Vprintf("the total is %d\n",x1);
6 a/ M% A$ `  j' p! w}
# e4 F+ i+ n' S, k( k==============================================================
$ o/ s' g; ]+ E; e2 m- \- o【程序22" W: \5 D! H* F* I' Q5 {( w
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定
, Y8 C- i$ o* H( D0 \$ ^, g! m3 E   比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出/ \% h$ \" q6 n% M. c2 x( `7 t- y
   三队赛手的名单。
, w) {( M" \8 Z3 ~1.程序分析:判断素数的方法:用一个数分别去除2sqrt(这个数),如果能被整除,
/ X' k' V: s6 i$ e8 a( E      则表明此数不是素数,反之是素数。       
& ?) W, w7 B' Z( J" }, T$ T2.程序源代码:4 S3 v! g: p9 B8 t7 d6 L" ]: e2 n
main()
+ ?% @0 k+ c5 Y) j8 F; f{
) l) Z$ M! b+ L+ \3 P5 jchar i,j,k;/*ia的对手,jb的对手,kc的对手*/, _: E2 r- t4 r/ K. g5 X6 _: F
for(i='x';i<='z';i++)
1 m  I6 S9 k  l+ u for(j='x';j<='z';j++)
/ F" y) Z# t" D* g# e+ W {: j* M8 d6 q# C0 g: n. P
 if(i!=j)/ W: E, ^# u; ^4 N
  for(k='x';k<='z';k++)
0 q% k5 d: U) t  { if(i!=k&&j!=k)0 e1 h; K2 U' X/ B2 ~: r" o  m
   { if(i!='x'&&k!='x'&&k!='z')2 V" u3 f; k' H9 [
   printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);
. a; W! {) `; ]3 s! A  r   }
$ g7 Z4 v9 N* o7 Q4 ?  }  ^6 D; B# |% t
 }+ \; t+ u# R( V; F/ O5 D- f
}$ k  l( ~( f0 P, ]6 a5 Y
==============================================================4 k/ x+ j& R" k/ p
【程序239 V3 }- {) I6 d) r/ X3 ^
题目:打印出如下图案(菱形)
*% A: Y- c; m3 i- k# k
***, a4 x9 f' D7 O- U
******! {& p9 n3 S; K! K
********
8 b) f7 M) Q# ~4 ~******
1 h' Q' Q- |% V' q***: k  h, ~( L+ |: j! X4 K
*3 d/ x' C; M5 p8 h) L$ A1 b* @
1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重9 f6 p( ?7 M' e- v+ }0 }' }4 w
      for循环,第一层控制行,第二层控制列。 8 L; G) @+ J) r) N; a
2.程序源代码:
2 n$ w) H: K' s' P( G: Fmain()
! u; v6 d  K+ s* d% x' Q/ ]+ J3 C{
) f5 Z8 _: r( c; C& L. `/ L9 N3 N3 zint i,j,k;, R$ o; Y0 M) ^! y6 J& y- }
for(i=0;i<=3;i++)3 g! ~- ^* O. J& ]
 {/ g6 k: i5 I: J" u
 for(j=0;j<=2-i;j++)5 A9 q" Y0 r; C1 _* n! k
  printf(" ");( q, f* X% U' E: _7 ~' A
 for(k=0;k<=2*i;k++)
/ X0 _" {0 x8 t3 d4 l$ z! B  printf("*");
4 e! p% i' N( U7 L printf("\n");  `. L6 D. y3 i  v) y0 W
 }! W* X) Z4 r/ Q, j
for(i=0;i<=2;i++)# q6 E  M. ?5 r5 X7 [5 Z2 K
 {
+ i2 m" _4 i2 `5 a for(j=0;j<=i;j++)
' b' u7 {( P* J' c+ h: S  printf(" ");
. @/ @: h8 Z( ~2 t: Y, k# n4 {5 A for(k=0;k<=4-2*i;k++)
" n0 D, S! A" k: |, t  printf("*");
2 ]* T# t4 n7 I printf("\n");. o/ e, C4 e( Q
 }: W3 e# X6 b  H1 Z6 U5 S2 T  N; v
}, z' Y4 ]0 @3 D' c8 l- U& W# f. p. D
==============================================================
, S9 o, o, b, @$ g# `7 v8 I【程序245 ^0 x( i9 h( m4 }  L# G- s& V
题目:有一分数序列:2/13/25/38/513/821/13...求出这个数列的前20项之和。
, W. b* D# a/ K" n6 Z1.程序分析:请抓住分子与分母的变化规律。 5 o2 ^" e1 D" z/ _
2.程序源代码:
2 W+ Q& l0 v" v2 u. e" y; mmain()
( ^+ w' N) I8 B/ I( ^. @{# ~2 B" f' k: V8 L1 Y; A$ D: z( [
int n,t,number=20;1 Z' o" \2 g' P- J% Q
float a=2,b=1,s=0;
7 U# a0 |+ w/ e5 K: ~for(n=1;n<=number;n++)& K& G6 a5 n7 W- m
 {
- z- N+ k3 d! w7 ^# ? s=s+a/b;
+ g2 l3 K, v' j( y- M/ x t=a;a=a+b;b=t;/*这部分是程序的关键,请读者猜猜t的作用*/
+ m3 @2 {' M% X* K3 Y9 s# M }
! H7 r5 m0 I6 o1 U# _$ J  zprintf("sum is %9.6f\n",s);# k$ t. x# [* z  j2 w! G) C3 a
}9 @4 `" C! l& K; O( l
==============================================================6 f* d  I; D, h+ y2 u# c. E
【程序25嵌入式学习企鹅要妖气呜呜吧久零就要1 {: }/ Y9 T7 a& @7 Y, X$ `
题目:求1+2!+3!+...+20!的和. A6 f, q9 `) O) \7 G' a& O
1.程序分析:此程序只是把累加变成了累乘。
( F- F& W( O0 Y6 ^( H2.程序源代码:, \6 M( M! S1 u4 M
main()+ ?5 o5 X0 V* S
{
% o+ G. `/ j5 Xfloat n,s=0,t=1;* |( N8 x0 g  x, y
for(n=1;n<=20;n++)
4 Z) Z/ A$ j: V4 t$ C% Z, o {# F2 |; q) Y: w0 Y
 t*=n;+ b7 K) c3 R" }7 H& y( Y
 s+=t;
/ d* q* n" g7 Q1 s  Y }( J" |  b! {! T0 W; ^& }
printf("1+2!+3!...+20!=%e\n",s);
& O$ O7 r0 N$ P  L5 G8 c* `}
1 l/ E4 M8 n/ `! X7 U==============================================================
; S8 I1 i/ N2 s. Z【程序26
9 z& p* d" q) J% z+ J5 q题目:利用递归方法求5!* o' L7 J& ?4 z, w- b5 ]
1.程序分析:递归公式:fn=fn_1*4!# s& I+ Z. T' Z& K) ]7 a
2.程序源代码:
. p* Z& C/ L  j& q#include "stdio.h"- l3 n3 F3 M( Y. w4 h+ w7 R
main()
- Q! _. h5 ^! R# ]{& j: J+ ^, H6 x! \& i
int i;
+ t0 ^' L3 ]" [+ o; |0 Iint fact();
( @  s$ D& `# {/ f* Yfor(i=0;i<5;i++)
( Y) \3 R+ a7 K) T0 N printf("\40:%d!=%d\n",i,fact(i));  Q* G  i9 R- Q( u/ ]) d
}1 A2 z" ^8 j4 o! ^# C
int fact(j)
6 q! r2 e+ p+ z0 `int j;
+ U* j/ L. q3 _5 ?! s& J{0 {, P3 J5 u1 S
int sum;
' c8 l1 b9 O! @, \8 e7 U6 ~if(j==0)
$ y) l5 s" G- r9 ] sum=1;9 g5 S% {/ G% ^9 z  c$ P
else
/ D4 z6 M+ U8 B, F  t( y sum=j*fact(j-1);7 v' m; F' b8 f& W: E' b7 V
return sum;
* g  P# _) p; x% D+ M}
! R) y. y( k( V6 i7 g3 D$ u==============================================================

* j5 Y+ g! B& L/ K! I. }3 Q' X
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-19 07:01 , Processed in 0.072636 second(s), 13 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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