机械社区

 找回密码
 注册会员

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 725|回复: 6

C语言经典算法100例

[复制链接]
发表于 2017-9-23 10:57:34 | 显示全部楼层 |阅读模式
【程序8" L' t/ p3 I+ K
题目:输出9*9口诀。 ) Z* ^. ~: ]! x# `% {" |
1.程序分析:分行与列考虑,共99列,i控制行,j控制列。
: [; Z1 H, P; T3 r2.程序源代码: ! n( e& L, r& @5 _1 q
#include "stdio.h"
2 F% E/ I3 r9 }7 Bmain() 4 T: T& m# a% E! [
{
1 n6 V  @6 m8 ~3 Z5 X6 _; ~2 R1 y" @  jint i,j,result;
- R% I- r7 J& \& `printf("\n"); 8 }" O# D. Q7 |) Y: ?
for (i=1;i<10;i++) 8 x$ o$ \( I3 B. y5 `
{ for(j=1;j<10;j++)
" O+ d+ H2 {6 z& W4 ?: q{ ( m8 {" b; [1 E
result=i*j;
6 e7 t. ~5 v" n; t4 S! f5 J( X* {printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3*/
# C2 o$ ~" G9 }3 `0 W& X: e* Z} + N! X+ @: g) i5 Y1 J$ F% P
printf("\n");/*每一行后换行*/
: J" @7 Q6 t4 J+ Y$ q3 g5 u$ m% X( s6 {} * m: b( I* G9 V: O) J
} ! B& b5 \% ]+ q. ~7 s# p
============================================================== % n6 v! G. a* ]. T
【程序90 a7 b) O/ f  Q( i" ]% u4 w
题目:要求输出国际象棋棋盘。 6 @3 H( B. t+ P$ k1 j
1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。
1 M- j5 B) |# M. @4 |7 `$ T2.程序源代码:
4 \2 u2 f" l7 [0 v+ G#include "stdio.h"
/ u  |2 T' u) r+ N" I- Fmain() : N( m" ^* r9 L3 N
{
2 L$ H/ ^  F+ C" Tint i,j; 7 O; E2 V. g- ~  Y, I
for(i=0;i<8;i++)
' K5 }. {2 q6 o+ a1 H. V! j{
" M# z" a& j/ b& }0 H9 X, Wfor(j=0;j<8;j++)
3 a% F8 e; a% F1 C  O: N+ aif((i+j)%2==0) ) T; r( Z  r+ _2 v8 ]
printf("%c%c",219,219);
8 I" W$ c& w; C: R1 q) J% K5 q% ~else ! d$ `1 D# L' H, j% x
printf(" "); 7 l! y7 N$ f) d( f4 z# Y" B& ^/ v
printf("\n");
7 N$ [: K2 G- @5 e} $ P7 M3 ^" f- J* A
} 1 }; ]8 n* h& F# ~
============================================================== 0 P# P- g' k; _
【程序104 b& Z3 a6 D( K. p
题目:打印楼梯,同时在楼梯上方打印两个笑脸。 ; M  x" J% B1 P  O; I9 v( @8 X" y
1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。 9 `; x6 ]) I* [, B- C7 N+ r
2.程序源代码:
* r1 f0 l, g+ `' w#include "stdio.h" 7 `$ V  t6 ]+ d$ v; |
main() 0 H: {) g9 b! R* s
{ $ e/ k. s1 Q" d4 z; O
int i,j;   t- c- p$ C! m, X+ V& T
printf("\1\1\n");/*输出两个笑脸*/ ) X9 J/ Q; h9 N1 _4 k, {
for(i=1;i<11;i++) 1 b7 A7 E) P- y/ d/ \5 w5 m
{ 6 x$ {8 r+ H3 A! Y  z5 I
for(j=1;j<=i;j++) $ s5 p1 q: l/ w7 `! @: B
printf("%c%c",219,219); 8 `. n" u7 O7 e4 w& z* t3 n: s" n
printf("\n");
: G' B4 G) t3 T5 k# L# {0 `} * s& `2 y; _6 B3 g  {
}
1 P9 J6 G- g* ?
$ l8 W1 _( Q* K. I3 f/ B0 [. {3 o% t, O7 Y0 F; E% C! t1 Y9 w
3 K) R/ ^2 y: t( n5 S
作者: zhlei81 2005-1-22 11:29 回复此发言
9 O% E5 p0 s1 g) c# S2 H! L1 ?' B+ x# \$ U% d0 j* x- u& e
-------------------------------------------------------------------------------- , [$ X! _* r2 D/ t" ?4 G1 t1 B  k

0 [3 E: r, f9 |3 回复:经典C源程序1001 w5 m& J0 t: v& H4 q0 F/ I! }9 M/ T
【程序11
2 o+ E/ N0 T' Y& _. {* }! \题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月
- \5 S/ T+ S& m后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
, Z7 z& o1 w8 a- d* N1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
8 k( l. z, I9 u4 ~+ P# O2.程序源代码: ' T. b- E$ ?" I8 D
main()
& Q8 v* v% Y+ ^0 M{ " V0 L3 s, N* `8 m7 o5 s/ n! R) C: ^
long f1,f2; 8 i% H+ X1 l! ?" G& M% q. v% v
int i;
! J) y) }. ]% P3 t; Cf1=f2=1;
: `- x' _  b2 z6 d5 `; Bfor(i=1;i<=20;i++)
( T3 b5 V# q( R9 U) U{ printf("%12ld %12ld",f1,f2); * T5 k5 q8 g: p; v8 w) f
if(i%2==0) printf("\n");/*控制输出,每行四个*/ - |1 r9 Q/ P. M" A; z- ^+ H3 J9 [
f1=f1+f2; /*前两个月加起来赋值给第三个月*/ % S' Q2 `% l2 a
f2=f1+f2; /*前两个月加起来赋值给第三个月*/ % A" Y! Q) n6 C4 `2 s
} # c% m  M1 H2 T/ Z6 w
}
2 |' A- O; r; h. W/ H% X% w============================================================== ; _) D9 ~3 Q# P+ X8 i3 L
【程序12  _$ ?0 p  ~" A: a' z* a  L$ j
题目:判断101-200之间有多少个素数,并输出所有素数。 2 F) S/ _% ~0 }3 _% P7 a8 b: M* j
1.程序分析:判断素数的方法:用一个数分别去除2sqrt(这个数),如果能被整除, $ V( u  T& [" n1 W. m
则表明此数不是素数,反之是素数。 3 e/ y( W5 k+ {$ m( n- I
2.程序源代码:
: v: @7 {) ?  n  k& V6 |#include "math.h"
+ @* w0 C) }5 \( f/ k& fmain()
. k' A; B" y& A& i: z8 m- x, H; f{ 8 O4 x3 W% \" I: A5 n7 b& E
int m,i,k,h=0,leap=1; + Y( }& N% f4 {, p
printf("\n"); $ b9 U  [' G7 S+ j  L1 u
for(m=101;m<=200;m++) ! W/ `0 T: ~9 P7 R# n# ?
{ k=sqrt(m+1);   ?1 \) u1 s4 i
for(i=2;i<=k;i++) $ D6 z. h( O' i  R6 V6 n4 K3 w: s
if(m%i==0)
8 z" V  _: a. L9 s{leap=0;break;}
/ m2 R: _; p  j- n: @5 ]3 Lif(leap) {printf("%-4d",m);h++;
- o( c- S( s/ I! x. k; X% xif(h%10==0) * J" z3 T5 x8 e. J) Q
printf("\n");
) g& g5 \8 y5 F% v! ?0 D} # Y  G/ A+ U; @, s; |5 E
leap=1; & q% u: N4 Q0 G; Z) n
} 2 D$ x: P8 P4 U+ V
printf("\nThe total is %d",h);
; }" \1 |" r- @% H9 T# o}   i) B' I" f  Z
============================================================== $ j) @/ {9 U3 K4 l6 t$ b  J
【程序13
: t  f$ ?0 O8 V9 r( x+ N题目:打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数
, e4 E* ~6 @3 j% o6 a本身。例如:153是一个水仙花数,因为153=1的三次方+5的三次方+3的三次方。 9 u8 D, a+ L1 `
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
& I0 _9 `( F6 `- }: j! u5 F5 i2.程序源代码:
9 j, G* n1 Q6 ?2 ]+ dmain() ) i6 P0 D3 w8 L. E5 J) j' ?( E
{ # t. B# W) K( V9 h
int i,j,k,n; : z3 E1 x$ Q- E
printf("'water flower'number is:"); * ^5 b8 a; ?0 m. C0 u
for(n=100;n<1000;n++)
6 k- c0 z6 z% {9 b2 g{
8 k/ B# K3 p/ J# F, q6 u' D" e5 Wi=n/100;/*分解出百位*/
* ~- y8 |% b' Z7 zj=n/10%10;/*分解出十位*/ 9 c8 S. @" R6 X& H3 `6 c8 c+ i. ]
k=n%10;/*分解出个位*/
$ H; z( E: V) F4 H4 Jif(i*100+j*10+k==i*i*i+j*j*j+k*k*k) 1 n5 m# B" q- z/ @
{ 7 ^8 J3 F6 X- n; o# [* R
printf("%-5d",n); 1 `2 k/ j, H* i
}
. Q8 b1 P* d4 u5 F$ h. e} ! V0 ?! _( r7 f* `6 g& }
printf("\n"); ) I) A  @3 V. y8 d, ]$ [; \% x# F& i
} 8 |" J6 A/ ?: s: H; D
============================================================== $ L0 d9 n1 S& ]/ s4 D
【程序14
2 u- U8 F/ k% Z+ l0 e) @4 N' y( s题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5  a. k3 K/ W1 H- K; d1 L- c  C

