一、基础知识
1. 程序语言是什么
用于人和计算机进行交流,通过程序语言让计算机能够响应我们发出的指令
2. 开发环境
IDE,集成开发环境。它就是一类用于程序开发的软件,这一类软件一般包括了代码编辑、编译器、调试器、图形用户界面等等工具,只要安装的这种软件我们就可以进行程序开发了。
它的主要作用简单讲就是让计算机能识别你写的程序代码,能够响应你输入的代码命令,听从你的指令和你进行交流。
二、第一个应用程序
1. VS窗口基本介绍
右侧解决方案资源管理器,显示文件夹结构。cs结尾为脚本文件
上方为菜单栏,常用为保存、全部保存、调试、运行(不调试)、注释、取消注释
2. 注释
注释就是对代码的解释和说明,其目的是让人们能够更加轻松的了解代码,注释内容不会被程序识别,只起到说明作用。快捷键Ctrl+E、C注释,快捷键Ctrl+E、U取消注释。
注释的三种方式:
- 两杠注释:用于注释一行信息
- 星号注释:用于注释多行信息
- 三杠注释:用于注释类、命名空间、方法等等
3. 认识程序文件的基本结构
程序写在语句块中。被大括号包裹的部分称为语句块,不同语句块中书写的代码规则不一样。
大致分为命名空间代码块、类代码块、方法代码块。
程序语句固定写法:完成一句命令书写后,用英文分号结束。语句中的标点符号用英文符号
4. 控制台输入打印基础语句
Console.WriteLine("Hello World"); //在控制台打印一行信息 打印信息结束后,自动空一行
Consle.write("Hello World"); //在控制台打印信息,结束后不空行
Console.ReadLine(); //检测输入的代码
Consle.ReadKey(); //检测按键
char c=Console.ReadKey().KeyChar;
三、变量
1. 折叠代码
主要作用是让我们编程时逻辑更加清晰
#region
#endregion
2. 如何申明变量
变量:可以变化的容器,变量就是用来存储各种不同类型数值的一个容器,不同变量类型可以存储不同类型的值
**语法:**变量类型 变量名 = 初始值;
**语法:**变量类型 变量名 = 初始值, 变量名 = 初始值, 变量名 = 初始值...;
3. 变量类型
- 有符号的整形变量:是能存储一定范围正负数,包括零的变量类型,sbyte、int、short、long
- 无符号的整形变量:是能存储一定范围正数和零的变量类型,byte、uint、ushort、ulong
- 浮点数(小数):float存储7/8位有效数字,根据编译器不同,有效数字也可能不一样,抛弃的数字会四舍五入;double存储15~17位有效数字,抛弃的数字会四舍五入;decimal存储27~28位有效数字
- 特殊类型:bool表示真假;char是用来存储单个字符的变量类型;string是字符串类型,用来存储多个字符,没有上限
4. 变量大小
sizeof(变量类型)可以得到该变量类型所占空间大小(单位字节)
C#中char占两个字节,bool占一个字节。sizeof不能得出string类型所占空间大小
5. 变量命名规范
必须遵守的规则:
- 不能重名
- 不能以数字开头
- 不能使用程序关键字命名
- 不能有特殊符号(下划线除外)
建议的命名规则:变量名要有含义,用英文(拼音)表示变量的作用。非常不建议的命名规则,用汉字命名
常用命名规则:
驼峰命名法,第一个单词的首字母小写之后,单词首字母大写(变量)
帕斯卡命名法,所有单词首字母都大写(类、方法)
四、常量
1. 基础语法
**语法:**const 变量类型 变量名 = 初始值;
2. 常量特点
- 必须初始化
- 不能被修改
作用:申明一些常用不变的变量
五、转义字符
1. 转义字符的使用
什么是转移字符?它是字符串的一部分,用来转变原符号意思
| 转义字符 | 释义 |
| \? | 书写连续多个问号的时候使用,防止被解析成三字母词 |
| \' | 用于表示字符常量' |
| \" | 用于表示字符常量" |
| \\ | 用于表示一个反斜杠,防止被解释成一个转义序列符 |
| \a | a警告字符,蜂鸣 |
| \b | 退格符 |
| \f | 进纸符 |
| \n | 换行 |
| \r | 回车 |
| \t | 水平制表符 |
| \v | 垂直制表符 |
\0 | 空字符 |
---|
2. 取消转义字符
**语法:**在声明字符串的前面加@符号:string str=@"aaaaaa\aaa";
六、类型转换
1. 隐式转换
隐式转换的基本规则:不同类型之间自动转换,大范围装小范围
相同大类:
long->int->short->sbyte
ulong->uint->ushort->byte
double->float(decimal不能隐式转换)
不同大类:
double->float->整数(有符号和无符号)->char
decimal->整数(有符号和无符号)->char
string和bool不参与隐式转换
有符号的变量是不能够隐式转换成无符号的
有符号的变量能够装无符号的变量,但前提是无符号的变量范围必须全部都在有符号的变量范围内
浮点数是可以装载任何类型的整数(decimal也可以装载任意整型),但整数不能够装载浮点数
char能够隐式转换为部分整型和浮点数,是因为char类型是一个16位无符号整数,以ASCII码值的形式转换
long l = 1;
int i = 1;
short s = 1;
sbyte b = 1;
//隐式转换
l = i;
2. 显式转换
括号强转主要是数值之间的转换,Parse主要是string转为数值,Convert主要是更准确的将各个类型之间进行相互转换
2.1 括号强转
作用:一般情况下,将高精度的类型强制转换为低精度
**语法:**变量类型 变量名 = (变量类型)变量;
注意: 转换的时候要注意精度问题 和范围问题
括号强转可能会出现范围问题,造成异常
bool和string不能通过括号的方式强转
2.2 Parse法
作用:把字符串类型转换为对应的类型
**语法:**变量类型.Parse("字符串")
**注意:**字符串必须能够转换成对应类型,否则会报错;转换后的值必须是在该类型的范围内,否则报错
2.3 Convert法
作用:更准确的将各个类型之间进行相互转换,会四舍五入
语法:Convert.To目标类型(变量或常量)
注意:填写的变量或常量必须正确,否则出错
Convert.ToInt32()和Int.Parse()对于空值(null)的处理不同,Convert.ToInt32(null)会返回0而不会产生任何异常,但Int.Parse(null)则会产生异常。
2.4 其他类型转string
- 拼接打印
- 变量或常量.ToString();
七、异常捕获
通过对异常捕获的学习,可以避免当前代码报错时,造成程序卡死的情况
1. 基本语法
//必备部分
try
{
//希望进行异常捕获的代码块
//放到 try 中
//如果 try 中的代码报错了,不会让程序卡死
}
catch
{
//如果出错了,会进入执行 catch 中的代码来捕获异常
//catch(Exception e)具体报错跟踪,通过 e 得到具体的错误信息
}
//可选部分
finally
{
//最后执行的代码,不管有没有出错,都会执行其中的代码
}
八、运算符
1. 算术运算符
算术运算符是用于数值类型变量计算的运算符,它的返回结果是数值
1.1 赋值符号
=:先看右侧,再看左侧,把右侧的值赋给左侧的变量
1.2 算术运算符加、减、乘、除、取余
|------|----------|
| x*y | 乘法 |
| x/y | 除法 |
| x%y | 求余 |
| x+y | 加法、字符串串联 |
| x-y | 减法 |
1.3 算术运算符的优先级
优先级是指在混合运算时的运算顺序,乘除取余优先级高于加减,先算乘除取余后算加减。
括号可以改变优先级,优先计算括号内内容。多组括号先算最里程,括号依次往外算。
1.4 算术运算符的自增减
|-----|----------|
| ++x | 前增量,先加再用 |
| --x | 前减量,先减再用 |
| x++ | 后增量,先用再加 |
| x-- | 后减量,先用再减 |
2. 字符串拼接
2.1 字符串拼接方式1
string 不存在算术运算符,不能计算,但是可以通过加号来进行字符串拼接
string str="123"; str=str+1;
str+=1+2+3; //先计算一加二加三,然后再进行字符串拼接
2.2 字符串拼接方式2
语法:string.Format("带拼接的内容{0},{1}",内容一,内容二,.....); 想要被拼接的内容,用占位符代替{数字},数字从零开始
2.3 控制台打印拼接
Console.WriteLine("带拼接的内容{0},{1}",内容一,内容二,.....); 想要被拼接的内容或变量,用占位符代替{数字},数字从零开始
Console.WriteLine($"{内容一}+{内容二}"); 括号中可以直接填写要拼接的变量
3. 条件运算符
3.1 条件运算符的基本应用
|-------|------|
| x<y | 小于 |
| x>y | 大于 |
| x<=y | 小于等于 |
| x>=y | 大于等于 |
| x==y | 等于 |
| x!=y | 不等于 |
3.2 各种应用写法
- 变量和变量比较
- 变量和数值比较
- 数值和数值比较
- 计算结果比较(条件运算符的优先级低于算术运算符)
3.3 不能进行范围比较
不能写成类似1<a<2的形式
3.4 不同类型之间的比较
不同数值类型之间可以随意进行条件运算符比较,例如:int类型可以和float类型比较;string、bool只能同类型进行==、!=比较;char不仅可以和自己类型进行==、!=比较,还可以和数值类型进行大小比较
4. 逻辑运算符
|--------|-----------------------------------|
| !x | 逻辑求反 |
| x&&y | x和y都为true时,才为true(仅当x为true,才对y求值) |
| x||y | x或y为true时,就为true(仅当x为false,才对y求值) |
4.1 逻辑与
逻辑运算符优先级低于条件运算符算术运算符
4.2 逻辑或
逻辑或优先级低于逻辑与
4.3 逻辑非
逻辑非优先级高于逻辑与
4.4 混合使用优先级问题
逻辑非优先级最高,逻辑与优先级高于逻辑或
逻辑运算符优先级低于算术运算符、条件运算符(逻辑非除外)
4.5 逻辑运算符的短路规则
5. 位运算符
位运算符,主要用数值类型进行计算。将数值转换为二进制,再进行位运算
|--------|-----------------|
| x&y | 整型按位AND,布尔逻辑AND |
| x|y | 按位或 |
| x^y | 按位异或 |
| ~x | 按位求反 |
| x<<y | 位左移 |
| x>>y | 位右移 |
5.1 位与
将数值转换为二进制进行位运算。对位运算,同为1则为1,否则为0
int a=3; int b=19;
int c=a&b; //3
5.2 位或
将数值转换为二进制进行位运算。对位运算,有1则为1,否则为0
a=1; b=3;
c=a|b; //3
5.3 异或
将数值转换为二进制进行位运算。对位运算,不同为1,相同为0,也可以理解为二进制不进位相加
a=1; b=5;
c=a^b; //4
5.4 位取反
写在数值前,将数值转换为二进制,对位运算,0变1,1变0
a=5;
c=~a; //-6
5.5 左移和右移
让一个数的二进制数进行左移或右移。左移几位,右侧加几个0;右移几位,右侧去掉几个数。
6. 三目运算符
|-------|---------------------------------------------|
| x?y:z | 如果x为true,则对y求值;如果x为false,则对z求值。注意yz结果类型必须一致 |
九、条件分支语句
作用:让顺序执行的代码产生分支
1. if语句
if(bool类型){}
if(bool类型)
{}
else
{}
if(bool类型)
{}
else if(bool类型)
{}
else
{}
2. switch语句
switch(变量)
{
case 常量:
...
break;
case 常量:
...
break;
case 常量:
...
break;
default: //可省略
...
break;
}
其中常量只能写一个值(也可以是const自定义常量),不能写范围。一般配合枚举使用。
贯穿:不写 case后面配对的 break 就叫贯穿
switch(变量)
{
case 常量1:
case 常量2:
case 常量3:
...
break; //此时等于123会进行相同的处理
default: //可省略
...
break;
}
十、循环语句
作用:让顺序执行的代码可以不停地循环执行某一代码块的内容
1. while循环
while(bool类型值) //若bool值恒为true,则为死循环,所以循环体中要记得写跳出循环的值的变化
{}
流程控制关键词:
break 跳出循环
continue 回到循环开始继续执行
注意: break 和 continue 主要是和循环配合使用的,和 if 语句没有关系。break 在 switch 中的作用和 while 循环中的作用有异曲同工之妙。
2. do while循环(使用较少)
do
{}while(bool类型值); //注意结尾处有分号,循环体中要记得写跳出循环的值的变化
while 循环是先判断条件再执行。do while 循环是先斩后奏,至少执行一次循环语句块中的逻辑,再判断是否继续。
3. for循环
for( 初始表达式 ; 条件表达式 ; 增量表达式 )
{ 循环内容 }
与while对比:
for 循环,一般用来可以准确得到一个范围中的所有数,相对while循环更简洁。
十一、补充
1. 控制台相关
1.1 输入存储
char c=Console.ReadKey(true).KeyChar; //不会吧输入的内容显示在控制台中,但还是会存储
1.2 清空
Console.Clear();
1.3 设置控制台大小
注意分为窗口大小和缓冲区大小,先设置窗口大小,再设置缓冲区大小;缓冲区大小不能小于窗口的大小,窗口的大小不能大于控制台的最大尺寸。 Console.SetWindowSize(100,50); Console.SetBufferSize(100,50);
1.4 设置光标的位置
控制台左上角为原点0,0,右侧是 x 轴正方向,下方是 y 轴正方向。
横纵距离单位不同,视觉上1y=2x。
Console.SetCursorPosition(0,1); //设置光标位置
1.5 设置颜色相关
文字颜色设置:Console.ForegroundColor = ConsoleColor.Red;
背景颜色设置:Console.BackgroundColor = ConsoleColor.White; //重置背景颜色过后,需要 clear 一次才能改变背景颜色
1.6 光标显隐
Console.CursorVisible = false;
1.7 关闭控制台
Environment.Exit(0);
2. 随机数
Random r = new Random();
int i=r.Next(); //若填写一个数字num,则生成0~num-1的随机数(左包含右不包含)
//若填写两个数字num1、num2,则生成num1~num2-1的随机数(左包含右不包含)