控制台输入输出语句
输出:
Console.WriteLine(); // 换行
Console.Write();// 不换行
输入:
可保存输入的内容
Console.ReadLine();
Console.ReadKey();
如果是ReagKey(true),不会把输入的内容显示在控制台上
char c = Console.ReadKey(true).KeyChar;
清空:
Console.Clear();
设置控制台大小:
窗口大小、缓冲区大小
注意:
- 先设置窗口大小,再设置缓冲区大小
- 缓冲区的大小不能小于窗口的大小
- 窗口的大小不能大于控制台的最大尺寸
Console.SetWindowSize(100,50); //窗口大小
Console.SetBufferSize(1000,1000); //缓冲区大小
设置光标的位置:
控制台左上角为原点0,0 右侧是X轴正方向,下方是Y轴正方向,它是一个平面二维坐标系
注意:
- 边界问题
- 横纵距离单位不同 1y = 2x 视觉上的
Console.SetCursorPosition(0,1);
设置颜色相关
文字颜色设置:
Console.ForegroundColor = ConsoleColor.Red;
背景颜色设置:
Console.BackgroundColor = ConsoleColor.White;
//重置背景颜色之后,需要Clear一次,才能把整个背景颜色改变
Console.Clear();
光标显隐
Console.CursorVisible = false;
关闭控制台
Environment.Exit(0);
断点
- 如何打断点 F9
- 如何一步一步的看代码逻辑 F10
- 继续执行 停止一步一步的看 F5
可以通过监视窗口查看想要得到的变量值
折叠代码
只会在编辑时有用,用于折叠代码
#region
#endregion
随机数
固定写法:
Random 随机数变量名 = new Random();
生成随机数:
Random r = new Random();
int i = r.Next(); // 生成一个非负数的随机数
Console.WriteLine(i);
i = r.Next(100); // 生成一个0~99的随机数 左边始终是0
i = r.Next(5,100); // 生成一个 5~99的随机数,左包含 右不包含
变量
变量类型 14种
无符号的整型变量 能存储 一定给范围 0和证书的变量类型
byte 0~255
ushort 0~65535
uint 0~42亿
ulong 0~18万兆
有符号的整形变量 能存储一定范围 正负数包括0的变量类型
sbyte -128~127
short -32768~32767
int -21亿~21亿多
long -9百万兆~9百万兆
浮点数(小数)
float 存储7/8位有效数字 四舍五入 有效数字从非0数开始计算 c#中的小数默认是double类型,为了区别后面+f/F
double 存储15`17位有效数字 四舍五入
decimal 存储27~28位有效数字,不建议使用,后面+m/M
特殊类型
bool true/false
char 存储单个字符 charc = "A" 字符类型
string 字符串类型用来存储多个字符 没有上限
不同的变量 储存的范围和类型不一样,本质是占用的内存空间不同
变量本质
1byte = 8bit
1MB = 1024byte
1GB = 1024MB
1TB = 1024GB
通过sizeof方法 可以获取变量类型所占的内存空间(单位:字节)
int sbyteSize = sizeof(sbyte);
Console.WriteLine(sbyteSize);//1
int intSize = sizeof(int);
Console.WriteLine(intSize);//4
int shortSize = sizeof(short);
Console.WriteLine(shortSize);//2
int longSize = sizeof(long);
Console.WriteLine(longSize);//8
所有变量类型所占的字节:
有符号:
sbyte 1字节 8位
int 4字节 32位
short 2字节 16位
long 8字节 64位
无符号:
byte 1字节 8位
uint 4字节 32位
ushort 2字节 16位
ulong 8字节 64位
浮点:
float 4字节 32位
double 8字节 64位
decimal 16字节 128位
特殊:
char 2字节 16位
bool 1字节 8位
string 可变 不固定
变量的本质是二进制 计算机中所有数据的本质都是二进制 是一堆0和1
数据传递只能通过电信号,只有开和关两种状态,
计算机中的存储单位最小为bit(位),他只能表示0和1两个数字
2进制转10进制的规则:
从右往左看,最右边的一位为第0位,如果该位不为0,则加上2的n位次方
变量命名规范
- 不能重名
- 不能以数字开头
- 不能使用程序关键字命名
- 不能有特殊符号
常量
转义字符
类型转换
隐式转换
大范围转小范围
double —> float —> 整形(无符号、有符号) —> char
decimal —> 整形(无符号、有符号) —> char
long —> int —> short —> sbyte
ulong —> uint —> ushort —> byte
无符号没法隐式存储有符号的
有符号的可以隐式存储无符号的(注意范围大小)
例:
int a = 1;
short b = 1;
a = b;
//b的类型转换为short
显示转换
1、括号强转:
作用:将高精度的类型强制转换为低精度,数值之间的转换
语法: 变量类型 变量名 = (变量类型)变量;
注意:精度问题 范围问题
例:
short s = 1;
int i = 1;
s = (short)i;
括号强转成的异常
浮点数强转成整形时,会直接抛弃掉小数点后面的小数
bool和string不能通过括号强制转换类型
2、Parse法
作用:把字符串类型转换为对应的类型
语法:变量类型.Parse("字符串")
注意:字符串必须能够转换成对应类型,否则报错;值发范围,必须能够被变量存储的值,否则报错
例:
int i = int.Parse("123");
Console.WriteLine(i);//123
3、Convert法
作用:更准确的将各个类型之间进行相互转换
语法:Convert.To目标类型(变量或常量)
精度更高,会四舍五入
每个类型都存在对应的Convert中的方法
sbyte sb = Convert.ToSByte("1");
short s = Convert.ToInt16("1");
int i = Convert.ToInt32("1");
long l = Convert.ToInt64("1");
byte b = Convert.ToByte("1");
ushort us = Convert.ToUint16("1");
uint ui = Convert.ToUInt32("1");
ulong ul = Convert.ToUInt64("1");
float f = Convert.ToSingle("13.2");
double d =Convert.ToDouble("13.2");
decimal de = Convert.ToDecimal("13.2");
bool bo = Convert.ToBoolean("true");
char c = Convert.ToChar("A");
string str = Convert.ToString(123456);
4、其他类型转string:
作用:拼接打印
语法:变量.ToString();
例:
string str = 123.ToString();
str = true.ToString();
str ='A'.ToString();
当我们进行字符串拼接时,会自动调用tostring
Console.WriteLine("123" 4 + true )
异常捕获
基础语法:
//必备部分
try
{
//希望进行异常捕获的代码块
//如果try中的代码报错,会执行catch中,
}catch(Exception e)
{
// e 具体的错误信息
}
//可选部分
finally
{
//不管有没有出错,都会执行的代码
}
举例:
//必写部分
try
{
string str = "你好啊";
int i =int.Parse(str);
Console.WriteLine(i);
}
catch(Exception e)
{
Console.WriteLine("字符串不合法");
}
//可选部分
finally
{
Console.WriteLine("再见!");
}
算数运算符
算术运算符是用于数值类型变量计算的运算符,返回结果是数值
赋值符号
=
关键知识点:先看右侧,再看左侧,把右侧的值赋值给左侧的变量
算数运算符
加 +
减 -
乘 *
除 / 整数做除法运算会丢失小数点后的小数,如果想用浮点数存储,运算时要写成浮点数
取余 %
算数运算符的优先级
先算乘除取余,再算加减
先算括号内,再算括号外
算数运算符的复合运算符
复合运算符用于 自己=自己进行运算
+=
-=
*=
/=
%=
算数运算符的自增减
++
i++:先用再加
++i:先加再用
--
i--:先用再减
--i:先减再用
字符串拼接
1、用+拼接
2、string.Format()
语法:string.Format("待拼接的内容",内容1,内容2,内容3.......);
规则:想要被拼接的内容用占位符替代{数字} 数字 :0~n,依次往后
例:
string str = string.Format("我是{0},我今年{1}岁,我想要{2}", "小明", 18, "好好学习,天天向上");
Console.WriteLine(str);//我是小明,我今年18岁,我想要好好学习,天天向上
后面的内容比占位符多,不会报错;后面的内容比占位符少,会报错。
3、控制台打印
可直接使用上述方法
Console.WriteLine("我是{0},我今年{1}岁,我想要{2}", "小明", 18, "好好学习,天天向上");
条件运算符
用于比较两个变量或常量
是否大于 >
是否小于 <
是否等于 ==
是否不等于 !==
是否大于等于 >=
是否小于等于 <=
比较结果返回的是一个bool类型的值,true 和false,条件满足返回true,不满足返回false
逻辑运算符
逻辑与
&& 对两个bool值进行逻辑运算 有假则假 同真为真
逻辑或
|| 有真则真 同假为假
逻辑非
! 对一个bool值进行取反 真变假 假变真
混合使用优先级问题
! 优先级最高 && 优先级高于||
逻辑运算符优先级 低于 算数运算符 条件运算符(!除外)
逻辑运算符短路规则
只要 &&或者 || 左边满足了条件 不会再执行右边的表达式
位运算符
主要用数值类型进行计算的,将数值转换为2进制,再进行位运算
位与 &
连接两个数值进行为计算 将数值转为2进制 对位运算 有0则0
int a = 1; //001
int b = 5; //101
int c = a & b;
// 001 & 101 = 001 = 1
Console.WriteLine(c); // 1
位或 |
对位运算 有1则1
int a = 1; //001
int b = 3; //011
int c = a | b;
// 001 | 011 = 011 = 3;
Console.WriteLine(c); // 3
异或 ^
对位运算 相同为0 不同为1
位取反 ~
写在数值前面 将数值转为2进制
对位运算 0变1 1变0
int a = 5; // 0000 0000 0000 0000 0000 0000 0000 0101
int b = ~a;
// ~0000 0000 0000 0000 0000 0000 0000 0101
= 1111 1111 1111 1111 1111 1111 1111 1010 = -6
左移 << 和 右移 >>
让一个数的2进制数进行左移和右移
左移几位 右侧加几个0
int a = 5; // 101
int b = a << 5; // 10100000 =160
右移几位 右侧去掉几个数
int a = 5; // 101
int b = a >> 2; // 1
三目运算符
基本语法
bool类型 ? bool类型为真返回内容 : bool类型为假返回内容;
条件分支语句
让顺序执行的代码 产生分支
if语句
语法:
if(bool类型值)
{
}else{
}
可以嵌套使用;else可以省略
Switch语句
作用:让顺序执行的代码产生分支
语法:
switch(变量)
{
case 常量:
// 满足条件执行的代码逻辑;
break;
case 常量:
// 满足条件执行的代码逻辑;
break;
default:
// 如果上面case的条件都不满足 就会执行 default中的代码
break;
}
注意:
- 常量只能写一个值,不能写一个范围,不能写条件运算符、逻辑运算符
- switch只判断变量是否等于某一个固定值
- default可省略
可自定义常量:
char c = 'A';
const char c1 = 'A'; //必须初始化;不可修改
switch(c)
{
case c1:
Console.WriteLine("c等于A");
break;
}
贯穿:
不写case后的break,满足任意一个case条件,就会执行之后的代码
int a = 1;
switch(a)
{
case 1:
case 2:
Console.WriteLine("是个数字");
break;
default:
break;
}
//输出结果:是个数字
while循环语句
作用:让代码可以被重复执行
语法:
while(bool类型的值)
{
//满足条件时,就会执行while语句块中的内容
//......
//......
//......
//代码逻辑执行完,会回到while循环开头,再次进行条件判断
}
//避免写死循环
嵌套使用:
while循环不仅可以嵌套 if switch 还可以嵌套while
流程控制关键词:
作用:控制循环逻辑的关键词
break:跳出循环
while(true)
{
Console.WriteLine("1111");
break;
Console.WriteLine("2222");
}
Console.WriteLine("3333");
// 1111
// 3333
continue:回到循环开始 重新执行
break和continue主要是和循环配合使用的
do...while循环
do while循环 是先斩后奏,先至少执行 一次循环语句块中的逻辑再判断是否继续
do
{
//...
} while (bool类型的值);
for循环
for( /*初始表达式*/ ; /*条件表达式*/ ; /*增量表达式*/ )
{
}