找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4931|回复: 11

C语言经典算法100例

[复制链接]
发表于 2017-9-22 09:34:26 | 显示全部楼层 |阅读模式
【程序1
+ M8 R) @  z+ S: C! e* i3 _. ]6 o题目:有1234个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? ! ^. A* t, D9 Y8 o: u" e
1.程序分析:可填在百位、十位、个位的数字都是1234。组成所有的排列后再去 ) V- r/ U1 S  V) j& G
掉不满足条件的排列。 * c, C8 i* G& x" H" y2 u
2.程序源代码: / k4 b3 c4 V! N- x; L% x8 z
main() { - X1 @7 k  s2 _' N
int i,j,k; / E7 m) y, w. M$ O
printf("\n");
. `5 n- T; i1 \. M# `4 q9 A: dfor(i=1;i<5;i++) *以下为三重循环*/ " X/ l. x4 A* v3 k/ |5 h
for(j=1;j<5;j++)
$ `$ m8 l) [( \for (k=1;k<5;k++) {   I" R1 e7 R: |. O# j7 f
if (i!=k&&i!=j&&j!=k) /*确保ijk三位互不相同*/
$ G6 M* L7 c7 J1 c& d7 iprintf("%d,%d,%d\n",i,j,k); }}
2 D3 |* t- T" T==============================================================
1 M+ Q5 h8 T, I; l! N& u【程序2# }! h7 v0 p3 A  D5 g7 g
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
- r$ v, _7 U  S' o10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
1 X& l! t4 l; i+ Y7 h+ Y, O7.5%20万到40万之间时,高于20万元的部分,可提成5%40万到60万之间时高于 9 m! R* e% ]8 Y9 d4 j. l
40万元的部分,可提成3%60万到100万之间时,高于60万元的部分,可提成1.5%,高于
* x& F- s8 C9 q  s/ Y100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
8 w' P7 g* L4 N" S" ~7 [5 \) p1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
# }+ Z5 e' ~: D& u% F! E3 n2.程序源代码: # ]2 p6 R' M. Y- A" {# U
main() { ' H: O) W. A6 x# P9 N3 t3 R
long int i; 0 I& o% r  \$ `- n- n! W  H8 K
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; - z0 L" m* A8 e
scanf("%ld",&i); # m" w$ \; M/ x( ]5 ?: V
bonus1=100000*0.1;bonus2=bonus1+100000*0.75;
  d# h' W: O  a- Q- h$ cbonus4=bonus2+200000*0.5; % ?+ i+ N% Z% p, n
