欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    (高职)C语言程序设计程序设计基础ppt课件.pptx

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

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

    (高职)C语言程序设计程序设计基础ppt课件.pptx

    C语言程序设计程序设计基础ppt课件C C语言程序设计语言程序设计张太芳 蒲晓妮 张明艳程序设计基础程序设计基础编程起步编程起步能力目标 掌握C语言程序的开发过程; 掌握程序结构; 掌握上机操作的环境; 掌握各种数据类型; 熟练运用运算符与表达式。#include void main( ) printf(“老师,您好!”); /*输出“老师,您好!”*/知识准备知识准备 任务引例 用C语言编写程序输出“老师,您好!”程序清单程序清单输出结果输出结果 老师,您好!引例解析引例解析“/*”与“*/”及其之间的内容是对程序的注释,用以对语句进行说明,对程序的运行没有任何影响。main是“主函数”,所有的C语言程序都必须包含有一个 main函数。printf函数是C语言提供的按指定格式进行标准输出的函数,其功能是输出由双引号括起来的字符序列。#include int max(int x,int y); /*Max函数声明*/void main( ) int a,b,m; scanf(%d,%d,&a,&b); m=max(a,b); /*用户自定义函数的调用*/ printf(a=%d,b=%d,m=%d,a,b,m);int max(int x,int y) /*用户自定义函数,求2个数中的最大值*/ int m; if (xy) m=x; else m=y; return m;做中学做中学0-1 0-1 键盘输入两个数,比较大小,并输出两数中的最大值。程序清单程序清单 0.1 C语言程序概述输出结果输出结果8,4a=8,b=4,m=8引例解析引例解析程序中包括两个函数main()和max()。scanf()函数用来读取用户从键盘输入的值。知识点知识点1C语言程序特点每条语句后面都有“;”作为终止符,它是C语句结束符。每个程序必须有一个且只能有一个主函数,程序从主函数开始执行。在C语言中,大、小写字母是有区别的。程序中可以加注释部分,注释有块注释和行注释两种方式。知识点知识点2C语言程序书写格式C语言程序中每行可写一条语句,也可写多条语句,一般一行写一条语句。C语言程序的书写要注意适当的缩进,以便使程序更加清晰易读。C语言程序中的花括号必须成对出现。在书写程序时,要习惯使用注释。0.1.1 程序构成编译预处理行全局变量说明void main( ) 局部变量说明 程序段返回类型 f1(形式参数说明) 局部变量说明 程序段返回类型 f2(形式参数说明) 局部变量说明 程序段返回类型 fn(形式参数说明) 局部变量说明 程序段说明说明C的变量在使用之前必须先定义其数据类型,未经定义的变量不能使用。且定义变量的语句必须放在可执行语句前面。程序段由多行语句组成。形式参数说明用于传值。局部变量、全程变量的用法含义。花括号内的内容统称为函数体。用户定义的函数名由用户命名。用户自定义函数可置于主函数之前,也可置于主函数之后。若在主函数之后,要在主函数之前对被调用函数进行函数声明。1. 关键字关键字是C语言编译程序本身所规定使用的专用词,它们有特定的含义。所有的C语言关键字不能用作标识符,关键字必须用小写字母表示。表0-1 ANSI标准规定的关键字autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile0.1.2 0.1.2 特殊字符特殊字符2.标识符 C语言中,变量、符号常量、函数、数组、类型和文件等都需要有一个名称,这个名称就叫做标识符。uC语言标识符命名规则如下:v 标识符由字母(AZ,az)、下划线(_)或数字(09)组成。v 标识符必须以字母(AZ,az)或下划线(_)开头。v C语言中标识符严格区分字母大小写。v 标识符不能使用C语言的关键字。说明定义标识符时尽量做到“见名知意”。标识符的长度不要太长,建议在8个字符以内。不同编译系统支持的标识符长度不同。标识符中不能出现全角字符与空格。 下列标识符是不合法的标识符: 5abc、aa-bb、a&b、a#、ab¥ 下列标识符是合法的标识符: A123、a_23、_123、a_b3. 分隔符 分隔符用来使编译器确认代码在何处分隔,C语言中分隔符包括以下三种。 注释符空白符 空白符包括空格、回车、换行和制表符(Tab键),用来分隔程序的各基本成分。一个或多个空白符的作用完全一样。普通分隔符 普通分隔符的作用也是用来分隔程序的各成分,在程序中有特定的含义,不能省略。分隔符见表0-2。表0-2 C语言的普通分隔符普通普通分隔符分隔符名称名称用途用途大括号/花括号定义复合语句、函数体及数组的初始化定义复合语句、函数体及数组的初始化方括号定义数组类型及引用数组元素定义数组类型及引用数组元素()()小括号分割函数名与其后实参或形参,表达式中分割函数名与其后实参或形参,表达式中 限定运算顺序限定运算顺序; ;分号语句结束标志语句结束标志: :冒号标号标号. .圆点分割复合类型变量与其成员变量分割复合类型变量与其成员变量, ,逗号构成逗号表达式构成逗号表达式? ?问号构成问号表达式构成问号表达式0.2 C语言程序开发过程 C语言程序的开发过程可以分成4个主要步骤: 编辑编译链接执行图0-1 C程序开发过程用户C源程序.c文件目标程序.obj文件可执行程序.exe文件结果其他目标文件0.3 基本数据类型 短整型(short) 整型 基本整型(int) 数值类型 长整型(1ong) 单精度实型(float) 实型(浮点型) 双精度实型(double) 基本类型 字符型(char ) 枚举类型(enum) 数组类型 构造类型 结构体类型(struct) 数据类型 (组合类型) 共用体类型(union) 文件类型(FILE) 指针类型 空类型(void) 图0-2 数据类型 0.3.1 整型数据1整型常量uC语言中的整型常量有3种表示形式:v 十进制整数。 如2,-983。v 八进制整数。八进制整数以0开头,由07构成。 如012表示八进制整数12。v 十六进制整数。十六进制整数以0 x开头,由09和AF或af构成。 如0 x12A,表示十六进制整数12A。2整型变量 在C语言中,整型类型标识符为int。根据整型变量的取值范围又可以将整型变量定义为以下三类整型类型:有符号有符号无符号无符号基本型(简称整型)intunsigned int短整型short或short intunsigned short长整型long或long intunsigned long0.4.2 整型数据 3整型常量的类型v 一个整数,其值在(-3276832767)之间时,被认为是int型。v 若其值超出了此范围,在(-21474836482147483647)之间,则被认为是long类型。v 一个整型常量后加U或u后缀则被认为是unsigned类型,在内存中按unsigned规定的方式存放。v 一个整型常量后加l或L后缀则被认为是long类型,在内存中按long规定的位数存放。 在存储有符号数时,存储单元的最高位代表符号位,0为正,1为负。 而存储无符号数时,存储单元全部用作存放数本身,一个无符号整型变量只能存放不带符号的整数。 在定义变量时,方括号内的部分是可以省略不写的,般省略方括号中的标识符。如:short data; unsigned data2=9887; 在设计程序时,应该注意变量类型的取值范围,当赋值超过其取值范围时,会出现溢出错误。注 意0.3.2 实型数据做中学做中学0-2 0-2 编一个程序,给定三角形的三条边长,计算其面积。 #include math.h#include void main( ) float a=3.0f,b=4.0f,c=5.0f,s,area; /*定义实型数据类型变量*/ s=1.0f/2.0f*(a+b+c); area=(float)(sqrt(s*(s-a)*(s-b)*(s-c); printf(a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2fn,a,b,c,s); printf(area=%7.2fn,area); /*以实数型类对实型变量输出数据*/输出结果输出结果a=3.00,b=4.00,c=5.00,s=6.00a=3.00,b=4.00,c=5.00,s=6.00 area=6.00 area=6.00程程 序序 清清 单单1实型变量 实型变量 定义实型变量的形式如下: float 变量名表; 或 long double 变量名表;单精度 float双精度 double长双精度 long doube如:float dat1=0.43f,dat2=6f; double total,devide; 2实型常量u实型常量有两种表示形式:v 十进制小数形式:十进制小数形式由数字和小数点组成。 如:.67,5.2,9.等。v 指数形式:指数形式由尾数、e(或E)以及指数3部分组成。 字母e(或E)之前必须有数字 小数点左边有且只有一位非零数字,指数部分则必须为整数。如:如:1.e11.e1,9.8E09.8E0,9.8E09.8E0,-5.43E4, 5.4E,.E,e-6,3e3.1注 意注意为了保证数据精度,许多C编译系统都自动地将实型常量作为双精度实型来处理。在数的后面加上字母f(或F)可以使编译器将其强制转换为单精度实型,如9.76f,5.6F等。一个实型常量可以赋值给一个float型、double型或long double型变量。#include void main( ) printf(%cn,a); printf(%cn,141); /ASCII码为97 printf(%c,98); 0.3.3 0.3.3 字符型数据字符型数据做中学做中学0-3 0-3 编程实现字符的输出输出结果输出结果播放铃声ab程程 序序 清清 单单 1.字符型常量v 定义:字符型常量是用单引号引起来的一个字符或转义字符。如A,x,%v 字符常量的值:该字符的ASCII码值如a97,A65 n10,t9v 定义格式:char 变量名 = 值如 char ch = 65 char ch = A char ch =101 这三种定义是等效的。v 转义字符:反斜杠“”后面跟一个字符或一个代码值表示。v C语言中的转义字符见表0-4。#include void main( ) char c1,c2; /*定义字符类型*/ c1=97;c2=98; /*赋整型值*/ printf(%c,%cn,c1,c2); /*字符类型输出*/printf(%d,%dn,c1,c2); /*整数类型输出*/做中学做中学0-4 0-4 编程检验ASCII码值与字符的对应关系 输出结果输出结果 a,b -97,98程程 序序 清清 单单2.字符型变量字符型数据分为: 有符号字符型( signed char),取值范围-128127。 无符号字符型(unsigned char),取值范围0255。存放字符常量,占用一个字节,存放一个字符定义形式:char 变量名表; 如:char charl, char2=& 3.字符串常量定义:用双引号引起来的字符序列。 如:“How are you!”,“china” char char1=“y”; /错存储:每个字符串的结尾自动加一个0作为字符串结束标志。 如:字符常量与字符串常量不同。在C语言中没有字符串这种数据类型。因此没有专门的字符串变量来存放字符串常量,只能使用字符数组来存放。注 意0.3.4 数据类型转换转换原则:运算对象数据类型不同时,字节短的数据类型自动转换成字节长的数据类型。 charint整数,short intint型,floatdouble型。运算对象类型不同时,转换由系统自动完成,见下图。类型转换也可强制进行。 如: int a=4555; char b; b=(char)a#include void main() char a=x; int b=3,f=2; float c=2.5678f; double d=5.2345; long e=32L; printf(%fn,a-b+d/c-e*f);做中学做中学0-5 0-5 试分析下面程序在进行混合运算中的数据转换过程 输出结果输出结果 55.038515程程序序清清单单0.4 运算符和运算表达式程序设计中用来表示各种不同运算的符号称为运算符。将运算符与操作数连接起来,就构成了表达式。表达式的种类也很多,如算术表达式、逻辑表达式、关系表达式等等,表达式总是有值的。0.4.1 算术运算符和算术表达式 算术运算符 用算术运算符和括号将运算对象连接起来的符合C语言语法规则的式子称为算术表达式。基本算术运算符(+,- ,*,/,%)自增运算符(+)自减运算符(-)表0-4 算术运算符算术算术运算符运算符名称名称示例(设示例(设x x值为值为1 1)优先级优先级表达式值+ +加法5+27相同 低低 高高- -减法5-23* *乘法5*210相同/ /除法5/2;5.0/22;2.5% %求余(-5)%2;5%(-2)-1;1- -负值-3 相同+ +正值+3 +自增y=+x;y=x+y=2,x=2;y=1,x=2相同相同-自减自减y=-x;y=x-y=-x;y=x-y=0,x=0;y=1,x=0y=0,x=0;y=1,x=01.基本算术运算 结合方向:从左向右优先级:- - * / % - + - 两整数相乘,结果为整数 有负整数时,多数机器采取“向零取整”原则 %要求两侧均为整型数据 + - * / 运算的两个数中有一个数为实数,结果是double型注 意2自增、自减运算符作用:使变量值加1或减1种类:前置 +i,-i (先执行i+1或i-1,再使用i值)后置 -i,i- (先使用i值,再执行i+1或i-1) #include void main( ) int x,y,z1,z2; x=7; y=8; z1=y-(x+); /*计算结束后,x的值为8*/ z2=y-(+x); /*x的值为8,先自加为9,再与y求差*/ printf(x=%dty=%dny-(x+)=%dny-(+x)=%d,x,y,z1,z2);做中学做中学0-6 0-6 变量自加运算 输出结果输出结果 x=9 y=8 y-(x+)=1 y-(+x)=-1程程 序序 清清 单单思考:若x=3,则y=(+x)+(+x)+(+x)的值是多少? z=x+x+x+的值是多少?#includevoid main()int y = 6;printf(“%d”,+y);printf(“%d”,-y);printf(“%d”, y+);printf(“%d”,y-);printf(“%d”,-y+);printf(“%d”,-y-);3算数表达式算术表达式中运算对象可以是常量、变量或函数等。如:a%5/2-(b+2)就是一个合法的算术表达式。C语言规定了运算符的优先级和结合性(见附录D),在算术表达式求值时,按照优先级别的高低和结合方向来依次处理运算。C语言中表达式的书写形式要按照C语言规定的语法来写。0.4.2 赋值运算符和赋值表达式 1基本赋值运算符符号: =格式: 变量标识符 = 表达式作用: 将一个数据(常量或表达式)赋给一个变量左侧必须是变量,不能是常量或表达式如: x=5,y=total()+x*3,3=x 2复合赋值运算符将双目运算符加在“=”的前面构成复合赋值运算符。其形式为:=种类: += -= *= /= %= = = &= = |= 如:x+=3,它等价于x=x+3。3赋值表达式形式:赋值表达式的值与变量值相等且可嵌套。 如:a=b+3如果赋值运算符两边的数据类型不同,系统将会自动进行类型转换。当赋值运算符是复合赋值运算符时,赋值表达式等价于 =在实际应用时,将复合赋值运算符右侧的表达式看成一个整体。如:y/=x+9,实际上等价于y=y/(x+9)。赋值运算符的结合性为右结合性。 如:y=a *=6+(a+=1) /表达式值72,a=6注 意0.4.3 关系运算符和关系表达式关系运算是对两个运算对象进行大小关系的比较运算。关系运算符的优先级低于算术运算符,而高于赋值运算符。关系表达式的语法格式为: 如,x=y,3* b = = (a5),(ab)(a=3) /a等于1。关系运算符名称示例优先级 大于a3相同高=大于或等于a=3=小于或等于a=b-c3*sin(x)= =等于i=5相同低!=不等于m!=n表0-5 关系运算符0.4.4 逻辑运算符和逻辑表达式表0-6 逻辑运算符逻辑运算符“!”是单目运算符,“&”和“|”是双目运算符。逻辑运算符比关系运算符优先级低,比赋值运算符优先级高。逻辑表达式的值只有“真”和“假”,当逻辑关系成立时,逻辑表达式的值为1(真),当逻辑关系不成立时,逻辑表达式的值为0(假)。逻辑运算符名称示例优先级!逻辑非!(x9)高 低&逻辑与(x2) &(y2) |(y=b+3)?5:a; sum=(a=b+3)?5:a; /当当a=3,b=5a=3,b=5时时,sum=3;,sum=3;当当a=3,b=0a=3,b=0时时,sum=5,sum=5优先级:高于赋值运算符优先级,低于逻辑运算符、关系运算符和算术运算符。 如,如,x=ax=a* *b!=0?a+1:b/2;b!=0?a+1:b/2;相当于相当于x=(ax=(a* *b!=0)?(a+1):(b/2)b!=0)?(a+1):(b/2)结合性:从右向左如,如,x=ax=a* *b!=0?a+1:b2?3:b/2;b!=0?a+1:b2?3:b/2; 相当于相当于x=(ax=(a* *b!=0)? (a+1):(b2)?3:(b/2)b!=0)? (a+1):(b2)?3:(b/2)C语言会将条件表达式的值的数据类型自动转换为表达式2和表达式3中较高级的数据类型,原则上表达式2和表达式3的值的数据类型相同。如,如,x=(ab)?a:1.2;x=(ab)?a:1.2;/如果a小于等于b,则将条件表达式的值1.2赋给x;如果a大于b,则将条件表达式的值a的ASCII码(97)赋给x,但由于1.2是实型,因此结果97将被转换为实型后再赋给x。 表0-8 运算符优先级括号逻辑非 算术运算符关系运算符逻辑与逻辑或 条件运算符赋值运算符()!+、-、*、/、%、+、- -、=、 新建 - 项目”,或直接按下“Ctrl+Shift+N”组合键,弹出“创建新项目”对话框,选择“空项目”模板,点击“下一步”按钮,弹出如图0-5所示的“配置新建项目”对话框,填写项目名称,位置,勾选“将解决方案和项目放在同一目录中”复选框,点击“创建”按钮进入项目操作界面。图0-5 配置新项目对话框(2)添加源文件在“解决方案资源管理器”窗口中的“源文件”上单击鼠标右键,依次选择“添加 - 新建项” ,或直接按下“ Ctrl + shift + A” 组合键,弹出添加源文件对话框,如图0-6所示。选择“C+文件(.cpp)”,输入文件名“hello.c”,扩展名必须修改为 “.c”,点击“添加”按钮,就添加上了一个新的C语言源程序文件。图0-6 添加C语言源文件对话框 (3)编译单击“生成”菜单中的“编译”菜单项,或按“Ctrl+F7”组合键,可以完成源程序的编译过程。在源程序中,逐个修改“错误列表”标签页中显示的所有词法、语法错误后,编译成功,在“Debug”文件夹中生成“hello.obj”文件,这个文件是目标文件。在VS2019开发环境中,使用“scanf()”函数,会在生成解决方案时产生“C4996”错误,有三种解决方案。方法一:将源程序中所有“scanf()”函数替换成“scanf_s()”,即可避免出现该错误。方法二:在源程序的第一行添加“#pragma warning(disable:4996)”或“#define _CRT_SECURE_NO_WARNINGS”,也可以避免出现该错误。方法三:单击“项目”菜单中“属性”菜单项,出现“属性页”对话框,修改“C/C+-预处理器-预处理器定义”的值为:“_CRT_SECURE_NO_WARNINGS”字符串,也可以避免出现该错误,如图0-7所示。图0-7 预处理器定义对话框(4)链接依次选择“生成-仅用于项目-仅连接Demo”,或按“Ctrl+B”组合键,就完成了“hello.obj”链接工作,如果没有错误,在“Debug”文件夹中生成“ Demo.exe ”文件,这个文件就是可执行程序。(5)运行方法1:双击“Demo.exe”文件开始运行程序。方法2:点击“调试”菜单中的“开始执行”菜单项,或按“Ctrl+F5”组合键开始运行程序。方法3:点击工具栏中的“本地Windows调试器”按钮,或按 F5 功能键,一键完成编译、链接、运行三个动作。u单击“Dev-C +”命令,即可启动Dev-C +集成开发工具。u下面基于英文环境的Dev-C+,说明C语言应用程序的开发过程及工具的使用方法。 0.6 Dev-C+应用简介(1)编辑源程序依次点击“File-New-Source File”,或按“Ctrl+N”组合键,出现源程序文件编辑界面,输入程序代码。(2)保存源程序点击“File”菜单中的“Save”菜单项,或点击常用工具栏中 工具,或按“Ctrl+S”组合键,出现保存界面,如图0-8所示。选择保存类型为“c source files(*.c)”,输入文件名,选择保存位置,点击“保存”按钮完成C语言源程序的保存。图0-8 保存源文件对话框(3)预处理、编译、链接程序依次点击“Execute”菜单中的“Compile”菜单项,或按F9功能键,可以一次性完成源程序的预处理、编译和链接过程。如果源程序中存在词法、语法等错误,则编译过程失败,编译器将会在屏幕右下角的“Compile Log”标签页中显示错误信息,并且将源程序相应的错误行标成红色底色。“Compile Log”标签页中显示的错误信息是寻找错误原因的重要信息来源。排除了源程序中存在的词法、语法等错误后,编译成功,在源程序所在目录下出现一个与源程序同名扩展名为“exe”的文件,这个文件是可执行程序。(4)运行程序源程序编译成功后,点击“Execute”菜单中的“Run”菜单项,或按F10功能键即可运行程序。(5)打开源程序 点击“File”菜单中的“Open Project or File”菜单项,在弹出的对话框中指定文件所在的路径,选择要打开的源程序即可。边学边练边学边练编程实现在屏幕上显示如下两行文字: Hello,teacher! I am a student!编程实现两个整型数相加,并显示结果。 编一个程序,利用ASCII码值大写转小写。分析下列程序的输出结果,并与程序运行后的输出结果进行对照。 已知圆半径,圆柱高,求圆周长,圆柱体积。编写程序,读入两个字符数据给ch1、ch2,然后交换它们的值。 #include void main( )int y=6;printf(“%d ”,+y); /*先进行自增运算,再输出y */printf(“%d ”,-y); /*先进行自减运算,再输出y*/printf(“%d ”,y+); /*先输出y,再进行自增运算*/printf(“%d ”,y-); /*先输出y,再进行自减运算*/printf(“%d ”,-y+); /*-运算符的优先级高于自增自减运算符*/printf(“%dn”,-y-);输出结果7KK6KK6KK7KK-6KK-7找出下列程序的错误或警告,使其运行结果为:a=KKK3.00,b=KKK4.00,c=KKK5.00程序清单#include void main( ) float a=3,b=4,c; c=sqrt(a*a+b*b); printf(“a=%7.2f,b=%7.2f,c=%7.2f”,a,b,c);总结归纳总结归纳

    注意事项

    本文((高职)C语言程序设计程序设计基础ppt课件.pptx)为本站会员(春哥&#****71;)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开