一、变量和常量
1、变量
变量(Variable)是 C# 编程中不可缺失的内容,使用变量可以更容易地完成程序的编
写。
变量可以理解为存放数据的容器,并且在将值存放到变量中时还要为变量指定数据类型。
定义变量的语法如下:
数据类型 变量名;
数据类型 变量名 = 初始值;
注意:
对于未初始化的变量,其内容无法确定,所以无法进行直接输出显示,需要设置值之后再进
行输出。
举例如下:
//定义一个变量,但未设置初始值
int value;
//定义一个变量,并设置初始值为5
int num = 5;
2、常量
常量也是用来存储数据的容器,在定义时都需要指明数据类型。
唯一的特点是:存放的值不允许改变。
常量需要使用关键字const进行修饰。
常量一般全部使用大写。
举例如下:
//定义一个常量
const int CONST_VALUE = 5;
CONST_VALUE = 10; //语法错误,试图修改一个常量
【实例1】分别求圆的面积和周长,并使用常量存放 π 的值,将 π 的值定义为3.14。
class Program
{
static void Main(string[] args)
{
const double PI = 3.14;
int r = 3; //存放半径
Console.WriteLine("圆的周长是:" + 2 * PI * r);
Console.WriteLine("圆的面积是:" + PI * r * r);
}
}
执行上面代码,效果如下图。
二、运算符
C#语言包含6种类型的运算符:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符。
1、算数运算符
算术运算符算术运算符是最常用的一类运算符,包括加法、减法、乘法、除法等。
如下表所示:
运算符 | 说 明 |
+ | 对两个操作数做加法运算 |
- | 对两个操作数做减法运算 |
* | 对两个操作数做乘法运算 |
/ | 对两个操作数做除法运算 |
% | 对两个操作数做取余运算 |
这里需要强调的是:
1)当对两个字符串类型的值使用 + 运算符,代表的是两个字符串值的连接,例如
"123"+"456" 的结果为 "23456" 。
2)当使用 / 运算符时也要注意操作数的数据类型,如果两个操作数的数据类型都为整数,那么结果相当于取整运算,不包括余数;而两个操作数中如果有一个操作数的数据类型为浮点数,那么结果则是正常的除法运算。
3)当使用 % 运算符时,如果两个操作都为整数,那么结果相当于取余数。经常使用该运算符来判断某个数是否能被其他的数整除。
举例如下:
计算一个整数的个位数字和十位数字。
using System;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
//计算整数68的个位和十位的数字
int number = 68;
int first = number / 10;
int last = number % 10;
Console.WriteLine("{0}的十位数字是{2},个位数字是{1}", number, first, last);
}
}
}
2、关系运算符
关系运算符在条件判断中经常使用的一类运算符,包括大于、小于、不等于、大于等于、小于等于等符号。
关系运算符比较的返回结果是一个bool类型的值。
如下表所示:
运算符 | 说 明 |
== | 表示两边表达式运算的结果相等,注意是两个等号 |
!= | 表示两边表达式运算的结果不相等 |
> | 表示左边表达式的值大于右边表达式的值 |
< | 表示左边表达式的值小于右边表达式的值 |
>= | 表示左边表达式的值大于等于右边表达式的值 |
<= | 表示左边表达式的值小于等于右边表达式的值 |
举例如下:
using System;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
//判断某一个数是否为偶数,实际上就是判断该数是否能被 2 整除,如果被 2 整除后余 数为 0,则说明该数为偶数。
Console.WriteLine("10是否是偶数:{0}" ,(10 % 2 == 0));
}
}
}
3、逻辑运算符
逻辑运算符主要包括与、或、非等,它主要用于多个布尔型表达式之间的运算。
如下表所示:
4、位运算
位运算,通常是指将数值型的值从十进制转换成二进制后的运算,由于是对二进制数进行运算,所以使用位运算符对操作数进行运算的速度稍快。
位运算包括与、或、 非、左移、右移等。
如下表所示:
5、赋值运算符
赋值运算符中最常见的是等号,除了等号以外还有很多赋值运算符,它们通常都是与其他运算符连用起到简化操作的作用。
如下表所示:
运算符 | 说 明 |
= | x=y,等号右边的值给等号左边的变量,即把变量 y 的值赋给变量 x |
+= | x+=y,等同于 x=x+y |
-= | x-=y,等同于 x=x-y |
*= | x=y,等同于 x=xy |
/= | x/=y,等同于 x=x/y |
%= | x%=y,等同于 x=x%y,表示求 x 除以 y 的余数 |
++ | x++ 或 ++x,等同于 x=x+1 |
-- | x-- 或 --x,等同于 x=x-1 |
6、特殊运算符
特殊运算符包含自增运算符,自减运算符和条件运算符。
如下表所示:
运算符 | 说 明 |
++ | x++ 或 ++x,等同于 x=x+1 |
-- | x-- 或 --x,等同于 x=x-1 |
?: | 布尔表达式 ? 表达式 1: 表达式 2 |
7、运算符优先级
在表达式中使用多个运算符进行计算时,运算符的运算是有先后顺序的,所以定义了运算符之间的优先级,来判断哪些操作优先计算。
运算符优先级如下表所示:
优先级由高到低依次往下。
结合性是指具有相同优先级的多个运算符同时存在时,系统执行计算时的方向。
举例如下:
using System;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
int num = 10;
int nextNum = 20;
int newNum;
//具有相同优先级的多个运算符同时存在,计算的结合性决定了计算的方向
newNum = num = nextNum;
Console.WriteLine("newNum:{0}\nnum{1}\nnextNum{2}", newNum, num, nextNu m);
}
}
}
三、流程控制语句
1、 判断语句
判断语句中包含if语句、switch...case语句以及三目运算符。
//if语句
if(/*判断条件*/)
{
//代码块
}
//if else 语句
if(/*判断条件*/)
{
//代码块1
}else
{
//代码块2
}
//嵌套if语句
if(/*判断条件1*/)
{
if(/*判断条件2*/)
{
//代码块
}
}
//switch
switch(/*表达式*/)
{
case /*取值1*/:break;
case /*取值2*/:break;
...
case /*取值n*/:break;
default:break;
}
//三目运算符 表达式1?表达式2:表达式3
int a = 5;
int b = (a > 3) ? a++:‐‐a //b = ?
注意:
a. switch中的表达式是一个常量表达式,必须是一个整型或枚举类型,且值不可以相同。
b.使用三目运算符时尽可能的使用括号和空格,使得表达式看起来清晰明了。
2、循环语句
//while循环
while(/*表达式*/)
{
//循环体
}
//do while循环
do{
//循环体
}while(/*表达式*/)
//for循环
//int i = 0 循环初始表达式
//i < 10 循环逻辑表达式,循环结束的条件
//i++ 循环后置表达式,在每次循环结束后执行
for(int i = 0 ; i < 10 ; i ++)
{
//循环体
}
//循环的变体
for(;;;)
{
//这是一个死循环
}
//后置表达式放置在循环体中
for(int i = 0;i <10;)
{
i++;
}
//初始化放置在循环外部
int i = 0;
for(;i<10;i++)
{
//循环体
}
//循环结束条件放置在循环体
for(int i = 0;;i++)
{
if(i < 10)
{
break;
}
}
3、循环控制语句
// 1 . continue 继续指令
for(int i = 0; i < 10; i++)
{
if(i >= 5)
{
continue;
}
printf("%d",i);
}
// 2 .break; 退出指令
for(int i = 0;;i++)
{
if(i < 10)
{
break;
}
}
// 3 .goto 直接跳转指令
int i = 0;
while(1)
{
printf("%d",i++);
if( i > 5)
{
//退出循环,跳转到end代码块
goto end;
}
}
//标签定义(标签之后的语句都会被执行)
end:
printf("End");
goto语句的优缺点:
- 最方便且效率最高
- 使程序层次不清,且不易阅读,难以维护