第1章C的初步知识

合集下载

《C语言程序设计基础与实训教程》第1章:基础知识

《C语言程序设计基础与实训教程》第1章:基础知识

学习C语言的第一步是了解程序编写与运行的基本原理。
1
代码编辑
使用文本编辑器编写C语言程序代码,保存为以.c为后缀名的文件。
2
编译
通过编译器将C语言源代码翻译成计算机能够执行的低级机器代码。
3
链接Biblioteka 将编译后的目标文件与其他必要的库文件进行链接,生成可执行程序。
数据类型和变量
C语言提供了多种数据类型和变量,用于存储不同类型的数据。
《C语言程序设计基础与 实训教程》第1章:基础 知识
《C语言程序设计基础与实训教程》第1章:基础知识
C语言是一种通用计算机编程语言,被广泛应用于系统软件、嵌入式系统、游 戏开发等领域。
本章将介绍C语言的基础知识,包括程序编写与运行、数据类型和变量、运算 符、表达式和语句、输入和输出函数。
程序编写与运行
整数类型
包括int、short、long等,用于存储整数值。
浮点类型
包括float、double等,用于存储浮点数值。
字符类型
包括char,用于存储单个字符。
其他类型
例如,数组、结构体、枚举等。
运算符
运算符用于对数据进行运算、比较和赋值。
算术运算符
用于执行基本的加减乘除运算,如+、-、*、/。
比较运算符
用于比较两个值的大小关系,如>、<、==、!=。
赋值运算符
用于将值赋给变量,如=、+=、-=。
逻辑运算符
用于在条件语句中进行逻辑操作,如&&、||、!。
表达式和语句
表达式是由运算符和操作数组成的语句片段,用于计算和生成值。
1
算术表达式
由算术运算符和操作数组成,如x+y、a*b。

C语言程序设计第1至8章复习知识点总结

C语言程序设计第1至8章复习知识点总结

printf("max=%d\n",c);
/*输出c的值*/
}
int max(int x, int y) {
int z; if (x>y) z=x; else z=y; return (z); }
/*定义max函数,函数值为整型,x、y为形参,整型*/
/*定义内部变量z*/ /*比较x,y的大小,如果x大于y,则执行z=x*/ /*否则执行z=y*/ /*将z的值返回,通过max带回调用处*/
整理课件
c语言第一至八章总结
2 基本数据类型
1、整型
2、实型
3、字符型
实型
小数形式 :3.14 指数形式:3.14*103 =3.14e003
标准化指数形式:3.14*103
对应 只有一个大于0的整数
字符
ASCII表
例:以下选项中,不能作为合法常量的是( B ) A) 1.234e04 B)1.234e0.4 C) 1.234e+4 D)1.234e0
long
注意:每一步运算都要先
unsigned
转换为同一类型 例:

int a=3,b=4;
int
char,short float c=3.0/4,d=b/a;
printf("%f,%f",c,d);
整理课件
c语言第一至八章总结
数据类型的强制转换
例2.8强制类型转换 #include<stdio.h> void main() {
程序设计语言 机器语言 机器语言
可执行
不可以
不可以
可以
文件名后缀
.c 整理课.o件bj
.exe

第1章 C语言基础知识

第1章 C语言基础知识

第一章C语言基础知识一,选择题1 答案是AA正确课本第2页11行B {}可以作为复合语句的标志C main 函数不是用户命名的D 分号是语句结束的标志,肯定是语句的一部分做这个题目需要对书上的概念透彻的理解2 答案是AA 错误课本第4页关于用户标识符是这样介绍的---命名时,标识符的选择由用户自定,但是不能与关键字相同,所以A选项错误。

这个题目考察用户标识符3 答案是B用户标识符是标识符,所以可以是有下划线,但是中划线不属于字母,数字,下划线其中一种。

这个题目考察用户标识符的概念。

