找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4928|回复: 11

C语言经典算法100例

[复制链接]
发表于 2017-9-22 09:34:26 | 显示全部楼层 |阅读模式
【程序1/ ]; |" ^# u4 x8 _
题目:有1234个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? $ {+ C  v1 o" V/ S2 B  L. q4 k- T
1.程序分析:可填在百位、十位、个位的数字都是1234。组成所有的排列后再去
2 j+ }6 c2 Y, B4 S掉不满足条件的排列。
6 [+ L- n) y( E3 f" d2.程序源代码:
9 \1 R+ @' h; Z# f& I# _main() {
6 R/ T7 q& M6 G6 w( b1 iint i,j,k;
4 n/ C. m  ^% Z% {6 g% v8 qprintf("\n"); 0 G% A" w+ |, U" a/ \+ P
for(i=1;i<5;i++) *以下为三重循环*/
) w) e/ h- p) d9 O1 K4 b8 `2 Ofor(j=1;j<5;j++) 3 m9 @2 V* ]5 r+ \
for (k=1;k<5;k++) {
" z/ t6 l0 O& h& t; P+ |) r1 n% iif (i!=k&&i!=j&&j!=k) /*确保ijk三位互不相同*/
3 R5 U7 u( ?& C3 u. n/ Yprintf("%d,%d,%d\n",i,j,k); }} ) U1 d! L' o; q4 J
==============================================================
3 y+ k- b7 c/ M6 h$ p& @! |【程序2
' u: d1 p& Q) {: d- g' t* U题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
0 x4 ^. t' }  h10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
+ h. V  U5 j% b2 X& Q4 J7.5%20万到40万之间时,高于20万元的部分,可提成5%40万到60万之间时高于 ; r1 \1 D7 P6 S( p, M
40万元的部分,可提成3%60万到100万之间时,高于60万元的部分,可提成1.5%,高于 ; S" o, U. @; L
100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? + \! u- y! r+ D0 m
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 ; a. |% x- Y, H0 _7 v0 @; X6 l. b
2.程序源代码: , f& |- q, _% H& `$ l+ k
main() { 2 g1 a! z6 |. Z5 |/ X6 s* u
long int i;
- ?, B; u/ R. b: I+ Z4 k6 k  [int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; 3 [  |, f. @$ U9 |* J1 ^$ Y
scanf("%ld",&i); 6 m& w2 J- r) t' t, {3 K
bonus1=100000*0.1;bonus2=bonus1+100000*0.75; ( n7 l2 d1 Q" F2 B) G! Q0 y  Y
bonus4=bonus2+200000*0.5;
6 |2 u* w0 o& l9 K0 o1 xbonus6=bonus4+200000*0.3; " V; A7 F/ f! W, w7 K  X
bonus10=bonus6+400000*0.15; & l  P9 y1 j) _5 e* ?# E8 @0 c5 l" Y
if(i<=100000)
) H! e+ l5 D& K( vbonus=i*0.1; $ H- E* R5 U5 w5 s5 V" R
else if(i<=200000)
9 Q( Q9 J' ?7 i* Z+ Abonus=bonus1+(i-100000)*0.075; / B& m6 `+ k4 B) v+ ~
else if(i<=400000) " Y+ V; ]. Z$ b" ~% Y
bonus=bonus2+(i-200000)*0.05; $ |+ X% d. t# A" _
else if(i<=600000) 4 s! V0 v: d9 c+ y; u+ O* a+ Y
bonus=bonus4+(i-400000)*0.03;
& Q5 L$ S+ T% S- Z, e9 celse if(i<=1000000)
8 k) O& S$ q* ~& A! j( D$ Abonus=bonus6+(i-600000)*0.015; ( K+ P+ q4 o  Y/ I$ U2 ~" y6 z
else ! ?! b# S1 [- a/ z1 x7 h9 F; H
bonus=bonus10+(i-1000000)*0.01; & h8 L( u' D7 R
printf("bonus=%d",bonus); }
+ v, k+ q) r: b" {  N==============================================================
  a/ E$ S  b& F" u9 s【程序3% O! k9 b  t: b" e3 W7 C5 D2 ?+ z
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
! n2 w# k, m9 m% u/ z1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
! A, f9 e2 X% Q4 X1 k的结果满足如下条件,即是结果。请看具体分析: 8 ?8 R* e, h/ v8 r
2.程序源代码:   [, f3 G, e* d+ i+ c
#include "math.h"
2 {& z4 P; {4 U! \4 }5 kmain() { , e& w8 b* V+ }# I0 T. z
long int i,x,y,z;   X2 m& w+ r5 w' P! S# ?
for (i=1;i<100000;i++)
: Z! G5 j- g1 }0 D; m- d! r{ x=sqrt(i+100); /*x为加上100后开方后的结果*/ ; w3 `* k; \! B: Q6 N
y=sqrt(i+268); /*y为再加上168后开方后的结果*/ , j0 B0 w' {0 B. \
if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
$ w' ^6 Y" w9 X7 j4 pprintf("\n%ld\n",i); } }
" E5 a% e, E! ?* G0 y, g. N& R==============================================================
+ b$ W7 K/ J' T【程序45 T: c1 \9 v4 H) a3 P. O- ^
题目:输入某年某月某日,判断这一天是这一年的第几天? ; y7 q/ \" r+ A5 ?+ i
1.程序分析:以35日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊 5 `( D) U, O0 u) R' e
情况,闰年且输入月份大于3时需考虑多加一天。
8 b* w7 M- [2 S7 Y# e' Q2.程序源代码:
" c5 ?  @3 g: ^" P/ }/ Zmain() {
9 `0 l" x+ k8 [int day,month,year,sum,leap; " G: A& M/ T7 @+ ?' E: A
printf("\nplease input year,month,day\n"); 1 g2 g/ b4 c7 D! }' M
scanf("%d,%d,%d",&year,&month,&day);
9 }* g/ N  }; e, N4 Qswitch(month)/*先计算某月以前月份的总天数*/
{ case 1:sum=0;break; : L0 N6 z8 G* F+ q. ]/ g$ K; U
case 2:sum=31;break;
) _  c6 ]  Q: c- ?$ Vcase 3:sum=59;break; * L$ F, W- d1 V; `  C- v
case 4:sum=90;break; : r  y' D! l+ x3 _  Z& a1 c
case 5:sum=120;break; ! p  q+ g3 ]7 H" L. B5 f" ]
case 6:sum=151;break; , I4 c1 P+ f$ \& I8 R9 i
case 7:sum=181;break; 7 O0 j7 X) I: J: @* m0 T8 @
case 8:sum=212;break;
: M! \' a9 g) M) Y% W4 ucase 9:sum=243;break;
  n: y6 T( j: g. W" bcase 10:sum=273;break; : m4 G. o# N+ s+ O, x+ L
case 11:sum=304;break; 2 t# t0 O% j$ p3 y) s8 Y
case 12:sum=334;break;
2 D- x. b; Q) x5 Ydefault:printf("data error");break; }
$ ?* t' t+ l$ _" I3 c( n0 `sum=sum+day; /*再加上某天的天数*/
3 }0 T- p, |1 Z1 s3 |6 o, y) dif(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/ ! t: B/ A/ T3 {& {, K" E6 Y5 l
leap=1; 9 W4 B$ |" t& k4 l6 B! P
else 5 f& `5 E3 Q. I! v2 H1 j* n1 h( o
leap=0;
3 c5 `. s/ O; J0 y  Hif(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
  H$ G. Q* A% s5 y1 ~sum++;
& D# M$ u% O$ G9 i- p6 i# l5 ]6 {$ Qprintf("It is the %dth day.",sum);}
3 N% k! X3 R) x5 s' ^  P==============================================================
, S* S; S7 L5 M4 [  E% T% J0 f: n$ P【程序5  o+ i2 S  [& i  G! Z
题目:输入三个整数x,y,z,请把这三个数由小到大输出。
4 u! z+ t( \, k/ j' i1.程序分析:我们想办法把最小的数放到x上,先将xy进行比较,如果x>y则将xy的值进行交换, 2 a3 L% i: ^- `. D' u. s
然后再用xz进行比较,如果x>z则将xz的值进行交换,这样能使x最小。 $ B: ~1 d' V& j' |& j9 X  |7 s6 w% j) Q
2.程序源代码:
7 s$ L4 @/ ~. j+ d3 Umain() { 5 C, W3 K1 A. g+ A. h$ H! L
int x,y,z,t; 4 n  l# y8 g6 U8 N  `3 m
scanf("%d%d%d",&x,&y,&z);
/ ~4 z& q3 x% I6 }" m9 J3 Q- iif (x>y) 2 [, k0 o7 _' W: ~! b4 p1 M
{t=x;x=y;y=t;} /*交换x,y的值*/ + ^( h9 Z$ S* a* p! O. k$ E
if(x>z) $ A, M( `2 V: W8 D- X6 R
{t=z;z=x;x=t;}/*交换x,z的值*/ 0 d! o( J- y3 @/ K) T
if(y>z)
4 b! F  v! h; a2 m{t=y;y=z;z=t;}/*交换z,y的值*/
3 h! V  b! H! X" {3 o) p* O) cprintf("small to big: %d %d %d\n",x,y,z); }
  P2 ^! l4 u: B3 [; q: A  h+ ~============================================================== / V' {' C. o* x  d: W6 v
【程序6
6 W: N9 N7 @, Q7 x: `题目:用*号输出字母C的图案。
; ?9 J) S' E7 r* Z2 c1.程序分析:可先用'*'号在纸上写出字母C,再分行输出。
: o8 X/ M6 _+ p* p) f) `2.程序源代码:
' {% G) ]9 {  x) L6 u#include "stdio.h"
% r3 H' N! T7 H6 f( j5 Smain() { 9 p% u5 m2 L, J4 q8 C# p3 r+ t! O
printf("Hello C-world!\n");
3 E4 Z5 K/ l# z, u1 oprintf(" ****\n"); - P2 s- h, a( u  _- h" R( ?! M
printf(" *\n");
& f# L) i7 Q% r+ z6 G4 Yprintf(" * \n");
2 y( O" d6 w9 h) I, Pprintf(" ****\n"); }
* g, w2 w, {) c+ ~! c============================================================== 5 V# C3 Z! g5 _+ c/ K+ D% I
【程序7
. m6 c) f0 h& ], w0 z题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful! 5 z; J* h1 L2 l
1.程序分析:字符共有256个。不同字符,图形不一样。
8 s" T% Y5 _2 \2.程序源代码:
7 X4 \: H6 O0 \#include "stdio.h"
! Q, m  k  x9 O0 nmain() ) `# N* q& \& D# J' q
{
: _: ^. X0 R0 ~0 Kchar a=176,b=219;
2 a4 f8 r; N9 Q3 `1 [' zprintf("%c%c%c%c%c\n",b,a,a,a,b); 8 R' l  G7 a) p8 u" K, R5 t; g2 T
printf("%c%c%c%c%c\n",a,b,a,b,a); 1 c$ R9 b9 ], A$ `( c
printf("%c%c%c%c%c\n",a,a,b,a,a); . I8 s- N, n$ |: {# I
printf("%c%c%c%c%c\n",a,b,a,b,a);   c3 k8 a# M' J* t* e  r: G" x
printf("%c%c%c%c%c\n",b,a,a,a,b);}   @) C" r0 y" {" b- l  i+ V
==============================================================
" X. ~" E4 y0 k: l【程序8$ b5 |% _: ]- c7 P  Y% M1 v
题目:输出9*9口诀。
+ G3 x3 [1 R& P9 D" [/ _1.程序分析:分行与列考虑,共99列,i控制行,j控制列。
7 A, _$ h4 R' R0 x* m6 O2.程序源代码: 3 Q, X, }0 a2 s8 j2 B6 d+ t
#include "stdio.h" * f# c: A( ^* R, @$ o) S% N3 b0 F+ ?
main()
* a; K0 `) D# q9 g/ T# X{ % c1 X! g$ ?; J+ R' k8 t; v
int i,j,result; $ [- Q1 D- U5 S) m/ B* S( F6 u
printf("\n");
' E0 m* {1 c+ ^; o) w% x5 g* }for (i=1;i<10;i++) . y/ Q( J9 r! d* @$ q2 Z) h. B
{ for(j=1;j<10;j++)
& O5 ]+ J, {/ b3 Z7 w$ q4 N{ " S) }; O$ V6 G( i
result=i*j; 7 f) {$ U1 S$ F1 i
printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3*/ " I% _; c& b) C% {; d
}
+ ^6 a4 Q2 o1 ~- ?( J+ \printf("\n");/*每一行后换行*/ " O" j' g+ }% n* s4 r% p
} 6 C' I4 n6 x+ h5 i) O/ Z
}
3 E5 L$ H0 f. o! @" P2 i===============================================
" ?# \% }1 h7 r! M/ p
回复

使用道具 举报

发表于 2017-9-22 10:21:51 | 显示全部楼层
感谢楼主的分享!!!
发表于 2017-9-22 10:22:12 | 显示全部楼层
我竟然发现我有点看得懂
发表于 2017-9-22 10:42:30 | 显示全部楼层
c语言。。。。看不懂
发表于 2017-9-22 10:59:43 | 显示全部楼层
说好的一百例怎么只有几个?
发表于 2017-9-22 11:32:18 | 显示全部楼层
附件呢???
回复

使用道具 举报

发表于 2017-9-22 12:26:17 | 显示全部楼层
基本都忘了6 L1 x1 A7 P" }! N; \
软件类的,学了就要用
发表于 2017-9-22 12:54:50 | 显示全部楼层
楼主,求分享剩下的
发表于 2017-9-22 15:44:21 | 显示全部楼层
玩玩的东西
发表于 2017-9-22 23:42:20 | 显示全部楼层
这是和电脑有关的知识,做机械的用不上吧
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-7-12 22:51 , Processed in 0.068015 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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