機械社區(qū)

 找回密碼
 注冊會員

QQ登錄

只需一步,快速開始

搜索
查看: 2212|回復: 2
打印 上一主題 下一主題

C語言經(jīng)典算法27-37

[復制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2017-10-7 16:23:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
【程序27
  F: W5 o# ]+ z題目:利用遞歸函數(shù)調(diào)用方式,將所輸入的5個字符,以相反順序打印出來。% }% `; U6 _, m' c: _5 j: o, ~6 `
1.程序分析:
7 d# F: E* B( B2 l5 G! w. C2.程序源代碼:
3 p# b  U! ?& Z4 g1 x( Y" @#include "stdio.h"
* y0 M2 ?; `7 e) H! Ymain()6 u- V, s5 f. d1 B
{$ X4 ^$ G' q$ \4 l
int i=5;; E& ~  K! ?6 o- l+ C* ~' g  p/ G
void palin(int n);; E) I# _/ W. S1 u8 f
printf("\40:");% B  @: M7 }2 ~1 N) ?$ M/ h" o9 w
palin(i);
& d8 i% Z* `: z' H/ @5 F* d7 k+ mprintf("\n");
; H) m) g% n$ w$ E: x}
. J2 y4 ?' _! @! [$ |$ D$ J$ wvoid palin(n)
% `' e, M) ~% Wint n;
2 i3 t2 j0 D, _" e0 P0 j7 `{
  K+ |& w. \$ uchar next;
1 A1 v& o- K4 B3 Cif(n<=1)9 C, N1 {. M  w' s% ?( u
 {
7 `9 {3 ^8 l% _7 Q/ d next=getchar();
9 _- @& U& a1 L0 L: o+ V printf("\n\0:");
. X% A; v6 l# q/ V9 ?. { putchar(next);
) g! Q5 [) z$ b8 q# ^0 N+ o6 G% c }
9 A. O9 P" O! {' A3 Ielse# v/ Q) D; Z0 j0 \0 c; |
 {
- l5 n+ T" g* H$ L. W/ i+ W next=getchar();& g" ]  s* e1 }+ J/ Y
 palin(n-1);" E7 `* W' u2 i' g0 L3 ]4 g0 S
 putchar(next);
; ~. b$ G& b! i+ ^; `4 t) e }
! n$ W5 i6 z' R; H}
. q# q5 W5 U6 C* q==============================================================, V4 F+ a. w+ N& Z) S- z6 i
【程序28信盈達嵌入式企鵝號要妖氣嗚嗚吧久零就要
  S5 [. O: S' A! d" W- [$ T% m題目:有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數(shù),他說比第/ a% }! O3 E" E. V: s
   3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第一個人大兩歲。最后 ) Q  {+ N& a* @2 B# u: k
   問第一個人,他說是10歲。請問第五個人多大?$ `( l4 t, Q, t' y; U6 D, ~4 a
1.程序分析:利用遞歸的方法,遞歸分為回推和遞推兩個階段。要想知道第五個人歲數(shù),需知道4 P3 |4 I. T! |( W' t) ?
      第四人的歲數(shù),依次類推,推到第一人(10歲),再往回推。
5 x+ e" }$ B' X! v: @9 g3 H2.程序源代碼:
; k  M$ @! }  D2 q, i: V( R# P* jage(n)
, }% j; F2 X# Eint n;
7 \8 B2 C2 g- P' Y{
% }1 |* n- W* m. h# K: u& A% Jint c;
, g) J5 ~4 C4 }( f9 xif(n==1) c=10;) w1 _) C) T! t8 M) k
else c=age(n-1)+2;
! h- Z  L( \$ ^1 ~5 W* _7 Zreturn(c);# K8 z7 o4 N) @0 \- e
}
$ l% c. R/ J. u3 S6 z* A1 smain()% O8 k) D2 ]4 u" j
{ printf("%d",age(5));+ `* G5 P' P5 Q, X. d
}
, w+ W- a* T+ y: j( Z$ ]==============================================================
, x8 J0 P* H9 d% `【程序29
( l  y' c2 N2 a, d題目:給一個不多于5位的正整數(shù),要求:一、求它是幾位數(shù),二、逆序打印出各位數(shù)字。: U( N/ I0 R2 j' T( B' d
1. 程序分析:學會分解出每一位數(shù),如下解釋:(這里是一種簡單的算法,師專數(shù)002班趙鑫提供) ) D3 |/ G+ C) @7 w. z
2.程序源代碼:) T8 g+ L6 V: R2 B% i/ B# j2 Y
main( ). L' H+ [  x4 A5 J8 R6 n$ }
{6 V7 s( u, p* E* `! w$ w3 Y
long a,b,c,d,e,x;
( V$ C+ x* k+ f! \/ W  p$ V; qscanf("%ld",&x);0 }5 i3 y) w. q3 J. @
a=x/10000;/*分解出萬位*/( n. U* T& P& G, {
b=x%10000/1000;/*分解出千位*/7 @& b: g1 d3 o3 B+ Y  r  h! b
c=x%1000/100;/*分解出百位*/
2 ?1 \/ V) s8 r# S6 e3 l, Wd=x%100/10;/*分解出十位*/3 M, p% M" D& H+ \5 s' `
e=x%10;/*分解出個位*/2 k3 t/ ~' g. d5 d5 U' r: Y, O
if (a!=0) printf("there are 5, %ld %ld %ld %ld %ld\n",e,d,c,b,a);
! h0 j+ Y6 `# i; `" y0 Felse if (b!=0) printf("there are 4, %ld %ld %ld %ld\n",e,d,c,b);7 n- }1 _# R# \8 b  z4 V* \4 J
  else if (c!=0) printf(" there are 3,%ld %ld %ld\n",e,d,c);  P$ U4 W  F: p9 d" S0 H! K+ y0 D
    else if (d!=0) printf("there are 2, %ld %ld\n",e,d);3 |. F* u" c- M
      else if (e!=0) printf(" there are 1,%ld\n",e);9 g! f0 ]/ L8 i  ~. i* a5 w
}
& B2 o% @4 b$ p, ]( S8 a- D! Q==============================================================
2 i# `9 P$ D6 m! R7 x: z【程序30
2 e. U) v4 A9 l8 x- g- ^- U0 w6 I題目:一個5位數(shù),判斷它是不是回文數(shù)。即12321是回文數(shù),個位與萬位相同,十位與千位相同。   
9 O/ |9 p$ O/ O; u4 }8 V2 w; n# r( J1.程序分析:同29! H7 Q, @2 ?4 b5 N- R. J  o7 _
2.程序源代碼:. g3 X* e. E3 H$ u0 h* k) T: a
main( )6 ]2 u; z$ }; F7 j/ k
{
8 b8 r$ C& j6 L# ]* [long ge,shi,qian,wan,x;  ~# d9 c% X, h$ {9 p
scanf("%ld",&x);
% u; n1 _, j8 ywan=x/10000;+ _  @" _9 M# I- F
qian=x%10000/1000;
/ K/ T6 L, g4 ~( Rshi=x%100/10;
* |. G! }1 d1 L/ B) l+ a/ g5 F+ Sge=x%10;
# V* ?. m. j+ L- S7 oif (ge==wan&&shi==qian)/*個位等于萬位并且十位等于千位*/" \4 J3 T3 J, H0 ^6 m. M7 E- ?0 B
 printf("this number is a huiwen\n");7 t! E* p& B* S5 J8 W; l( Z
else
7 q. P6 _8 c) k9 d( j: u printf("this number is not a huiwen\n");2 r4 {8 q! d3 x4 h9 g  j
}
【程序319 l& i, f+ \# z7 M) G
題目:請輸入星期幾的第一個字母來判斷一下是星期幾,如果第一個字母一樣,則繼續(xù)' z& O8 }" {+ r- H! O
   判斷第二個字母。
8 h: E# X9 _' A9 F8 t4 i1.程序分析:用情況語句比較好,如果第一個字母一樣,則判斷用情況語句或if語句判斷第二個字母。
$ `" B% h# E2 n) S5 l$ R! d7 V2.程序源代碼:. f/ V2 j- f' k' i
#include 5 r9 F2 L' N8 ^, Q: K
void main()$ i$ R7 r/ Y& }* P! S& V
{8 N8 ?9 @  h2 s& d% a
char letter;" P7 v- h( w" n( m  U% }3 f# E- g
printf("please input the first letter of someday\n");4 e" J. e3 I# P4 }, F9 l" \9 C
while ((letter=getch())!='Y')/*當所按字母為Y時才結(jié)束*/" c) D6 C" T+ t7 S
{ switch (letter)2 `( ?0 H0 w6 l& B
{case 'S':printf("please input second letter\n");, n9 e" {2 L( L( W8 U
     if((letter=getch())=='a')+ t6 D0 Z; J) o$ e  f9 r6 ]
      printf("saturday\n");% x0 ~3 _, O- T( Z; d( H8 h
     else if ((letter=getch())=='u')  p5 M, M" t. t9 I0 p
         printf("sunday\n");
3 D6 h+ q$ i% G; t6 n2 K       else printf("data error\n");
- N0 }3 B2 N7 G) j6 v& M) y( C     break;
: E' {8 F9 U9 {% m, Y% K; }8 ~case 'F':printf("friday\n");break;
& y6 |. G7 F( U% m* k1 ~) e7 V3 t- |case 'M':printf("monday\n");break;) L6 Y% y) F9 V0 k0 L  Y' F
case 'T':printf("please input second letter\n");& f! p  D  x' j' E
     if((letter=getch())=='u')
