现在的位置: 首页 > 综合 > 正文

从C#进入计算机语言的世界(4) – 变量与表达式

2012年06月12日 ⁄ 综合 ⁄ 共 6054字 ⁄ 字号 评论关闭

第3章. 变量与表达式

在讲本章前,我们先来看一下一个数学公式,y = x + 1,这个式子几乎包含了本章的所有知识点。其中x、y为变量,1为常量,+为算术操作符,=为赋值操作符,x+1为公式,y=x+1为表达式。

3.1. 数据类型

在数学中,我们把数字分为整数、实数、虚数、复数等;在生活中,我们也会把物品分类,如生活用品、汽车、银行等。在计算机语言中,数据也是有类型的。这里我们先谈论简单的数据类型。

A、整数类型 

在C#中表示整数的类型很多,使用最多的整数类型是int。他们之间的不同点是表示范围和长度不同。具体见下表

类型 

允许的值 

sbyte

-128 – 127

byte

0 – 255

short

-32768 – 32767

ushort

0 – 65535

int

-2147483648 – 2147483647

uint

0 – 214967295

long

-9223372036854775808 – 9223372036854775807

ulong

0 – 18446744073709551615

在选择整数类型时要尽可能选择满足数据要求,并且尽可能的选择数据区间小的整数类型。比如表示一个人的年龄,选择byte会比选择int更好。

有些变量前面的“u”是“unsigined”的缩写,这些数据类型中不能包含负数。

B、实数类型 

如果想表示的数字带有小数点,就不能用整数类型来表示了。这时我们需要用实数类型来表示,也称浮数类型。按照小数点的精度,我们可以把实数类型为float,double,decimal。

l 练一练

1、气温最适合用什么数据类型表示?

2、金钱最适合用什么数据类型表示?

3、我们生活中常见的数字都是用什么数据类型表示的?

C、字符类型 

