杨中科 C#NET 基础上课笔记Word文件下载.docx
- 文档编号:16258065
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:40
- 大小:37.21KB
杨中科 C#NET 基础上课笔记Word文件下载.docx
《杨中科 C#NET 基础上课笔记Word文件下载.docx》由会员分享,可在线阅读,更多相关《杨中科 C#NET 基础上课笔记Word文件下载.docx(40页珍藏版)》请在冰豆网上搜索。
?
创建第一个控制台程序并且调试运行。
为什么要从控制台程序开始?
不要把精力放到表现
层,而是把精力放到写代码上。
无论控制台还是
Winform还是ASP.Net最难的是写代码,而不是拖控
件。
唯一需要学的三条控制台指令:
Console.WriteLine
:
打印输出、Console.ReadLine:
从控制台读入一
行、Console.ReadKey:
控制台暂停。
至于
Console.是什么意思不用管。
1+1=2的例子
占位符是个什么玩意儿?
{0}的个数必须和参数的个
数一样,是一一对应的关系。
VS开发环境介绍
解决方案管理器:
解决方案、工程、文件
C#源文件一般以cs结尾
C#程序的入口是Main函数,在Main中写代码
就行,暂时不用关心其他部分是什么意思
错误列表。
见到编译错误不用慌。
错误排除演
示。
常见错误:
结尾没有分号,大小写错误。
显示代码行号。
工具→选项→文本编辑器
→C#→显示→行号
C#语法
从上到下一条条的依次执行。
大小写敏感
函数参数用()包围
两句代码之间用分号(;
)分割(易错:
全角问题)
注释:
单行注释、多行注释。
变量
把变量看成放数据的容器。
定义变量的方式:
类型变量名;
inti3;
变量的类型:
不同类型的容器放不同的东西,铁罐不能放
硫酸。
不能在int类型的变量中放字符串。
变量不能放和变量类型不兼容的数据。
变量的名字不能重名(不严格)
问题
inti=10;
Console.WriteLine("
i"
);
常用基本数据类型
string、int、char、bool、decimal(了解)、byte(了解)、double(了解)、
long(了解)、float(了解)等。
bool的取值:
true、false。
为什么输出"
要用转义符"
\"
"
,因为编译器默认是遇到"
开始字符串,再遇到"
是结束字符
串,但是如果遇到前面有\的"
就不把它当成有字符串起始意义的"
。
string:
ab\"
、"
ab\nb"
c:
\\a.txt"
、@"
\a.txt"
(推荐)。
@表示字符串中的\不当
成转义符
@不是万能的,不能解决字符串中有双引号的问题,如果有双引号还是用转义符
‘a’是char,"
a"
是string
strings=Console.ReadLine();
问题:
Stringstr=Console.ReadLine();
Console.WriteLine(str);
用户输入a\nb,输出什么?
转义符只针对在代码中直接写出的字符串,对于程序
中读取出来没有这个问题。
简单的类型转换:
Convert.ToString()、ToString()、Convert.ToInt32()。
输入一个数,打印这个数的平方。
补充
问题:
int
i=Convert.ToInt32(Console.ReadLine())
strings1=Console.ReadLine();
inti=Convert.ToInt32(s1);
@可以表示多行字符串。
变量的命名
命名规则:
第一个字符必须是字母或者下划线(_),其后的字
符可以是任意个数字、字母、下划线。
不能全部使用C#的关键
字,比如class、namespace、new、void等。
判断方式:
VS中
亮蓝色的就是关键字。
这也是类、函数等的命名规则。
中文变量名(类名、函数名)。
C#中建议变量的开头用小写。
下列哪个是正确的变量名?
_a、a、a1、a_a、1_a、a1、1a、
a3_、a$b、int、int1、ab、A1、INT。
变量的声明:
inti;
intx,y;
inti=3;
运算符、表达式
+、-、*(乘)、/(除)、%(求余)
+可以用作字符串连接,其他不可以。
将string
和其他类型+,会自动tostring();
易错:
strings1="
hello"
+yang;
++(自增)、--(自减)
(*)运算符优先级:
i1+i2*i3、(i1+i2)*i3。
不要
变态,括号是王道。
内层的()先计算。
变量可以和字面量混合运算。
案例:
让用户输入两个数,打印出两个数的和。
赋值
赋值运算符=,让左边变量的值等于右边的计算结果。
这就能解
释令人不解的i=i+1;
(*)+=、-=、*=、/=。
i2=i1++;
i2=++i1;
(了解)。
--同理。
习题:
inta=10;
a++;
a=a+a;
{0}"
a);
执行结果
是什么?
易错:
intj=i;
i=5;
j=?
intx=10;
x+y=80;
Console.WriteLine(y);
x+y=80;
//左
边的必须是变量!
!
不能是常量,不能
是表达式
交换两个变量的值
布尔运算
相等判断:
==,不要和=混淆。
WriteLine("
i==1);
i=1);
的区别。
//C#中赋值表达式也有值,它的
值表示为赋值后变量的值
不等判断:
!
=
大小比较:
<
、>
、<
=、>
取反:
组合运算:
&
(并且)、||(或者)。
&
并且:
只有两边都为true的时候,表达式的值才为true,否则是
false;
||或者:
两边只要有一个为true的时候,表达式的值就是true,否则
是false;
if
if(i>
1)
{
}
else
100)
elseif(i<
10)
单句的时候大括号可以省略,但是不建议省
略,演示说明why
if语句的嵌套
100||i<
100&
j>
if((i>
0&
0)||(i<
j<
0))
易错代码:
10);
Console.WriteLine("
是"
课上练习
学编程不是看书,不是听老师讲,而是自己动手写。
作业1:
提示用户输入密码,如果密码是“888888”则提示正确,否则提示错误。
作业2:
提示用户输入密码,如果密码是“888888”则提示正确,否则要求再输入
一次,如果密码是“888888”则提示正确,否则提示错误。
作业3:
提示用户输入用户名,然后再提示输入密码,如果用户名是“admin”并且
密码是“888888”,则提示正确,否则提示错误,如果用户名不是admin还提示用
户用户名不存在。
作业4:
提示用户输入年龄,如果大于等于18,则告知用户可以查看,如果小于
10岁,则告知不允许查看,如果大于等于10岁,则提示用户是否继续查看(yes
、no),如果输入的是yes则提示用户可以查看,否则提示不可以查看。
(测试
边界条件,-1,8888888888888888888888888,aaaa。
微软如狼似虎的Tester)
作业5:
依次提示用户输入两个整数(假设i1、i2)。
如果i1、i2都是正数,则将
i1的值递增一个数,然后打印i1+i2的值;
如果i1、i2都是负数,则将i1的值递减
10个数,然后打印i1*i2的值;
如果i1、i2中任一个为0,则提示数据有错误;
否则
计算i1*i2的绝对值。
注意:
变量命名要用有意义的变量名。
switchcase
类似于if...else...elseif...else,但是是离散值的判断。
switch一般都可以用if重写,但是if不一定能用switch重写
不要忘了break。
C#中的break不写是不行的,除了合并case的情况
switch(i)
case1:
//
break;
case2:
default:
case中的值必须
是常量,不能是
变量、表达式。
casea:
被判定的值进入满
足条件的分支执行
while循环
while(i<
//打印i
i++;
只要while后小括号中的表达式为true,就不断执行
大括号中的代码
while(不是终点)
跑
do
先做……如果满足则再来一次,直至while表
达式为false。
至少被执行一次。
(*)
练习1:
用while计算1到100之间整数的和;
(有更好的数学解法)
练习2:
要求用户输入用户名和密码,只要不是admin、888888就一直提示要求重新输入。
练习3:
不断要求用户输入一个数字,然后打印这个数字的二倍,当用户输入q的时候程序退
出(return)。
练习4:
不断要求用户输入一个数字(假定用户输入的都是正整数),当用户输入end的时候
显示刚才输入的数字中的最大值。
设一个变量intmax,初始值为0,用户每输入一次就把用
户输入的和max比较一下,如果输入的比max大,则让max等于用户输入。
(1)strings=Console.ReadLine(),读取s的时候并不会再次要求输入;
(2)
while(Console.ReadLine()!
="
q"
)
循环的中断
break:
立即终止整个循环。
continue:
立即终止当前循环步骤,进行下一次循环步骤。
练习1:
用whilecontinue实现计算1到100之间的除了能被7整除
之外所有整数的和。
练习2:
用whilebreak实现要求用户输入用户名和密码,只要不
是admin、888888就一直提示要求重新输入。
练习3:
编写聊天机器人,如果问“今天天气怎么样?
”则回答天气
,如果问……,如果说“88”,则“再见”。
for循环
for(code1;
code2;
code3)。
code1:
循环的初始化代码,只在循环开始之前运行一
次;
code2,bool类型的表达式,每次循环完前都判断一下是否为true,只有为
true才会进行本次循环;
code3在每次循环之后执行一次。
各段之间用回车换行
,设置断点查看执行过程。
for的三段都可以省略,但是不能丢了“;
”。
break、continue同样可以应用于for。
for和while代码之间都可以互相转换,究竟用哪种方式则取决于一些惯用用法和
个人习惯,不用记,代码写多了自然就有感觉
for(inti=0;
i<
10;
i++)
for(inti=100;
i>
0;
i--)
如果是遍历数组,遍历1..100推荐直接在第一段中声明变量。
for中终止条件注意是<
还是<
用for实现计算1到100之间所有整数的和。
用for实现计算200到300之
间所有整数的和。
类型转换Cast(*)
把源类型赋值给目标类型,两个类型不一致的时候会发生类型转换。
a=b,b是源
,a是目标
隐式转换、显式转换。
当目标类型一定能满足源类型转换过去后的要求的话就是
隐式转换;
如果当目标类型不一定能满足源类型转换过去后的要求的话就需要显
式转换(程序员自己负责)。
把中国人转换为人是隐式转换,把人转换为中国人则是显式转换(强制转换)
内存中的数据没有变化,只是不同的视角而已。
int、byte的表示范围:
int.MaxValue、int.MinValue。
byteb=1;
inti=1;
i=b;
b=(byte)i;
为什么要显式转换?
编译器不能保证一定正确,转换结果自己负责。
要人、给一
个中国人当前没问题,但是要中国人、给一个人则可能有问题,编译器不承担这
个责任,由开发人员来保证。
只有在内存存储上存在交集的类型之间才能进行Cast,否则则不可以,比如不可
以inti;
strings=(string)i;
反之也不可以。
这种情况必须用Convert类提供的方法。
类型转换Convert
Convert不再是内存级别的转换,而是考
虑数据意义的转换。
可以把姓名Convert
成人。
Convert是一个加工、改造的过程
Convert.ToInt32、Convert.ToString、
每种类型都还有ToString方法(类型的
ToString和Convert.ToString略微的差别
暂时不用关心)
枚举
确定数量、确定值的几个取值:
东西南北、男女、上中下。
enumGender{male,female}
enumQQStatus{online,offline,hidden}
为什么有枚举,如果用string来表示四季:
//1、需要在每个地方都进行数据合法性的校验
//2、给函数传递参数的时候,只有看文档才只能哪些值合法
枚举的用法,QQStatusstatus=QQStatus.online;
和用字符串比起来,用枚举的好处就是限定了变量的取值范围,程
序处理起来更方便。
为什么不能:
QQStatusstatus=online;
数组
保存多个值。
任意类型都可以声明数组。
int[]nums={5,3,8}int[]nums=newint[3]
int[]nums=newint[3]{5,3,8}//个数和声明个数必须一致
int[]nums=newint[5]{5,3,8}//错误
使用索引器访问指定编号位置的元素,访问数组元素:
nums[0]、nums[1]。
索引从0开始。
取到的元
素的类型就是数组元素的类型。
还可以对数组元素进行赋值
数组的长度一旦声明就无法改变
从一个整数数组中取出最大的整数
将一个字符串数组输出为|分割的形式,比如“小月月|大月月|老月月”
将两个int类型数组连接为一个string类型数组。
计算一个整数数组的所有元素的和。
练习5:
有一个整数数组,请声明一个字符串数组,将整数数组中的每一个元素的值转
换为字符串保存到字符串数组中。
string[]strs=newstring[values.Length];
练习6:
将一个字符串数组的元素的顺序进行反转。
{"
3"
"
8"
haha"
}
}。
第i个和第length-i-1个进行交换。
练习7:
将一个int数组向左滚动平移1次。
{3,5,8,7}→{5,8,7,3}
数组2
foreach循环
string[]names={"
tom"
jerry"
lily"
};
foreach(stringnameinnames)
我的名字{0}"
name);
和for的区别:
for可以不逐个遍历,比如每隔一个遍历一个,或者可
以从后向前遍历
只能(只应该)在foreach对集合进行读,而不应该写。
函数
函数就是将一堆代码进行重用的一种机制。
函数就是一段代码,
这段代码可能有输入的值(参数),可能会返回值。
一个函数就
像一个专门做这件事的人,我们调用它来做一些事情,它可能需
要我们提供一些数据给它,它执行完成后可能会有一些执行结果
给我们。
要求的数据就叫参数,返回的执行结果就是返回值。
Console.ReadLine就是一个有返回结果的函数;
)就是一个有执行参数的函数,只有告
诉WriteLine被打印的数据它才知道如何打印;
inti=
Convert.ToInt32("
22"
)则是一个既有参数又有返回值的函数。
有了函数写代码就像拼积木,C#中的各种各样的技术其实就是
通过for、if等这些基础的语法将不同的函数按照一定的逻辑组织
起来。
自己写函数
1读取输入的整数,定义成函数,多次调用
staticintReadInt()
Strings=Console.ReadLine();
returnConvert.ToInt32(s);
写程序测试,程序调用到函数的时候是进入函数内部执行的,执行完毕再继续向下执行。
2、函数如果没有返回值则标记返回值类型为void
3、return语句
导致函数立即返回。
在返回值为void的函数中return,在返回值非void的函数中"
return数值"
return不是结束程序,只是结束当前函数,控制台程序中Environment.Exit(0)退出程序。
函数返回值易错点
一个函数如果“答应”返回一个非void类型的值
,则函数的所有路径都要有返回值。
比如
将对输入年龄转换为年龄段描述的函数。
函数参数
计算两个整数中的最大值:
intMax(inti1,inti2)
计算输入数组的和:
intSum(int[]values)
确定函数参数的原则:
自己能确定的数据自己内部解决,自己确
定不了的数据通过参数传递。
练习:
string[]strs={"
aa"
333"
ccc"
返回给我一个字符串,然后字符串使用我指定的分隔符来进行分
割,比如我指定用"
|"
分割,那么返回给我"
aa|333|ccc"
stringJoin(string[]strs,stringseperator)
函数名开头大写,参数名开头小写,参数名、变量名要有
意义
可变参数
参数数组:
intsum(paramsint[]values)
intsum(stringname,paramsint[]values)
可变参数数组必须是最后一个
参数默认值(.Net4.0):
void
SayHello(stringname,intage=20)(*了解)
函数重载(函数重名)
函数的重名:
错误
staticvoidSayHello(stringname)
我是{0}"
Iam{0}"
staticvoidSayHello(intage)
我的年龄{0}"
age);
staticvoidSayHello(stringname)错误
staticintSayHello(stringname)
return10;
staticvoidSayHello(stringname,stringnickname)
我是{0},昵称是
{1}"
name,nickname);
构成重载的条件:
参数类型不同或者参数个数不同(不严谨
的),与返回值无关。
字符串的处理
C#中单个字符用单引号包含就是char类型,('
a'
),单引号中放
且只能放一个字符。
单个字符也可以表示为字符串,还可以有长度为0的字符串
使用s.Length属性来获得字符串中的字符个数
string可以看做是char的只读数组。
charc=s[1];
例子:
遍历输
出string中的每个元素。
C#中字符串有一个重要的特性:
不可变性,字符串一旦声明就
不再可以改变。
所以只能通过索引来读
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 杨中科 C#NET 基础上课笔记 NET 基础 上课 笔记