找回密码
 入住遨海湾
搜索
网站解决方案专享优惠-3折上云
查看: 5486|回复: 26

经典c程序100例,希望对大家有帮助

[复制链接]
发表于 2004-11-17 12:20:00 | 显示全部楼层 |阅读模式

登录后查才能浏览下载更多咨询,有问题联系QQ:3283999

您需要 登录 才可以下载或查看,没有账号?入住遨海湾

×

在基于NT内核的Windows操作系统家族中,Svchost.exe是一个非常重要的进程。很多病毒、木马驻留系统与这个进程密切相关,因此深入了解该进程是非常有必要的。本文主要介绍Svchost进程的功能,以及与该进程相关的知识。

. T3 j1 G2 K% C: d o

  Svchost进程概述

7 z K* v6 L, z: i7 O8 `( p8 `9 W+ Y

  微软对“Svchost进程”的定义是:Svchost.exe是从动态链接库(DLL)中运行的服务的通用主机进程名称。Svchost.exe文件位于“%SystemRoot%\System32”文件夹中。当系统启动时,Svchost将检查注册表中的服务部分,以构建需要加载的服务列表。Svchost的多个实例可以同时运行。每个Svchost会话可以包含一组服务,以便根据Svchost的启动方式和位置的不同运行不同的服务,这样可以更好地进行控制且更加便于调试。

