找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 5067|回复: 11

C语言经典算法100例

  [复制链接]
发表于 2017-9-22 09:34:26 | 显示全部楼层 |阅读模式
【程序1
5 m; ?! M, ]1 [9 @. a/ q# g题目:有1234个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? - S' C- S# K! A1 ~4 r& N
1.程序分析:可填在百位、十位、个位的数字都是1234。组成所有的排列后再去 ! z# _: Z" S% E( L! w( G
掉不满足条件的排列。 $ B8 V, u7 a. y2 A3 s4 `1 c
2.程序源代码: 2 r( a2 L- x' B& w
main() {
- Y& h1 l6 b5 N& e2 O: J# Eint i,j,k; 2 S6 g6 Q0 h* w% b! A
printf("\n");
3 ^, J# }, L! ^# \' o& `8 hfor(i=1;i<5;i++) *以下为三重循环*/
$ V  b# Z! {9 Z0 ^for(j=1;j<5;j++)
9 w, U1 a/ Q. W, }for (k=1;k<5;k++) { . q2 D0 y3 y5 z0 c9 L1 b7 C6 a
if (i!=k&&i!=j&&j!=k) /*确保ijk三位互不相同*/
: V% x- a9 d3 e0 x, k- Lprintf("%d,%d,%d\n",i,j,k); }}
, t; s" f, G: G4 y3 A; U( O7 K2 x. K==============================================================
, g* N& N* m8 n  A. j【程序2! o5 T. I2 |9 Y7 ^
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
  \/ I. [3 x  e; s0 z10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 : K7 T) I" m! u6 w
