找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 2475|回复: 2

C语言经典算法27-37

[复制链接]
发表于 2017-10-7 16:23:09 | 显示全部楼层 |阅读模式
【程序27
1 q9 l- g+ O4 B' T$ Z4 ~5 ~题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。7 f9 |7 R% F6 M) `4 i
1.程序分析:$ V* c' @; P- O( E1 |
2.程序源代码:- O4 ]4 D2 u, V9 v/ A5 F
#include "stdio.h"
. E0 }5 _5 Y0 \, h0 cmain()
0 a3 e5 P9 F- g; I{
, {  ]8 l- M. l5 E+ k) t2 pint i=5;- M9 u3 b* J' {3 {* u
void palin(int n);& ?  q, t1 t7 h6 B" \
printf("\40:");* L4 J! l6 S8 Y
palin(i);
! U2 b2 _5 H" b- sprintf("\n");0 N1 c2 s, P) w5 W' c
}9 l, v0 w. q) L, f, t: m
void palin(n)
& H; s2 j2 l9 Aint n;
1 @+ F. Z# Y8 s{
2 _' i, _; t2 X: P: a* e# Kchar next;9 o0 [: a% h* t2 f; Q
if(n<=1)
- n. Q6 x9 u5 e) S1 ?' Y {
, \% }" d9 j' u- ?( [ next=getchar();* d* l  w# S% h
 printf("\n\0:");/ o: W# O/ l5 W
 putchar(next);
