机械必威体育网址

用户名  找回密码
 注册会员

QQ登录

只需一步,快速开始

帖子
查看: 4657|回复: 11
打印 上一主题 下一主题

C语言经典算法100例

[复制链接]
跳转到指定楼层
1#
发表于 2017-9-22 09:34:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
【程序1, [7 E* ]6 c; m
题目:有1234个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? " {, C/ z1 x) \0 y8 \. X
1.程序分析:可填在百位、十位、个位的数字都是1234。组成所有的排列后再去 ! J4 h) d  n& y, c3 C" a5 X
掉不满足条件的排列。 - v7 W# u& l, M6 a/ |4 O8 d
2.程序源代码: " m& G+ N" I- E' Z# K
main() {
' G# T) `' K: ?* f3 h- ?; Mint i,j,k; & n6 h6 D3 P' q7 Z& b5 m/ o/ p
printf("\n"); - G4 ^( x1 m5 M+ g) W9 A
for(i=1;i<5;i++) *以下为三重循环*/ . j- w3 l% H9 u; a) l
for(j=1;j<5;j++)
+ J: f% F" R3 I4 Qfor (k=1;k<5;k++) { 6 l6 z  s3 L: F, [6 {5 c6 a$ K
if (i!=k&&i!=j&&j!=k) /*确保ijk三位互不相同*/   h( O5 a! e# S2 U; [
printf("%d,%d,%d\n",i,j,k); }} 4 j! P( @; k3 D" ~% D
============================================================== 8 K1 O" s& k" `5 N
【程序2- ^. k5 `, _) ]8 T- \5 H# d
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 ) L" E4 {# }, z- S) U6 t
10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 & C* y4 h( i5 S' s
7.5%20万到40万之间时,高于20万元的部分,可提成5%40万到60万之间时高于 : _8 Y. [& T+ T" }) I1 }
40万元的部分,可提成3%60万到100万之间时,高于60万元的部分,可提成1.5%,高于
; P9 l9 _6 f: B0 d5 [6 X2 c# j! y3 O100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?   \: c( ?  n3 t) G( ^5 _5 K
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
5 K6 J3 S( b( R* W1 A* _# Z& S2.程序源代码:
+ l6 Y8 x* R, f) Emain() {
0 g) p# M8 v4 H2 e6 along int i; - q' B" H& S" h! _
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; ; Q( u+ ^- i  p# \1 C
scanf("%ld",&i);
6 P5 Y2 I. L- Q7 L- |5 y/ J1 C8 ibonus1=100000*0.1;bonus2=bonus1+100000*0.75;
! H# [2 X: Z1 G# K  P4 s& K, rbonus4=bonus2+200000*0.5;
9 A+ S& v/ c" x7 G9 \! o4 a' {bonus6=bonus4+200000*0.3;
. ]4 H( O1 r0 h0 qbonus10=bonus6+400000*0.15; 0 o" j5 V) i5 h% R5 s1 {
if(i<=100000)
- d+ B8 r; H8 c; S' wbonus=i*0.1;
! S* p& l3 Z) ]* `1 e3 b1 Oelse if(i<=200000) % S" k+ I; N1 p3 Z
bonus=bonus1+(i-100000)*0.075;
1 W9 ]  l0 G" a7 ?else if(i<=400000)
& ?4 k" d4 r. ?. H' hbonus=bonus2+(i-200000)*0.05;
) Q8 o! V7 ~9 |, ?1 aelse if(i<=600000)
; X& }* D' h; U- l, P& Gbonus=bonus4+(i-400000)*0.03; 7 Q" h' L# V7 A2 f
else if(i<=1000000)
- T* W0 z. p) S; j! ibonus=bonus6+(i-600000)*0.015;
2 y" A* w% r2 p; Telse
1 N+ M2 _) q! f$ Q$ Nbonus=bonus10+(i-1000000)*0.01;
$ f5 i' R1 R8 Bprintf("bonus=%d",bonus); }
. L" T2 O) I- z4 X2 N; C9 C/ a==============================================================
) W6 X' [6 ?+ d【程序3
! a$ P, ?; G4 O5 v7 W. }题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
' l" h! L" E+ \# w, P& h+ o1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
# D6 L! J- [' J% L) {5 o的结果满足如下条件,即是结果。请看具体分析:
! z- F  b% T- F: @2.程序源代码:
) s$ W2 v# w8 D  {1 K. ]& Q) O#include "math.h" ; ^8 I0 t/ v- t0 b' ^
main() {
* I% g6 d) C7 y' n4 Wlong int i,x,y,z; 9 g6 z" b' I( `: D6 D
for (i=1;i<100000;i++) 8 `) v# _* c) w
{ x=sqrt(i+100); /*x为加上100后开方后的结果*/ " Q+ S! y$ Q$ H9 b7 E
y=sqrt(i+268); /*y为再加上168后开方后的结果*/ ) C8 _' z- Z: S4 g& f
if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
& k& ]$ E4 d% t) H: k7 h" ?printf("\n%ld\n",i); } } , ~! ^7 `  F6 T2 S3 E) j, y
==============================================================
; M1 o& ^# b# f" S【程序4
+ A: _% B# M; d: ?$ l题目:输入某年某月某日,判断这一天是这一年的第几天?
* E& \8 r2 o, ?# Y" s- v, r* ~1.程序分析:以35日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊 * N2 P/ k5 ]+ `# o0 F+ \
情况,闰年且输入月份大于3时需考虑多加一天。 # F7 z: M( a5 k# f# g9 f( h' V: E
2.程序源代码:
  Q, h& k5 e( P, R5 L$ u+ F0 Zmain() {
5 s, t# x& M8 Y0 s5 Cint day,month,year,sum,leap;
2 Y) V0 ~8 _# U, V& {printf("\nplease input year,month,day\n"); 3 V8 C0 p1 p! g0 d$ q+ s; |
scanf("%d,%d,%d",&year,&month,&day);
+ s3 p* O: V3 i& g; |. Y  bswitch(month)/*先计算某月以前月份的总天数*/
{ case 1:sum=0;break;
4 d% K! z% h+ d& Kcase 2:sum=31;break;
  s. D% a+ X3 u* G* X( i0 z3 tcase 3:sum=59;break; ( U! s4 [+ F& m! V% {
case 4:sum=90;break; / P: z& W0 Y2 `. k
case 5:sum=120;break; 7 y! j# _4 q! q# v9 |1 Y- k
case 6:sum=151;break; . r8 g; t) S: E# {) b) C
case 7:sum=181;break;
5 G% Z- x! n6 K! _- u! vcase 8:sum=212;break; ) V3 G/ x, O( f& O$ g4 j
case 9:sum=243;break;
! {! @1 @) F# O  q& vcase 10:sum=273;break;
% Z. F) X0 H: u5 G/ acase 11:sum=304;break; 4 E% W4 W# G; M
case 12:sum=334;break; 3 m0 t: k  N6 H; S
default:printf("data error");break; } " }; @, {. D, ^" y
sum=sum+day; /*再加上某天的天数*/ ! U. ]" Z- K# e: R' {! U
if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/ 8 X* `- l( ~1 Q7 a2 I1 C, M! P
leap=1; 5 u8 t  T; s2 ^3 h" U% \
else ( {0 @6 Q3 N/ z
leap=0;
. t) m# x$ z& o; d/ ^if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
& `. ]% L9 o. ~' t( G( }sum++; & C4 b% ]9 {# Y* U
printf("It is the %dth day.",sum);}
# C7 {) ]' B7 V+ B3 k============================================================== 4 M. p2 m; n7 |- t& O. E/ h
【程序50 v% c& r( U/ f: A
题目:输入三个整数x,y,z,请把这三个数由小到大输出。
" p( T  y0 R* {1 {1.程序分析:我们想办法把最小的数放到x上,先将xy进行比较,如果x>y则将xy的值进行交换, 2 [# k' R5 X2 D9 O, T+ \% h
然后再用xz进行比较,如果x>z则将xz的值进行交换,这样能使x最小。
  S! B: s7 ~$ [/ Y& ~$ g8 Y2.程序源代码:
9 Q- i4 a( K  {. p: rmain() { * a; p; @# v! K2 z, K* \6 ?7 g
int x,y,z,t; ; M1 W. _, v. y3 z. {1 F
scanf("%d%d%d",&x,&y,&z);
' Y& M) h  d' p# aif (x>y)
. o- _& k7 V3 Z! a: v. B{t=x;x=y;y=t;} /*交换x,y的值*/
9 p- ^& O! M5 E, K1 O$ eif(x>z)
1 F" b3 C+ z5 D" `{t=z;z=x;x=t;}/*交换x,z的值*/ 3 j- O# {& y7 p1 @
if(y>z) / e+ d* s) q( d7 ], }
{t=y;y=z;z=t;}/*交换z,y的值*/ # F& I2 M9 F8 A- h+ o. H
printf("small to big: %d %d %d\n",x,y,z); }
  n# X- v1 S5 r' w==============================================================
+ x/ h  B+ Y4 Q. r7 g【程序6
  p9 G/ Z: s) F! _题目:用*号输出字母C的图案。 2 P" \$ u% v$ q' b9 i; C( T" ?# T
1.程序分析:可先用'*'号在纸上写出字母C,再分行输出。 9 k# g9 z" `3 A2 K; E0 O
2.程序源代码:
  \, I. Y! l: ^% H& z" _$ r#include "stdio.h" ( }) l" O8 E6 H1 T! E" X
main() { $ T4 d" u; c7 ]" h# y
printf("Hello C-world!\n");
7 f- Y: i0 J* A9 yprintf(" ****\n");
# B* c6 D9 @8 ^8 }6 Y2 P8 v; P3 pprintf(" *\n"); 4 c# R- H- p/ ?( v; k) N
printf(" * \n");
. U; N6 p6 ^5 F- |printf(" ****\n"); }
7 u  l! Q; S7 l& t) u  @============================================================== / `3 m9 g0 t6 w, M* H6 ]* z# T
【程序7
. z$ W6 Y* v( [题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
6 O* t) `- j+ D2 f9 J, g' G1.程序分析:字符共有256个。不同字符,图形不一样。 . @* U7 Y( ^' B6 y2 [0 L! n
2.程序源代码:
8 V; t! W$ C! ?& D: W  F, C#include "stdio.h"
* T- ]) d* A# K; [. {# S5 d5 Gmain() 9 }: j" {9 G( A2 P4 T
{
8 }& I0 A6 S( ~3 ?# i& v8 A/ wchar a=176,b=219;
" Y7 G$ J1 X0 l! o+ kprintf("%c%c%c%c%c\n",b,a,a,a,b);
9 ~7 b1 N$ i) Z9 T0 X8 C5 ]7 \+ Yprintf("%c%c%c%c%c\n",a,b,a,b,a);
7 M" ]! M4 A: C7 ^; fprintf("%c%c%c%c%c\n",a,a,b,a,a); ' r! ?) V) o7 \( m4 q
printf("%c%c%c%c%c\n",a,b,a,b,a);
& l* V5 g8 e- O+ @4 Q  G6 nprintf("%c%c%c%c%c\n",b,a,a,a,b);}
( ~0 c9 W$ y+ X2 M  W# S& t==============================================================
; |0 v; t& b' P- I【程序8
/ k% \( A0 m8 D* U2 s. v7 l题目:输出9*9口诀。 % y( |2 N; t6 D) @! {& L
1.程序分析:分行与列考虑,共99列,i控制行,j控制列。 % l) e! M) q6 d) w! j& |
2.程序源代码: , j2 E4 q# _/ n5 Q
#include "stdio.h" 4 y& c6 U8 X1 I9 m5 {; ?
main() ( x, l  n8 |& @: |; @) j; w
{ - E& F1 z' b- Z1 r( A
int i,j,result; # E0 x7 b4 f5 V  _
printf("\n");
' w6 P: e# B7 s; `4 afor (i=1;i<10;i++) * n/ ], q. Q  m) T3 Z* x
{ for(j=1;j<10;j++) % d7 ]/ q! k8 o* D( q5 r
{
: r8 h( _: [3 }& jresult=i*j;
' j: a0 [5 S& {4 ~& K" cprintf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3*/ 1 t$ B1 A) R9 U% R2 }
} : ]1 p9 S! ]2 v$ g  k, E
printf("\n");/*每一行后换行*/ - {0 |0 g" x, w/ l" s
}
4 `8 y9 \  T& \3 v# |. B# k( _}
) ~, _) A3 \0 J1 j0 V===============================================
. t+ n" `2 O6 X$ _' R9 @8 y: R8 t
回复

举报

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 | 只看该作者
基本都忘了8 P" ^' T7 g; d
软件类的,学了就要用
回复 支持 反对

举报

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, 2025-4-26 08:31 , Processed in 0.065426 second(s), 13 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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