4 答案是Bdefine 是预定义标识符,而预定义标识符可以是用户标识符,所以define可以是用户标识,if 是关键字,而关键字不能是用户标识符,所以if不可以是用户标识符5 答案是Dsizeof 是关键字,参照附录二注:6--13 考察用户标识符概念6 答案是DD答案以数字2开头了,不符合标识符定义7 答案是CC答案以数字开头了8 答案是Dint 是关键字9 答案是B答案A 是关键字,答案C是以数字开头了,不符合概念,答案D出现了小数点10 答案是A答案A出现了小数点11 答案是C答案C 以数字开头了12 答案是AB答案中float 是关键字,C答案中3c以数字3开头了,D答案中-5d中- 不属于字母,数字,下划线中一种13 答案是AB答案中-max中-错误,C答案中3COM以字母3开头了,D答案中int 是关键字,不是用户标识符14 答案是BA答案中15. 后面不应该有点,C答案中出现了逗号,D中字母B有问题15 答案是B16 答案是BB中出现了8,而八进制只能有0到7组成17 答案是D答案D中开头是0不是o18 答案是C答案A中E后面是整数,0.5是小数答案B 中E后面不能为空答案D中E前面不能为空本题目考察指数的表示形式19 答案是C答案A中2.0有问题,不能为小数形式答案B中E前面不能为空答案D中E后面不能为空本题目考察指数的表示形式20 答案是AB中八进制中不能出现数字8,C中e后面不能是小数,D中e后面不能为空21 答案是BB中0.4是小数,不正确22 答案是CC中0.5是小数,不正确23 答案是D3.6-5/2+1.2+5%2=3.6-2+1.2+1=3.8本题目考察算术运算符,需要注意整数除以整数结果只能是整数24 答案是D%不能用于实型的计算25 答案是DD答案中$不属于字母,数字,下划线26 答案是AA答案是逗号表达式,B答案中x+1=y是赋值表达式,左边只能是变量,而这里是x=1, 同理答案C中x+10也是错误的,在D答案中,考察的是强制类型转换,正确的是(double)x/1027 答案是A本题考察的是注释需要注意的地方,具体解答见课本第2页中间部分28 答案是B答案A中n2没有定义,答案C中在定义f之前不能使用它,答案D 中E后面必须是整数29 答案是C考察的是强制类型转换,正确的是k%(int)f30 答案是D解题方法是要抓住++m,--n,--m,表达式的值是变量变化之后的值,而n--表达式的值是变量n变化之前的值31 答案是B本题目考察的是负整数与无符号正整数在计算机中存放的格式的一样的,但表示的不同的两个数32 答案是CA答案中%运算对象不能为实型,26.8错误,B答案中考察的赋值运算符,赋值运算符左边必须是变量,所以赋值运算符左边1+2错误,同理答案D错误33 答案是C增量运算符的运算对象只能是变量,而在C答案中++(i+1)中,i+1是表达式34 答案是B本题目考察的是整数除以整数结果是整数,在B答案中1/2结果是0,导致整个表达式的值是0,明显是错误的35 答案是D36 答案是A本题目主要考察n++表达式的值是n变化之前的值,然后使n的值增加137 答案是Bc=a/b+0.4 c=8/5+0.4 c=1+0.4 c=1.4 因为c 是int 型的,所以n的值是1 ,做此题目需要仔细阅读题目38 答案是D(int)a+b/b=(int)5.5+2.5/2.5=5+1.000000=b=6.000000同样a,b的类型是double型的39答案是D40 D41 D42 A二,填空题1 位、0或123 84 八进制、十进制、十六进制5 课本第8页整型变量和第11页实型变量的介绍6 5+3.6/2=5+1.8=6.87 a++表达式的值是a变化之前的值,当然a本身增加了18 把10赋给变量B。

第1章 C语言程序设计基础

第1章 C语言程序设计基础

