找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 2537|回复: 2

C语言经典算法27-37

[复制链接]
发表于 2017-10-7 16:23:09 | 显示全部楼层 |阅读模式
【程序27
+ ^6 h+ A- c' u8 P题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。3 p, ]3 T8 w, H) Q7 o
1.程序分析:% b  B3 b. z1 P: C  D
2.程序源代码:
0 w' X+ J1 ~2 o4 i#include "stdio.h"
) f; Y% M- K2 Z; w3 P, ^& }8 amain()! v# p( q& K; b& w5 ?; H6 o
{
4 [$ @3 B  x/ [4 _! aint i=5;
! V, q9 A' d6 x9 g* Y$ Lvoid palin(int n);
$ ?7 j9 y2 G6 e- C7 y. m1 z; F6 z! yprintf("\40:");2 g. _- T8 w' k  w2 V
palin(i);% u0 q6 `9 s8 K0 ?3 A
printf("\n");
+ W* t+ X, w# W. H}. x) W" o0 T6 v
void palin(n). d; f5 R6 t3 W3 r
int n;. z* m6 j0 r7 t% E$ g1 Y: K
{4 E0 ^( f* ]4 O6 Z* n4 G
char next;
8 d4 |* A! a/ I- ]  Yif(n<=1)3 P- W6 n! c5 }
 {, P, j# o9 Q& {
 next=getchar();
3 j0 y' Q0 Q4 C2 U* y printf("\n\0:");
1 x, n4 V6 R! A( E+ v putchar(next);3 n6 i: V+ h7 o" V. N# c
 }
1 h. j, o* Y8 N. M$ t+ A" nelse0 Q/ D; H0 a! l* `, w
 {- U+ W+ S- Q6 j3 l! W
 next=getchar();
6 j5 a6 Y, c: q& v& d4 S palin(n-1);( r! O  g, _5 m& Y5 U
 putchar(next);
! j4 h3 s- H5 E, O }
$ M3 i: C4 V% r}
. d: Y2 W& t' |6 L==============================================================
+ e7 {0 w* K) c# {1 t. ?7 S【程序28信盈达嵌入式企鹅号要妖气呜呜吧久零就要 + B( o( x& _1 A" ], |! y* g! I8 E) s( H9 ]
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第
0 h6 _4 P* B2 L6 K5 \( }/ [   3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后 , V1 j3 H. `! b" H3 E) O
   问第一个人,他说是10岁。请问第五个人多大?$ y; a& [9 L9 v# y/ g; O
1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道
, t& }& T7 q& {. b4 Z      第四人的岁数,依次类推,推到第一人(10岁),再往回推。; x7 Z0 s; E: P$ L: U/ ^
2.程序源代码:
: E7 _# x% K: s; s. B2 q0 h& Yage(n)
- j' I0 X" f, s4 i9 h) n% `+ Eint n;
- n- R+ f" S8 ?6 Q* k( z{
8 t1 Q4 A2 R* ~int c;  H9 p* K5 Z& P0 E6 K* U* y
if(n==1) c=10;' H/ _0 C  p% [
else c=age(n-1)+2;
3 J& n) [( C2 F) a* P7 j# J9 dreturn(c);
. _6 z8 {# h4 C0 k" R. q& Y" d}
& A1 S1 ^/ g2 E) o' J; H( _main()
$ L( I4 a, s$ R0 R: J" M/ G{ printf("%d",age(5));
" _8 ?8 |. L( s}7 x5 \7 }4 Z5 E
==============================================================
  }: c% R# t% W【程序29
, j, b. e4 ^" W1 H4 i题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
. g, u' N# |1 e7 c: e) H8 b9 G1. 程序分析:学会分解出每一位数,如下解释:(这里是一种简单的算法,师专数002班赵鑫提供)
4 k+ p) D  E* W1 r3 _: d2.程序源代码:
5 D0 e# Z6 @! ^- ?main( )) ?1 \0 d7 n' [# K& R- b# w
{
* g: D7 d; ?% n! Q% |' R" C7 Olong a,b,c,d,e,x;
1 c9 L- H$ f8 S. T  b) [scanf("%ld",&x);% F! X" |& D- M1 q, ?
a=x/10000;/*分解出万位*/
0 \) K3 V$ X( n% t6 ob=x%10000/1000;/*分解出千位*/1 u& o- b% V0 k3 r+ l
c=x%1000/100;/*分解出百位*/3 ?. b- x6 \# T' X) [2 s
d=x%100/10;/*分解出十位*/2 y; y+ d: Q+ C8 q9 Y( V) s
e=x%10;/*分解出个位*/
4 ?' U) Q' E# B: m" ], m. l4 |if (a!=0) printf("there are 5, %ld %ld %ld %ld %ld\n",e,d,c,b,a);' b% L( [# `) b$ M. j
else if (b!=0) printf("there are 4, %ld %ld %ld %ld\n",e,d,c,b);
! M% z5 R6 ?4 ]. P  else if (c!=0) printf(" there are 3,%ld %ld %ld\n",e,d,c);
- s5 l7 l/ A  o$ N4 H6 a    else if (d!=0) printf("there are 2, %ld %ld\n",e,d);  k$ t4 R: X' k# @8 e; t1 E
      else if (e!=0) printf(" there are 1,%ld\n",e);
% \0 [2 E" \% u& w4 C( N}1 U  K+ d" X2 g
==============================================================- u* c, j! X* k& v! t8 t+ \: x
【程序30
  U  y5 i1 x% m& x, U. q& o' c6 n2 \: B题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。   * J1 J* l" j  [4 i
1.程序分析:同29( s' X: M/ \( H/ _
2.程序源代码:
( I. K) X6 H1 H) Omain( )
$ I5 J9 U7 F4 Y1 n* ?& l+ x' h{
5 h7 ]/ j6 g* J5 L$ y# Z8 l2 I# U/ Clong ge,shi,qian,wan,x;
: q9 U- t/ r. U; nscanf("%ld",&x);
9 h$ ^, S) E' F+ p4 S+ ?wan=x/10000;
1 z5 z1 R2 b! k) c# o; ]qian=x%10000/1000;& [* G0 O2 z; a* z( m
shi=x%100/10;
0 C9 L% [; J- m7 N. j5 h: C% Ige=x%10;: }) ?1 A4 P% e: z& }/ a/ S
if (ge==wan&&shi==qian)/*个位等于万位并且十位等于千位*/% A: w& w" f% E& }. ?# M
 printf("this number is a huiwen\n");