9 I3 G* t& x3 B程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
6 B" p' {/ D! ?8 H0 S) X9 k(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
/ N/ z3 ]+ m. h2 y- n(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n, 2 V0 l  d( `3 n- W5 u8 {4 f: ~" D
重复执行第一步。
2 v# H  O! ?7 F' r% P; A(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
5 [) U3 d, x3 x
# q8 A6 a5 Z" |3 R2.程序源代码: 2 v5 ?. f. v! B( |
/* zheng int is divided yinshu*/
* k9 R/ ?! ?6 x) w* g! E% D# T+ Omain() 6 `& |& e/ S0 U/ H. c1 y* l
{ 1 G. Y1 P0 B" W8 D! H6 j7 O
int n,i; , J% B* @4 B  z$ e2 C" B! d) u" L
printf("\nplease input a number:\n");
$ @2 ?& M5 p2 N& B6 gscanf("%d",&n); * R8 I* q6 r$ a' r' l
printf("%d=",n);
8 j/ V4 e  Y- M8 a2 V: ^for(i=2;i<=n;i++)
1 }) b1 b6 l# h3 ^0 |{ ) r" c; I$ D6 v
while(n!=i) + g/ A8 U( X, q& r. J8 Y9 q
{ * |! c5 M) x8 R: E
if(n%i==0) * s& E  y+ F! w
{ printf("%d*",i);
: u, z: X; F" f  q& a, v7 dn=n/i; 2 W& w5 b( h: h  W% c
}
: H: U; t2 n- q+ v6 F+ g% I3 Eelse
/ U3 \4 `7 @" t* _2 V. Zbreak; ( R' Z9 E( W9 a! M3 c$ e+ r
} + D( B& ]  c% U( [
} ) G! b. |5 l) L5 x3 h, O
printf("%d",n);} 7 S0 m- }! f# ~# D$ y" U

9 Z7 A& [2 N7 \( f: K: R. K
回复

使用道具 举报

发表于 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 | 显示全部楼层
好东西% y6 @8 Z8 a6 R7 L, Y* \) R
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2018-1-17 07:16 , Processed in 0.078524 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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