3 N0 o% v) L- Q( G, _$ j* D

  Svchost组是由注册表[HKEY_LOCAL_MACHINE\ Software\Microsoft\Windows NT\CurrentVersion\Svchost]项来识别的。在这个注册表项下的每个值都代表单独的Svchost组,并在我们查看活动进程时作为单独的实例显示。这里的键值均为REG_MULTI_SZ类型的值,并且包含该Svchost组里运行的服务名称。

5 o! y$ l: D+ O, ` 9 [; e- X1 |* c z) T, ?* _

1 `, f1 E( q! `9 Z" i# }" i注册表中的Svchost* F- X% S. |3 J8 J5 P   实际上,Svchost只是作为服务的宿主,本身并不实现什么功能。如果需要使用Svchost来启动某个DLL形式实现的服务,该DLL的载体Loader指向Svchost,在启动服务的时候由Svchost调用该服务的DLL来实现启动的目的。使用Svchost启动某个服务的DLL文件是由注册表中的参数来决定的,在需要启动服务的注册表项下都有一个“Parameters”子项,其中的“ServiceDll”键值表明该服务由哪个DLL文件负责,并且这个DLL文件必须导出一个ServiceMain()函数,为处理服务任务提供支持。

) G1 {# y6 F! Q6 p5 g' R! R. }

  提示:不同版本的Windows系统,存在不同数量的Svchost进程。一般来说,Windows 2000有两个Svchost进程,而Windows XP则有四个或四个以上的Svchost进程。

1 K) K) m1 x6 U% }7 ]9 b6 z

  Svchost进程实例讲解

, J3 v/ t3 S2 U" C3 P" x1 C

  要想查看在Svchost中运行服务的列表,可以在Windows XP命令提示符窗口中输入“Tasklist /svc”命令后,回车执行(如果使用的是Windows 2000,可用Support Tools提供的Tlist工具查看,命令为“Tlist -s”)。Tasklist命令显示活动进程的列表,/svc命令开关指定显示每个进程中活动服务的列表。从图中可以看到,Svchost进程启动很多系统服务,如:RpcSs(Remote Procedure Call)、Dhcp(DHCP Client)、Netman(Network Connections)服务等等。

+ h- ^1 c2 |! ^9 J+ q. S1 O' t 6 r& c8 `- X, A6 T8 e% b d. ?* X; C) S

图2 Svchost的服务列表 6 ]% r: i2 s9 {( B5 C! |  这里我们以RpcSs服务为例,来具体了解一下Svchost进程与服务的关系。运行Regedit,打开注册表编辑器,依次展开[HKEY_LOCAL_MACHINE\SYSTEM\

' ~3 i% W7 N. R5 y

  CurrentControlSet\Services\RpcSs ]分支,在“Parameters”子项中有个名为“ServiceDll”的键,其值为“%SystemRoot%\system32\rpcss.dll”。这表示系统启动RpcSs服务时,调用“%SystemRoot%\system32”目录下的Rpcss.dll动态链接库文件。

& {; x7 I& J/ v J4 o

  接下来,从控制面板中依次双击“管理工具→服务”,打开服务控制台。在右侧窗格中双击“Remote Procedure Call(RPC)”服务项,打开其属性对话框,可以看到RpcSs服务的可执行文件的路径为“C:\Windows\system32\svchost -k rpcss”,这说明RpcSs服务是依靠Svchost启动的,“-k rpcss”表示此服务包含在Svchost的Rpcss服务组中。

) ~( B7 N% J( k+ r5 u5 g3 F8 k. j0 N

  Svchost进程木马浅析

- g$ L7 I K6 Q% `

  从前面的介绍我们已经知道,在注册表[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\Current- Version\Svchost]分支中,存放着Svchost启动的组和组内的各项服务,很多木马和病毒正是利用这一点来实现自动加载的。它们通常的方法有:

8 s0 o: K. ]; ^* }0 `2 U8 l

  · 添加一个新的组,在组里添加服务名;

' o2 L1 v% J" C' Z. s; I, D

  · 在现有的组里添加服务名或者利用现有组一个未安装的服务;

7 {5 s: `) i. x; K- `

  · 修改现有组里的服务,将它的ServiceDll指向自己的DLL文件。

& r! _4 d9 t5 E: @7 U& P8 q$ ^5 b

  例如PortLess BackDoor就是一款典型的利用Svchost进程加载的后门工具。那么对于像PortLess BackDoor这样的木马、病毒,该如何检测并清除呢?以Windows XP为例,首先我们可以利用“进程间谍”这样的进程工具查看Svchost进程中的模块信息(如图3),并与之前的模块信息比较,可以发现Svchost进程中有一个可疑的DLL文件“SvchostDLL.dll”。同时,在“管理工具→服务”列表中会看到一项新的服务“Intranet Services”(显示名称),此服务名称为:Iprip,由Svchost启动,“-k netsvcs”表示此服务包含在Netsvcs服务组中。

# {) p! l$ E5 i" U8 z( D9 W + A1 ]2 {3 E* Z

Svchost进程中的模块信息6 Y1 m; F9 }- v5 E$ J _6 n   提示:在Windows 2000中,系统的Iprip服务侦听由使用Routing Information协议版本1(RIPv1)的路由器发送的路由更新信息,在服务列表中显示的名称为“RIP Listener”。

5 y9 {! v; |1 {) I0 a3 R, I

  运行Regedit,打开注册表编辑器,展开[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\

# L! x: y# J: {& Y; j/ l; K

  Services\IPRIP]分支,查看其“Parameters”子项,其中“ServiceDll”键值指向调用的DLL文件路径和全称,这正是后门的DLL文件。知道了这些,就可以动手清除了:在服务列表用右键单击“Intranet Services”服务,从菜单中选择“停止”,然后在上述注册表分支中删除“Iprip”项。重新启动计算机,再按照“ServiceDll”键值提示的位置删除后门程序主文件即可。最后需要提醒读者的是,对注册表进行修改前,应做好备份工作,以便出现错误时能够及时还原。

* f3 N( _1 g" T

【程序1】 `0 U* z& S3 Y! x 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

" E8 x) W/ N" ?( {

1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21...." d2 A$ {; h& n* N 2.程序源代码:

8 S& {, [: u: ^5 G V, b

main() 3 N+ J y K/ B7 o. d2 f{ 9 d1 T' U0 [4 I6 i0 F! B9 c+ z3 U Ulong f1,f2;! n* V) S/ m" x4 s3 o8 G/ A/ ] int i; % J/ r& s D% t, jf1=f2=1;6 O( z) `+ P7 C' O, i7 b for(i=1;i<=20;i++)# @4 |" |) X4 y& K5 x# `  { printf("%12ld %12ld",f1,f2);$ p4 y7 q4 z, o G8 c0 N2 C! D    if(i%2==0) printf("\n");/*控制输出,每行四个*/- y0 L. c7 v7 \0 R    f1=f1+f2; /*前两个月加起来赋值给第三个月*/' o5 x# Q3 ^ M! ]2 i$ e    f2=f1+f2; /*前两个月加起来赋值给第三个月*/; B2 `& X, n- L  }5 v3 q( Z" T# g2 I' k0 }; t* g3 w }" l. r/ q2 o" N" h* s 1 T0 Y4 ^9 b9 B6 G2 I! F2 {" Q 9 Q/ l8 y1 a" _$ x L1 e

遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:21:00 | 显示全部楼层
【程序2】# J# K% N; ]/ i 题目:判断101-200之间有多少个素数,并输出所有素数。 ' U. j6 `2 x' t7 T+ w: Z. z1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,6 t _9 W9 S/ U+ f8 v5 w e. U' E" j       则表明此数不是素数,反之是素数。        & S0 `: Y4 e6 C: p% u2.程序源代码: , X# R0 j- r1 p6 A#include "math.h", G) D p8 H; S n! v7 }/ _, }, v main(), F& H, S/ p3 k; m) W# k( \ { n+ ~3 j+ X: ^8 e! |( n  int m,i,k,h=0,leap=1; : e( u/ x& H5 Q3 L& J printf("\n");! B; d0 |5 \6 }# ?. k: d" _' N- ?  for(m=101;m<=200;m++) ) C5 F; L, p$ q2 ]  { k=sqrt(m+1);9 ]* P( ?3 [7 l# f4 I    for(i=2;i<=k;i++)( H2 u5 p/ B" a3 ?- b      if(m%i==0) : ?6 j2 m7 \0 y( e' X0 v8 L      {leap=0;break;}% G7 t" j: ^- x+ v2 C) W* @    if(leap) {printf("%-4d",m);h++;- m6 {& U; T, C* n5 [1 M         if(h%10==0) & t S5 j" u1 Q" R* t. f6 c! c        printf("\n";3 }- D% g9 P# Q/ Q+ J         }! g, R9 J( Q# [5 X* J4 {    leap=1;; A- _: z$ T2 w& U! g8 ?) }   } 8 g: v' Y. t/ |; k printf("\nThe total is %d",h); ( w% G* l+ {8 e _}
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:21:00 | 显示全部楼层
【程序3】8 z P( F- R# _. y8 ~# w- E( J6 y1 |( y: d 题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。 3 A$ H- f, \, |9 j& ?1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。! r ^: b, `0 r4 p6 M 2.程序源代码: - ], W; I& C9 P5 |* a# xmain(). U/ z: Q/ L& r0 o! A7 n) x {- s( X2 i1 d8 _' K9 P3 U5 L2 f: r int i,j,k,n; 8 x3 I8 i; ]4 E; ?9 p8 ]) Rprintf("'water flower'number is:"); # X" z* h: k0 U3 t# y* C. s for(n=100;n<1000;n++)2 r9 w+ U" S4 t1 @ t6 q$ a- f1 u5 r  { $ I% L7 s3 H1 X: E3 a0 x  i=n/100;/*分解出百位*/( ]1 o& ~* |) `$ {+ ]7 ^# `4 \   j=n/10%10;/*分解出十位*/$ ^; l7 E& f# J; X! n   k=n%10;/*分解出个位*/ 3 t7 k: F1 Q) T/ m* v. v  if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)5 d' d6 C) `7 L& m/ z0 a( u    {, a" t3 K. O+ }& t a2 M u    printf("%-5d",n); 1 F+ |9 I" Y. ?4 j0 D- T! J6 S   } % M7 e. [& b( N1 K9 H4 B6 y. k }9 O) Z" h& Q+ ?- x9 |, c- ] printf("\n");$ v$ {8 {, [: S2 X6 C- `& ~- c9 D }
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:22:00 | 显示全部楼层

【程序4】% T' L" `* r2 q. Q4 h0 \/ k 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 $ [2 V' _# L6 E程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: 4 M, t# e+ s6 {; l. c) h+ v" \ (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。% n7 {2 W. e7 J' p4 q9 b, ^ (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n, Z/ p; x: b+ f7 E  重复执行第一步。+ y: M8 x8 Z) z& p7 D (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

2.程序源代码: 2 q% j/ M( I' d# @4 r3 s" w9 j2 ^/* zheng int is divided yinshu*/. O1 {; n4 @5 G9 z) q1 X main() . ?7 j' V q4 A{ 0 h+ @5 d& e7 D5 P& c" aint n,i; ! K+ @/ M p/ b% M. p/ U; J1 L6 nprintf("\nplease input a number:\n");+ t* ~0 r" L! F7 { scanf("%d",&n); 6 l% M( m! D, d+ W V+ S: X Dprintf("%d=",n);9 u, z$ X, h1 _- O. T for(i=2;i<=n;i++) * h1 {/ X3 L' S* u( z o, y6 x {# W) ?! J# x: N) j/ H6 ^   while(n!=i)) l) n* W' x2 @! q J   {' W2 r% g( t, ]8 k% S    if(n%i==0)6 r& U1 |. r( q/ K8 |0 W' a    { printf("%d*",i);' z R' f. l( T+ E" z     n=n/i; ' Z5 V, M0 E. s3 k& h P( H   } " @( S8 H, X7 L% z6 b2 }   else( m8 M* P9 h, a2 Z7 O% z: W( V& W* t     break; 2 ~6 u9 h! M7 f  } 9 N" T5 e4 F! O A6 F: x. i* B}1 H6 ]9 R1 q: e8 `# ?' P$ g/ x printf("%d",n);} / _$ |- |0 C8 l8 I- V

遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:23:00 | 显示全部楼层
【程序5】 F5 w- ^2 r7 Z1 \ 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,8 B0 O' q0 B N, [0 u5 @, Q    60分以下的用C表示。 : Y( A, E* b& l+ z7 ^! }6 a1.程序分析:(a>b)?a:b这是条件运算符的基本例子。; H, m% N/ N1 l% S- \1 E( F 2.程序源代码: $ ^( d J% ~! @" d9 e( y9 {main()( y7 { q9 K8 _+ p5 L' T { % m2 z9 g- `' G; ` int score;9 w: W4 W! p/ C# m0 U7 I  char grade;- v# u2 m* u- k8 |1 B* s( g( Y  printf("please input a score\n");0 I. q: r$ R! K9 {$ l  scanf("%d",&score);! w7 L1 Q# \3 F4 E5 f  grade=score>=90?'A':score>=60?'B':'C'); / f; r: V; G0 y* M/ }3 r printf("%d belongs to %c",score,grade);0 \8 ` I8 m% W. q }
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:24:00 | 显示全部楼层

【程序6】 / d: ^4 f- E o' N2 W6 O/ a1 E$ V题目:输入两个正整数m和n,求其最大公约数和最小公倍数。0 f7 u* l q+ S' } 1.程序分析:利用辗除法。

2.程序源代码:# L; U( s& i; Q9 c: Z3 Y* q& H main()+ P. G2 x6 v4 x$ p. V7 i: k T { ! c, e* ?0 @) F/ y int a,b,num1,num2,temp; - i$ W. T, x5 B printf("please input two numbers:\n");( \' `( h+ \2 i4 l  scanf("%d,%d",&num1,&num2); + m5 x1 g; d: m. V if(num1  { temp=num1; u$ v! `9 |, k. w% F/ B7 s X g9 t   num1=num2;  * t* D% m, i* | o8 y9 p- o0 }  num2=temp; + s) l) r4 r2 e }6 O* b. m, ~7 a4 s7 X a a=num1;b=num2;8 l% k' i6 [6 M! u while(b!=0)/*利用辗除法,直到b为0为止*/$ N9 K/ J/ C3 S, M% t, ~. u% W  {2 y: \% F5 {# n; ?4 J* g' `4 `* ^   temp=a%b;& N' ^: Z- l( T; b# _3 P4 r   a=b;' V7 @7 C4 Q% L   b=temp;# U) e* L$ O! e! s* i5 U8 [; I  }# j0 ?/ d& P8 N( h! ^2 K7 s printf("gongyueshu:%d\n",a);6 X4 o6 l4 ?! \# _# X! a6 K: _ printf("gongbeishu:%d\n",num1*num2/a);. K7 y; i3 S2 X( Y/ h3 N }% a. Y: D% q9 W8 w9 y8 Q

遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:25:00 | 显示全部楼层
【程序7】. ~+ m6 t1 q& Y8 {0 R1 I 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 Z$ ~/ H7 W& e, N) d* k1.程序分析:利用while语句,条件为输入的字符不为'\n'.6 `- ?+ y+ \" |        ) \& {3 G( o. Q/ P. [2.程序源代码:$ a' a+ A6 A& d! C #include "stdio.h"# A9 G( E6 g: s6 H! D w main()# f X0 W( u) {5 P6 T' v& H {char c; 7 J7 `6 ~+ _+ O) ]2 M6 r int letters=0,space=0,digit=0,others=0; : ?0 Q- j* ]- y, } printf("please input some characters\n");- ]1 O8 `3 L/ H" }  while((c=getchar())!='\n')/ M+ t! v" _, H3 x) z, e  { 2 \! C5 f5 j* K! f if(c>='a'&&c<='z'||c>='A'&&c<='Z') D6 N9 ^. j; `/ G   letters++; 5 e3 [' _1 R' t+ a else if(c==' '); [ G" |* m7 y: v5 k   space++; 0 P7 K4 E% z0 ^% `: w/ l( q   else if(c>='0'&&c<='9')/ [+ C7 Y8 x/ s/ D        digit++; ( ?. H2 E* f0 e0 z! ~     else 8 D4 h1 {6 p, }5 n c, P       others++; 4 v l& y# K7 }}! q' q7 I8 R! u- @; H/ I: W, ]9 m printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,space,digit,others); 3 o. D9 g& E% U( G}
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:25:00 | 显示全部楼层
【程序8】% j: |2 _- ^" m. I5 `. r- Y/ N6 v 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时8 F' b6 ?4 h4 |, U) |* B U8 A; o: W    共有5个数相加),几个数相加有键盘控制。 ' j$ e, |) n4 _* X2 i( U5 a1.程序分析:关键是计算出每一项的值。) H7 q+ e a8 e; \ 2.程序源代码: 7 k9 t- P$ h( G; L/ imain() ! z# a$ B- k ~/ \+ t1 ?{) W* _" m* U, _, _  int a,n,count=1;- U9 s# l# |' e) A- X9 }# S" T  long int sn=0,tn=0; ! R! \% Q0 V/ r; K# l9 B printf("please input a and n\n");" F* F( h" V' U  scanf("%d,%d",&a,&n);) S7 H, U" X9 [- _+ k3 r  printf("a=%d,n=%d\n",a,n);3 [9 Y# t3 H; r# r5 d/ i6 z  while(count<=n) " v2 ?( y. O$ h. u" R {2 q1 S$ Z J" D9 q, t6 o6 E   tn=tn+a;8 M) `1 H, M5 j( e" X- ^8 w   sn=sn+tn;0 Y( |; ]0 Q0 Q* z, R3 M6 [' q   a=a*10;) G* w+ K) T* f, J   ++count; , c$ c! Z! \0 \1 G }7 y& @0 t0 a/ s \/ z1 {! D: J/ S printf("a+aa+...=%ld\n",sn); # O! L- H e' M3 _: S3 h/ ?( v}
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:26:00 | 显示全部楼层
【程序9】 : t* |1 ^1 X1 T% D& ^% ], b题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程 ' G2 E& K/ |, F; n1 |2 n* T   找出1000以内的所有完数。 ( T* M2 t8 U7 Z* N5 G1. 程序分析:请参照程序<--上页程序14. & h8 V0 @. F( t+ T2.程序源代码: 2 r7 Y( }" y! h* A# ?, B( {main() 0 K& v& e5 ^7 S& u0 L$ F* r{( U% L( T, X3 f, Z static int k[10];7 O; j" O5 L2 J( R2 L; P int i,j,n,s;7 S( N+ Y! r: y& G for(j=2;j<1000;j++) 5 V4 U7 E' k( {- c' a/ X" |7 D" G v9 F5 ~ {1 x; e( i3 Q! G, `; b, y U  n=-1; , z4 d2 a4 b0 w" m# H- S/ w s=j; ; \% F0 e1 u6 D- W  for(i=1;i   {3 m) @3 `/ o, o+ x3 ?    if((j%i)==0)7 J% U& Y+ p) j4 ?6 ?    { n++; . A ]5 \" M6 k, Y    s=s-i; " Y8 t t: Z6 Z! t0 z    k[n]=i;- W9 Z5 S5 k0 f/ s    }9 L3 U' F0 V7 v7 w# G7 q   } l) Q# _- P/ j; Q( E  if(s==0)0 P1 y; T9 V I' h  {4 Q, U/ s' d8 u( U6 u0 m! b* O: j  printf("%d is a wanshu",j); ' w9 I! C$ [( F4 i3 K x( i2 Z+ r for(i=0;i  printf("%d,",k);4 \, D k- }4 V9 P2 y  printf("%d\n",k[n]);. E. W9 _7 F% H6 d& q1 Y+ X  }" N& T3 [" I/ t } 1 D+ A2 d; v0 I) I; X6 ?0 t}
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:27:00 | 显示全部楼层

【程序11】0 q, A' H" s; @$ J 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?( h+ Q! r5 O" M) \- I1 ~ c+ d 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 8 _& G' k8 L4 J" L      掉不满足条件的排列。 ! v: s+ @6 c6 B2.程序源代码:- _3 D0 C; V3 I( _* H: T# _ ^. } main() 9 k& F1 y. M1 {/ j; A$ L{ + J0 c/ R K& @4 T8 P. w7 L# gint i,j,k; ! _9 p2 ^, M/ I" nprintf("\n");6 r0 D4 h$ g) b/ v" T8 A for(i=1;i<5;i++)    /*以下为三重循环*/ x9 W( [" ~0 F. e4 r for(j=1;j<5;j++)  ( s. P8 T! ^4 r' Y  for (k=1;k<5;k++) ( A- W) q$ y/ o5 I   { 3 H% P [7 |& G7 T: e2 ?8 k) Q    if (i!=k&&i!=j&&j!=k)    /*确保i、j、k三位互不相同*/ G* ~6 s0 k: l; A7 `7 s    printf("%d,%d,%d\n",i,j,k); 4 z) o7 |% [! E/ b, q x   } ' O/ Q8 i2 a0 M, W" N7 e}

5 o' E$ A4 {& {5 K( C 【程序12】 ; Y, ~4 a) d+ t3 z+ d# O题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 0 {% ?9 C6 m( N) `3 a8 m/ Z# N   于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提3 ^: J$ b3 T# Q$ M+ U, ]    成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 a7 ]1 z& m' t, ?" w9 x   40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于" |- g' u* O/ C* t8 O    100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? ; ` ^% s- @ u: {1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。      ) c5 t* M- K( T( }0 b 2.程序源代码: # L" V, i8 v( ]. Emain()" X7 a f3 h9 @ M2 x { + |5 E. {5 {, flong int i;3 J d( E7 Y% {7 k int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; 5 N9 ?5 t, q" e6 kscanf("%ld",&i);0 h" _8 \/ r! z+ I bonus1=100000*0.1;bonus2=bonus1+100000*0.75; , H& U! t% M. @! G' F: u3 G" Pbonus4=bonus2+200000*0.5;! S" k- A/ |$ }' I bonus6=bonus4+200000*0.3;+ t1 s) P6 j- I- J" a: k/ F/ D, \ bonus10=bonus6+400000*0.15; 9 Q, P0 n2 Y' h, G9 T0 t if(i<=100000) & G: u5 K# L" c7 }* @  bonus=i*0.1; , m$ q7 K" N6 E+ u. a) q else if(i<=200000) : {+ z8 k1 s: s* u3 i     bonus=bonus1+(i-100000)*0.075; * G4 }# J9 ~: x    else if(i<=400000)8 Y) c! }; O% l8 r k5 i4 b: v         bonus=bonus2+(i-200000)*0.05;4 t2 j* q$ z" p4 \( g; ]9 E        else if(i<=600000) t" Z) \4 ^# t' u1 L# A, N/ O4 F            bonus=bonus4+(i-400000)*0.03; ! M0 j7 C- T# {- z4 G5 D2 L          else if(i<=1000000) ~/ Y7 {% m0 o. C3 ^" l, t              bonus=bonus6+(i-600000)*0.015; ' s n. n, ~) n' m1 y' f3 o7 x             else 6 G, ?$ l, [, e* c8 Z, e              bonus=bonus10+(i-1000000)*0.01; 4 }- z' _# @3 Z5 Qprintf("bonus=%d",bonus); ! D0 F2 V6 a6 X' I3 G" Y} 3 K% h$ o2 [, z, r$ S `4 u M

遨海湾-心灵的港湾 www.aosea.com
您需要登录后才可以回帖 登录 | 入住遨海湾

本版积分规则

网站解决方案专享优惠-3折上云

QQ|手机版|小黑屋|遨海湾超级社区

GMT+8, 2024-11-22 08:01

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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