机械必威体育网址

找回密码
注册会员

QQ登录

只需一步,快速开始

搜索
查看: 3907 | 回复: 11
打印 上一主题 下一主题

C语言经典算法100例

[复制链接]
跳转到指定楼层
1#
发表于 2017-9-22 09:34:26 | 只看该作者 回帖奖励 | 倒序浏览 | 阅读模式
【程序1
1 ~( h2 P4 W! w# O2 E 题目:有1 2 3 4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
/ _5 ?; p3 |5 s1. 程序分析:可填在百位、十位、个位的数字都是 1 2 3 4 。组成所有的排列后再去
9 v: a0 {8 g4 _. E 掉不满足条件的排列。
$ F3 \* q% |( ~; J( O' b2. 程序源代码: 8 z& a5 @+ i6 @/ |
main() { ! q" y3 _ l0 C
int i,j,k;
8 C0 N) j; @% F2 pprintf("\n");
3 _; O. X2 @$ D+ @( Bfor(i=1;i<5;i++) * 以下为三重循环 */
" I4 k0 G; }% y; o" W$ N) ^! \/ _for(j=1;j<5;j++)
9 {7 f& p* m6 V" o |for (k=1;k<5;k++) {
+ y$ t: i% A1 O1 l. ?6 `' kif (i!=k&&i!=j&&j!=k) /* 确保 i j k 三位互不相同 */ - x' {; Y3 E L7 ~- z
printf("%d,%d,%d\n",i,j,k); }}
0 z( ]: Q I; k* ]: k4 W0 E1 h============================================================== 5 [$ e6 \( k- z W; ?4 C4 n7 a! }
【程序2 + U9 N# m4 M; h9 K4 s* \- R
题目:企业发放的奖金根据利润提成。利润(I) 低于或等于 10 万元时,奖金可提 10% ;利润高 2 w! } `5 W; J+ z9 D
10 万元,低于 20 万元时,低于 10 万元的部分按 10% 提成,高于 10 万元的部分,可可提
! R' ^, @; @* O/ V* M0 u( V" A 7.5% 20 万到 40 万之间时,高于 20 万元的部分,可提成 5% 40 万到 60 万之间时高于 5 @; i, d3 G5 g" C* Q. H
40 万元的部分,可提成 3% 60 万到 100 万之间时,高于 60 万元的部分,可提成 1.5% ,高于 " L9 R: O9 H$ u" [ T' t$ Q
100 万元时,超过 100 万元的部分按 1% 提成,从键盘输入当月利润 I ,求应发放奖金总数? * Q5 V; a( m, V9 [" N" V1 g
1. 程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
# o5 O! _/ L+ m3 d2. 程序源代码: * \, h4 j4 ]$ b3 i, @/ H3 n
main() {
3 l5 l9 v0 v" q0 |" R% w) x$ wlong int i;
% k% R/ A" R5 D" C' v E8 Yint bonus1,bonus2,bonus4,bonus6,bonus10,bonus; 5 M# o2 c* y# I9 j! K t
scanf("%ld",&i); * A; f* A! j: d) ~7 d
bonus1=100000*0.1;bonus2=bonus1+100000*0.75; + ] d6 a" o: [
bonus4=bonus2+200000*0.5; - }8 S. X) p+ x3 n: b5 B) Z B
bonus6=bonus4+200000*0.3; 5 B* |' R i# E S" C7 U: B
bonus10=bonus6+400000*0.15;
8 H3 v4 v; `+ Mif(i<=100000) 9 Y/ _9 d, a8 j8 M; d9 I
bonus=i*0.1; 3 }4 r- N- b1 [5 m4 M& l( y5 k
else if(i<=200000)
& w9 c6 \+ K( ?7 J; z3 D9 d* ?bonus=bonus1+(i-100000)*0.075;
" g/ m2 i4 ?& velse if(i<=400000)
; K) _& z' t* ?& p% ?5 Y, `4 Lbonus=bonus2+(i-200000)*0.05;
0 F- k5 K+ R& Celse if(i<=600000) * o8 y* t" A R% A3 K' Y
bonus=bonus4+(i-400000)*0.03; , u: O7 R7 z( x4 ?% w
else if(i<=1000000)
9 u& w. J3 L& _6 e/ x' U- U$ Y. wbonus=bonus6+(i-600000)*0.015; 2 `, O; @, u+ V3 B
else
+ n& Q( a4 h$ Q; Y: Dbonus=bonus10+(i-1000000)*0.01;
9 y( J; y# f8 r& l' I1 f uprintf("bonus=%d",bonus); } " y/ p% i5 J8 {8 D
============================================================== % a, r- C9 [: e: x" ^: h# ?
【程序3
9 H1 n2 ~0 j) C1 H) W% X) |4 @ 题目:一个整数,它加上100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少?
2 Z2 o+ A; D& W5 `/ w9 d1. 程序分析:在 10 万以内判断,先将该数加上 100 后再开方,再将该数加上 268 后再开方,如果开方后 / V- _5 W3 w3 b( s: B
的结果满足如下条件,即是结果。请看具体分析: ' j8 q2 | v1 t4 Y2 G4 U3 D- j
2. 程序源代码: 0 l. G" [* n& o2 `* y, J& H
#include "math.h"
( c B* ?# }7 \% R* zmain() { " }/ k% x/ a% I) U6 c9 }& d
long int i,x,y,z; : S0 u" a) O! S# E
for (i=1;i<100000;i++)
7 O; Q) I! s& f{ x=sqrt(i+100); /*x 为加上 100 后开方后的结果 */
L7 d2 D! a4 E% u$ Jy=sqrt(i+268); /*y 为再加上 168 后开方后的结果 */
3 N+ G, _' R+ k, r* Qif(x*x==i+100&&y*y==i+268)/* 如果一个数的平方根的平方等于该数,这说明此数是完全平方数 */
& c; q$ \6 i, h/ i3 l2 F& cprintf("\n%ld\n",i); } }
: n- W4 F X; e1 p============================================================== ; K; q, S# x* U- N, `& M& S( i
【程序4 0 G6 Q& \ v4 @, M& S+ l
题目:输入某年某月某日,判断这一天是这一年的第几天?
% s; Q+ N* q# n8 M5 K) a: a5 f1. 程序分析:以 3 5 日为例,应该先把前两个月的加起来,然后再加上 5 天即本年的第几天,特殊
) @ T9 B0 t1 ~ 情况,闰年且输入月份大于3 时需考虑多加一天。 5 z( L8 f6 Y h
2. 程序源代码:
7 s; V. O$ o$ H7 vmain() {
4 ^5 U; ^; G/ F0 ]int day,month,year,sum,leap; 0 Q+ ^$ ?# |. l% v: g# T* Q% |
printf("\nplease input year,month,day\n"); $ j2 n; z4 z8 t' h, J4 T
scanf("%d,%d,%d",&year,&month,&day);
' k I" S: {# Iswitch(month)/* 先计算某月以前月份的总天数 */
{ case 1:sum=0;break;
6 P; ?' k8 A5 a" vcase 2:sum=31;break; 0 g! m4 ^& \0 l
case 3:sum=59;break;
, ~ y/ q# K& M9 W! q4 ^case 4:sum=90;break; % H* e% p) |. c0 l0 P
case 5:sum=120;break; & z1 _! f7 U! y" S3 j
case 6:sum=151;break; % L. V. \4 U' |# O7 i& d4 z& R4 ?
case 7:sum=181;break;
. ^4 K& l! m( h. ]case 8:sum=212;break;
. ]) N4 d& m% acase 9:sum=243;break; % e. c( |8 o' P8 q% r
case 10:sum=273;break; 6 x# y, W6 e6 q( { k/ ^
case 11:sum=304;break;
4 |& b# ~; E8 J5 bcase 12:sum=334;break;
+ m0 g, L' S, wdefault:printf("data error");break; }
8 G {0 d0 I3 m& t3 i* [/ ]! Osum=sum+day; /* 再加上某天的天数 */ $ j; X" b* X, |" C
if(year%400==0||(year%4==0&&year%100!=0))/* 判断是不是闰年 */
; G- [4 Y) k& H7 |8 E6 C% S; qleap=1;
+ f& A3 I/ R$ Kelse + \7 c9 S/ R7 p4 [
leap=0;
/ T+ N0 V8 y' e9 I& M2 ~; q" xif(leap==1&&month>2)/* 如果是闰年且月份大于 2, 总天数应该加一天 */ 1 V) J' w) O8 e
sum++; * Q( a0 I5 k9 {+ b
printf("It is the %dth day.",sum);} 7 {& ~! |3 n: n0 F! _
==============================================================
# ^ g7 d6 J: g1 b3 D* ]0 T. m3 E* A' y7 A 【程序5 7 L4 X% |: _4 ]/ C3 i/ t) _2 c
题目:输入三个整数x,y,z ,请把这三个数由小到大输出。
7 Z: I% J% y/ r. z1. 程序分析:我们想办法把最小的数放到 x 上,先将 x y 进行比较,如果 x>y 则将 x y 的值进行交换, ( K# y4 [ Q4 L% W
然后再用x z 进行比较,如果 x>z 则将 x z 的值进行交换,这样能使 x 最小。 5 {2 q- k1 @9 W+ [
2. 程序源代码: 4 x: @+ Y8 [* F0 R& A: j% V! l. k1 e# L
main() {
6 R+ ]8 q+ k: l1 J6 dint x,y,z,t; ) c) ~$ k$ L* p" G$ H
scanf("%d%d%d",&x,&y,&z); 5 D( D& {: v" D) I, U! o1 Y: r
if (x>y) 4 T9 Z, S+ |9 }
{t=x;x=y;y=t;} /* 交换 x,y 的值 */ 0 R& ]. q* k2 w; X' x& D7 z
if(x>z) & W; R5 h$ V' W" K
{t=z;z=x;x=t;}/* 交换 x,z 的值 */
1 j! k/ G7 n C/ E- M+ f# Sif(y>z) * [" e/ q, l* O0 d
{t=y;y=z;z=t;}/* 交换 z,y 的值 */ - Z$ ?1 K4 K" e5 t& y
printf("small to big: %d %d %d\n",x,y,z); } 9 L; Y4 X" H% O, U2 ?
============================================================== 4 B: w# ^# P" F% t5 @
【程序6 $ u% Y/ F$ b7 @; n0 B' t
题目:用* 号输出字母 C 的图案。 3 a8 F) `3 k" w( @ e8 D% s5 z! U, H
1. 程序分析:可先用 '*' 号在纸上写出字母 C ,再分行输出。
! F7 ]$ I4 \, [ g6 Y; s" i* G* I2. 程序源代码: 2 p7 B5 f% S; r
#include "stdio.h" 1 q0 G5 ?4 u% H" J7 w) g3 K2 P
main() { 3 Z2 K4 L, h& o: J) A
printf("Hello C-world!\n");
" P2 F+ _7 H B5 D4 E4 q- t' lprintf(" ****\n"); . V$ t& ^4 k, c$ |( Q; l% i
printf(" *\n"); 4 t3 J. O1 o+ B
printf(" * \n"); 7 M. Y4 Q' Y6 G, T) m8 l7 U
printf(" ****\n"); }
* U7 {4 H' a5 e& m- B* L============================================================== ( m( J, k7 y2 k: {. c
【程序7 5 n& L" O$ p$ }# Y
题目:输出特殊图案,请在c 环境中运行,看一看, Very Beautiful! 7 z$ k/ M+ s6 E
1. 程序分析:字符共有 256 个。不同字符,图形不一样。 + Z& c, y+ L! e0 q7 k$ F7 W- K: c
2. 程序源代码:
e2 ?7 f. T) x- w#include "stdio.h" ! }/ h; r. H( G1 L6 l/ [6 m
main() 8 p4 Z0 m3 n1 x' c4 \
{
$ G: ?7 y6 x0 h+ ?" A2 ichar a=176,b=219;
5 q+ F/ Y" A. `5 K) }7 \' V' g# p8 [% ?printf("%c%c%c%c%c\n",b,a,a,a,b); # D3 {0 p2 h- S# ]$ `9 T4 W3 \
printf("%c%c%c%c%c\n",a,b,a,b,a); - H. P# B+ B) b
printf("%c%c%c%c%c\n",a,a,b,a,a);
+ H1 U# c6 L9 _+ V# A7 S- vprintf("%c%c%c%c%c\n",a,b,a,b,a);
# N' i! D- O0 g0 ~7 r* Mprintf("%c%c%c%c%c\n",b,a,a,a,b);} % s. ~; r% p4 |" ]4 T; {" G! S
==============================================================
2 w6 f+ [7 f. r8 @ 【程序8
* q) p8 @5 {2 y3 p4 s' [* X 题目:输出9*9 口诀。
) G/ D1 ^, g. m8 v( F A1. 程序分析:分行与列考虑,共 9 9 列, i 控制行, j 控制列。 $ ~7 }7 I0 h' A0 d6 f9 @% T
2. 程序源代码: % v W$ {3 V* L' n/ W1 E+ X
#include "stdio.h"
' k" V: S; H/ _% g, @) tmain()
; R, E$ A! X0 @* N{ 8 R$ I+ I: g; |$ y
int i,j,result;
$ J' c+ ~; U: Wprintf("\n");
2 X- K6 F7 j! {1 s- zfor (i=1;i<10;i++)
) s2 t9 v* u* l- R+ X/ ~4 N{ for(j=1;j<10;j++)
/ f! X# a- [; y, x, @. Y{
9 W4 Y( B7 }" Z4 N7 h8 [result=i*j;
' H# | T) [6 g7 yprintf("%d*%d=%-3d",i,j,result);/*-3d 表示左对齐,占 3 */
/ p0 j, z2 `& x: \, K} , Q- r. X2 i9 z$ K
printf("\n");/* 每一行后换行 */ , ^/ }1 d" I7 l/ d' K8 Z0 M; C3 `" Q1 r7 C
}
- I @" {' |( v+ @. z} & ]& I, E3 K4 c; D6 I& ]
===============================================
' ^5 A6 C( x o0 q8 r
2#
发表于 2017-9-22 10:21:51 | 只看该作者
感谢楼主的分享!!!
3#
发表于 2017-9-22 10:22:12 | 只看该作者
我竟然发现我有点看得懂
4#
发表于 2017-9-22 10:42:30 | 只看该作者
c语言。。。。看不懂
5#
发表于 2017-9-22 10:59:43 | 只看该作者
说好的一百例怎么只有几个?
6#
发表于 2017-9-22 11:32:18 | 只看该作者
附件呢???
7#
发表于 2017-9-22 12:26:17 | 只看该作者
基本都忘了
7 R% _* K3 t/ g Z软件类的,学了就要用
8#
发表于 2017-9-22 12:54:50 | 只看该作者
楼主,求分享剩下的
9#
发表于 2017-9-22 15:44:21 | 只看该作者
玩玩的东西
10#
发表于 2017-9-22 23:42:20 | 只看该作者
这是和电脑有关的知识,做机械的用不上吧
您需要登录后才可以回帖 登录| 注册会员

本版积分规则

小黑屋|手机版|Archiver|机械必威体育网址(京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号)

GMT+8, 2024-8-1 14:30, Processed in 0.056163 second(s), 19 queries , Gzip On.

Powered byDiscuz!X3.4Licensed

? 2001-2017Comsenz Inc.

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