【C#学习笔记】【3】从计算1+1=2开始(变量与类型)

在上节中主要简单的介绍了一下使用环境,以及怎么新建一个项目和解决方案。(有人说我没讲.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

    是不是有点看的迷糊了?简单来说,=是赋值的,==是判断相等的

    如果没有理解==,我们在以后的逻辑运算符还会详细讲解,不用担心,还是我说的,愉快的学习吧。

    总结

    主要阐述了一下内容:

    1. 什么是变量
    2. 变量有哪些类型
    3. 怎么声明变量和赋值
    4. 赋值和判断相等的区别(=和==)

    这些都会了,恭喜你,又前进了一步。

    思考

    我不清楚你是否在想这样一个问题,已知正方形的面积是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);
时间: 2024-10-10 18:10:07

【C#学习笔记】【3】从计算1+1=2开始(变量与类型)的相关文章

angular学习笔记(五)-阶乘计算实例(1)

<!DOCTYPE html> <html ng-app> <head> <title>2.3.2计算阶乘实例1</title> <meta charset="utf-8"> <script src="../angular.js"></script> <script src="script.js"></script> </

大数据学习笔记6&#183;社会计算中的大数据(4)

上一篇介绍了LifeSpec项目,这个项目是关于用户理解和用户画像的.这篇是社会计算部分的最后一篇,关于用户连接和图隐私. 用户连接与隐私保护 用户连接与隐私保护有很强的相关性. 上图中,左边有两个网络.对于用户连接,我们的目标是映射这两个网络和连接这些网络中的用户节点.然后,我们就能产生一个更大的网络.这样,用户就能够被连接在一起,我们就可以知道跨网络的用户信息. 但是,如果从隐私的角度来看这个问题,把第一个图看成一个匿名化处理后的图,称其为目标图:把第二张图看成辅助图或者攻击者可获得的信息.

angular学习笔记(五)-阶乘计算实例(2)

<!DOCTYPE html> <html ng-app> <head> <title>2.3.3计算阶乘实例2</title> <meta charset="utf-8"> <script src="../angular.js"></script> <script src="script.js"></script> </

Linux程序设计学习笔记----多线程编程之线程同步之条件变量

转载请注明出处:http://blog.csdn.net/suool/article/details/38582521. 基本概念与原理 互斥锁能够解决资源的互斥访问,但是在某些情况下,互斥并不能解决问题,比如两个线程需 要互斥的处理各自的操作,但是一个线程的操作仅仅存在一种条件成立的情况下执行,一旦错过不可再重现,由于线程间相互争夺cpu资源,因此在条件成立的时候,该线程不一定争夺到cpu而错过,导致永远得不到执行..... 因此需要某个机制来解决此问题,更重要的是,线程仅仅只有一种情况需要执

C++ Primer学习笔记(三) C++中函数是一种类型!!!

C++中函数是一种类型!C++中函数是一种类型!C++中函数是一种类型! 函数名就是变量!函数名就是变量!函数名就是变量! 重要的事情要说三遍... 接 C++ Primer学习笔记(二) 类的构造函数 与类同名,且无返回类型. 同类的成员函数一样,也可以在类中声明,在类外定义. 格式: 类名(): 成员1(成员1初始化值), 成员2(成员2初始化值) { } 以上,冒号至大括号中间的部分,称为构造函数的初始化列表,用于调用类成员的构造函数来初始化. 没有在初始化列表中显式指定初始化的成员,将会

大数据学习笔记4&#183;社会计算中的大数据(2)

本篇继续讨论对用户移动规律的理解:结合地理建模和矩阵分解来做兴趣点推荐. 位置推荐是一类非常受欢迎的应用.在位置推荐中,我们需要理解用户的潜在兴趣并熟悉用户所处的环境.然后,我们就可以根据用户的兴趣和位置的属性发现用户可能感兴趣的地点.与普通推荐任务相比,地理位置在位置推荐中是改进推荐性能的一个重要因素. 在前面一篇中,我们讨论了如何恢复用户行为数据用于移动规律的理解.我们发现,用户移动行为通常集中在像家庭.工作场所和最喜欢的餐馆这样的重要地点.而且,两个地点之间的距离通常很短.所以,我们想要利

大数据学习笔记7&#183;城市计算(1)

前言 众所周知,快速的城市化使得很多人的生活变得现代化,同时也产生了很多挑战,如交通拥挤.能源消耗和空气污染. 城市的复杂性使得应对这些挑战看起来几乎是不可能的.近来,传感技术和大规模计算基础设施的进步产生了各种各样的大数据,从社会化媒体数据到交通数据,从地理数据到气象数据.如果使用得当,我们可以使用这些数据去应对城市中面临的各种挑战. 受到这个机会的激励,我们提出了城市计算的解决方案.它把城市传感.城市数据管理.城市数据分析和服务提供变成一个对人的生活.城市运行系统和环境进行不断重复但不显眼的

大数据学习笔记3&#183;社会计算中的大数据(1)

背景信息 什么是用户行为数据,用户行为数据是怎么积累的.为什么我们需要研究用户理解以及为什么用户理解这么重要.在第二部分,我会介绍我们最近关于移动规律理解应用的研究工作.例如,怎样处理用户轨迹中的数据缺失问题,怎么样为用户推荐有趣的地点.在最后一部分,我会展示我们近期在用户分析和隐私保护方面的研究项目. 这张图展示了每分钟用户在一些网站上产生的数据量. 用户数据是怎么样收集的 二十多年之前,那时候普适计算的概念才刚刚被提出来.马克.维瑟提出了普适计算的概念.那时候已经有了大型机和个人计算机,人们

angular学习笔记(五)-阶乘计算实例(3)

同样是上一个例子,我们要求并非实时的计算结果,而是等到用户确定自己已经输入完毕,然后进行计算: <!DOCTYPE html> <html ng-app> <head> <title>2.3.4计算阶乘实例3</title> <meta charset="utf-8"> <script src="../angular.js"></script> <script sr

大数据学习笔记5&#183;社会计算中的大数据(3)

前两篇文章介绍了我们在用户移动规律的理解方面的研究工作,包括如何处理用户轨迹中的缺失数据以及如何为用户推荐感兴趣的位置.在这一部分,我将展示我们在用户特征研究方面的研究项目. LifeSpec 首先,我想介绍我们近期开展的LifeSpec项目.这个项目的目标是利用社交网络中的用户数据来探索城市生活方式的方方面面. 我们从多个社交网络收集了数据,包括街旁,微博,图书和电影评论网站豆瓣,以及著名的餐馆评论网站点评.我们收集的数据覆盖了超过140万用户,这些用户在我们的数据集中至少有两个账号. 右边这