! z$ Y' i* @& j/ c9 f }4 {6 K5 u8 n* d# `# U$ c
else! f: V3 I5 A( C" B
 {, P  }" e+ l: E0 `. ?4 R
 next=getchar();$ r6 J. K0 k* Y+ I
 palin(n-1);8 V" O% V9 M1 F/ a/ A+ Q: P
 putchar(next);0 G9 X- s) M& k, J6 ~/ F* S
 }8 G( u" c1 b2 [  M$ Y3 c. b
}  ]1 f1 T6 [5 [% ^7 b
==============================================================9 E5 L$ i8 O  S4 o+ Z/ {
【程序28信盈达嵌入式企鹅号要妖气呜呜吧久零就要 % v6 f2 t/ q, c) J' l4 e8 a  H
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第
4 v1 a5 N; }9 f5 ?: v/ C/ F9 b   3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后 ( p2 ?9 n* o3 q( [9 Z/ N7 r
   问第一个人,他说是10岁。请问第五个人多大?- i2 {6 x9 f; |  R
1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道
+ ]' K9 v- R* z$ u  N. G4 e      第四人的岁数,依次类推,推到第一人(10岁),再往回推。
; ~( O$ D9 [5 O* j8 t6 r( T2.程序源代码:
+ d' ~: b# K" m' {3 `age(n)' ~) v8 w% A( |/ T  P
int n;
2 w- a& i' F$ W' D$ V{
3 R* {4 s! [! ^7 l9 k8 ?, I/ W5 qint c;* D/ [* ^6 E7 t1 k) P+ o4 @
if(n==1) c=10;
+ W) Q, w1 z  ?+ `0 felse c=age(n-1)+2;- d7 p! w3 e$ q/ n/ f. s  x
return(c);0 }" }/ k  J2 Y* N% A
}& J+ _5 t. d5 `# N; [- ^" d
main()
8 B/ V2 v* x) a" l- Z{ printf("%d",age(5));
9 q  F# O; b5 W% ~, v3 a; O}, ?& t2 U, F/ }% R1 ~: E
==============================================================
& M% \+ C/ Z3 t, b【程序29
$ r8 h& c" [+ b题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
2 J7 @1 g  a& _! Q! f1. 程序分析:学会分解出每一位数,如下解释:(这里是一种简单的算法,师专数002班赵鑫提供)
9 @$ b( A- G( h2.程序源代码:: V9 u4 l- C% z" Y
main( )! ^' ]8 @6 Q. ^: W# i* q
{
1 I9 o3 @  W& x, ]+ H0 {+ Ilong a,b,c,d,e,x;
" ?( s+ D# C) a- d  t0 ascanf("%ld",&x);
+ p! J( R0 B% A- w, r7 k* w' ra=x/10000;/*分解出万位*/' s2 u5 ]; e2 O" |4 y, `5 v
b=x%10000/1000;/*分解出千位*/0 w# Q# b% E  X# f- l
c=x%1000/100;/*分解出百位*/
( \8 y, c; L; y, R7 zd=x%100/10;/*分解出十位*/# ?7 w) m; Q. Y0 T, Z
e=x%10;/*分解出个位*/
$ m, H" ]9 f: Iif (a!=0) printf("there are 5, %ld %ld %ld %ld %ld\n",e,d,c,b,a);/ S( e8 [$ q" `2 O' d! T4 i8 V3 _( F$ U
else if (b!=0) printf("there are 4, %ld %ld %ld %ld\n",e,d,c,b);# h- a8 D' U+ i4 V- z
  else if (c!=0) printf(" there are 3,%ld %ld %ld\n",e,d,c);
+ M; O) q  w* S6 ~& K6 S, }0 J# {    else if (d!=0) printf("there are 2, %ld %ld\n",e,d);% I# V+ b9 j3 n/ N' B; J
      else if (e!=0) printf(" there are 1,%ld\n",e);- ]  }! p8 _4 c8 u* A% j9 ~2 E% f
}
1 E3 n# n' _/ }. X, F* K==============================================================
& @- Q' w) G" f% m2 m, n" X【程序30
* m, [' `9 E* ?( B题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。   
. a) {3 r0 K# p: V! c. D1.程序分析:同295 e: T$ f; N- v3 N
2.程序源代码:+ ]6 @8 ]+ ^- K8 A; ?, ?! P
main( )' O3 Y. b# `* m1 z, r" a* _
{; d  \8 N7 ]+ }8 D" h8 G  J
long ge,shi,qian,wan,x;$ m; ~4 O( C4 O  Q& t, F
scanf("%ld",&x);$ |" K5 _) T" |, P) c
wan=x/10000;1 q$ C& ?; x* `* s; Q
qian=x%10000/1000;
$ \$ `5 I* t( N8 |5 Jshi=x%100/10;
5 \+ t4 o4 m$ w" ^* K% q# Nge=x%10;  n' `& P  C* b2 n1 Y9 Y
if (ge==wan&&shi==qian)/*个位等于万位并且十位等于千位*/# {5 m# |$ b1 D) g
 printf("this number is a huiwen\n");
) ~1 Z5 ^  {# V! w4 |4 f( Gelse* G( l4 v" w' H, Z% A& x$ P! R
 printf("this number is not a huiwen\n");, u" g7 B; A2 h% V" ]* c' M; Z
}
【程序31
% L( R1 g9 |$ E" b题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续
" M0 F+ O$ w; U7 l. E" w2 J; ?% U) R   判断第二个字母。
! o2 `; e' u% b% c. N1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。
" h9 V8 }# `) ]  I2.程序源代码:/ _7 u8 U: T  @3 z. ^# a3 l
#include $ k; O1 q2 u2 q
void main()
  \4 p* w7 j" L2 e) v{* G8 P! x3 s* ?( @1 R& |9 K
char letter;
+ e/ `; v# s. `% X+ r5 D/ Tprintf("please input the first letter of someday\n");
+ r. n( s/ ^7 ]3 R  h3 `while ((letter=getch())!='Y')/*当所按字母为Y时才结束*/
/ a* \) j0 D; M6 |- B{ switch (letter): W% Z$ B4 e* p7 X4 p
{case 'S':printf("please input second letter\n");
0 Q  o2 }" p% ?$ w# I/ w     if((letter=getch())=='a')$ b) S. L! H3 I! e! J. w
      printf("saturday\n");; ]7 y# J8 {6 u" G: P2 L0 p  Z' R
     else if ((letter=getch())=='u')
5 X5 q: ?, w4 t2 z' K         printf("sunday\n");
, I! \9 f8 |7 N  I       else printf("data error\n");
# H! N. ^6 p* A. W" _( D     break;4 M+ ?( J) G6 I% P! A
case 'F':printf("friday\n");break;
$ C0 ?  M- T  K% a+ s- L5 Lcase 'M':printf("monday\n");break;" y. \* Q" l  f( |* @
case 'T':printf("please input second letter\n");- H8 q4 T7 s* K( W+ @
     if((letter=getch())=='u')
5 L) w* z3 G; }: B      printf("tuesday\n");
2 i) Z5 w: K  p7 p0 d$ r# m     else if ((letter=getch())=='h')
% `! O' F. n4 D  X8 J& P: U9 D         printf("thursday\n");
; n# u6 v9 @7 Q6 f* n' {! x" V* J8 b       else printf("data error\n");
: ^  f$ f1 K" y! `+ b) `  u     break;: o* j6 l; C2 _
case 'W':printf("wednesday\n");break;
+ d5 p1 r3 Q7 _4 |+ _# g6 u8 }, r# ydefault: printf("data error\n");% s% y& _2 |: K% q7 Y. o3 S
  }& X0 Z- B+ v& _5 h  v5 e
 }# c/ R) I# _6 I& `
}
  ]8 X, r$ ^& w& u$ }3 [( s==============================================================
. n, i  x0 j# t& P2 C, Q2 d【程序32( o: v( j) W  M" C* l
题目:Press any key to change color, do you want to try it. Please hurry up!8 I. _% e0 o5 [3 ^* w
1.程序分析:            ; V8 i' }) ]0 ]4 N
2.程序源代码:
% m2 s% n2 S0 k#include
! F) u, B/ G0 S' k' dvoid main(void)
1 r3 Q/ ^/ P6 b) u{
* d/ I/ O/ O: l* M8 h2 uint color;! s" V7 h" s* t# ]' B; \1 S
for (color = 0; color < 8; color++)6 b- x; U+ M4 W  ]" r
 { . m* t, X0 t8 I2 {/ N/ F
 textbackground(color);/*设置文本的背景颜色*/
$ R+ q6 c* q: i3 e, T0 J' C1 a cprintf("This is color %d\r\n", color);
; Y2 f! I, x3 a2 j0 Q. U5 Y cprintf("Press any key to continue\r\n");
& |; n% p* N: `3 l( W2 F$ A getch();/*输入字符看不见*/
$ B. l) o7 Z# f5 u3 T }) o1 B( b9 A+ E" ~4 \
}
2 _. ]6 t# ^0 C# f9 u+ Y& b& w==============================================================# {+ h" o) p/ i  R3 d! U% O
【程序33
2 N! V2 U6 P; s) K* p题目:学习gotoxy()clrscr()函数   . M. e) ?; x: G3 G& ^
1.程序分析:% z! `# o* \* l0 u/ O  L
2.程序源代码:% _8 ]! K1 H- ^& d4 s
#include   T$ F  n9 j2 a. R6 V: L& x7 ?
void main(void)8 B: ]* P4 b8 [
{
( @6 f7 d- ]1 A. j: W  Nclrscr();/*清屏函数*/5 U8 f, X/ [" K/ O8 @8 E. S
textbackground(2);
5 E6 F! ^4 B! E! i, b% Ngotoxy(1, 5);/*定位函数*/
+ J$ F, u  U. a6 T- O' a0 |cprintf("Output at row 5 column 1\n");
8 i$ I' c0 P3 q% L9 Vtextbackground(3);& |; E- q. y% c$ }( o
gotoxy(20, 10);
. Z2 K- P3 Q' ?# r' c5 \cprintf("Output at row 10 column 20\n");$ A; t$ N! w. z+ x
}: G5 ^) R( T1 q
==============================================================
" W% ^4 O  a$ P/ F, u【程序34
1 C% J9 K$ c4 v  d7 \" T2 v0 s题目:练习函数调用
# K& O" k  X1 U, C1. 程序分析:
) a/ @" Q$ F; m2.程序源代码:
% ?5 e6 [3 R9 k) Z9 ?/ u, z#include
4 ^: m/ J. m& f1 ?: d* Tvoid hello_world(void)
2 L3 [6 e  J7 ^9 G{
0 ~+ `! c1 K7 @* gprintf("Hello, world!\n");5 a7 x7 J% D+ s% B% q- n
}
" j0 f* r1 A# y* x  q) F  i) ?1 }void three_hellos(void)
; l- o+ ]) o( x3 h{
  }/ g$ Y/ Y" c) d- o5 [# Vint counter;
( d' a9 j: D% _% ]) u, @for (counter = 1; counter <= 3; counter++)" x8 ~3 {7 q0 ^* i% `$ s. g; c: N1 v
hello_world();/*调用此函数*/: f( [6 q* r$ i! n7 i" A
}
* `9 A1 i8 U9 Q9 _' O6 Wvoid main(void)
6 k+ I$ x; B2 F  k& {" M{& i1 l, T' ~' e$ n2 p% r9 O
three_hellos();/*调用此函数*/4 y  j6 ~+ M. E% R' K- e$ e
}7 W& K6 w9 r! Y" F# G1 w
==============================================================
% O' F. G6 f+ S【程序35
; ~- x. D( M* _题目:文本颜色设置( x' W- Z( @& E# I1 ~2 h# |
1.程序分析:* j$ y5 Z; J1 y6 k% J2 }7 ]
2.程序源代码:
$ y" S: Z! q& x: b3 k#include 2 y0 R3 S: m; p4 U" x) \
void main(void)- E- t5 G3 u) i1 `+ j
{6 t  ]. E: _3 L5 p+ x0 A, N
int color;
6 A9 L# O3 y7 ~) Afor (color = 1; color < 16; color++)) l$ e8 w9 H" {
 {. A# E* w9 I/ e
 textcolor(color);/*设置文本颜色*/
- l( }* V' E- I/ j: h cprintf("This is color %d\r\n", color);6 o2 K; H2 y* P& Q( L6 ]
 }
7 d0 h0 P3 o% n6 {textcolor(128 + 15);7 y6 h7 N" W/ l1 V* Y9 I
cprintf("This is blinking\r\n");7 l& O0 W4 Q6 J. Q6 i* M
}
" z& m; v) [9 ]$ v. |8 W; a==============================================================9 \: H' Y( l' q& G1 e! {" h
【程序36+ u+ _* u" |- o; v8 w/ Y% J# u5 y6 L
题目:求100之内的素数   
" @5 X/ ?, b. t1.程序分析:8 Q; z4 P. B0 s  m& f: H, C' \
2.程序源代码:
2 T5 z7 j5 s5 a; ]3 v5 y#include
8 ?& C7 y+ ^$ F' l, x$ i. D#include "math.h"' j% ?' j8 j& ^" H& U+ M) X
#define N 101; z- F" `( q# ]9 e
main()
7 V' S( }5 K9 U7 ?  }+ Y{. }5 p7 ~3 E* e/ _
int i,j,line,a[N];; O; y. y1 o  e/ m+ H3 O  P
for(i=2;ifor(i=2;i for(j=i+1;j {
  `& R  o$ d. {( m* W  if(a!=0&&a[j]!=0)! S7 n8 \: m4 n0 @4 e- L
  if(a[j]%a==0)
0 z" {4 R4 m6 W7 }  a[j]=0;}' ]% q1 U% X- |" p) m( i
printf("\n");3 d* r& Z; v! t5 E2 K/ Q2 Q  N
for(i=2,line=0;i{* K4 }& C# {. h' ~* a0 m
 if(a!=0)
6 ^' u. t( R- ?, p: K {printf("%5d",a);: D5 J# C) P5 z6 a9 Q
 line++;}
* [7 W) }6 n2 E; s, Y9 j if(line==10)" n5 F% j  T+ V5 g+ }
 {printf("\n");
" y+ R0 F$ F8 M; S" ?& Jline=0;}# c3 A5 S+ ^* `) l- y( s. k
}
, r$ C: N+ Y2 l3 g8 _* k  v/ Q}) A% m  A; N3 |9 O6 G# D9 _
==============================================================
/ S" m6 d' P+ G8 ^【程序37
* E0 j) d5 A* W5 O  v题目:对10个数进行排序
& k' c- Y/ H- y1 x$ [$ u% u1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,
; @: w/ J0 {5 p) ~7 ?* y      下次类推,即用第二个元素与后8个进行比较,并进行交换。        . ]) R! C3 H/ Q6 J1 D
2.程序源代码:
! m& U7 X6 E  l) x: F* S3 x+ x6 n#define N 10
6 s1 E3 V2 ]& ?main()( m2 L2 B5 ^- ^
{int i,j,min,tem,a[N];
0 L0 h" S* ?( `8 b7 e  _* t6 i/*input data*/
8 B4 p; P- n# E, {* hprintf("please input ten num:\n");
9 P, |' {: ?$ ]2 W9 ~- p( Ffor(i=0;i{
' {  Y* H- M' Y% }  Z2 Nprintf("a[%d]=",i);4 V8 d% w6 ~2 T$ E7 n
scanf("%d",&a);}
, h) w. C! a6 Y2 K! I& Vprintf("\n");
, s7 n7 u# r% h$ i: {2 Q8 Rfor(i=0;iprintf("%5d",a);
/ H# p6 i7 J' l+ r. b7 C0 B( Jprintf("\n");3 k! ?1 o" C0 q' C* S; W9 X+ l# B
/*sort ten num*/, z4 l% f5 m. L7 u
for(i=0;i{min=i;( G8 [+ i8 o! @* T4 J8 ]; N  ?+ W
for(j=i+1;jif(a[min]>a[j]) min=j;
; [+ w# d$ J# _( o8 {tem=a;0 L8 B; }* A- H/ d7 ~, Y0 V
a=a[min];3 o7 R% @/ Y: g& G
a[min]=tem;( }% ?7 }8 M+ ^  R+ m6 T
}* M; |. ]+ U& z& @2 Q
/*output data*/; y# j; G; @" q6 J4 A% n
printf("After sorted \n");
: ]/ ]8 J/ q4 jfor(i=0;iprintf("%5d",a);  E3 x, ]% J4 F2 p
}# Z! r& Z' d- [5 ~  \
==============================================================
7 u# b& G! v  @* w" c7 N% C7 W
9 A; I, r, S$ w5 K
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-21 11:10 , Processed in 0.064757 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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