1.2 C语言的基本构成
(4)C语言程序的书写格式比较自由,没有固定的格式要求。
在一行内,既可以写一个语句,也可以写多个语句。为了提高
程序的可读性,往往根据语句的从属关系,以缩进书写的形式 来体现出语句的层次性。
(5)#include是编译预处理指令。其作用是将由双引号或尖
括号括起来的文件中的内容,读入到该语句的位置处。
1.4 集成开发环境Visual C++简介
全国计算机等级考试是由中国教育部考试中心负责组织实施的计 算机能力等级认证考试。从 2008 年开始,该考试的C语言上机环境 由此前的 Borland TC2.0 改为 Microsoft Visual C++ 6.0。 C语言都将以其优雅的设计、广泛的应用继续存在和被使用;因为 在基础软件领域,C语言几乎是唯一可以选择的语言。 由于大多数 高级语言基本都是以C语言的语法为蓝图的,其底层运行环境多为采 用C语言开发,因此学会了C语言,很容易就可以触类旁通。事实上 相对于目前流行的几种编程语言来说,C语言的语法应该是最简洁的。
了便利。
1.1 C语言的发展历史和特点
(5)语法限制不太严格,程序设计自由度大
C语言允许程序编写者有较大的自由度,因此放宽了语法
检查。程序员在编程时不要过分依赖C编译程序去查错。 (6)生成目标代码质量高,程序执行效率高
(7)可移植性好
C程序基本上不作修改就可以运行于各种型号的计算机和 各种操作系统。 (8)C语言是具有低级语言功能的高级语言
程序设计的能力,逐步理解和掌握程序设计的思想和方法,利 用计算机解决实际问题。 学好程序设计,贵在平时练习,应该做到功夫化在平时,努 力多编程,编好程。
教学导航

C语言各章节知识点总结

C语言各章节知识点总结

C语⾔各章节知识点总结第⼀部分“C语⾔基础知识”知识点1、C程序的基本结构C程序是由函数构成的。

每个程序由⼀个或多个函数组成,其中必须有且仅有⼀个主函数main( )。

main函数是⼀个可执⾏C语⾔程序的⼊⼝和正常出⼝,⽽不论其在整个程序中书写的位置如何。

在C语⾔中,⼤⼩写字母是有区别的。

(例如习惯使⽤⼩写字母定义变量,⽤⼤写字母定义常量)。

C程序的注释有两种⽅法,⼀种是⾏注释,使⽤“//”;另外⼀种是块注释,使⽤“/* */”,注意“/*”与“*/”不能嵌套使⽤。

C语⾔书写较为灵活,但是提倡采⽤缩进格式进⾏程序书写,以体现语句之间的层次感。

C程序每条语句以“分号”作为结束标志。

以下⼏种情况不得使⽤分号:(1)所定义的函数名称后不得使⽤分号;(2) if…else…语句是⼀个整体,中间不能使⽤分号将其分隔开;(3)预编译命令后不能使⽤分号。

2、C程序开发步骤C语⾔在计算机上的开发过程主要由以下四个步骤组成:第⼀步:编辑。

⽣成后缀名为“.c”的源⽂件第⼆步:编译。

⽣成后缀名为“.obj”的⽬标⽂件第三步:连接。

⽣成后缀名为“.exe”的可执⾏⽂件第四步:运⾏。

3、VC++6.0开发⼯具的使⽤按下功能键Ctrl+F7编译程序;按下功能键F7连接程序;按下功能键Ctrl+F5运⾏程序;若程序在编译和连接过程中有语法错误,则按下功能键F4定位错误所在⾏并根据错误提⽰信息改正错误(原则是先解决error,再解决warning)。

4、C语⾔中标识符的命名规则标识符由字母、数字、下划线组成;规定第⼀个字符必须为字母或下划线。

标识符定义的变量名、函数名、常量名等最好做到“见名知义”;⼤⼩写代表不同含义;不能使⽤关键字;最好不要与C语⾔的库函数同名。

5、C语⾔的数据类型C语⾔的数据类型由基本类型和复杂类型构成。

其中基本数据类型包括字符型(char)、整型(int,short,long)、实型(float,double);复杂数据类型包括指针类型、数组、结构体、联合体。

第1章 C语言基本知识

第1章 C语言基本知识

第一章C语言基本知识一、C语言的产生和发展1、C语言的发展源于人们希望用高级语言编写操作系统。

(C-BCPL第二字母)ALGOL60(高级语言)->CPL(硬件支持)- BCPC->B->C->标准C-> ANSI C -> ISO C2、语言既具有高级语言特性,又具有低级语言特性-中级语言。

二、C语言的特点1、语言简明、紧凑、使用方便、灵活。

