机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 1989|回复: 2

C语言经典算法27-37

[复制链接]
发表于 2017-10-7 16:23:09 | 显示全部楼层 |阅读模式
【程序27
& f! c" O% D3 B" T! A题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
/ f9 J3 a' P' F+ g! [& v& @- G5 L1.程序分析:/ a) g' _0 E  j0 X7 T
2.程序源代码:9 f+ u' F2 R5 O; T
#include "stdio.h"
  w) T; F) |. p0 E: D+ u5 Y" Ymain()$ ^/ ^2 g$ F' {, }# i
{+ [4 M* p4 G9 _* {. j! o$ ?
int i=5;2 W8 r. Q8 K/ D1 C+ }, N( b8 m, Q2 ~
void palin(int n);
* I/ L9 w& ^2 l1 P7 b! T' Uprintf("\40:");; T- v( `+ }+ t' d/ N# ]
palin(i);
" S/ O/ C7 s, Zprintf("\n");4 x2 _, H( g, Z/ Q' R
}
# G; w- M2 i5 z9 x2 d: Dvoid palin(n)$ q% ~: ^- f4 f- R- n8 ?  i7 `
int n;. @: Z* b4 X) Z" U3 N% A/ `
{
: V: u% r% p* B1 Zchar next;) |. F: i: f# j. Y: _: U
if(n<=1)! B9 k  P" c& b$ X) f
 {4 y* V; _6 H0 T" A9 g  @
 next=getchar();6 S; |' i1 |+ i8 |0 H6 N
 printf("\n\0:");  n# b/ m" x$ |+ m' [
 putchar(next);
" n" p6 q0 p0 I3 P }
! u" `: w4 U3 Y: H, l+ aelse
+ k+ f* P: `$ J+ f3 d1 B8 j {2 K5 F& w. D+ h* D# W" _
 next=getchar();" \; |0 p; h% V
 palin(n-1);+ P; h6 |6 S5 C2 |+ L5 c- i
 putchar(next);
: F1 P; a# c" ~9 C) W }
8 y6 b3 G; I# c9 ~, w}
* l: F0 ?6 l6 |==============================================================
4 e; t+ q  n  k- G# D* y; z【程序28信盈达嵌入式企鹅号要妖气呜呜吧久零就要 7 y, n! Y6 {+ A2 V
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第
/ p+ k/ g3 W1 d' c* j7 _, w   3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后
$ x7 Z8 K6 B3 l; r9 @   问第一个人,他说是10岁。请问第五个人多大?  P5 ^# d' P: w0 Y) q
1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道
, Z* g. ~4 J' V- w; s: y6 m* b$ ?      第四人的岁数,依次类推,推到第一人(10岁),再往回推。4 \# Z" [, s: j% m
2.程序源代码:
- `) N9 Y9 p! i* f: Iage(n)
$ \4 B% j  t7 S5 t0 D; Bint n;
+ M3 W/ Q) X2 ]& c* m{
- G5 {/ n8 _8 w* |: G! T6 j* ~+ Xint c;
. \, M. W4 Z. D& B1 }6 @if(n==1) c=10;0 ?- l) \( _* m8 m. ]5 _# W
else c=age(n-1)+2;  R0 @( W+ T5 W: I9 W' j. w
return(c);2 a/ [! Q9 M/ Q
}
7 H& F) H4 t5 rmain()
5 [9 l7 F) p2 d' i{ printf("%d",age(5));
/ }2 @+ \5 h2 [3 C6 o}  X( _1 e# ^! ?1 ~
==============================================================
  G6 L1 B5 L- M% o6 Z2 {' \【程序295 v- R/ v+ g" h# ?7 \
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。6 L7 B' M( y5 q7 b; f5 `1 @3 ~
1. 程序分析:学会分解出每一位数,如下解释:(这里是一种简单的算法,师专数002班赵鑫提供)
$ x3 H, }4 u+ I% G' H: n! t4 {2 ]2.程序源代码:
+ J# G  h8 \' I) {6 tmain( )
6 X5 m4 |8 Z& B; N! e3 h. g{
1 C- ~; m9 l: g9 u3 Flong a,b,c,d,e,x;9 o. E2 e  _6 ?5 Q" X
scanf("%ld",&x);
2 s7 E% {. p- f6 k* Ja=x/10000;/*分解出万位*/
2 A7 o0 [3 `, m0 gb=x%10000/1000;/*分解出千位*/( Q/ U# d! F; k- z1 o- H8 a
c=x%1000/100;/*分解出百位*/
, E4 n! ]( v9 jd=x%100/10;/*分解出十位*/
+ S% p: z$ f, J# I* x% he=x%10;/*分解出个位*/3 ?& F' C3 y- ^
if (a!=0) printf("there are 5, %ld %ld %ld %ld %ld\n",e,d,c,b,a);, _8 T4 x% n  E1 f
else if (b!=0) printf("there are 4, %ld %ld %ld %ld\n",e,d,c,b);, L* h# {! [* ^0 m) R9 `0 x
  else if (c!=0) printf(" there are 3,%ld %ld %ld\n",e,d,c);8 `& K7 m9 {+ ?* G4 P3 u& L3 ~) s* D
    else if (d!=0) printf("there are 2, %ld %ld\n",e,d);$ }9 ~! M! k; L2 V% T1 X$ ^$ h
      else if (e!=0) printf(" there are 1,%ld\n",e);" y: p' C2 X$ L3 I  b) _
}4 I" W" z! Y; N# T, b& U% `* n, k
==============================================================
. U7 x# v6 z5 W( I7 p【程序30
; A$ y. x& k* O+ k题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。   5 D1 |& G: O/ i$ u5 n; U2 f
1.程序分析:同29
5 s* G- P: b5 s  L% p2 ~2 s2 i, G2.程序源代码:4 r9 h: M5 h8 A' ~
main( )* ^' W$ X/ i% x+ [7 u1 z5 c
{$ p* t. i7 g$ \+ `% h
long ge,shi,qian,wan,x;7 {) R) S- v/ m. [5 u
scanf("%ld",&x);: n: h5 ]6 ~8 z6 U7 `
wan=x/10000;. j) u$ d+ r: I6 T7 {, Z4 a* Z
qian=x%10000/1000;
0 t  X! y7 X9 H3 K0 wshi=x%100/10;
8 x; Y* d. ~6 oge=x%10;& \% L" x3 l/ @: |6 {2 b, C
if (ge==wan&&shi==qian)/*个位等于万位并且十位等于千位*/
5 z, d% K4 C7 o; T$ Q9 I1 H7 x printf("this number is a huiwen\n");8 y# O2 Z8 G  Y' G
else
( a; f2 s7 c1 @6 [ printf("this number is not a huiwen\n");, o' D( s. c$ D: c9 X6 P; @
}
【程序31
! x. g! w: ?; ]# e题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续
& R" g4 p2 L- B   判断第二个字母。
9 ~- `$ h; X8 C1 ]/ j! {1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。7 I0 y! o. p0 [8 E
2.程序源代码:
& v3 K& K4 R; [#include
+ G6 J- n! y* v" j4 jvoid main()% P: d/ |) L0 e, ]( l$ b6 d
{* C- L" t  m  [, T* a
char letter;' K  T) B- r! b6 V6 ]
printf("please input the first letter of someday\n");  `1 V/ }7 q, ], o' }; {3 M2 ^
while ((letter=getch())!='Y')/*当所按字母为Y时才结束*/
% p+ o  _4 \0 ?{ switch (letter)
6 q; e' y3 F) i+ M9 O8 \{case 'S':printf("please input second letter\n");
- T& ^. G) _; K9 P     if((letter=getch())=='a')- [: T. o% U; h+ Z$ f6 M. }
      printf("saturday\n");
4 p6 c/ Y6 x; i& j) I4 M5 x8 \     else if ((letter=getch())=='u')  M. _& X0 j3 O: H
         printf("sunday\n");( Q3 T* f+ _2 T5 X+ [8 p6 a
       else printf("data error\n");
" M' o8 ~) r* [6 y* j7 E* h     break;3 @; a, L9 r6 v% f
case 'F':printf("friday\n");break;
4 N' ^) J2 M$ l2 Gcase 'M':printf("monday\n");break;
, P  g7 A0 J+ R6 x; mcase 'T':printf("please input second letter\n");
! m5 V% ^: C; V     if((letter=getch())=='u')$ t( h( M2 T- d& q# W/ c' P
      printf("tuesday\n");7 L- s/ W; Y0 o6 C
     else if ((letter=getch())=='h')
' s, c/ Y. _, |6 h         printf("thursday\n");5 V& @+ q1 q$ i3 Y, a7 N
       else printf("data error\n");) @. \% t6 f" A6 b
     break;
) a% g" N* K3 S' ~& G- jcase 'W':printf("wednesday\n");break;
. d  \1 X. E: e, y% pdefault: printf("data error\n");! F; Y2 C' a/ x
  }
5 C  ]  ~" @1 c* u5 y# W9 S) C3 V }9 Y' J% R: e% \) p& E# ^& A) O
}
5 y# L- O' ^( J. Q==============================================================
6 t8 `  i) C1 o; ]6 {$ m2 Q, U【程序32
) y. X$ w% U7 M* G/ Q# a题目:Press any key to change color, do you want to try it. Please hurry up!7 @- U* O5 R$ l* E' o
1.程序分析:            ) T9 b3 ?6 B. S0 M' g, W: Z1 g
2.程序源代码:
( w3 ]+ L) i: l1 R6 ~9 _4 m( C/ K#include
5 f" Y" g) q2 Lvoid main(void)& _" G2 @+ _2 k2 n  c) W
{. `& x7 ~1 G1 {. j  r0 H+ T% ^
int color;; B. W% \) z( L$ W' Y  Z
for (color = 0; color < 8; color++)
+ A! o9 y3 Y4 A! x/ \( m* X { ! |! L1 j+ Z4 W, b% ?
 textbackground(color);/*设置文本的背景颜色*/
6 d+ Q" b8 m  ~: @& }7 _. c cprintf("This is color %d\r\n", color);
) v3 j8 A! P) J2 Y1 w cprintf("Press any key to continue\r\n");/ t3 s8 [9 W6 I3 @) @
 getch();/*输入字符看不见*/  g) z( V* F9 k2 N- P
 }
! k0 K6 c- p4 R+ w+ B( V}% j+ g! e1 {8 |1 s1 i
==============================================================
0 o( T/ z1 T% x% V" {【程序33' r( b# [* c" _# p: B# a+ K
题目:学习gotoxy()clrscr()函数   ! e8 }/ V* x7 f" B0 V
1.程序分析:# R! V" D! L6 Y
2.程序源代码:" q0 n* Z2 b% b7 f
#include 1 C' ]& H! V' Z  I
void main(void)3 y% ]" C" x3 h- r  k
{
) ?  W/ Q. [1 X9 d) m3 Lclrscr();/*清屏函数*/
6 }+ ]* F9 s" n8 [* t9 gtextbackground(2);$ R/ u' ?7 Z3 L$ B) R! R
gotoxy(1, 5);/*定位函数*/0 m3 C. r- W2 _5 B
cprintf("Output at row 5 column 1\n");2 k8 r6 n! N! R, L3 a" u
textbackground(3);; }( J8 @: U( X: _- Z+ v
gotoxy(20, 10);) A) Q: c3 f: E5 V
cprintf("Output at row 10 column 20\n");$ q4 L6 c4 O7 q2 F3 Q& I6 H
}
4 d: k$ x$ O2 u% }$ x==============================================================2 L; }# d/ [9 o' Z0 I" i2 O
【程序34+ r$ `( c( u1 Z; i9 e& R
题目:练习函数调用$ M0 W, A: R5 V* o# s; M
1. 程序分析: + o: @  ]$ t: I- f8 ?# l
2.程序源代码:+ e+ L/ b7 r) i0 y8 j
#include " ^/ {+ W) x, y" A# F% B
void hello_world(void)
- E4 i" l; P1 A/ q- \{" y/ w- s& _; A  S3 a
printf("Hello, world!\n");
, M5 t1 P  l/ D& @& e$ E+ m6 S}
9 m7 l; Z  X8 F* e3 I+ Pvoid three_hellos(void)/ w% e) B! W. x0 z5 I
{
1 q& ?' U2 c: J* |int counter;
% Z+ w, n8 u2 L' b; C9 M' w$ bfor (counter = 1; counter <= 3; counter++)4 t5 ~$ s7 _: z( a2 ?$ X9 f
hello_world();/*调用此函数*/
3 U4 T: r5 k; [* N}, y/ T3 p. O6 |/ S8 _% D! p+ y
void main(void)# a) p& X& X' F* |7 @5 n
{
! Z. Z0 k; T5 |: K# i) C5 ]1 e; p8 Tthree_hellos();/*调用此函数*/
; d& n3 a) U0 s# F  M}
4 k( e! d* A5 D==============================================================
: O% @8 r3 E" a4 _6 |: T: J7 X【程序350 O9 u' p" D9 ^+ m' Q% M
题目:文本颜色设置
' J- F2 t0 w, C3 [' A7 O1.程序分析:
5 ^2 d: ?. P4 Q- \& t9 F7 z2.程序源代码:. a. ~1 \8 u6 }9 c- L* f$ t# j
#include - h" H( K0 l( V
void main(void)
$ o$ h+ ]; b8 w! [5 S7 P* G{
5 @) [8 Y) g' k" h% a+ Pint color;8 Y2 I/ X/ y( H) Q7 e* j+ B
for (color = 1; color < 16; color++)2 y$ R, ^$ S4 s5 K7 Z% J9 T
 {7 C: U' l, s; @: h* B" I# F% ?5 J
 textcolor(color);/*设置文本颜色*/
0 k) U% O( N: }' ~* m" R$ i, O cprintf("This is color %d\r\n", color);* X" o, _( ]/ h. P
 }2 y& L0 V4 Q6 e% M, ?/ @& T
textcolor(128 + 15);  e# v" E* n# u" {
cprintf("This is blinking\r\n");
. y2 z4 m0 f0 h+ J' o}% F$ w" x. W( j6 b% b
==============================================================$ z  u  ^2 f  {1 b7 x5 J6 z
【程序36
0 c0 g& L. h: M. b题目:求100之内的素数   
$ i/ E% B" O! W; u9 J1 T) l1.程序分析:& K( Y! V8 O6 ]( N- |9 B
2.程序源代码:" g: F0 W) o( u" m
#include
( k% z+ E  J( K. y; P) f#include "math.h"8 D7 I, U: ^4 p
#define N 101
1 f% _; s1 c- [/ v3 [# Umain()& d- L5 m1 w' I2 x! R+ Y; D9 i
{
5 ~' o% n9 K+ cint i,j,line,a[N];
6 o3 o' b. U$ y2 G  W" E' vfor(i=2;ifor(i=2;i for(j=i+1;j {; t8 O5 [8 |( @/ C! s$ ~
  if(a!=0&&a[j]!=0)' j6 x% R& Y, @
  if(a[j]%a==0). V. F+ I6 W6 p$ a$ S
  a[j]=0;}) _# P# @0 v( w5 D
printf("\n");
! n/ b% y" F0 \! V$ Rfor(i=2,line=0;i{
! b8 G) n: _8 ~& X5 Z: h if(a!=0). z& O9 l5 H- Z, F- [0 Q
 {printf("%5d",a);0 e; O+ \& s  j+ g, c$ {
 line++;}, R# \. X  E; b) ~! L! S7 a9 s9 u& ]
 if(line==10)
0 h$ V" G5 Q- o, W {printf("\n");# V' P0 O7 u. G. F. k* `& B
line=0;}
4 \  b+ G: U! t6 I/ J+ j}7 A5 l5 ~! e% v6 ~5 ]* v* W
}9 B' P0 x+ C! h$ k
==============================================================3 ~, `3 v2 v: T8 z3 c; K( k! V
【程序371 q9 K5 f; e' l
题目:对10个数进行排序  C  M% B" g4 [& y: a5 l
1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,
6 q0 ^( l8 J* [4 ?4 }( a4 ^      下次类推,即用第二个元素与后8个进行比较,并进行交换。        # C' V9 W% I+ P  B/ f/ @! a
2.程序源代码:
. U, z. i( N& x2 q' S4 x#define N 105 ]8 ~+ K+ \' D
main()
# L0 x* }# J) O+ R5 b7 Q5 f$ c. N* B{int i,j,min,tem,a[N];3 }) l) D, e% E& e
/*input data*/
! ~( ]% @  c/ K7 Bprintf("please input ten num:\n");
& q/ R0 k6 g" y" q( O1 y0 kfor(i=0;i{
8 F$ H: f& D& ]" S; \. P  x: |printf("a[%d]=",i);
1 {5 M0 Z1 b& c1 P6 ^. R* Mscanf("%d",&a);}
8 p+ D: P2 g( W/ K$ x3 rprintf("\n");# e" x5 t3 c1 [! w
for(i=0;iprintf("%5d",a);
" _  n+ H4 e( U- O' G% a. \printf("\n");
3 Z" d0 y! d. \/*sort ten num*/- f0 @- W0 N+ M
for(i=0;i{min=i;
# {9 o6 V- g7 Z0 l  F7 p1 _* F! Mfor(j=i+1;jif(a[min]>a[j]) min=j;
- F& r% \# |/ u! Gtem=a;6 L8 C7 k) m7 d& }* y
a=a[min];1 L, U9 \) u; e; q1 T
a[min]=tem;* E: ]# ]7 n4 B! w9 V
}
1 ~6 n1 {, _, P. r  B2 c/*output data*/& j5 w: }/ ]7 _$ k  z5 ^8 p3 |7 l& P
printf("After sorted \n");
$ ^- z$ w/ p5 K/ {for(i=0;iprintf("%5d",a);3 ?0 p: {6 s  }, Y- G
}. w" z$ S5 `4 f3 o( B0 o% }
==============================================================
# S, z& Y6 {; n6 K0 J# {" f* C+ R

, z0 w5 d- S' @. W9 X6 F. G4 A
回复

使用道具 举报

发表于 2017-10-7 16:29:57 | 显示全部楼层
十五字十五字十五字十五字十五字
回复 支持 反对

使用道具 举报

发表于 2017-10-8 11:09:22 | 显示全部楼层
C==
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 23:20 , Processed in 0.055669 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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