字符类型用char表示,它可以表示一个字或标点符号,如:’a’,’8’,’(‘,’中’,’ は’等单字节或双字节的字。

D、字符串类型 

一个或多个字符类型组合在一起就是字符串类型,用string表示一组字符。如“0”,“Hello World!”,“天气不错”等。

E、布尔类型 

在生活中我们经常对某个疑问进行“yes”和“No”或“是”和“不是”的回答,在数学中我们对判断会作出“对”和“错”的回答。在回答同一个疑问的时候,我们可能会表达同样的意思,可是表达方式会有很多种。比如“今天天气好吗”,可能得到回答“是的”,“是”,“Yes”,“当然了”等等。为了在计算机语言中规范这种表达,我们把结果是肯定的用“true”表示,把结果是否定的用“false”来表示。

3.2. 变量和常量

在y = x + 1的式子中,假设x、y为整数类型,那么x和y的取值并不是固定的,当x的值发生变化时,y的值也会随着变化。我们称这样的数据为变量。

A、变量的定义 

在C#语言中,变量必须先定义后再使用,变量的定义规范如下:

<Type> <name>;

以下是变量定义的一些例子:

 

string name; //定义一个变量,表示姓名

char sex; //定义一个变量,表示性别

int age; //表示年龄

float height; //表示身高

float weight; //体重

bool isMarried;//是否结婚

string remark; //备注

 

 

 

可以把相同数据类型的变量赋值在一条语句上体现,如

 

string native, nation;//同时定义了民族、国籍

 

 

B、 变量的命名规则 

和在生活中给一个小孩取名肯定会遵循一定的规则一样,在C#中,变量的取名也有一定的规则。

基本的命名规则如下:

n 变量名的第一个字符必须是字母、下划线 _ 或 @。

n 其他字符可以是字母、下划线或数字。

n 命名不能与C#中的关键字相同。

由于C#是与区分字母的大小写的,所以给变量命名时还需遵循一些常见的规范,具体见前面第二章的“代码书写规范”。

l 练一练

请在下面的变量命名中找出,哪些是合法的命名,哪些是非法的命名?

?a、a=2、_2a、2_a、do、GOTO、static、7say、First Name

C、 变量的赋值 

变量的赋值是给定义好的一个变量取值,例子如下:

 

name = "朱明明";
sex
= ‘男’;
age
= 20;
height
= 1.65;
weight
= 56.1;
isMarried
= false;
remark
= "三好学生";

 

 

在C#中,赋值符号是=,它和数学中的等于号意思不一样,赋值符号的意思是把右侧的值赋予左侧的变量。

赋值时一定要把数据类型赋值给相应变量类型。以下赋值是错误的:

 

name = 朱明明; //错误,字符串类型的取值需要用双引号

sex
= "boy"; //错误,无法把一个字符串赋值给字符

age
= 12.1; //错误,无法把一个实数赋值给整数变量

isMarried
= "Yes"; //错误,布尔类型只能在true 和false之间取值。

 

 

变量在赋值前一定要先定义,当然可以把变量的定义和赋值写在一条语句上,如:

 

int grade = 2; //定义了一个年级的变量,并给它赋值为。
int houseNumber = 75, roomNumber = 207;//75号宿舍楼207室

 

 

 

l 练一练

设有长方形,如图,请定义好变量,并给变量赋值,为后期求面积做好准备。

 

 

长:3厘米

宽:1厘米

示例:简单的变量类型

(1) 在目录C:\Code\Chapter3\下创建一个新的控制台应用程序OutputStudent。

(2) 修改Program.cs代码如下:

 

static void Main(string[] args)

{

string name;

double height, weight;

name
= "任小虎";

height
= 1.67;

weight
= 50.0;

int age = 21;

Console.WriteLine(
"{0}同学{1}岁,身高{2}米,体重{3}公斤。", name, age, height, weight);

Console.ReadKey();

}

 

 

(3) 运行代码,结果如图3-1所示。

clip_image002

图3-1

示例的说明

Console.WriteLine语句中我们用占位符{0}代表字符串后的第一个参数name,{1}代表age,{2}代表height,{3}代表weight。Console.ReadKey()的作用是暂停代码运行,等待用户按下一个按键。 

D、转义符 

上面提到字符串变量的值都是放入双引号之内的,双引号本身在C#中有特殊的含义,它代表字符串的开始或者结束。那么,如果想在字符串内容中表示双引号怎么做呢?我们先看以下表示方法是否正确:

 

s = "小明说:"好的。"说完就走了";

 

 

答案是错误的,计算机会认为这里有两个字符串"小明说:"和"说完就走了",中间放置了计算机无法认识的字符’好的’。所以这样的表示方法是错误的。

一般我们用\”代表内容中的双引号,所以上面例子的正确表示方法为:

 

s = "小明说:\"好的。\"说完就走了";

 

\代表的是转义符。同样,还有其他一些符号需要使用转义符,见下表

转义序列 

产生的字符 

转义序列 

产生的字符 

\’

单引号

\f

换页

\”

双引号

\n

换行

\\

反斜杠

\r

回车

\0

\t

水平制表符

\a

警告(产生蜂鸣)

\v

垂直制表符

\b

退格

   

排除双引号,如果某个字符串中,出现需要转义的字符较多,为了使字符串的表达更简洁明了,我们可以在字符串前面加上符号@,表示该字符串内所有需要转义的字符都代表字符本身。如文件地址可以采用如下2种表达方式:

 

file = "C:\\Temp\\Code\\myFile.doc";

file
= @"C:\Temp\Code\myFule.doc";

 

 

E、 常量 

在表达式中,如果直接以内容的形式出现的值我们成为常量。如y=x+1中的1,如Console.WriteLine(“Hello world”)中的”Hello World”。

3.3. 表达式

3.3.1. 算术操作符

运算符 

读法 

类别 

示例 

结果 

+

(连接)

二元

z = x + y;

如果是数字,z的结果是x和y的和;

如果是字符串,z是x和y字符串的连接

-

二元

z = x – y;

z的值是x和y的差

*

二元

z = x * y;

z的值是x和y的积

/

二元

z = x / y;

z的值是x除以y的结果

%

求余

二元

z = x % y;

z的值是x除以y后所得的余数

+

一元

z = +x;

z的值是x

-

一元

z = -x;

z的值是x的相反数

以上是C#中简单的算术操作符,大部分操作符在与数学中的表达方式很类似。如果x=4;y=3;那么执行语句z=x+y;后,z的值为7,执行z=x%y后的结果是1。

其中+符号比较特殊,它可以应用在两个字符串间的操作。比如x=”你好,”;y=”中国!”;那么执行语句z=x+y后,z的值为”你好,中国!”。其他运算符不能用作字符串的处理。

在处理数据时,经常会用到一种操作,就是把某个数字自增1或者自减1,虽然可以用+和-来达到效果,C#中定义了一个更简便的符号,见下表。

运算符 

读法 

类别 

示例 

结果(假设x的值为1)

++

加加

一元

z = ++x;

x自增1,结果为2;z的值为++x即为2

--

减减

一元

z = --x;

x自减1,结果为0;z的值为—x即为0

++

加加

一元

z = x++;

z的值为x即1;x自增1,结果为2

--

减减

一元

z = x --;

z的值为x即1;x自减1,结果为0

对与++x或者x++,最终结果,都会使x自增1,等同与x=x+1;操作符放在前面和后面的区别在于把这个结果赋值时会有所不同。

l z=++x;等同与 x=x+1; z=x;

l z=x++;等同与z=x;x++;

l 练一练

请问执行以下语句后,x,y,z的值分别是什么?

int x=1,y=2,z=3;z=x++*--y;

示例:制作一个简单的计算器

(1) 在目录C:\Code\Chapter3\下创建一个新的控制台应用程序SimpleComputer。

(2) 修改Program.cs代码如下:

 

static void Main(string[] args)

{

Console.WriteLine(
"这是一个简单的计算器。");

Console.WriteLine(
"功能:任意输入个数字,能求出这个数字的和、差、积、除和余数。");

Console.Write(
"请你输入第一个数字:");

double number1 = Convert.ToDouble(Console.ReadLine());

Console.Write(
"请你输入第二个数字:");

double number2 = Convert.ToDouble(Console.ReadLine());

Console.WriteLine(
"两个数相加得{0}", number1 + number2);

Console.WriteLine(
"两个数相减得{0}", number1 - number2);

Console.WriteLine(
"两个数相乘得{0}", number1 * number2);

Console.WriteLine(
"两个数相除得{0}", number1 / number2);

Console.ReadKey();

}

 

(3) 运行代码,结果如图3-2所示。

clip_image004

图3-2

3.3.2. 赋值操作符

之前例子中的运算符=就是赋值运算符,它的作用是把符号右侧的值赋给符号左侧的变量。除了简单的=赋值符,还有一些+=、-=、*=、/=、%=。使用方式为y+=x;,他的作用与y=y+x;一样,是把符号左侧的值加上右侧的值再赋给符号左侧的变量。+=运算符还可以用于字符串操作。

运算符 

类别 

示例 

结果(假设x的值为1,z的值为2)

=

二元

z = x;

z的值为1

+=

二元

z +=x;

等同于z=z+x;z的结果为3

-=

二元

z -=x;

等同于z=z-x;z的结果为1

*=

二元

z *=x;

等同于z=z*x;z的结果为2

/=

二元

z /=x;

等同于z=z/x;z的结果为2

%=

二元

z %=x;

等同于z=z%x;z的结果为0

3.3.3. 逻辑操作符

在生活中,经常会遇到比较两个数字的大小,如张三的年龄比李四大,买火车票时座位的价格比卧铺便宜等。那么如何用C#语言来描述两个数据的大小关系呢?这是我们可以用到逻辑操作符。见下表

运算符 

读法 

类别

示例

结果

==

等于

二元

z = x==y;

如果x等于y,那么z的值为true,否则为false

!=

不等于

二元

z =x!=y

如果x不等于y,那么z的值为true,否则为false

<

小于

二元

z =x<y;

如果x小于y,那么z的值为true,否则为false

>

大于

二元

z =x>y;

如果x大于y,那么z的值为true,否则为false

<=

小于等于

二元

z =x<=y;

如果x小于等于y,那么z的值为true,否则为false

>=

大于等于

二元

z =x>=y;

如果x大于等于y,那么z的值为true,否则为false

表中x==y的运算结果为一个布尔值,然后赋给布尔变量z。其中==和!=可以用在字符串的比较中,其他符号则必须用在数字的比较中。

处理布尔值时,还会用到一些逻辑运算符,见下表

运算符

读法

类别

示例

结果

!

一元

z = !x;

如果x为true,那么z为false,否则为true

&

二元

z =x&y

如果x和 y都为true,那么z的值为true,否则为false

|

二元

z =x|y;

如果x或y为true,那么z的值为true,否则为false

^

异或

二元

z =x^y;

如果x和y只有一个为true,那么z的值为true,否则为false

&&

二元

z =x&&y;

同&

||

二元

z =x||y;

同|

&、|、^的运算规则如下表

x

y

x&yx&&y

x|yx||y

x^y

true

true

true

true

false

true

false

false

false

true

false

true

false

true

true

false

false

false

false

false

在上面的表达中,我们发现&&、||和&、|的运算结果完全相同,但是运算的过程有重要区别,&&和||比&和|性能比较好。当运算符的两侧都是表达式时,如 x>y & a<=b,当x>y是false时,实际整个表达式肯定是false了,但是计算机还会去运算a<=b;而使用x>y&&a<=b时,如果x>y是假,那么计算机直接就断定这个表达式为假,不会运算a<=b的结果。

l 练一练

请计算以下表达式的计算结果,x=1,y=2

(x>y)&&(x<=y)

(x>3&&y==x)||(x<0||x>=y)

3.3.4. 逻辑赋值运算符

逻辑赋值运算符的语法和普通赋值符的语法类似。

运算符

类别

示例

结果(假设x的值为true,z的值为false)

&=

二元

z =& x;

等同于z=z&x;z的结果为false

|=

二元

z +=x;

等同于z=z|x;z的结果为true

^=

二元

z -=x;

等同于z=z^x;z的结果为true

3.3.5. 运算符的优先级

优先级

运算符

++,--(用作前缀);(),+,-(一元),!,~

*,/,%

+,-

<<,>>

<,>,<=,>=

==,!=

&

^

|

&&

||

=,*=,/=,%=,+=,-=,<<=,>>=,&=,^=,|=

++,--( 用作后缀)

括号可用于忽略优先级顺序。

抱歉!评论已关闭.