7.5%20万到40万之间时,高于20万元的部分,可提成5%40万到60万之间时高于 ( [$ E' [# n& N: b4 {
40万元的部分,可提成3%60万到100万之间时,高于60万元的部分,可提成1.5%,高于
% E  r. I; z: v4 o100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 2 T. w& l8 {# [: P5 T) G
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 * y' A3 m# A9 u$ ?4 u
2.程序源代码:
  l/ P  |, o' \) tmain() {
* e, M7 z% R. o: J8 m, Vlong int i; : q% u/ X1 I( J+ F% M. [8 j. k
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
9 d4 ]9 F; {1 A( K$ u: {) W5 s5 ?: tscanf("%ld",&i);
7 J- k+ M; R$ kbonus1=100000*0.1;bonus2=bonus1+100000*0.75; ' j) ^# S  [- d
bonus4=bonus2+200000*0.5; 1 t6 U6 u. Z5 [
bonus6=bonus4+200000*0.3;
$ X2 K" K4 P3 s% I2 W( s& p( Cbonus10=bonus6+400000*0.15;
0 j8 S, L2 E- _, {5 e9 q0 zif(i<=100000)
9 n2 s8 h$ c  E! @9 r% ybonus=i*0.1;
5 I/ @, q1 S- R' l9 [7 eelse if(i<=200000)
+ S- o* p$ _/ Z  l, tbonus=bonus1+(i-100000)*0.075;
) J7 K6 |  p& L8 _: }* a$ L- p4 Jelse if(i<=400000) 1 f: H  x2 M# B7 ^, J  M! P( i: x
bonus=bonus2+(i-200000)*0.05; 3 t; R$ `1 d$ _' F
else if(i<=600000)
6 D# p' V5 O8 |# Fbonus=bonus4+(i-400000)*0.03;
, j2 l& V! E2 ~: g+ B; {( u& lelse if(i<=1000000)
+ Y& I& _, {8 y* G- D2 ybonus=bonus6+(i-600000)*0.015; 8 v5 w+ ^$ Z' O& u* @
else 7 y! G" ^6 _- a' g" Y. y: ^
bonus=bonus10+(i-1000000)*0.01; $ Y( v7 K2 q+ }' v3 v5 @& W6 x7 K
printf("bonus=%d",bonus); } . d/ k' P8 \+ c* M4 C# D8 S
==============================================================
- {! b9 ^1 z0 V( G4 ]6 v/ x【程序37 B% q7 Y+ m* t. D+ J- |% ]5 _( ~
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? * f( S- `+ y0 y2 ?1 N, B2 G
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后 8 b; n. d4 g" D7 _( H
的结果满足如下条件,即是结果。请看具体分析:
4 U6 K  Z4 b) H, B2.程序源代码: ' f8 V% |- I5 d$ |4 n3 z. E, x
#include "math.h"
/ Y+ R7 p9 m2 G7 e4 d$ v. M& tmain() {
6 K1 ]7 x$ z- ^long int i,x,y,z; 4 b% `( j3 t% W, T
for (i=1;i<100000;i++) ; {3 p( x/ W, r0 u' J$ b! _
{ x=sqrt(i+100); /*x为加上100后开方后的结果*/ + Y3 I  V: H6 t. H/ ~5 N
y=sqrt(i+268); /*y为再加上168后开方后的结果*/
, ]( _2 h1 b2 e9 O- Iif(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
* O' G7 i$ G, D) X3 W" tprintf("\n%ld\n",i); } }
+ `9 @) f; |2 o) P# Z==============================================================
8 t( M. S7 V* o; C+ A【程序4, D* p8 a1 S: Y" |& v  w
题目:输入某年某月某日,判断这一天是这一年的第几天? : ~6 \3 S- @9 ^- t" W1 w( I
1.程序分析:以35日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
  Z' u5 S7 e" Q情况,闰年且输入月份大于3时需考虑多加一天。
  H6 I! y4 ~- m4 N% x2.程序源代码: 2 \' Y* d  w: d0 ]8 m. ~! }
main() { 2 z  ~/ G. n8 g9 M. f5 {0 [4 z& ~
int day,month,year,sum,leap;
" C" Z. E1 q' z, s7 r1 U8 N( a: Gprintf("\nplease input year,month,day\n"); / H, |1 j7 a& v8 s4 x
scanf("%d,%d,%d",&year,&month,&day); ; Q  ~8 j7 H1 N' g8 J8 [+ f
switch(month)/*先计算某月以前月份的总天数*/
{ case 1:sum=0;break; 0 q- r. A) c) }* S; r+ K
case 2:sum=31;break;
4 b' k8 q9 Q6 k9 n% B+ v6 mcase 3:sum=59;break; : S( u# T) k% T- S0 a
case 4:sum=90;break;
7 C7 v7 y- R7 Z+ v% L# p: U* e( qcase 5:sum=120;break; - L. u( S0 J' G5 t! a" Q7 X
case 6:sum=151;break;
5 Q5 a4 H0 Z! r: t1 g) `/ d" Vcase 7:sum=181;break;
& x$ P& V2 ^) z$ fcase 8:sum=212;break;   W, B; F5 U6 L/ b* t. P) Y
case 9:sum=243;break;
0 d( ?2 }- i; |% B8 Q, J  qcase 10:sum=273;break; & w2 b8 q1 {2 [
case 11:sum=304;break; 6 G/ w$ x- d4 P, F8 z7 B6 d; L) v
case 12:sum=334;break; % d, i) x5 R2 J9 o& h
default:printf("data error");break; }
2 R6 A4 R$ g# x! T, Osum=sum+day; /*再加上某天的天数*/
& Y' W2 i6 d) V8 F5 l8 w- c2 m* @if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/ 9 j/ k$ ]1 t* v: s+ [/ f
leap=1; 5 l4 e3 x1 K7 f3 c
else $ o& A# u& D) c6 g0 ]& J0 `
leap=0; - S: E2 o9 U' b
if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
$ v  u0 `! c2 K2 |sum++; . r; `7 n7 k( J* Y/ b0 Q1 q+ l
printf("It is the %dth day.",sum);} 9 S% X% e0 }+ y  Q; X
============================================================== * a- q! F3 S, o0 f
【程序5
1 t( r4 A, x5 T题目:输入三个整数x,y,z,请把这三个数由小到大输出。
" D1 V  _! Q: C! t) d1.程序分析:我们想办法把最小的数放到x上,先将xy进行比较,如果x>y则将xy的值进行交换, + S  f& [: X. Y
然后再用xz进行比较,如果x>z则将xz的值进行交换,这样能使x最小。
5 J7 z. l, s4 _( E2.程序源代码: 1 |# Q) @& m9 ~" n
main() {
  ^  p( X) _/ E; \) zint x,y,z,t; 8 `7 [. i$ P: V" Q% @
scanf("%d%d%d",&x,&y,&z);
6 A" g+ l0 E7 y4 g: T) r  Dif (x>y)
% L$ k2 y% Z/ G: h+ p2 _{t=x;x=y;y=t;} /*交换x,y的值*/
: A$ O( q; Q3 M- l+ K$ v& wif(x>z)
' _9 F6 n1 i" w2 }* R  \{t=z;z=x;x=t;}/*交换x,z的值*/ + Y( T  o# ?  w6 b0 v2 Y# ]# T2 K
if(y>z)
) F0 h# F. h3 e* t- @* T; R0 G{t=y;y=z;z=t;}/*交换z,y的值*/ ) s& R/ ?& h* R2 |
printf("small to big: %d %d %d\n",x,y,z); }
) n$ b# B  Y4 ~& Q============================================================== ) J% S" t. b+ Z7 C( W
【程序69 q& H9 d& F, o0 @* {6 G
题目:用*号输出字母C的图案。
1 W3 T: p) V' X" {, W! O& `1.程序分析:可先用'*'号在纸上写出字母C,再分行输出。 / x2 f% J, f8 _. A- O( E3 i) Q
2.程序源代码: 3 A' e) t% U, t
#include "stdio.h"
3 l6 z- w, T, d3 Q# q7 Zmain() { 2 ~, j. ?/ F; r; \8 c& i" }, H: |5 }
printf("Hello C-world!\n");
, a% V& B1 l# vprintf(" ****\n"); ( n* P6 t5 a5 [) ]% }' G; A
printf(" *\n");
& h9 w; X1 P* P* E" Kprintf(" * \n");
! \3 E, |3 M+ R/ x3 S# S3 p( |3 Uprintf(" ****\n"); }
1 B1 \. L! T% h4 S7 l============================================================== ) ]  B1 i+ n# M" l7 x
【程序72 S% ]9 N: I% X# Z
题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
$ U1 N# z+ f  ^4 n1.程序分析:字符共有256个。不同字符,图形不一样。
: A+ q" f. L5 u8 y$ S6 P  s2.程序源代码:
. ~. h) F2 l% P) x1 @8 t# M- F0 m#include "stdio.h"
% Y, |9 M7 \1 l7 E) kmain()
) a9 E8 K; C6 ?1 ~{ 5 ?# W# f! P, L% U0 O$ x( j4 X
char a=176,b=219; % J0 A2 a/ d2 Q8 ~& s/ |; M: u, O, x
printf("%c%c%c%c%c\n",b,a,a,a,b);
- D- K! a- F  g' x8 O, Rprintf("%c%c%c%c%c\n",a,b,a,b,a);
  z& V5 n7 |" T1 R: f. g) w. }" Bprintf("%c%c%c%c%c\n",a,a,b,a,a);
, f+ R5 P- J# n" D6 yprintf("%c%c%c%c%c\n",a,b,a,b,a); * q+ g( E! R0 \
printf("%c%c%c%c%c\n",b,a,a,a,b);}
, S: H  O1 N" x8 l; H) P============================================================== ; U+ Z4 r9 |# a
【程序8
0 U' p1 o! N" l3 j题目:输出9*9口诀。 / o5 @% Q3 G1 ]6 `
1.程序分析:分行与列考虑,共99列,i控制行,j控制列。 & _7 }( ?" A. z7 S( y9 V* a7 ^
2.程序源代码: 6 \: z( s* p5 e( K, n
#include "stdio.h"
1 `/ @0 B- k- q5 s- vmain()
# [) _4 h# _5 \( l5 Z; d) R{ 9 j& r! ~& k  ?* R  N/ T  d
int i,j,result; ; E% A% o! x8 G' R
printf("\n"); : d) q% s# R; q4 f% D  h
for (i=1;i<10;i++)
, G( ^2 m* l6 y: \- K, p{ for(j=1;j<10;j++) , F2 x$ F; N, B
{
8 [# d2 Q5 k0 d9 t! Xresult=i*j; ) G, c' {- P3 N
printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3*/ ; Z% U& H" ^6 Z4 _7 ^2 G0 T, F
} ; m: O/ K6 F  h8 X! [
printf("\n");/*每一行后换行*/
$ X% d) @1 z. e" Q}
8 d. h4 ]& B1 C" q1 e} 7 r, U; ~# E& F# e4 D* \: P6 F7 W
===============================================
3 K8 Z) O: I' E7 J8 X# |
回复

使用道具 举报

发表于 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 | 显示全部楼层
基本都忘了
+ M% {% |9 e4 K: v6 N( ]- N4 b软件类的,学了就要用
发表于 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-15 01:45 , Processed in 0.069536 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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