机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4097|回复: 11

C语言经典算法100例

[复制链接]
发表于 2017-9-22 09:34:26 | 显示全部楼层 |阅读模式
【程序1: F0 ^8 a2 `& c
题目:有1234个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
2 Q) j# X! F0 o# B# _. k7 V1.程序分析:可填在百位、十位、个位的数字都是1234。组成所有的排列后再去
2 a( F/ W; D& U" r0 q# G掉不满足条件的排列。
, g6 _8 D* m3 Z, Y: q6 U# `2.程序源代码: # V: O' ^- V# h
main() {
& F  [7 m: e  x/ A) O) Oint i,j,k; ) G- R+ r$ n0 s* W! g
printf("\n"); - I9 e; x; z( t; b
for(i=1;i<5;i++) *以下为三重循环*/ . K) J, N* T( M( |" m
for(j=1;j<5;j++) + D! o. D! A2 n4 p! b
for (k=1;k<5;k++) {
" T. d" y# U6 C! o1 Z/ v' O% \  iif (i!=k&&i!=j&&j!=k) /*确保ijk三位互不相同*/ $ ~5 T4 b" s2 s: q/ h
printf("%d,%d,%d\n",i,j,k); }}
6 `' O  n2 p/ I' _==============================================================
, W) i4 Y. m* ~【程序2* J, }3 o' K7 s# J! {% @, g1 |
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 8 M- \: @; {( ~4 P& g) Y+ \0 p
10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
( o8 {8 {( q7 o7.5%20万到40万之间时,高于20万元的部分,可提成5%40万到60万之间时高于
4 [# b3 d3 r* A$ q% D40万元的部分,可提成3%60万到100万之间时,高于60万元的部分,可提成1.5%,高于
/ V- X$ b1 p, ~100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 4 C+ R2 L9 a6 _
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 7 o5 |$ I: b3 D
2.程序源代码: * [- M9 Y5 L1 }0 |0 ~4 U
main() { 4 a) F# C5 g6 W/ m/ }; b5 @1 X
long int i;
3 U. z2 d6 h% L( [; \- T% Q5 Pint bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
' r" y! `' p7 A/ u  mscanf("%ld",&i); + g. E: L! l4 a$ e/ D( j; C% ]
bonus1=100000*0.1;bonus2=bonus1+100000*0.75; & U' _7 t4 F& q0 U  C: c
bonus4=bonus2+200000*0.5;
1 W# ]1 y1 z1 J: |bonus6=bonus4+200000*0.3; 5 a7 F% o$ _4 k: D
bonus10=bonus6+400000*0.15;
% B2 x. l& s% V1 Rif(i<=100000)
9 X) w. D4 }+ x1 C: a' a8 p, O3 E0 q/ Abonus=i*0.1; 6 ^3 ~2 J/ b1 v
else if(i<=200000)
- @# S3 ^$ s+ v' S4 o6 pbonus=bonus1+(i-100000)*0.075;
7 i1 U: `, W( Eelse if(i<=400000) ! r6 X6 g% u, e5 Q  }/ D4 |
bonus=bonus2+(i-200000)*0.05; 0 O7 T$ Z# G7 \, B
else if(i<=600000) ' Z! n8 |9 D: y* S) j: P
bonus=bonus4+(i-400000)*0.03; 3 y0 P  P) q( I/ K) e& t5 K- l
else if(i<=1000000)
. ]# H! q2 F2 }6 G, w8 {* P* _bonus=bonus6+(i-600000)*0.015; ) H: O) W* w2 U: q1 Q* ~; H
else
* [" X7 ~7 i9 B4 l- D4 Qbonus=bonus10+(i-1000000)*0.01;
/ c1 u1 n9 s0 [9 R) Sprintf("bonus=%d",bonus); }
, ^' l) l1 c! ^==============================================================
( g: X: O% |9 O/ t. R8 l, j【程序36 \& b# @4 @: V& |
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
% v, l3 c4 i2 V/ G! m8 ?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
& H: c) m4 E0 ]/ }8 u的结果满足如下条件,即是结果。请看具体分析: 9 d; v: R& |2 h8 ]' |; l
2.程序源代码: , X1 ~' P' ?; v" {
#include "math.h" 0 o' s7 Y! x. N( }; I
main() { 7 e% o4 R) p! `
long int i,x,y,z;
: e: |/ M" a4 |6 d7 ^for (i=1;i<100000;i++) 2 Q0 @9 E2 p& v- F6 j9 n! S: J
{ x=sqrt(i+100); /*x为加上100后开方后的结果*/ + S3 J5 N; u+ C# I8 t: g: `
y=sqrt(i+268); /*y为再加上168后开方后的结果*/
  O' ?# W' v1 c# H' sif(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
. t/ a7 B5 \7 n- K' l  Oprintf("\n%ld\n",i); } } % n: T2 X2 n2 D6 X6 G
============================================================== " ]- {1 X. I* [% V2 ^) N
【程序4. f7 `5 n4 v; ]3 q4 ^8 P
题目:输入某年某月某日,判断这一天是这一年的第几天? 9 i& \5 w" A8 W* p  T2 Q- c
1.程序分析:以35日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊 9 L- U% r: a% x; f$ [
情况,闰年且输入月份大于3时需考虑多加一天。
  \) |  [  p( ^' ]5 i2.程序源代码: : @6 w1 P! m2 M
main() { : a8 B$ n3 I0 T# [. X  o9 m6 b! v6 J
int day,month,year,sum,leap;
- Y  F) ?8 D/ ^( W) Dprintf("\nplease input year,month,day\n");
" Z* g  i$ _7 G3 N- {" sscanf("%d,%d,%d",&year,&month,&day);
& t( c; |+ ?; Y2 oswitch(month)/*先计算某月以前月份的总天数*/
{ case 1:sum=0;break;
# _/ ]7 e7 Z6 L6 U, I- o1 ]case 2:sum=31;break; ) v' y; D. X1 A$ R
case 3:sum=59;break; 3 j( j, M/ V2 e1 p: R5 ~- b6 s  X
case 4:sum=90;break;
0 b5 }0 G) C# k( @& Acase 5:sum=120;break;
9 [: v+ O" t" E3 n0 S' [case 6:sum=151;break;
1 A& z9 D* E" M5 |! y. Xcase 7:sum=181;break;
3 _: r' ^( L  acase 8:sum=212;break;
' n5 R" k5 r. g+ scase 9:sum=243;break;
& X8 U5 T8 N9 v) D1 tcase 10:sum=273;break;
4 {# y5 E9 C2 ^, |1 xcase 11:sum=304;break; - ^, _7 N0 I: ~% J
case 12:sum=334;break;
8 J1 G% ~6 S  _default:printf("data error");break; } . M4 f. Y, ~& W! B9 h0 b- j
sum=sum+day; /*再加上某天的天数*/ " n% x" M2 |- ^) g) d  w
if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/ 8 ]1 f- z3 C2 z9 O7 O
leap=1;
2 Y! R# J" |$ X9 O4 ~else 0 v1 W& |& ?( J8 O4 i- @
leap=0;
9 C# f6 ?  o/ i) ?- X8 mif(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
$ d* x& R3 A) N+ h. I* Ssum++;
$ z# g4 C& O. a. q2 w% c) g/ i3 Xprintf("It is the %dth day.",sum);} * h2 C# B# ~8 r
==============================================================
' s( c/ S  s' ]4 c( K" Z! T【程序5
( o9 ]# {2 h6 }5 |9 g) q题目:输入三个整数x,y,z,请把这三个数由小到大输出。
8 D9 ]. ]  e* [; }" m1.程序分析:我们想办法把最小的数放到x上,先将xy进行比较,如果x>y则将xy的值进行交换, 1 E: c9 T' ]; ~: b) E
然后再用xz进行比较,如果x>z则将xz的值进行交换,这样能使x最小。
) j) B# A, B- E8 g) c; G2.程序源代码: 0 g% R7 k9 }- T# ?
main() { # j* v8 S6 i4 p1 L0 k5 v2 `* C' O
int x,y,z,t;
3 w% i) j0 ?& {1 P+ Z8 Z0 X4 Gscanf("%d%d%d",&x,&y,&z); ) C& E! B) y8 w. n6 [; M+ g
if (x>y) + Q7 l9 I6 L4 ^( ?) u' @
{t=x;x=y;y=t;} /*交换x,y的值*/ 7 Q' w8 [  p7 \
if(x>z)
! @$ {6 ]! N# u# k+ p% D{t=z;z=x;x=t;}/*交换x,z的值*/
" X5 \) G6 B  _if(y>z)
: b3 U0 u# J" p, m. Y{t=y;y=z;z=t;}/*交换z,y的值*/ + w+ ?, l: x- y  c, S% q
printf("small to big: %d %d %d\n",x,y,z); } # z8 M9 y4 J- z* ]; T( _
==============================================================
8 Y- W) [' q( L【程序6
* c4 ]5 W. \3 q  @- N; z题目:用*号输出字母C的图案。 9 e) r6 b% l4 C4 C3 v
1.程序分析:可先用'*'号在纸上写出字母C,再分行输出。 * K( T/ A3 M1 {! q5 J# P+ G# m
2.程序源代码:
) p  r5 C/ e9 ]#include "stdio.h"   f: L' I- U! Q3 o
main() {
) W$ H; ^( N  V6 h: Z* _printf("Hello C-world!\n");
, u/ _3 h- z' L# W9 T) h% K) ^printf(" ****\n");
. W' |' N$ r% c- b" T& B' G7 y+ Yprintf(" *\n"); ( m5 P/ [9 X+ A; e5 Z2 Q' g
printf(" * \n");
+ X! |( y2 _+ g+ X$ O: b7 f# lprintf(" ****\n"); }
+ a/ ?, H7 o; T% E# H! K* @: J==============================================================
& P: c2 P+ Z$ E7 R* F" e% q' h【程序7
, ]3 L9 x* X& b! t& U+ I题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
' u, b7 V6 r4 \' d. |1.程序分析:字符共有256个。不同字符,图形不一样。
, O, T' [) R' H2 q/ ?8 q9 S2.程序源代码:
: c% [& C& ]" U! Z9 Q3 w#include "stdio.h" 9 q( \  C* t! u. S
main()
/ Z' J: H, q2 o2 f, b{
/ w( V# H1 m7 ^* j# ~char a=176,b=219; . _, j/ t& @+ |
printf("%c%c%c%c%c\n",b,a,a,a,b); 1 Q( y/ v- V5 C  L
printf("%c%c%c%c%c\n",a,b,a,b,a); 7 \, D+ W. p, D" ?
printf("%c%c%c%c%c\n",a,a,b,a,a); 5 o; y5 I1 q7 U+ H, }8 Y5 \8 b& L
printf("%c%c%c%c%c\n",a,b,a,b,a); # |+ B3 P. }( W8 E& O) c
printf("%c%c%c%c%c\n",b,a,a,a,b);}
/ r. O' _3 y, }& g4 ^, v+ D$ G* ?" {============================================================== 1 w0 q7 _; L/ k
【程序8- ?" T* C- _7 Z
题目:输出9*9口诀。
1 Z! P8 y& ]) s1.程序分析:分行与列考虑,共99列,i控制行,j控制列。
6 H; G4 f% J. _) h: S/ ~! B& K2.程序源代码:
/ {, c' ^1 x  {& c- ^. S+ e#include "stdio.h"
( g9 f  `( x0 ~main() 5 |% g  F( P  m, v9 T: J7 v! U
{
' Z: h( b7 b9 ~' Q9 R6 w7 Q: Qint i,j,result;
: I) F+ n: L( qprintf("\n"); * Y' ]! E$ n& y
for (i=1;i<10;i++)
. ?! s( K0 _& o: K, l* n1 p{ for(j=1;j<10;j++)
8 i8 M) S# }! ^1 m; Z. p{
% \# r) X8 f) v7 K  c8 _- Wresult=i*j;
5 M2 M* S! r4 Pprintf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3*/ / k. H7 y% b+ D. n3 F- n
}
. B) E- s. a+ w- g6 c; gprintf("\n");/*每一行后换行*/ 3 [- {+ O5 n5 J- N
} % B; K3 Q) B' e! H0 B! Y( T
}
' w1 Z) Y/ [/ m; ~/ E' c, U1 O===============================================
3 A( t7 S) O0 q+ R8 p& w$ N0 ?1 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 | 显示全部楼层
基本都忘了: j# }+ a7 S  Y( v* G4 X; t
软件类的,学了就要用
回复 支持 反对

使用道具 举报

发表于 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, 2024-11-16 16:44 , Processed in 0.056154 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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