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

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

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

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

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

×

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

y) x8 Q$ l2 c# {! G, b; u2 c

  Svchost进程概述

, G3 s6 [( h4 A' Q/ P3 E! w

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

/ S/ D( l, z* t2 I+ p

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

' X8 Y" V% i8 \# C& Y( v 5 W. q, g4 @' C: m, @8 r4 m0 B

$ L1 o( u1 v& h6 u8 B' T$ W 注册表中的Svchost7 y1 M0 r# }5 _, O   实际上,Svchost只是作为服务的宿主,本身并不实现什么功能。如果需要使用Svchost来启动某个DLL形式实现的服务,该DLL的载体Loader指向Svchost,在启动服务的时候由Svchost调用该服务的DLL来实现启动的目的。使用Svchost启动某个服务的DLL文件是由注册表中的参数来决定的,在需要启动服务的注册表项下都有一个“Parameters”子项,其中的“ServiceDll”键值表明该服务由哪个DLL文件负责,并且这个DLL文件必须导出一个ServiceMain()函数,为处理服务任务提供支持。

2 R' z) w" h1 K

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

( M5 B8 ^; q/ S+ r

  Svchost进程实例讲解

' o1 k( `2 ?; ]% O: c0 v4 L

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

9 l9 k: W3 h, O5 `1 x 1 o) G" z" ~. Y; V

图2 Svchost的服务列表, O% N- F- V1 i$ t   这里我们以RpcSs服务为例,来具体了解一下Svchost进程与服务的关系。运行Regedit,打开注册表编辑器,依次展开[HKEY_LOCAL_MACHINE\SYSTEM\

( E3 s1 h I1 C& [

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

v" a# G% d+ Y9 s# x* ?

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

+ b! W0 R- |' f" G+ s' e

  Svchost进程木马浅析

. Q& A: s- c( z

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

& E2 x& J, y7 B' q/ x* K

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

2 y6 N' K" U" `4 z* z; T& F7 Y

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

$ ?( ]/ K0 M0 e. S5 s7 i

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

0 v/ q8 v+ O/ q/ W8 r! i }1 z

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

% g- N) e( Z7 u $ e: L, n/ U3 c( H# `5 O: e

Svchost进程中的模块信息1 _; Z4 v v6 P+ O; ~   提示:在Windows 2000中,系统的Iprip服务侦听由使用Routing Information协议版本1(RIPv1)的路由器发送的路由更新信息,在服务列表中显示的名称为“RIP Listener”。

5 u* F0 l! A `+ F, y" ?

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

1 s$ Z: j% V C! S2 G" g( \

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

' R6 Q& `; \# W; M0 ^! n7 A8 W2 v

【程序1】 4 P6 N$ E( q1 Q4 e: d3 G8 P7 m题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

9 W( D# h4 v, u3 }

1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21..... s2 f* L) L" _; c: p) g. E$ b 2.程序源代码:

8 Q @% B/ l7 X, ~4 {6 g

main()0 L8 d" e/ {6 b9 d3 T' h8 a { 5 _% T' W: x0 H4 I9 x6 Nlong f1,f2; r/ e S% O- E1 O0 Nint i;( z: W9 u$ ?% A5 |6 y f1=f2=1;2 q7 B( y0 `4 o8 y0 V* x4 ~5 \ for(i=1;i<=20;i++) 4 @& [/ ^) O: Z, ^0 e { printf("%12ld %12ld",f1,f2); : i0 n4 m& t: \& I- D   if(i%2==0) printf("\n");/*控制输出,每行四个*/ 2 R6 m( F( V0 T* T2 ]4 ^   f1=f1+f2; /*前两个月加起来赋值给第三个月*/ 0 e3 i* J7 w! V4 |& ]" [: J/ Y6 K" Q1 h   f2=f1+f2; /*前两个月加起来赋值给第三个月*/ ' u7 Y3 G7 `) m# ~3 U }% R* L% b/ S9 A6 Y/ R+ [ } ( D, A/ a& {( B# U& g8 ` 2 Y2 [# H" _! I/ N" @' S' W5 w # X! c+ E6 v) E( n

遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:21:00 | 显示全部楼层
【程序2】: w# s1 l8 j7 R( c- N; L4 W5 D 题目:判断101-200之间有多少个素数,并输出所有素数。 8 `, @# |( A$ J+ g2 [1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 0 o$ s/ ^* @+ N      则表明此数不是素数,反之是素数。        # K4 ]8 q/ c+ S' h2.程序源代码: 4 Z. Q6 Q) l1 t, W4 L7 V0 K$ J2 |8 B#include "math.h"" a3 ? |3 _8 {1 q& L main() ( Y5 m& q( a8 a# u( \3 f$ ?{% r, d9 \) a* \& q. e! L  int m,i,k,h=0,leap=1;6 `5 p" d0 Y0 v- ?- y  printf("\n"); & O s& l! c5 Y6 q# H4 u! c4 t* B for(m=101;m<=200;m++) g, [/ }1 {( U2 U" b  { k=sqrt(m+1); : R# K* g- O, M, q$ r5 N/ D   for(i=2;i<=k;i++) , }% o- ~6 h, U7 @# M     if(m%i==0)& t* r4 B! G& {8 k: b, N       {leap=0;break;}: h# t% p( { A- K7 `# S' u( ^& @    if(leap) {printf("%-4d",m);h++;9 G- F6 k# c: {* M         if(h%10==0)1 a- O+ G1 y0 X# s         printf("\n";4 f0 {! a! P* ~ ?( Y$ B         } 5 z/ Y9 s0 z/ \; R   leap=1;, b3 S3 l, L7 c5 f   } 1 p( C5 ~, x1 u( z4 G; ~( \. Q printf("\nThe total is %d",h);/ ^: B! G; b- l3 `4 l }
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:21:00 | 显示全部楼层
【程序3】+ X& X0 Z! L. h; @5 F 题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。 # |$ o: u/ k' w1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 ( X: M J0 k5 w( @# C- r3 ?" g3 T0 w% A2.程序源代码: ! s1 m4 }5 Z7 t8 ~# ]main()+ Q! A9 B* Q8 a; y: I' `' w { t/ y1 h S8 Y3 A7 A# \$ C: Y1 S# |5 Cint i,j,k,n; , Q% {- r9 U6 B5 T+ g2 e3 jprintf("'water flower'number is:");% O% {, [ \1 m! h* d9 D  for(n=100;n<1000;n++)3 |9 B/ Z/ x& H& b+ c# D k$ ? {  { / a. P6 t: @ }! d5 r3 a; ~: ?  i=n/100;/*分解出百位*/ 0 i* S- |3 v: H  j=n/10%10;/*分解出十位*/9 S# I8 h# j/ d% l   k=n%10;/*分解出个位*/ 4 R# G7 R; }' i  if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) 1 P# S- m9 Z9 O4 V   {- \, ?- K1 t6 d9 u. c s% I8 y    printf("%-5d",n);/ A+ H# t# O3 j    } 9 F9 Y: m9 {! V i" l# z }6 a' @3 e# \4 ^: E; T+ f S printf("\n"); 8 U2 r5 [6 W9 [3 C; Z" \* s9 [}
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:22:00 | 显示全部楼层

【程序4】 1 x) ?8 Y2 X4 o& f( S. E% q题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 7 Q1 F/ _* W0 L程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: 6 a5 P) F% Q ], G( L (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。6 s5 T2 ]6 I \" v" B. t (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,3 @9 W- a- h. O) ^) x  重复执行第一步。 & v! {+ @5 ]% r7 U" H) V(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

2.程序源代码: ; H0 v, [% L' t0 ^/* zheng int is divided yinshu*/% L& A' @' A. }( m3 Y- ^; U main() , V* W, O- U3 ?/ u1 W2 M9 Y/ o{& B8 ]. ?8 `$ m6 B. D4 t int n,i; ) s$ ]- p5 b$ M0 w& R1 p4 Bprintf("\nplease input a number:\n");: c' d9 {7 Y& V4 v scanf("%d",&n);. `' |" ^5 \; f/ R7 d' m* T* H printf("%d=",n); ! {# {; _" U9 [# h/ jfor(i=2;i<=n;i++) 5 C j* V$ C: m7 u& c2 k {( N' m5 t f9 Z6 j   while(n!=i). e% j' ]( I3 U/ T   {; K f" K0 q% a    if(n%i==0)! i- V+ z( B' c& @5 x9 S0 a9 O    { printf("%d*",i); _3 u8 g7 {9 r, d) P, o, e5 T0 b     n=n/i;; y9 ]7 x% j4 U' O    } ~# S( U+ I, v* q2 h* U   else. D F* g# ?2 [8 C1 S8 j     break;# u' J, y5 Y# u4 F; O   } 5 I3 R8 P. J! w5 w$ j! j1 D7 {' @} 2 H6 V1 D/ v" ?; t& n; Dprintf("%d",n);} 2 C: R$ `3 n! y% i- k8 M% t8 G

遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:23:00 | 显示全部楼层
【程序5】 ; Y# `) [3 a5 Z3 E$ w5 s, V" g题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,9 y5 w8 C2 ^1 {1 H* e5 f! O    60分以下的用C表示。 6 \6 n3 r2 P( |, C& `9 f/ \ Y3 U1.程序分析:(a>b)?a:b这是条件运算符的基本例子。: a" V+ p) L7 O9 w# n 2.程序源代码: ( z% a$ J. d3 _# b4 O8 _3 @main() 1 s: Q2 e. Q; e( Y{0 j+ X+ ]3 @# c8 }/ h  int score; 0 w- _ P$ {+ j6 s3 ^1 x char grade; 3 l! e# Y& q- }, e* A, ~5 y9 a printf("please input a score\n");9 k1 E/ T: q+ k5 ^* E  scanf("%d",&score);6 b$ O. q {: `- u, r: d2 k  grade=score>=90?'A':score>=60?'B':'C'); 5 m4 b* i5 `- J1 j printf("%d belongs to %c",score,grade); & j$ U) d# Z/ h- T}
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:24:00 | 显示全部楼层

【程序6】9 @) V0 U& a: m5 {/ V% `. c- ^ v 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 - |: z7 N5 s# |9 f0 L/ ~! N0 ?1.程序分析:利用辗除法。

2.程序源代码: $ p$ X# C9 |4 X, pmain()% @* k; Z6 z: K3 J& N { 2 j1 q0 X( u, |0 u' ^ int a,b,num1,num2,temp;* L. {# w/ e, C3 u) {  printf("please input two numbers:\n"); % b% G6 o4 V, Y scanf("%d,%d",&num1,&num2); " r6 a9 `0 [ R3 u if(num1  { temp=num1; ' W5 b& _; u2 K# K3 R  num1=num2; ; ?& G+ y7 O5 B5 r   num2=temp; 1 u& P$ c* H9 F) L1 }9 i }3 t$ b( ]0 i. j& g( S a=num1;b=num2;/ c4 a) z6 U' q+ H+ a" H while(b!=0)/*利用辗除法,直到b为0为止*/ ' ^7 z/ r$ C; `8 l" n {# M2 w3 @- x; N; F2 K' l/ j   temp=a%b;1 b2 M, Y. X% z# ]. Z! d   a=b; % U# W1 l8 S& ~' L  b=temp; 2 z# {# t8 D: m/ Q# z }% @0 | f1 R! f9 p3 v0 d: H0 g$ b printf("gongyueshu:%d\n",a); * O* [. X k( j& k+ `2 x# mprintf("gongbeishu:%d\n",num1*num2/a); ! C) j7 V/ i( d} / c& V* s0 w4 S) O& S

遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:25:00 | 显示全部楼层
【程序7】 : m* j% F( y1 W- z8 f0 {题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 5 {& {# D7 f0 d+ d1.程序分析:利用while语句,条件为输入的字符不为'\n'.( f( P! N7 M4 {% [- }: m        & [9 F* C5 L2 q* ]& ]2.程序源代码: `9 ~: E: F7 j' b1 r. S#include "stdio.h" ) s+ U' `$ a& Z+ n5 P# C: K4 Q! }0 Rmain()6 l C$ c, P6 w ] {char c; ( Z' ?" U5 L/ X! D' y2 @- c; Z int letters=0,space=0,digit=0,others=0;9 w# U8 D* l8 o" \$ b  printf("please input some characters\n"); 0 \& N& z/ G4 G5 c1 d2 u, s. W while((c=getchar())!='\n')# g, O2 m5 E- A( V7 [, q$ ]  {( `( o k+ f! `# k  if(c>='a'&&c<='z'||c>='A'&&c<='Z')6 u( o2 Q% \ Y i   letters++; % u( d& g/ d% _4 u else if(c==' ') - ?" v1 a2 q% f5 S* k0 b; A  space++;$ h% Z: S! ^0 x, j3 J    else if(c>='0'&&c<='9') . A f$ T( L& [7 P! W9 x       digit++; 8 S' E. w a; T" }     else% p' W4 N1 [ P! |        others++; + x% P; z& E o2 G) ]+ Y& N. U} + [9 A: R) {. {& {) z7 [8 Qprintf("all in all:char=%d space=%d digit=%d others=%d\n",letters,space,digit,others); " |6 ]# w- ~0 L1 W( c3 ~0 a}
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:25:00 | 显示全部楼层
【程序8】( o* x0 [% [+ f! [# X- L7 C E) R 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时 # l3 M% @1 }/ x' T7 x4 I; O9 b7 Y   共有5个数相加),几个数相加有键盘控制。 5 k4 r. j) ]* x C. u1.程序分析:关键是计算出每一项的值。; L# V2 ?: z- ^2 p. \ 2.程序源代码: ' J$ r0 ~5 [' T6 n; s2 {main() : K+ P' `& a/ Z* K/ u8 L/ c/ y' V{ 4 {5 s0 S* i9 Y5 g; B# B int a,n,count=1;/ t* m6 O! y+ W/ f" U  long int sn=0,tn=0;9 x$ D6 `! R. U$ ]9 |6 s; I6 E  printf("please input a and n\n"); 0 s) o5 G% E. B+ | scanf("%d,%d",&a,&n); 1 \) K/ t8 N: F+ i- I printf("a=%d,n=%d\n",a,n);" q' D) Z) k F4 I5 k  while(count<=n)5 r. u+ l% e6 ^% [. x+ j  {' c- l5 @' H* \/ h: a   tn=tn+a;+ S7 k& C. J2 \* O9 }$ I   sn=sn+tn;+ x4 C2 G5 }( R2 Q6 C0 y) T# D   a=a*10;4 w/ p( w- v( C: Q   ++count;7 F% _) U8 Q+ G. g+ {8 V  }3 z3 r- d2 `8 h/ A9 ? printf("a+aa+...=%ld\n",sn); 4 u) E0 v/ |: r7 ~# k}
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:26:00 | 显示全部楼层
【程序9】# G* {+ ?: ] Z6 Y 题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程$ R" g) F& r; r" j5 i6 `    找出1000以内的所有完数。 $ |9 |7 r6 l6 ]. H1. 程序分析:请参照程序<--上页程序14. F: v; G! y7 w& z3 {' F 2.程序源代码:9 n+ Q' k; @. N/ @' ` main() ' m5 w; r0 [2 k" U- @ _{ / C3 b2 ~6 s9 q2 j8 qstatic int k[10];' E8 s0 T1 J2 g* J! X2 a8 Q& Z int i,j,n,s; , f' }: q, _( V1 J9 Zfor(j=2;j<1000;j++)9 t$ s. m- j) j: m' Y  {/ T- r2 {2 q* O) k1 E  n=-1; 7 X! o( `$ e' g# P# | s=j; " v( o& e$ [' x( ^- k# m4 `  for(i=1;i   {1 ^ f" j- n! }' k    if((j%i)==0) 4 s. c4 |+ c8 [5 H8 o' Y( o3 G5 V7 a   { n++; $ l+ a' H& w1 h7 f( `    s=s-i;2 o3 r+ {" T w; J     k[n]=i; 1 `7 u+ s9 I/ I j/ y) H; o# V) S   } " _( N$ l4 Z5 s( X/ _  } * ^% ?( J, Z+ C1 |& J if(s==0)7 t8 U8 A% [3 r  {% d, v8 V3 {7 x: f4 N$ o$ k k  printf("%d is a wanshu",j); 7 y$ L3 X: a2 L' y3 s for(i=0;i  printf("%d,",k);) h T+ |6 |/ m/ P  printf("%d\n",k[n]); 6 J! y3 y8 t; a: r }- _1 q& M& ~) e2 m }7 u! A+ B" u) E6 D& H; t7 T }
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:27:00 | 显示全部楼层

【程序11】4 z1 A% R. l( j' @ 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? % `2 i5 I9 w, M+ X% T/ D9 C% S4 D1 p1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 - j; ?: t! J& W0 z+ L" v* C      掉不满足条件的排列。 / [$ E# ~% O! P, {: G8 p3 E! v2 m8 g; O2.程序源代码: : }( E/ g1 n. O% r1 omain() 1 S% S6 l9 N4 T{5 T0 {0 \ ^5 x0 D$ }3 C int i,j,k; 6 l& B; ~- |7 kprintf("\n"); 1 a; }0 c) y9 w. L8 h$ F6 s: G# X: Yfor(i=1;i<5;i++)    /*以下为三重循环*/ # \2 P% Y8 j6 \8 ~( z5 ?$ { for(j=1;j<5;j++) 5 q- l' R) N6 c) }7 V. g   for (k=1;k<5;k++)% |; f( u* h3 }5 \6 V    {* ?1 d* e" X. M5 q     if (i!=k&&i!=j&&j!=k)    /*确保i、j、k三位互不相同*/ + B- H% g7 u: {$ M% a: ^    printf("%d,%d,%d\n",i,j,k);% p) m% R' Q( \1 r& j6 c8 q5 h    }* @2 C' E1 I' J' s }

" u9 g/ Y! V: s- o; P( v 【程序12】- h, x& _' t1 _ 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高' y/ O& _! c. M3 i    于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 ; |' U2 a. D- a! ~/ t! X4 b# O   成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于0 N G6 ^$ X5 ?6 y! L$ O: ?    40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于" o, J3 l7 f8 g; j J    100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? ' b5 ~; W+ P& c' [+ X% v1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。      6 u, f* m/ r/ ~9 }4 O 2.程序源代码: ' k7 U& u3 R/ }/ R+ _main() ( I9 R, _. Q' J{ 6 [$ G, s' [; @- b& j' Hlong int i;* r9 ]4 B8 R; \% m int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; 6 n2 D+ L( a$ r* S: Z5 ]scanf("%ld",&i); + s) j$ F5 I d. O1 o- y7 Q a0 vbonus1=100000*0.1;bonus2=bonus1+100000*0.75;' ^( c- H. D" D6 ^; H8 r$ G+ { bonus4=bonus2+200000*0.5;. Y" j$ A* e# G2 K3 @+ R5 g1 W bonus6=bonus4+200000*0.3;% y. _' m: w3 K7 [ bonus10=bonus6+400000*0.15;* i2 B# ~- h/ X k4 |" L  if(i<=100000) ; e* L9 d) h' P' k5 q; H  bonus=i*0.1;% H9 m' ]9 Q! |  else if(i<=200000) * N/ d/ e' T( a2 ?# C z     bonus=bonus1+(i-100000)*0.075;* u ^$ T+ D* l7 f     else if(i<=400000)% j4 x5 C I2 Z8 k8 U0 T         bonus=bonus2+(i-200000)*0.05; 8 A" g% a# z" t7 A& c       else if(i<=600000) o: t) d& E" u4 z: p w           bonus=bonus4+(i-400000)*0.03; ( z9 S) k3 e. D4 V& P) X: @          else if(i<=1000000)4 }# E* ^" c, D* b: _# y               bonus=bonus6+(i-600000)*0.015; $ p& b+ K. N7 x8 X* X             else - l' a2 I- d& J, {4 G              bonus=bonus10+(i-1000000)*0.01; ; ]9 x5 H( r# U! o! sprintf("bonus=%d",bonus); / t% h; J( B0 p9 o4 D b} 5 i0 R# v- y7 E+ Z

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

本版积分规则

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

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

GMT+8, 2025-4-4 22:50

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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