版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四部分 常量和变量constants & variables北京交通大学计算机与信息技术学院 教师: 林友芳本部分内容n介绍高级语言中常见的各种常量n数字常量、字符常量、字符串常量、符号常量、枚举常量的表示或定义方法n变量n概念,定义方法,命名规则或规范nC语言变量的赋值、初始化和使用n变量的属性n指针变量n构造数据类型的基本概念n一维数组、字符数组n二维数组初步概念、定义和使用方法n结构体n联合北京交通大学计算机与信息技术学院 教师: 林友芳n运算是计算机程序的各种计算操作n数据是程序的运算对象n与代数运算表达式相仿,高级语言中的运算对象也分为常量和变量,常量和变量都可以出现在表达
2、式中,如ny = x + 5;运算与运算对象一、常量北京交通大学计算机与信息技术学院 教师: 林友芳1. 常量的概念和分类n常量n程序中直接给定n值在程序运行过程中不可以改变的量。n各种常量n数字常量n字符常量n字符串常量n符号常量n枚举常量北京交通大学计算机与信息技术学院 教师: 林友芳2. 回忆数字常量n数字常量n表示参与计算的数值,既可以是整数,也可以是带小数的实数。n整数表示方法n十进制 如:90、255n八进制(以0开头)如:0123n十六进制(以0 x开头) 如:0 x5a、0 x23ffn实数表示方法n整数部分或小数部分为0时,可以不写数字0,如以下表示如:0.12 .23(0.
3、23) 1.45 4.9 6.(6.0)n科学表示法如:0.12E3 5.6E-6 -7.6E12n单精度实数表示如:4.5f 6.3F 0.123E3f 5.6E-6F实数类型默认为双精度实数北京交通大学计算机与信息技术学院 教师: 林友芳2. 回忆字符常量n定义n用一对单引号知起来的单个字符n字符分类n可见字符 如:字母、数字、标点等。n不可见字符 如:控制光标移动、使终端发出振铃声音的各类字符。n表示 如:0 z n t换行符横向制表符(Tab)北京交通大学计算机与信息技术学院 教师: 林友芳字符换码序列换码序列 含义 换码序列 含义 a 响铃符 v 纵向制表符 b 退格符 反斜线 f
4、换页符 ? 问号 n 换行符 单引号 r 回车符 ” 双引号 t 横向制表符北京交通大学计算机与信息技术学院 教师: 林友芳3. 回忆字符串常量n定义n用一对双引号(“)引起来的0个或多个连续的字符,但不包括双引号。n当字符串中包含双引号时,需要用”来表示。n举例n“This is a stringn”n“” is a double quote”n在计算机中存储时以空字符0结束,但在字符串常量中不需要直接表示这个空字符。字符串中可以包含换行符表示双引号北京交通大学计算机与信息技术学院 教师: 林友芳4. 符号常量n符号常量:用符号代表一定的常量n符号可以是任意的合法标识符,但习惯使用大写字母和
5、下划线组成的标识符。n用宏命令#define定义符号常量n#define PI 3也可以定义常量表达式 #define TIMES (NUM/4)n优点n有助于提高程序的可读性n便于记忆和使用n有助于发现和减少程序中的错误n提高程序的可维护性最好根据常量的用途和含义对常量命名是一个编译预处理命令,它所定义的符号常量在预编译阶段被替换为对应的字符串。必须是已定义过的符号常量北京交通大学计算机与信息技术学院 教师: 林友芳例/计算并输出半径为2.5米的圆的面积#define PI 3ain() printf(“Area = ”, PI * 2.5
6、 * 2.5); return 0;北京交通大学计算机与信息技术学院 教师: 林友芳5. 枚举常量n定义n枚举常量是一种用符号表示的整型数字常量,且有标识符表示。n使用关键字enum定义nenum A, B, C, D, E = 50, F, G, H, I;nenum JAN = 1, FEB, MAR, APR, MAY, JUN, JLY, AUG, SEP, OCT, NOV, DEC;n如果枚举常量后面给定了值,则以给定值作为枚举符对应的常量值。n当枚举符后面没有给定值,只是一个标识符时,该枚举常量的值等于其前面枚举常量的值加1。如果该枚举常量是一个标识符时且没有给定值,该枚举常量的
7、值等于0。北京交通大学计算机与信息技术学院 教师: 林友芳枚举量与符号常量的意义n用文字符号的形式表示常量有利于更好地理解程序意义。n例如,程序里两个0可能会代表不同意义,它们在数值形式上没有任何区分。但是,采用符号常量可提高可读性,便于理解。n高级语言提供了用符号表示常量的办法,在程序中统一使用。n好处n使程序更容易修改和阅读二、变量及其属性北京交通大学计算机与信息技术学院 教师: 林友芳1. 变量概念、定义和使用n变量n程序运行过程中可以发生变化的量n存储数据的命名对象(变量名)n变量名是标识符。n使我们可能通过一个名字来使用存储单元n变量的特点n变量能保存值,不会丢失。给某变量名是标识符
8、。n变量的值可以变化n变量赋一个值之后,每次使用它总得到这个值,直到下次赋值。n对变量基本操作n赋值(写)n取值(读)注意:要遵循命名规范北京交通大学计算机与信息技术学院 教师: 林友芳2. 变量的类型和定义n变量有固定的类型,只能保存这个类型的值。n整型变量(保存 int值的变量)n双精度变量(保存 double 值)n字符变量,n变量定义n变量必须先定义后使用n需要给出变量名和类型。n例nint m;ndouble x;n可以同时定义多个同类型的变量nint k, n, sum, count;nlong double y, z;为什么要给出类型?不给行不行?有不给的吗?能定义一种变量存什么
9、数据都行吗?北京交通大学计算机与信息技术学院 教师: 林友芳3. 变量的命名n关键字不能当做变量名n变量的命名最好能反映变量的实际含义n一些行业规范里,变量命名一般还应反应变量的类型,有些变量命名还要反应变量的地位(如类属性、全局变量)n变量命名要求参见编码规范北京交通大学计算机与信息技术学院 教师: 林友芳4. 复合结构内的局部变量n复合结构中可以定义局部变量,在内部使用n变量定义应出现在所有语句之前变量定义序列语句序列n有些C+没有这个要求n一个复合结构里不能定义多个同名的变量。北京交通大学计算机与信息技术学院 教师: 林友芳5. 变量的取值与赋值n取值:计算中遇到变量,取其值参与计算nx
10、 + sin(3.2 * y) - pow(x, 2)n赋值n用赋值运算符(=,赋值号)表示n赋值语法nVariable = Expression /赋值表达式nx = 5.0n左边是赋值目标,右边是提供值的表达式n赋值运算的主要效果是把表达式的值赋给左边变量n赋值运算符优先级很低。n例nx = 2 + 3 * y北京交通大学计算机与信息技术学院 教师: 林友芳赋值语句n赋值语句nVariable = Expression;n最基本的语句,完成程序里最重要的操作n程序中一般用赋值语句描述赋值动作n例n重写由三边求三角形面积的程序n计算中多次用半周长,定义变量保存这个值,可避免重复计算。北京交通
11、大学计算机与信息技术学院 教师: 林友芳n变量的最主要用途:变量的最主要用途:保存计算的中间结果保存计算的中间结果#include #include int main () double s; s = (3. + 5. + 7.) / 2.; printf(Area: %fn, sqrt(s*(s-3.)*(s-5.)*(s-7.) ); return 0;用于保存中间结果北京交通大学计算机与信息技术学院 教师: 林友芳赋值运算符的值与结合性nVariable = Expression 整体上被称为赋值表达式n赋值表达式也有值,就是右边表达式的值。n赋值表达式的值通常不用,但赋值表达式的值也可
12、以用,例n y = (x = 5) + 8;n有时可以用同一表达式为多个变量赋值。ny = (z = (x = 1.0);n赋值运算符的结合律n从右向左结合y = z = x = 1.0;简化北京交通大学计算机与信息技术学院 教师: 林友芳赋值与类型n给定赋值表达式nVariable = Expressionn左边变量和右边的表达值都有类型n规定n若表达式值与被赋值变量类型不同,该值先转换到变量类型的值,然后赋值。n在前面程序例子里把赋值语句改写成:ns = (3 + 5 + 7) / 2;n运行时发现程序的结果不对,为什么?北京交通大学计算机与信息技术学院 教师: 林友芳6. 变量初始化n定
13、义变量时指定变量的初始值。n可用数值或者数值表达式为的变量做初始化,如ndouble s = (3 + 5 + 7) / 2.0;nlong double x = 4.5L, y = 3.24L;n初始化只能一次对一个变量做北京交通大学计算机与信息技术学院 教师: 林友芳7. 从键盘输入数据到变量n请查阅并预习scanf语句的功能与用法n例#include “stdio.h”main() int n; scanf(“%d”, &n); printf(“输入的值为:%d”, n); return 0;%d表示输入整数,请先自学%c, %s, %lf, %f的含义&n表示录入的数转
14、换成整数后放入n中北京交通大学计算机与信息技术学院 教师: 林友芳8. 赋值符与等于n赋值与数学中的“等于”完全不同。n例nx = x + 1;n“x = x + 1”在数学里为矛盾。nC语言中判断两个值是否相等,用运算符n=n一定注意不要写成一个等号北京交通大学计算机与信息技术学院 教师: 林友芳9. 值的计算顺序问题n下面是合法语句nx = 2.0;ny = (x = 3.0) + x;n问题:n执行后y 的值是什么?n这个问题没有明确答案,因为第二个语句没有语法错误,但是定义不明确。n原因nC语言未规定加法对两个运算对象的求值顺序,这种表达式的结果没有定义。北京交通大学计算机与信息技术学
15、院 教师: 林友芳dValue35.7变量double类型名字变量的存储单元地址:0 x00002f30 10. 变量的属性图示规定存储的长度和格式double dValue = 35.7;三、指针变量简介从信件投递、找人、找地方到找存储空间,保存存储空间地址的方法指针变量简介北京交通大学计算机与信息技术学院 教师: 林友芳1. 找到目的地的办法某宿舍宿舍号某办公室通信地址同学或快递根据宿舍号找到宿舍快递或邮局根据通信地址投递北京交大我校地址根据地址找到学校网站地址网站通知书上网站上脑子里信封上信封上或脑子里搜索结果上脑子里手册上目的地地址地址保存处根据地址找到网站北京交通大学计算机与信息技术
16、学院 教师: 林友芳2. 回忆数据与存储空间0100000100000000000000000000000000000000存储空间:以字节为单位编号普通字符型变量占8位A一个32位int占用的存储空间一个float型浮点数所需占用的存储空间0 x000000000 xFFFFFFFF存储空间的编号称为地址0 x000000010 x00000002北京交通大学计算机与信息技术学院 教师: 林友芳3. 存储空间地址之用处与获取n存储空间地址用处n知道了地址就可能可以访问存储空间:往其中存数据;使用其中保存的数据n存储空间地址获取途径n用&运算符取已知变量所占用的存储空间地址n使用存储空
17、间申请功能向操作系统成功申请存储空间后,相应功能会返回得到的存储空间地址。(此部分内容见后续部分讲解)n直接使用一些地址常量,如数组的起始地址北京交通大学计算机与信息技术学院 教师: 林友芳4. &运算符说明示例nint n = 10;n则&n代表整型变量n所占用的存储空间的起始地址。n如图所示,设n占用了0 x0012FF70-0 x0012FF73这4个字节的存储空间n则&n的值为n0 x0012FF70100 x0012FF70n内存空间北京交通大学计算机与信息技术学院 教师: 林友芳5. 存储空间地址与保存n计算机中的内外存的存储空间非常大,可以保存大量的不同类
18、别、不用形式的数据。n要对这些数据进行管理、使用和处理,必须记录下这些数据所处的存储位置地址,否则无法找到这些数据。n在许多高级语言中,提供一类用来记录存储空间地址的变量,这种变量一般被称为指针变量。n注意,因为通过对保存在指针变量中的地址来直接操作存储空间需要程序员的细心和经验,否则,一些地址值算错就容易使程序出错。因此,也有一些高级语言如JAVA不再设置指针变量,而通过其它机制实现动态存储管理。北京交通大学计算机与信息技术学院 教师: 林友芳6. 指针变量n指针变量n用于保存某种类型的存储空间的起始地址的变量。n语法: 基类型 * 变量名;n例nint *pInt;ndouble *pDo
19、uble;nchar *pChar;北京交通大学计算机与信息技术学院 教师: 林友芳7. 指针变量的常见用法示例n示例1nint n;nint *pInt;npInt = &n; /取n的地址放在pInt中n示例2nint *pInt;npInt = (int *)malloc() /申请一块存储空间并将其地址存入pInt中;n示例3nint *pInt, narr10; /narr为一个数组npInt = narr; /使pInt中保存数据的起始地址北京交通大学计算机与信息技术学院 教师: 林友芳8. 间接运算符*n指针的间接运算符: *n如给定表达式*pInt,表示先取指针变量pI
20、nt中所存的地址值addr,然后再将addr所处的整型存储空间中的值取出来作为表达式的值。n如nint n = 100, m, *p;np = &n;nm = *p + 1; /m的值将为1010X0012FF701000X0012FF700X0012FF68pn1010X0012FF6Cm北京交通大学计算机与信息技术学院 教师: 林友芳9. 指针变量与存储单元关系图示0X0012FF78指针变量p1550X0012FF78100X0012FF70550X0012FF78每格代表4个字节int *p1;int n = 55;int *p2;int m = 10;p1 = &n;
21、p2 = &m;0X0012FF700X0012FF740X0012FF780X0012FF7Cmp1p2n*p1的值为55,*p2的值为10问,执行 *p1 = 100;会产生什么影响?北京交通大学计算机与信息技术学院 教师: 林友芳10. 指针变量的类型n指针变量中保存的某种类型存储空间的地址n存储单元的地址值是有类型的,如n存储int值的存储单元的地址的类型是 int *n存储double值的存储单元的地址的类型是double *n存储char值的存储单元的地址的类型是char *n不同类型值存储单元的地址值属于不同的类型nint * 和 char *属于不同的类型ndouble
22、 * 和 int * 属于不同的类型nshort * 和 long * 属于不同的类型n地址值类型的不同意味着不能将类型不同的地址值赋给基类型不同的指针变量。四、构造数据类型Constructed Data Types简单数据类型复杂数据类型北京交通大学计算机与信息技术学院 教师: 林友芳1. 复杂数据类型描述的需求n如何描述一组类型相同的数据?n如何描述图片?n如何描述游戏中对象,如武器、战场?n如何描述一个身份证?n如何描述学籍管理系统中的学生?n如何描述地图?n如何描述一个围棋棋盘?n如何描述搜索引擎的搜索结果?n北京交通大学计算机与信息技术学院 教师: 林友芳2. 复杂数据类型的特点n
23、数据不是孤立的,都相关联的,数据之间具有关系n一个对象可能具有一组类型相同的数据n一个对象可能具有许多不同的属性n例n给定一组关键词,可以在搜索引擎上搜索到很多搜索结果n一个自然人具有许多不同的属性n一个班级里具有许多学生n一个课堂上既有教师也有学生北京交通大学计算机与信息技术学院 教师: 林友芳3. 构造数据类型n构造数据类型n根据已定义的一个或多个数据类型用构造的方法来定义新的数据类型。n也就是说,一个构造类型的值可以分解成若干个“成员”或“元素”。n每个“成员”都是一个基本数据类型或又是一个构造类型。北京交通大学计算机与信息技术学院 教师: 林友芳4. 同类数据集合的描述办法n给定一个集
24、合S = e1, e2, , en,如何用高级语言去描述和使用这样的集合?n最简单的办法n数组arrayn固定长度的按顺序排列的一组相同元素的集合n其它表示办法考虑的因素n长度不固定n不一定非得在内存里挨着放北京交通大学计算机与信息技术学院 教师: 林友芳5. 具有许多属性的对象描述办法n给定现实世界中的一类对象Object,设其具有属性集AS = a1, a2, , an,如何去描述这样的对象?n如,对于人,具有姓名,出生日期,身份证号,籍贯,民族等属性,如何表示?n在各种高级语言中都提供了不同的表示办法,如C语言中的struct, PASCAL中的record,各种面向对象程序设计语言中的
25、class等五、数组array数组的重要意义: 以统一的方式描述一组数据,从而为方便地对一组数据实现统一的数据处理奠定基础。北京交通大学计算机与信息技术学院 教师: 林友芳1. 数组的概念、分类和定义n概念n数组是一种构造类型,它是由具有同一种更基本类型的数据按顺序组织在一起的有序整体。n数组中的元素通过下标来索引。n按维数分类n一维数组n二维数组n三维数组n更高维数组北京交通大学计算机与信息技术学院 教师: 林友芳2. 数组的定义n一维数组定义语法 n ;n如nint a50; ndouble b322;nint c=1,2;n二维数组定义语法n MNn如nint a34;nint days
26、7=1,2,3,4,5,6,7,0,3,5,7,9,2,1;北京交通大学计算机与信息技术学院 教师: 林友芳3. 数组元素编号及存储a0 a1a2 an-2 an-1 n每个元素的类型都相同n每个元素的类型可以任何合法的类型(基本类型、数组、指针、结构、)n每个元素在内存中按编号顺序紧挨着连续存放C的数组元素编号规则(i = 0 n-1),首元素序号为0,依次类推顺序编号,i称为下标。北京交通大学计算机与信息技术学院 教师: 林友芳4. 多维数组的定义nint nArr100;nint nTwoDimArr105; 也可以看是一维数组nint nThreeDimArr356; 也可以看成是一维
27、和二维数组北京交通大学计算机与信息技术学院 教师: 林友芳5. 数组的基本使用规则n访问某个数组元素,使用下标运算符,优先级最高。n运算对象是数组名和括号里表示下标的表达式。n一维数组使用举例int narr10, i;i = 5; narr5 = 20; /将第5个元素置成20n二维数组使用举例int nTwoDimArr105, i, j;i = 0;j = 2;nTwoDimArrij = 100; /将第0行第2列的元素置成100北京交通大学计算机与信息技术学院 教师: 林友芳6. 数组名称与数组元素地址计算nC规定,数组的名称代表数组的起始地址值。n若有定义: int narr10;
28、n则,narr代表整个数组的起始地址。n取数组元素的地址的方法为在数组元素前加&,如n&narri 表示取数组第i个元素的地址n对于该数组中的第i个元素,narri的地址为nnarr + i * sizeof(int)nsizeof用于获取其中的类型或变量的大小。n即假设narr的值为1000,sizeof(int)为4n则narr3的地址1000 + 12 =1012,即表达式&narr3的值为1012。六、结构体struct具有多个属性的对象的描述办法北京交通大学计算机与信息技术学院 教师: 林友芳1. C的结构体及定义n结构体n将事物或事件的不同属性组织在一起作为
29、一个整体来对待。n结构体是面向对象程序设计中的类的基础。n结构说明由struct引导,二种基本形式nstruct 成员说明序列 ;nstruct tag member-list declarators;nstruct 类型标记 成员列表 变量声明;北京交通大学计算机与信息技术学院 教师: 林友芳2. 实例n校园一卡通系统需要描述每一个用户的如下信息n用户ID,姓名,身份证号,性别,卡余额n其中n用户ID为14位学号n姓名不超过10汉字n身份证号18位n性别用M和F表示男女n卡余额为双精度浮点数。北京交通大学计算机与信息技术学院 教师: 林友芳实例结构体说明struct UserAccount
30、char szUserNO15; char szName20; char szID19; char cGender; double dBalance; User, Users100, *pUser;struct UserAccount char szUserNO15; /用户ID char szName20; /姓名 char szID19; /身份证号 char cGender; /性别 double dBalance; /卡余额;struct UserAccount User, Users100, *pUser;User为一个普通的结构体变量;Users是一个长度为100的结构体数组;pU
31、ser是一个指针变量,用于存放该类型结构体变量的所占存储空间的地址;北京交通大学计算机与信息技术学院 教师: 林友芳实例图示用户ID姓名身份证号性别卡余额08120001 张帅帅110108M0.10结构体类型结构体实例化08120099 李美美350108F500.00struct UserAccount char szUserNO15; char szName20; char szID19; char cGender; double dBalance;struct UserAccount User, Users100, *pUser; 北京交通大学计算机与信息技术学院 教师: 林友芳4.
32、结构体数组08120001081200990812000708120007 张帅帅 李美美 赵小飞 罗小花110108350108360108410108MFMF0.10500.0020.0088.20长度为n的结构体(记录)数组,其中每个元素是一个结构体(记录)北京交通大学计算机与信息技术学院 教师: 林友芳5. 结构体的使用规则n访问结构体成员,分量运算符.n结构体变量.结构体成员n例如nUser.cGender = F;nUser.dBalance += 10.2;n结构体变量的地址等价于第一个成员的地址n结构体指针变量用于存放结构体的地址n对于前面的定义,若令pUser = &
33、Users5;n则pUser将保存结构体数组中的第5个元素的地址n通过结构体指针变量访问结构体,使用-运算符npUser-cGender = M;npUser-dBalance += 11.5;七、联合Union北京交通大学计算机与信息技术学院 教师: 林友芳1. 定义nunionn形式与struct类似,但是实质有很大的不同n提供一种若干个不同的名字共享(共用)一段存储空间的手段,但是同一时刻只有能一个名字有实际意义。n如如union data int n; double x; char c;使用方法与结构体类似,区别在于所有成员共享同一段固定长度的存储空间北京交通大学计算机与信息技术学院
34、教师: 林友芳 成员 c 的存储位置和范围 成员 n 的存储位置和范围 联合 union data 的表示 成员 x 的存储位置和范围 联合变量的存储实现n成员共用同一存储位置,存储区大小由大成员决成员共用同一存储位置,存储区大小由大成员决定。对定。对union data,n是整数,是整数,d是双精度数,是双精度数,c是字符。需要足以存放双精度数的存储区。成员是字符。需要足以存放双精度数的存储区。成员安排如下图:安排如下图:北京交通大学计算机与信息技术学院 教师: 林友芳联合变量的初始化和使用n联合变量可以在定义时直接初始化,但这个初始联合变量可以在定义时直接初始化,但这个初始化只能对第一个成员做。化只能对第一个成员做。n例例union data u1 = 3, u2 = 5;n联合变量使用形式与结构变量相同,可整体赋值、联合变量使用形式与结构变量相同,可整体赋值、成员访问、取地址。如:成员
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园教师心理健康支持体系构建研究-基于幼儿园教师心理援助计划实施数据分析
- 人教版(2024)七年级下册英语 Unit 1 Section A 教学设计
- 山东省济宁市兖州区2025-2026学年高二下学期期中考试英语试卷
- 妇女主任考试题及答案
- 2025年气象局事业单位招聘考试真题及答案
- 疏散指示系统施工方案(完整版)
- 2026年云南楚雄州广播电视编辑记者、播音员主持人资格考试(广播电视基础知识)考前冲刺试题及答案
- 安全验收评价服务合同
- 2026年政府采购代理机构从业人员考试自测试题及答案
- 公路照明施工方案
- 2025年香港沪江维多利亚笔试及答案
- 基于Python的电影票房信息数据分析与研究
- 促宫颈成熟教学课件
- 抗合成酶抗体综合征
- 26版高中历史部编版必修中外历史纲要(上)第15课 明至清中叶的经济与文化【课件3】课件
- GB/T 4956-2025磁性基体上非磁性覆盖层覆盖层厚度测量磁性法
- ECMO相关急性肾损伤早期干预方案
- 2025四季度重庆云阳县遴选事业单位11人笔试考试备考题库及答案解析
- 2025年放射医学技士资格考试(专业知识)题及答案
- 蚊虫消杀培训课件
- 同仁医院院史陈列馆设计方案
评论
0/150
提交评论