2、运算符丰富。

3、数据结构丰富,具有现代化语言的各种数据结构。

4、具有结构化的控制语句。

5、语法限制不太严格,程序设计自由度大。

6、C语言允许直接访问物理地址,能实现汇编语言的大部分功能,可以直接对硬件进行操作。

7、生成目标代码质量高,程序执行效率高。

8、用C语言写的程序可移植性好。

三、C程序的基本规则1、C程序由函数构成。

(亦称为函数语言。

)2、C程序中每条语句都用一个分号结尾,分号是C程序语句的必要组成部分,语句最后的分号不能省略。

3、每个C程序都有一个主函数(main()),且只有一个主函数。

并且程序是从主函数开始执行的。

4、调用C语言的标准函数通常要在程序开头使用包含命令include,C程序中的命令不用分号结尾。

5、C程序中的变量必须先定义,后使用。

6、C语言以小写字母作为基本书写形式,并且C语言要区分字母的大小写,同一字母的大小写被作为两个不同的字符。

7、C程序中可以用“/*……*/”的形式加注释。

8、C程序书写格式自由,一行内可以写几条语句,一条语句可以写在多行。

9.一个函数包含两个部分:(1)函数的说明部分。

包括函数名,函数类型,函数属性,函数参数名等。

如:int max(x,y)int x,y;函数名后必须跟一对圆括弧,函数参数可以没有,如:main( )。

(2)函数体。

函数说明部分下的大括弧,如果一个函数内有多个括弧,则最外一层为函数体范围。

四、字符集字符集是高级语言的编译系统所能识别的字母、数字和特殊符号。

第1章对C语言的初步认识

第1章对C语言的初步认识
川师范大学成都学院
算法是解决“做什么”和“怎么做”的问题 程序中的操作语句,是算法的体现 不了解算法就谈不上程序设计
明德 博学 求实 创新
四川师范大学成都学院

结构化程序设计中采用的3种基本结构如 图1-1所示,所有的程序代码都实现在这3种结 构中。
结构图
四川师范大学成都学院
计算机语言:人与计算机进行“对话”的语言。
程序设计语言就是计算机能读懂的语言。
书写
执行
要求程序员按照语言的规范进行编程
计算机之所以能有条不紊的进行工作,是因为有程序
在进行操作和控制。
明德 博学 求实 创新
四川师范大学成都学院
计算机语言的发展
机器语言——汇编语言——高级语言
支持这种结构化的程序设计方法的语言称 为结构化的程序设计语言。结构化的程序设计 方法,主要是实现两个方面的问题:程序的模 块化设计和结构化编码。
明德 博学 求实 创新

四川师范大学成都学院
三种基本结构 顺序结构 选择结构 循环结构 三种基本结构的特点 只有一个入口 只有一个出口 每一个基本结构中的每一部分都有机会执行到 结构内不存在“死循环”
开始 输入两个整数a,b
Y
输入输出框
判断框 处理框 流程线
N
a > b? max = a 输出max 结束
明德 博学 求实 创新
max = b
四川师范大学成都学院
流程图描述算法(练习)
要求: 用流程框图描述函数
输入一个数x,根据x的值输出y。 1 x0 y= -1 x < 0
y=1 yes
start
基本成分:模块、调用、输入输出数据

C基础理论题目及考点(课堂讲解)1_7章

C基础理论题目及考点(课堂讲解)1_7章

第一章部分 C 程序设计的初步知识一、C 语言的构成(1)源程序由函数构成,每个函数完成相对独立的功能。

(2)每个源程序中必须有且只能有一个主函数,可以放在任何位置,但程序总是从主函数开始执行。

(3)函数体:在函数后面用一对花括号括起来的部分。

(4)每个语句以分号结束,但预处理命令、函数头之后不能加分号。

(5)注释:括在“/* ”与“ */”之间,没有空格,允许出现在程序的任何位置。

(6)预处理命令:以“#”开头的语句。

二、C程序的生成过程(1)C程序是先由源文件经编译生成目标文件,然后经过连接生成可执行文件。

(2)源程序的扩展名为.c,目标程序的扩展名为.obj ,可执行程序的扩展名为.exe 。

