机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 3589|回复: 11

C语言经典算法100例

[复制链接]
发表于 2017-9-22 09:34:26 | 显示全部楼层 |阅读模式
【程序1* x4 {: M# E/ E/ k: X9 e" Q; a7 L
题目:有1234个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
% u) V$ m  H( w# S9 B7 J4 v1.程序分析:可填在百位、十位、个位的数字都是1234。组成所有的排列后再去 , J% S4 t$ X  R2 o  D) U9 g
掉不满足条件的排列。
' N) ]) Z; s$ w; x' G5 Y2.程序源代码: ' K' k8 T" H/ [; c1 H$ c" Z2 t
main() {
. h$ p# ?6 ?. Uint i,j,k; . y0 s2 ?) }' ~& j5 }
printf("\n");
/ ~8 n# R+ E# Y5 s& _& ^for(i=1;i<5;i++) *以下为三重循环*/ 8 f4 h& k, v) ~6 N
for(j=1;j<5;j++)
( N) n% i8 J( A1 E4 _6 _0 E+ D( sfor (k=1;k<5;k++) { 4 M- {0 P2 O+ k+ t& B# G3 A. `
if (i!=k&&i!=j&&j!=k) /*确保ijk三位互不相同*/
* E/ g& l. M* }/ G  `2 [- E, Q( oprintf("%d,%d,%d\n",i,j,k); }} 0 k/ f. t# Y3 b; G2 X. ^
============================================================== 3 ~6 R7 l$ k& T; C' s
【程序22 E( G5 m& Q( e" }$ J" Z
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 * A, h; C; A% Y, B4 N, o
10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 ! R: q3 \6 ~! m7 D' l( x& A: G
7.5%20万到40万之间时,高于20万元的部分,可提成5%40万到60万之间时高于 9 C& R% y; T- E$ _6 U7 D+ N4 |
40万元的部分,可提成3%60万到100万之间时,高于60万元的部分,可提成1.5%,高于
( i' D5 F1 X2 [( Y6 V' J- j100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 8 z; D" H! @+ _1 r. y
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
% @# Y6 {  X0 n6 h; X2.程序源代码: % {% F9 I! R  h/ O
main() { $ j% |' V1 q; J- q. q
long int i; % P( C1 R1 N, O* @3 ~. ]$ K* U% b
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; / c( |# O% F  @
scanf("%ld",&i); # i; t. P3 o! X
bonus1=100000*0.1;bonus2=bonus1+100000*0.75; 8 d6 }0 [, k8 T% a- M7 ^
bonus4=bonus2+200000*0.5; ! K0 C$ Z/ z# B2 ^0 M
bonus6=bonus4+200000*0.3; 6 Z& Z! r7 K4 Q6 M7 H4 z
bonus10=bonus6+400000*0.15;
" e3 P6 P- \+ f5 i0 b- N9 N, wif(i<=100000)
! W0 f/ s9 U9 s- b" hbonus=i*0.1; 5 k4 v3 ^: t* e$ |- `
else if(i<=200000)
: G  s# L. [8 gbonus=bonus1+(i-100000)*0.075;
+ p( p5 ~+ x& o' ielse if(i<=400000) ) ?/ a4 O$ K: i! s6 ?7 K( S
bonus=bonus2+(i-200000)*0.05;
: f, G' t% W% v! t3 U! Belse if(i<=600000) ( a! E( m: c. d& |) x: c* t( ~
bonus=bonus4+(i-400000)*0.03;
' l: V  Y6 p/ L7 ^/ Oelse if(i<=1000000)
' |- E4 {4 r! [# A- H* A% B- jbonus=bonus6+(i-600000)*0.015; : Y  k4 ~/ f+ B# L( s5 e1 ?3 R
else
4 R* @. w6 |6 f% n: L; O6 K- Sbonus=bonus10+(i-1000000)*0.01; 0 _, I/ U9 M0 \3 t# r) ?" ^2 q) k2 G
printf("bonus=%d",bonus); }
' W% x3 {3 G5 B- ]( K==============================================================
6 X" d+ D. V9 R7 q5 q【程序3
$ R, j% l/ J/ O; N题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
+ Z4 J' [* v% p( W1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
) X! l0 Q$ e+ W% l6 a$ q$ F! Q的结果满足如下条件,即是结果。请看具体分析:
8 l' L& M; w: i- W6 t* {' R2.程序源代码:
! H9 i4 e' j9 ~# v* w* `#include "math.h" % e5 M* E0 W( G. P
main() {
! r8 \; B8 S$ ~1 Y6 X, p7 a1 Ilong int i,x,y,z;
0 ?( s% ?1 D0 |, Lfor (i=1;i<100000;i++)
+ c6 Q( q7 q! I# Q/ ~9 ^' u{ x=sqrt(i+100); /*x为加上100后开方后的结果*/ # s8 o& Z% F$ K
y=sqrt(i+268); /*y为再加上168后开方后的结果*/ 0 m" \" K. s2 L% x4 h* E( v( H
if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/ , n) v" V* b' r, O0 n0 ]9 W1 a2 F
printf("\n%ld\n",i); } }
; F5 M( ^% w( T& [; D============================================================== 7 L0 @2 u2 H: `9 j! n
【程序43 _& R. u+ a2 H. q9 F8 K$ L: d, s6 {
题目:输入某年某月某日,判断这一天是这一年的第几天? . A; b& o. p# |9 i
1.程序分析:以35日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊 ! O0 Q1 I/ \5 f3 m) W& i& S
情况,闰年且输入月份大于3时需考虑多加一天。 * W' c$ R+ A' D$ _
2.程序源代码:
+ [$ y, c* r3 Q0 Bmain() {
4 v, Z7 m% d6 W. `3 O( Oint day,month,year,sum,leap; 9 Y# i4 V6 L. G" j; N/ J' r/ }3 B
printf("\nplease input year,month,day\n"); - e8 a# l4 y" M
scanf("%d,%d,%d",&year,&month,&day);
( H8 Y/ A6 y5 `. ?4 v/ i* L" b% kswitch(month)/*先计算某月以前月份的总天数*/
{ case 1:sum=0;break; 9 x0 T3 Y, l' O2 b, T. ]" R9 B
case 2:sum=31;break;
8 G) G: o7 c' l" y# }8 l+ D+ Qcase 3:sum=59;break; + W& r& g4 k5 z; C% {
case 4:sum=90;break;
8 R* o# Q( |) K3 H: W5 Ccase 5:sum=120;break; " a! W! O. O! [: p# T% S: f# Y
case 6:sum=151;break; " G9 O7 n4 g  Y$ W
case 7:sum=181;break; % `$ e- U9 H" R% L
case 8:sum=212;break;
5 a1 Q, \$ T" I+ f/ Jcase 9:sum=243;break; 9 u! P- K' L  q. a2 y5 u
case 10:sum=273;break;
7 G) [# G: G3 g; l7 Acase 11:sum=304;break;
3 l# u. m& ?2 w5 e/ q5 o) ycase 12:sum=334;break;
; {) y' @+ g4 w/ q' h8 @6 ?! k# \' f* Ydefault:printf("data error");break; }
7 Y" f* |3 W  {/ D% L. {5 ^sum=sum+day; /*再加上某天的天数*/
  k) t/ X4 ^) s" V* Z8 Uif(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
& h: B3 g' u1 x) Tleap=1;
- ^/ S6 ]% j/ }8 [0 pelse 7 t3 j5 W/ |% T; H0 D
leap=0;
0 @3 o4 |1 A4 c6 m. g/ c! Sif(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
6 X" i. ^6 t& J$ Q6 V2 Xsum++;
* _7 V7 V( Y, R" v3 Uprintf("It is the %dth day.",sum);}
& O, O1 g% s# W+ S+ d9 A==============================================================
4 ^9 y: J, [" q7 f【程序57 C3 W2 o) v* r3 s+ p
题目:输入三个整数x,y,z,请把这三个数由小到大输出。 ! Q- M" E. ^/ H" p
1.程序分析:我们想办法把最小的数放到x上,先将xy进行比较,如果x>y则将xy的值进行交换, , b6 O( H0 {8 x) O" {+ j# o/ ~$ ^
然后再用xz进行比较,如果x>z则将xz的值进行交换,这样能使x最小。 ' L/ W' ~  D3 C- V) J2 y8 e# e
2.程序源代码:
2 D# f1 X- U# T6 ?main() {
3 X/ `8 _, V0 |4 ~1 `5 P8 }3 y$ uint x,y,z,t;
$ o. e* r. l9 vscanf("%d%d%d",&x,&y,&z);
. x1 O) d- e9 tif (x>y)
+ g4 A2 D" U( e) k  Z, g{t=x;x=y;y=t;} /*交换x,y的值*/ 0 L$ H& Y6 X: c" t4 P
if(x>z)
( N7 t) |8 S; y{t=z;z=x;x=t;}/*交换x,z的值*/
' Q2 t/ n* N6 p3 D6 V  G- ?, nif(y>z)
9 m- E. D4 Q6 F: T6 L9 ]* K{t=y;y=z;z=t;}/*交换z,y的值*/
% i3 ^8 d# ^; Y6 a1 aprintf("small to big: %d %d %d\n",x,y,z); }   c$ X) v0 q7 {" x- Y
==============================================================
: v' y2 y- e! q, X6 r& J- x- {【程序6% X* q2 Z/ z/ ?  {& d) m2 W; w8 Y- ^/ e$ B
题目:用*号输出字母C的图案。 4 O# M; ?; y. |; f
1.程序分析:可先用'*'号在纸上写出字母C,再分行输出。
! v0 E* A0 o: B% W' S" a2.程序源代码:
/ h" Z. K. d; H0 A#include "stdio.h" ( e( W3 o9 }' P; N* L
main() {
  E0 H8 a* M2 V8 {; N. O3 ~5 Fprintf("Hello C-world!\n"); % S. w6 F6 J' c0 B$ l
printf(" ****\n"); 7 q: `( w& X6 G$ D( \
printf(" *\n");
8 k% L# R- g, j; l5 Bprintf(" * \n");
: t( M# K* f! a- h0 _3 |printf(" ****\n"); } # R& A% g. D0 O* j0 F, a! g
==============================================================
% N9 p. |. x" D) T: x  z【程序7# l: ]* ?( y' g7 X8 B' Q( g& J
题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
/ z) p+ N6 H: [$ b, O1.程序分析:字符共有256个。不同字符,图形不一样。 1 j8 f/ z, h+ m$ Q  `
2.程序源代码: - s+ u9 ^& F. S$ `% @+ J# A3 B! X
#include "stdio.h" : u0 c5 {7 C( M9 i( J
main()
0 A; D3 N1 ?. }: u{
* s/ a8 D, \- ]1 cchar a=176,b=219; . i. f9 W& w) d* [8 |
printf("%c%c%c%c%c\n",b,a,a,a,b);
- S7 x5 R$ |" w  Xprintf("%c%c%c%c%c\n",a,b,a,b,a); - O0 U) k7 N1 U7 D. ^3 y/ {. T
printf("%c%c%c%c%c\n",a,a,b,a,a);
# u) Z5 g4 p+ c1 W8 C3 ]# P" Uprintf("%c%c%c%c%c\n",a,b,a,b,a); . s5 ~" V0 K2 x/ ]
printf("%c%c%c%c%c\n",b,a,a,a,b);} - z3 P/ |+ \+ z! K* A3 n$ K
============================================================== , Z8 Y  E. c# }$ l, g  w8 G
【程序8/ d6 o( g7 l7 r) v
题目:输出9*9口诀。
5 M0 C6 q( L7 s1.程序分析:分行与列考虑,共99列,i控制行,j控制列。 / F" e, W* _8 Y# I$ I5 L- `
2.程序源代码: + f  n8 ^1 f+ c( J$ a$ ]  G
#include "stdio.h"
, C: `4 n  l  Y. Cmain() + V; i2 X* G7 ]
{ ) f* Y% e0 r% D- ^# V- g/ `1 y
int i,j,result; ! Z! r6 j  y+ d( k
printf("\n"); ( h% h' I' r' Z" I, |/ e1 e2 y* O
for (i=1;i<10;i++) ' Y, ^8 m" f  f8 z
{ for(j=1;j<10;j++)
* Z" l' S* n9 B4 E$ l{
, _& _% _% u% P$ ]4 }% k$ Y% w. Sresult=i*j; , Z. G1 u+ s- V) Z& |
printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3*/ 7 W" I8 T1 z- f) O* N: e" Z
} " n" J; r2 X3 F- P3 j+ D7 m; V
printf("\n");/*每一行后换行*/ & p$ L; {3 j% Y( E
}
2 v- o5 s. n& C- F) ^} 1 d# W3 ]5 W  Y/ J% b
===============================================

% S  V2 \$ J6 }% l2 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 | 显示全部楼层
基本都忘了
4 e. [) f2 p$ Q+ o: \软件类的,学了就要用
回复 支持 反对

使用道具 举报

发表于 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-4-16 14:18 , Processed in 0.053995 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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