1、第第5 5章结构化程序设计章结构化程序设计5.1 结构化程序设计思想结构化程序设计思想5.3 函数函数5.4 一个结构化程序设计的例子一个结构化程序设计的例子5.2 结构化程序设计方法结构化程序设计方法第第5 5章结构化程序设计章结构化程序设计5.1 5.1 结构化程序结构化程序设计思想设计思想第第5 5章结构化程序设计章结构化程序设计主要观点:主要观点:采用自顶向下、逐步求精的程序设计方法采用自顶向下、逐步求精的程序设计方法通过分解降低问题的复杂性。分解后,如果问题还通过分解降低问题的复杂性。分解后,如果问题还是比较复杂,可以对问题进一步分解,一直分解到是比较复杂,可以对问题进一步分解,一直
2、分解到问题足够简单,可以很容易解决为止。问题足够简单,可以很容易解决为止。将问题分解后,每个子问题最终都变成独立的程序将问题分解后,每个子问题最终都变成独立的程序模块,每个模块完成一个单独的功能,所有模块组模块,每个模块完成一个单独的功能,所有模块组合在一起就可以构成一个完整的系统。合在一起就可以构成一个完整的系统。第第5 5章结构化程序设计章结构化程序设计强调使用顺序、选择、循环三种基本结构构造强调使用顺序、选择、循环三种基本结构构造程序,利用三种基本结构的组合嵌套形成更复程序,利用三种基本结构的组合嵌套形成更复杂的杂的“结构化程序结构化程序”,严格控制,严格控制GOTOGOTO语句的使语句
3、的使用用特点:特点:(1)(1)结构化程序中的任意基本结构都具有单入结构化程序中的任意基本结构都具有单入口和单出口。口和单出口。(2)(2)程序不会出现死循环,都能在有限的时间程序不会出现死循环,都能在有限的时间内结束。内结束。(3)(3)程序中任何语句都能够被执行到。程序中任何语句都能够被执行到。第第5 5章结构化程序设计章结构化程序设计5.2 5.2 结构化程序结构化程序设计方法设计方法第第5 5章结构化程序设计章结构化程序设计结构化程序设计强调过程设计,以功能为中心结构化程序设计强调过程设计,以功能为中心5.2.1 5.2.1 功能分解与功能复合功能分解与功能复合功能分解是指在程序设计过
4、程中,不断对功能进行功能分解是指在程序设计过程中,不断对功能进行分解,分解成若干个子功能。每个子功能又可以分分解,分解成若干个子功能。每个子功能又可以分解为若干个子功能,直至最终分解出来的子功能足解为若干个子功能,直至最终分解出来的子功能足够简单,可以很容易解决为止。够简单,可以很容易解决为止。功能复合是指将已实现的底层子功能经过适当组装形功能复合是指将已实现的底层子功能经过适当组装形成上层更大的功能,从而实现自底向上的设计思想。成上层更大的功能,从而实现自底向上的设计思想。第第5 5章结构化程序设计章结构化程序设计第第5 5章结构化程序设计章结构化程序设计在结构化程序设计中,每个子功能最终都
5、变成独立在结构化程序设计中,每个子功能最终都变成独立的程序模块。系统由一些小的功能模块组合而成,的程序模块。系统由一些小的功能模块组合而成,每个功能模块又可以由一些更小的子模块构成。模每个功能模块又可以由一些更小的子模块构成。模块之间就会形成上下层的关系,上层模块所实现的块之间就会形成上下层的关系,上层模块所实现的功能需要调用下层模块来实现。功能需要调用下层模块来实现。5.2.2 5.2.2 模块划分模块划分合理的模块划分:强内聚,低耦合。合理的模块划分:强内聚,低耦合。模块内部联系强,外部联系少,并且功能单一,使模块内部联系强,外部联系少,并且功能单一,使系统中的每个模块只涉及某个具体的子功
6、能,与其系统中的每个模块只涉及某个具体的子功能,与其它模块之间的联系尽可能少。它模块之间的联系尽可能少。第第5 5章结构化程序设计章结构化程序设计耦合性是指模块间相互联系的紧密程度。耦合性是指模块间相互联系的紧密程度。耦合性越小,模块间的联系越少,模块的相对耦合性越小,模块间的联系越少,模块的相对独立性越大,一个模块中的错误就不容易传播独立性越大,一个模块中的错误就不容易传播到其它模块。到其它模块。1.1.耦合性耦合性一般分为:内容耦合、公共耦合、控制耦合、一般分为:内容耦合、公共耦合、控制耦合、复合耦合和数据耦合。复合耦合和数据耦合。耦合性由高到低。耦合性由高到低。第第5 5章结构化程序设计
7、章结构化程序设计内聚性用来衡量一个模块内部各个元素之间结合的紧内聚性用来衡量一个模块内部各个元素之间结合的紧密程度。密程度。内聚性越强,模块内部元素之间联系得越紧密,模块内聚性越强,模块内部元素之间联系得越紧密,模块独立性越好。独立性越好。2.2.内聚性内聚性一般分为:偶然内聚、逻辑内聚、时间内聚、过程一般分为:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚和功能内聚。内聚、通信内聚、顺序内聚和功能内聚。内聚性由弱到强。内聚性由弱到强。第第5 5章结构化程序设计章结构化程序设计5.3 5.3 函数函数第第5 5章结构化程序设计章结构化程序设计模块模块5.3.1 5.3.1 函数定义
8、函数定义格式为:格式为:返回值类型返回值类型 函数名函数名(形参列表形参列表)函数体函数体 子功能子功能子程序子程序函数函数形式参数的格式:类型形式参数的格式:类型 形参名形参名第第5 5章结构化程序设计章结构化程序设计【例【例5.15.1】找零钱】找零钱顾客购买某商品后,需要找回顾客购买某商品后,需要找回m m元的零钱。售货员手元的零钱。售货员手头上有头上有1 1分、分、2 2分和分和5 5分硬币共分硬币共n n枚,问售货员有多少枚,问售货员有多少种找零的方式?种找零的方式?设需要设需要1 1分硬币分硬币x x枚,枚,2 2分硬币分硬币y y枚,枚,5 5分硬币分硬币z z枚。则枚。则根据题
9、意有方程根据题意有方程 采用穷举法获得找零的方案。采用穷举法获得找零的方案。第第5 5章结构化程序设计章结构化程序设计(1)(1)找零函数找零函数GetChangesGetChangesstatic void GetChanges(int m,int n)static void GetChanges(int m,int n)int x,y,z,no=0;int x,y,z,no=0;Console.WriteLine(n Console.WriteLine(n方案方案t1t1分分t2t2分分t5t5分分););for(x=0;x 10;x+)for(x=0;x 10;x+)for(y=0;y
10、10;y+)for(y=0;y=0)if(x+2*y+5*z=m&z=0)no+;no+;Console.WriteLine(0)t1t2t3,no,x,y,Console.WriteLine(0)t1t2t3,no,x,y,z);z);第第5 5章结构化程序设计章结构化程序设计(2)(2)主函数主函数MainMainstatic void Main(string args)static void Main(string args)double m;double m;int n;int n;Console.Write(Console.Write(请输入需要找回的零钱请输入需要找回的零钱(元元)
11、:););m=double.Parse(Console.ReadLine();m=double.Parse(Console.ReadLine();Console.Write(Console.Write(请输入售货员有多少枚硬币:请输入售货员有多少枚硬币:););n=int.Parse(Console.ReadLine();n=int.Parse(Console.ReadLine();GetChanges(int)(m*100),n);GetChanges(int)(m*100),n);Console.ReadLine();Console.ReadLine();第第5 5章结构化程序设计章结构化
12、程序设计调用函数的格式为:调用函数的格式为:函数名函数名(实参列表实参列表)5.3.2 5.3.2 函数调用函数调用u实参列表为函数能够接受的实在参数列表。实参实参列表为函数能够接受的实在参数列表。实参是一个表达式,其类型与形参一致。是一个表达式,其类型与形参一致。u可包含零或多个实参,应与形参一致。可包含零或多个实参,应与形参一致。u函数有返回值函数有返回值:函数调用可作为表达式函数调用可作为表达式的的操作数,操作数,或或作为语句使用作为语句使用。u函数没有返回值函数没有返回值:只能作为语句使用。只能作为语句使用。第第5 5章结构化程序设计章结构化程序设计【例【例5.25.2】求两个数中的最
13、大值】求两个数中的最大值 static int larger(int x,int y)static int larger(int x,int y)int max;int max;max=x;max=x;if(y max)if(y max)max=y;max=y;return max;return max;第第5 5章结构化程序设计章结构化程序设计【例【例5.25.2】求两个数中的最大值】求两个数中的最大值static void Main(string args)static void Main(string args)int m,n;int m,n;Console.WriteLine(Cons
14、ole.WriteLine(请输入两个整数:请输入两个整数:););m=int.Parse(Console.ReadLine();m=int.Parse(Console.ReadLine();n=int.Parse(Console.ReadLine();n=int.Parse(Console.ReadLine();Console.WriteLine(0 Console.WriteLine(0和和11两个数中的最大值为两个数中的最大值为2,m,n,larger(m,n);2,m,n,larger(m,n);Console.ReadLine();Console.ReadLine();第第5 5章结
15、构化程序设计章结构化程序设计1.1.值类型参数值类型参数把实参的一个副本传递给相应的形参,即形参获得把实参的一个副本传递给相应的形参,即形参获得的是实参的值。的是实参的值。在函数内部对形参的修改不会影响到实参。在函数内部对形参的修改不会影响到实参。5.3.3 5.3.3 参数传递参数传递值类型参数值类型参数:u常量常量u表达式。先计算表达式,然后将计算结果传递给表达式。先计算表达式,然后将计算结果传递给形参。形参。当从函数返回时,值类型参数被销毁。当从函数返回时,值类型参数被销毁。第第5 5章结构化程序设计章结构化程序设计【例【例5.35.3】交换两个变量的值】交换两个变量的值 static
16、void Swap(int a,int b)static void Swap(int a,int b)int p;int p;p=a;p=a;a=b;a=b;b=p;b=p;第第5 5章结构化程序设计章结构化程序设计【例【例5.35.3】交换两个变量的值】交换两个变量的值static void Main(string args)static void Main(string args)int x,y;int x,y;Console.WriteLine(Console.WriteLine(请输入两个整数:请输入两个整数:););x=int.Parse(Console.ReadLine();x=i
17、nt.Parse(Console.ReadLine();y=int.Parse(Console.ReadLine();y=int.Parse(Console.ReadLine();Console.WriteLine(Console.WriteLine(交换前:交换前:0t1,x,y);0t1,x,y);Swap(x,y);Swap(x,y);Console.WriteLine(Console.WriteLine(交换后:交换后:0t1,x,y);0t1,x,y);Console.ReadLine();Console.ReadLine();第第5 5章结构化程序设计章结构化程序设计引用类型不存储
18、实际数据内容,它存储对实际数据引用类型不存储实际数据内容,它存储对实际数据的内存地址的引用。我们可以通过该引用来操作它的内存地址的引用。我们可以通过该引用来操作它所指向内存中的数据,而不是直接操作该数据。所指向内存中的数据,而不是直接操作该数据。2.2.引用类型参数引用类型参数当两个引用类型变量引用同一内存中的数据时,对当两个引用类型变量引用同一内存中的数据时,对其中一个引用类型变量进行操作时会影响另一个引其中一个引用类型变量进行操作时会影响另一个引用类型变量。用类型变量。第第5 5章结构化程序设计章结构化程序设计向函数传递引用类型参数,即把实参的一个引用传向函数传递引用类型参数,即把实参的一
19、个引用传递给形参。形参只是实参的一个引用,不是实参的递给形参。形参只是实参的一个引用,不是实参的一个副本。一个副本。在函数中对引用类型参数的任何更改都会反映给实在函数中对引用类型参数的任何更改都会反映给实参,即实参与引用类型参数同时发生变化。参,即实参与引用类型参数同时发生变化。2.2.引用类型参数引用类型参数使用使用refref修饰符声明的参数,即为引用类型参数。在修饰符声明的参数,即为引用类型参数。在调用函数时,也要在实参前面加上调用函数时,也要在实参前面加上refref修饰符。修饰符。第第5 5章结构化程序设计章结构化程序设计【例【例5.5.4 4】交换两个变量的值】交换两个变量的值 s
20、tatic void Swap(ref int a,ref int b)static void Swap(ref int a,ref int b)int p;int p;p=a;p=a;a=b;a=b;b=p;b=p;第第5 5章结构化程序设计章结构化程序设计【例【例5.5.4 4】交换两个变量的值】交换两个变量的值static void Main(string args)static void Main(string args)int x,y;int x,y;Console.WriteLine(Console.WriteLine(请输入两个整数:请输入两个整数:););x=int.Parse
21、(Console.ReadLine();x=int.Parse(Console.ReadLine();y=int.Parse(Console.ReadLine();y=int.Parse(Console.ReadLine();Console.WriteLine(Console.WriteLine(交换前:交换前:0t1,x,y);0t1,x,y);Swap(Swap(ref ref x,x,ref ref y);y);Console.WriteLine(Console.WriteLine(交换后:交换后:0t1,x,y);0t1,x,y);Console.ReadLine();Console.
22、ReadLine();第第5 5章结构化程序设计章结构化程序设计u使函数返回多个值。使函数返回多个值。u参数通过引用来传递。参数通过引用来传递。3.3.输出参数输出参数u定义函数时,使用定义函数时,使用outout修饰符声明的参数。修饰符声明的参数。u调用函数时,在实参前面加上调用函数时,在实参前面加上outout修饰符。修饰符。第第5 5章结构化程序设计章结构化程序设计【例【例5.55.5】判断所输入的字符是否包含数字,】判断所输入的字符是否包含数字,若包含则返回该数字若包含则返回该数字static bool IsDigit(char ch,out int digit)static bool
23、 IsDigit(char ch,out int digit)if(ch=0&ch=0&ch=9)digit=(int)ch-48;digit=(int)ch-48;return true;return true;else else digit=-1;digit=-1;return false;return false;第第5 5章结构化程序设计章结构化程序设计【例【例5.55.5】判断所输入的字符是否包含数字,】判断所输入的字符是否包含数字,若包含则返回该数字若包含则返回该数字static void Main(string args)static void Main(string args)
24、char c;bool b;int d;char c;bool b;int d;Console.WriteLine(Console.WriteLine(请输入一个字符:请输入一个字符:););c=(char)Console.Read();c=(char)Console.Read();b=IsDidit(c,out d);b=IsDidit(c,out d);if(b)Console.WriteLine(if(b)Console.WriteLine(输入的数字为:输入的数字为:0,d);0,d);else Console.WriteLine(else Console.WriteLine(你输入的
25、不是一个数字!你输入的不是一个数字!););Console.ReadLine();Console.ReadLine();第第5 5章结构化程序设计章结构化程序设计u函数参数的个数不固定,使用参数数组。函数参数的个数不固定,使用参数数组。u当函数参数为参数数组时,可以使用当函数参数为参数数组时,可以使用0 0、1 1、2 2、n n个参数调用函数。个参数调用函数。u参数数组与同一类型的值类型参数完全等效参数数组与同一类型的值类型参数完全等效4.4.参数数组参数数组u使用使用paramsparams修饰符声明的参数,即为参数数组。修饰符声明的参数,即为参数数组。u参数数组必须是形参列表中的最后一个
26、参数参数数组必须是形参列表中的最后一个参数u一个函数中,只能有一个参数数组。一个函数中,只能有一个参数数组。第第5 5章结构化程序设计章结构化程序设计【例【例5.65.6】求和】求和static int Sum(params int value)static int Sum(params int value)int result=0;int result=0;for(int i=0;i value.Length;i+)for(int i=0;i max)max=y;if(y max)max=y;return max;return max;static double Larger(double
27、x,double y)static double Larger(double x,double y)double max=x;double max=x;if(y max)max=y;if(y max)max=y;return max;return max;第第5 5章结构化程序设计章结构化程序设计【例【例5.75.7】利用重载函数比较不同类型的值】利用重载函数比较不同类型的值 static double Larger(double x,double y,static double Larger(double x,double y,double z)double z)double max;dou
28、ble max;max=Larger(x,Larger(y,z);max=Larger(x,Larger(y,z);return max;return max;第第5 5章结构化程序设计章结构化程序设计【例【例5.75.7】利用重载函数比较不同类型的值】利用重载函数比较不同类型的值static void Main(string args)static void Main(string args)int x,y;double a,b,c;int x,y;double a,b,c;Console.WriteLine(Console.WriteLine(请输入两个整数:请输入两个整数:););x=i
29、nt.Parse(Console.ReadLine();x=int.Parse(Console.ReadLine();y=int.Parse(Console.ReadLine();y=int.Parse(Console.ReadLine();Console.WriteLine(0 Console.WriteLine(0与与11中的最大值为中的最大值为2,x,2,x,y,Larger(x,y);y,Larger(x,y);a=double.Parse(Console.ReadLine();a=double.Parse(Console.ReadLine();b=double.Parse(Conso
30、le.ReadLine();b=double.Parse(Console.ReadLine();Console.WriteLine(0 Console.WriteLine(0与与11中的最大值为中的最大值为2,a,2,a,b,Larger(a,b);b,Larger(a,b);第第5 5章结构化程序设计章结构化程序设计一个函数在其函数体内直接或间接地调用自身,则一个函数在其函数体内直接或间接地调用自身,则该函数称为递归函数。该函数称为递归函数。5.3.5 5.3.5 递归函数递归函数void func()void func()func();func();void func()void func
31、()another();another();void another()void another()func();func();第第5 5章结构化程序设计章结构化程序设计【例【例5.85.8】求】求n!n!阶乘的数学公式:阶乘的数学公式:转化为以下形式:转化为以下形式:第第5 5章结构化程序设计章结构化程序设计【例【例5.85.8】求】求n!n!static long f(int n)static long f(int n)if(n=0)if(n=0)return 1;return 1;else else return n*f(n-1);return n*f(n-1);第第5 5章结构化程序设
32、计章结构化程序设计【例【例5.85.8】求】求n!n!static void Main(string args)static void Main(string args)long result;long result;int n;int n;Console.Write(Console.Write(请输入一个整数:请输入一个整数:););n=int.Parse(Console.ReadLine();n=int.Parse(Console.ReadLine();result=f(n);result=f(n);Console.WriteLine(0!=1,n,Console.WriteLine(0!
33、=1,n,result);result);第第5 5章结构化程序设计章结构化程序设计求解求解n!n!,将问题分解为求,将问题分解为求(n-1)!(n-1)!。依此类推,直至。依此类推,直至0!0!等于等于1 1为止。最后,综合各子问题的解,即可求得为止。最后,综合各子问题的解,即可求得n!=12n!=12n-1nn-1n。第第5 5章结构化程序设计章结构化程序设计在设计递归函数时,一般要考虑两个问题:在设计递归函数时,一般要考虑两个问题:(1)(1)如何将问题分解为性质相同的子问题。例如,如何将问题分解为性质相同的子问题。例如,n!=n(n-1)!n!=n(n-1)!。(2)(2)递归结束条件
34、。例如,递归结束条件。例如,0!=10!=1。如果没有递归结束。如果没有递归结束条件,就会出现无限递归情况。条件,就会出现无限递归情况。第第5 5章结构化程序设计章结构化程序设计【例例5.95.9】求斐波那契序列的第求斐波那契序列的第n n项项 static long fib(int n)static long fib(int n)if(n=1|n=2)if(n=1|n=2)return 1;return 1;else else return fib(n-2)+fib(n-1);return fib(n-2)+fib(n-1);第第5 5章结构化程序设计章结构化程序设计【例例5.95.9】求斐
35、波那契序列的第求斐波那契序列的第n n项项 static void Main(string args)static void Main(string args)int n;int n;Console.Write(Console.Write(请输入一个正整数:请输入一个正整数:););n=int.Parse(Console.ReadLine();n=int.Parse(Console.ReadLine();Console.Write(Console.Write(斐波那契序列的第斐波那契序列的第00项为:项为:1,n,fib(n);1,n,fib(n);第第5 5章结构化程序设计章结构化程序设计5
36、.4 5.4 一个结构化一个结构化程序设计的例子程序设计的例子第第5 5章结构化程序设计章结构化程序设计万年历万年历第第5 5章结构化程序设计章结构化程序设计u月历头需要显示该月份所在的年份、英文月份名的月历头需要显示该月份所在的年份、英文月份名的缩写和一个星期每天的英文缩写名。缩写和一个星期每天的英文缩写名。u月份所在的年份根据用户输入而获得;月份所在的年份根据用户输入而获得;u月份也可以根据用户输入而获得,但必须转换为英月份也可以根据用户输入而获得,但必须转换为英文月份名的缩写形式;文月份名的缩写形式;u一个星期每天的英文缩写名固定不变。一个星期每天的英文缩写名固定不变。万年历万年历u月历
37、体显示一个月的每一天,及每天对应星期几月历体显示一个月的每一天,及每天对应星期几u为了确定每天对应星期几,需要知道每个月的第为了确定每天对应星期几,需要知道每个月的第一天对应星期几。一天对应星期几。第第5 5章结构化程序设计章结构化程序设计万年历万年历获取月份第一天是星期几:获取月份第一天是星期几:week=(6+total)%7week=(6+total)%7第第5 5章结构化程序设计章结构化程序设计【例【例5.105.10】万年历】万年历 (1)(1)显示月历头函数显示月历头函数DisplayTitleDisplayTitle static void DisplayTitle(int y,
38、int m)static void DisplayTitle(int y,int m)GetMonthName(m);GetMonthName(m);Console.WriteLine(t0,y);Console.WriteLine(t0,y);Console.WriteLine(Sun Mon Tue Wed Console.WriteLine(Sun Mon Tue Wed Thu Fri Sat);Thu Fri Sat);Console.WriteLine(-Console.WriteLine(-);-);第第5 5章结构化程序设计章结构化程序设计(2)(2)获取月份名函数获取月份名函
39、数GetMonthNameGetMonthName static void GetMonthName(int m)static void GetMonthName(int m)switch(m)switch(m)case 1:case 1:Console.Write(tJanuary);break;Console.Write(tJanuary);break;case 2:case 2:Console.Write(tFebruary);break;Console.Write(tFebruary);break;case 3:case 3:Console.Write(tMarch);break;Co
40、nsole.Write(tMarch);break;第第5 5章结构化程序设计章结构化程序设计(3)(3)显示月历体函数显示月历体函数DisplayBodyDisplayBody static void DisplayBody(int y,int m)static void DisplayBody(int y,int m)int first=GetFirstDay(y,m);int first=GetFirstDay(y,m);int days=GetDays(y,m);int days=GetDays(y,m);for(int i=0;i first;i+)for(int i=0;i fir
41、st;i+)Console.Write();Console.Write();for(int i=1;i=days;i+)for(int i=1;i=days;i+)Console.Write(0,4,i);Console.Write(0,4,i);if(i+first)%7=0)if(i+first)%7=0)Console.WriteLine();Console.WriteLine();第第5 5章结构化程序设计章结构化程序设计(4)(4)获取月份第一天函数获取月份第一天函数GetFirstDayGetFirstDaystatic int GetFirstDay(int y,int m)st
42、atic int GetFirstDay(int y,int m)int total=0;int total=0;for(int i=1980;i y;i+)for(int i=1980;i y;i+)if(i%4=0&i%100!=0|i%400=0)if(i%4=0&i%100!=0|i%400=0)total+=366;total+=366;else else total+=365;total+=365;for(int i=0;i m;i+)for(int i=0;i m;i+)total+=GetDays(y,i);total+=GetDays(y,i);return(total+6)
43、%7;return(total+6)%7;第第5 5章结构化程序设计章结构化程序设计(5)(5)计算月份天数函数计算月份天数函数GetDaysGetDays static int GetDays(int y,int m)static int GetDays(int y,int m)int days=31;int days=31;switch(m)switch(m)case 1:case 3:case 1:case 3:case 5:case 7:case 5:case 7:case 8:case 10:case 8:case 10:case 12:case 12:return days;ret
44、urn days;第第5 5章结构化程序设计章结构化程序设计(6)(6)主函数主函数MainMain static void Main(string args)static void Main(string args)int year;int month;int year;int month;Console.Write(Console.Write(请输入年份:请输入年份:););year=int.Parse(Console.ReadLine();year=int.Parse(Console.ReadLine();Console.Write(Console.Write(请输入月份:请输入月份:););month=int.Parse(Console.ReadLine();month=int.Parse(Console.ReadLine();Console.WriteLine(n);Console.WriteLine(n);DisplayTitle(year,month);DisplayTitle(year,month);DisplayBody(year,month);DisplayBody(year,month);Console.ReadLine();Console.ReadLine();
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100