bonus6=bonus4+200000*0.3; & |- \) O* R( J  o
bonus10=bonus6+400000*0.15;
3 [9 Y5 J' O) a( f& |8 P+ O1 T/ Cif(i<=100000) 1 C% j. i% }" }5 x
bonus=i*0.1;
6 v  L5 M0 O% t- \! H- R& eelse if(i<=200000)
/ U( \; h5 Q( k/ Q( B6 Ubonus=bonus1+(i-100000)*0.075; & W" A& `- d) a8 i# h! o% Z
else if(i<=400000)
8 w) j5 w  [2 J, K; o) ~2 s5 D7 {bonus=bonus2+(i-200000)*0.05; 4 a* a6 L; f/ X
else if(i<=600000)
1 `0 u5 T% x7 Q9 r) _9 N: Zbonus=bonus4+(i-400000)*0.03;
" g( D& d/ Z$ `" gelse if(i<=1000000) . \- k( M+ I% i! Z* u, P
bonus=bonus6+(i-600000)*0.015;
! D1 ?$ Q6 r' ]: `5 R- Z/ uelse
* h( [# {6 \+ D6 ?9 N# F" dbonus=bonus10+(i-1000000)*0.01;
1 y& E# ?+ f  Y  `# ^printf("bonus=%d",bonus); }
8 ]- y6 k1 B' y==============================================================
* u. {. @- E9 Q0 ~+ T【程序3+ h8 E9 Q2 Y' t8 `# X4 [
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 7 m# r9 s: f! w+ |9 T
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后 ) s: X; R7 x) n. U/ Q
的结果满足如下条件,即是结果。请看具体分析: ' H5 l7 T/ J' }' O
2.程序源代码: 2 D/ Y- t4 G- X
#include "math.h" 3 C  p2 O( T, i. ~* M
main() { . _5 f/ V! W& E: t% s$ J
long int i,x,y,z;
, X8 _+ w" L' o/ ^for (i=1;i<100000;i++) ) p! e3 B0 ^  k4 V+ o
{ x=sqrt(i+100); /*x为加上100后开方后的结果*/ 0 \# K& ]4 x# W
y=sqrt(i+268); /*y为再加上168后开方后的结果*/ # N& L& B3 b9 P2 {
if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/ 6 H$ s$ q0 V; l' n
printf("\n%ld\n",i); } } 8 \. V( @0 G/ V, i; y
==============================================================
% @+ A& |: y* R8 \1 j* r% u* R【程序42 \2 j' B0 C2 U: v
题目:输入某年某月某日,判断这一天是这一年的第几天?
$ M0 I2 B; B9 A9 l9 [8 C* P8 p, E/ e6 v1.程序分析:以35日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
' a. y) z# l4 }8 ^3 q* k) S% E情况,闰年且输入月份大于3时需考虑多加一天。 : ], `. f( L9 \# h' Q7 ~
2.程序源代码: ; ]+ c) z; {, V/ F+ L8 ^7 c
main() {
8 F- O# y0 ?; X. Nint day,month,year,sum,leap;
# Q9 g8 S! }/ h! P$ ?9 C& \2 m1 j9 @printf("\nplease input year,month,day\n");
4 W7 @* n4 Y% t( zscanf("%d,%d,%d",&year,&month,&day); , r5 ?( K8 |, @9 D% W8 D
switch(month)/*先计算某月以前月份的总天数*/
{ case 1:sum=0;break; 9 i8 Z: {" H: v" J3 M8 s0 e
case 2:sum=31;break; 9 s5 M; n  ?( B0 g( P+ w8 g
case 3:sum=59;break; 7 S7 |$ O7 v8 y9 U+ c
case 4:sum=90;break;
( ^0 @+ O$ \7 }case 5:sum=120;break;
* Y6 g9 y2 F! |. Qcase 6:sum=151;break; & u# G4 ?8 k& h! p6 c: {; R
case 7:sum=181;break; : i2 \' A: k  Y9 ?6 ?0 }  L$ p
case 8:sum=212;break; ! q6 r+ e+ o5 F/ ~" d
case 9:sum=243;break; : Y- X) Y8 K' [& _" y
case 10:sum=273;break;
7 l/ `- s8 B9 u$ gcase 11:sum=304;break; # w( y8 W- A/ E
case 12:sum=334;break; & R6 N3 w; y- o! w$ X$ I$ I
default:printf("data error");break; }
% k) K% Q" ]: e/ Y- xsum=sum+day; /*再加上某天的天数*/ * d) ~+ J0 _; P4 k* e
if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
  {# X4 h$ A3 z, I% f2 kleap=1;
7 W" P  I7 D: L1 l, K4 {7 V6 f4 i" jelse
& q6 s4 I8 d* mleap=0; & d8 }0 ~% @4 [% a9 A
if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/ ' H& ~  m6 b: @; w# G, u
sum++;
) i* f% s( p, Wprintf("It is the %dth day.",sum);}
$ w8 d$ m" O, |; R8 h* ^; `0 K============================================================== & q7 c$ F, X: |$ P
【程序5
- Z9 K8 }! x" N* {+ B题目:输入三个整数x,y,z,请把这三个数由小到大输出。
9 m) f6 @' I' h$ T1.程序分析:我们想办法把最小的数放到x上,先将xy进行比较,如果x>y则将xy的值进行交换,
/ z" F! e9 B, r% X然后再用xz进行比较,如果x>z则将xz的值进行交换,这样能使x最小。
- P* L# E% u, m+ x2.程序源代码:
2 M$ c( [' R; j, Omain() { . X# I' S$ H( d. }% @
int x,y,z,t;
5 n' s  z; L  q* @  x- [* R8 R! Gscanf("%d%d%d",&x,&y,&z);
7 I; |! e4 T6 @, |6 _if (x>y)
7 d' V6 k  y3 Z{t=x;x=y;y=t;} /*交换x,y的值*/
# ~; h9 q8 L- w- d/ ^8 q2 Bif(x>z)
4 n8 F, I$ A, c4 r8 s{t=z;z=x;x=t;}/*交换x,z的值*/
$ I1 W  G  v; h+ \# {1 Xif(y>z) + G" U. ^5 w$ b
{t=y;y=z;z=t;}/*交换z,y的值*/ . x2 g, v+ O0 M1 O2 o0 _# t9 E
printf("small to big: %d %d %d\n",x,y,z); } - S5 r& C; M! i% z, A$ B4 n
============================================================== ; w2 |3 C$ n; k3 K/ k; e
【程序6
% ~/ L+ ~- z& y. [1 \$ C. ]题目:用*号输出字母C的图案。
: o8 `( g2 t. s) D+ N1.程序分析:可先用'*'号在纸上写出字母C,再分行输出。   v" Y0 @. Q! o+ A3 M
2.程序源代码: - C' C+ e4 A# o8 ^% ^
#include "stdio.h"
" w: N: D9 A- s" P9 h/ V" g7 \main() {
, r  N6 _! J0 }printf("Hello C-world!\n");
2 {: r% n! i" P7 sprintf(" ****\n");
+ Q! D: v/ @/ _' a% P' fprintf(" *\n"); 2 {% f: V5 d  G( e# E& g  Z0 c
printf(" * \n");
* U5 _. _6 d2 Nprintf(" ****\n"); }
- ~& z6 \# J; A============================================================== ! D6 Q6 i5 H& u, i1 U% z& f( {9 f
【程序7+ n' a" m1 b0 D* Z( f2 e
题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
1 j/ `3 j# F  U1.程序分析:字符共有256个。不同字符,图形不一样。
5 k$ m. d% ~8 n" @2.程序源代码:
9 I7 y% ~- t, Q#include "stdio.h"
. U1 f; T) y. z6 ?% ]4 w4 U  G  Wmain() & y( d" Q( m2 l& a" e
{
$ U4 _# C* t+ Y- H# y8 H: c5 ?char a=176,b=219; 7 A' ^; y" G( f6 g4 ~8 y4 b4 z/ c
printf("%c%c%c%c%c\n",b,a,a,a,b); ( \( N& w& L/ Q" f- K1 D1 r
printf("%c%c%c%c%c\n",a,b,a,b,a); + I' }0 |  {$ n9 r- p
printf("%c%c%c%c%c\n",a,a,b,a,a); % @3 m1 m7 }( t2 s3 b9 n
printf("%c%c%c%c%c\n",a,b,a,b,a);
$ N' Y" k1 L1 n# {3 \' T( fprintf("%c%c%c%c%c\n",b,a,a,a,b);}
- ]3 U, y3 `. Q& `, G1 r6 F8 G' ~' ~* M) F============================================================== 4 ^4 X  n8 P) w7 {: s
【程序8
, R+ e. u) T# y题目:输出9*9口诀。
1 J- J0 P. \8 t3 Q- f$ _' G( ]9 U1.程序分析:分行与列考虑,共99列,i控制行,j控制列。 ) c: ?2 a! e$ P0 J: `" P. |
2.程序源代码: * l& Z4 Y+ A9 z9 E0 L# ^2 ]3 j
#include "stdio.h"
2 ]) E+ t! S2 v! |, R. ^- dmain() % h8 j3 R8 Q) Z
{   x0 T% O  B& ~+ }5 G
int i,j,result; - I. `6 Q9 d- z5 u2 `
printf("\n");
% ]8 R) d0 K2 I# e+ _# p# xfor (i=1;i<10;i++)
0 C4 B9 v$ G. g# Q" x: i{ for(j=1;j<10;j++) : b6 k$ Q( T; E5 g/ y; U, Q+ E+ ]) e
{
& Q: j  i/ K* C& f! f, Oresult=i*j; 9 H* m0 I2 L  g. N
printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3*/ 8 C# M9 |1 l1 W; h5 v2 k. u
} ' V( r: a5 j/ x# `5 c' }8 L
printf("\n");/*每一行后换行*/   Y' b+ @; R8 X( K9 u* }
} & `5 V* H6 t0 T) I$ C
} 8 @) |' A# `7 }
===============================================

/ W7 k1 J) r* d+ \" e
回复

使用道具 举报

发表于 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 | 显示全部楼层
基本都忘了
* I: E* D" L- j/ i1 G软件类的,学了就要用
发表于 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-13 17:13 , Processed in 0.098716 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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