找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 6555|回复: 16

C语言经典算法100例

  [复制链接]
发表于 2017-9-23 10:57:34 | 显示全部楼层 |阅读模式
【程序8
- I0 s: J2 }1 b3 I4 ~6 h题目:输出9*9口诀。
6 ~8 ?! L3 ^* i: ?/ W1.程序分析:分行与列考虑,共99列,i控制行,j控制列。
  K* h# `& z: S) D0 A" W. b2.程序源代码:
: O. A9 n6 C$ J( B#include "stdio.h" ' g  c3 o7 {, o
main()
# c5 k; T0 p( _, e& u0 J{ : x& _# K( t/ V6 [
int i,j,result;
( f9 w4 |* r2 f+ c% Vprintf("\n");
9 I/ r/ j# q9 c/ w" wfor (i=1;i<10;i++)
. Q! ?: l+ l) f{ for(j=1;j<10;j++) - c! T7 g9 @7 k5 [# w0 c* c
{
2 O5 r1 m( F: D/ b# V& Gresult=i*j;
2 w  a5 n) N0 _printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3*/
( Y* V; g0 x, c$ n0 l8 |}
" |# H9 T6 y; r( t9 q+ R! Fprintf("\n");/*每一行后换行*/ $ {; r0 j, n7 Y' H4 n% B% D
}
* ~3 N- K5 _& J( }9 C2 u+ H} ) H+ u: c3 d3 X( B
==============================================================
9 y; Q; V3 r8 f& L5 }【程序9* m" |( E* F# y# R* i
题目:要求输出国际象棋棋盘。 $ s2 v$ \: D5 W( P: t& h$ @7 N& |8 v
1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。 8 ?# m1 D3 ~$ \, l
2.程序源代码:
% Z8 Z5 T' ^) p& y#include "stdio.h" 3 q9 Y" `/ |/ T# t
main()
4 o0 E2 _6 i6 ^! d8 y( q8 s  \. S( g* k  a{
& }9 f/ A" F* ~; [  O& A: H# I! [int i,j; 0 E: b% k9 y' R0 o
for(i=0;i<8;i++)
- q& O0 d6 W, r% Q4 }% U{   k; Y7 L9 D7 I( `) x9 f6 S' f
for(j=0;j<8;j++)
* O" ?9 E3 V% r! e3 Tif((i+j)%2==0) : g4 f- ]2 h$ Y1 ^4 `
printf("%c%c",219,219); 4 N- [1 c; g6 X# O. q& N& L2 X
else
; y+ q4 t! y. ?- z$ j9 Rprintf(" "); 0 c& P1 e- _9 L6 c3 E2 d3 }
printf("\n"); , s) k( d$ M; n) ]
}
* f( I5 Q* @" H5 ^) G0 z" c} . J- Q: U; v: e2 Y, D- ~7 t7 O& w
==============================================================
' d1 m! t9 m, g1 E& b3 Z7 [【程序10
7 D: x% k& t8 ?0 P% _* G" W8 _) e题目:打印楼梯,同时在楼梯上方打印两个笑脸。 % {  ?$ C. S9 X; y
1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。 ) `2 S& K1 }9 v" S$ v% ?6 c
2.程序源代码: , `8 k5 E+ c( u: K, z) `
#include "stdio.h"
$ g& K& i( Y! k' ]2 u6 [; ?main() 4 [" p# r1 [* O# Q- a
{ 3 d9 \$ H' [1 Q( F, g8 Y" ^5 b
int i,j;
7 @8 M  k* A" [4 kprintf("\1\1\n");/*输出两个笑脸*/
3 u) I$ W- m6 L, Z6 v& Cfor(i=1;i<11;i++)
  c9 {3 @* }9 I{ / o4 s4 l3 [7 c% u- V1 M; o
for(j=1;j<=i;j++)
. B5 V* a: ]) Xprintf("%c%c",219,219); 0 D+ P8 O( h, c% O" ?# s
printf("\n"); ( G( y( \$ N8 E' t1 z( Y- M
}
: Y; z& ]; h4 o* A. D' \/ E} , A" n! M" P1 L# P7 p( q

2 L, C, c1 z3 D: F6 o2 b, D1 A
8 Z- b% l9 i$ t* G* h' z. H- U1 P; Y% L% L
作者: zhlei81 2005-1-22 11:29 回复此发言 ; y+ T' z7 t' P, E, |- I+ i# W3 ~

8 H; \* ]( y3 b/ y7 z1 S* \--------------------------------------------------------------------------------
) G/ T! g# k, a( V( ]% v6 y) I+ y# @' L
3 回复:经典C源程序100
3 A% U# c; W# o: i0 e$ f) b" L【程序11
+ ]1 v: A2 V; C, ~6 K  r7 ^题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月
, a2 n; j, q/ u: Z; E后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
1 l9 _* ?" [. Y6 Z% @7 {8 Z1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
; d) j' R, s) N$ }* {$ M2.程序源代码: 3 n9 a* u7 r5 o$ `9 h6 S# \4 _
main() ( C1 f' _5 M/ D' n7 |" S
{ 3 s7 F$ o1 N$ ^! q
long f1,f2; , R3 X& O' x; \: E* W
int i;
, u; C6 m& s) K$ Cf1=f2=1; 7 C( k% J, H& p- G
for(i=1;i<=20;i++) $ e7 D7 r+ r0 B4 o  [
{ printf("%12ld %12ld",f1,f2); & t5 U% J# N: Z- x7 ]5 z) W8 M
if(i%2==0) printf("\n");/*控制输出,每行四个*/ ( k  u# Q0 ~0 V. m6 ~1 k1 O& P6 O, k! l
f1=f1+f2; /*前两个月加起来赋值给第三个月*/ 8 G; v0 D' j$ O! _3 ~3 w3 _* r
f2=f1+f2; /*前两个月加起来赋值给第三个月*/ $ [. g8 A0 O8 @6 u
}
8 k" V; b% ]/ H( R- R3 {4 s}
0 c! C3 w5 ?$ {- Q- ?/ t============================================================== # z9 y, Q1 W4 {2 V2 R* L
【程序12
8 S9 A/ {2 ]" G, ]6 f, z题目:判断101-200之间有多少个素数,并输出所有素数。
* I+ K. S9 Y7 H* b. s4 k, t! T9 r+ G1.程序分析:判断素数的方法:用一个数分别去除2sqrt(这个数),如果能被整除,
# H3 u% v& `( u: E则表明此数不是素数,反之是素数。 1 J; \3 p& z& N. b& t
2.程序源代码: ) K9 |4 m' W# c$ W* @, X% Y& A
#include "math.h"
- ^% ~! x" v! [( {6 C- y3 Lmain() 5 c! U' }  n6 K1 I1 R8 K, M
{
5 s- x5 ^+ F! ~6 e/ c% e1 m# `int m,i,k,h=0,leap=1;
1 z' o8 H' B- `- @1 _) ]printf("\n"); ' x, `$ A' T9 f5 s7 Y
for(m=101;m<=200;m++)
9 `' H7 @/ e8 `% |  d: h{ k=sqrt(m+1);
% T* N& D6 x0 Efor(i=2;i<=k;i++) " Q/ B+ C( L- b: X* o
if(m%i==0)
6 p1 R8 k6 f- o; x. ?2 D{leap=0;break;} : Q# p% G4 N3 i1 q
if(leap) {printf("%-4d",m);h++; - F- N4 r" z7 N# U0 Y, x8 E* b1 l
if(h%10==0) 4 Z8 C) s# a+ p$ `
printf("\n"); ' ]2 r! n8 i, i# @8 A7 V6 S5 C
}
% I& j( ?0 N) u' K6 b5 \5 |leap=1;
' l4 U# m" M. u2 Z. G+ _}   O  `( m/ e  K7 c- ^& Q
printf("\nThe total is %d",h); * M0 j9 E) E+ H: \! T9 Q
} . J. d& d) u. S9 O# {# a# R. m
==============================================================
% D8 t: g- W$ l- P" ~# Q5 @【程序135 z9 \6 s( X- k* r+ V' K
题目:打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数
. x6 s" ?" o/ n5 d  {本身。例如:153是一个水仙花数,因为153=1的三次方+5的三次方+3的三次方。 : }" a0 |7 y) t3 ]0 `: T7 F
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 # \, l. m. q4 {& [1 K
2.程序源代码: , H8 T0 I( [% P+ H9 ~- [! r) S+ J4 r
main() . M6 C( p; h2 }
{ 0 Q( j7 S, @- z* ~# F3 j5 O
int i,j,k,n;
* `+ i6 f, X7 p' rprintf("'water flower'number is:"); . P0 g! o; }5 x( j& B% P- C
for(n=100;n<1000;n++)
* T. W( E# z8 f: ?+ o1 U{ % j2 o/ P  C3 U; ]7 G6 l5 n# J
i=n/100;/*分解出百位*/ - p- |& a2 O3 x) P; L/ u# I& A; G+ {
j=n/10%10;/*分解出十位*/ . c6 v5 ]* E% ~( _
k=n%10;/*分解出个位*/
( A# x, ^( H, l" Pif(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
8 T' X/ T& x$ f6 J, x- O" U; _/ U{ / g% I- G5 i+ u* t
printf("%-5d",n); " m0 Z. f- h1 N7 X) z0 u3 N
} 8 h1 f% z$ M+ b: K9 d# f
}
  W0 ~3 ~. {/ ?' Y  w4 b) q; Iprintf("\n"); & ]8 O% @$ _: N3 D. C' B
} ' S3 y/ o- f* N( _3 `( t
============================================================== 0 u  L' y# U' j, ~
【程序14: S$ s* v# W7 M5 G* N8 o5 N/ y- {
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5
7 s: d# Y7 a- [# u) w# }: e' `( z& W; P% T6 E7 b. u1 `6 k1 D
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
8 V# t; J5 _1 E3 c9 v% p& m1 H. t(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 , ~* a5 |# Y  p8 m8 m' Z
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n, 3 P5 V- L9 }7 Y' H
重复执行第一步。 3 i! f$ Z. W, d1 e7 }1 w
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
% p' N- a; H  X4 Y% f/ F) L
3 n1 c( D  @" N  r" H+ N0 X# s3 L2.程序源代码: # Y0 i! F# K0 W! Y1 M
/* zheng int is divided yinshu*/
" U9 E# ^3 _: A3 {  P& f9 e9 nmain()
3 u! L: h* c9 d6 I: c{
& ~) {$ ?6 O) @7 s  U: Dint n,i; ! b6 s+ o/ S+ u+ X8 ~
printf("\nplease input a number:\n"); 9 V9 K/ b" k* E9 M- h
scanf("%d",&n); " t& v% r5 Q1 F6 E$ a
printf("%d=",n); ; A$ r: r) O! w2 ?; r
for(i=2;i<=n;i++) 8 a3 J* v" H0 X7 t, E+ b
{
$ F4 ^  `0 F$ p/ `3 C' @( w- Uwhile(n!=i)
: S# z9 c/ v: p1 P8 b- X3 j3 R$ [( h{
( q/ R/ g5 k8 b5 o) Iif(n%i==0) / m- C; W8 g1 M" J/ M4 w
{ printf("%d*",i); + Q9 \" o) Y7 L% k# W
n=n/i;
5 ]+ i% F5 y; u* t" B) }8 k, W}
% B$ n4 U$ p/ P8 Y: V3 Velse
5 |! k$ s8 \- b: v4 ibreak;
% i0 a5 j% p- h/ a$ J- J0 L# G} , t& x  O" I3 F/ x' o
}
% u4 a$ s  u9 n5 Xprintf("%d",n);} / T4 d0 J, r' F+ g3 z% N

8 ~2 v7 Y' h3 A( z, u1 N2 D$ j
回复

使用道具 举报

发表于 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 | 显示全部楼层
好东西4 j9 R; J7 d8 U0 G) m
回复

使用道具 举报

发表于 2018-2-28 13:51:49 | 显示全部楼层
在学校学习过这种
发表于 2018-2-28 16:57:19 | 显示全部楼层
看见程序就头大
发表于 2018-3-4 22:16:13 | 显示全部楼层
你骗人,我数了,不到100例,把剩下的吐出来,不过还是收藏了,虽然简单,但是基础和根本。
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-9-15 15:09 , Processed in 0.059465 second(s), 13 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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