找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 5085|回复: 11

C语言经典算法100例

  [复制链接]
发表于 2017-9-22 09:34:26 | 显示全部楼层 |阅读模式
【程序1
' Y* z( r% P& e" a2 ^9 J题目:有1234个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
9 l0 L) {  n' K1 t# F- W1.程序分析:可填在百位、十位、个位的数字都是1234。组成所有的排列后再去
+ [0 d6 t) G2 j掉不满足条件的排列。 " |( g. ?1 m$ H) N9 }1 G+ N
2.程序源代码: " M$ j& _# o" V" H7 ~! q
main() {
& B3 q8 |- t1 U0 y1 uint i,j,k; 0 ]/ |# |% K' Z  w! y
printf("\n");
! K; Y, c# C! \" j) B5 S) }for(i=1;i<5;i++) *以下为三重循环*/ # U8 O' B! W7 L( `; k- d0 I% z& x
for(j=1;j<5;j++)
- z. b8 b+ g8 z: o' J2 T" F2 Mfor (k=1;k<5;k++) { + M$ x! q* M$ ^+ ~+ g1 q( O
if (i!=k&&i!=j&&j!=k) /*确保ijk三位互不相同*/ 3 _. r6 l9 W  }. G
printf("%d,%d,%d\n",i,j,k); }} $ k& s6 M5 r9 J7 H
==============================================================
$ x* w& i1 @) G3 |3 }" X【程序2
! P: V% e" L6 g7 G3 {; _  Z题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
4 {7 ~# ^, v1 A6 K10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 0 w% y3 O2 I' e8 T) `
7.5%20万到40万之间时,高于20万元的部分,可提成5%40万到60万之间时高于
/ g" z* _- ~( y+ J; W40万元的部分,可提成3%60万到100万之间时,高于60万元的部分,可提成1.5%,高于 7 Y' H* r, _- s: [, `
100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? " s; a( C# k' H( j* P
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 & g6 @1 F- r6 s4 o
2.程序源代码:
. _7 j8 d0 ?+ W; j9 R/ hmain() { ! P% V$ [$ ~5 [( v$ W
long int i;
- ]: z! f/ k7 \int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
0 m( |5 a0 v  Z" {7 W1 c4 d1 ascanf("%ld",&i); # f5 n7 Q* @; l
bonus1=100000*0.1;bonus2=bonus1+100000*0.75; $ T) z- V# D& X. U8 Y+ x
bonus4=bonus2+200000*0.5; * r5 `7 M1 m1 ^, o9 n
bonus6=bonus4+200000*0.3;
7 N8 c4 G# d' }0 P) j# o  v3 v  i9 `bonus10=bonus6+400000*0.15;
; E- v& H' k% a2 F& A0 e2 Dif(i<=100000)
+ U  Q& s# T; j3 x( Pbonus=i*0.1;
' A: F# m: a8 Y8 p+ e, o" j- i7 @else if(i<=200000)
# ]9 N0 r2 G* |, F4 U) cbonus=bonus1+(i-100000)*0.075;
% t7 q4 K, i6 ]  @  helse if(i<=400000)
( y& J; J# b6 ]0 Ibonus=bonus2+(i-200000)*0.05; : b  y% Y9 @. }5 w6 T% z
else if(i<=600000)
8 u  E# h6 Q1 R* Lbonus=bonus4+(i-400000)*0.03;
  S" l7 w$ |, C% s! N6 S0 Nelse if(i<=1000000)
- K1 X: K$ G7 j! y7 i( i/ a2 n% ^3 `bonus=bonus6+(i-600000)*0.015; % K% z) t! \) j0 L$ r  W% Q
else
. @* p: M* E) D# _7 Abonus=bonus10+(i-1000000)*0.01; ) \! O- Z: T( C0 Q& J; }4 u
printf("bonus=%d",bonus); }
, o: {( m% u) S1 w% w9 ?==============================================================
4 C  x/ M8 M! `3 |* r6 F8 ]. j【程序3$ j+ G( Q5 ^# K; p: w/ [$ j1 A# [
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
; s" e& T& K9 i  ~- ?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
& c2 i0 w" K: O9 J的结果满足如下条件,即是结果。请看具体分析:
% }5 ?/ i7 S3 G. _! Y9 x' Z2.程序源代码:   W& N8 }' M; R# G5 K) B
#include "math.h" ; w+ X- j; ^) T% w2 o& a! h
main() {
& z! L2 x2 I4 F* e- K) K3 P' clong int i,x,y,z; : v2 |* ^' m' g. ^. X- J
for (i=1;i<100000;i++)
1 j2 D. ?$ H. X/ ~+ [7 o' k{ x=sqrt(i+100); /*x为加上100后开方后的结果*/ ) p4 _- @) e4 U  m  s
y=sqrt(i+268); /*y为再加上168后开方后的结果*/
( W9 n; W4 p) Vif(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/ 4 ]9 ]) e+ x% ^; Q
printf("\n%ld\n",i); } }
1 x& d7 `- }8 u" F' w============================================================== ; I3 z7 q: T, E: ?+ J0 P$ W
【程序4
6 n/ l! `/ L$ u9 b题目:输入某年某月某日,判断这一天是这一年的第几天?
& l& O3 @1 f* ?1.程序分析:以35日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊 ; |* ~8 j6 t* T, H3 u( `& a2 C: F
情况,闰年且输入月份大于3时需考虑多加一天。 + ~. e  V- R+ k3 y
2.程序源代码: , g1 ~* Y3 B+ }* m5 T9 i
main() {
# f, ^! N2 T6 o8 A4 zint day,month,year,sum,leap; 8 q( p3 G% p+ g9 m! j$ x
printf("\nplease input year,month,day\n");
+ L$ s9 W) D( vscanf("%d,%d,%d",&year,&month,&day);
( C; k  b; z) z8 L8 _; Gswitch(month)/*先计算某月以前月份的总天数*/
{ case 1:sum=0;break; 2 x8 v( S* e* C2 y8 g+ A. ^
case 2:sum=31;break; & H; t+ Y) a3 r3 T- Y( {$ {0 K
case 3:sum=59;break; . m  i2 E3 [  v  A- _
case 4:sum=90;break; ) q, S& a3 |9 w1 f1 G+ t* G
case 5:sum=120;break;
$ g- T, s/ q/ n% @case 6:sum=151;break; 5 @! t" v; \/ I3 @! l3 I
case 7:sum=181;break; 6 u3 H3 h% ]- d  K7 y5 Z
case 8:sum=212;break;
9 }* {1 A4 M3 q+ L! s3 G$ Y. l( Xcase 9:sum=243;break;
( A. l6 A* ?8 Scase 10:sum=273;break; 8 U, E( Z9 h" [1 B* Z# S$ t
case 11:sum=304;break; , f% K' G' E) S( ~% J$ }4 z  d
case 12:sum=334;break;
2 F4 a" T5 r/ G3 @3 n# y1 Idefault:printf("data error");break; }
8 |5 s# C- E( W' G  Csum=sum+day; /*再加上某天的天数*/ , j" Y! Y3 l5 v4 S# f( R  s
if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
6 f/ W- i+ Y8 t0 }& pleap=1; " ?  h- P% O- W) p  }. t
else
2 b9 k; C) a3 z2 _leap=0; # R$ _7 t- ]0 y' h
if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/ % D' Y& Q: ?2 y" J) x
sum++; # J- w/ N8 O0 V; e  [
printf("It is the %dth day.",sum);}
3 J7 e1 O/ Z3 p$ c+ G============================================================== & h# M: A# A+ o# A* q. e( h8 P
【程序5
& s6 t% l8 J, g. i# V" n* v5 V题目:输入三个整数x,y,z,请把这三个数由小到大输出。
) s0 R' s7 D( V5 f1.程序分析:我们想办法把最小的数放到x上,先将xy进行比较,如果x>y则将xy的值进行交换, 6 C8 O: ^6 I  ?
然后再用xz进行比较,如果x>z则将xz的值进行交换,这样能使x最小。 % |* g7 g( e2 W3 e
2.程序源代码: " \: c" O# f1 F" ^6 i9 _0 N
main() { / m. y( r2 X' b% a, b
int x,y,z,t;
* O4 }& i5 G* iscanf("%d%d%d",&x,&y,&z); 8 c0 A) Z  N$ n2 ~1 f/ W
if (x>y) : n. p4 F  p$ z( J
{t=x;x=y;y=t;} /*交换x,y的值*/ ) w' T' `1 d) o# ^# v8 Z. C
if(x>z)
% a( U: }; S5 h{t=z;z=x;x=t;}/*交换x,z的值*/
$ k0 |" U* |. Wif(y>z)
* C9 U$ Q- {$ ~1 v# V& M{t=y;y=z;z=t;}/*交换z,y的值*/ 6 S: {, v# B7 s' I: ^0 w3 U) y- c8 ]
printf("small to big: %d %d %d\n",x,y,z); } % _3 N8 B& Q6 [; Y
============================================================== % K7 a  l! D4 }1 g. v6 t9 l9 s
【程序6
( q. H+ w" o0 h( Z% r) m, z( J# |: J7 [题目:用*号输出字母C的图案。
) o+ L+ e; h9 g6 {+ ?1.程序分析:可先用'*'号在纸上写出字母C,再分行输出。
& @/ f/ D. C( \/ [4 t2.程序源代码: . G+ \# f3 S& s% w1 e: U/ M  g
#include "stdio.h"
% Z! N5 l8 }7 y. F  J+ kmain() { 4 N1 X- |* ~' U% r
printf("Hello C-world!\n"); : ~2 R9 U) ?6 X7 d3 g3 U
printf(" ****\n");
  m9 f' @* A& n, c- |printf(" *\n"); ) r4 o9 ~" J; U3 D/ ~
printf(" * \n");
8 a0 E/ w' \3 n$ C$ @printf(" ****\n"); } . U% T- R! N, [8 X4 {$ X* Q) q' C
============================================================== . o" ?0 b. V0 R; A6 _; f5 p- H
【程序7$ }) j5 i' z4 x3 Z( P: h
题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
# ?. m) c7 v* T3 X+ `8 E- L! z1.程序分析:字符共有256个。不同字符,图形不一样。 7 |" d: X5 F- o0 G! g
2.程序源代码: 1 n8 U% h1 @1 T0 u5 A
#include "stdio.h" ! x6 p( P. k: c4 W, M) P$ A
main() . c$ f! X$ X& U
{
0 ~2 [1 ~# i4 u6 K6 |( y$ U2 Ychar a=176,b=219; * S1 [8 z" E8 _* r
printf("%c%c%c%c%c\n",b,a,a,a,b);
" d( m+ r* {1 Rprintf("%c%c%c%c%c\n",a,b,a,b,a); : A; K9 T/ i8 V, r4 }1 L1 E
printf("%c%c%c%c%c\n",a,a,b,a,a);
6 u/ i  H. K8 m( j/ F7 Y0 P0 Nprintf("%c%c%c%c%c\n",a,b,a,b,a);
( _3 a" G; Z( Z+ U8 @- m( @' Oprintf("%c%c%c%c%c\n",b,a,a,a,b);}
( W: `1 o7 ]% t, `============================================================== % q# P' L: X1 l8 l& D3 u& D
【程序8- B6 |8 }  _8 X$ v  X
题目:输出9*9口诀。
( o! M% [- ~8 }7 J: ]/ b1.程序分析:分行与列考虑,共99列,i控制行,j控制列。
9 W6 |9 X: H: ?/ Y# P2.程序源代码:
- N" k1 X% z1 ~& v' x#include "stdio.h" ' [7 d+ E0 Y: q8 [" r
main() & E& w. ^6 j) w0 \8 b
{ 3 P& J4 _$ ~( V1 q* x
int i,j,result; # o& w- e0 A9 a, Q3 ~, E/ n9 H
printf("\n"); : ~3 a* K* j4 O, b3 W! h! \: w. z
for (i=1;i<10;i++) 4 F1 k/ R+ _- d/ r0 _! q9 O. x! M  D% O
{ for(j=1;j<10;j++) 1 U7 ?) B4 q6 D% _. L
{
/ ?: ~. e; l6 gresult=i*j; 6 i) o. `3 g& P% o
printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3*/
; z6 C7 u0 O  j0 o: Q! m( X  K}
7 z3 I6 [# F. pprintf("\n");/*每一行后换行*/
8 `- q, ]1 J) \/ t6 o} & w. }# n5 d6 O4 y! M
} : [& C5 L2 A; X/ S, ~/ t: W
===============================================
- n# E0 ?# S6 \1 j
回复

使用道具 举报

发表于 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 | 显示全部楼层
基本都忘了# A7 \& R; X; n' W) c, O8 p! 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, 2025-9-19 12:24 , Processed in 0.063059 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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