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

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

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

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

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

×

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

5 B/ e7 b$ K# L$ O1 p4 X

  Svchost进程概述

* a, Q, d/ O! Q9 h3 m: c4 ^7 X

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

! X8 I1 |7 a. k( N

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

+ _/ d1 |$ P: Y; W+ _' B+ F' P Y+ J: [9 U

7 b5 I6 b0 I% a& I& o; @# [6 w 注册表中的Svchost 4 p6 M2 t, f: W; x% e  实际上,Svchost只是作为服务的宿主,本身并不实现什么功能。如果需要使用Svchost来启动某个DLL形式实现的服务,该DLL的载体Loader指向Svchost,在启动服务的时候由Svchost调用该服务的DLL来实现启动的目的。使用Svchost启动某个服务的DLL文件是由注册表中的参数来决定的,在需要启动服务的注册表项下都有一个“Parameters”子项,其中的“ServiceDll”键值表明该服务由哪个DLL文件负责,并且这个DLL文件必须导出一个ServiceMain()函数,为处理服务任务提供支持。

3 Z- m6 m# s! N- R

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

3 ^4 |# f- J5 j! D- z

  Svchost进程实例讲解

. O+ j x4 p+ c/ j! J# c* T

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

( C6 j1 W# P0 L; D 6 n ~/ h2 I9 f; O, B" o

图2 Svchost的服务列表 # l% D$ e( G+ ?5 q: x( J% o  这里我们以RpcSs服务为例,来具体了解一下Svchost进程与服务的关系。运行Regedit,打开注册表编辑器,依次展开[HKEY_LOCAL_MACHINE\SYSTEM\

; B$ D: ^; O* y) o% z7 P0 M2 g

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

0 c7 N1 w3 C9 T! v; Z3 V

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

5 C7 Z: w+ p" f

  Svchost进程木马浅析

0 |* I i" ^0 v& f: ]

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

* \, H/ q" k) u! H5 ^

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

+ K+ V' B; q( x% G3 t6 j) q

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

" ^( U. I2 f, y3 z

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

9 |3 \/ {$ B* j+ L; B( |0 x/ d% S( V# U

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

' z% U0 o% K" O ; w$ t: o3 R5 q8 V4 N2 R; n

Svchost进程中的模块信息 % S, m' N) P! Q* E  提示:在Windows 2000中,系统的Iprip服务侦听由使用Routing Information协议版本1(RIPv1)的路由器发送的路由更新信息,在服务列表中显示的名称为“RIP Listener”。

0 d% p: r/ F8 V( f

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

$ J. n2 O2 d& U: W

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

' e6 B/ X' c D. D2 e) R; t

【程序1】 # y# v& s6 E5 u" }+ w0 [$ d6 K题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

" r! P. M) I: H1 y" X

1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....- h$ E* s6 Q0 @0 t8 a" y 2.程序源代码:

: L% s3 j8 [( S ?/ e* t1 ]

main(). x7 B7 b7 d( g- ]) D {! y0 K, d; v/ h* h, Z$ H, @ long f1,f2;/ J9 M* A0 _) P' l9 D int i;1 G$ V. t# ~5 A3 l, B" C2 X f1=f2=1;2 M2 N( j/ R3 U/ [( d+ H6 d H for(i=1;i<=20;i++) - }0 k; i8 w3 w8 |! R { printf("%12ld %12ld",f1,f2);; |% L( H7 Q) x% ~1 k3 R# {- J    if(i%2==0) printf("\n");/*控制输出,每行四个*/ 0 {8 D: v6 v8 l. r3 v3 A   f1=f1+f2; /*前两个月加起来赋值给第三个月*/ 9 M ?/ h" \; H   f2=f1+f2; /*前两个月加起来赋值给第三个月*/0 u( L8 Q0 c. C1 a* F# y  } E0 {- d( b; Z6 n( \} : u4 f8 z1 X5 d# S ; ^! ~, W; I/ J9 T& I) X . \; ` x( [3 d' W7 |) v

遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:21:00 | 显示全部楼层
【程序2】" a" R# N" g# ^0 ~, ^ 题目:判断101-200之间有多少个素数,并输出所有素数。$ N( P) |3 Q4 N# |4 _2 ] 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,& g& j- a0 b6 `9 a1 Z) H       则表明此数不是素数,反之是素数。        D- J! M- k( _1 }3 k2 e 2.程序源代码: % n3 G8 G1 w) { U, G1 _! v5 m#include "math.h" 0 Y. u" d* ` }- A ?- qmain() % f+ W2 f7 P# Q' o- l: M{ 2 }: K }* b0 `# g, d) s7 m' U int m,i,k,h=0,leap=1; . H; N0 Z7 m3 s1 T( m printf("\n"); ( R/ B, H) q, E for(m=101;m<=200;m++) 2 B( I, A9 v5 d* U/ s  { k=sqrt(m+1);# D9 G" L8 l f a2 G    for(i=2;i<=k;i++) ) ^% t& c1 c4 E' z+ D2 S ?/ q6 N     if(m%i==0); t6 c0 C; W$ J9 |       {leap=0;break;} . E1 X$ D. A( b! t4 \   if(leap) {printf("%-4d",m);h++;9 R( B8 n% X( S* S m         if(h%10==0) 2 Z7 g4 @& T6 k$ l8 f/ C' t4 l        printf("\n";) m3 s; [5 R+ Q7 N         } 7 b9 V% R: d8 T+ X   leap=1; * h; K, Q, x9 S; s, N( h  }+ P, {! [% Y) `3 o& I# b/ `" v  printf("\nThe total is %d",h);, S/ q% u' l7 z! ~ }
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:21:00 | 显示全部楼层
【程序3】 1 c% F: _* l5 v题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。- K% x# c4 E' b5 b1 R 1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。0 ~4 x, v: o. F6 }- f 2.程序源代码:1 f7 B! k. s' W& P main()0 Q. I4 g1 j1 N8 ] { - y8 J4 r% }# n. oint i,j,k,n; 6 B8 b4 W0 r" X1 M3 Eprintf("'water flower'number is:"); ( K! N! q X" t$ R4 h5 ^ for(n=100;n<1000;n++) 4 I( D. Q7 G/ s9 J( D {3 J9 J8 c, H6 @2 E$ T$ M ?   i=n/100;/*分解出百位*/ ) X- j. E, A3 `  j=n/10%10;/*分解出十位*/" C7 Y* F% m; N9 ~   k=n%10;/*分解出个位*/ 1 i- {, h! l- m2 r/ o6 ~  if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) . k, G3 B" }! P   {6 `: o) A! ^6 y, M( a    printf("%-5d",n); " P' ~" R# s/ y) x' _+ p   }2 `+ w# k# a* O z  } 3 U) }2 T! d: L* U/ oprintf("\n");% ^( P; z" r7 d2 h, A! B/ ^ }
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:22:00 | 显示全部楼层

【程序4】% U0 _; |( M" F$ I# R4 }3 | 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。8 u7 g) _2 Z7 T$ C2 f 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: # U- T# f8 }8 r X) K% w |% `(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 " g5 J0 v) J6 ~6 N) {, N1 v( o(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n, 7 m5 d) B5 w- C& c! F; l 重复执行第一步。 $ b5 g5 ~2 |! U ^; l/ P(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

2.程序源代码: % J" D) y) L. M: [2 ]3 x& R) C/* zheng int is divided yinshu*/ - U6 [8 z1 b$ G. {- |" s4 I4 Q/ cmain() ; Z/ ~0 u( |7 \{ 3 U `; f2 Q6 s& S3 m; lint n,i; ' m# Q, ^% }. U6 Yprintf("\nplease input a number:\n"); # Z% s( A9 d9 g$ M& C' ~scanf("%d",&n); / i4 |1 I. m% c/ _printf("%d=",n); 9 o, R' ?) Z2 Z9 Nfor(i=2;i<=n;i++)1 {) a/ r6 r1 J8 P  {; u) ] l4 K3 t! I   while(n!=i) # _ M+ i. c: b4 w( c) l% D5 Y. a  { & z% i P$ y, k7 M. V% [' M   if(n%i==0) 0 e* b2 E7 {9 i$ ^, C/ q! `   { printf("%d*",i); % [# t1 m+ J, C9 l6 Y, J" y    n=n/i;- D0 G, _5 t' }" S    }; @% r' T C- y5 v! m    else) l9 d9 X8 X! A: c3 m$ I' j     break; * J6 E/ a- h: y, n  }. z6 N$ M+ M* p ]7 q4 f } % E- e' H$ M) p2 x/ u5 u# Dprintf("%d",n);} ( h0 Y+ |: L: S& V, U2 d5 {. v. [, G

遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:23:00 | 显示全部楼层
【程序5】 " ^' `- g9 W- M" f7 n题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示, 0 R/ {/ L3 q5 x8 h- F4 [9 F   60分以下的用C表示。 $ ^6 H% g3 e4 h" S5 u& E1.程序分析:(a>b)?a:b这是条件运算符的基本例子。 ?8 C5 [, s9 R7 F 2.程序源代码: / b4 Z- ?5 i. B- `main() * _0 m$ q2 S T9 b- l7 T4 X' Q{9 O# z. j6 b) `: x8 e7 C, T9 s  int score;7 g6 j; d3 \8 s) j( R  char grade;4 W2 q8 U' _; G0 H- n  printf("please input a score\n");3 M# Q; |! S! `& c  scanf("%d",&score); 2 B3 \6 ~" P& D5 H" u grade=score>=90?'A':score>=60?'B':'C'); ' e1 T- F/ h# x( [4 w2 \0 L printf("%d belongs to %c",score,grade); 6 r5 n( {/ d3 \- _% l}
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:24:00 | 显示全部楼层

【程序6】/ O& t/ L$ z# H T1 C |$ t 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。8 F) T) ?& _1 B! j7 A5 r* [% e 1.程序分析:利用辗除法。

2.程序源代码: % \& t% j" G/ q0 B# f+ fmain()8 x8 ^; ~3 V# _* I* A {7 G+ q9 E3 y" _5 {1 G  int a,b,num1,num2,temp; 4 S" B' H8 ^' @ printf("please input two numbers:\n"); , n' i+ `' b, s9 g6 Z" t1 ^% O scanf("%d,%d",&num1,&num2);; v& v: i3 r4 M+ |. D  if(num1  { temp=num1; 4 {; _1 o' i$ Z5 \ ?  num1=num2; 3 P8 s" p6 L. X! V7 e, a3 |   num2=temp; 9 q$ S/ C' ?; m U% V* Q! D4 j0 T/ R }8 g, i) m/ U3 e! d a=num1;b=num2; * Z5 c+ ?7 Q2 _$ W4 H) Qwhile(b!=0)/*利用辗除法,直到b为0为止*/3 n" A; p3 q) ~0 e4 D8 B  { 3 s$ g4 f ~/ X7 d$ w# n. i/ t  temp=a%b;2 u6 u* O7 x, N; o   a=b; 3 Q1 J1 y. M1 U. x! ]  b=temp; 3 ^! q2 b# m0 J, c. [4 ` } 0 }1 Y6 r5 \( Sprintf("gongyueshu:%d\n",a);+ m$ Q) E9 f! E& \7 p printf("gongbeishu:%d\n",num1*num2/a); & `, ^ N' z4 u3 u* v$ ~; r} $ [: t4 ?- H& ~5 ]; w0 d3 Z

遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:25:00 | 显示全部楼层
【程序7】 $ R: A, \* y7 R; d3 a g题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。0 ?7 [0 t: B4 \1 a) T 1.程序分析:利用while语句,条件为输入的字符不为'\n'.1 ~0 y4 q& ~8 T. z0 b        & X/ W1 l1 p& v: Z, M1 ~+ b' o2.程序源代码:( a- v! a( o6 O% ~: B& a2 D, a, m K #include "stdio.h"" ^6 X# n6 [% O: g8 Q3 ?% E main()9 R% Q* d! C7 F# |: n5 G6 W' L {char c; ; I& K5 ^! r; v int letters=0,space=0,digit=0,others=0;2 \9 q+ Y, I T: s. v q  printf("please input some characters\n"); : d- ], r# }9 Y% Q while((c=getchar())!='\n'). u7 P% `" d) n: Q8 {9 t6 e  {( x' V5 ?! G/ R: M$ J  if(c>='a'&&c<='z'||c>='A'&&c<='Z') . X( G3 F, Y- T' E r/ d1 q% h  letters++;& x H$ E: I4 D& u r4 B7 N  else if(c==' ')- [$ H- {- t, H. h   space++;1 {' ?" P' n2 u' N6 W d% A$ L8 F    else if(c>='0'&&c<='9') ) T: W6 h! c3 g6 G9 v4 B; j       digit++; - f0 G1 f- I" w     else5 C6 [' u; u; v- f. V9 ~, G: O        others++;6 [% _" M9 }- F0 f+ S& S9 |$ e }2 w/ S* n2 o3 y" m2 y9 P% p printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,space,digit,others);, K& }- U1 e; j" d/ c }
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:25:00 | 显示全部楼层
【程序8】" {. F5 X7 P" Z0 K$ W7 \" `" T 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时* O5 a6 ?/ S9 C: L7 s# \; V) q    共有5个数相加),几个数相加有键盘控制。1 l/ a' C- x3 D 1.程序分析:关键是计算出每一项的值。( R% _/ n" _& X) s" s2 _, ? 2.程序源代码:$ `7 W$ _8 _- d0 `' I main() % K1 S X1 p+ L5 g9 b{: J, D( q. h# E! r  int a,n,count=1; 6 P2 @2 y6 w2 p8 n$ ?# ~3 _ long int sn=0,tn=0; ! W$ f0 g2 W9 B. j printf("please input a and n\n");. J+ g, [( f, `+ L2 Z/ Y  scanf("%d,%d",&a,&n);/ b) g' q# e& G, u/ K. ~. @: j  printf("a=%d,n=%d\n",a,n);. u t3 |& z; D' `, h6 d8 N+ J  while(count<=n) : Z& V% d5 A7 n8 C- q, K { 1 p" F1 g5 y0 j+ b+ |; S  tn=tn+a; . H* F r( w# g4 m" B2 A4 w  sn=sn+tn;) M7 h; P: ^+ v& n j   a=a*10; , [6 y3 R2 M. G- O% G2 a  ++count; ! p9 ^; n7 m- a/ Z- a } 1 W; R$ L: E' ]& tprintf("a+aa+...=%ld\n",sn); ; K) Z4 W& P1 }2 n9 u. z}
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:26:00 | 显示全部楼层
【程序9】% n, @1 W$ D* i# T 题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程 # \9 b& s7 a) W; O   找出1000以内的所有完数。 e: h& [8 b7 u5 `, ~3 p6 I 1. 程序分析:请参照程序<--上页程序14. 9 y; x; ~ {, h+ ]$ w' I6 Q6 y: c2.程序源代码:9 q& y( m6 K& b$ t) K1 Y- P main()8 a) U9 d1 D+ }; ` {& _8 a! n0 H9 S3 A2 A: y6 g4 R- d static int k[10];' ^$ Z8 C0 G" p! } int i,j,n,s;" L( G( `* C5 Z/ } for(j=2;j<1000;j++) / q; O$ p5 J; _( W3 v, @+ X, J { ! ]! y( @# |3 ]# ^' L n=-1;2 S5 P% N% W! U" ` Q/ X) D  s=j;- c3 M( j7 D* ^( m6 G   for(i=1;i   { & ]$ k6 O: `/ g. Q   if((j%i)==0) 7 M6 i0 d% I7 T8 B' p- a   { n++; a# R% x( O" s A' z6 M/ b2 `. i* r     s=s-i; 8 o7 G8 o* v3 y- M1 W    k[n]=i;( x) e% Q" H4 `    } w' ~7 d7 N: t2 Z B& Q   }9 P0 T; S, j* C+ @ S  if(s==0) H+ Y+ \ O/ H8 H6 M  {3 d& i0 M! J. ]! V  printf("%d is a wanshu",j);. I3 M7 Y6 E' q$ A6 k* D  for(i=0;i  printf("%d,",k); 2 L1 L/ i [* r$ z& @' k printf("%d\n",k[n]);7 @" P8 f( Y5 z: ~% S3 l* L  }/ i8 C1 G+ y9 h) Y7 c/ q( A }% y1 T8 T( c, n7 a }
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:27:00 | 显示全部楼层

【程序11】 % Z- ^& a3 T" q2 U: E. v/ y/ N题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?) ?; x% D. M- Q, N1 ` 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 $ W" v3 Z: \& c5 f+ @      掉不满足条件的排列。 7 E# k3 ]! c* u7 [( ~" }2.程序源代码:; b2 _" w: x" e main()8 ~8 {/ Q6 }4 h4 n" u {5 L4 M: y6 Y) [7 l int i,j,k; x0 F! X4 i$ R; }( | printf("\n");# m3 ~7 ^/ u; L8 q5 p! w for(i=1;i<5;i++)    /*以下为三重循环*/3 y, ~9 q: ~% p% w6 j) u  for(j=1;j<5;j++) 0 C( k' w- ~3 w8 a6 F   for (k=1;k<5;k++) 5 p# b; u5 P, Y. w% C   {/ B5 v6 `+ H* J0 z3 l" i# l6 ^' @! W     if (i!=k&&i!=j&&j!=k)    /*确保i、j、k三位互不相同*/ 4 t3 ~6 ]' y; t# Z. J" H: l4 R    printf("%d,%d,%d\n",i,j,k);4 d+ ~! C6 f% Y+ e    }. @8 Y+ @; H: e6 F" a9 Z4 q }

/ \- h! L5 E0 n4 I9 h3 E 【程序12】( ?6 Y1 w- f' j- D8 i+ v5 H 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 " L0 y' `( `. t5 [5 ^! o! Q. r   于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 7 H# z1 y' C+ x" [; C; Y [   成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 # ^, [' e5 t I' m   40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 * X7 G% W% R1 }/ t7 I# _   100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? + g& H/ A, n8 l! m. G5 m- J1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。       K3 x6 _ q$ U# }9 x" J2 U 2.程序源代码: + m# P+ g- o' F4 }5 Hmain(); _( j6 X# P% }6 V {! W* }& o/ c# L+ h% x! ] long int i; + m( e1 I6 ` m" Qint bonus1,bonus2,bonus4,bonus6,bonus10,bonus;5 I# d) p+ m: J* [$ l3 Y scanf("%ld",&i); % ^& l) K+ s# A2 V7 z0 W, d U# Hbonus1=100000*0.1;bonus2=bonus1+100000*0.75; & y$ s" v- t; ~9 h6 m$ F; |) Y% ybonus4=bonus2+200000*0.5; * h5 t3 K) o# L' \bonus6=bonus4+200000*0.3;/ F% _: I3 Q F' ^ bonus10=bonus6+400000*0.15; 6 S( p4 H+ }9 d if(i<=100000) & k, K9 f$ A4 m3 X) _# Q; s8 j  bonus=i*0.1;$ J9 Y+ U/ M) d# @9 T, q, s  else if(i<=200000)- S+ V' ^9 i; z7 A+ S$ w3 Q' \+ t      bonus=bonus1+(i-100000)*0.075; , a7 s6 |' c$ D5 _% ?1 a' m    else if(i<=400000) 2 q" K4 r/ O& {- o; B( G9 P) C        bonus=bonus2+(i-200000)*0.05;$ n$ L2 S2 {. U        else if(i<=600000) 0 q/ m) \3 l2 ^ k           bonus=bonus4+(i-400000)*0.03;5 _& b: H0 e! q, ]$ a           else if(i<=1000000) 8 h8 C& s/ \9 G              bonus=bonus6+(i-600000)*0.015;; K3 b* {: z: ]# t              else % @' I# D3 i. @+ H0 h N/ p$ @              bonus=bonus10+(i-1000000)*0.01;6 Z$ q4 ?# H+ L% p- |$ v printf("bonus=%d",bonus); }( E9 V, u7 C1 m% S} * r9 s8 W! w0 u6 }9 X+ V

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

本版积分规则

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

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

GMT+8, 2025-5-15 09:38

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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