机械必威体育网址

标题: C语言经典算法100例 [打印本页]

作者: tainqing    时间: 2017-9-22 09:34
标题: C语言经典算法100例
【程序1. `" ^" f( @: V  D8 C1 z' s5 |1 O
题目:有1234个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
0 d+ _0 C' h, L+ `+ S1.程序分析:可填在百位、十位、个位的数字都是1234。组成所有的排列后再去
* o3 P% }% r- c4 m掉不满足条件的排列。
& w$ k; f  s2 ^8 H$ a/ R# H2.程序源代码:
; X$ u2 F) b( y* I3 Hmain() {
6 g) F5 E1 k) g+ O  Uint i,j,k; 3 G# P% Q5 d3 H9 l4 r# q
printf("\n");
6 h8 _  B7 p2 G9 D) p/ ?8 B9 b' Jfor(i=1;i<5;i++) *以下为三重循环*/ 3 l% d% l4 {. F, a3 `
for(j=1;j<5;j++)
5 u. z1 t& S5 J- M) ~for (k=1;k<5;k++) { ! F8 l" o- S# y# m  r
if (i!=k&&i!=j&&j!=k) /*确保ijk三位互不相同*/ 5 k! Z; e. x; i7 B$ e( a7 \
printf("%d,%d,%d\n",i,j,k); }}
% {: f1 M7 F2 L" |+ X==============================================================
" L* }# e4 J* X( w: a. E/ W【程序2
$ D+ R6 \2 Q- a! F题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
8 G0 N* t6 q) }3 t. k  @$ R" N10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 " u% _6 c$ K1 _, F& m* ~# B# p$ Q
7.5%20万到40万之间时,高于20万元的部分,可提成5%40万到60万之间时高于
+ Q7 F. y0 l9 i4 l9 R0 e4 n2 Z( Q40万元的部分,可提成3%60万到100万之间时,高于60万元的部分,可提成1.5%,高于
. k% R5 X% q- [100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 4 m8 w! A6 r+ \; o6 i( \
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
* J! Q: N" ?2 t: f0 [2.程序源代码:   {$ @! ?9 W2 I$ F9 l! F
main() {
; s  o6 R+ ^$ V& clong int i; . u. k) |, f" r! L% l
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; / T' u; A6 ?1 l1 c2 n: x
scanf("%ld",&i);
% @( Y7 c3 E4 N. @bonus1=100000*0.1;bonus2=bonus1+100000*0.75; 6 [, B1 |1 \7 }: s
bonus4=bonus2+200000*0.5; . l6 t# N1 z& d8 h
bonus6=bonus4+200000*0.3;
1 o  w' v. J6 a1 l" l/ s1 hbonus10=bonus6+400000*0.15; * m$ y. b4 r+ i  }, K9 D) ]
if(i<=100000) 0 `4 u# u6 J/ a* O- c
bonus=i*0.1; ; }5 {  V3 N. A
else if(i<=200000) 1 w  n$ p* B, e; q
bonus=bonus1+(i-100000)*0.075;
( C4 ~2 }. x, S' @! Celse if(i<=400000) " g+ h( u% q" L/ |6 o8 R
bonus=bonus2+(i-200000)*0.05;
8 t( n0 c  X& }" W6 Telse if(i<=600000) / L% ~# O6 W8 O
bonus=bonus4+(i-400000)*0.03; 7 Z+ U/ G/ C6 {$ M' U* B) C
else if(i<=1000000) 6 s0 O% k! w; B5 I  A1 N
bonus=bonus6+(i-600000)*0.015; ; C. f/ a7 H  |7 I) E& ~. }: i' S
else
3 M7 q3 P9 {: P  L+ d& abonus=bonus10+(i-1000000)*0.01; + |* X/ @2 h4 O- ]
printf("bonus=%d",bonus); } ( ?$ G9 @! j! q1 I; H
============================================================== ! a$ t, ?/ [2 q. O; t
【程序3$ z" D! ^! P; B3 w3 \
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
; z% f* V" B# `5 q1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
) N* {& b- G% _. `& H% p的结果满足如下条件,即是结果。请看具体分析:
  X/ b( W( `& [2.程序源代码:
7 H" T; \: L" j( {#include "math.h"
8 t* X) E5 I$ K6 J5 n2 [/ C7 Lmain() {
" s% R" d, _' V& g3 Ulong int i,x,y,z;
# `( U' P% q: Q- ]8 \* dfor (i=1;i<100000;i++)
8 [- G; l$ |1 M# B" X  ~{ x=sqrt(i+100); /*x为加上100后开方后的结果*/
  b! w3 E! V7 P0 o( dy=sqrt(i+268); /*y为再加上168后开方后的结果*/ . H& x; L" k+ G6 j; S( ~0 l
if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
) M- q& b( C7 L7 |5 W, H! e( ?) B+ Mprintf("\n%ld\n",i); } }
: e. u& T; n5 V7 N( D==============================================================
# `% u- ^6 d! D& {【程序4$ Z) p5 E, r5 J" D" Q" N% j; Q8 @" d
题目:输入某年某月某日,判断这一天是这一年的第几天? ' b# V4 ?  n, v" F8 a/ e* P
1.程序分析:以35日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
/ |; h: h' G: \1 |. Z情况,闰年且输入月份大于3时需考虑多加一天。 4 l( C1 }2 M% r) [# c/ j
2.程序源代码: ! k& b: Y4 p+ R$ ^% Q1 P" p
main() {
; _7 Y9 p# q% H$ eint day,month,year,sum,leap; / o0 ^+ {: w6 @# q1 J$ C: D$ o3 [- k
printf("\nplease input year,month,day\n"); % w5 Z2 p; l; R$ m
scanf("%d,%d,%d",&year,&month,&day);
. j# q! J6 z2 g- L1 xswitch(month)/*先计算某月以前月份的总天数*/
{ case 1:sum=0;break; 0 D* l, ]7 R+ ^5 I$ @
case 2:sum=31;break;
6 U  u* Q& K/ z$ p+ F/ u+ `case 3:sum=59;break; $ \1 D( S8 o# @" x' k' S
case 4:sum=90;break; : {8 z3 o6 C9 N1 l" i6 m
case 5:sum=120;break; ( N( |  p: I* |( ~# n8 u  Z
case 6:sum=151;break;
# u6 I* j2 ]$ f9 L  N; ]case 7:sum=181;break; 6 B: R) B# X! F( {9 R9 j( Q
case 8:sum=212;break; % N9 A1 b0 Z9 O7 ?+ _
case 9:sum=243;break;
0 M0 W9 W. R& ]( \3 y; v  q- ]3 P& r) acase 10:sum=273;break; 9 w3 K0 ?" e0 G0 ~
case 11:sum=304;break; $ J$ o: ~  A  o  d0 W& P/ j
case 12:sum=334;break;
6 I! O. j# J6 b( o# [' Wdefault:printf("data error");break; } * r' w5 a$ X+ p* Q. c3 K! E
sum=sum+day; /*再加上某天的天数*/ " ~8 L2 S- j  `
if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
/ @7 y1 g- l: Y, B1 `leap=1; 5 C2 Z5 A7 D: k' ~1 y
else   e6 R2 Z6 Z2 \' ?! N7 p
leap=0;
" n0 {7 c2 l4 l& a: Y5 k4 S( {if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
" c6 x1 h$ I* c# i1 p# jsum++; 2 E7 l+ y3 g6 D. Z, \  C
printf("It is the %dth day.",sum);} + V6 T" O* n; }( E
==============================================================
8 k& R8 {( }4 z【程序50 h1 l8 T2 m/ ~
题目:输入三个整数x,y,z,请把这三个数由小到大输出。 6 |; g4 {( ?- E5 c
1.程序分析:我们想办法把最小的数放到x上,先将xy进行比较,如果x>y则将xy的值进行交换,
) ]* V& y) l: ?然后再用xz进行比较,如果x>z则将xz的值进行交换,这样能使x最小。 5 [0 i( E# f2 X4 X1 `+ B' n# i7 _
2.程序源代码: , I$ Q9 q2 c2 G. z% A0 E. M
main() { : o6 X1 p0 n' Y
int x,y,z,t; + x. J! B0 q- A$ h: F2 [1 S5 g" b
scanf("%d%d%d",&x,&y,&z); : {9 y! {5 x! E) g2 i8 \
if (x>y) ; n, L- ~1 w( c% e; [2 l
{t=x;x=y;y=t;} /*交换x,y的值*/
  H* `* F$ }! d3 u. r7 Y! oif(x>z) % z4 {. n  `; i8 i) Z
{t=z;z=x;x=t;}/*交换x,z的值*/
( a$ n0 B1 |) @6 [if(y>z)
' f3 \6 T% _; X. N{t=y;y=z;z=t;}/*交换z,y的值*/ & n- O/ T' |4 Y5 u+ x  b! ?
printf("small to big: %d %d %d\n",x,y,z); } 9 Z# ^+ p# B  O* o  G) _
==============================================================
5 k! B  E! D8 \: a; t【程序62 h7 @8 R( W6 I. b
题目:用*号输出字母C的图案。 . i3 k; k( J% I1 n1 S! E
1.程序分析:可先用'*'号在纸上写出字母C,再分行输出。
1 S, b# B3 \. j/ h' z5 g8 n2.程序源代码:
) Q: z. g! ^+ ^6 D. {#include "stdio.h"
, ]) }9 s8 v  s% Fmain() {
' z4 w, R7 X$ ^& sprintf("Hello C-world!\n");
' j' l, e' m; T9 sprintf(" ****\n"); ; k4 g' {3 G( s* Q3 ~
printf(" *\n"); + K+ M" }, }' N8 n
printf(" * \n");
  ?( _. Y4 y. o  u# B7 _) \printf(" ****\n"); } ' C4 Q( c. G. \: X. ?- |
============================================================== ; K2 \" k% h; f* u- f
【程序7# a+ T( b) v( B: d, a
题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful! 8 y; e% p3 A8 {) S. D9 n  j4 K
1.程序分析:字符共有256个。不同字符,图形不一样。 4 N* c, k% A8 L$ F  U/ S
2.程序源代码:
3 S# m8 z; E) F% H& Y$ {#include "stdio.h"
) z( O0 ^0 c+ R" o7 C& `main() ) e: V& _# u3 @: Q
{
: _5 B) p4 J" y* b9 {( Nchar a=176,b=219; " z3 E/ U; t# s1 ~7 t" ~, l
printf("%c%c%c%c%c\n",b,a,a,a,b); 1 h( P: x% P1 I! a1 g5 H# F
printf("%c%c%c%c%c\n",a,b,a,b,a); ) y) }: u- _' `  N8 d
printf("%c%c%c%c%c\n",a,a,b,a,a); ! C! }! p0 h$ L4 o" Q
printf("%c%c%c%c%c\n",a,b,a,b,a); % p; d' F* B) o, @1 q: S
printf("%c%c%c%c%c\n",b,a,a,a,b);}
* y9 h8 q8 a7 }7 l; }============================================================== 2 o, E" w( c, K" c+ Y- v: |7 w
【程序8! w7 c% e% _. H$ a4 e% W' y* s  y; a4 Y
题目:输出9*9口诀。 7 Z6 s2 A1 o: a! s" p3 S2 V
1.程序分析:分行与列考虑,共99列,i控制行,j控制列。 0 Y4 C8 ]0 h& j& H/ m7 q, l
2.程序源代码:
# l7 Q$ r% C0 I2 p6 k% a#include "stdio.h" 0 l7 Y+ I/ N: A
main()
0 i3 B# Y7 l/ A* Y% w{
, v( [1 C0 `  B* t3 h+ [9 aint i,j,result; # u9 m, g/ t9 L, j- ~/ B& B
printf("\n");
" Z: I: F" ]. ?. q/ e) xfor (i=1;i<10;i++)
6 a( V) x' C8 Q9 o{ for(j=1;j<10;j++) ' y' d, j+ ]) B) }& G* m' K+ T/ f
{
2 u$ V" j4 }  G: X9 y7 u' @! Nresult=i*j; 8 H* t* p. f* \" }% \" W) Q
printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3*/ ! q* {4 l, I3 a. F
}
0 u5 p' j9 g0 w, e7 `" z9 rprintf("\n");/*每一行后换行*/
) \6 C4 J6 U- E: _( E7 z9 T6 X} ; p3 z: z6 k# S! D
}
( I% C- }+ W! I' [/ F% g  b3 Z===============================================
, d  n: U& p) {# [+ h% ]: j5 B. t

作者: jiangsuwanhua    时间: 2017-9-22 10:21
感谢楼主的分享!!!
作者: qq642446015    时间: 2017-9-22 10:22
我竟然发现我有点看得懂
作者: qaz111772015    时间: 2017-9-22 10:42
c语言。。。。看不懂
作者: 蓝色格    时间: 2017-9-22 10:59
说好的一百例怎么只有几个?
作者: gg157551    时间: 2017-9-22 11:32
附件呢???
作者: 星-星    时间: 2017-9-22 12:26
基本都忘了2 k% O' {  Q. b2 W. i* x
软件类的,学了就要用
作者: 我最帅    时间: 2017-9-22 12:54
楼主,求分享剩下的
作者: 林泉之乐    时间: 2017-9-22 15:44
玩玩的东西
作者: 韩寒11    时间: 2017-9-22 23:42
这是和电脑有关的知识,做机械的用不上吧
作者: moldzsdj    时间: 2017-10-10 15:58
看不懂,努力看。。。。。用的上,PLC,单片机,靠这些驱动机构做工,达自动化
作者: wei381690115    时间: 2017-11-23 17:22
好东西




欢迎光临 机械必威体育网址 (//www.szfco.com/) Powered by Discuz! X3.4