机械必威体育网址

 找回密码
 注册会员

QQ登录

只需一步,快速开始

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

C语言算法16-26

[复制链接]
跳转到指定楼层
1#
发表于 2017-10-6 15:41:14 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
【程序16
5 i4 e& r' S- x: _! ]2 j3 o. J题目:输入两个正整数mn,求其最大公约数和最小公倍数。
6 Q9 L8 l! C' F$ [3 i  @  g0 a5 \) Q% @  L4 r3 |) v
: Q( e5 B' P& v1 H9 C. D; Z8 R' n
8 K5 j+ `* h/ r4 W
作者: zhlei81 2005-1-22 11:30 回复此发言 + ?6 E) Z2 F1 M9 }7 ]% [! _. e
) E# J. l( h- z! E+ t$ O
-------------------------------------------------------------------------------- & d5 O3 O4 Q* y% ?8 V$ M
) h; J8 r3 O) }: c! `
4 回复:经典C源程序100
) v" Y3 g, }1 n; K7 ^1.程序分析:利用辗除法。 ) x3 D2 i( B  F7 Y
4 X, j2 G+ X: J  j6 _# ^
2.程序源代码:
$ r( X8 y; t! Q( E- S6 f1 I+ xmain() 6 k( L( S2 ^4 Z! k
{
. \: p: o  F; V+ ~( ^, ]- hint a,b,num1,num2,temp; # X. W! b: k5 X. W& q: l
printf("please input two numbers:\n"); ( d- T3 [# `/ f: ^6 t0 C# {; y9 E$ @3 ?
scanf("%d,%d",&num1,&num2); 1 d& S) |8 X: O; `4 Z
if(num1 { temp=num1; 1 G, j6 B1 h( M% q$ {
num1=num2; / u' ~9 T4 C; l9 i( X% r* \6 O
num2=temp;
! k$ V# a1 {" ^1 F* K* C0 {} $ t, p2 @9 X& k( `# i
a=num1;b=num2;
. `8 {6 s) i1 ?* q8 _while(b!=0)/*利用辗除法,直到b0为止*/
6 t8 X1 E% Q! p3 u8 V{
9 }5 W* W6 n' r( x4 Mtemp=a%b; + D9 p5 o! p# t4 v" a4 E
a=b;
- l) l6 s" ]1 h* lb=temp;
0 O4 F7 w( y3 \& ?1 W! o}
# R9 N( O8 n2 M+ k6 b4 Dprintf("gongyueshu:%d\n",a); " g" g! I8 x) _, N
printf("gongbeishu:%d\n",num1*num2/a);
$ g: ?) z( D0 C+ K}
/ A; f( l! P* I/ R3 D============================================================== 8 A/ u2 S7 Q3 h/ k" ?1 ]
【程序173 O" W1 S+ [, A
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
$ w, n7 ~, m7 k8 v1.程序分析:利用while语句,条件为输入的字符不为'\n'.
9 n" B! `+ N5 }; R& W- w- A5 n% |" _) P  F9 j7 b  [4 m# L, m9 K* N/ w
2.程序源代码:
( f7 N, P3 p8 x7 G#include "stdio.h"
* H! g2 Y& b' N9 }3 \main()
" f% r/ a8 H8 U+ \$ T) a{char c; 5 b; x" I( C' ?
int letters=0,space=0,digit=0,others=0; + U$ `+ O% I) y6 n  G
printf("please input some characters\n");
" D( Z6 w' {6 g6 e( o# w4 G6 `while((c=getchar())!='\n')
" ?! t0 Y. \6 N6 |; V( ^{
4 S, y( z4 x$ M2 |+ pif(c>='a'&&c<='z'||c>='A'&&c<='Z')
" M0 S# |1 E' w: c# }" zletters++; 4 j; s3 q/ z( U0 J, r
else if(c==' ')
& z# t6 v$ x9 ~* J- Jspace++;
2 ], q, @# \5 m# y7 d* belse if(c>='0'&&c<='9') 6 ?0 \3 M5 z! \
digit++; / [/ n4 k9 [! y) L
else
5 W2 N$ I% Q, @2 b* j6 q/ iothers++; ( h0 f5 e* l( ?$ x
}
6 w, z; B  U) Fprintf("all in all:char=%d space=%d digit=%d others=%d\n",letters, / M  k8 l( {: [: d: O- t/ P
space,digit,others);
7 D% f2 e: H3 T! U- `} 7 ~, z/ U# m0 b5 H$ I# d4 d
==============================================================
  K" w2 P; |7 e: P; j1 t$ H7 n【程序18
8 X0 W% a9 \5 z: n+ s: v4 n题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时 ; N' D' W9 X8 C! ~  @8 ?
共有5个数相加),几个数相加有键盘控制。
3 }- w5 @) P4 S" o/ X7 F1.程序分析:关键是计算出每一项的值。   Q2 j) Y& Z& X  v- M
2.程序源代码: 9 i9 z! _# ^$ H) z- Y- N
main()
2 |; E! J3 q0 F) j% l4 |1 a{ 7 Z9 z5 V6 R  n7 O4 D
int a,n,count=1; + [8 x7 [. }, I
long int sn=0,tn=0;
9 z" T* t7 M& H. ~& \# Sprintf("please input a and n\n"); 2 F* J& {, S5 p  h# O, c' @
scanf("%d,%d",&a,&n); 4 D5 G9 z  O" q1 z; Q
printf("a=%d,n=%d\n",a,n);
/ b2 ~4 i" V' u. wwhile(count<=n) " r/ ^2 t, ]4 t. Z! @
{ 7 A' x5 n# \; p, L4 }% b: D! z
tn=tn+a;
2 k; ^- ^$ c0 r% w3 i1 [% {sn=sn+tn;
: ]8 B+ l: t; M1 q! x3 H" Ka=a*10;
2 Q9 {6 I! v, L6 T: m4 }* J++count;
) l3 C4 f+ l' e5 e8 ?  P# x+ p} " O0 C0 W: I) Z* Y
printf("a+aa+...=%ld\n",sn);
7 S7 l. e$ N$ w- N) N* T  t6 A& d4 {' n}
; S( C. j# z# a& r$ N+ a& L============================================================== . h( q6 e5 R  B6 [  T6 Y
【程序19& V( o7 g3 r+ [* G
题目:一个数如果恰好等于它的因子之和,这个数就称为完数。例如6=123.编程
% o/ q5 z4 J/ F找出1000以内的所有完数。
1 D/ q* x5 Q& v3 E4 r( Z1. 程序分析:请参照程序<--上页程序14. 9 }. t/ U+ h: ]3 c! r8 Z
2.程序源代码:
' p/ o) Q; M- Pmain()
4 h2 P& Y+ N: X& I/ a( x{ % V" W- V& a# @- Z1 [
static int k[10]; 6 t& `- K( @1 @/ n
int i,j,n,s; ' e% a9 K  I% F
for(j=2;j<1000;j++)
$ U& S) Z6 l: v% g0 o{ 9 ]9 t. g+ g# A5 d2 O4 e
n=-1; 7 a6 m( u. N- \4 ]
s=j; ( P% v- d. C: R- C6 E# [# q% l2 w7 r
for(i=1;i {
% I# K( Y; `' gif((j%i)==0)
$ A6 P1 C* E2 {/ u5 B, ?{ n++; 6 f" V  T5 L+ Q3 B# M5 q+ V
s=s-i; 6 y# s" U7 T$ x
k[n]=i;
3 p1 B9 A* V. K) z+ n) j}
" l1 J( Q. r' B# T8 B) [" s6 H( O}
6 z" _$ M9 o& S1 S/ i% l" Tif(s==0)
: s- Y* @# |* \( q, t+ Y{ 9 u. x( B$ ~5 _" _% ^
printf("%d is a wanshu",j); $ D+ U" e( M+ f0 Z" o8 {; q  B
for(i=0;i printf("%d,",k);
7 T5 d, ~4 D8 ?3 Bprintf("%d\n",k[n]); 2 U* e: y$ j' L8 G9 V2 F9 f
} 3 W6 c6 a- w9 L3 y
} * N  M+ T0 K+ `- \0 [
}
5 [5 [" H: |, N9 I, S============================================================== - K: V0 z- W1 K) H  q1 n/ A
【程序20
" {3 U% ]7 x7 y3 ~题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
$ Q  u* D* M% {/ g2 a10次落地时,共经过多少米?第10次反弹多高?
0 p& ]6 L# D/ h" e9 ]3 @+ |. n1.程序分析:见下面注释
8 m3 U; E+ T4 J4 Q* W1 G: p( y2.程序源代码:
2 y; U$ }  p9 x3 m4 w$ Vmain() : p9 @% K- Y6 |0 G
{ - a. z4 H+ U0 l. |
float sn=100.0,hn=sn/2;
2 k  r) Z0 Q8 gint n; * K2 G3 l; K. y( Q$ l5 J' Z  Y
for(n=2;n<=10;n++)
4 \- c; Y, v$ ~5 q- k{
6 ?3 {2 c! E1 ]7 k+ Nsn=sn+2*hn;/*n次落地时共经过的米数*/ 2 {. [) x2 S+ w3 {
hn=hn/2; /*n次反跳高度*/ , @2 P* H& a8 G4 J. k. x8 b" M
}
& ^5 Y- A' R' T5 Bprintf("the total of road is %f\n",sn);
+ m. z/ B2 l/ R1 M. }3 bprintf("the tenth is %f meter\n",hn); ! I" N5 i7 b6 `. @2 ~' s$ G
}
【程序21
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个: K! r) r+ c8 ]3 }
   第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下: ]- j3 u9 c2 x( q
   的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
8 A0 l1 H/ L1 P- E2 Y# @0 o1.程序分析:采取逆向思维的方法,从后往前推断。
- A  }; f$ ~$ p9 ^4 l, K- a2.程序源代码:8 o4 m& N3 R4 U+ v5 V% w
main()
) L' I5 F* [4 v* N{- r7 u4 A8 q' y- I7 y* a% f
int day,x1,x2;
: x, q/ x& Z$ o4 ~. j0 i6 m! g5 Oday=9;" ^! `6 O% x" T) K
x2=1;% X5 ?! p) E" k2 W4 n
while(day>0)4 @& g% N4 p) d" W
 {x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2*/
' w; g4 G, M& z2 |) j8 m x2=x1;
# U8 x9 S' Y: g4 l. Y  T+ j day--;  B$ J: S* v7 |$ _. }  {
 }
! [% @2 O- P( ~- `. pprintf("the total is %d\n",x1);
5 d, k- ]/ y) `! i& N}. X) e8 L4 @7 t* u) F
==============================================================
" m4 Q  a$ ?" ]; `7 \) ?- Z【程序228 B5 y/ i$ g6 d& G
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定' {/ A/ Y& k# ~0 m( B
   比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出; O2 Q. N! V& u2 N; o, U  V- D
   三队赛手的名单。 ; G. ]8 g1 v. D
1.程序分析:判断素数的方法:用一个数分别去除2sqrt(这个数),如果能被整除,
5 I' u% d) v; N2 W- s3 B      则表明此数不是素数,反之是素数。       1 j7 j0 V5 ]  E  V2 ^) M' o" @
2.程序源代码:$ l( [+ r3 ^1 c0 c& N7 [
main()9 O& L  i: z' w- y0 Y2 F! K! u$ ?
{
" |& h$ a* W# ?5 i0 q& y  e- Qchar i,j,k;/*ia的对手,jb的对手,kc的对手*/7 ?# S8 c" z. ], y  c" M* J
for(i='x';i<='z';i++)
) J; c3 u8 n' [9 [0 y3 o for(j='x';j<='z';j++)! j7 }* n5 t) _) @# q
 {
6 V$ ?9 K9 {! Y if(i!=j)9 \" j5 \: U  m4 }
  for(k='x';k<='z';k++)8 K. Q. A& q0 q: N/ {/ W
  { if(i!=k&&j!=k)0 ~8 \' C* K+ C  Q8 c) Z
   { if(i!='x'&&k!='x'&&k!='z')
5 I5 D/ `( @$ m7 v5 v) y& j   printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);% ]1 Y$ ~& Y. i8 E, f
   }8 L( U3 _. m: ~) ~0 k; C: A
  }& h4 d0 s8 Y' X) M$ Q5 E
 }/ N* m& y- M3 ?' P
}( V6 i) V+ K* V( _
==============================================================( g5 X3 i* q' V. \
【程序23
/ G8 p  B6 i8 m# n( t* M5 y# h* m题目:打印出如下图案(菱形)
*
7 k. P# G8 I% X' C, M4 k$ d- H0 c***
: O3 o) C% F2 Z& q8 H! _5 M******
/ s+ Z3 ^; Q+ O% k4 e7 T" J********7 U+ K2 I- j& M/ `4 v: R
******
0 V" ]1 |7 f* k5 b( V: K/ f***/ _, g* C$ G  K+ {
*
2 _' J( t5 E# j" Q4 ^) E1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重4 s8 O$ c* C8 @# j0 p: L
      for循环,第一层控制行,第二层控制列。
; I& k( }- b2 g+ m4 @2.程序源代码:- v$ \' X& e$ b% u  z7 ^7 U0 U) q
main()2 w& e9 c6 f5 N+ S# r8 ~6 F" b; h
{9 B( v  y/ V, {) A/ q- Q
int i,j,k;
! k5 a; T1 Z4 Wfor(i=0;i<=3;i++)7 Y( p' b- x* @. F! Q; ?& D
 {
# f* ?0 c. n  x; m/ Y# s for(j=0;j<=2-i;j++)
0 z3 N. B  f. W( [) A4 U  printf(" ");! M6 }$ U/ H+ j9 `
 for(k=0;k<=2*i;k++)& e) b2 Y8 d  Z* Y; p/ R
  printf("*");
& G, X% G# |8 A# P printf("\n");* _7 C( i2 F0 m. [
 }, e5 t, U. t: [/ A
for(i=0;i<=2;i++)/ i% _7 B0 |' U
 {
6 s$ n; W. U2 d8 p for(j=0;j<=i;j++)
) T1 ~! G- U2 V- z( a1 @& I  printf(" ");
1 x" Q0 R5 M) |% T3 F6 o3 J for(k=0;k<=4-2*i;k++)
) O) Y/ l& T( w* Z9 P. c  printf("*");
3 \* M+ I5 U; s! s8 j+ r- h printf("\n");
2 x# X) ]) G' c! [ }
6 N, l9 r; H. i# x3 v. ^& t}
# q* F9 Q. o  b8 B4 h9 g! W6 I==============================================================
: B4 I$ ]. Y- _6 ~# d【程序24
* t4 j5 g" m/ I题目:有一分数序列:2/13/25/38/513/821/13...求出这个数列的前20项之和。
) i3 e" B: N# a1 D" y1.程序分析:请抓住分子与分母的变化规律。 : p' |; V; g) K  [: E- `3 W
2.程序源代码:
: `7 R+ F9 G% U- p/ }& y* |main()
4 [+ ]& p4 f. `6 o{5 p8 a! L& B# v
int n,t,number=20;
  m. _! K- `$ w9 T9 P) Mfloat a=2,b=1,s=0;" [% O& E: B% a8 q% {$ T/ ~+ b; I' ^
for(n=1;n<=number;n++)! K; ]: J. Q& b6 p* x/ v, p  b
 {
8 k- C% s& ^% Q- M s=s+a/b;
0 M- T# o/ P4 [/ N t=a;a=a+b;b=t;/*这部分是程序的关键,请读者猜猜t的作用*/
8 h: F' o! C4 y% b: _% [8 k }) Q1 F) `; H6 n
printf("sum is %9.6f\n",s);
( ?) F5 F/ i: X* c* I}
7 d( B$ o: |; i# J* n/ h& J==============================================================4 v6 U0 b& d3 \6 Y
【程序25嵌入式学习企鹅要妖气呜呜吧久零就要8 v! R! x4 }; ]) d8 |6 m- ~
题目:求1+2!+3!+...+20!的和% l/ r! v- y/ x: \) U0 a+ Q
1.程序分析:此程序只是把累加变成了累乘。 / p' S! v8 y5 j& H, E, @
2.程序源代码:! k$ o6 S; |- A; C
main()" _* [* ?  y& U+ s( ^
{
* A7 F+ _+ b# F( y4 i) f" afloat n,s=0,t=1;
$ j! u" ?7 I9 D, V* Bfor(n=1;n<=20;n++)' o( }3 g$ u8 \
 {
( {. s" u; X+ B! H t*=n;
; e. H! P& j% I, q9 @ s+=t;6 u* w& [% Q4 E
 }1 e1 f+ \* ~5 z
printf("1+2!+3!...+20!=%e\n",s);2 c- I) f: ]& X8 w/ M7 X
}
5 [- c1 r- C. H6 j* [==============================================================/ }4 O3 i: X7 H& j% }
【程序26
3 `+ o3 F! l4 k; Q! f. M6 P题目:利用递归方法求5!
0 X! G6 R6 B. O0 S. G  K# u# m3 Y+ b7 k1.程序分析:递归公式:fn=fn_1*4!
; B/ N5 L' H$ c& C2.程序源代码:
$ h: L  V' }' _4 \" o) i' I( u#include "stdio.h"+ T# s; F' S$ Z# H, l/ B+ W4 F' G: B
main()  y5 r  S  ]( M8 _3 e" \% v
{/ I+ ]4 I$ V: ?* J# r5 L5 o
int i;. V' E6 N8 ?5 N5 m) A
int fact();: `& I% Z8 g1 _4 ]# {
for(i=0;i<5;i++)
+ X. ?4 T& }. @4 P* S: D# p& M printf("\40:%d!=%d\n",i,fact(i));: S& N3 P3 V, X) H2 t5 c
}
# @% Q) M. }7 G" {0 Wint fact(j)* f5 k  T* |" q% s3 y: {
int j;
& Q* F1 o6 s/ |/ E9 e4 X  E{
, d' u/ `/ z/ ?" I. k; M6 f3 {7 Bint sum;
5 M1 S2 j* {8 p" qif(j==0)
2 }6 c! E  L# z$ m$ { sum=1;$ w. E; B- a( [* }+ O1 {- v
else2 r& E4 Q9 Y4 {* ^
 sum=j*fact(j-1);: L( }% x* p; P  Y* o$ D8 x
return sum;
3 w6 q  }+ \) W, N* A1 V7 x$ U0 m}) I# L0 i; S0 v. p; y$ E$ a
==============================================================
# s: H9 T) Z+ f9 X' T
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-27 04:14 , Processed in 0.049639 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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