机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 5097|回复: 16

C语言经典算法100例

[复制链接]
发表于 2017-9-23 10:57:34 | 显示全部楼层 |阅读模式
【程序8& E+ Q6 a% P, u' c) O; ~
题目:输出9*9口诀。
# \+ i8 Z8 y( u. ~/ W+ ^  q1.程序分析:分行与列考虑,共99列,i控制行,j控制列。
# k6 m  U' {4 n+ o, E* K1 e2.程序源代码:
- R) C6 z$ m: }6 H6 l$ b#include "stdio.h"
8 q! |- s6 j! n% O1 ymain()
% a: A0 W7 k3 j/ ^' g{
, e3 J7 h. Q5 kint i,j,result;
( h5 q7 f4 c& }) Oprintf("\n");
0 X/ a/ k$ M' ^+ P% [9 Hfor (i=1;i<10;i++)
  P, t) @2 G/ L! G{ for(j=1;j<10;j++) 6 E* q) g# @5 L9 ^6 W
{
9 M+ w- Q# k: f* Tresult=i*j; * l: o+ H, |/ p% m  c4 B- }
printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3*/ & W& }9 W# j- R+ Q
} & C( r. Q. W( n7 g2 `. M
printf("\n");/*每一行后换行*/ : ?8 a+ D& z4 {/ e" I( }1 C6 t9 C$ m
} + S- d/ ~3 P; z# T  q7 q
}
6 J0 T& X! v" X: I  j" P==============================================================
6 O% m# y/ c* f1 G- i  L' H【程序9
3 X: W; p7 Q7 S' y; b题目:要求输出国际象棋棋盘。 1 h. f( b' `' V# j% C0 M
1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。 : r! ]- h, k2 {: }4 I
2.程序源代码: 0 d) _2 U5 J, L3 Y7 I: K
#include "stdio.h"
: A$ f3 F+ r) L/ e( W; f5 b; ~main() , T9 `9 C; N+ |- \2 `& q2 _+ [
{ 6 O. x# \; |% ]
int i,j;
# c- |1 C# i1 Q# s* m. e; C: X! afor(i=0;i<8;i++) 5 _+ C, t% C% d+ I8 Y% m, O
{
) Z7 h# \" k1 Q. M: O! {for(j=0;j<8;j++)
, k" T7 s  d8 a  x0 pif((i+j)%2==0) . c5 [4 B+ P( Y" r
printf("%c%c",219,219); : y( W7 k" t2 t* N# Q$ R
else
3 S) f! p; `$ c1 _9 p( eprintf(" "); 9 I. ?* d1 b/ ]: _/ |
printf("\n");
( t9 z" Z8 O4 J* l}
8 b! ]: I8 n$ L+ K! I6 E}
5 s3 ?0 W  z' Z- K8 M2 p============================================================== . s' z! ]1 \# c4 O  R- F
【程序10
$ x6 R& N; s, ^; F2 ^2 l题目:打印楼梯,同时在楼梯上方打印两个笑脸。 ' e; `1 P$ G# k8 |3 V/ Y$ s! u
1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。
* s/ w" O/ @  K% e: E" }9 M4 {2.程序源代码:
$ {' ?% W1 D  a8 P#include "stdio.h"   L* K( w1 Z$ `" U
main()
2 p4 Z8 b0 R* a/ F- R, r{
/ t: S; l/ N8 f+ I: j0 x8 Z9 Fint i,j;
+ K- ^, |+ A+ f% s4 |  l4 Q5 yprintf("\1\1\n");/*输出两个笑脸*/ 4 H; y- d/ G8 X! P) {2 F4 x: @; w
for(i=1;i<11;i++)
  Q/ q$ k) a$ a3 e9 C1 z3 c{ 9 P$ o/ \) I" ^* U4 D& D
for(j=1;j<=i;j++)
3 B4 ~# W( Z+ ^5 g6 T  Hprintf("%c%c",219,219);
; e# x1 `/ X+ t8 |7 b' V6 Z1 O5 v2 eprintf("\n");
! ~/ m8 t5 I5 J6 L% [9 V}
! N5 I; Z  e$ l: X: U}
* e: H0 ~( f; k% @' o* Z) u0 V9 `- Y2 d) L! ~: d. c' n
0 p* d0 ^/ @2 m# ~9 J
4 h6 U. f/ ~2 l: S1 @
作者: zhlei81 2005-1-22 11:29 回复此发言
2 a8 f2 L3 L8 @1 C1 M% @4 r4 P4 c2 P" ~1 s
--------------------------------------------------------------------------------   ^  U% @4 y% M

/ }/ B4 j4 f* O# s# S( ~. y3 回复:经典C源程序100$ N$ M1 k/ z9 f
【程序11
" }, I" x' J6 c, f& U题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月 $ V: n, K$ j5 H2 a( `( K) C
后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
5 o+ r  a, j& B4 G/ V1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
2 K% s# T  I- k9 V" f! E2.程序源代码:
* C; [3 \6 k8 m/ @$ A' T8 C/ Dmain()
% X: ^* z6 j# o$ a, D+ |0 j{
9 Q0 P1 k; S5 H7 }" _* zlong f1,f2; & e4 ]/ c0 ]& b$ c, O) K
int i;
& s3 Y/ S! U! e' w! R6 C& q& X5 P, Cf1=f2=1;
4 p9 o, ~: b( a% Efor(i=1;i<=20;i++)
/ U+ L, z- w0 \# U+ [. F{ printf("%12ld %12ld",f1,f2);
, H" H9 a8 o- c7 N' Nif(i%2==0) printf("\n");/*控制输出,每行四个*/
$ d, Q. R5 @8 }, o" X+ j6 ?8 w0 ?f1=f1+f2; /*前两个月加起来赋值给第三个月*/
/ S5 T, s. O1 v2 Y: zf2=f1+f2; /*前两个月加起来赋值给第三个月*/ ! L2 ~7 ~" e) N' ~: W. Y
}
( N# |) \# j* f}
8 l4 m: j1 Z( J% F============================================================== . u% J) C8 S+ K. |# r5 j) B
【程序122 \, P" N; l9 n  m+ b4 y
题目:判断101-200之间有多少个素数,并输出所有素数。 7 j) ~, X3 j3 T5 X7 l
1.程序分析:判断素数的方法:用一个数分别去除2sqrt(这个数),如果能被整除, * a. _; C( _& H0 ?9 A
则表明此数不是素数,反之是素数。
4 Z# d4 \9 U) J6 i3 W, d5 I+ i2.程序源代码: 5 z4 a& G: Q, h* r1 [% C  c
#include "math.h"
* ?1 U, w: {. _5 r4 e& ^main() . B# g# j: E$ H$ ]7 d8 `" b7 b8 ]' I
{
' E) `1 h% w# T' Y3 n6 rint m,i,k,h=0,leap=1; * f; k0 s& l8 x3 ^3 ]$ P7 e, d
printf("\n");
- \/ N' r" h# C9 B8 Gfor(m=101;m<=200;m++)
9 m: R! v" M5 \  v$ h{ k=sqrt(m+1);
8 S' [# Q" S( P6 u  ~; z( Jfor(i=2;i<=k;i++) ; V( c* ?& S# X+ I( N- |5 s1 J; B. ?$ y
if(m%i==0)
7 ]( Z* H8 Z: U3 [: M{leap=0;break;}
+ B+ I8 e7 H; v) i9 U3 Bif(leap) {printf("%-4d",m);h++;
# ]. l4 y  {7 D" |. ?if(h%10==0) 7 {0 J- d1 f# |8 B
printf("\n"); 4 F7 v0 A% s2 ]. s8 z- v
}   i! l. _+ i1 @3 L' |6 X+ C
leap=1; 9 n  ^' I9 }& ~, Y
} " ]/ X; Q% h) A' e4 X% q1 h
printf("\nThe total is %d",h); + l8 O+ c5 X' ^1 ~8 X, H) y
}
: @' W  p  P+ K3 p& s==============================================================
, f5 Z4 _4 ~: ?) D【程序133 h4 V: @/ `% u0 l
题目:打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数 , m5 Q, v7 Q# U7 ?- K9 {
本身。例如:153是一个水仙花数,因为153=1的三次方+5的三次方+3的三次方。
$ L* t. s8 l* _3 [1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 1 {* B* C8 y" m0 [
2.程序源代码: : k- U' g, w9 c2 m
main()
2 t" e0 \; i  `1 f{
$ D% j4 Z1 S4 e, Y. P7 p8 Gint i,j,k,n;
+ G* D! G; |6 R, Sprintf("'water flower'number is:");
& Z1 r$ c1 y3 w  ]! r4 H' c) r5 yfor(n=100;n<1000;n++)
" ~, x" R& `2 G9 L, ]; J9 F{
7 j5 V# }% D+ |1 J8 V3 M5 o5 X* X- Xi=n/100;/*分解出百位*/
* O/ W, S7 r* z0 R$ }  aj=n/10%10;/*分解出十位*/
" L4 {2 r9 g- K$ A  H8 wk=n%10;/*分解出个位*/
% C+ F* ^$ Y& ^  V" A! U1 r. Xif(i*100+j*10+k==i*i*i+j*j*j+k*k*k) 2 r7 \9 x( E8 g/ h9 k4 X
{ ( ^0 Q6 {' n9 q8 l6 Z' c+ H
printf("%-5d",n);
) Y! _5 d; P5 m}
7 K0 B1 I! ]& S# O, g5 y' m} 0 u- t: B* Y6 h& W/ b8 ]
printf("\n");
2 T& A9 s6 a; E& @* E}
& y7 d! C. ]+ E& {& R0 F8 V==============================================================
# L! Q8 I3 {7 @/ _【程序14
: U, W9 W, P6 {1 p3 u: z题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5
# [2 V9 H" S" N& ~" f6 ?( `& {$ p5 N5 P1 r
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
3 {6 D( j' V3 [$ S" s(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
3 ^7 O6 t9 k2 t1 |* F' l) b) c(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,
- P, C+ V% H+ Y重复执行第一步。
) N3 t7 ]( m2 a" I. y# J* e! J(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 1 g% l9 u$ y+ j9 t/ P
* A% g! l+ ~3 M$ Z, _9 v
2.程序源代码: % a! g- v0 l. X
/* zheng int is divided yinshu*/
4 W5 \1 Z$ \$ W% [main() , c2 s) Q2 }# u2 }9 a: q2 m
{ $ j' R  R3 g+ i6 V  Y
int n,i; & [2 b6 T) f0 G1 j  b  e' W
printf("\nplease input a number:\n");
5 N' t% X* j6 v! U9 K- lscanf("%d",&n);
3 H: R0 q# f  O: N, Dprintf("%d=",n); 3 ~' ?2 a7 b  ^, \) V: l  T
for(i=2;i<=n;i++) 9 ^9 H4 g! |2 ]" J% {
{ 4 }' D) v% s" F! {# \1 e
while(n!=i) 7 g; }' h! Z; b. b1 O
{ : o/ ^% u& E3 _( E  A3 E, v
if(n%i==0) 1 \5 T0 X$ I, K$ A* K# W( D
{ printf("%d*",i);
. R- s* R; ~* J- q$ |n=n/i;
* W2 \9 ]8 U& E5 q: u}
. H/ _! V2 u$ N6 p: ^/ g( ]5 z( U  Delse
3 J6 r' y/ `2 _7 Nbreak;
  r) s3 ?5 F  X  L; M6 P} ) J& u2 c$ r5 R# \3 Z
} % B8 m. n3 j' L% |
printf("%d",n);}
" C1 x/ d/ _3 @. P2 q9 Z  ~

4 K$ A4 r1 Y. y
回复

使用道具 举报

发表于 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 | 显示全部楼层
好东西8 F$ U/ L/ x( o6 X, m. r7 n5 O6 n
回复

使用道具 举报

发表于 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, 2024-4-19 21:13 , Processed in 0.053825 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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