在上节中主要简单的介绍了一下使用环境,以及怎么新建一个项目和解决方案。(有人说我没讲.net framework以及CLR,我认为还不会吃饭呢,就想着做饭,是不是有点早了???)我想问你,俗称的电脑为啥又叫计算机呢?当然,最早是用于大型计算的,那么今天,我们也来先学学怎么用它计算点东西。
变量和类型
学过C语言或者其他的读者,你可以跳过本小节,但是,我还是建议你读完本小节,说不定你会有新的认识。
什么是变量
相信你学过高中数学函数部分,y=f(x),这是一个函数,其中x叫做自变量,y叫做因变量。二人的共同点是都能变,而且一个随着另一个改变。变量有个特点,可以赋值,可以参与运算。也就是说,变量里存放着一个数值。我们类推一下,程序里的变量就是在内存中(为什么不是硬盘呢?程序运行时,是要把硬盘上的数据读取到内存里的,然后再运行)开一个小房间,然后把一个数值存进去,当然这个值你可以随时去改变。
那么问题来了,怎么告诉程序我需要一个变量,怎么让程序把一个数值放到这个变量里呢?
声明变量并初始化(赋值)
按照我们类推的思路,告诉计算机一个变量x,并且把10存进去,应该是这样写,x=0;(这句话写哪里呢?按照上节写到的,先新建项目和解决方案,在主函数的花括号里写。分号的作用是很么还记得么?哦,一句话的结尾,相当于我们写作文时的句号。)
运行一下,弹出一个好大的错误对话框,告诉你发生错误了,并且窗口下面错误列表(没有错误列表的可以点击菜单栏【视图】->【错误列表】显示)提示,当前上下文中不存在名称“x”。如下图:
这是神马意思呢?猜一下,肯定是程序不知道有x这么个变量,那我们声明一下吧(告诉程序变量名称的过程叫做声明,也就是定义变量),声明的语法如下:
变量类型 变量名称;
这里和数学上不同的是,我们需要告诉程序这个变量是什么类型,也就是,整数?小数?还是其他的。在这里,我先告诉你一个类型,整数类型“int”。这个类型可以声明一个整数变量,由于这个变量在内存上开的房间大小只有那么点大,所以可以存-2,147,483,648 到 2,147,483,647的整数,你给他赋值的时候不要超过这个范围,切记。稍微修改我们的程序,如下:
int x;//声明一个整数变量 x = 10; //给这个变量赋值 Console.WriteLine(x); //把这个变量的值输出到控制台 //你还可以这样写 int y = 8; //变量的声明和赋值写到一句话里面了 Console.ReadKey();//让控制台不要一闪而过
我写了注释了,这下,你体会到注释的好处了么。而且你看到我写的,还可以将声明和赋值写到一起(为什么换了个y变量呢,因为不可以声明两个相同名字的变量,否则程序不知道你说的是哪个变量)。我还用了昨天学的两句话,一句是输出,一句是让控制台停住。(小提示,输入cw并按两次Tab键,也就是键盘大写锁定键上面那个,有意想不到的惊喜哈)
让我们做个练习,声明三个整数变量,x,y,z,并且,x的值是3,y的值是2,分别计算x+y x-y x*y x/y的值,并且存放到z里,然后输出到控制台。
练习代码如下,你是否写对了呢?
int x = 3; int y = 2; int z; z = x + y;//加法 Console.WriteLine(z); z = x - y;//减法 Console.WriteLine(z); z = x * y;//乘法 Console.WriteLine(z); z = x / y;//除法 Console.WriteLine(z); Console.ReadKey();//让控制台不要一闪而过
运行结果如下图:
从运行结果里,我们发现了问题,3÷2变成了1,计算机也不靠谱么,这都算不对(你可以嘲笑他一分钟)。
。。。一分钟过去了
我来解释一下原因吧。刚才说了,计算机里定义变量是有类型的,每种类型都只能存放特定的值,它存放的值可以变,但是类型却不能变。从新审视我们的代码,我们的z声明时用int声明的,那么它只能存放整数,而3÷2是1.5,是一个小数,结果z就把小数部分扔掉了,只保留了整数部分1,而且他不是四舍五入的(切记)。这个错误有时候我们专门利用,利用它来取出某个数的整数部分。
我相信你会改造上面的程序,你缺的只是一个小数型变量的类型名称。我们用double来表示双精度小数(神马是双精度?就是高精度的呗)。我们只需要把int z;改为double z; 那么,加减乘的结果影响么?当然不会,整数也是特殊的小数么,只是小数点后面都是0而已。你改造好了么?运行一下试试!
我已经偷偷的笑了,我猜到你一定在说“你TMD在逗我么?”。结果还是错的,为什么呢?程序里规定了,整数和整数运算只能得到整数。那我们怎么办?跟着我,再改一个地方,把 z=x/y;改成 z=1.0*x/y; 你改完试试结果,我保证你这次得到了正确结果。那么1.0在这里是什么意思呢,其实就是让一个小数参与运算,一旦有小数参与运算,那么结果就变成小数了。
看到这里,你一定还想知道其他的一些变量类型,因为只有整数和小数满足不了我们的需求了。
常用的变量类型介绍
下表列出了我们常用的类型(实际类型比这个多)
类型 |
范围 |
声明及初始化 |
备注 |
int |
-2,147,483,648 到 2,147,483,647 |
int x=12; |
有符号 32 位整数 |
double |
±5.0 × 10-324 到 ±1.7 × 10308 |
double x=12.5369; |
精度15 到 16 位 |
decimal |
±1.0 × 10-28 到 ±7.9 × 1028 |
decimal x=12.5M; |
精度28 到 29 位有效位,常用于表示金钱 |
bool |
true或者false |
bool x=true; |
表示真假,逻辑值,也叫布尔类型 |
char |
U+0000 到 U+ffff |
char x=’a’ |
16 位 Unicode 字符,也就是一个字母,或者一个汉字等,用于表示世界上多数已知的书面语言 |
string |
表示零或更多 Unicode 字符组成的序列 |
string x=”我爱C#”; |
字符串类型,也就是char的多个连接起来的组合 |
注意:
- decimal类型也是高精度小数,经常用于经济,财会,货币的计算
- bool类型是表示真假的,只能为true或者false,如果你学过C语言,你知道在C语言中0可以表示false,任何非0的数可以表示true,但是这在C#中并不适用,也无法相互转换
- char类型赋值时需要用英文半角的单引号引起来
- string表示一串char,赋值时需要用英文半角双引号引起来
你可以试着做个练习,把上面的类型都定义一个变量,并且输出到控制台。
“=”真的是等号么?
刚才在代码里一直在写,XX=XX, 但是,这里的“=”是我们数学中的等号么?我们看下面的例子
int x = 3; int y = 2; int z = 5; x = y; Console.WriteLine(x); z = z + 1; Console.WriteLine(z);
其中一行代码,x = y,这是不可想象的如果放到数学里,因为这里的x和y并不相等。但是运行我们的程序,没有出错,这是为什么呢,而且x变成了2,也就是y的值。其实,这里的等号=是赋值的意思,意思就是把y存放的值赋给x。同理,z=z+1也是如此,z原本是5,加1变成6后再赋给z,所以这个程序运行的结果,第一个输出值是2,第二个输出值是6,你想明白了么?
那我们真正想判断x是否等于y怎么办呢,我们用“==”判断,也就是x==y;相等就是真,不想等就是假,也就是说这个式子(这个式子叫逻辑表达式或者判断表达式,随你好了)是有值的,那用什么来存放这个值呢,当然是bool类型了,它表示的是真假,如下:
int x = 3; int y = 2; bool b = x == y; Console.WriteLine(b); //////运行结果是:false
是不是有点看的迷糊了?简单来说,=是赋值的,==是判断相等的
如果没有理解==,我们在以后的逻辑运算符还会详细讲解,不用担心,还是我说的,愉快的学习吧。
总结
主要阐述了一下内容:
- 什么是变量
- 变量有哪些类型
- 怎么声明变量和赋值
- 赋值和判断相等的区别(=和==)
这些都会了,恭喜你,又前进了一步。
思考
我不清楚你是否在想这样一个问题,已知正方形的面积是10平方厘米,怎么写程序求出变长呢?
提示:这里需要用数学函数,数学函数的使用示例如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MyFirtsProgram { class Program { static void Main(string[] args) { double x;//存放边长 double s = 10;//正方形的面积 x = Math.Sqrt(s); //将面积s开平方(使用的数学函数) Console.WriteLine(x); //输出边长x Console.ReadKey();//让控制台不要一闪而过 } } }
以上示例中使用了开平方的数学函数Math.Sqrt();只需要将被开方数放到括号里,就可以求出平方根。
更多的数学函数【点击这里】
看方法下面的列表,列出了许多数学函数,大家摸索着看看,而且每个点击进去会有详细的示例,所以多看帮助文档,很不错的。下面我再额外的演示一下幂运算的数学函数(Math.Pow)的用法:
double x = 2; double y = 10; double z; z = Math.Pow(x, y);//求2的10次方,结果为1024, Console.WriteLine(z);