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

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

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

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

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

×

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

# N+ C% y4 E6 R/ a- ?" f' a

  Svchost进程概述

& }8 b+ S( f: [# k& O8 k

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

* L9 d0 b3 K, s7 t9 Z, i

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

' }; ~& A, {3 w* _5 g2 ] _ " [* q, v6 I! X! ]( f) K! Q

* A! L; I9 s% h注册表中的Svchost 5 x, e7 ^ A/ I  实际上,Svchost只是作为服务的宿主,本身并不实现什么功能。如果需要使用Svchost来启动某个DLL形式实现的服务,该DLL的载体Loader指向Svchost,在启动服务的时候由Svchost调用该服务的DLL来实现启动的目的。使用Svchost启动某个服务的DLL文件是由注册表中的参数来决定的,在需要启动服务的注册表项下都有一个“Parameters”子项,其中的“ServiceDll”键值表明该服务由哪个DLL文件负责,并且这个DLL文件必须导出一个ServiceMain()函数,为处理服务任务提供支持。

0 U) f6 o+ n/ u

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

`) b. V0 e7 ?/ e/ I

  Svchost进程实例讲解

n9 T* y0 S4 v

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

: [3 C4 M, H3 ?$ `2 A9 ~6 u3 v: L ' X! t3 B# d, j- r7 O" f g

图2 Svchost的服务列表 , l8 }4 ^/ E% f5 k8 d  这里我们以RpcSs服务为例,来具体了解一下Svchost进程与服务的关系。运行Regedit,打开注册表编辑器,依次展开[HKEY_LOCAL_MACHINE\SYSTEM\

: I$ f' y4 d* a( T% v& @

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

3 \, A% j0 e0 }4 \1 w7 j

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

" n0 r6 ~: k% h+ v6 F

  Svchost进程木马浅析