9 S( {7 W$ ^" `! [" {' r      printf("tuesday\n");, i" y* q* c( ]4 m! s% V* ?
     else if ((letter=getch())=='h')
7 a# X8 F* O. B6 ~1 f9 d         printf("thursday\n");( y- M$ k/ D& {0 k
       else printf("data error\n");& `7 @  ^3 e+ a
     break;% K- w% D0 o$ K
case 'W':printf("wednesday\n");break;& x) L3 Z; @. p$ J4 K
default: printf("data error\n");" ^1 ^1 G3 ]9 ?% F
  }
( I9 @; A! w1 P* @* Z/ f6 j/ Y }
( x% I, H% }* _$ c}
* I" ]* n8 p$ s6 y' Q0 P- A  T==============================================================
& E0 [6 e0 `" L3 q. V3 D【程序32. E, N% _  h4 H& H
題目:Press any key to change color, do you want to try it. Please hurry up!
/ S0 ]" }! m' q! Q+ B6 ?: i1.程序分析:            + `9 J) d8 H6 y$ M- j
2.程序源代碼:
) h, A6 q1 p, {#include
* u$ x4 @6 L( K# ~void main(void)
# \( o9 Q/ m& M- n& R+ b{) R0 W6 `8 [$ i9 p7 ]3 J. |2 m7 @
int color;$ m% B4 U7 V0 ]9 {
for (color = 0; color < 8; color++)4 r( J+ I! {$ x$ j( Y" V4 z5 x
 {
- d6 G3 y1 m: P& _- E textbackground(color);/*設置文本的背景顏色*/
+ P6 y8 v& e3 K; G1 s. o9 V cprintf("This is color %d\r\n", color);
3 X) h1 K2 A5 E" _! d cprintf("Press any key to continue\r\n");0 @" o" o* h( C
 getch();/*輸入字符看不見*/
2 q2 u. X& s" _; c }0 R, ], x1 y/ w% A
}0 q9 C/ r: C4 L$ i" `/ t5 h
==============================================================
/ w% O6 k. ]' G* u' k【程序33
9 Z6 y7 v6 d8 e( }/ S( B題目:學習gotoxy()clrscr()函數(shù)   
4 w/ g+ x8 M6 Z0 h& o1.程序分析:6 ~, y& A8 \: S/ e
2.程序源代碼:  G7 c' W( g) @( s' u. f( D5 A+ ]
#include
7 E1 l. t- a8 I8 ?void main(void)! e8 @4 C8 `- I. _' `
{( ?( T& J$ a0 @. S5 x, ?, B
clrscr();/*清屏函數(shù)*/; x2 R# G( V$ i; X6 _+ ?% \
textbackground(2);. r# _& j( a7 x
gotoxy(1, 5);/*定位函數(shù)*/7 ^' \6 L2 G* G) I  O. t& [# _
cprintf("Output at row 5 column 1\n");
, e7 h  [" P6 O/ D, [6 Wtextbackground(3);
' P0 W/ U, R2 ^/ _; Sgotoxy(20, 10);3 Q- b4 i( b* P- m
cprintf("Output at row 10 column 20\n");
& N4 `$ [8 O9 m- I1 V9 _9 ^) E9 z; h6 B, w}! o- s2 g8 p* L5 Y0 K7 r: m
==============================================================# [1 i; r% `  N5 D1 p
【程序34
8 V5 K1 ~; Y6 t5 S" \% X  Z& D& B題目:練習函數(shù)調(diào)用
4 }1 `2 \$ n1 V7 a2 y% U! m4 i1. 程序分析:
2 L# g( v- `; ~3 s0 X8 J1 N3 G2.程序源代碼:  c& v' K9 x* L1 L  |# y) J
#include
4 e" U  @+ p1 v3 ?! i5 ovoid hello_world(void)' E4 y2 a( n  s; y
{
! Y0 |* Q4 G! R3 L% a3 Rprintf("Hello, world!\n");- L# U- Y( y+ C( c! L4 \/ r' a
}' B4 ^* o3 M# s, ~( z8 @
void three_hellos(void)6 w" W1 Y- K7 g) t3 k. n; {; r$ x
{
$ Y' q) Z% \1 G( ~; e+ Zint counter;
0 T% S" Z4 e! n) M) \for (counter = 1; counter <= 3; counter++)
5 p7 K" A+ n4 v6 ahello_world();/*調(diào)用此函數(shù)*/
* U3 I8 ]" N' C$ _3 q& B}8 F% z- o; o3 F; ]& ?
void main(void)
1 J/ }7 |, y! a{
, B2 s1 m: k( T: ~9 K  Athree_hellos();/*調(diào)用此函數(shù)*/2 Q: F8 w: n9 @$ T! x: c
}8 {# |" G6 c$ U1 ^8 f, g  o/ x
==============================================================
" A# u: q" B$ D6 B# Y; k6 h8 {【程序358 L8 m. N3 P* S3 G7 e9 x6 T
題目:文本顏色設置" R* ^" r1 H0 Z) D# ^
1.程序分析:
; Z* x4 B6 Z7 F2 ]3 e2.程序源代碼:
0 X. `: r$ s, z; y# `0 e& K+ P7 J#include 9 v9 c" i2 ^. I" T& P
void main(void)
; i/ G1 K2 ]* J/ I+ V! e  ^2 Y: F{
; ]8 W: x( x/ F1 U; |# I7 dint color;
5 }# x/ ]/ t( f& V, j: A4 U5 t% Yfor (color = 1; color < 16; color++)
9 T- r' \8 ]9 c) p% c% m. G {4 s6 r: L2 T9 ]. }7 e% r) v
 textcolor(color);/*設置文本顏色*/
# I+ C! K/ S& u cprintf("This is color %d\r\n", color);
) _! n  }; Y: [$ K }
8 S& x9 S( T. ntextcolor(128 + 15);
/ e6 J) r6 y9 `/ ucprintf("This is blinking\r\n");; o9 R2 U2 _% F2 L2 C  h3 k
}+ x7 C& M9 q. Y& D% L
==============================================================: r6 J) L9 M$ b2 Z8 q0 z5 P
【程序36
5 G( e+ h. u( C% S2 H! U& N4 i5 Z題目:求100之內(nèi)的素數(shù)   
- o; Q8 c! N" N, T  A2 ]1.程序分析:
; U# J& C: L4 J: |2.程序源代碼:% i! }1 s0 Z# k: }5 Z# c
#include $ e( S- A8 n$ `+ v
#include "math.h"
' B: n! f4 P! v3 z" V#define N 101) P3 g) M# Y! e' ~: c2 U9 B
main()
! F, T: c, B% s{
7 X1 j  n, w6 _; Q$ a% S3 _int i,j,line,a[N];
7 a! y0 }/ D' X# i3 ^$ z  \! Yfor(i=2;ifor(i=2;i for(j=i+1;j {; s  }# i8 Q& l
  if(a!=0&&a[j]!=0)( `/ S4 @5 Q; f# [/ T$ X9 u
  if(a[j]%a==0)/ {+ a6 k1 E$ v( S- o
  a[j]=0;}
  T% S/ g% Y9 y7 i- A- kprintf("\n");
+ x4 n; s4 ~4 ~- ~for(i=2,line=0;i{
/ F) j" J2 g! S7 S, P if(a!=0)
* _, M: z. R5 e3 q& ?& W {printf("%5d",a);+ Y' ?% c) [9 k1 n% n8 Q5 L% }+ y( t/ x( R
 line++;}
! o' h% l) ^1 T: J if(line==10)
- N9 V' S$ l$ S- G {printf("\n");
2 R* M2 k/ ]2 e9 C, g+ bline=0;}8 @) ]% x' b$ q8 e
}+ m: O' K- E+ s9 u& S1 h+ y4 Y
}
7 {8 j# z0 k  d5 i5 x==============================================================
. i/ W  {; L3 O8 N2 x3 h【程序37
' K! t) e" S  _% \2 Q# _題目:對10個數(shù)進行排序" O1 |5 V1 A0 t- }! ~
1.程序分析:可以利用選擇法,即從后9個比較過程中,選擇一個最小的與第一個元素交換,
& p5 ^! f0 B* i1 n% ^, G0 G      下次類推,即用第二個元素與后8個進行比較,并進行交換。       
$ k' U4 M# ~6 B* F9 G* G' w+ _2.程序源代碼:4 f1 h. z4 m% h/ W2 _- S$ y
#define N 10
9 ?# Q( q" S; o" ymain()- k6 j: l% c! p8 Q, f! X) p
{int i,j,min,tem,a[N];6 m1 U  n8 D: w! [
/*input data*/
5 k, {/ }. q# _9 e2 C  r4 v. sprintf("please input ten num:\n");( r& X5 |+ R( M( D6 ]% M! H
for(i=0;i{: p# |' M. X' c  s1 Y, T
printf("a[%d]=",i);* m- T( `' \% b& @4 r7 U& G
scanf("%d",&a);}
  b. @* m4 a3 @9 u4 lprintf("\n");
' @  S' P' @" K; f* Wfor(i=0;iprintf("%5d",a);
9 T) f1 D& R5 zprintf("\n");
5 b7 a# _  M& }1 Q3 i2 U/*sort ten num*/2 B& I( p( E% }/ u; b
for(i=0;i{min=i;
- c7 J' z2 O0 F9 t% C* n2 Q* I! cfor(j=i+1;jif(a[min]>a[j]) min=j;
/ T0 g( `; O9 y2 Ztem=a;
- d! J! S, [  e' G% Ga=a[min];$ {+ K& L0 f# d! @
a[min]=tem;
) a0 u2 r3 V& U& Q}' ]% y8 u4 H$ t+ H: y# f
/*output data*/
0 x, R' M3 T1 `6 f5 _& ]" t& ^7 fprintf("After sorted \n");. z9 _0 y' k0 P! j3 n0 k
for(i=0;iprintf("%5d",a);; d7 u7 \& C! S6 ?6 S& o+ L' z
}
* A  F- m7 u5 K; m! [==============================================================
3 o9 t2 C" a" v- S# ~  G# t5 g

/ Y) b/ E1 p; K/ {4 f
回復

使用道具 舉報

2#
發(fā)表于 2017-10-7 16:29:57 | 只看該作者
十五字十五字十五字十五字十五字
回復 支持 反對

使用道具 舉報

3#
發(fā)表于 2017-10-8 11:09:22 | 只看該作者
C==
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊會員

本版積分規(guī)則

小黑屋|手機版|Archiver|機械社區(qū) ( 京ICP備10217105號-1,京ICP證050210號,浙公網(wǎng)安備33038202004372號 )

GMT+8, 2024-11-9 03:12 , Processed in 0.051728 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表