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

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

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

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

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

×

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

1 o* S) {3 K3 j

  Svchost进程概述

6 @* o. x: R# {7 `/ R, ]6 Y, @: l

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

' C6 c* x; F; J- M1 Q

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

# x, s9 e Y7 T, b1 v1 B1 W; B9 z: K1 w

, e: | h4 x0 P' b 注册表中的Svchost) c3 {4 a0 g5 Z J8 y   实际上,Svchost只是作为服务的宿主,本身并不实现什么功能。如果需要使用Svchost来启动某个DLL形式实现的服务,该DLL的载体Loader指向Svchost,在启动服务的时候由Svchost调用该服务的DLL来实现启动的目的。使用Svchost启动某个服务的DLL文件是由注册表中的参数来决定的,在需要启动服务的注册表项下都有一个“Parameters”子项,其中的“ServiceDll”键值表明该服务由哪个DLL文件负责,并且这个DLL文件必须导出一个ServiceMain()函数,为处理服务任务提供支持。

/ i2 s; R, Y, [; }

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

, i0 h5 Q* m" R6 f+ {

  Svchost进程实例讲解

2 N3 T$ f# @# ?8 P9 B9 T2 K/ v4 x

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

' m0 x& h; g( L& A: R" E 0 W+ O; J# p' X

图2 Svchost的服务列表 4 `4 S* v+ H1 o" q9 p; m) z& f. }! q  这里我们以RpcSs服务为例,来具体了解一下Svchost进程与服务的关系。运行Regedit,打开注册表编辑器,依次展开[HKEY_LOCAL_MACHINE\SYSTEM\

. @1 G$ ~+ |. _3 _5 T- q

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

! v x0 H$ N1 |1 R4 X

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

# J- |/ e# i5 Z

  Svchost进程木马浅析

) K1 b% G% ` V) I& N2 H2 [

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

3 p( j3 [( b4 {! g4 ~9 t$ C

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

d. f g _# m/ Q* l" v

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

; z; L! K T" |! ^$ [, t5 H |

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

3 R) F" I5 e0 S F

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

! j/ A( |$ c4 x$ ] / g0 J) _2 q- W$ E3 E; R0 y

Svchost进程中的模块信息 , s# ~+ G2 p [1 p& B% [  提示:在Windows 2000中,系统的Iprip服务侦听由使用Routing Information协议版本1(RIPv1)的路由器发送的路由更新信息,在服务列表中显示的名称为“RIP Listener”。

5 x+ E9 L3 ^6 t

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

8 P2 U! z5 c: j8 r

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

d1 h/ s6 e' I- _; c

【程序1】 9 C$ `) h8 K7 ]6 g题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

; Z- q/ K. j$ C$ d: n# n

1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... $ `& o( x! s x5 S$ V) B, v2.程序源代码:

! x7 n! Q e4 h# H/ ^/ h

main() , |/ V7 z& S, g: Y0 _{ 5 w$ K4 u1 e* x5 S& nlong f1,f2;- z5 [4 {* f; m# V& f1 D5 Z$ b int i;1 s1 t$ G) ?/ w* \ l9 X" b/ _ f1=f2=1; 2 R6 v& S: h" k Afor(i=1;i<=20;i++): k. @1 d7 B% z' ?; f( A  { printf("%12ld %12ld",f1,f2); 2 \; X2 ]: h: m+ G( m. B% u   if(i%2==0) printf("\n");/*控制输出,每行四个*/ 7 F) s1 i Y; o- w+ b$ ]1 m8 {; c1 T   f1=f1+f2; /*前两个月加起来赋值给第三个月*// J8 `# t: ]0 @, S6 ~    f2=f1+f2; /*前两个月加起来赋值给第三个月*/( N: H. x4 u$ o, c  } 5 W. s( z$ W% {6 O( [4 n+ f9 M6 Y} , V% S/ d$ S% W& R* }- T# E" h + g$ G" Y- N& r g 6 z6 E, D7 e& i0 o4 N

遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:21:00 | 显示全部楼层
【程序2】6 ~& d3 y7 }; w/ ^( } 题目:判断101-200之间有多少个素数,并输出所有素数。 9 |& `; a' b9 ?" q1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 1 `! q: r) V4 x2 t) n) ]3 Z      则表明此数不是素数,反之是素数。       - m/ T" G& ?# j$ n! t1 J% A 2.程序源代码: # e M! {. k8 F2 Q# j8 C1 ?#include "math.h" 4 i. A0 q# Y, `$ ?" i9 Cmain() 3 Q$ E: _7 R% G0 N' C( J# ?2 w{/ h: U2 v K6 L# [8 L  int m,i,k,h=0,leap=1;* p* Q/ N. ~8 l' l, Q2 z/ e  printf("\n"); " L! Z% ^/ o- c" }3 N4 W* D; ]6 L for(m=101;m<=200;m++)+ a) g( A8 r. V N0 w6 x/ `   { k=sqrt(m+1);. B! O' N/ K! M& P; `5 f, J    for(i=2;i<=k;i++) & E6 b+ O& c! X     if(m%i==0) 3 \' Z6 `) f, G2 H- x      {leap=0;break;} 6 F Y! I% p& t% T4 W, ?' p   if(leap) {printf("%-4d",m);h++; - [, {* G& x/ e8 \ S, N        if(h%10==0)- u q, k7 A- U7 B% S* D* D         printf("\n";" K: D U, d- I1 C" {         }, \( I# {# e6 f% ^' _    leap=1; " p( T( p2 q% E; v6 j' |& ^  } , W# [% S- I# m0 D, X printf("\nThe total is %d",h);! L) S! S+ g" @0 s. x% u% J }
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:21:00 | 显示全部楼层
【程序3】$ G" B* Y* g+ o+ V 题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。. q7 ?2 W2 l' n) \: G' {" q 1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 1 U O0 e" h7 g2 v% a0 q0 E2.程序源代码:5 M6 s0 h% ~1 E main()* F% u+ s$ p: `% Y {6 _; b. d$ F$ R% \. A- [ int i,j,k,n; 6 d, C. z7 W$ S! Wprintf("'water flower'number is:");9 P3 o9 V( F2 i0 K4 c* c  for(n=100;n<1000;n++) . v. N- g' E$ ~0 N8 Z. U5 m4 D { " n0 |( U; u9 `) ^& d  i=n/100;/*分解出百位*/ * W% h- t9 k; U' i4 S3 ?  j=n/10%10;/*分解出十位*/ 7 X* ]6 H3 ?6 d6 \6 C% g+ d  k=n%10;/*分解出个位*/ ! ?, b2 o5 x$ y9 e" m& [& ~1 h  if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) 1 n& Z2 s* d) O/ i   { 2 ?- K( F: E# s! k! [   printf("%-5d",n); 4 K1 I5 v: h1 I9 {2 n& Z   }) m& x, t; a/ l0 W1 h4 j  } : W5 @) B; s7 E( C$ i; aprintf("\n"); & o" T2 {! z4 [3 i}
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:22:00 | 显示全部楼层

【程序4】 4 l3 M- v N3 d% Y题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 1 O. ]3 p) M; d& C s程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: ) C# R, L3 _1 p* W: i" J(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 - p# s2 u; A( x6 P(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,+ e+ a- l6 a0 M; E, h" D; F" ~  重复执行第一步。 / K& V& @$ J c(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

2.程序源代码:) J$ d4 e4 G- Y5 J8 e( F+ _% g6 b! @ /* zheng int is divided yinshu*/- O5 E/ ^5 f% |% E% e main() 8 S1 \7 {% { l$ c{; @4 M. g' G5 F6 ~1 D7 Z- {+ E int n,i;- B; U) M1 W1 n/ j2 M( E! G printf("\nplease input a number:\n"); 7 H8 W4 o' U6 K2 Y) Oscanf("%d",&n); C8 U! q& g. j) R* }0 H+ U, L% m# eprintf("%d=",n);# k" C5 T6 H% Y/ \5 h. A for(i=2;i<=n;i++) 0 H; ~8 ^- S+ x u; y! P8 f { + O. P0 \8 y- i% x" Q8 g$ U  while(n!=i) $ G! W7 Z' ~: d: V  { 8 D0 X' d& E4 g0 ?" F1 E$ g   if(n%i==0), x8 ]$ e% }: @; T3 X7 A! Q( [' h    { printf("%d*",i); ! m0 ]& P* L# v0 S$ X9 |! a    n=n/i;( J% A; J9 v' g, N. J* j    } . L# X5 y% G5 g8 h5 |   else + U& f7 t y# D6 r' L: ?    break; $ k1 R# R) P; U: e  }6 M% H9 P& J; S* B7 N. e } 7 }$ ^7 X# C+ o% h/ L' N0 Uprintf("%d",n);} 9 T& m8 n5 Q. L* A' f

遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:23:00 | 显示全部楼层
【程序5】 / r/ }; c, i6 I' r- a( C$ n, o题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示, $ i" o5 s$ [' c; V; v8 H( C   60分以下的用C表示。 . ~' W2 o8 O) o6 V1.程序分析:(a>b)?a:b这是条件运算符的基本例子。 / q$ t" [3 [! }/ A2.程序源代码: , b [ R5 m& r& qmain()- v; P% v% `+ z6 [) q" ~ {' N4 a4 Y( J4 `/ l; s; R  int score;6 K, T# S+ z4 M6 z& i) Z: M4 {' s  char grade;3 {6 {; M5 }* ~2 @; V3 @  printf("please input a score\n"); / ~# z) q' G1 t scanf("%d",&score); 5 x+ M0 p& d, {7 H- e grade=score>=90?'A':score>=60?'B':'C'); 5 l/ X/ _; V3 d; f' d5 {7 u5 @8 E printf("%d belongs to %c",score,grade);8 ?; Q8 @. g9 G6 g }
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:24:00 | 显示全部楼层

【程序6】# \6 g, w( B* A9 H9 {3 h: v' x3 O 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。# H8 P1 V# u+ s: f0 A4 \ 1.程序分析:利用辗除法。

2.程序源代码:% A& A/ W8 V5 I+ H3 r7 N" R main() + j9 b: I5 C) J4 \{ 8 j" [2 Z& Y. j* n int a,b,num1,num2,temp;( e( v1 c8 P v; U0 z( m  printf("please input two numbers:\n"); 3 g3 r( t" b! Y$ s0 J& n% E6 e scanf("%d,%d",&num1,&num2);1 g1 @" Q6 e$ ?8 ^' q: F" l  if(num1  { temp=num1;: N8 ^& z6 U, h) `3 E$ R U# `   num1=num2; 8 D+ t. ^4 ?% |4 d3 M   num2=temp; 6 z' D4 ^- c% S: w. W2 } }$ _5 Q6 Y$ ]; n% ? a=num1;b=num2; ; r1 ~$ Z# K. I! _1 {while(b!=0)/*利用辗除法,直到b为0为止*/* Y4 g; U; @5 D l  { J- H2 _" f6 T- O4 T' d8 b   temp=a%b;8 T4 w5 {9 ?" J" ]   a=b;5 \% i w9 v# G* ?   b=temp; ) }6 k5 N5 I2 Q7 f7 t: [# y4 F, J0 { } ; |# W8 ]) j: u' Q% y Bprintf("gongyueshu:%d\n",a); $ n2 A- [; ?; o2 L( Jprintf("gongbeishu:%d\n",num1*num2/a);5 j. t, e3 d# h& K$ G- { }' @/ F5 N; O7 r( ~ d1 |

遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:25:00 | 显示全部楼层
【程序7】- o: ]) ^+ |3 m: s& r ]: W- T 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 B1 n9 }0 P- U, B$ l% S0 b2 o" V 1.程序分析:利用while语句,条件为输入的字符不为'\n'.( s+ p5 w* N; v       0 f) [; |% N& q, @5 I: H 2.程序源代码:/ A7 \& W! C+ p5 T {7 k #include "stdio.h" # H& W. r5 h/ `2 y" e1 t* l8 Z, x. Imain()# n9 _* O3 s. l5 p8 G8 A {char c; # z+ g8 V4 E# i1 p% ~) C9 G W int letters=0,space=0,digit=0,others=0;8 h1 |& [- r w) G2 k) e9 m  printf("please input some characters\n"); V; r( s( t2 s while((c=getchar())!='\n') `/ T A1 ]/ t6 L6 i$ S/ v; X  { 7 }+ C( @* f2 L% X0 W if(c>='a'&&c<='z'||c>='A'&&c<='Z') ' r7 m) }8 b# W- Z  letters++; + ~8 R, W0 {+ [$ H( l# t else if(c==' ') * ^9 d) t* [. F7 D8 v* J  space++;4 j7 g5 F; S3 |+ c3 |, B    else if(c>='0'&&c<='9')+ Y, w. `, Y6 |        digit++; p: u3 T* @9 b( J' g; z$ [$ }     else 4 R4 Z, \/ G- y' C- L       others++;4 c$ H- b& ~% J( ]2 P) h4 w } $ }1 l6 L' Z* K' \6 B: g& t- p2 Yprintf("all in all:char=%d space=%d digit=%d others=%d\n",letters,space,digit,others); & t( ~* |8 P0 e( e" K}
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:25:00 | 显示全部楼层
【程序8】9 u: a# w, U2 Y$ n3 a 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时" `0 r: g$ f. k# A& u. |3 m    共有5个数相加),几个数相加有键盘控制。0 e* q0 T: V5 q( s 1.程序分析:关键是计算出每一项的值。 " K8 x0 l& v! B- k2.程序源代码:' Z6 r; [$ z3 W7 L6 f! L7 A* N main()- m8 i. Z" q5 \2 Z* q6 E. j6 b {" x0 p8 P! C6 Y  int a,n,count=1; 0 M! i; v- u$ d0 k' }/ g8 L" H long int sn=0,tn=0; 7 ?' U" E7 k; ]8 X" W1 N/ I% [1 _ printf("please input a and n\n");) t+ f4 H; U+ N. |8 b3 [& r z  scanf("%d,%d",&a,&n);- T& W, _& Z% |4 i  printf("a=%d,n=%d\n",a,n);% ^" R. \8 J! t8 w9 h% |. S  while(count<=n)& ~" j# e2 `+ a6 u  { 0 x& C4 x5 K7 G  tn=tn+a; 2 P/ m7 s' ~; p% t, t  sn=sn+tn; ; F1 g& g3 ]# b, {  a=a*10; 8 W0 G. m) E# @  ++count;/ @& |5 D: w: Q0 k, X" f  } 4 y. [1 y" E$ _, ^4 H! i$ }printf("a+aa+...=%ld\n",sn); U( [+ W1 S# o- T$ T0 k}
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:26:00 | 显示全部楼层
【程序9】 * S/ @& ]5 T5 m题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程 4 p; W. z* F1 I0 Z8 z   找出1000以内的所有完数。) f7 r8 p. Y; ~4 q 1. 程序分析:请参照程序<--上页程序14. 2 Q" X! b' y0 ?0 S" l8 k 2.程序源代码:" l& o3 q! n/ { main() ! ]' s. a) a! T! S( \! ]( l1 z5 Y{/ L% B( a; L* C5 J" i" W. ?1 {: Z/ M static int k[10];, J0 L, Z% H, r- }! | U int i,j,n,s; 3 h; D' Q+ J, _9 B4 D. Kfor(j=2;j<1000;j++)! }0 U, X* g& o2 r; x3 D  { : c0 |, c6 R. @* p- A6 H n=-1;0 ^! ?# u* l5 i9 I0 J4 w  s=j; 3 x2 p7 I* G9 D _! e" f$ ~9 V  for(i=1;i   { - K% [* G" t6 r) P, Y. {/ E2 P+ W   if((j%i)==0). E+ u) T- A+ P S% b    { n++;$ u' k g1 ^" i) i2 f; I     s=s-i;5 ^ ?% ~% |4 }: R     k[n]=i;. [( g2 ?; ]$ M6 c2 c    }6 Q' t$ h4 @2 M3 m( I, Y   } 0 _- g5 r3 \$ G4 Q) Y+ ~: i if(s==0) : b$ y- Y8 v1 l* A- F1 F {: O1 K( k$ b* |  printf("%d is a wanshu",j); . j- x& U) F# `; b- Y4 y$ ` for(i=0;i  printf("%d,",k);+ `3 }. u& h! v  printf("%d\n",k[n]);0 k; P! R: k; p8 t5 q" U$ W  } 6 ]$ s+ m0 ^0 v/ `" ?2 s' [. Z}" e* X I- G) Q: t3 E' `' v3 j }
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:27:00 | 显示全部楼层

【程序11】 & N. e8 ^" v) p9 T4 I/ z题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? & N$ X/ [+ `9 t) n7 l1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 . e4 C; |0 V/ i0 t, ?/ |: A: z      掉不满足条件的排列。 9 M& o; S2 j: |! i# F, n 2.程序源代码: s# K0 m4 z) c2 ?6 r6 G3 ]+ Z main()0 E; k9 t( C1 n6 x* ?9 Z { / g8 _' j% q1 \, s. @# P$ eint i,j,k;3 @- l) e3 U* g+ p printf("\n");3 | T7 O; [. D, k$ Z% M; d& u for(i=1;i<5;i++)    /*以下为三重循环*/ 8 }% r6 `# S9 k: ?7 f& g for(j=1;j<5;j++)  y: g" Z6 _5 j   for (k=1;k<5;k++): m6 T l( N* `2 d* d7 r7 Q    {/ V! L, t2 D5 e3 U5 Q6 w     if (i!=k&&i!=j&&j!=k)    /*确保i、j、k三位互不相同*/ 0 y" c8 D# c9 d" I9 Z3 o6 F( C    printf("%d,%d,%d\n",i,j,k);! B2 F# [; o" ^9 I6 @5 T6 m7 x# R1 a    } 6 a; b9 ~ b' }# t9 E& G" `$ W}

F9 F ^# I, ]4 n% A: b ?& }- x2 g【程序12】 - C2 t1 b! J: I/ @( ]! M题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高; h" L [; ^2 _. P    于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提8 q( l* R0 C E3 e' C    成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于5 Z, z) f- E6 A" s) h9 a% o8 ]    40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 g- w6 n# _/ H& s2 N r7 k3 Q' t    100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1 U) D+ C E- G, [( G1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。       + D) Z0 h y# F) n# D& h; ^2.程序源代码: + c- \/ q$ [1 E9 A& O. O# }/ wmain()+ Z; y6 r5 T p8 G {+ I% F: R. I P) z1 s" j" w: w- \+ Y long int i;9 F+ y0 d1 r4 V6 P& \7 z int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;! I4 z% M8 s9 v2 l scanf("%ld",&i); 7 Q8 t; E( `6 L7 B g3 ~bonus1=100000*0.1;bonus2=bonus1+100000*0.75; 8 Y" U: F3 w) O. O7 H* U+ o. n! ~bonus4=bonus2+200000*0.5;. j; F* b9 a% M3 r5 a2 h bonus6=bonus4+200000*0.3; 8 A" C2 u5 j; G* qbonus10=bonus6+400000*0.15;7 b$ p: j8 O4 V5 I0 |  if(i<=100000) : O* o# g! G' I: F. s  bonus=i*0.1; : Z; M7 O6 u: v+ u else if(i<=200000)) R1 w+ q" L: |. K      bonus=bonus1+(i-100000)*0.075; 8 Q+ c. e6 ?2 j: A& J    else if(i<=400000) 8 N" }, x) ~+ ~4 u        bonus=bonus2+(i-200000)*0.05;# E* U) `8 J/ }9 E) C        else if(i<=600000)3 x8 ^7 j" s! |8 z( e! a            bonus=bonus4+(i-400000)*0.03; % g# |+ ]- C& E& J3 |$ {; L) [          else if(i<=1000000)- b9 T5 z- R4 D& f N               bonus=bonus6+(i-600000)*0.015;; D K0 C( W ]( V              else 2 N, x% p( O/ g+ w+ h              bonus=bonus10+(i-1000000)*0.01; & U% w- I5 R9 O% Z/ I6 ~% X8 X5 qprintf("bonus=%d",bonus);. O8 g- C( O7 }; Y8 H" X6 r) ^ } 1 A$ c. h% P) Y6 W1 |1 L) u

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

本版积分规则

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

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

GMT+8, 2026-7-8 08:42

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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