试题程序#include <stdlib.h> #include <stdio.h>/* ***found*** */ int fun(int n);{/* ***found*** */ int i/* ***found*** */ sum=0;for(i=1;i<=n;i++) {sum=sum+i; }return sum; }一、标识符在C语言中,变量名、函数名、数组名等按照一定规则命名的符号称为标识符。

1. 标识符的命名规则2.标识符的分类C语言的标识符可以分为3类。

(1)关键字:C语言规定的专用的标识符,它们有着固定的含义,不能更改(见课本附录)。

例如int表示变量类型,不能另作它用。

(2)预定义标识符:和“关键字”一样也有特定的含义。

包括: 库函数的名字,如printf 预处理命令,如define这类标识符与关键字的区别是:C 语言语法允许用户更改预定义标识符的作用,但将失去系统规定的含义。

建议用户不要更改。

(3)用户标识符:由用户根据需要定义的标识符。

一般给变量、函数、数组和文件命名。

【例1】以下选项中不合法的标识符是( )。

A) &aB) FORC) printD) 00注意FOR (大小写不同,for 为关键字)二、常量定义:在程序运行中,其值不能被改变的量。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第1章C++的初步知识上学期是以C为蓝本来讲解,这学期需要增加一些C++的内容,这是进入C/C++程序设计II学习的前期准备。

从C到C++C语言是结构化和模块化的语言,它是面向过程的。

能处理小规模的程序。

但当规模较大时会显示出它的不足。

为了解决这个软件危机,提出了面向对象的程序设计(object oriented programming,OOP)思想。

C++保留了C语言原有的所有优点,增加了面向对象机制。

所以C++也称为“带类的C”。

C++对C的“增强”,表现在以下两个方面:1、在原来面向过程的机制基础上,对C语言的功能作了扩充。

(本章将介绍充分部分)2、增加了面向对象的机制。

在面向对象的程序设计中仍然要用到结构化程序设计的知识。

下面介绍C++对C的扩充,及与C的差别所在。

最简单的C++程序C++程序在结构上与C的差别如下:1、标准C++规定main函数声明为int型,即此主函数带回一个整型的函数值。

程序如果正常执行,则操作系统返回数值0,否则返回数值-1。

2、系统头文件不带后缀.h,如:#include<iostream>3、使用系统库时要使用命名空间std。

即使用using namespace std;,这句话的意思是使用命名空间std。

C++标准库中的类和函数是在命名空间std中声明的,因此程序中如果需要用到C++标准库,就需要用using namespace std;来声明,表示要用命名空间std中的内容。

例最简单的只有输出的程序#include<iostream>using namespace std;int main(){ cout<<"This is a C++ programm.\n";1.3 C1.3.1 C n";当程序需要执行键盘输入时,可以使用抽取操作符">>",从cin输人流中抽取字符。

例如:int a;cin>>a;。

不管把什么基本数据类型的名字或值传给流,它都能懂。

例如,下面的程序是输出字符串和整数:#include <iostream>using namespace std;int main(){ cout<<"This is a C++ program."<<endl;cout<<"This is "<<"a C++ program. "<<endl;cout<<"This is ";cout<<"a C++ program. ";cout<<endl;cout<<2;cout<<endl;return 0;}从上面的程序可以看出,输出的写法可以在同一行串连也可以分在几行。

cin可以和cout一样的方式调整行,它自动识别变量位置和类型。

例如:int a;float b;char c;,则cin>>a>>b>>c;,也可以写成:cin>>a;cin>>b;cin>>ccin能够知道抽取的变量的类型,它将对a,b,c分别给出一个整型、浮点型和字符型数。

二、输入流与输出流中使用控制符(第七章中详细介绍,这里了解就可以了)流的默认格式输出有时不能满足特殊要求,如:double average=;cout<<average<<endl;希望显示的是,即保留两位小数,可是却显示了,默认显示6位有效位。

用控制符(manipulators)可以对I/O流的格式进行控制。

控制符是在头文件中定义的对象。

可以直接将控制符插入流中。

常用控制符如下表所列。