r* v) P8 o) g9 }. p4 {. u* o

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

. i" ^7 i! L. [* h3 X+ j

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

5 `) m1 Q R4 f0 X' x

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

- F! g) x' y' {# B* j; ^: n: Z6 A3 W

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

' n/ B- s/ W: G. Q/ \% |

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

5 O! z) }- r& r+ y$ J ) w5 A4 I( s7 R* F/ C) J8 E5 g6 q

Svchost进程中的模块信息 " C( v) x Q9 Q2 {" [  提示:在Windows 2000中,系统的Iprip服务侦听由使用Routing Information协议版本1(RIPv1)的路由器发送的路由更新信息,在服务列表中显示的名称为“RIP Listener”。

+ j: [( O) O) o! \3 W2 S

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

. w' e. j5 U! e6 f

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

) a2 Z$ k/ |8 { v5 T/ d

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

1 b% t! b5 _2 [( e) f8 U4 g

1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21..../ U \, V. I g+ x4 w6 C: U 2.程序源代码:

4 m8 O6 }$ Q1 |$ A) K7 Z6 `) b! {

main()5 }( ^4 o( }( Q* b* P) g; Y: v) u' C {9 `9 n6 `3 e e" k% ]8 [/ i long f1,f2;4 K: k' R, M; J0 c int i;0 J) v; t( _& J8 `* _6 _) X f1=f2=1;/ R- c8 Z- I& F/ R- k. u. ^- V t for(i=1;i<=20;i++)+ U5 w3 a' n) `* e+ i9 s+ }. P  { printf("%12ld %12ld",f1,f2); 2 e0 X* e9 A4 h I' o3 d   if(i%2==0) printf("\n");/*控制输出,每行四个*/) o# e u) a; b: L# l: B1 E    f1=f1+f2; /*前两个月加起来赋值给第三个月*/0 g! {* b6 i* h& F    f2=f1+f2; /*前两个月加起来赋值给第三个月*/ 8 A( H* L4 U% J& p, ~# ? }. C, _8 N& \ F* p! ^ }3 P8 S8 Q- Z" x) \ * p& R( V* F9 f- M- | 2 e% y9 T! M0 \ Q6 Q; M

遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:21:00 | 显示全部楼层
【程序2】 : h" G% Q1 A2 |题目:判断101-200之间有多少个素数,并输出所有素数。4 Z! s! d* [ B6 l, F 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,2 J# E/ m) Z- C2 n# ?) k       则表明此数不是素数,反之是素数。        8 q8 j' h! U* @! V7 o8 H2.程序源代码: / m# n H# ^" D, o' j#include "math.h": j* ^4 M1 x4 [7 v2 U main() ( o: E1 u6 |, h3 I' F3 C{ o) T; A D, s  int m,i,k,h=0,leap=1;# ]8 k9 Z( N U) O  printf("\n"); 1 y* T1 p. |. | for(m=101;m<=200;m++) $ [6 ~* s* Q' A5 p* E M8 S  { k=sqrt(m+1); , L) ~4 v, V" ~% X+ C   for(i=2;i<=k;i++) - Z$ L+ q/ r+ H6 j/ h     if(m%i==0)4 q: a8 f3 Y! O' S) q# g       {leap=0;break;} : I3 [: D9 j/ W7 @$ b   if(leap) {printf("%-4d",m);h++;7 w9 d8 y" y4 k l0 z/ P/ z         if(h%10==0); N3 J: g' ?2 a) U1 h: s         printf("\n"; % e* e: q4 P& q: z, T        }8 Y# U! b% M) S1 d" T    leap=1;: f; K' }3 u( {   } 8 ^- m: L" ]( [. _ printf("\nThe total is %d",h); , ~. f% k# m) x0 K}
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:21:00 | 显示全部楼层
【程序3】 | H4 H- n: R题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。) D3 Y% L. U( V# b 1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 9 i J" w( T* B* j3 }7 O K; O2.程序源代码:& q% S3 p* Q: |6 Q main() % x q7 S4 b, J7 E{ 1 j7 K2 `- i* i4 w9 D7 h# Kint i,j,k,n;$ s' v7 r5 E1 V3 _% e printf("'water flower'number is:"); 0 b/ u$ ]. l, g- {7 O for(n=100;n<1000;n++)$ P( x% ]. W. u- H, V2 Y  { , |' K* \3 S) s2 q  i=n/100;/*分解出百位*/+ V' z. _; D# K4 ~   j=n/10%10;/*分解出十位*/. b! G" O& D; a/ X! q   k=n%10;/*分解出个位*/ , R3 t' a* h, {  if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) u) A5 A& L/ P% r0 L/ @    { ! [: G, u8 q: P6 L& ^$ D   printf("%-5d",n); 0 P% F0 Y( i/ r- P, S   }/ p0 p% W# E; {  } 7 T, i1 M& x1 x9 p f! J3 Yprintf("\n");) o& d" D1 ?0 x2 a4 n }
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:22:00 | 显示全部楼层

【程序4】- _4 s. G, m2 ] u; h0 k- N2 r8 ` 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。' K' v4 X6 h- y 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: ) S* W8 Y# \% S! M5 Q2 R6 u3 I(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 ! [+ D+ h) M. \0 j(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,- X, N! \/ T' B" U a" p% [  重复执行第一步。- d: P! {' y, F6 P _0 P (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

2.程序源代码:0 \- Q/ ^; W2 j& @, V& K# A /* zheng int is divided yinshu*/# N- P t( u( A2 q4 ` main()/ |; M, ~7 B6 a. w7 v { ' s$ L# u5 G; I8 ~int n,i;2 y2 N$ r" x q$ A' C, z' v K printf("\nplease input a number:\n"); : w! Q. i3 |) q! Q. G; N) Cscanf("%d",&n); : `. Z. ?$ Y: T% B8 }, @, Eprintf("%d=",n); ' d) h! w2 M' ^ Z5 Ffor(i=2;i<=n;i++) + m& ~( F$ ^9 c$ G- D { : @' _. e# h3 b! G  while(n!=i)" a) j. O3 o) r/ Z   {: O; A8 D3 E* _5 x/ g$ c) x( d    if(n%i==0) $ I( z1 ] P% Z3 c; R6 ~   { printf("%d*",i); 0 W8 @; @4 ^2 g8 u; S    n=n/i;. W2 k. X: ]# {- O/ p, f    } , i, F6 b9 t; o8 U' K$ C0 ?   else 7 ~/ X9 j8 l; f    break;* f/ D" C/ a- S   } 7 y: Y; c* c& H% {' s} & s$ }9 l! X1 M5 {printf("%d",n);}/ u3 j3 W& @) o

遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:23:00 | 显示全部楼层
【程序5】 ' h! ^% g+ y( _/ e题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示, , R* I. R0 p9 Y$ O/ p! n   60分以下的用C表示。 , N0 D7 u6 {9 @. Z: A& ~1.程序分析:(a>b)?a:b这是条件运算符的基本例子。2 B6 ]# _) ]1 @0 X8 r. _6 H 2.程序源代码:8 Q! h, R; K% K1 b8 j0 l% o, T. p3 j main() ! f6 r$ y7 i4 V4 |/ P: A) v{ " u5 C. w/ W4 g1 x% O" A int score; C* o6 k; h! D, z  char grade; ; S1 H$ B1 U& r G2 O6 @ printf("please input a score\n"); . }1 [: b' ?5 X& b: O. A scanf("%d",&score);; _2 Y8 B* E) h+ G  grade=score>=90?'A':score>=60?'B':'C'); 9 b$ n' o/ u* X8 J7 e% K printf("%d belongs to %c",score,grade);: y$ Z$ J3 M3 @ }
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:24:00 | 显示全部楼层

【程序6】 ) J7 D7 k# c3 M% E% Y* o题目:输入两个正整数m和n,求其最大公约数和最小公倍数。2 h& E* ?, Y+ {: u5 G6 L+ z! L! s 1.程序分析:利用辗除法。

2.程序源代码: F# l C# _/ i, L7 h3 y& D7 c main()7 }9 ` M: z' W) ~7 ^, }7 ? {0 x" i* y1 ]' t' m t  int a,b,num1,num2,temp;) {- t$ A0 C7 f7 p; Q# F  printf("please input two numbers:\n");4 m# ]1 @* Y' K' e# m  scanf("%d,%d",&num1,&num2);5 N0 V! U% Q! Q  if(num1  { temp=num1; " {( N: U! G& l( t2 u: h& d4 w  num1=num2; ) V0 T9 @8 Q+ k$ N3 g   num2=temp;( E8 ^, ]; Z! x: t  }, A& ^2 j. g" Y2 x% V! A7 F' R a=num1;b=num2; ; c* T* k- ^$ Rwhile(b!=0)/*利用辗除法,直到b为0为止*/ / M! ~, s: w- ~' H1 W {) q& V* F% X4 F( [+ _   temp=a%b;2 T* h/ y1 F3 D: A   a=b;$ n- \% e- Z2 o1 }- H5 b   b=temp;: @8 w' |5 B: `9 |; H7 O( N$ _  } 8 N! }* Z( ~; M, k0 C/ L/ t; vprintf("gongyueshu:%d\n",a); ( c3 J; M" {2 C, E' i) v; m' ^2 xprintf("gongbeishu:%d\n",num1*num2/a); e: I& \& ?6 `% v } ' \4 F* R. \ r$ n+ R

遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:25:00 | 显示全部楼层
【程序7】1 F7 h9 R# L/ z7 J& l+ Y 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 0 ?# o( |2 F1 Z& J% ^& i5 K1.程序分析:利用while语句,条件为输入的字符不为'\n'.3 d9 Y W0 _. I       ' M6 u8 y+ \4 |( D1 r1 G9 M 2.程序源代码:( E8 e# y M' u9 h% S9 D5 i #include "stdio.h"+ q1 A* I* x8 r5 s8 X T$ W main() 2 Y* A5 W; `: `! [: ] D+ |$ b{char c; 5 c i! e _2 @/ R4 ` int letters=0,space=0,digit=0,others=0; 4 \5 c. D# Y# t* C1 S printf("please input some characters\n"); " B6 [/ |, s# r+ J5 Q( }) Y) R while((c=getchar())!='\n')$ U# @2 K' B% J- d0 z% T( ?4 C6 y  { # e4 |, w8 F- m, ^ if(c>='a'&&c<='z'||c>='A'&&c<='Z') - R% o5 `. x/ {' s  letters++;. _* U ~/ v5 O! A0 l  else if(c==' ')' _4 Y+ ]8 r' |( r' d8 T( {   space++; 5 ~, i3 }& r0 k2 O. t5 E   else if(c>='0'&&c<='9') ' a/ h0 I7 U' s g       digit++;& K" Z t9 q% Q      else , z7 f5 M, H$ @: h6 x6 L6 @       others++;7 N1 t2 z' D6 e$ E- C }. @4 j- i+ H5 W- c7 C0 b printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,space,digit,others);4 o: }+ q7 ?# P7 o- S }
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:25:00 | 显示全部楼层
【程序8】% q) Q6 \; }( t9 E/ P6 F T 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时) K0 n+ r, f4 p2 N1 G    共有5个数相加),几个数相加有键盘控制。4 c4 h9 W; k& h. H# `1 x0 V! F/ u 1.程序分析:关键是计算出每一项的值。 . I+ T: T$ s! C5 @4 U7 q2.程序源代码: 1 T! O# e3 ^. S6 I! p1 `1 Gmain()8 v6 [# U0 ?0 b3 t3 j% I { ( M/ M+ o: P2 f" }9 D int a,n,count=1;$ B6 h' T5 x0 r# x2 l- D9 b  long int sn=0,tn=0;% m, H2 M, x5 W, @0 k8 p6 ]% ~2 _) H  printf("please input a and n\n"); 2 F- [4 }6 x( J0 _; J scanf("%d,%d",&a,&n);7 `$ v8 @8 p1 D5 n7 h+ U( C1 @  printf("a=%d,n=%d\n",a,n);! U$ S" R; ~4 F  while(count<=n)% y0 q6 D$ Z1 N6 y$ S9 S# Q/ z4 f  { {1 f- H3 v8 A& r+ X) _   tn=tn+a;6 v! I" ~/ `6 q& |   sn=sn+tn;5 q7 m/ B' J0 _ z4 J8 A   a=a*10;" p# X. \0 x1 [1 d8 ^   ++count; k" E; m; r) g) Q$ ? }/ K9 {: h5 c, B* I# j) Z+ |, \ printf("a+aa+...=%ld\n",sn);8 `0 y& T2 L& Z+ Q5 E. f+ { }
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:26:00 | 显示全部楼层
【程序9】5 k8 I0 q7 L$ E6 n+ w 题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程 ; s) [9 T0 B% ?" ? M   找出1000以内的所有完数。, z( G' x0 x5 X. t) b+ I/ F 1. 程序分析:请参照程序<--上页程序14. + v/ j* b. ~& q6 M0 b# ]/ L8 S2.程序源代码:% g5 [/ g" {3 ] e main() : y/ Z z9 x8 F! o6 G{9 A4 I# b5 @7 f: { static int k[10]; 6 S* |$ S) Q4 dint i,j,n,s;: L, `& ?4 K5 p2 g& a; Q9 l: ^' q5 [ g for(j=2;j<1000;j++) S! U! c. m- X" C$ b: ]1 _2 d6 {0 V {4 W) a l( b% v1 u  n=-1; - w8 t) k9 v5 I$ o- M T( ^& q/ { s=j;* b$ H' l) o) m# c+ O. s0 P- [   for(i=1;i   {( ` v' @" U: A    if((j%i)==0), T, p, m X, z+ L, F- d5 }    { n++;) S* I5 C2 F/ V2 h; y     s=s-i;. Y* e: U. j+ _: b$ u     k[n]=i; ! }! ?/ t6 m/ l. O   }: b4 K! ^# J# D: v   } - K. }- O& _6 p if(s==0) ) X0 x8 {5 u1 @% ?: {7 B {0 q# t: r% E5 t  printf("%d is a wanshu",j);9 \4 ]6 K& L, {7 _2 ~  for(i=0;i  printf("%d,",k);! F, s# a& l4 G; ?  printf("%d\n",k[n]); & l; X+ z5 |' H3 H. E } a6 a' j5 R& g% \- k4 Y}0 B+ ~ f# k/ q Z/ B- u# B }
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2004-11-17 12:27:00 | 显示全部楼层

【程序11】 ; E+ \6 r! F' W; J) ~题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? i- d1 D- @- W( q3 F1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 , q6 A8 F4 k5 K3 H( U7 f6 K; `3 ?* f3 m      掉不满足条件的排列。 + m) ?+ i3 t, I% v4 E7 X4 m& {7 q8 H2.程序源代码:- r7 Q- o& a, }0 a/ H( D8 o% C main() * B1 j3 a/ Q: K{6 a! S' }4 q$ E$ Z g$ y int i,j,k; 8 A- @# h0 \3 O3 pprintf("\n"); 8 @1 F$ H& G$ X: X2 F, U Cfor(i=1;i<5;i++)    /*以下为三重循环*/ # d* k6 J. `2 L for(j=1;j<5;j++)  t- b9 `/ h$ ?3 f: z+ b" W+ X" ]   for (k=1;k<5;k++) % s5 K/ _8 x" l! N. _4 w/ \   { : m3 h& c( A# `9 K    if (i!=k&&i!=j&&j!=k)    /*确保i、j、k三位互不相同*/ 6 o& q* j1 b# m" k6 a+ @    printf("%d,%d,%d\n",i,j,k);* a2 G% k- i9 ]    }8 m6 I$ g7 w0 b) ^ }

/ V4 n3 W9 C9 E: e【程序12】* E! C: h+ g8 _ 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高$ @4 f J1 @4 J. p1 o    于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提) I+ U4 E0 w+ s+ u& n! r' b    成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于8 g! y, O* @) L! ?) q) H' j    40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于& Y& W4 i3 C+ \% [. j! d    100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?% Q3 r7 N" G+ U; M# c) n, G 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。       " q( |- f# B1 O9 |" G P( {2.程序源代码: ( O4 J0 h+ N k6 H1 H2 i. B Z9 Nmain()2 e/ c( ]2 h) l2 H& n { . b5 Z" r3 q# C- M c/ L, F5 `long int i;, c, j; B6 w( w int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;; X# x* D W* U. U scanf("%ld",&i); : C$ J' n5 e/ d" N3 `, Wbonus1=100000*0.1;bonus2=bonus1+100000*0.75;# Z- E3 Z% p# I1 ]( A bonus4=bonus2+200000*0.5;6 `+ X3 k& D* V' L2 |0 g/ H$ |' Z bonus6=bonus4+200000*0.3; ; n% \0 Q, [, G8 Q' e: _, qbonus10=bonus6+400000*0.15;" t" E" b) p# U1 q. ]" F" L: d  if(i<=100000) ; k7 u8 |* Y1 Y2 _! F: f  bonus=i*0.1;& ]8 A( Y" ^" j% G% {  else if(i<=200000) 3 X5 ?6 Y2 d4 N     bonus=bonus1+(i-100000)*0.075;7 G* K1 D% w0 u" t4 @ \0 g' A" M* w     else if(i<=400000) 0 g* R; e" Z1 \" `" G6 X1 ~( G2 d        bonus=bonus2+(i-200000)*0.05; & Q4 j# P* g$ u+ K2 ^" G" d       else if(i<=600000)' I3 d/ i8 j8 n1 c- U            bonus=bonus4+(i-400000)*0.03;$ A2 c B4 c. ?2 K3 l& S           else if(i<=1000000) + w4 s6 `7 `) U9 g# y! |' u' o! a              bonus=bonus6+(i-600000)*0.015;1 h7 V6 q2 l5 O5 p( j( z              else5 g% }" N" G* ]. O7 E7 b               bonus=bonus10+(i-1000000)*0.01;7 O3 P8 L& s( X% H printf("bonus=%d",bonus); ' ~5 D% ?' n! z, `" b" j} , ?; x4 w( j# c# K

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

本版积分规则

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

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

GMT+8, 2025-2-19 06:02

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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