传智播客C#基础笔记-苏坤
更新时间:2024-05-12 06:28:01 阅读量: 综合文库 文档下载
今天学习的第一句话:
Console.WriteLine(“你想显示的内容。”); 第二句话:
Console.ReadKey();
当程序执行到Console.ReadKey();时,程序会停到这里,等待用户从键盘上键入一个键,用户键入这个键之后,程序才会继续执行。
在C#中,每一句话都必须以“分号”结束 C#中的注释,什么是注释呢?对我程序进行的解释,注释是给人看的。
下面的一对指示可以折叠代码。 #region 内容
#endregion
MSIL:微软中间语言Microsoft Inter mediate Language
CLR:公共语言运行时Common Language Runtime
CLS公共语言规范 Common Language
Specification
CTS:通用类型系统Common Type System JIT:即时编译器Just In Time
第二天课程: 复习--
Console.WriteLine()
可以用CW加Tab键。这样就能直接打出Console.WriteLine();
变量1:
变量:变量代表着一块内存空间,我们可以通过变量名称向内存存\\取数据。有变量就不需要我们记忆复杂的内存地址。
向内存申请一块内存空间的语法: 数据类型 变量名;
整数在我们C#中的数据类型叫int
Int nuber;
Double:小数
Char:字符型 只能存储一个字符,并且存储的这个字符要求用单引号引起来
String 类型:字符串,就是把0个或1个或多个字符连接起来。字符串要求用双引号引起来。
Decimal 类型:用来表示钱和货币,失精度 不至于丢失。 注意:在C#开发环境中,直接写一个有小数点的数字,这个数字是double类型。
在一个小孩苏idan后面加个m\\M,就告诉编译器这是个decimal类型 应该写成:money = 100.34m;
变量的命名规则:
1. 必须以“字母”_或@符号开头、 2. 后面可以跟任意“字母”,数字,下划线。 注意: 1. 你起的变量名不要雨C#系统中的关键字重复。 2. 在C#中,大小写是敏感的。 3. 同一个变量名不允许重复定义(先这么认为,不严谨)。
? 定义变量时,变量名要有意义
? C#变量名编码规范---Camel命名法:
? 首个单词的首字母小写,其余单词的首字母大写。
? Pascal命名规范:每一个单词第一个字母都大写。
? 如果使用到英文单词的缩写,全部用大写。
在一个方法中,一般情况下变量只能定义一次(先这么认为),但可以多此赋值,再次赋值时,会把变量中原有的值给覆盖掉。
“+”在C#中有两种意义:
1. 在数学中的加法运算:两边参与加
法运算的数据类型为数字类型,则“+
“表示数学上的加法意义。
2. 是连接的意思:两边参与加号运算
的数据,有一个是字符类型,那么这个“+“好就是连接的意义。
在Console.WritLine(“”)中,第一个变量/ 字符串中可以使用占位符。
占位符有{数字}组成,数字有0开始编号
第1个占位符:{0} 第2个占位符:{1} 第3个占位符:{2} ………
Console.WriteLine();有多个参数时,输出都是第一个参数中的内容,从第二个参数开始都是用来替换第一个参数中的占位
符的值,所以从第二个参数开始,要不要输出,就要看第一个参数中有没有相关的占位符。
例如:Console.WriteLine(”{0}我叫”+name,”今年”+age+”岁了”); 输出结果是:今年28岁了我叫张三
再学习一句话,用于让用户从键盘上输入一句话。当程序执行到线面这句话,就会暂停,然后等待用户从键盘上输入一句,按回车程序将继续执行。如果想得到用户输入的的内容,就需要定义一个string类型的变量,写在下面这句话前面,接收用户输入的内容。 Console.ReadLine();
接收用户输入的内容,必须定义一个字符串来进行接收。
String input = Console.ReadLine();
转义字符: 什么时候用,当我们需要在字符串中输入
一些特殊字符时,比如:半角引号,换行,退格。就需要使用转义字符。
转义字符是一个字符,他由一个\\+一个字母来组成具有特殊意义的一个字符。
常用的转义字符: \\n换行
\\b backspace 退格
\\t tab键 由多个空格组成的一个字符,具有行与行之间的对齐功能。 \\\\表示一个\\ 在字符串前面加一个@符号有两种意义: 1. 字符串中如果有\\,则不再理解为转义符。
2. 使字符串可以换行
如果字符串前面加了@符号,在字符串上用2个双引号代表一个双引号。
C#中,有五个算术运算符:+-*/% 他们二元运算符。要求参与运算的两个操作数的类型必须相同,并且经过运算后的
结果也与操作数的类型相同。 在算术表达式中,如果要改变计算的优先级,用小括号。小括号可以无限制的套用,但一定要成对出现。
发生自动转换的条件:
1. 参与运算(算术运算和赋值运算)的操作数和结果类型必须一致。当不一致时,满足下面条件时,系统自动完成类型转换。
2. 两种类型兼容
3. 例如:int 和 double兼容
4. 目标类型大于源类型 5. 例如:double>int
自动转换中,转换是不会丢失进度的。 经常见到的就是,参与运算的两个操作数,一个是int ,一个是double,那么int类型会自动转换乘double
如果一个操作数为double型,则整个表达式的运算结果为double类型。 当需要丢失精度的转换(如果从double3.14到int 3的转换,会丢失0.14的精度)时,系统是不会帮我们自动转换的。需要我们程序员来写代码完成转换。
(数据类型名)待转换的值;
注意:下面的两种转换是错误的。因为强制类型转换要求待转换的类型和目标类型必须都为数字。
//string age = (int)Console.ReadLine; //int a = (int) “33”;
Int 变量 =Convert.ToInt32(待转字符串); 上面语句的意义:把待转字符串转换成int类型后赋给变量。
C#中的异常捕获如何完成: Try {
有可能出现错误的代码写在这里 } Catch {
出错后的处理 }
上面的程序如何执行:
如果try中的代码没有出错,则程序正常运行try中的内容后,不会执行catch中的内容。 如果try中的代码一旦出错,程序立即跳出catch中去执行代码,那么try的出错代码后面的代码不再执行。
一题:
try
{
Console.WriteLine(\请输入天数\);
int Day = Convert.ToInt32(Console.ReadLine()); int week = Day / 7; int day = Day % 7;
Console.WriteLine(\天是{1}周{2}天\, Day, week, day); } catch {
Console.WriteLine(\请按正确格式输入\); }
Console.ReadKey();
其他练习:
{ try {
string name = Console.ReadLine(); Console.WriteLine(\请输入语文成绩\);
int chinese = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(\请输入语文成绩\);
int math = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(\请输入语文成绩\);
int english = Convert.ToInt32(Console.ReadLine()); double sum = chinese + math + english;
double ave = (chinese + math + english) / 3.0;
Console.WriteLine(\的总分数为{1}平均数为{2}\, name, sum, ave); }
catch {
Console.WriteLine(\请按照正确的输入方式输入\); }
Age++ 自加一 有前加和后加 Age--自减一 有 前减和后减 例如:
Int age = 18 ;
Int sum = age ++ -10; 上面代码age 是后加。所以在进行语句运算时,age++取age原值参与运算,所以sum=8 Int age = 18 ;
Int sum = ++age -10;
上面age是前加,所以在进行语法运算时—++age取age加一后的新值参与运算,所以 sum=9 总之,不管是++age还是,进过运算后,agede 值都进行了+1运算。 Int age = 18 ;
Int sum = age ++ -10; 相当于: Int age =18;
Int sum = age -10
Console.ReadKey();
Age = age + 1
Int age = 18 ;
Int sum = ++age -10; 相当于: Int age = 18; Age = age + 1; Int sum = age -10;
在C#中,一般情况下,一元运算符++ --大于二元运算符+-。 复合运算符:
Age+=4 理解为在Age的原值的基础上加4;
在C#中,有 6个关系运算符,用于比较两个事物之间的关系。
< > == != >= <=
关于表达式:由关系运算符连接起来的式子。
关系表达式的运算结果bool类型,bool类型只有连个值,一个是true,一个是false. 如果关于运算表达式成立,则这个表达式的值为true,否则为false。
逻辑运算符: && || ! 逻辑与运算:
Bool isRight = 表达式1 && 表达式2
逻辑与连接的两个表达式,要能够求解成bool类型,一般情况都是关系表达式。 整个逻辑与运算的结束也是bool类型 表达式1 表达式2 逻辑与结果 True True True True false false false True False false false False
两个表达式全为true,逻辑与才为true
逻辑或(或者):
Bool isRight = 表达式1 || 表达式2
逻辑与连接的两个表达式,要能够求解成bool类型,一般情况都是关系表达式。 整个逻辑与运算的结束也是bool类型 表达式1 表达式2 逻辑或结果 True True True True false True false True True false false False 有一个表达式为true,逻辑或就为true
逻辑非: !(取反) 这是一个一元运算符。 用法: !(布尔类型的表达式) 作用:
如果布尔类型的表达式为true,加!号后,
其整个式子的结果为false。
如果:布尔类型的表达式为false,加!号后,其整个式子的结果为true。
Console.WriteLine(\张三请输入你的数学成绩\); double math = Convert.ToDouble(Console.ReadLine()); Console.WriteLine(\张三请输入你的语文成绩\);
double chinese = Convert.ToDouble(Console.ReadLine()); bool reasult = chinese >= 90 && math >= 90; Console.WriteLine(reasult);
Console.ReadKey();
Console.WriteLine(\请输入一个年份\);
int year = Convert.ToInt32(Console.ReadLine());
bool reasult = year % 400 == 0 || year % 4 == 0 && year % 100 != 0; Console.WriteLine(reasult);
Console.ReadKey();
逻辑与与逻辑或的短路问题: 例如: Int a = 10; Int b = 5;
(1)Bool result = ++a>5 && ++b>1; (2)Bool result = ++a>5 || ++b>1;
当逻辑与第一为假时第二个不再检查真假,直接输出false。第二个不再运算。 当逻辑或第一个为真时。第二个表达式不再检查真假。直接输出true。第二个数不再运算。
If结构的基本语法: If(条件) 1.语句; 执行过程:首先判断条件的结果,如果条件为true,则执行语句。如果条件为false,则跳过语句1.执行后面的语句。
注意:1.if后面的括号中的条件,要能计算成一个bool类型的值。
3. 默认情况下,if语句只能待一句话。
即和if语句有关系的语句,只有语句1.
执行过程:如果条件为false,那么将跳过if所带的语句块中的所有语句。 要求:我们在写程序时,哪怕if语句只带一句话,也要把他写在大括号中。 If-else结构 语法: If(条件) {语句1;} Else
{语句2;} 执行过程:
如果条件为true,则执行if带的语句块1,并且跳过else带的语句块2.
如果条件为false,则 跳过if带的语句块1,执行else带的语句块2.
上面两个语句块,根据条件结束为true或false,总要执行一个。
练习三:
Console.WriteLine(\请输入a的值\);
int a = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(\请输入b的值\);
int b = Convert.ToInt32(Console.ReadLine()); if ((a % b == 0) || (a + b > 100)) {
Console.WriteLine(\, a); } else {
Console.WriteLine(\, b); }
Console.ReadKey();
Console.WriteLine(\请输入您的成绩\);
int score = Convert.ToInt32(Console.ReadLine()); if (score >= 90) {
Console.WriteLine(\您的成绩为A\) ;
}
else if (score < 90 && score >= 80) {
Console.WriteLine(\您的成绩为B\); }
else if (score < 80 && score >= 70)
{
Console.WriteLine(\您的成绩为C\); }
else if (score < 70 && score >= 60) {
Console.WriteLine(\您的成绩为D\); } else {
Console.WriteLine(\您的成绩为E\); }
在if-else if语句中。只有当上一个条件不成立时,才会进入下一个if语句并进行if语句后面的条件判断。一旦有一个if后面的条件为true,则执行if所带的语句(块),语句(块)执行完成后,程序跳出if-else if结构。如果所有的if条件都不成立,则如果最后有else则执行else所带的语句,否则什么都不执行。 注意:
代码自动排版对齐快捷键: Ctrl +k +f
Else 离它最近的if是一对
Console.ReadKey();
练习一:
Console.WriteLine(\请输入密码\); string passWord = Console.ReadLine(); if (passWord == \) {
Console.WriteLine(\密码输入正确\); } else {
Console.WriteLine(\密码错误请重新输入\); }
Console.ReadKey();
练习2:
Console.WriteLine(\请输入用户名\); string userName = Console.ReadLine(); Console.WriteLine(\请输入密码\); string passWord = Console.ReadLine(); if (userName == \) {
if (passWord == \) {
Console.WriteLine(\输入正确可以登陆\);
} else {
Console.WriteLine(\密码错误请重新登陆\); } } else {
Console.WriteLine(\用户名不存在请重新登陆\); }
Console.ReadKey(); 练习三:
Console.WriteLine(\请输入您的年龄\);
int age = Convert.ToInt32(Console.ReadLine()); if (age >= 18) {
Console.WriteLine(\可以观看该电影\); }
else if (age >= 10) {
Console.WriteLine(\用户是否继续观看(yes,no)\); string isRight = Console.ReadLine(); if (isRight == \) {
Console.WriteLine(\请观看\); }
if(isRight==\) {
Console.WriteLine(\退出观看\); } } else {
Console.WriteLine(\未到年龄退出观看\); }
Console.ReadKey();
Switch-case 语句: 语法:
Switch(表达式)
{
Case 值1:语句块1; Break;
Case 值2:语句块2; Break;
Default:语句块3; Break; }
执行过程:首先计算表达式,然后根据计算结果与匹配case后面的值,如果有匹配项,则执行匹配项后面的语句,知道break语句跳出switch-case。如果所有的case值都不匹配,那么有default则执行default后面的语句,知道break结束。如果没有default,则跳出switch-case,什么都不执行。 注意:
匹配时和default的位置没有关系,只和值有关系。 练习:
{
Console.WriteLine(\请输入工资评定(A-E)\); string imput = Console.ReadLine(); decimal gongzi = 5000m; bool flage = false; switch (imput) {
case \: gongzi += 500; break;
case \: gongzi += 200; break; case \: break;
case \: gongzi -= 200; break;
case \: gongzi -= 500; break;
default: Console.WriteLine(\您输入不在此范围内,请重新输入\); flage = true; break; }
if (flage == false) {
Console.WriteLine(\您的实际工资为:{0}元\, gongzi); Console.ReadKey(); }
If-else if与switch的比较
相同点:都可以实现多分枝结构
不同点:switch:一般只能用于等值比
Console.ReadKey();
较
If-else if:可以处理范围
三:
Console.WriteLine(\请输入年份\);
int year = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(\请输入月份\);
int mouth = Convert.ToInt32(Console.ReadLine());
if ((year / 400 == 0) || ((year / 4 == 0) && (year / 100 != 0))) {
switch (mouth) {
case 2: Console.WriteLine(\该年该月有29天\); break;
case 4: Console.WriteLine(\该年该月有30天\); break;
case 6: Console.WriteLine(\该年该月有30天\); break;
case 9: Console.WriteLine(\该年该月有30天\); break;
case 11: Console.WriteLine(\该年该月有30天\); break;
default: Console.WriteLine(\改年该月有31\); break;
}
} else {
switch (mouth) {
case 2: Console.WriteLine(\该年该月有28天\); break;
case 4: Console.WriteLine(\该年该月有30天\); break;
case 6: Console.WriteLine(\该年该月有30天\); break;
case 9: Console.WriteLine(\该年该月有30天\); break;
case 11: Console.WriteLine(\该年该月有30天\); break;
default: Console.WriteLine(\改年该月有31\); break; }
Console.ReadKey(); 四:
Console.WriteLine(\请输入你的成绩\);
int input = Convert.ToInt32(Console.ReadLine()); int mod = input/10; switch(mod) {
case 9:Console.WriteLine(\你的综合评定为A\); break;
case 8:Console.WriteLine(\你的综合评定为B\); break;
case 7:Console.WriteLine(\你的综合评定为C\); break;
case 6:Console.WriteLine(\你的综合评定为D\); break;
default:Console.WriteLine(\你的综合评定为E\); break; }
Console.ReadKey();
While 循环的语法: While(条件) //循环体 {
要循环执行的N条程序; //循环体 }
执行过程:
先判断循环条件,如果条件为true,则转向2;如果条件为false,则转向3。
Console.WriteLine(\这道题你会做吗?输入(yes/no)\); string imput = Console.ReadLine(); int i = 0;
if (imput == \) {
while (i < 10) {
Console.WriteLine(\这道题你会做吗?输入(yes/no)\);
imput = Console.ReadLine(); i++; }
}
if (imput == \ || i == 10) {
}
Console.WriteLine(\你可以放学\);
Console.ReadKey();
最后一道:
int year = 2006; double number = 80000; int i = 0;
while(number<200000) {
number = number * (1 + 0.25); i++; }
Console.WriteLine(\到{0}年学员人数将到达20万\,year+i);
Console.ReadKey();
语法: Do
{循环体;} While(条件); 执行过程:
1执行循环体,执行完循环转向2 2判断条件是否成立,如果条件为true,则转向1。如果条件为false,
则转向3.
3跳出循环,循环结束。
假如循环条件一开始就不成立,对于while循环,一次都不会执行。对于do-while的循环体一般至少会被执行一次。
While 先判断,后执行。 Do-while 先执行,后判断。
练习一:
int i = 1; int sum = 0; while (i < 101) {
sum += i; i++; }
Console.WriteLine(sum);
Console.ReadKey();
练习2:
//string useName;
//string passWord; //do
//{
// Console.WriteLine(\请输入用户名:\ // useName = Console.ReadLine(); // Console.WriteLine(\请输入密码:\ // passWord = Console.ReadLine();
// Console.WriteLine(\用户名或密码错误,请重新输入\ //}
//while (useName != \ //Console.WriteLine(\登陆成功\ //Console.ReadKey();
练习3:
int number;
string imput = \; do { try {
Console.WriteLine(\请输入一个数字\);
number = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(2 * number); } catch {
imput = Console.ReadLine(); }
} while (imput != \); Console.WriteLine(\结束\);
Console.ReadKey();
For 循环: 语法:
For(表达式1;表达式2;表达式3;{
循环体;
)
}
For循环,一般用于已知循环次数的循环。 一般情况:
表达式1:用于定义循环变量和对循环变量赋初值。
表达式2:循环条件
表达式3:用于改变循环变量的值。 执行过程:
第一步:计算表达式1,转向第二部 第二步:计算表达2(循环条件),如果表达式2的值为true转向第3部。如果表达式2的值为false,转向第5步. 第三步:执行循环体,转向第4步。 第四步:执行表达式3.转向第4步。 第五步:循环结束。
练习:
水仙花数是一个三位数,设cba. A*a*a+b*b*b+c*c*c =cba
例如:153=1*1*1+5*5*5+3*3*3 问题2:
int number = 0; int ge, shi, bai; bai = number / 100; shi = (number % 100) / 10; ge = (number % 100) % 10;
for (number = 100; number >= 100 && number <= 999; number++) {
bai = number / 100; shi = (number % 100) / 10; ge = (number % 100) % 10;
if (number == ge * ge * ge + shi * shi * shi + bai * bai * bai) {
Console.WriteLine(number); } }
Console.ReadKey();
问题3:
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
Console.Write(\,j,i,i*j); }
Console.WriteLine(); }
Console.ReadKey();
练习一:
int age = 0;
int sum = 0; int i = 0;
bool flage = false; for (i = 0; i < 5; i++) { try {
Console.WriteLine(\请输入学生{0}的年龄\, i + 1); age = Convert.ToInt32(Console.ReadLine());
if (age < 1 || age >100) {
Console.WriteLine(\你输入的年龄不合法\); flage = true; break; }
sum += age; } catch {
Console.WriteLine(\你输入的不是一个数字\); flage = true; break;
} }
if (flage == false) {
Console.WriteLine(\这几个人的平均年龄为{0}\, sum / i); }
Console.ReadKey(); 练习3
int i = 0; int sum = 0;
for (i = 1; i <= 100;i++ ) {
sum += i; if(sum >20) { break; }
}
Console.WriteLine(i);
Console.ReadKey();
Break:
1) 可以用于switch-case判断中,用于
跳出switch 2) 用在循环中,用于立即跳出(终止)
循环。
注意:用于循环中时,跳出的是break所在的循环。
Continue:
用于循环中,程序一旦执行到continue语句,立即结束本次循环(就是不再执行循环体中continue下面的语句了),直接进行下一次循环。(do-while/while直接进行下一次
循环条件的判断,如果条件成立,则再次进入循环。对于for循环,先执行表达式3,再判断循环条件是否成功!)
int i = 1; int sum = 0; while(i <= 100) { i++;
if (i % 7 != 0) {
sum += i; } }
Console.WriteLine(sum); Console.ReadKey();
三元表达式:
表1?表2:表3: 执行过程:首先计算表达式1,表达式1 应该是一个能够计算成bool类型的值,如果表1的值为true,则表达式2的值作为整个表达式的值,如果表1的值为false,则表达式3的值作为整个表达式的值。
表达式2 和表达式3 的类型一定要相同
(相兼容)。 例如:a>b? a:b;
常量: 语法:
Const 类型 常量名 = 常量值
在定义时赋值,在其他地方不允许赋值。
枚举:
让我们定义一种枚举类型并且在定义这种类型时我们要指定这个类型的所有值。 语法:
Enum 自己起的类型名称 {
值1,值2,值3。。。。值N }
枚举的定义,一般和类定义在同一个级别。这样,在同一个命名空间下的所有的所有的类就都可以使用这个枚举了。(在方法中也可以,在类中也可以。) 枚举的作用:
1) 限制用户不能随意赋值,只能在定
义枚举时例举的值中选择。 2) 不需要死记没一个值是什么,只需
要选择相应的值。
注意:定义枚举时,值不能为int 类型。 枚举类型的变量都可以强制转换成一个int类型。
枚举的值在定义时是有一个默认编号的,编号从0开始。
如何把一个字符串转换成枚举类型: (自枚)(Enum.Parse(typeof(自枚),“待转换的字符串”) );
为什么要用结构:
1) 比如我们上课讲的为了存储一个人的信息,要声明一组变量。当我们要存储N个人的信息时,就要声明N组变量,麻烦。
2) 存储一个人信息的这几个变量间没有关系,容易记乱。
正在阅读:
传智播客C#基础笔记-苏坤05-12
工厂供电课程设计报告 - 全厂总配变电所及配电系统设计04-10
分析化学试题及答案10-25
西北油田分公司井控实施细则第2部分:井下作业(定稿)09-06
关于生命的作文500字02-05
新年联欢会作文500字07-06
高中必背课文04-17
(河南专版)2018年秋九年级化学下册 第九单元 溶液 实验活动5 一定溶质质量分数的氯化钠溶液的配制习题 (09-03
考研英语应该准备的复习资料05-25
采购质检化验流程05-18
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- C#
- 基础
- 笔记
- 苏坤
- 八里店镇镇域总体规划 - 图文
- 染料脱色菌的筛选及脱色特性研究 - 图文
- 我国会计信息化发展历程、现状及趋势的研究报告书
- 八斗丘车行天桥专项施工方案(旋挖桩、现浇箱梁)
- 《四川省城乡环境综合治理条例》问卷参考答案
- 会计信息系统下内部会计控制研究
- 4.7财务管理程序
- 关于以家庭为单位征收个人所得税问题之分析
- 工字钢卸料平台施工方案
- 兰州大学流行病习题册
- 西城区2011初三二模物理试题 - 图文
- 社会学概论
- 2010最新教育法律法规试题及答案4
- 房屋建筑和市政基础设施工程检测项目一览表和工程量计算规则 -
- 古代汉语教案
- (苏教版)高一语文(必修三)复习整理资料
- ICC色彩管理标准
- 小学四年级下学期典型应用题
- 生理学题库
- 人员测评复习资料完整版