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

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

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

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

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

×

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

! k0 c3 _) D2 O3 t& }# E" V

  Svchost进程概述

4 g, Q ^& x" I$ _) j5 p

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

: e8 j6 v5 ?9 z( {

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

3 f8 i0 r3 ]3 C" t/ D 7 s5 C1 y* F: u4 M j3 z s

6 |; W5 ?; X" l8 b7 S注册表中的Svchost & y3 D& r# `- C/ ^  实际上,Svchost只是作为服务的宿主,本身并不实现什么功能。如果需要使用Svchost来启动某个DLL形式实现的服务,该DLL的载体Loader指向Svchost,在启动服务的时候由Svchost调用该服务的DLL来实现启动的目的。使用Svchost启动某个服务的DLL文件是由注册表中的参数来决定的,在需要启动服务的注册表项下都有一个“Parameters”子项,其中的“ServiceDll”键值表明该服务由哪个DLL文件负责,并且这个DLL文件必须导出一个ServiceMain()函数,为处理服务任务提供支持。

1 A5 q% r! Y+ H4 O* |4 k

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

- Q5 G# w1 i3 a x% b* k

  Svchost进程实例讲解

$ E' E8 k$ r8 T* K" D( o

  要想查看在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)服务等等。

. w9 Q' ]& v5 L! W b3 O" a$ @* F' G3 o

图2 Svchost的服务列表" j* c/ j( p' w- Z) w   这里我们以RpcSs服务为例,来具体了解一下Svchost进程与服务的关系。运行Regedit,打开注册表编辑器,依次展开[HKEY_LOCAL_MACHINE\SYSTEM\

7 ]- X' \: [9 j6 l( [# s

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

9 X. h+ F. q f0 K" z( j5 x

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

) o. v0 i, A' B

  Svchost进程木马浅析

" p0 J% V" V7 {, T" t

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

8 V6 m! |0 Z) o5 q: a" A

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

6 u. a5 \8 ~ e5 }

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

$ T3 p6 y3 d" U' m

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

1 y% Z S; G# V4 I; W! s

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

- o0 ?& {; H! R1 a 9 z9 O$ l: j' l @3 B

Svchost进程中的模块信息+ |/ _6 J- P" a4 _$ }! \' x   提示:在Windows 2000中,系统的Iprip服务侦听由使用Routing Information协议版本1(RIPv1)的路由器发送的路由更新信息,在服务列表中显示的名称为“RIP Listener”。

' v; N) M9 s7 f- j7 ?" L5 B

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

+ r# T9 S2 B/ y5 P" d

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

/ \+ U5 @' ?' H2 r

【程序1】/ [' ^7 v( x! K& f, N 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

4 x; E) V: w* C$ Z

1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....) g. r7 g. w2 K: L9 R' N, Q8 E6 W 2.程序源代码:

1 r' a5 c5 d" P3 f

main() . B) x# z8 r3 W0 {{; G9 G7 a2 O5 G long f1,f2; - x! E5 s% o6 t/ S7 z5 N# Zint i; % m% U( ~. w1 |, Z+ y( w7 t, of1=f2=1;! e0 r5 U& {4 h& V2 w6 O for(i=1;i<=20;i++) 8 j4 M- c' N7 R { printf("%12ld %12ld",f1,f2); & O3 D$ h* R7 _3 b3 Q+ f- d E) |   if(i%2==0) printf("\n");/*控制输出,每行四个*/" Q: ^6 X0 }3 m( o, F    f1=f1+f2; /*前两个月加起来赋值给第三个月*/ ) k. J% I2 v# K: I. C   f2=f1+f2; /*前两个月加起来赋值给第三个月*/4 C& `( a3 ]$ M$ R# e: ?$ y  }- M' Y- L! }4 q' a6 I+ S1 r. @ } r, L$ y! Z, E5 [) M - l6 V% t( ~' r" i6 y % K- I M* G6 w* O

遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:21:00 | 显示全部楼层
【程序2】 " n- ]% A8 z) Q. `题目:判断101-200之间有多少个素数,并输出所有素数。! i7 y5 V$ h9 e$ J$ Y+ c4 d 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,! K$ T+ z. f5 _7 n# B       则表明此数不是素数,反之是素数。        $ s3 V. j- M4 h z4 _& m2.程序源代码: + q0 J, K" O+ [2 \! c# b! M$ u0 h5 i#include "math.h" 5 y; h1 {* `: S4 S, | x1 zmain(), R1 Y7 B2 o8 I {) Z2 q& N( `" d- S; q4 J) n  int m,i,k,h=0,leap=1; 9 I; o: H7 Y$ K+ K5 ^ printf("\n");- c7 q/ {( e2 z5 y; P! n  for(m=101;m<=200;m++)$ O2 K9 V2 P# B+ ]3 W   { k=sqrt(m+1); h! T! X9 n# e    for(i=2;i<=k;i++) # F) p6 ]& {3 |2 q     if(m%i==0) 5 w6 l+ L, a$ x" J7 P5 N% \: r      {leap=0;break;} ) ~+ e- T8 g1 d! Y* G! l( M& H; _   if(leap) {printf("%-4d",m);h++; , N5 p- ]5 I% p        if(h%10==0)+ L% D: Y4 X; c' _, v: i i         printf("\n";" M: q2 [4 _2 X' N0 l6 }& Y* S7 a         } 8 t6 \! w9 y/ g) t7 {' a   leap=1; * ~" Q9 q( a5 A+ D ^& M  }3 `. o) h1 U" N) d  printf("\nThe total is %d",h);- e5 p2 a' d1 s, d }
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:21:00 | 显示全部楼层
【程序3】 1 ~" r$ a& ^" Z& J( ?题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。 9 A9 P8 p5 v9 ~* C2 f" m7 @1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 1 \3 R* p" {( V- d3 n- q+ u2.程序源代码:) @& Q6 w3 ]/ J main()/ _# r: K: s ~* g- x6 i { & K+ e0 s6 m$ a$ O# Sint i,j,k,n;. T2 i$ \, H o9 T- M+ ?3 v printf("'water flower'number is:");( s2 I$ D) _: b \  for(n=100;n<1000;n++) # a; W2 i3 A: B& `% |" Z {$ I/ Y3 [& ]. |+ L2 V   i=n/100;/*分解出百位*/$ _4 r J) g- U6 a   j=n/10%10;/*分解出十位*/ 7 c! R( w' A Y: Z' p8 c  k=n%10;/*分解出个位*/ , b' q2 j; U) q: w. H+ @7 Y  if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) 3 @ Q- D1 n _. ]   { , \/ q9 v( K0 i$ z5 ^   printf("%-5d",n); 3 L! i! L C3 a4 t0 y, J, s   } 8 e+ u+ q' J/ O9 }( D' r4 D }- [# x/ r5 _2 {6 _6 G printf("\n"); [& ?* E8 v1 \% H/ I }
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:22:00 | 显示全部楼层

【程序4】$ f2 p2 {+ n7 [ 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。$ J$ Y$ F) z7 \( Y! _5 r# O/ c( \ 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: $ B9 Y+ b1 }0 @& r (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。8 G9 _3 T$ o. e; A" S (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,. S4 H5 K+ r+ ]3 D8 p; T4 F% C  重复执行第一步。. x7 {' O& w( h/ ^# n" s (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

2.程序源代码:& g: d6 O$ u0 V* R# X /* zheng int is divided yinshu*/ ; y$ C5 R1 z- h) t* k$ tmain(): i n; U' J7 M { 0 o& `* P* k+ h7 k! R7 r4 }3 ?. Lint n,i; # W0 K$ \% n0 A- Z( Bprintf("\nplease input a number:\n");. d, B* \9 \$ N( X! i7 a scanf("%d",&n); ( j5 s4 ^" s- w1 l/ Y$ ?: Eprintf("%d=",n);- o' n3 ?- l1 ^- l) ` for(i=2;i<=n;i++)& r3 I7 E7 r( a4 C! Z2 D. i  { ( W; y) R# |6 t: }  while(n!=i) , K+ M# n% f* G; W' A  { + z- k/ L7 o& X. Y# i   if(n%i==0)' }5 q# |8 n* x/ u# W0 p    { printf("%d*",i);8 s. S' T- N) Z. H* g, I     n=n/i;3 [" c1 S% w7 Y: E+ O% ]    }7 a3 Z; d( c3 f) d    else ' S+ V7 \, E1 w/ B" X    break; 1 E( [+ @) E: h& I7 d. u+ r! t+ v  } 2 c: ^! f% N! e* R}( O% M3 Q/ Q: b printf("%d",n);}1 R E" h1 U$ ]& P+ b5 D% x+ J7 s

遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:23:00 | 显示全部楼层
【程序5】 d8 M" O. Z/ L6 }7 R' w/ {题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,6 R9 y! A* f8 h R/ D c$ X. R    60分以下的用C表示。 : ~8 J1 b$ W7 W; q1.程序分析:(a>b)?a:b这是条件运算符的基本例子。 5 H. J& K3 ?' o' D2.程序源代码: ^1 z, ~2 f/ w4 w0 _- _) \main() / {6 Q! g) l) D! k/ p{ / R P+ K) D+ D int score; . l0 @' C3 c- ] U6 Q! X: x& H; @ char grade;$ C; z) E3 o: E w" J  printf("please input a score\n"); 2 h; y: D$ ]9 o! j. b scanf("%d",&score); . w# {, \. \4 L grade=score>=90?'A':score>=60?'B':'C');6 [# D/ v8 a3 e2 V3 H4 Y O1 J: Y7 H  printf("%d belongs to %c",score,grade); : n8 t: p7 c1 \1 a. t3 n}
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:24:00 | 显示全部楼层

【程序6】 / P2 W% H9 Q0 ~& O X# {$ z5 L题目:输入两个正整数m和n,求其最大公约数和最小公倍数。. `/ l, z7 B- `' A+ M" M- U: ~ 1.程序分析:利用辗除法。

2.程序源代码: * X* m. T) E [main() 8 I0 x# _7 I* `- {" O0 S; f( q{* t n) v: f2 N! u& l  int a,b,num1,num2,temp; ) c5 Z$ N6 g$ l' o! x: H printf("please input two numbers:\n");, Y: x" p( Y. e3 N6 o7 j* Q: n  scanf("%d,%d",&num1,&num2); 7 r9 I/ ^ f0 { f# X4 I if(num1  { temp=num1;9 O) t8 c3 j+ a) T) a! r1 i   num1=num2;  0 | }: O2 W( ]: c" j8 b: F0 R  num2=temp;0 ]4 v: B7 ^2 [  } 8 N5 F6 b0 A/ a' [a=num1;b=num2; ! s1 f# \ t; ~/ n3 Jwhile(b!=0)/*利用辗除法,直到b为0为止*/) E3 d2 ]. \. o$ W: _  {! Q* ?( I, T8 b. W) \0 x3 I5 I   temp=a%b; / i2 R+ M. F2 v/ \ ~  a=b; 3 d( i% [, G$ J/ e  b=temp;' R8 q& H9 m! T O, k6 j6 i. _  } J; G( Z1 u" }7 r4 D" q' Jprintf("gongyueshu:%d\n",a); 0 w9 f" w2 c9 C0 U* h, N/ V. {0 mprintf("gongbeishu:%d\n",num1*num2/a); * D& E; X. _6 w4 ~} * _# r4 m8 x, {- {

遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:25:00 | 显示全部楼层
【程序7】2 ~9 d7 }1 O9 w _- B0 j* A' M 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 : a! S4 H0 {4 o1.程序分析:利用while语句,条件为输入的字符不为'\n'. - W5 F# a+ }4 g7 g, V      & b% b) a+ a! ~( t% t7 L+ j0 G0 R 2.程序源代码:4 V/ x% e c& j #include "stdio.h" + j# z* n9 K# w, E% C% \9 ?8 R6 U1 P3 Umain()- z+ R$ l1 d+ @, G$ R4 ^ {char c;+ \# X, g% O' B- D  int letters=0,space=0,digit=0,others=0;0 g$ W5 c) j; {3 C' x  printf("please input some characters\n"); + u& t% R( E D+ n: T while((c=getchar())!='\n') - J; e/ _, e' ]: v# L: p( g { # P( x$ {9 f: F if(c>='a'&&c<='z'||c>='A'&&c<='Z') 4 R9 J0 ^) R* E$ B, u* c; D  letters++;6 |9 w& q5 d/ D* D1 o: v. x  else if(c==' ')& d. n! |/ \) G5 {8 H# z3 ~3 e   space++;/ K$ k$ q# {+ d7 K9 B. C* V, C5 U. n    else if(c>='0'&&c<='9')) N- y% w- F W( O( Z1 G& @        digit++; $ I- @. Z! J% g: {8 @     else& A. [/ }# A5 @& i        others++;( Z/ O; F/ R1 X" O; |* {- w } z& Z. |* g& I t% }: ]) h printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,space,digit,others); # B6 G* C# g- `( ` D. `, D}
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:25:00 | 显示全部楼层
【程序8】( j9 N5 Y: L$ L4 F 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时 2 E4 p. h' X B   共有5个数相加),几个数相加有键盘控制。 8 R0 U, a j* S" a( s, K1.程序分析:关键是计算出每一项的值。6 [+ d' Y+ e$ s9 x1 A- c+ d 2.程序源代码: $ a- V/ m, |5 C* }5 l- Tmain() " c# O9 a1 K: k7 X" s9 H{+ q- ~4 T7 t+ i _5 M8 b% K6 C  int a,n,count=1; 9 ~# v7 s" } | long int sn=0,tn=0; 0 ~! J d! F, v2 V) a& x: O printf("please input a and n\n");" J A5 R! g3 c4 { g  scanf("%d,%d",&a,&n);7 F1 F& |. b. z$ ^  printf("a=%d,n=%d\n",a,n);- d' [0 C6 i- F) d  while(count<=n)' `% D' w' c" C$ b+ r  { % D5 n. G# b7 v" D. h6 O1 D  tn=tn+a; 3 r; D% a% F5 f. Q! g% l8 s+ _  sn=sn+tn; 6 x% i6 _5 ?0 L) R$ T! n; |" k  a=a*10; I, J$ e; ^& ^" V# @( m  ++count; . n9 C5 S: g! q( U! ?- j6 E3 O3 b8 ~ }% ^2 x& h5 v/ i9 ]& B4 J: u printf("a+aa+...=%ld\n",sn); 9 C* \1 L/ |* b4 Q}
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:26:00 | 显示全部楼层
【程序9】1 t/ ] i6 w; n$ ^6 N 题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程 % ^1 }$ x9 z5 J- ]$ ^   找出1000以内的所有完数。* z; O7 H$ Z! A) u5 x1 q 1. 程序分析:请参照程序<--上页程序14. : s* L* D( L( m6 M& f 2.程序源代码: ' E' l0 ?5 a% P4 e2 {0 i. {main()' J: Q% n2 I9 W1 M( y {: t: c" a6 }1 i6 Z( c/ y static int k[10];+ c8 [2 i) F' f0 u int i,j,n,s;; k2 y, T5 C. Z* N for(j=2;j<1000;j++) ! h, c9 C3 u }0 |; } {! D2 |# x2 l6 \4 y  n=-1; 2 h- j4 Q8 K7 P s=j; 0 r2 Q4 {3 u n, D8 _  for(i=1;i   { 8 i( b3 R1 O$ [   if((j%i)==0) " l3 k+ y5 b7 D4 d   { n++;! u0 A) |( i& R     s=s-i; & J) ], ?, v0 A. f2 G7 n2 [( D    k[n]=i;2 L8 D8 \' y+ O. x) n z! Y- c    } 6 S9 ^! v' n- }: _* l! I  }+ r! A0 r3 f2 n( \  if(s==0) 7 g0 P* v% _2 ? { ! {3 v. y' i: G printf("%d is a wanshu",j);/ z: g0 ^* M$ a, x1 o. ?  for(i=0;i  printf("%d,",k); - R' ]4 d& ~3 ~5 _! ^ printf("%d\n",k[n]);" s7 \' A/ z& g9 m0 Y1 H& ], Q  } N5 c+ X1 H( \, F} 1 A) I* H9 `. y: X2 x9 ?}
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:27:00 | 显示全部楼层

【程序11】$ V8 j0 O6 G8 t7 v8 Z( f) X 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 6 S1 K% L/ ?0 W% D2 R1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去' J6 k# v5 c$ N- r       掉不满足条件的排列。 7 L3 l$ u7 S4 S( k# f8 e* e 2.程序源代码: - A/ Z, E# @/ u& H3 s: fmain() ( K! C+ V" G" b{4 G/ r# |) U, N6 T [0 \ p int i,j,k;) \* R; q6 T8 @- A printf("\n");( ]3 K2 o' \7 r for(i=1;i<5;i++)    /*以下为三重循环*// o' I/ l4 z# A$ t: a, i% @+ n  for(j=1;j<5;j++)  . l2 T; j2 G# H4 u- c  for (k=1;k<5;k++) ) j7 @/ I6 b0 K6 g; U# I   {1 L" C5 Z: n8 ^+ ?3 w& V3 g     if (i!=k&&i!=j&&j!=k)    /*确保i、j、k三位互不相同*/ 3 f9 K4 |* G' S( F# e3 |    printf("%d,%d,%d\n",i,j,k); ) g; m# \ N; O0 @! t* p9 O R   }0 u& O7 E* j- t1 L1 O( k }

& j4 P) S& Q2 m) V# O【程序12】 ! ^8 D! \5 w8 v( C% E5 T: F题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高* V) Z* S/ r9 Q7 b! Q- ~3 [- p    于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提( Y* F& _; O3 y# w; P    成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于! F6 e: M9 q2 x ^    40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 & d/ Z B2 Y5 F8 A. f0 J5 [   100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?$ k8 ?" ~, ]: I% o2 @ 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。      , s1 O8 q7 ^8 |, c 2.程序源代码: . d% c; t7 j1 [+ Dmain()4 L# `: T# Z. ` {4 @/ U- x5 d! z5 g( M7 I long int i; + ]* f$ ~2 `: j" P$ { T" Zint bonus1,bonus2,bonus4,bonus6,bonus10,bonus; + A" R8 W; ?+ v3 V: X2 Fscanf("%ld",&i); ! k0 ^8 |# Z4 @( Wbonus1=100000*0.1;bonus2=bonus1+100000*0.75; + E' `1 p7 h* k0 mbonus4=bonus2+200000*0.5;, Z4 k* b O( Z# u5 u! r bonus6=bonus4+200000*0.3;. H/ P' P& O( v* X# ^ bonus10=bonus6+400000*0.15;% r( {# E, a5 ?/ `$ l3 V  if(i<=100000) " n' A) h5 M, r, Q  bonus=i*0.1;/ M0 A9 q6 K& W  else if(i<=200000)7 Q* I; e" g+ i) |3 A) B7 u      bonus=bonus1+(i-100000)*0.075;0 C y, Q$ U' M0 y     else if(i<=400000) 6 d- ]! M9 `/ b( ]        bonus=bonus2+(i-200000)*0.05; , L: \& z: y# \: s3 S       else if(i<=600000)+ T- d9 d9 g# t7 t+ F/ }            bonus=bonus4+(i-400000)*0.03; ; U& F, D5 Q7 W5 P7 |          else if(i<=1000000)7 g9 g" V8 Y$ o1 d/ K- K               bonus=bonus6+(i-600000)*0.015; 8 U* t8 ]: o+ L6 x7 U             else 9 B+ R) W" b# h# ^% C) _              bonus=bonus10+(i-1000000)*0.01;7 J1 P5 R% J( V7 m& a9 W printf("bonus=%d",bonus);& }" Y: s0 B( A8 C7 U) W3 C } # Q9 }$ f% G0 M! @4 S9 F

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

本版积分规则

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

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

GMT+8, 2025-1-19 03:16

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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