内容正文:
第2章 C#语言基础
01 基本数据类型
02 常量和变量
03 表达式与运算符
04 选择语句
05 循环语句
06 跳转语句
07 数组
1 基本数据类型
基本数据类型
值类型直接存储值
30
age
age
age2
int age = 30;
30
30
int age2 = age;
age
age2
30
35
age2 = 35;
值类型
整数类型
int i = 10; int j = -10;
uint m = 10; uint n = -10;
示
例
类型 说明(8位等于1字节) 范围
sbyte 8位有符号整数 -128~127
short 16位有符号整数 -32768~32767
int 32位有符号整数 -2147483648~2147483647
long 64位有符号整数 -9223372036854775808~9223372036854775807
byte 8位无符号整数 0~255
ushort 16位无符号整数 0~65535
uint 32位无符号整数 0~4294967295
ulong 64位无符号整数 0~18446744073709551615
类 型 说 明 范 围
float 精确到7位数 1.5×10-45~3.4×1038
double 精确到15~16位数 5.0×10-324~1.7×10308
decimal 精确到28位数 ±1.0×10-28~±7.9×1028
float theMySum = 9.27f; float theMuSums = 1.12F;
double myDou = 927d; double mudou = 112D;
decimal money = 1.12m; 或者 decimal money = 1.12M;
浮点类型
bool类型
布尔类型主要用来表示true/false值,C#中定义布尔类型时,需要使用bool关键字。例如,下面代码定义一个布尔类型的变量:
bool x = true;
bool类型的默认值是false。
C#语言中,使用char/Char类定义字符,并且字符只能用单引号括起来
char ch1 = ‘m’;
Char ch1 = ‘m’;
‘M’
‘5’
‘男’
‘bool’
‘5.2’
“ch”
×
×
×
检查下面这些是否是合法的字符
字符类型
语法
student1
student1.Name = “m”
Name=“m”
引用类型存储对值的引用
student1
studnet2
Name=“n”
student2.Name = “n”
student2 = student1
引用类型
Name=“m”
两个变量都发生变化
student1
studnet2
.NET中预定义的两种引用类型
类型 说明
object object类型在.NET Framework中是Object的别名。在C#的统一类型系统中,所有类型(预定义类型、用户定义类型、引用类型和值类型)都是直接或间接从Object继承的
string string类型表示零或更多Unicode字符组成的序列
值类型与引用类型的区别
在这里
在哪里
2 常量和变量
定义:不能被改变的量
32
368
0x2F
3.14
3.14F
3.14M
‘A’
“Hello World”
ture
false
常量
const double PI = 3.1415926 ;
常量的分类
字面常量 符号常量 const
引入
在数学中,我们对变量的概念有一定的了解和认识,如y=x2,其中,x、y都是变量。
那么,在C#中的变量具体是指一个什么概念呢?其实,一个变量就是存储区(内存)中的一个存储单元。
变量
变量类型 变量名 = 数值;
变量类型 变量名;
变量名 = 数值;
int money = 1000;
int money;
money = 1000 ;
变量的声明
变量类型 变量名1,变量名2,…,变量名n;
int money1,money2,…moneyn;
语法
1、字母
2、下划线‘_’
首字母
任意多的:
1、数字
2、字母
3、下划线‘_’
其余部分
变
量
名
C#语言中,变量命名要符合一定规则
money,score,name,sex
变量基本要求:
简短且能清楚地表明变量的作用,通常第一个单词的首字母小写,其后单词的
首字母大写。例如:myScore
变量的命名规则
变量的初始化
赋值运算符
将右边的数赋值给左边的变量
变量初始化的3种方法
单独初始化变量
int sum;
sum = 368;
int sum = 368;
int a,b,c,d,e;
a = b = c = d = e = 0;
声明时初始化变量
同时初始化多个变量
3 表达式与运算符
什么是表达式
引入
表达式是由运算符和操作数组成的。+、-、*和/等都是运算符,操作数包括常量、变量和表达式等。
1 × 4 = 4
x * y = z
符号
数
运算符
操作数
按运算符功能
按操作数个数
单目运算符
双目运算符
三目运算符
算术运算符
自增自减运算符
赋值运算符
关系运算符
逻辑运算符
位运算符
条件运算符等
运算符的分类
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
主要内容
算术运算符
自增自减运算符
赋值运算符
关系运算符
逻辑运算符
位运算符
移位运算符
条件运算符
01
02
03
04
05
06
07
08
运算符的优先级与结合性
09
表达式中的类型转换
09
操作数
操作数
运算符
+
-
*
/
%
算术运算符
基本的算术运算
class Test
{
public static void Main(String[ ] args)
{
double i = -6.5;
int j = -2;
double result = i % j;
Console.WriteLine(result);
}
}
使用%运算符时的注意事项
使用%运算符时,返回结果的符号与左操作数相同
- 0.5
b = a++;
相当于:
b = a;
a++;
先取值,后自增
b = --a;
相当于:
--a;
b = a;
先自减,后取值
自增自减运算符
自增自减运算符不能作用于常量或者表达式
=
量
值
做读取操作,可以是常量、表达式
做写的操作,被赋予等号右侧的值
简单赋值运算符
a += 3
a &=3
a >>= 3
a %= b-3
a = a + 3
a = a & 3
a = a >> 3
a = a % (b-3)
算术赋值
此处千万不能写成:a = a % b - 3
位赋值
移位赋值
复合赋值运算
复合赋值运算符
复合赋值运算符又称为带运算的赋值运算符,它其实是将赋值运算符与其他运算符合并成一个运算符来使用,从而同时实现两种运算符的效果。
大于 >
等于 ==
不等于 !=
大于或等于 >=
小于或等于 <=
小于 <
关系
运算
关系运算符
真变假,假变真
全假才假
全真才真
与 &&
(&)
或 ||
(|)
非 !
逻辑运算符
0变1,1变0
有1即为1
有0即为0
全0或全1才为0
位运算符
位运算符
位或|
位取
反~
位异
或^
位与&
0000 0000 0000 1100
& 0000 0000 0000 1000
0000 0000 0000 1000
0000 0000 0000 0100
| 0000 0000 0000 1000
0000 0000 0000 1100
十进制 12 和 8 进行与运算
十进制4和 8进行或运算
位与运算
位或运算
位运算符示例
位与运算的结果为8
位或运算的结果为12
0000 0000 0001 1111
^ 0000 0000 0001 0110
0000 0000 0000 1001
~ 0000 0000 0111 1011
1111 1111 1000 0100
位异或运算
位取反运算
位运算符示例
位异或运算的结果为9
位取反运算的结果为-124
十进制31和22进行异或运算
十进制123进行取反运算
0 0 1 1 0 0 0 0
0 1 1 0 0 0 0 0
左移后补0
左移1位
0被舍弃
移位运算符
十进制:48
十进制:96
96 = 48 * 2 ,192 = 48 * 22
1 1 0 0 0 0 0 0
左移2位
左移后补0
0被舍弃
十进制:192
左移相当于乘以2的n次幂
之左移位运算
0 0 1 1 0 0 0 0
0 0 0 1 1 0 0 0
1 0 1 1 0 0 0 0
右移位运算
十进制:48
十进制:24
十进制:-80
十进制:-20
1 1 1 0 1 1 0 0
0被舍弃
0被舍弃
右移1位
右移后补0
右移2位
右移后补1
24 = 48 / 2
-20 = -80 / 22
右移相当于除以2的n次幂
判断公式 ? 结果1 : 结果2 ;
示例
条件运算符
if(判断公式)
结果1
else
结果2
int age = 50;
string info = age > 40 ? "人到中年了!" : "这正是黄金奋斗的年龄";
简称 含义 运算符 数目 结合性
单 单目 ++, --, ! ,~ 单目 ←
算 算术 *, /, % 双目 →
+, - 双目 →
位 移位 <<,>> 双目 →
关 关系 >, >=, <, <= 双目 →
==, != 双目 →
逻 逻辑 && 双目 →
|| 双目 →
条 条件 ? : 三目 ←
赋 赋值 =,+=,-=,*=,/=,%= 双目 ←
运算符的优先级与结合性
优先级从高到底
表达式中的类型转换之隐式类型转换
在某种条件下,系统自动完成类型转换(即隐式类型转换)
两种类型兼容
例如:double兼容int类型
目标类型精度大于源类型
例如:double类型大于int类型
(类型名)表达式
int b = (int)10.2;
double a = 10.5;
int c = (int)a;
1
Convert.To类型名(表达式)
double a = 10.5;
int c = Convert.ToInt32(a);
2
类型名.Parse(表达式)
double a = 10.5;
int c = Int.Parse(a.ToString());
3
显式类型转换
数值类型
值类型
引用类型
装箱
拆箱
装箱和拆箱
4 选择语句
主要内容
if语句
01
switch语句
02
最简单的if语句
(1)表达式必须使用圆括号括起来
(2)表达式:关系表达式或逻辑表达式
(3)“语句”可以使单语句也可以是复合语句
if(表达式)
{
语句
}
语法
43
if…else语句
(1)表达式:关系表达式或逻辑表达式
(2)“语句1或者语句2”可以是单语句也可以是复合语句
if(表达式)
{
语句1
}
else
{
语句2
}
语法
if…else语句与条件运算符
if(表达式)
语句1
else
语句2
表达式? 语句1 : 语句2 ;
尝试使用条件运算符对前面判断某个数是奇数还是偶数的实例进行修改。
if语句多于else语句的问题
程序中使用if…else语句时,如果出现if语句多于else语句的情况,在没有特殊处理的情况下,else永远都与最后出现的if语句相匹配。
if (表达式1)
{
语句1
}
else if(表达式2)
{
语句2
}
…
else if(表达式n)
{
语句n
}
else
{
语句n+1
}
注意:else和if之间有一个空格
if…else if…else语句
表达式1
假
语句1
真
语句n+1
表达式2
语句2
真
假
真
假
表达式n
真
假
语句n
……
……
if语句的嵌套
if(表达式1)
{
if(表达式2)
{
// 表达式2为真时执行……
}
else
{
// 表达式2为假时执行……
}
}
if(表达式1)
{
if(表达式2)
{
// 表达式2为真时执行……
}
else if(表达式3)
{
// 表达式3为真时执行……
}
}
else
{
//表达式1为假时执行……
}
if语句中嵌套if…else
1
if…else中嵌套if…else if
2
任意互相嵌套
使用if语句的嵌套判断用户输入的年份是不是闰年。
switch (表达式)
{
case 常量表达式1:
语句1;
break;
case 常量表达式2:
语句2;
break;
…
case 常量表达式n:
语句n;
break;
default:
语句n+1;
break;
}
整型/char/string/bool类型
用于退出switch语句,不能省略
注意:这里是冒号,不是分号
switch多分支语句
switch多分支语句的执行流程
5 循环语句
主要内容
while循环语句
01
do…while循环语句
02
for循环语句
03
while循环语句
(1)表达式:关系表达式或逻辑表达式
(2)“语句”中应该有能够使循环结束的条件语句
(3)如果表达式一开始为假,则循环体中的语句一次都不执行
while(表达式)
{
语句
}
语法
使用while循环实现1到100的累加和。
do…while循环语句
(1)表达式:关系表达式或逻辑表达式
(2)while表达式后面的分号一定不能省略
(3)循环体中的语句至少执行一次
do
{
语句
} while(表达式);
语法
使用do…while循环实现1到100的累加和。
0遍
1遍
想一想,下边两段代码分别被执行几遍?
?
while和do…while的区别
for循环语句
(1)表达式1通常用来初始化循环变量
(2)表达式2是一个关系表达式或逻辑表达式,用来作为判断条件
(3)表达式3通常用来对循环变量进行递增或递减操作,以便存在能够使循环结束的条件
(4)表达式之间用分号连接,分号一定不能省略
for (表达式1; 表达式2; 表达式3)
{
语句
}
语法
使用for循环实现1到100的累加和。
for循环应用
6 跳转语句
主要内容
break语句
01
continue语句
02
goto语句
03
break在循环中的使用
int i,sum=0;
for (i = 1;; i++)
{
sum += i;
}
int i,sum=0;
for (i = 1;; i++)
{
if(i > 100)
{
break;
}
sum += i;
}
修改
(1)break语句通常应用在switch、while、do…while或for循环中
(2)break一般与if语句搭配使用,用来跳出循环
“死循环”
continue的使用
(1)continue语句通常应用在while、do…while或for循环中
(2)continue一般与if语句搭配使用,用来开始一次新的循环
?
2+4+6+8+……+100=?
int i,sum=0;
for (i = 1; i <= 100; i++)
{
if( i%2==1)
continue;
sum += i;
}
break和continue的区别
break
continue
使用goto语句实现1到100的累加。
goto语句的使用
goto Lable;
Console.WriteLine(“the message before Label”);
Lable:
Console.WriteLine(“the Label message”);
goto 标签;
语法
改变代码执行顺序
goto使用说明
goto语句可以忽略当前程序的逻辑,直接使程序跳转到某一语句执行,有时非常方便,但是也正是由于goto语句的这种特性,在程序开发中一般不主张使用goto语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。
7 数组
主要内容
一维数组
01
多维数组
02
不规则数组
03
数组与System.Array
04
常用数组操作
05
使用foreach语句遍历数组
06
一维数组
引入
一维数组是具有相同数据类型的一组数据的线性集合,在程序中可以通过一维数组来完成一组相同数据类型数据的线性处理。
type[] arrayName;
语法
一维数组初始化的3种方法
初始化一维数组为默认值
int[] arr =new int[5];
int[] arr=new int[5]{1,2,3,4,5};
string[] arrStr={"Sun", "Mon", "Tue",
"Wed", "Thu", "Fri", "Sat"};
初始化一维数组为指定值
省略长度初始化数组
多维数组
引入
多维数组是指可以用多个下标访问的数组,声明时,方括号内加逗号,就表明是多维数组,有n个逗号,就是n+1维数组。
type[,] arrayName;
语法
多维数组初始化的2种方法
初始化二维数组为默认值
int[,] arr =new int[3,2];
int[,] arr=new int[3,2]{{1,2},{3,4},{5,6}};
初始化二维数组为指定值
不规则数组
int[][] a = new int[3][];
a[0] = new int[5];
a[1] = new int[3];
a[2] = new int[4];
语法
数组与System.Array
方法 说明
Copy 将数组中的指定元素复制到另一个Array中
CopyTo 从指定的目标数组索引处开始,将当前一位数组中的所有元素复制到另一个一位数组中
Exists 判断数组中是否包含指定的元素
GetLength 获取Array的指定维中的元素数
GetValue 获取Array中指定位置的值
Reverse 反转一维Array中元素的顺序
SetValue 设置Array中指定位置的元素
Sort 对一维Array数组元素进行排序
C#中的数组是由System.Array类派生而来的引用对象。
数组常用操作
一维数组的输入与输出
使用单层循环实现
使用双层嵌套循环实现
排序算法:冒泡排序等
二维数组的输入与输出
数组的排序
使用foreach语句遍历数组
foreach(【类型】 【迭代变量名】 in 【集合表达式】)
{
语句
}
语法
string[] strNames = { "进货管理", "销售管理", "库存管理", "系统设置" };
foreach (string str in strNames)
{
Console.Write(str + " ");
}
示
例
74
小结
本章对C#语言基础知识进行了详细讲解,学习本章时,读者应该重点掌握变量和常量的使用、各种运算符的使用、流程控制语句的使用以及数组的基本操作。本章是C#程序开发的基础,因此,我们一定要熟练掌握。
上机指导
通过本章所学尝试制作一个简单的客车售票系统,假设客车的坐位数是9行4列,使用一个二维数组记录客车售票系统中的所有座位号,并在每个座位号上都显示“【有票】”,然后用户输入一个坐标位置,按回车键,即可将该座位号显示为“【已售】”。
���������
�������
���������
���������
���������
���������
�����
���������
���������
���������
���������
���������
���������������
���������������
object�
string�
���
�����
�����
�
语句2
表达式
语句1
真
假
上条语句
表达式
循环语句
下条语句
假
真
上条语句
表达式
循环语句
下条语句
假
真
下条语句
表达式3
循环语句
假
表达式1
真
表达式2
while循环后面的语句
假
真
假
表达式1
语句组
语句组
表达式2
真
while循环后面的语句
假
假
表达式1
语句组
语句组
表达式2
数组索引
$$