机械社区

 找回密码
 注册会员

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1196|回复: 9

C语言经典算法100例

[复制链接]
发表于 2017-9-23 10:57:34 | 显示全部楼层 |阅读模式
【程序8: ~$ }7 G4 b& M2 v# Q. A/ {! v5 h
题目:输出9*9口诀。 - a+ l0 @' O2 l
1.程序分析:分行与列考虑,共99列,i控制行,j控制列。
! n2 y$ z; X* s  g2.程序源代码: ' _7 Y7 S: |/ S9 ~( M# F
#include "stdio.h"
3 |* P! u( x; c; Jmain() 7 m/ V; @9 _" M7 t3 E
{
) j7 X/ Y9 |1 s) dint i,j,result; % M* i% ]/ p( b) Q
printf("\n");
& l' _$ f: M" j( Kfor (i=1;i<10;i++)
& q# e4 [, [% i3 V6 o{ for(j=1;j<10;j++)
0 d3 |" X* S+ s- [/ j2 x0 a{ + c5 d9 J1 A4 e, C( g; l7 v
result=i*j; + R  J3 l. C& T6 ?4 e' d7 I
printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3*/ 0 t3 A: ~' E9 x1 g7 T
} " E  x' r, I3 l1 D9 l; q
printf("\n");/*每一行后换行*/
1 z9 c5 V/ W0 j- I8 h} 7 G+ K$ n. Q8 g! j9 P8 p
}
; B3 y9 b$ }( e( P) U& x============================================================== ' v2 R7 u; [* P0 x/ i9 m
【程序9
! d* U1 r% a! L题目:要求输出国际象棋棋盘。 6 E2 K1 }* ~8 c1 Q4 {- }, v; d& B
1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。
+ E5 B2 R, I( M5 M2.程序源代码: 5 _3 T7 R  C; h2 M' i" ]. c
#include "stdio.h" + p( f( F) k) E( a- {
main()
1 V+ v# W( a" U$ k5 p$ |{
, O$ J3 \# X- ]int i,j; % D, q4 R+ @* S. n
for(i=0;i<8;i++)
4 k9 B: w1 c4 Z1 }% w3 |% z6 o{
* ?1 h. V2 G3 P6 i- dfor(j=0;j<8;j++) ! Q3 j' K5 M, g$ c- }4 j% M9 h
if((i+j)%2==0) ) H7 d4 N* D2 p( ?+ s' }9 x
printf("%c%c",219,219); - m6 `: ^% f1 e4 r! G
else
& d5 ]: F7 p7 H3 Y) @. F% `8 }* lprintf(" ");
/ S+ X3 j* t% rprintf("\n");
$ q5 F  X3 d  Z} & M4 @) b4 p3 }0 X6 |5 r, c
}
* x6 X$ y! W/ n( V. q1 H8 P) @( l! P( n==============================================================
4 v/ X1 s8 u+ `/ W) ?【程序10
+ q. ?4 G4 |5 z5 Z5 m! [题目:打印楼梯,同时在楼梯上方打印两个笑脸。
! A7 [" D7 o/ X$ _; i1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。
4 P' X* A% N" V; z3 F2.程序源代码: 7 Q3 W( I/ A( u2 N8 T' {
#include "stdio.h" 7 E% |4 \+ T4 r
main()
8 h6 p' i0 c9 F+ I7 D% c0 b{
  n. B3 b% D" Y3 wint i,j; ! A  d# c8 ?$ d4 b8 Z
printf("\1\1\n");/*输出两个笑脸*/
5 K& n- I# Q4 w& ?9 v0 g& Kfor(i=1;i<11;i++) 5 [) w* @0 Z( E3 c8 j8 j4 z
{ 6 Y9 q- z; L4 T8 G1 I
for(j=1;j<=i;j++)
" |2 h$ I2 U6 X! Gprintf("%c%c",219,219);
0 ]! V2 `6 W0 @1 d/ @/ L! Lprintf("\n"); : D! r- @5 z# {* A( ?* j( z
}
7 m6 r$ ^* R+ S4 g6 l1 G} 3 t" H( {/ q( }
8 p* x3 B6 M# N& I( d# q/ X4 Z3 t
' Q5 n6 X4 ^9 `7 }# i( G6 g$ p
* _, [* L7 x9 P* `
作者: zhlei81 2005-1-22 11:29 回复此发言
* R! X# R3 x- I- b
9 `# k: c6 b) M8 c  e, \3 H-------------------------------------------------------------------------------- . P* i- ?  F6 V$ a

6 m* \% P5 f" U" n$ h# i+ z' ~$ s* ?3 回复:经典C源程序100' l5 G* Y1 Z0 {3 P3 j" u$ ]
【程序11
% [% s' H' ~5 P9 J' J& N题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月 1 I5 ]8 L$ B8 z) c6 K  p
后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
4 N5 t: ?9 L+ l7 B1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
1 D  G- R* y+ Y2.程序源代码:
! [+ {. g1 |4 g! I2 Nmain() $ Q  u' x0 t3 N* {
{ 1 N5 u7 M8 L9 C; Q3 `: o
long f1,f2; + M" O# o" \8 [9 b
int i; # K2 K$ X' a' L; r. ^7 y8 _/ x
f1=f2=1;
' R& X% v( t6 h$ Ffor(i=1;i<=20;i++) 8 ~+ t3 n; R$ H4 C) D
{ printf("%12ld %12ld",f1,f2);
3 Q4 @% q1 g0 U7 Q5 q1 bif(i%2==0) printf("\n");/*控制输出,每行四个*/
  h& g; v# h0 x& s$ J0 a% K0 Af1=f1+f2; /*前两个月加起来赋值给第三个月*/
1 a6 ?% n5 y; n7 H' Ff2=f1+f2; /*前两个月加起来赋值给第三个月*/
4 D  O% ^2 ?- t3 t, i} : l  w9 }$ w/ ]3 x
} , ~2 k7 s6 d2 K4 \% B. ?
============================================================== : N/ L3 q$ Q7 V  n  T3 Y; T
【程序124 e; }$ u3 d$ |& C% L+ l  }, P
题目:判断101-200之间有多少个素数,并输出所有素数。
  x4 p# E( B, p7 I6 J+ T* p1.程序分析:判断素数的方法:用一个数分别去除2sqrt(这个数),如果能被整除,   ^" S) q) z# q" ^
则表明此数不是素数,反之是素数。
3 V) m$ O. u$ @2.程序源代码:
' D2 t. \* r# Z$ _#include "math.h" + R* y2 f/ F6 O' G) F9 u
main()
: D* i7 a* }7 d1 k+ e( f- h{
/ g0 i3 M, [; g6 F( I+ Wint m,i,k,h=0,leap=1;
# |* v  }' o- p" @9 w; w5 Xprintf("\n");
4 {+ `0 u# P! ofor(m=101;m<=200;m++) 0 ]$ V  Q& z' D8 V2 S
{ k=sqrt(m+1); 6 O$ n* p8 K/ D4 c% p8 n5 h: ]
for(i=2;i<=k;i++)
( g8 `) o" M/ s& _* R4 }/ Tif(m%i==0)
  B. j( c) K/ C{leap=0;break;} . ~$ ]; s: M! B. T7 P" ]$ k2 I
if(leap) {printf("%-4d",m);h++;
, @/ t9 a+ ]2 {6 D) c* O- Q, Tif(h%10==0) 3 X9 P* f: z# j8 s( E# G4 s. X6 a  h
printf("\n"); % e4 g2 @( _) D+ V  k$ d# i: `3 H+ V
} 5 P: O% T+ |( }* U' |6 T4 b  l4 L8 o
leap=1; ( t' p3 ^5 H2 r0 d3 L/ q6 b2 R
}
: f2 N& p4 ~" o- Q" }" G8 Pprintf("\nThe total is %d",h); 5 R$ u& V  N4 j0 _5 X
} 8 ], E% }' c! e1 J, O7 m
==============================================================
. k& u" V# ^( |. H【程序134 p- S# T; Q5 h. z/ v
题目:打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数 & G& g4 |/ s8 i; Q' t1 y
本身。例如:153是一个水仙花数,因为153=1的三次方+5的三次方+3的三次方。 % A+ L& `3 g; q; u$ M$ c* Q
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 ) j! t; V( r$ G& w( c$ n9 [/ A
2.程序源代码: 1 q) O% n. s) t, }) {
main() & u& F: v* Z/ t  H, l' F* d
{ 6 k* L: o7 l& I' Z% N0 q: s
int i,j,k,n; ; j& p: K1 l' ]
printf("'water flower'number is:"); : ~9 i) ~' T: I6 u" N* J
for(n=100;n<1000;n++)
7 R/ h4 q+ l. x! k  t( ?- ^{
8 ^$ J  x' @1 G( O5 W% C8 Fi=n/100;/*分解出百位*/ / P& e! Y) N9 p7 ?, A" o! u0 Y, \$ i. Z
j=n/10%10;/*分解出十位*/
4 Y& f0 i) c; C. V; M7 w0 V. ik=n%10;/*分解出个位*/ ( g( q( W" V" n9 K
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) 5 p1 ]7 I2 k0 ~! v3 c# R8 J
{ 5 e9 d" m: z$ O, V6 @/ n% J
printf("%-5d",n); - `- C6 g, K" d3 g, ]5 E' B
}
# h, h) E6 a  q/ K. p1 K}
+ {& I7 r$ i* O5 _1 \. \, P+ N2 Cprintf("\n");
* s" `' V' |  M} 3 U! \) i' b5 ~4 V2 j; I9 |( L5 ^: i
==============================================================   r1 |4 R3 F% C* ]3 ]
【程序14! Z7 q7 v7 g# f& T, r8 ?
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*52 m7 q9 l0 H& w5 M

