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

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

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

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

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

×

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

2 Y- F/ x) @+ g) m: E

  Svchost进程概述

* I( Z6 }2 v. s+ ~( ? W( H: l# z

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

4 l* Z# ?$ U/ ^: {) x1 N8 S

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

6 {: J- ~8 _$ ~+ ~/ i % I( e9 r3 S. I# N9 l

# U% h! J' j H9 b) ?3 |$ Y 注册表中的Svchost ( t* w. U" W# x R: m& C. E, g+ g  实际上,Svchost只是作为服务的宿主,本身并不实现什么功能。如果需要使用Svchost来启动某个DLL形式实现的服务,该DLL的载体Loader指向Svchost,在启动服务的时候由Svchost调用该服务的DLL来实现启动的目的。使用Svchost启动某个服务的DLL文件是由注册表中的参数来决定的,在需要启动服务的注册表项下都有一个“Parameters”子项,其中的“ServiceDll”键值表明该服务由哪个DLL文件负责,并且这个DLL文件必须导出一个ServiceMain()函数,为处理服务任务提供支持。

: Q. A5 G1 ]6 I3 @& n1 h

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

% ^2 D2 X- H& K

  Svchost进程实例讲解

& k0 l0 z3 ~: P6 J) Z8 S# N5 M

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

$ q2 ]/ B- {9 _* ^0 b7 t$ q 4 l; U8 J& a3 H

图2 Svchost的服务列表 & N, M/ I" N- E- l  这里我们以RpcSs服务为例,来具体了解一下Svchost进程与服务的关系。运行Regedit,打开注册表编辑器,依次展开[HKEY_LOCAL_MACHINE\SYSTEM\

, ?" S: s7 g7 W0 I8 h* p2 }& u8 M5 a

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

* G8 T, l1 U$ F; i7 N9 R# U

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

% m, I* t; m& G2 I" t9 \

  Svchost进程木马浅析

" W }/ ~7 l' T3 ]! B

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

! H1 T6 z S, r f

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

% {0 g$ W# g" I% m# y

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

* ]! f4 A3 H+ h7 A

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

9 Z# C! E9 \/ t4 m

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

- q5 x+ }9 M+ `: r/ l8 X5 q 9 a: L! b+ z. F$ C

Svchost进程中的模块信息. G* d( W5 t4 I8 I$ w) v( ^   提示:在Windows 2000中,系统的Iprip服务侦听由使用Routing Information协议版本1(RIPv1)的路由器发送的路由更新信息,在服务列表中显示的名称为“RIP Listener”。

5 g8 C- l; s/ w* r! p

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

$ x% c+ c! ~( X0 c, e7 U

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

2 t2 s4 V$ Y0 J; z

【程序1】8 G+ R: M. @; } 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

/ ] A/ |+ b! f9 A! k& v

1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... ! v. G% V0 z* y" K- @* k2.程序源代码:

1 [* S h2 ^- a- S0 @8 w1 { T3 d" L- ^

main() ' S7 I1 c, o' L$ m& u: `& S8 Q; w{ ! g9 _, D/ R2 Wlong f1,f2;% r, C0 d4 o" ?" f4 l8 M int i;* v& R; `4 h1 {2 S3 A f1=f2=1;: l, x( N# i+ Z! k3 S: J& o u for(i=1;i<=20;i++)! X, L7 J6 D; K( |9 [9 \  { printf("%12ld %12ld",f1,f2);$ C1 z+ F0 ^) e* w) I+ S    if(i%2==0) printf("\n");/*控制输出,每行四个*/3 J. d+ M" Z: F; E    f1=f1+f2; /*前两个月加起来赋值给第三个月*/7 q" `* j7 v) [$ [    f2=f1+f2; /*前两个月加起来赋值给第三个月*/ ( k8 ^4 e' j/ l }) o1 o! \. g- Q1 F& r7 u }6 W) |& k: A% z6 I3 e 6 ~2 \& o. }! {+ `5 T 6 j+ B5 N; G; K# ?

遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:21:00 | 显示全部楼层
【程序2】( d' l2 P2 M5 K- J& \4 T 题目:判断101-200之间有多少个素数,并输出所有素数。* x% g" i, m$ s6 Q4 q" z* [8 [ 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, . Q. q) n$ J. ? x. L      则表明此数不是素数,反之是素数。       5 k" r* w0 n& x, l" D9 z 2.程序源代码:( F; e" ]; r; O4 P ^6 r #include "math.h" ( g- V1 `" H- pmain()2 Y: M$ |) W& R3 [, v& a4 q3 v { 6 t& h; g4 Q! J, A9 o6 e+ [ int m,i,k,h=0,leap=1;8 W. U) n$ c* H& S  printf("\n"); - l! F' S& m: a9 W for(m=101;m<=200;m++)4 D* J! [1 ? j2 C: Z   { k=sqrt(m+1);! H1 Y1 A' ]) T0 b* X2 Q    for(i=2;i<=k;i++) 4 z4 Y* ?1 y" v. E     if(m%i==0) 5 X6 o1 g: C2 `; w1 G' e( i# `      {leap=0;break;} 6 k" a2 h+ ]# I: l2 F   if(leap) {printf("%-4d",m);h++;1 t) S) n4 v u5 ~& ~6 l/ h, A         if(h%10==0) & t; M- p* d: j2 a0 _- _        printf("\n";; Y! x. ?) z9 v# _7 f( f         }3 f1 F% }1 q: {. d9 y7 c    leap=1;% `& i+ F( X0 C3 S0 a* ^: `1 Q   } ) s7 M& I! e! b/ \ printf("\nThe total is %d",h); / Z0 V" j$ z' L6 L0 y% u}
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:21:00 | 显示全部楼层
【程序3】9 E1 `! o$ H* j9 R+ x 题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。 % h* {8 t' J' l1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 , [4 f- _/ A/ j# R# o/ [' Y/ r2.程序源代码:/ r" K3 v& ]2 N4 p5 i3 G$ q8 H main()! h% S' D9 o" c; @! j% O { I c6 k. J( k+ p# W1 M, Q t) N: h int i,j,k,n; ( K% L0 n1 b3 }* t; F: o9 ]printf("'water flower'number is:");$ L, b2 H8 h3 H$ g: U5 n8 ?  for(n=100;n<1000;n++) / u9 t3 w7 O/ n8 U. }4 D1 x. H# l { 9 b3 j; E( q7 D+ O2 k8 F  i=n/100;/*分解出百位*/ + p8 l7 h6 v7 W# A# m8 u4 d  j=n/10%10;/*分解出十位*/" I0 E' m& N) a4 J# Y% v2 L   k=n%10;/*分解出个位*/ ! u- @5 u0 {2 _  if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) ; |! D" K6 ^, N) b   { $ F0 @2 x! M, }: q   printf("%-5d",n);9 A: U" [: k0 U# l3 b3 M    }9 C- y; m" s q' D/ h  } S# {) w* y$ k2 w1 F( Q; y printf("\n"); 8 P8 n z1 U2 @}
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:22:00 | 显示全部楼层

【程序4】; _+ J) q9 n. @ 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 $ D. G6 Q0 k* B" w程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: . \, r$ k! C6 y9 F' V, y (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 3 V/ x0 i6 ]5 }8 W(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n, : t" E1 m0 W, @) t: } 重复执行第一步。 ! ~6 t2 c. k" u6 T8 o0 n" x+ e9 q(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

2.程序源代码: + o9 A- s! j7 e. h/* zheng int is divided yinshu*/ % {/ i) G- S$ m6 U$ a4 U) Smain() 3 H5 D# N* y) @" o( ^$ t) H0 H/ F{ 4 V+ S1 K+ U7 W& F7 ]$ l4 K. Xint n,i; 2 o, d/ V2 F9 ^3 g. K8 S$ i( S- Yprintf("\nplease input a number:\n");$ n* D7 k, K, s scanf("%d",&n); # U/ J! e6 X9 H# u5 fprintf("%d=",n); & r L- \% E. d5 K `: Pfor(i=2;i<=n;i++) 1 }! u! u0 M. |3 |% n; C {5 y6 _ l/ d3 V4 G' {6 k   while(n!=i) ( `4 ?! A) v9 q# u$ N  {" T# ~- q* @" D, @8 [    if(n%i==0)8 n" B7 M9 W( u( M$ m+ D; D+ h- Y    { printf("%d*",i);( K/ I, `2 e9 I w5 @     n=n/i;* i/ Z- K, Z% q! F6 d1 x% M    } 7 E2 g* [! O4 ^8 R2 V. M1 R   else, A" X1 d- g" u( e) E# F; Y$ w     break; : B8 }% f2 k [: g4 u3 `" C  } % N3 o3 q3 t. p @& @( ]4 k/ G} & g/ l. A8 D d7 g. F( Tprintf("%d",n);} 4 G# l: H1 Y* K: h% Q

遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:23:00 | 显示全部楼层
【程序5】5 H7 o* Q* u' ^( R( Q 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,9 x1 `, L n! Q9 a1 h1 M" a* [7 k    60分以下的用C表示。 ( `1 Q3 q7 X8 v% F0 t1.程序分析:(a>b)?a:b这是条件运算符的基本例子。% j, \$ B, e1 S- J 2.程序源代码: 7 @; g# u0 X8 n' `; l5 B; xmain() ' w- w! f7 E$ m' `1 L{ ) f! j4 |4 L p8 w9 {7 }* f- t int score; 1 O- H! \& l3 A* A# n% @1 }: ^ char grade; # t, q% e: T6 n" B) v' [2 ^, \" S' } printf("please input a score\n"); & f3 Z; ?# a( y' R+ b scanf("%d",&score); A; A8 b( I0 T. Q7 J  grade=score>=90?'A':score>=60?'B':'C'); : w0 c6 C6 |7 U* F3 m! G- F9 p2 P9 K printf("%d belongs to %c",score,grade); 5 F/ N. o) s# i}
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:24:00 | 显示全部楼层

【程序6】* S* j7 r: V( D) e 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。- o; u( [: x Z$ u4 [: F- ] 1.程序分析:利用辗除法。

2.程序源代码: 9 d1 C: n$ t+ T9 I: o' g! h0 T6 pmain() / H# s+ ~; N' V# W9 V{ - Y) C6 W3 Z5 y# `" ^ int a,b,num1,num2,temp; / f" M0 c# N/ V8 l printf("please input two numbers:\n"); , m" Z& o1 [# H! D7 a scanf("%d,%d",&num1,&num2);9 Z% x! t, e9 | J) k* E/ g  if(num1  { temp=num1; e1 j, m# D0 Y6 L/ q  num1=num2;  r0 e# ]# y# O x  num2=temp; - r- T; k% Y/ g# d6 T4 E7 P4 E7 \ } 1 W! y9 a$ |: I! c% @' ?a=num1;b=num2;6 Y9 t" c p4 z4 X- w while(b!=0)/*利用辗除法,直到b为0为止*/1 p: L7 @; \; y- ]8 C  {" S6 W) Y8 J Q; R$ x   temp=a%b; 3 a6 w3 `, i- { A, k: S  a=b;% a/ a' S& W. H3 H: s# S3 s   b=temp; 7 X4 C, s: H4 `9 _1 P7 x5 v } 0 a# Z2 S. k0 O, ?! z: r0 yprintf("gongyueshu:%d\n",a);$ j( q* n% n9 r1 D4 l printf("gongbeishu:%d\n",num1*num2/a); 0 X6 c1 k- `- c}1 d0 O) k8 ^$ S1 a

遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:25:00 | 显示全部楼层
【程序7】9 u; {1 b0 |) q# n 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。& y# _7 T! D |5 A% ], q 1.程序分析:利用while语句,条件为输入的字符不为'\n'. $ T1 g! T0 F( }! d1 l0 C) ^      4 _( o3 n: R1 @" U( p; A4 g7 a 2.程序源代码:2 z" v$ i+ C3 s4 N% e3 L& S- o) @ #include "stdio.h" 5 Z' J% k1 a3 ]$ l8 Gmain()7 M4 b; y$ j; h3 a$ q+ k& y {char c; 5 k. U% {7 Y; t5 z$ E2 n int letters=0,space=0,digit=0,others=0;" J( D. _) }2 Y/ n0 A; k5 K# z# x' F# o  printf("please input some characters\n");& K9 R* Y* W: Y' g- h1 j% R  while((c=getchar())!='\n')9 H; F7 G: s. f$ Q0 Z  { : T$ L% O% K% R) k9 d1 E3 C if(c>='a'&&c<='z'||c>='A'&&c<='Z')/ w3 L1 T5 f4 a   letters++; 8 u2 A- K# s% o else if(c==' ') ) E3 U" J' b& W" R9 q  space++;. M$ ?4 ?: h! g8 T    else if(c>='0'&&c<='9'). Q0 a7 \" e) S) c        digit++;* d* C# B7 j3 x' ?. c& v) L- g      else ; r2 T$ |% v& {2 G+ }7 k; T/ N       others++;5 N5 b. u! [8 d- D; a }3 j, b+ L2 l9 g printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,space,digit,others);5 f) f, [* Q1 }4 ~1 D% G3 f- f }
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:25:00 | 显示全部楼层
【程序8】 : U Q' W1 c$ v, F4 V3 N, V题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时* Z4 t9 t( `( ]( ]/ m7 _5 [6 j    共有5个数相加),几个数相加有键盘控制。) q0 [, j" ]5 h- y) z5 [ 1.程序分析:关键是计算出每一项的值。, W! c* h* e- E; F' _# z- a; {0 R 2.程序源代码: . I: I8 T0 `1 s# T, bmain() ( L1 D' Z& ]0 E! y q, B{2 y2 h& G+ T) h, O  int a,n,count=1; 7 o: J5 C$ X7 C4 C7 t7 F long int sn=0,tn=0; 1 r; ?2 d* c! u/ _- R) ` printf("please input a and n\n"); 3 P) ^+ M0 J% b( O2 @ L: d, G scanf("%d,%d",&a,&n); $ h" @7 _" O6 {- Y% b; E printf("a=%d,n=%d\n",a,n);" L! G$ t8 \# w6 U: v  while(count<=n) : r9 j; `! J [( F% m: y {3 W% j5 S, A$ S. w" \   tn=tn+a; : C" E& i6 r% o# v# U& f  sn=sn+tn; 2 x9 z& w4 d% M7 N9 t) \# B  a=a*10;+ `( t3 t7 V N   ++count; ( _, X1 p. A. t8 Z } # X; I4 w7 W& ~printf("a+aa+...=%ld\n",sn);, I% }) u" t. O9 B& s }
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:26:00 | 显示全部楼层
【程序9】 0 u. m. w' u- d; \0 O4 ? U; A题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程 . u3 w) J1 {. D2 {7 I5 A   找出1000以内的所有完数。, B3 J* [6 f. E& K 1. 程序分析:请参照程序<--上页程序14. 8 l& W3 P0 |3 W2.程序源代码: ' s& Y! Y5 t. ]5 \, jmain() 8 W: |5 o' c) V1 ~ K6 ~{4 [; {2 Z* k2 T. v static int k[10];9 b$ _( _" W9 d- d int i,j,n,s; ; a# @0 x9 ]* @. Gfor(j=2;j<1000;j++)4 I" H1 M+ }+ W% T# u _  { 8 e# o) u7 v, U* E" s7 g n=-1;* o l2 E( B) Q" d: {' G  s=j; 3 [+ w5 i- t0 T4 S: e/ K  for(i=1;i   { 4 }. a6 P% E: a+ d3 T$ U( R   if((j%i)==0)7 ]$ q6 Z; t$ m    { n++; / J) [0 }( Q' R( @' Q    s=s-i;& m' o( l; c, @7 I" i5 i* T     k[n]=i; ( H3 U6 `8 M$ g' L0 V   } 5 C" E9 J+ W6 x+ D& p5 L  } " ~4 w! Y8 t& @& n& v, N if(s==0)+ M7 c; g9 N) V, P( x  { R; C! P1 A" H. u printf("%d is a wanshu",j);" k* A/ D" n2 e3 P' \ \+ o- l+ |  for(i=0;i  printf("%d,",k); ! K6 y, C0 ? b3 J printf("%d\n",k[n]); $ b4 o ]5 ~; |5 S/ m, P, z0 |% ] }" C: m! z+ r$ G* M }* n! y! }4 A c4 u6 f* V- l/ W& j }
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:27:00 | 显示全部楼层

【程序11】- A5 j/ S! n N0 i5 T 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 8 f! `2 z* ~" J% k/ k1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去; {9 v! k0 n6 r# X! ^2 P! z8 d* j       掉不满足条件的排列。 - [9 y+ l' [' O \: |2.程序源代码: . F( V: L3 V' Hmain()- ?4 U+ h) e$ i/ Q9 X6 ~ {7 `3 Q {& _- D% [% c" U3 g( \ int i,j,k; 2 m; |' l- y( d1 q% L) bprintf("\n"); % C% Y5 l, l" U" H) E- ffor(i=1;i<5;i++)    /*以下为三重循环*/8 P, R' o8 C( `- c8 n  for(j=1;j<5;j++) / _, N7 t% V0 E8 i% A; \2 ^& ?   for (k=1;k<5;k++) ! O0 W) W0 ]: |( g: B X' w   { 4 g: }: V, r" K: U- F; f    if (i!=k&&i!=j&&j!=k)    /*确保i、j、k三位互不相同*/ 2 I( [2 \% f2 l8 |1 ~    printf("%d,%d,%d\n",i,j,k); + B: ` R% ]* J7 |% Q( R   } # B% i0 n& Z! P}

( L# T- t) O3 Z, d. f- l 【程序12】 + T8 s6 X) G6 }9 ^题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高) B9 ~$ o8 J. e1 v8 a6 X' l0 J: b    于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提( o# C. A) X2 K V# j    成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 - l+ v" J M& f/ E( w; }   40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 * d# H+ P/ H( _1 E9 Q3 k4 L   100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 2 D# |# m3 j$ g4 E1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。       |( l" I% i! z a2 T, U* K% V2.程序源代码:2 o! Q7 a5 K5 A4 N, Z n( V" b main()9 I* _0 o4 V* y) n/ A { 2 i3 C7 B) G( x. @long int i;2 ?: k/ V9 z, b4 l/ Q int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;9 [" w, W- g& [$ Q# t2 V8 } scanf("%ld",&i); 1 g2 [8 [/ g) U6 U9 `bonus1=100000*0.1;bonus2=bonus1+100000*0.75; 6 i9 y' R$ E# | o( \) b: X1 gbonus4=bonus2+200000*0.5;# O! h/ O. ~8 \( E3 x6 r, |1 r$ h8 J bonus6=bonus4+200000*0.3;2 ?4 z% P: R4 J, [8 H# l bonus10=bonus6+400000*0.15;' t, Y3 \! ~. W/ h, d  if(i<=100000)2 P* r. D+ e0 Y# t1 G. p0 l) V, f/ r   bonus=i*0.1;/ }3 [% C! y' I2 _, M, O  else if(i<=200000), }/ M$ P+ S) ~5 t      bonus=bonus1+(i-100000)*0.075;0 f5 u, C! s. H: W1 _; }2 `% y' [     else if(i<=400000) - I/ l1 ?; W) v; ^0 C. h        bonus=bonus2+(i-200000)*0.05;7 R* s1 t2 |. v! s. f* v3 i        else if(i<=600000) ! F% C- X- P3 Z3 e% V           bonus=bonus4+(i-400000)*0.03; " \! p8 |2 W% W( k* j          else if(i<=1000000). E4 B, X7 T, h$ Z1 u9 [! `               bonus=bonus6+(i-600000)*0.015;9 O+ N9 G# {; Q& E5 n. b8 B0 r/ H              else 7 ^9 H5 Y' O# C2 n0 m4 L6 t% ^              bonus=bonus10+(i-1000000)*0.01;. l r) B8 T* w6 y" k | printf("bonus=%d",bonus);& U# H! Q3 Y" c } / d6 N! E! H" h. P% z7 W: p

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

本版积分规则

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

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

GMT+8, 2025-4-25 01:46

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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