機械社區
標題: C語言經典算法100例 [打印本頁]
作者: tainqing 時間: 2017-9-22 09:34
標題: C語言經典算法100例
【程序1】
2 x# ~* e; Y K o% m* [- s8 b& ^題目:有1、2、3、4個數字,能組成多少個互不相同且無重復數字的三位數?都是多少? & k2 g, u8 y$ G+ A5 y5 ?
1.程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列后再去
0 X+ g [# f9 ~& ~9 t! l掉不滿足條件的排列。 6 B ^) v/ q1 k' f: u
2.程序源代碼: % J$ Z- J( W( n- {( B
main() { ) o3 _5 k( i/ r+ Y. }8 m) \
int i,j,k;
! X3 e. N% {" \4 e% m [printf("\n"); ' b& o/ J, G- K
for(i=1;i<5;i++) /*以下為三重循環*/
; k+ B+ i! S5 r( s+ afor(j=1;j<5;j++) l8 ?! p/ x1 l6 a% ^9 q7 \
for (k=1;k<5;k++) { # E" T9 `% V) z- A
if (i!=k&&i!=j&&j!=k) /*確保i、j、k三位互不相同*/
% I4 a0 s, ~8 D6 k$ }7 Vprintf("%d,%d,%d\n",i,j,k); }} 7 D* n& L1 e! A/ i/ R' m8 [
==============================================================
1 s% A- `9 P( a/ i2 M, u) s【程序2】
) w0 s7 |' [# b9 l" C8 c題目:企業發放的獎金根據利潤提成。利潤(I)低于或等于10萬元時,獎金可提10%;利潤高
! x5 w/ l! p1 A, K$ F' G' P8 V于10萬元,低于20萬元時,低于10萬元的部分按10%提成,高于10萬元的部分,可可提 7 v! r7 k4 p$ @+ Y
成7.5%;20萬到40萬之間時,高于20萬元的部分,可提成5%;40萬到60萬之間時高于 * m& |5 x/ T! m' {% N: i% E
40萬元的部分,可提成3%;60萬到100萬之間時,高于60萬元的部分,可提成1.5%,高于 % K6 D/ f" f8 ^# d& n
100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤I,求應發放獎金總數?
0 w4 G4 p. B: K$ }6 j8 h- ]1.程序分析:請利用數軸來分界,定位。注意定義時需把獎金定義成長整型。
- a0 _ L2 `( F: \2 T2.程序源代碼: 8 I/ A ^& [/ v
main() { ' R2 ?1 B3 F, `
long int i; 8 {! Q# q% b7 ?6 U; j
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
' d2 L! E4 F7 S5 o$ Kscanf("%ld",&i);
2 t9 P. w: N5 nbonus1=100000*0.1;bonus2=bonus1+100000*0.75; 1 h, m$ G! v( |+ Y
bonus4=bonus2+200000*0.5; : ^8 @4 T, E' H; k& }! k
bonus6=bonus4+200000*0.3;
( C; k5 w# I( Y$ B3 d' Obonus10=bonus6+400000*0.15;
4 ^1 J1 ? H' R* Z8 {if(i<=100000) ! M. e# Q% g( A" H
bonus=i*0.1; 5 G q+ f1 H3 _1 S f8 ~
else if(i<=200000) 3 T2 ]1 g w& P" w- {& I" n7 a, o
bonus=bonus1+(i-100000)*0.075; $ k0 o# f( Q1 \* U4 P
else if(i<=400000) 7 b4 |, f7 b3 { [5 M+ i: C
bonus=bonus2+(i-200000)*0.05;
' e: d5 T# ?0 ?" \- V% Qelse if(i<=600000) 3 X; U" A- ?$ |2 K. a
bonus=bonus4+(i-400000)*0.03;
, x- T. k+ |- E, uelse if(i<=1000000) 1 Z! Y0 \- R4 u U- p) G
bonus=bonus6+(i-600000)*0.015;
; g; _0 g" u5 t: Pelse
2 h6 E% c& s% k8 G/ E) u# rbonus=bonus10+(i-1000000)*0.01; ! M% t. X; P: R# i' E
printf("bonus=%d",bonus); } , O; D8 J, ^' O# T
==============================================================
7 ^, p* y& G R/ e* v5 v【程序3】
" l& Q" K+ B) d0 w9 g- d. M; W題目:一個整數,它加上100后是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?
) C' W& Q2 u; X) @6 O1.程序分析:在10萬以內判斷,先將該數加上100后再開方,再將該數加上268后再開方,如果開方后 9 z, X6 s* M2 k8 |( K, N3 k" s
的結果滿足如下條件,即是結果。請看具體分析: # S: @ ]* j* S( l% y5 I( d
2.程序源代碼: / W. ~& z8 w5 V. {# [8 V* k
#include "math.h" # ^4 @! v: V: D/ q7 Q
main() { $ q8 F, H8 D& s9 Y( |) n. J
long int i,x,y,z; ' [, ?' v- U9 A2 _) ~2 L
for (i=1;i<100000;i++) l' o. F2 o1 U/ f
{ x=sqrt(i+100); /*x為加上100后開方后的結果*/ % Z8 |8 _% X2 U. l! u! R- B; G* q0 G
y=sqrt(i+268); /*y為再加上168后開方后的結果*/
9 L4 d3 T( j' S. U! {: b1 [if(x*x==i+100&&y*y==i+268)/*如果一個數的平方根的平方等于該數,這說明此數是完全平方數*/
5 h I5 W- `/ E0 K' |$ A. H! i+ yprintf("\n%ld\n",i); } }
' [4 i7 T- F3 b( t==============================================================
* D) t u2 L7 M6 c5 \/ I【程序4】
* l; Q1 g5 Z& P題目:輸入某年某月某日,判斷這一天是這一年的第幾天? & U5 c- @: P( c0 E8 [4 ^2 {9 S
1.程序分析:以3月5日為例,應該先把前兩個月的加起來,然后再加上5天即本年的第幾天,特殊
- a6 O& k0 a0 x" L6 j情況,閏年且輸入月份大于3時需考慮多加一天。 , r& N0 `3 ~5 r! D- b- O
2.程序源代碼:
' j5 f8 L) a1 |, ymain() { 7 J0 _1 i" A3 n$ A" o0 i
int day,month,year,sum,leap;
6 v9 I7 J7 C7 ~* l7 X, R7 D% wprintf("\nplease input year,month,day\n"); 6 B8 o) P0 _! F" y I0 t) @
scanf("%d,%d,%d",&year,&month,&day); 6 m* C2 ?2 ]3 e# r2 i
switch(month)/*先計算某月以前月份的總天數*/
{ case 1:sum=0;break; ' p/ z- l7 b5 I, R. z7 n2 v
case 2:sum=31;break; 3 {: f' c: P! e! o6 Z( H1 ^
case 3:sum=59;break; 5 |3 G, z! ?+ }1 n, m& p
case 4:sum=90;break; ' T( F: x9 D% f8 }( J4 M
case 5:sum=120;break; j1 `+ _# D' [( H) @; f
case 6:sum=151;break;
5 i# D2 N9 t) m: P6 kcase 7:sum=181;break;
% T4 `4 o/ Z6 V4 C1 D4 ?( Y. Lcase 8:sum=212;break; & T6 L% O6 ^5 W' Y8 t1 _
case 9:sum=243;break;
$ P) w7 C% ?3 rcase 10:sum=273;break; i7 s3 `2 { [6 j I
case 11:sum=304;break; ' T) U* G, I) U$ [/ Q9 O+ j1 @
case 12:sum=334;break;
7 t8 f9 w# ?1 @+ P* |. t' q9 ddefault:printf("data error");break; }
2 r- F6 _* v. h5 P8 |sum=sum+day; /*再加上某天的天數*/
4 ]7 l. S( o Q$ S. nif(year%400==0||(year%4==0&&year%100!=0))/*判斷是不是閏年*/
0 n) d7 {( u _5 g4 i* aleap=1;
1 E) B) A6 C$ B5 h6 K7 ?: Oelse " ?- p- e& I; y6 @3 @
leap=0;
3 v* { I) _* J5 h0 tif(leap==1&&month>2)/*如果是閏年且月份大于2,總天數應該加一天*/
" f* G2 W8 [/ h* C5 b vsum++;
. T8 }& e5 P# d. u* o5 zprintf("It is the %dth day.",sum);}
; h, y* h R- Q( @/ \==============================================================
- Z* R) F0 t4 M6 l9 y. R【程序5】
, p1 [) w% @' H. T& y, l題目:輸入三個整數x,y,z,請把這三個數由小到大輸出。 | A: c+ S8 `- q' M/ J0 K
1.程序分析:我們想辦法把最小的數放到x上,先將x與y進行比較,如果x>y則將x與y的值進行交換,
- K$ p Q3 U% x: J, [+ z3 h然后再用x與z進行比較,如果x>z則將x與z的值進行交換,這樣能使x最小。 6 c& j/ O: T `# ^ U
2.程序源代碼: % I! u/ x7 i! h; q( f+ {. z
main() {
! ]) _0 j5 P" F9 i1 kint x,y,z,t; H& {# c' n9 M. o! ]
scanf("%d%d%d",&x,&y,&z);
# B0 R7 d+ j% [7 S# a" s( D4 c# {if (x>y) 9 `- G/ Q1 M o/ A( D, T
{t=x;x=y;y=t;} /*交換x,y的值*/ 0 L- f1 \! r- d" ^
if(x>z)
8 X8 A+ Y& S) ?7 u0 F{t=z;z=x;x=t;}/*交換x,z的值*/ * i. E5 E* E# F5 S( O0 U
if(y>z)
7 X' I9 l) [0 `{t=y;y=z;z=t;}/*交換z,y的值*/
% g3 J- X3 P4 S: H8 f: Hprintf("small to big: %d %d %d\n",x,y,z); } ; m& q' k. p9 Q; o s N) B5 k
============================================================== ( N! w. I) b1 D; ^1 T
【程序6】 4 v& W! f. H" {7 V/ }8 i& L+ y
題目:用*號輸出字母C的圖案。 / b/ k9 m" m* j' i+ ^& Q6 _" W. X
1.程序分析:可先用'*'號在紙上寫出字母C,再分行輸出。
- [! `- K7 e+ A) W/ M2.程序源代碼: 8 P L# c: I6 f
#include "stdio.h"
1 v9 H1 ?: Z. p8 o' pmain() {
" q) @$ V9 c! P7 F0 ]5 P+ ~4 Q# Q! Mprintf("Hello C-world!\n"); ) u% s0 y0 m3 I: J4 ~
printf(" ****\n"); ; K4 _# ^4 j- L+ }9 g
printf(" *\n");
' K. v. I+ Z8 s1 Cprintf(" * \n"); # A9 c7 K; r# B' e* G# [
printf(" ****\n"); } 9 }7 L+ }8 R' d: n2 j, ]7 I
============================================================== & U5 `8 J. P( \: H& o
【程序7】 6 z1 B4 B0 O& w
題目:輸出特殊圖案,請在c環境中運行,看一看,Very Beautiful! * `1 E! l% w/ A, a3 \
1.程序分析:字符共有256個。不同字符,圖形不一樣。
! @) q3 ]. T: R m0 ^4 f2.程序源代碼:
" H2 o$ d' ]* \: h- s) u1 E#include "stdio.h"
7 [! w9 `3 E8 T) l% s' I2 y6 Kmain() 1 p4 x9 {: T7 V9 F
{
/ Q1 o# K( y3 gchar a=176,b=219;
2 e F# Q4 A; i1 u8 Hprintf("%c%c%c%c%c\n",b,a,a,a,b);
1 r* ?$ A; v- x6 W9 N6 o# tprintf("%c%c%c%c%c\n",a,b,a,b,a);
; d% P9 `6 ~3 a w2 O& O! j8 `printf("%c%c%c%c%c\n",a,a,b,a,a); " K! j F% p6 v; O6 s8 M# t
printf("%c%c%c%c%c\n",a,b,a,b,a);
: a& C8 K9 I6 c4 Rprintf("%c%c%c%c%c\n",b,a,a,a,b);} 4 {2 A7 R+ B+ @+ w
==============================================================
- a1 m' a# ^, a# m; x【程序8】 & j' e' K* o" r( r$ i( Z& q
題目:輸出9*9口訣。
, w- A+ f3 w! f: t' t( o1.程序分析:分行與列考慮,共9行9列,i控制行,j控制列。
W; I& Q ^$ d0 L0 \9 z2.程序源代碼: - h3 f, a% j c
#include "stdio.h"
' K8 d! S8 C* w; q) @. G2 p& y pmain()
3 G# n' i* S( u* R, j/ j{
. w# \7 Z' ^, O( h9 w0 Xint i,j,result; $ Y) [' d9 x: j3 H, J# `# e; P: y
printf("\n"); . e% C, U' h/ Q* Q; R& s' N
for (i=1;i<10;i++) 9 K/ z& `- S- M3 o8 a9 ]
{ for(j=1;j<10;j++)
" Q/ J6 t! C) K0 ]* S1 m, Y{
+ K. ?0 x7 b. d- e/ R# U0 [5 presult=i*j; 6 d$ b( F) y; q3 Z/ g4 a0 r
printf("%d*%d=%-3d",i,j,result);/*-3d表示左對齊,占3位*/ & E5 T1 O- I/ b! u' V- n
}
+ p3 L# B# j `& p& Wprintf("\n");/*每一行后換行*/ " V8 V5 E/ Q3 r1 p* O* Q
} 3 O- r/ ?5 N( C: T
} . M8 ~/ q' I1 p! a8 y7 e
===============================================
4 o+ {1 e0 l% L$ f+ I
作者: 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
基本都忘了
& l6 j8 \, I: }4 y }軟件類的,學了就要用
作者: 我最帥 時間: 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
好東西
| 歡迎光臨 機械社區 (http://www.whclglass.com.cn/) |
Powered by Discuz! X3.5 |