表1 I/O流的常用控制符控制符描述DecHexOctsetfill(c)setprecision(n)setw(n)setiosflags(ios::fixed) setiosflags(ios::scientific) setiosflags(ios::left) setiosflags(ios::right) setiosflags(ios::skipws) setiosflags(ios::uppercase) setiosflags(ios::lowercase) 置基数为10置基数为16置基数为8设填充字符为c设显示小数精度为n位设域宽为n个字符固定的浮点显示指数表示左对齐右对齐忽略前导空白16进制数大写输出16进制数小写输出使用控制符时,要在程序的头上加头文件。

#include<iostream>#include<iomanip>using namespace std;int main(){ int i=100;cout<<i<<endl;cout<<hex<<i<<endl;double d=;cout<<d<<endl;cout<<setprecision(9)<<d<<endl;return 0;}1.3.2 用const定义常变量在C语言中常用#define命令来定义符号常量,实际上,只是进行字符置换,容易误解。

#include<iostream>using namespace std;#define R 2+3int main(){ cout<<R*R<<endl; 1.3.31.3.43.1415f.}void func(INTx){ 1.3.51.3.6.}void point(int a){return point(a,4);}void point(){return point(3,4);}可以用下面的默认参数的函数来替代:void point(int=3,int=4);当调用“point();”时,即调用“point(3,4);” 它是第3个声明的重载函数。

当调用“point(6);”时,即调用“point(6,4);”,它是第2个声明的重载函数。

当调用“point(7,8);”时,即调用第1个声明的重载函数如果一组重载函数(可能带有默认参数)都允许相同实参个数的调用,将会引起调用的二义性。

例如:void func(int); //重载函数之一void func(int,int=4); //重载函数之二,带有默认参数void func(int=3,int=4); //重载函数之三,带有默认参数func(7); //error: 到底调用3个重载函数中的哪个?func(20,30) //error:到底调用后面2个重载函数的哪个?学生练习:将P13例不用重载,改用带有默认参数的函数。

#include<iostream>using namespace std;int max(int a,int b,int c=0){return (a>b?a:b)>c?(a>b?a:b):c;}int main(){int a,b,c;cin>>a>>b>>c;cout<<max(a,b,c)<<" "<<max(a,b)<<endl;}1.3.7 变量的引用引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。

许多人使用它仅仅是想当然,在某些微妙的场合,很容易出错,究其原由,大多因为没有搞清本源。

一、引用的概念引用是个别名,就是某一个变量或对象(目标)的别名。

从那时起,引用作为目标的别名而使用。

对引用的改动实际就是对目标的改动,对引用的操作与对变量直接操作完全一样。

引用的声明方法:类型标识符&引用名=目标变量名;如:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名。

说明:(1)&在此不是求地址运算,而是起标识作用。

在看到&ra形式时,当&ra前有类型符时(如int &ra),它就是对引用的声明;如果前面没有类型符(如p=&ra),则&是取地址运算符。

(2)类型标识符是指目标变量的类型。

(3)声明引用时,必须同时对其进行初始化。

(4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。

ra=1; 等价于a=1;(5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。

故:对引用求地址,就是对目标变量求地址。

&ra与&a相等。

(6)不能对void进行引用。

(7)不能建立数组的引用。

因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名。

(8)由于指针也是变量,所以可以有指针变量的引用。

引用本身不是一种数据类型,所以没有引用的引用,也没有引用的指针。

二、引用的简单使用通过下面的例子来了解引用的简单使用。

//自编例,阅读程序#include <>void main(){ int intOne;int& rInt=intOne;intOne=5;cout <<"intOne:" <<intOne <<endl;cout <<"rInt:" <<rInt <<endl;rInt=7;cout <<"intOne:" <<intOne <<endl;cout <<"rInt:" <<rInt <<endl;cout <<"&intOne:" <<&intOne <<endl;cout <<"&rInt:" <<&rInt <<endl;}运行结果为:intOne:5rInt:5intOne:7rInt:7&intOne:0x0012FF7C&rInt:0x0012FF7C三、引用作为函数参数引用的一个重要作用就是作为函数的参数。

相关文档
最新文档