- r1 k3 U' c2 R程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: : Q4 |% ?7 I6 a5 e
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
5 r* o3 @! u+ D" ~) s(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n, ! Q" {) w- G: n/ H; _" n' Z
重复执行第一步。
3 K3 x4 Q% G1 w- w) K! k(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
  b2 Q# F/ W6 R  y* ~& N& `2 J* p1 z$ i
2.程序源代码: , v/ }. `* d/ y
/* zheng int is divided yinshu*/
( M5 `; I2 E, @4 @main()
7 s0 \; q- d& I0 i% k{   m. F! j8 e: m$ o, ^; E8 }$ x0 r$ w
int n,i;
2 M( D% U2 M$ q+ e- s; Vprintf("\nplease input a number:\n");
1 z& R# X% x1 I0 M  l% Tscanf("%d",&n);
6 {) r4 d6 w: V) c5 p4 eprintf("%d=",n); 8 E0 Y  F  }+ F- w  z) c$ k+ @
for(i=2;i<=n;i++)
5 ^. {# I# [; L3 d, x. n( a, h{
1 z5 |$ ^9 {7 z# P/ X+ X- Cwhile(n!=i)
( T( l7 M! L7 F1 M{ - {0 v. j! T9 W, J" ^" [1 ]
if(n%i==0) 7 U; @* b6 J$ {/ f0 s1 ~9 h
{ printf("%d*",i); 3 B; j1 b! [8 k  _4 O. n# J0 h* Z7 U
n=n/i;
7 Q# M: P6 \" `: v+ u1 a} 0 S5 \8 v5 l- e. L: [
else * P+ M0 [) b+ O/ `# K3 B
break; - i  F/ Z4 z. s, q: w
}
# Y# n. S% P0 p}
% u9 ~% {& X! T) A! d; _6 rprintf("%d",n);}
% G, {0 {5 N5 J! N

# t$ r. M+ T2 p& b& n
回复

使用道具 举报

发表于 2017-9-23 11:47:18 | 显示全部楼层
看来也并不是那么难。不过饭还是大家分着吃。
回复 支持 反对

使用道具 举报

发表于 2017-9-23 12:52:40 | 显示全部楼层
赶脚很牛掰的样子啊,机械人完全看不懂
回复 支持 反对

使用道具 举报

发表于 2017-9-23 16:14:55 | 显示全部楼层
收藏了,楼主不会是在学程序开发吧。
回复 支持 反对

使用道具 举报

发表于 2017-9-25 17:47:49 | 显示全部楼层
不是100例吗?
回复 支持 反对

使用道具 举报

发表于 2017-10-9 21:20:33 | 显示全部楼层
c语言的基本应用挺好的
回复 支持 反对

使用道具 举报

发表于 2017-11-23 15:37:41 | 显示全部楼层
好东西; c2 l4 W; D' d  t" X& E. F* Z
回复

使用道具 举报

发表于 2018-2-28 13:51:49 | 显示全部楼层
在学校学习过这种
回复 支持 反对

使用道具 举报

发表于 2018-2-28 16:57:19 | 显示全部楼层
看见程序就头大
回复 支持 反对

使用道具 举报

发表于 2018-3-4 22:16:13 | 显示全部楼层
你骗人,我数了,不到100例,把剩下的吐出来,不过还是收藏了,虽然简单,但是基础和根本。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|中国机械社区 ( 京ICP备10217105号,京ICP证050210号,京公网安备11010802010176 )  

GMT+8, 2018-7-22 20:41 , Processed in 0.093927 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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