9 L3 \/ w! u4 w- z! Qelse
$ ?% k! G+ b. ^+ B$ ^8 }2 h2 G printf("this number is not a huiwen\n");
4 ?) v1 J4 v% y" j8 y}
【程序31  C5 t. e# }6 w( {! X
题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续3 b6 T; q8 D( D+ U+ v  O: K* m
   判断第二个字母。
, [8 j5 Y  P8 }) @% G, U5 L7 R1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。
, D4 T8 ^, f) Z2.程序源代码:
- Z& [/ ?' V6 D' I$ w8 |' H4 k#include . ^/ t, G9 R3 Z' ^" |/ ?$ ~
void main()
( }+ R4 C0 Q, h# d: c{
- p0 H" _8 K5 B6 t( w8 Rchar letter;
' e9 B6 f& E3 m# ~: i3 bprintf("please input the first letter of someday\n");
/ w" _! L5 r- I2 a1 ?while ((letter=getch())!='Y')/*当所按字母为Y时才结束*// l! u4 n: v" N7 |
{ switch (letter)
. ~. O. b) j/ y' G{case 'S':printf("please input second letter\n");
1 N/ O2 t' R8 X* X     if((letter=getch())=='a')5 ?) Y& t2 L# p, {$ j! U( X
      printf("saturday\n");  Q4 [( B  U6 B
     else if ((letter=getch())=='u')2 \7 e: J. {. l- L( ?
         printf("sunday\n");& e) h* b. o. ^7 q' ]+ U8 c
       else printf("data error\n");
/ D  z1 w: U% e  a9 X( \2 v     break;! R  y& x% Z: w
case 'F':printf("friday\n");break;
" Q; w6 G# n+ q; ucase 'M':printf("monday\n");break;
) l% c) U( X: j' W: scase 'T':printf("please input second letter\n");
4 x8 {( N  V6 J% b     if((letter=getch())=='u')/ l) r/ G/ j+ {4 v0 B) i
      printf("tuesday\n");  Q8 [: l# {: N& m' ^
     else if ((letter=getch())=='h')8 A" H5 p1 \: l- ]: g8 C9 g
         printf("thursday\n");
" l8 P" p/ q' H3 I; ?! B0 i' E       else printf("data error\n");1 D! P5 v, {" s+ ~; W6 D
     break;; v: }" d9 d( P& L
case 'W':printf("wednesday\n");break;- S% |, X  o0 |3 u0 B/ W
default: printf("data error\n");
5 m- Y9 P! |) v$ F- @  }
9 o6 \* ^( h5 L, V; G9 W }  P* `4 u  C1 l5 k9 q! {2 G
}
$ i) h9 V% [( y  z  k& S. H==============================================================+ R# ?* T1 j# U& a3 \& y9 V
【程序32
  B1 v/ P6 |; {# T" x题目:Press any key to change color, do you want to try it. Please hurry up!! v. U) _- B& B) i
1.程序分析:            
+ U# j0 |/ x! c! S2.程序源代码:
* A8 ~: x' S5 X+ ~#include ' F; l. Q+ `6 t  Y3 V" e- D1 ^
void main(void)
( b- A/ Q* V/ N+ Z{
% x' X9 n) E2 wint color;
( J/ L! T  H$ O/ s* C$ W4 mfor (color = 0; color < 8; color++): @7 R$ Z" l7 n; J1 W
 {
5 u' D) j/ O2 [# n9 Y) G0 Y/ L9 A textbackground(color);/*设置文本的背景颜色*/
6 n* _% {. j6 H( v! t' ?( ~ cprintf("This is color %d\r\n", color);2 ^- u. D, Z' C
 cprintf("Press any key to continue\r\n");
( t" n' B$ A3 k/ d6 p getch();/*输入字符看不见*/9 s; H, a$ O# q; ?0 ~* H5 P& c
 }  U& W$ L# g$ r
}
; ~$ c0 O- M' Y8 I; I==============================================================+ O2 q  d& u, K: _, }
【程序33
$ |1 Z( H% e* P+ y0 _/ m' B题目:学习gotoxy()clrscr()函数   
1 X6 O* T: r6 h+ V1.程序分析:" @! p9 W4 u4 V2 c5 V3 X
2.程序源代码:7 s) h- }; C) G! j. Q" r
#include
- z* Q3 h* g2 ?5 C* a. V* `* yvoid main(void)
% ^; I4 g  D/ M* t{
$ g( X  L2 @( Z2 D$ ~8 W( Iclrscr();/*清屏函数*/7 Y: z) R  I  P9 S; y" Y
textbackground(2);
7 M5 p" T- m8 y) ogotoxy(1, 5);/*定位函数*/
8 I+ d0 ]9 ~3 g& j1 u# ?cprintf("Output at row 5 column 1\n");
( |* h1 y! Q( V6 Ktextbackground(3);
! s7 P2 Z: M% d5 `gotoxy(20, 10);
- W6 b) q7 ?" Lcprintf("Output at row 10 column 20\n");
$ t4 c0 w$ j0 c- m0 h}
: X$ q7 D& Q' n6 q1 @: |, q==============================================================
5 z# v- P1 Z( g9 I8 c! C* [8 ~【程序34, I4 ^% F8 T) h% }& L+ I# X
题目:练习函数调用0 J- W5 N' v2 r' k( x, s& n+ c) S
1. 程序分析: 4 v$ S. d) `: M; s  M( ?, e
2.程序源代码:
. r6 C; i1 C5 D* Z. I! N#include ) E1 O. U% T8 J! x" x7 x
void hello_world(void)8 R. r% {& a+ r2 W
{. ^# q; h) P; _* F& G. s
printf("Hello, world!\n");
: p5 J0 A1 W: X- ~" K& l2 t}; ^2 i9 O0 ]- W- E; F
void three_hellos(void)  t! \! j* ?/ Q9 r5 d& g
{5 L% \/ m1 C+ I, j8 h5 ]3 l
int counter;
% G" `' T- j. N( p7 ~& O( Jfor (counter = 1; counter <= 3; counter++)
2 c6 g0 a2 T/ K8 m8 T6 Q& Q* Ahello_world();/*调用此函数*/
  ^6 f4 n# B. B  }$ \0 v: z& {' w+ ?}' u3 t3 }  u) ?. d2 S
void main(void)
& T; F& B/ }2 w{
: u1 X! B. I6 O+ Hthree_hellos();/*调用此函数*/& l8 a; t! Z4 j$ F6 p
}; S' j; K' t2 V
==============================================================
% G  i9 U* s, V; I# R9 ]【程序35
1 i. h' x: N/ _题目:文本颜色设置/ ~9 Y% l- ]7 C5 E& x1 J& X4 r: |
1.程序分析:+ n2 Z( D2 |  @! c2 ?
2.程序源代码:
# e" ~* y7 I2 e5 L#include
4 u  h4 D3 _( s, I# ^3 ]9 Mvoid main(void)1 p+ W- t8 ]7 }$ R1 ?: k
{
0 N# H: ?6 G$ f) S& cint color;8 U- q9 ]. Y+ E) D8 H+ N# {
for (color = 1; color < 16; color++)% ^! D& Y4 I( t! K; l) f
 {" f& v, `$ l6 U/ k# M" F" G
 textcolor(color);/*设置文本颜色*/6 i9 P, {6 @2 U) P( c# ~
 cprintf("This is color %d\r\n", color);
& |# B) _0 X* \% |" Z0 d }" ^# e5 m9 e. M/ ?: _( r# ~
textcolor(128 + 15);8 w! f( K0 K: a" ]+ M
cprintf("This is blinking\r\n");
& n( i  p+ R/ [* |) P! e}% N" o9 Q; M; [% h1 |) e' ]: c
==============================================================, Y8 \* m$ D5 j$ L7 ^
【程序367 o0 q% a  {/ x# ?
题目:求100之内的素数   - C0 h9 ~) `: g1 h( t* H8 A
1.程序分析:2 M* M4 X6 p. g- j& w. D* P
2.程序源代码:
$ n) g4 A# u* I* g5 y#include + n. N0 x) X; c2 c
#include "math.h"8 y, x2 l8 g6 U& A; f& R% n( l
#define N 101
/ y( U' _" X0 X. T. j3 b& r( {main()
8 J! ?6 H+ K, m: V' c) ]{: A1 q4 O# @0 ^' u1 \4 {+ }
int i,j,line,a[N];
& r3 x" A1 M7 P% `" g! @$ zfor(i=2;ifor(i=2;i for(j=i+1;j {5 f2 ~6 @1 c5 q" C+ N
  if(a!=0&&a[j]!=0)
' I  L6 @4 `9 [4 H! b: u" O  e  if(a[j]%a==0)
5 b' ?( E: ?1 [' w1 |9 j5 N  a[j]=0;}/ v5 w7 `' q' i4 E: B1 t+ H8 _6 J
printf("\n");- Q6 K0 R1 I# w  i) I
for(i=2,line=0;i{+ Q8 U0 d/ @& q' i  K! g  N
 if(a!=0)% z$ L' U6 E) i6 C1 f
 {printf("%5d",a);9 c+ @" R9 z! _& b7 d; Z+ ~8 k0 U
 line++;}" v7 ~( g( g- d/ ?. G. o0 _) h
 if(line==10)
) }# m& d1 C2 a1 N* R: D4 U {printf("\n");
! Q7 `" U0 a$ I8 s% B5 L$ _line=0;}5 O; e! e" k1 O) W2 j# @6 _1 ]
}
2 i. i$ ?  z( P9 o- u}
+ H2 A3 }9 k5 `+ v==============================================================
; q: j) m, b2 W$ z" c8 O! ?3 c【程序374 D+ S; b& B  W. V0 A2 k: G! O
题目:对10个数进行排序
  d  w4 \5 z! E# N: x% k$ L0 x& H1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,, p$ z7 `, q) ^: q, W
      下次类推,即用第二个元素与后8个进行比较,并进行交换。        4 U. E5 C5 \  W
2.程序源代码:
4 y; \9 w/ w6 t$ _0 I+ C$ a#define N 10
: i/ f1 x$ \- U* a! zmain()
7 c  q. x; H" `' k{int i,j,min,tem,a[N];
8 ]  n# \: ~1 H7 m" h* H! {. g/*input data*/) u, [* ~+ t7 g6 M
printf("please input ten num:\n");
9 ^1 c0 v2 \- _4 ~for(i=0;i{% E' t. Z0 p7 T* H
printf("a[%d]=",i);- M. ]1 }8 U2 P, d8 m6 S' j3 \
scanf("%d",&a);}
7 A) B. |1 E, Eprintf("\n");
7 r- `1 r8 E) ^* W+ ]. [6 r" pfor(i=0;iprintf("%5d",a);+ T# U) m4 E# h6 ~# `
printf("\n");9 W. u* @' b& B8 v; {
/*sort ten num*/6 J  c& o4 W  k1 a, h
for(i=0;i{min=i;
# L6 u8 N, q/ B8 rfor(j=i+1;jif(a[min]>a[j]) min=j;
. A# H, L6 t2 n" S. Z% ftem=a;/ F# P5 ?; _2 c
a=a[min];$ ?6 Y0 `& N& y! m  }# D' p
a[min]=tem;0 w) |0 i/ r# @. m/ j4 F( m( i( z+ g
}" W/ \3 A; \) P* e  a. Y/ Z
/*output data*/6 X3 o; I; f! M
printf("After sorted \n");3 e+ J- W: S' R
for(i=0;iprintf("%5d",a);
, _: [% F# h' q6 w% T}0 R  q! W6 O: Y! D. U- k3 d
==============================================================$ `0 b1 C$ O7 D+ S$ k

% h( ^' e4 @! r9 p7 z
回复

使用道具 举报

发表于 2017-10-7 16:29:57 | 显示全部楼层
十五字十五字十五字十五字十五字
发表于 2017-10-8 11:09:22 | 显示全部楼层
C==
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-23 18:55 , Processed in 0.073878 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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