




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机软件编程作业指导书TOC\o"1-2"\h\u32420第一章引言 3199361.1编程概述 3287211.1.1需求分析 388671.1.2算法设计 389081.1.3编码实现 4288641.1.4调试与优化 473681.2编程语言简介 449791.2.1C语言 4189061.2.2Java语言 4305581.2.3Python语言 4237641.2.4JavaScript语言 44811.2.5其他编程语言 429732第二章编程基础 451332.1数据类型与变量 4162362.1.1数据类型概述 436972.1.2基本数据类型 558032.1.3变量 592342.2运算符与表达式 5142822.2.1运算符概述 5323272.2.2算术运算符 5178132.2.3关系运算符 5802.2.4逻辑运算符 5151972.2.5表达式 5125222.3控制结构 5253092.3.1顺序结构 6166772.3.2选择结构 615612.3.3循环结构 69032第三章函数与模块 695453.1函数定义与调用 6311193.1.1函数定义 6309943.1.2函数调用 792103.2作用域与生命周期 729723.2.1作用域 7116673.2.2生命周期 7182493.3模块化编程 773703.3.1模块的划分 741093.3.2模块的实现 820153.3.3模块的集成与部署 825797第四章数组与字符串 854904.1一维数组 8122814.2二维数组 947824.3字符串操作 927622第五章指针与内存管理 10214155.1指针基本概念 1071255.1.1指针的定义 10307005.1.2指针的语法 10278955.1.3指针的运算 10154465.2指针与数组 1090625.2.1数组元素的指针表示 1032265.2.2指针与数组的操作 11235545.2.3指针数组与多维数组 11230865.3动态内存分配 11128525.3.1动态内存分配的概念 11111255.3.2malloc()函数 1143285.3.3free()函数 11116145.3.4动态内存分配的使用 11287325.3.5动态内存分配的注意事项 118914第六章结构体与联合 1235046.1结构体定义与使用 12104006.1.1结构体定义 12232696.1.2结构体变量定义与初始化 12147976.1.3结构体成员的访问 13325446.2结构体数组 13326306.3联合的使用 1427189第七章文件操作 1542587.1文件基本操作 15111467.1.1文件创建与删除 15106757.1.2文件重命名与移动 1557017.2文件读写 15246677.2.1文件读取 15173857.2.2文件写入 15164467.3文件权限与属性 16207227.3.1文件权限 16239807.3.2文件属性 1619245第八章异常处理与调试 1659078.1异常处理机制 16183908.1.1异常处理概述 16171798.1.2异常分类 1620028.1.3异常处理方式 17144748.1.4异常处理注意事项 176318.2调试技巧 17180198.2.1调试概述 17132398.2.2常见调试工具 1796928.2.3调试技巧 17124778.3常见错误分析 17320278.3.1语法错误 17241108.3.2逻辑错误 172278.3.3运行时错误 18157868.3.4资源管理错误 1829843第九章数据结构与算法 18133919.1线性表 188019.1.1线性表的定义与基本操作 18313019.1.2线性表的存储结构 182559.1.3线性表的应用实例 1891079.2栈与队列 18261169.2.1栈的定义与基本操作 18299119.2.2队列的定义与基本操作 1820079.2.3栈与队列的应用实例 1927189.3排序算法 1982969.3.1排序算法概述 19205709.3.2常用的内部排序算法 19188139.3.3常用的外部排序算法 19277399.3.4排序算法的应用实例 197518第十章软件工程与项目管理 191233510.1软件开发生命周期 192819310.2项目管理方法 192286210.3团队协作与沟通 20第一章引言计算机软件编程作为现代信息技术发展的核心组成部分,已经成为计算机科学与技术领域不可或缺的技能。为了帮助学习者更好地掌握编程技能,本指导书将系统介绍计算机软件编程的基本概念、方法与技巧。以下是第一章的内容概述。1.1编程概述编程,即程序设计,是指利用计算机语言对计算机进行指令编写的过程。编程的目的是为了解决实际问题,使计算机能够根据预设的逻辑完成特定任务。编程主要包括以下几个阶段:1.1.1需求分析在编程前,首先需要分析所要解决的问题,明确问题的需求、目标和约束条件,以便为后续的编程工作提供依据。1.1.2算法设计算法设计是编程的核心环节,它包括设计解决问题的方法和步骤。一个好的算法可以提高程序执行的效率,降低资源消耗。1.1.3编码实现根据算法设计,使用计算机语言编写程序代码。编码实现是将算法转化为计算机可以理解和执行的指令。1.1.4调试与优化在程序编写过程中,可能会出现各种错误。调试是为了找出并修复这些错误,保证程序的正确性。优化则是在保证程序正确性的基础上,提高程序的执行效率。1.2编程语言简介编程语言是用于编写计算机程序的语言,它为程序员提供了一种表达算法的方法。以下是几种常见的编程语言简介:1.2.1C语言C语言是一种通用编程语言,具有高效、灵活、可移植等特点。C语言广泛应用于操作系统、嵌入式系统、网络编程等领域。1.2.2Java语言Java语言是一种面向对象的编程语言,具有跨平台、安全性高等特点。Java语言广泛应用于企业级应用、移动应用、网络编程等领域。1.2.3Python语言Python语言是一种易于学习、功能强大的编程语言。Python语言具有简洁、明了的语法特点,广泛应用于数据分析、人工智能、Web开发等领域。1.2.4JavaScript语言JavaScript语言是一种客户端脚本语言,主要用于网页和服务器端编程。JavaScript语言具有跨平台、动态性等特点,广泛应用于Web开发领域。1.2.5其他编程语言除了以上几种编程语言外,还有许多其他的编程语言,如C、C、PHP、Ru等。不同的编程语言具有各自的优点和特点,适用于不同的应用场景。第二章编程基础2.1数据类型与变量2.1.1数据类型概述在计算机编程中,数据类型是指用于存储和处理数据的方式。数据类型决定了数据在内存中的存储形式以及可以对数据执行的操作。常见的分类包括基本数据类型、构造数据类型和抽象数据类型。2.1.2基本数据类型基本数据类型是编程语言中预定义的数据类型,通常包括整数类型、浮点数类型、字符类型和布尔类型等。整数类型:用于存储整数,如int、short、long等。浮点数类型:用于存储带有小数点的数值,如float、double等。字符类型:用于存储单个字符,如char。布尔类型:用于存储真(true)或假(false),如bool。2.1.3变量变量是用于存储数据的一个命名空间。在编程中,变量用于存储程序运行过程中的数据。声明变量时,需要指定其数据类型和名称。变量声明:数据类型变量名;变量赋值:变量名=值;2.2运算符与表达式2.2.1运算符概述运算符是用于对数据进行操作的符号。根据操作数和结果的不同,运算符可以分为算术运算符、关系运算符、逻辑运算符和其他运算符。2.2.2算术运算符算术运算符用于执行基本的数学运算,如加()、减()、乘()、除(/)等。2.2.3关系运算符关系运算符用于比较两个值的大小关系,如等于(==)、不等于(!=)、大于(>)、小于(<)等。2.2.4逻辑运算符逻辑运算符用于组合关系表达式,如与(&&)、或()、非(!)等。2.2.5表达式表达式是由运算符和操作数组成的序列,用于计算某个值。表达式可以是简单的算术表达式、关系表达式或逻辑表达式。2.3控制结构2.3.1顺序结构顺序结构是程序中最基本的结构,按照语句的先后顺序执行。2.3.2选择结构选择结构用于根据条件判断执行不同的代码分支。常见的选择结构包括if语句和switch语句。if语句:根据条件表达式的真假,选择执行两个分支中的一个。switch语句:根据表达式的值,选择执行多个分支中的一个。2.3.3循环结构循环结构用于重复执行一段代码,直到满足某个条件。常见的循环结构包括for循环、while循环和dowhile循环。for循环:通过指定循环次数,重复执行循环体内的代码。while循环:根据条件表达式的真假,决定是否继续执行循环体内的代码。dowhile循环:至少执行一次循环体内的代码,然后根据条件表达式的真假,决定是否继续执行。第三章函数与模块3.1函数定义与调用函数是计算机程序中的基本构建块,用于执行特定的任务。函数的定义与调用是实现模块化编程的关键步骤。3.1.1函数定义在计算机编程中,函数定义通常包括以下几个部分:(1)函数名:用于标识函数的唯一名称。(2)形参列表:函数所需的输入参数,用圆括号括起来,参数间用逗号分隔。(3)函数体:包含实现函数功能的代码块,用花括号括起来。示例:cintadd(inta,intb){returnab;}3.1.2函数调用函数调用是指程序执行过程中,调用已定义的函数以实现特定功能。函数调用的一般形式如下:c函数名(实参列表);实参列表中的参数应与形参列表中的参数一一对应,实参的值将传递给形参。示例:cintresult=add(3,4);printf("Result:%d\n",result);3.2作用域与生命周期作用域与生命周期是程序设计中两个重要的概念,它们决定了变量在程序中的可见性和存在时间。3.2.1作用域作用域是指变量在程序中可被访问的代码区域。在C语言中,作用域分为以下几种:(1)全局作用域:全局变量在程序的所有文件中都可以被访问。(2)局部作用域:局部变量仅在定义它们的函数内部可以被访问。3.2.2生命周期生命周期是指变量在程序中的存在时间。在C语言中,变量的生命周期分为以下几种:(1)全局变量:全局变量的生命周期从程序开始执行到程序结束。(2)局部变量:局部变量的生命周期从进入定义它们的函数开始,到函数返回结束时结束。3.3模块化编程模块化编程是一种将程序划分为若干个独立、可重用的模块的编程方法。模块化编程有助于提高代码的可读性、可维护性和可扩展性。3.3.1模块的划分模块的划分应根据功能、逻辑关系等因素进行。以下是一些划分模块的常见方法:(1)按功能划分:将具有相似功能的代码划分为一个模块。(2)按逻辑关系划分:将具有逻辑关系的代码划分为一个模块。(3)按照模块的独立性划分:尽量使每个模块具有独立的功能,减少模块间的依赖关系。3.3.2模块的实现模块的实现通常包括以下步骤:(1)定义模块的接口:接口定义了模块提供给外部使用的方法和属性。(2)实现模块的功能:编写实现模块功能的代码。(3)模块的测试:对模块进行单元测试,保证其功能正确。3.3.3模块的集成与部署在模块化编程中,模块的集成与部署是关键环节。以下是一些常见的集成与部署方法:(1)静态集成:将所有模块编译为一个可执行文件。(2)动态集成:将模块编译为动态库,运行时动态加载。(3)分布式部署:将模块部署到不同的计算机或设备上,通过网络进行通信。第四章数组与字符串4.1一维数组一维数组是计算机程序设计中常用的数据结构,它是由一个连续的元素序列组成,每个元素具有相同的数据类型。一维数组的定义方式如下:数据类型数组名[数组长度];其中,数据类型可以是基本数据类型,如int、float、char等,数组名是一个合法的标识符,数组长度是一个正整数。一维数组具有以下特点:(1)一维数组的元素通过下标进行访问,下标从0开始,最大下标为数组长度减1。(2)一维数组在内存中占用连续的存储空间。(3)一维数组的初始化可以在声明时进行,也可以在声明后通过循环进行。以下是一维数组的示例代码:intarray[5];//声明一个长度为5的整型一维数组for(inti=0;i<5;i){array[i]=i;//初始化数组元素}4.2二维数组二维数组可以看作是一维数组的扩展,它是由多个一维数组组成,形成一个矩阵式的数据结构。二维数组的定义方式如下:数据类型数组名[行数][列数];其中,数据类型、数组名和行数、列数的含义与一维数组相同。二维数组具有以下特点:(1)二维数组的元素通过行下标和列下标进行访问。(2)二维数组在内存中占用连续的存储空间,行优先存储。(3)二维数组的初始化可以在声明时进行,也可以在声明后通过循环进行。以下是一个二维数组的示例代码:intmatrix[3][4];//声明一个3行4列的整型二维数组for(inti=0;i<3;i){for(intj=0;j<4;j){matrix[i][j]=i4j;//初始化数组元素}}4.3字符串操作字符串是一种常用的数据结构,它是由字符序列组成的有限序列。在C语言中,字符串是使用字符数组实现的,以空字符'\0'作为结束标志。以下是一些常见的字符串操作:(1)字符串长度:计算字符串中字符的个数,不包括结束标志'\0'。intstrlen(constcharstr);(2)字符串复制:将源字符串复制到目标字符串。voidstrcpy(chardest,constcharsrc);(3)字符串连接:将源字符串连接到目标字符串的末尾。voidstrcat(chardest,constcharsrc);(4)字符串比较:比较两个字符串的大小。intstrcmp(constcharstr1,constcharstr2);以下是一个字符串操作的示例代码:charstr1[100]="Hello,";charstr2="World!";intlen=strlen(str1)strlen(str2);strcat(str1,str2);printf("Concatenatedstring:%s\n",str1);//输出:Concatenatedstring:Hello,World!第五章指针与内存管理5.1指针基本概念5.1.1指针的定义指针是程序设计语言中的一个基本概念,它表示变量的内存地址。在C语言中,指针是一种特殊的变量,用于存储另一个变量的地址。通过指针,可以间接访问或修改变量的值。5.1.2指针的语法声明指针的语法为:数据类型指针变量名;例如:intp;5.1.3指针的运算指针可以进行以下几种运算:(1)指针与整数的加减运算:表示指针移动的位数。(2)指针与指针的减法运算:表示两个指针之间的距离。(3)指向指针的指针:指针的指针,用于存储指针的地址。5.2指针与数组5.2.1数组元素的指针表示在C语言中,数组名表示数组首元素的地址。通过数组名和索引,可以表示数组元素的地址。例如,对于数组intarr[10],arri表示第i个元素的地址,(arri)表示第i个元素的值。5.2.2指针与数组的操作(1)数组元素的指针访问:通过指针访问数组元素,如p=arr[i]。(2)数组的指针遍历:通过指针遍历数组,如for(p=arr;p<arr10;p)。(3)数组名作为函数参数:在函数中,可以通过传递数组名来传递整个数组,此时数组名作为指针使用。5.2.3指针数组与多维数组(1)指针数组:一个数组,其元素为指针。用于存储多个字符串或变量的地址。(2)多维数组:可以使用指针数组实现多维数组的存储和访问。5.3动态内存分配5.3.1动态内存分配的概念动态内存分配是指在程序运行过程中,根据需要动态地分配内存空间。在C语言中,动态内存分配主要使用malloc()和free()函数。5.3.2malloc()函数malloc()函数用于动态分配内存,原型为:voidmalloc(size_tsize)。参数size表示要分配的内存大小,返回值为指向分配内存的指针。若分配失败,则返回NULL。5.3.3free()函数free()函数用于释放动态分配的内存,原型为:voidfree(voidptr)。参数ptr为指向已分配内存的指针。5.3.4动态内存分配的使用(1)分配内存:使用malloc()函数分配内存。(2)使用内存:通过指针访问分配的内存空间。(3)释放内存:使用free()函数释放内存。5.3.5动态内存分配的注意事项(1)避免内存泄漏:保证分配的内存被正确释放。(2)检查分配结果:分配失败时,返回NULL,应进行检查。(3)类型转换:分配内存后,根据需要将void类型转换为相应的数据类型指针。第六章结构体与联合6.1结构体定义与使用6.1.1结构体定义结构体(Structure)是一种用户自定义的数据类型,用于将不同类型的数据组合成一个单一的实体。结构体的定义格式如下:cstruct结构体名称{数据类型成员1;数据类型成员2;};例如,定义一个表示学生的结构体:cstructStudent{intid;charname[50];floatscore;};6.1.2结构体变量定义与初始化定义结构体变量时,可以使用以下两种方式:(1)先声明结构体类型,再定义变量:cstructStudent{intid;charname[50];floatscore;};structStudentstu1,stu2;(2)在结构体定义时直接定义变量:cstructStudent{intid;charname[50];floatscore;}stu1,stu2;结构体变量的初始化可以通过以下方式:cstructStudentstu1={1,"",90.5};6.1.3结构体成员的访问结构体成员的访问可以通过点操作符(`.`)进行:cstu(1)id=2;stu(1)score=85.0;6.2结构体数组结构体数组是结构体类型的数组,用于存储多个结构体变量。结构体数组的定义和初始化如下:cstructStudent{intid;charname[50];floatscore;};structStudentstudents[3]={{1,"",90.5},{2,"",85.0},{3,"",92.0}};结构体数组元素的访问可以通过数组下标和点操作符进行:cstudents[0].id=4;students[1].score=88.5;6.3联合的使用联合(Union)是一种用户自定义的数据类型,用于存储不同类型的数据,但同一时间只能存储一个成员的值。联合的定义格式如下:cunion联合名称{数据类型成员1;数据类型成员2;};例如,定义一个表示数字的联合:cunionNumber{intinteger;floatdecimal;};联合变量的定义和初始化如下:cunionNumbernum;eger=10;num.decimal=3.14;需要注意的是,联合成员的赋值和访问方式与结构体相同,但由于联合的特性,同一时间只能使用一个成员。例如,以下操作是不合法的:eger=10;//赋值整数num.decimal=3.14;//赋值浮点数printf("%d\n",eger);//输出整数printf("%f\n",num.decimal);//输出浮点数,结果可能不正确第七章文件操作7.1文件基本操作7.1.1文件创建与删除在计算机软件编程中,文件操作是基本技能之一。文件的创建与删除是文件基本操作的核心内容。(1)文件创建:创建文件通常使用文件系统提供的API或函数。例如,在C语言中,可以使用`fopen`函数创建文件;在Python中,可以使用`open`函数。(2)文件删除:删除文件同样可以使用文件系统提供的API或函数。例如,在C语言中,可以使用`remove`函数;在Python中,可以使用`os.remove`函数。7.1.2文件重命名与移动文件重命名与移动也是文件基本操作的重要组成部分。(1)文件重命名:文件重命名可以使用文件系统提供的API或函数。例如,在C语言中,可以使用`rename`函数;在Python中,可以使用`os.rename`函数。(2)文件移动:文件移动通常涉及到文件的复制与删除。可以使用文件系统提供的API或函数实现。例如,在C语言中,可以使用`rename`函数实现文件移动;在Python中,可以使用`shutil.move`函数。7.2文件读写文件读写是文件操作的核心内容,涉及到文件的读取和写入。7.2.1文件读取文件读取操作包括从文件中读取文本或二进制数据。以下是一些常见的文件读取方法:(1)顺序读取:顺序读取是指按照文件内容的顺序逐个读取字符或字节。例如,在C语言中,可以使用`fread`函数;在Python中,可以使用`read`方法。(2)随机读取:随机读取是指根据需要读取文件中的特定位置的数据。例如,在C语言中,可以使用`fseek`函数和`fread`函数;在Python中,可以使用`seek`方法和`read`方法。7.2.2文件写入文件写入操作包括向文件中写入文本或二进制数据。以下是一些常见的文件写入方法:(1)覆盖写入:覆盖写入是指将新数据写入文件中,覆盖原有数据。例如,在C语言中,可以使用`fwrite`函数;在Python中,可以使用`write`方法。(2)追加写入:追加写入是指将新数据添加到文件末尾,不覆盖原有数据。例如,在C语言中,可以使用`fwrite`函数和`fseek`函数;在Python中,可以使用`write`方法和`seek`方法。7.3文件权限与属性文件权限与属性是指对文件进行访问控制和管理。7.3.1文件权限文件权限是指对文件进行访问的控制。在Unix/Linux系统中,文件权限分为读(r)、写(w)和执行(x)三种。可以使用`chmod`命令修改文件权限。(1)读权限:允许用户读取文件内容。(2)写权限:允许用户修改文件内容。(3)执行权限:允许用户执行文件(对于可执行文件)。7.3.2文件属性文件属性是指文件的元数据,如创建时间、修改时间、大小等。可以使用文件系统提供的API或函数获取和设置文件属性。(1)创建时间:文件创建时的时间戳。(2)修改时间:文件最后修改的时间戳。(3)大小:文件所占用的存储空间大小。第八章异常处理与调试8.1异常处理机制8.1.1异常处理概述异常处理是计算机软件编程中一个重要的环节,它能够帮助程序员有效地处理程序运行过程中出现的错误。异常处理机制使得程序能够在遇到错误时,采取相应的措施,保证程序的稳定性和可靠性。8.1.2异常分类异常通常分为两大类:预定义异常和自定义异常。预定义异常是编程语言或框架中已经定义好的异常,如Java中的`NullPointerException`、`NumberFormatException`等;自定义异常是程序员根据实际需求定义的异常。8.1.3异常处理方式异常处理主要有以下几种方式:(1)捕获异常:使用trycatch语句捕获并处理异常。(2)抛出异常:使用throw关键字抛出异常。(3)异常链:将一个异常包装在另一个异常中,形成一个异常链。8.1.4异常处理注意事项(1)不要过度使用异常处理,以免影响程序功能。(2)尽量捕获具体的异常,而不是捕获所有异常。(3)在捕获异常后,应采取相应的措施处理异常,避免程序崩溃。8.2调试技巧8.2.1调试概述调试是程序员在软件开发过程中查找和修复程序错误的过程。有效的调试技巧可以帮助程序员快速定位错误,提高开发效率。8.2.2常见调试工具(1)打印日志:在程序运行过程中输出关键信息,便于分析问题。(2)断点调试:设置断点,使程序在运行到特定位置时暂停,查看程序状态。(3)调试器:使用调试器查看变量值、调用栈等信息。8.2.3调试技巧(1)分析错误信息:充分利用错误信息,定位错误原因。(2)逐步调试:逐步执行程序,观察程序状态变化。(3)条件断点:设置条件断点,使程序在满足特定条件时暂停。(4)代码审查:通过审查代码,发觉潜在的错误。8.3常见错误分析8.3.1语法错误语法错误是指程序代码违反了编程语言的语法规则,如拼写错误、符号错误等。语法错误通常在编译阶段被发觉。8.3.2逻辑错误逻辑错误是指程序代码的执行结果与预期不符,如算法错误、条件判断错误等。逻辑错误通常需要在运行阶段通过调试来发觉和修复。8.3.3运行时错误运行时错误是指在程序运行过程中发生的错误,如空指针异常、数组越界等。运行时错误需要通过异常处理机制来处理。8.3.4资源管理错误资源管理错误是指程序在运行过程中对资源(如内存、文件等)管理不当导致的错误,如内存泄漏、文件未关闭等。这类错误需要程序员在编写代码时注意资源管理。第九章数据结构与算法9.1线性表9.1.1线性表的定义与基本操作线性表是由有限个数据元素组成的有序序列。数据元素之间存在着线性关系,即每个元素最多一个前驱和一个后继。线性表的基本操作包括插入、删除、查找和遍历等。9.1.2线性表的存储结构线性表的存储结构主要有顺序存储结构和链式存储结构。顺序存储结构利用一段连续的存储空间存储线性表的数据元素,链式存储结构通过指针连接各个数据元素。9.1.3线性表的应用实例线性表在程序设计中的应用非常广泛,例如,实现栈和队列、求解约瑟夫问题等。9.2栈与队列9.2.1栈的定义与基本操作栈是一种特殊的线性表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 系统分析师职业发展的关键要素试题及答案
- 机械公司技术管理制度
- 加油卡公司管理制度
- 如何管理系统集成项目中的技术难题试题及答案
- 乙类感冒管理制度
- 文明施工喷漆管理制度
- 管理方式与管理制度
- 花茶产品存储管理制度
- 药械科员工管理制度
- 机电培训基地管理制度
- 拔牙流程四手操作
- 应急转贷基金培训
- DB 32-T 3701-2019 江苏省城市自来水厂关键水质指标控制标准
- 连接器行业专业英语高频词句
- 2024年中考历史第二轮专题复习5:中国古代边疆治理(训练题)
- 呼吸内科进修汇报课件
- 长租公寓管理运营方案
- 2024年高考物理试卷(重庆卷) 含答案
- 《林业基础知识》考试复习题库(含答案)
- 3D三维可视化BIM模板安全施工方案
- 小学生中华经典诵读知识竞赛参考题及答案
评论
0/150
提交评论