欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    第15章程序设计基础.ppt

    • 资源ID:2901819       资源大小:276KB        全文页数:55页
    • 资源格式: PPT        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第15章程序设计基础.ppt

    第15章 程序设计基础,【本章概述】本章介绍了计算机程序设计的基础概念,包括程序设计语言、算法、程序结构、程序设计的基本方法、程序调试以及选择编程语言等。通过本章的学习,使读者初步建立起程序设计的基本概念,理解程序设计的基本方法,为今后系统地学习程序课程打下良好的基础。,15.1 程序设计语言概述,15.1.1 程序设计语言的发展 几个主要阶段:1第一代语言 2第二代语言 3第三代语言 4第四代语言 5第五代语言,15.1.2 程序设计语言的组成 每一种程序设计语言都有规定的词汇,词汇集由标识符、保留字、特殊字符、数值等组成。当我们学习每一种程序设计语言时,应该注意它的语法和语义。语法 表示语言的各个构成记号之间的组合规则。语义 表示的含义。,4种表示成分:数据、运算、控制和传输。1数据 描述程序所涉及的数据对象。在程序运行过程中,其值不变的数据称为“常量”,其值可以改变的数据称为“变量”;另外,有些可以不加任何说明就能引用的运算过程,称为“标准函数”,其函数值可以像常量或变量一样参加运算;由常量、变量、函数、运算符和圆括号组成的式子称为“表达式”,它在程序中代表一个值。程序设计语言所提供的数据结构是以数据类型的形式表现的,程序中的每一个数据都属于某一种数据类型(整型、实型、字符型等)。,2运算 描述程序中应该执行的数据操作。在程序中的运算一般都包括算术运算(加+、减-、乘*、除/、乘方)、关系运算(大于、小于=、小于等于)和逻辑运算(与AND、或OR、非NOT)。,3控制 描述程序的操作流程控制结构。在程序中只要有3种形式的流程控制结构(即顺序结构、选择结构、循环结构),就足以表示出各种各样复杂的算法过程,这已从理论上得到证明。,4传输 表达程序中数据的输入和输出。任一种程序设计语言都包含有编制程序所必需的最基本的语句,这些语句分别是赋值语句、输入/输出语句、选择或条件语句、转移语句、循环语句。,15.1.3 语言翻译器,1.解释器 有些语言使用解释方式的语言翻译器,如BASIC、APL、Java等。我们称之解释式程序设计语言,其翻译器称为“解释器”(Interpreter)。解释器的工作方式是对你的源程序代码每转换一行,就执行一行。由于这种方式一次解释一行,执行一行,解释结果并不保留,以后再次执行该程序之前,仍需同样的解释。比如有这样一个含有循环结构的QBASIC程序片段:For I=l TO 100 PRINT“I=”;I NEXT I 在100次的运行中就被翻译了100次,显然做了一些重复的工作。因此这种方式下程序执行的速度慢。,2.编译器 编译器(Compiler),是指在编译过程中将你的高级语言源程序所有代码经过“编译器”转换为计算机能识别的目标程序代码。使用编译器时,如果程序有错误,必须在编译成功之前改正所有的错误。如FORTRAN、PASCAL、C等语言都是这种编译型的程序设计语言。,15.2 程序和程序设计,15.2.1 过程程序设计 早期,人们把程序看作是处理数据的一系列过程(Procedure)。一个过程或函数(Function)是指一组特定的一个接一个顺序执行的指令,它们完成某一专门任务或计算出一个结果值。数据与过程是分离的,其程序设计的技巧主要是在处理过程之间的调用及完成任务或计算的算法,关心的是数据的变化。过程程序设计的关键是程序设计语言所提供的子程序及参数传递形式。从程序组织的角度来看,子程序是用于有组织地管理大量算法的有力工具 程序=算法+数据结构(包含数据和数据类型),15.2.2 模块程序设计 随着软件的发展,考虑到程序的可重复使用,人们越来越注重于系统整体关系和对数据的组织,他们把数据与操作数据的相关过程称为模块(Module),程序是根据模块的需要来划分,并使数据隐藏在模块中,其程序设计的技巧主要是模块中过程的设计,在模块中既包含具体问题的数据,又包含这些数据上的操作。由于模块程序设计是把算法和数据结构(数据和数据类型)看作一个独立功能模块,程序就被描述为:程序=(算法+数据结构),15.2.3 面向对象程序设计 我们现在使用计算机的方式是利用按钮、菜单或窗口,通过选择后触发计算机去执行某一事件动作,这种编程方法称为“事件驱动”,是一种交互性很强的编程方法。面向对象程序设计可以满足上述的需求,它能实现软件组件的可重用性,并把数据和操作数据的过程结合起来作为一个整体“对象”(Object),其程序设计的技巧是以“类”(Class)作为构造程序的基本单位,它具有封装、抽象、继承、多态性等特点。由于在面向对象中,算法与数据结构被结合在一起成为一个类,问题世界本身就是一个对象世界,任何对象都具有一定的属性与操作,所以,程序又被描述为:对象=(算法+数据结构)程序=(对象+对象+),15.2.4 程序设计的方法(1)分析问题:首先是明确要解决什么问题,确定所需的输入、处理和输出对象,把解题过程归纳为一系列的数学步骤,建立各种量之间的关系,即建立数学模型。(2)算法设计。对所确定的解题模型提出解决的方法和步骤,选择适当的计算方法加以实现。算法设计过程中还要考虑数据的组织形式,即数据结构。(3)画出流程图。流程图是描述算法的常用工具,可以作为编写程序的依据来使用。,(4)编写程序。在确定算法和画出流程图后,用选定的程序设计语言编程。(5)程序调试。用测试数据对编好的程序上机调试,分析所得的运行结果,特别要注意程序中的逻辑错误。反复调试,直到运行结果正确。(6)文档整理。在程序设计的各个步骤中,都要注意建立文档资料,内容包括任务要求、算法、流程图、程序清单、输入/输出数据的内容及格式、出错处理方法等。在程序设计完成时,文档资料应全部建立完毕。文档也是软件的一个组成部分。,15.2.5 程序的调试与运行 程序中出现的错误可以分为三类:编译错误运行时错误逻辑错误,1编译错误。编译错误是由结构不正确的代码造成的。如果键入了一个拼写错误的关键词,遗漏了某个必需的标点符号,或使用FOR语句时丢失了与之匹配的NEXT语句等。这类错误编译系统会做出提示,指出错误所在的行号,以便我们在调试时及时发现并改正。这类错误初学习编程者容易出现。,2运行错误 当一条语句试图执行一个不可能执行的操作时,会发生运行错误。最常见的运行错误便是除数为0错误。如程序中含有A=B/C这样的语句。但如果在运行时,变量C的值可能为0,则该除法是一个无效的运算,而语句本身是正确的,并且变量C的值如果不是0的情况下程序是会得到正确结果的。另外,还有诸如求平方根函数的参数为负数等,这样一类错误,只有在程序运行时才能发现。,3逻辑错误 当应用程序没有按预定的方式运行,则发生的是逻辑错误。一个应用程序在句法上代码有效,运行时无任何无效的操作,即未发生以上两类错误,但得不到正确的运行结果。比如,在编写求球体积的程序中,使用的数学公式为4/3*3.14159*r*r,显然正确的球体积公式应该是4/3*3.14159*r*r*r。编译系统在编译时是不能查出此类错误的,因此,这类错误具有更大的隐蔽性,只有通过已知结果的数据进行运行测试并分析后,才能发现和改正。这类错误的排除难度更大,很大程度上需要的是程序调试者的经验和耐心。,15.3 算法,15.3.1 问题描述 问题描述就是要说明一些能用来解决问题的要素。一个表达清晰的问题描述就具备以下三个特征:(1)能说明描述问题的任何假设。(2)列出所有的已知条件。(3)具体说明需要解决什么问题。,15.3.2 算法设计 算法是解决实际问题的方法,然而实际问题的解决往往会有多种方法,不同的方法也可能得到不同的结果。算法设计就是寻找一种适合的算法,那么什么是适合的算法呢?算法应具有以下特点:(1)有限性。任何一个算法应该经过有限多个操作步骤得出结果。(2)可行性。有限多个步骤应该在一个合理的范围内,且有限的时间内能够完成。(3)确定性。算法的每一步骤应该有明确的含义,无二义性。(4)输入/输出。一个算法可以定义若干个输入和输出。,算法可分为两大类:数值运算算法和非数值运算方法。数值运算算法的目的是求数值解,例如,求解一元二次方程的根所用的求解算法等。而非数值运算算法,不一定有确定的数学公式,其对应的数据模型种类繁多,可以是表、树、图等。,15.3.3 算法表示下面介绍几种常用的算法表示方法。1.自然语言 2.流程图法 3.伪代码法,1.自然语言 自然语言描述法,它是用一种接近人类语言的方法来描述算法的,它能把算法正确地表达出来,而不涉及到具体的语法细节。但它是不能被计算机识别的,需要细化后再转化为程序代码,才能为计算机所执行。例如,在计算机上计算数学、语文、英语三科的平均分。其过程用自然语言描述如下:第1步:输入数学成绩X、语文成绩Y、英语成绩Z;第2步:计算三科总分Total,Total=X+Y+Z;第3步:计算平均分Average,Average=Total/3;第4步:输出平均分Average的值。,2.流程图法 流程图(Flowchar)描述了计算机程序的输入、处理、输出模型的中间框图,它描述的是计算机如何一步一步地去完成指定的任务。,3.伪代码法 采用类似于某一种高级语言代码来描述算法,这种表示方法虽然不能为计算机所识别,但它稍加修改就能马上成为可执行的计算机程序。例如,求解一元二次方程ax2+bx+c=0两个实根的算法。由于该问题有现成的数学公式,我们可以直接依据数学公式来设计此算法。用伪代码法算法描述如下:,Input a,b,c/输入a,b,c的值;d=b2-4*a*c/计算b2-4ac的值;IF(d=0)then x1=(-b+sqr(b2-4*a*c)/(2*a)x2=(-b-sqr(b2-4*a*c)/(2*a)/判断b2-4ac=0?若是,则计算两个实根;Else x1=(-b+sqr(4*a*c-b2)/(2*a)x2=(-b-sqr(4*a*c-b2)/(2*a)Endif,15.3.4 常用的几种算法 1.计数器 2.累加器 3.交换变量的值,15.4 程序结构,15.4.1 顺序结构 顺序结构(Sequence Structure),就是计算机按照程序中语句的书写先后顺序,逐一执行每一条语句。整个顺序结构只有一个入口和一个出口。其结构如图15-5所示。如下面一个QBASIC程序片段即是顺序结构:PRINT“R1,R2,R3,R4,U=?”INPUT R1,R2,R3,R4,U LET I=(R1+R2+R3+R4)*U PRINT“I=”;I END,15.4.2 选择结构,选择结构是用IF语句来实现的。如QBASIC的IF语句为:IF(条件)THEN 语句1ElSE 语句2 END IF 如下面一个QBASIC程序片段即是选择结构:IF ab THENmax=aELSE max=b END IF,15.4.3 循环结构 循环结构(Loop Structure)又称重复控制结构或迭代结构。它可以使计算机反复多次执行同一段程序(循环体),节省代码,直到循环条件不满足时结束。其结构如图15-8所示。在高级程序设计语言中,基本的循环结构语句有while语句(当型循环)、do-while语句(直到型循环)和for语句(次数循环)。另外,goto语句和标号语句的联合使用也能实现循环。如下面给出的是QBASIC语言中用for循环结构求1-100之和的程序:SUM=0 FOR I=1 TO 100SUM=SUM+I NEXT I PRINT SUM,15.4.4 子程序和函数 所谓子程序,就是将程序分为更小的逻辑组成部分,这样可简化复杂的程序编写,这些组成部分就叫子程序,也有的语言把它称作为过程或函数,子程序是程序模块化的一种组织形式。通过它可以将一项复杂的任务分为若干项子任务,并如此一步一步地细分下去,直到面对更小的更具体的任务,而且能够找到解决它的算法。因此,用子程序的思想编程有以下一些优点:(1)子程序允许我们将程序分为一个个独立的逻辑单位,对每个单位的调试比起一个大的程序要容易得多。(2)一个子程序可以稍作修改或不做修改,再被其他程序调用,从而避免了书写重复代码,节省了时间和资源。如在QBASIC中,调用子程序使用GOSUB语句或CALL语句。在被调用的子程序中使用 RETURN语句结束子程序,返回调用子程序的语句处(断点)继续执行程序。,15.5 编程语言,15.5.1 过程性语言 用过程性语言编写的程序包含一系列的描述,告诉计算机如何执行这些过程来完成特定的工作。带有过程性特征的语言称为过程性语言。编写求解一元二次方程根的QBASIC语言程序就具有过程性特征,那些语句确切地告诉了计算机如何工作:显示信息请求用户输入a,b,c的值;然后计算b2-4ac的大小;然后判断b2-4ac的值是否大于0;然后根据b2-4ac的结果计算方程的根等等。过程性的编程语言适合于那些顺序执行的算法。用过程性语言编写的程序有一个起点和一个终点。程序从起点到终点执行的流程是直线型的,即计算机从起点开始执行指令序列,直到终点。,15.5.2 说明性语言 说明性语言只需具体说明问题的规则并定义一些条件即可。语言自身内置了方法把这些规则解释为一些解决问题的步骤,这就把编程的重心转移到描述问题和其规则上,而不再是数学公式。因此,说明性语言更适合于思想概念清晰、数学概念复杂的编程工作。不同于过程性的程序,用说明性语言编写程序只需告诉计算机要做什么,而不需告诉它如何去做。,15.5.3 脚本语言 HTML一般称为脚本语言。脚本语言以脚本(Script)的形式定义一项任务。脚本需要一个主机应用系统依附来运行。例如,用HTML标签为显示网页编写一个脚本,这个脚本由网络浏览器解释,这里网络浏览器就是主机应用系统,没有它HTML脚本就不能运行。脚本语言包含在许多应用程序中,像字处理软件和电子制表软件。可以用脚本使应用程序中的任务自动化。这些自动化例程即通常所说的“宏指令”(Macro Instruction)。脚本语言使用起来比其他编程语言要简单,但它提供的控制选项很少。HTML对不擅长编程的用户来说是一个比较好的选择。,15.5.4 低级性语言 低级语言是为计算机系统低层硬件编写的指令,像处理器、寄存器和内存地址等。低级语言对你直接在硬件水平上操作机器很有用。通常使用低级语言编写像编译器、操作系统和设备驱动程序之类的系统软件。低级语言中的指令一般和处理器的指令相对应。使用低级语言编程,即使是两数相加这样简单的操作也要数条指令才能实现。,15.5.5 面向对象语言 面向对象的程序设计语言是建立在用对象编程的方法基础之上的。对象就是程序中使用的实体或事物,例如,按钮,就是一个对象,我们已经习惯于用鼠标单击一个按钮。程序员可以使用面向对象的语言来定义按钮对象,在程序运行时把它显示出来。对象属于一个具有一定特性的“类”(Class)或组。“窗口”类是比较常见的类,所有的窗口对象(包括应用程序窗口)都属于“窗口”类,它们具有相同的属性,如都具有一个标题栏、工具栏、一个关闭按钮和最大化按钮、最小化按钮等组成元素。在创建一个窗口对象时,它就获得或者说继承了窗口类的属性和操作,但一个特定的窗口实例可以具有自己特定的属性,如标题、大小、屏幕上的位置均可不同。,15.5.6 事件驱动语言 程序事件是指程序必须做出响应的动作或表现,比如按键和点击鼠标。用事件驱动语言编程可以使用程序随时检测并响应事件。使用图形界面的程序大部分都是事件驱动的,它们在屏幕上显示诸如菜单这样的控件,并在用户作用控件时采取某一动作。事件驱动的程序中,代码段要和图形化的对象相关联,比如命令按钮和图标。用户操作某一对象时产生一个事件。比如点击按钮,该时间就触发与此对象关联的指令执行。如图15-10所示,一个事件驱动程序的界面和该事件的代码。代码窗口列出的是对象Command1的单击事件代码,代码的功能是连续绘制若干个以半径为递增的圆。,15.5.6 构件 程序中的对象从何而来?实际中,面向对象程序中的对象是由程序设计者生成的。但程序员可以购买一些称为构件或库的对象。构件是事先写好的对象,可以应用到自己的程序中,对于目前流行的编程语言的构件几乎都可以买到。使用构件编程就称为构件程序设计。可以选择各种各样的构件来增强功能,比如,电子表格、数据库管理、专家系统、报表生成、在线帮助、数据查询、文字编辑、科幻和3D图形等。,15.6 选择编程语言,15.6.1 Basic语言和Visual Basic BASIC(Beginners All-purpose Symbolic Instruction Code)可译为“初学者通用符号指令代码”,是一种具有会话功能的、规模较小的、易于学习的高级语言,它是为初级编程者设计的。BASIC是一种过程性的高级语言,它的大多数版本都是解释方式执行的,但也有一些是编译执行的。自从1964年问世以来,已经出现了几种流行的版本,包括IBM-PC上的GW-BASIC和微软公司的QBASIC版本。由于BASIC语言交互性能好,容易使用和适合于各种计算机系统,它已成为最流行和最广泛使用的语言之一。,15.6.2 商务语言COBOL 美国海军上将Grace Hopper,第一只计算机臭虫的发现者和她的工作小组,设计了一种用于商业方面计算的语言COBOL。COBOL是通用商务对象语言(Common Business Oriented Language)首字母的缩写。COBOL是发展于60年代的一种语言,适合于大型计算机系统上的事务处理。COBOL是编译执行的过程性高级语言,主要被一些专业程序员用来开发和维护大型商业集团的复杂程序。COBOL程序往往很长但容易读懂、调试和维护。这种特性对于大型商业组织机构尤其重要,因为许多重要的程序必须由不同的程序员维护和修改。,15.6.3 科学计算语言FORTRAN FORTRAN的含义是公式翻译器(Formula Translator)。它主要用于数学计算和科学应用。FORTRAN适用于对高精度数字进行处理,并且提供一个优良的三角函数库,专门用于针对科学开发者的需求。多年以来,程序员们对FORTRAN语言添加了许多内容,使其具有了更强的字符处理能力。FORTRAN的早期版本主要考虑的是解决数学计算,而对结果的表达形式没有太多的关注。,例如:求一元二次方程的两个实根X1,X2的FORTRAN程序。我们可以通过这个具体的程序例子真正地接触一下FORTRANT程序。READ(*,*)A,B,C D=B*B-4.0*A*C IF(D.GT.0.0)THENX1=(-B+SQRD(D)(2.0*A)X2=(-B-SQRD(D)(2.0*A)WRITE(*,*)X1=,X1,X2=,X2 ELSEWRITE(*,*)NO REAL ROOT!ENDIF END,15.6.4 结构化程序设计语言PASCAL PASCAL是编译执行的过程性高级语言,是在1971年由瑞士沃斯(N.Wirth)教授正式提出的。它是由Algol 60程序设计语言的基础上发展而成的一种良好的结构化程序设计语言(语言结构化和数据结构化)。PASCAL语言的诞生,可以说是程序设计语言发展的一个里程碑。PASCAL语言良好的性能、程序简明、易编且易懂,得到了广泛应用和发展。特别是在教学上,早就被国内外学校选为程序设计教学语言,用于帮助学生学习计算机编程。但PASCAL很少用于专业编程和商用软件的开发。多年教学实践证明,它是一门很好的程序设计教学语言。,15.6.5 C 和 C+语言 C语言是1972年由贝尔实验室的Dennis Ritchie在一台DEC PDP-11计算机配置操作系统而设计的,C作为UNIX操作系统的开发语言而开始广为人们所认识。它既适合于系统程序的开发,也适合于应用程序的开发。实际上,当今许多新的重要的操作系统都是用C或C+编写的。C语言是编译执行的过程性高级语言并带有低级语言的接口,是与硬件无关的,这种特性给程序员带来很大的灵活性。C语言以其语言简洁、紧凑,使用方便、灵活;提供了丰富的运算符和数据类型;生成的目标代码质量高,程序运行效率高;可移植性好等独有的特点风靡了全世界。,C+是一门优秀的程序设计语言,它是从C 进化而来的,是C 超集。它包括了C的全部特征、属性和优点,比C语言更容易学习。C+在程序结构上与C是一致的,都是用函数驱动机制实现。C+是一门高效实用的程序设计语言,它即可以进行过程化程序设计,也可以进行面向对象程序设计。C+语言强调对高级抽象的支持。C+实现了类的封装、数据隐藏、继承及多态,使得其代码容易维护及高度可重用性。随着C+渐渐成为ANSI标准,这种新的面向对象程序设计语言迅速成为了程序员最广泛使用的工具。几乎在所有计算机研究的应用领域,都能看到C+。,15.6.6 LISP和Prolog语言 1971年的图灵奖授予提出“人工智能”这一术语并使之成为一个重要的学科领域的斯坦福大学教授约翰.麦卡锡(John McCarthy)。1959年,LISP语言的发明人,麦卡锡基于阿隆索.邱奇(Alonzo Church)的-演算和西蒙、纽厄尔首创的“表结构”,开发了著名的LISP语言(LIST Processing language),成为人工智能界第一个最广泛流行的语言。LISP是一种函数式的符号处理语言,其程序由一些函数子程序组成。,15.6.7 SQL语言 SQL语言是为数据库的定义和操作开发的一种标准语言。它是一种类似于英语的数据查询语言。SQL 语言的最大特点是简单易学,深受广大编程者的欢迎。越来越多的关系数据库系统都采用了SQL 语言,它实际上已成为通用的标准语言。数据库界将SQL 审定为新的国际标准。因此,掌握SQL 语言对于我们学习数据库系统,推广应用数据库有着重要意义。SQL是说明性的高级语言,只需要程序员和用户对数据库中数据元素之间的关系和欲读取的信息的类型予以描述。虽然数据库也可用COBOL等过程性的语言操作,但SQL语句由于更适应数据库操作而效率更高。,15.6.8 Java和JavaScript Java是Sun公司于1995年6月推出的新一代面向对象程序设计语言,特别适合于Internet应用程序的开发。“连接Internet,用Java语言编程”,已经成为IT专业人士的一种时尚。它作为一种支持Internet应用开发的编程语言,由于其独到的面向对象、跨平台、分布式、简捷性、健壮性、安全性等特点,深受广大Internet应用开发人员的欢迎,因而得到迅速的普及和广泛的应用。Java作为软件开发的一种革命性的技术,其地位已经被确定。,15.6.9 8086/8088汇编语言 8086汇编语言是一种低级语言,由一些容易记忆的短语组成,用汇编语言编写的计算机程序也需要将它们转化成目标程序,才能为计算机所运行。8086汇编语言指令集只适用于Intel 8086微处理器,用它编写的程序只能运行在装有X86系列微处理器的计算机上,现在8086汇编语言主要用在那些程序尽可能短的或速度要求很高的场合。专业程序员把8086汇编语言嵌入应用程序使其执行速度快,汇编语言也常用来编写系统软件来控制计算机硬件。,

    注意事项

    本文(第15章程序设计基础.ppt)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开