《C#零基础入门之百识百例》变量常量 -- 两数交换

Posted 陈言必行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《C#零基础入门之百识百例》变量常量 -- 两数交换相关的知识,希望对你有一定的参考价值。

前言

本文属于C#零基础入门之百识百例系列文章。此系列文章旨在为学习C#语言的童鞋提供一套系统的学习路径。此系列文章都会通过【知识点】【练习题】的形式呈现。有任何问题,你都可以通过评论私信等方式找到我,我会一对一解答你的问题。


系列文章目录:
《C#零基础入门之百识百例》 目录文章传送门

一,变量

变量可以理解为存放数据的容器,并且在将值存放到变量中时还要为变量指定数据类型。

变量和常量是相对的:变量是指所存放的值是允许改变的,而常量表示存入的值不允许改变。

1.1 定义变量

C#中规定变量必须“先定义后使用”。

变量的定义语法如下:

变量类型 变量名;

例:定义一个int类型的变量,变量名为a

int a;

若程序中需要过个同类型变量,则可以使用 “,” 将变量名分隔开

语法定义如下:

变量类型 变量名1, 变量名2, ... ,变量名n;

例:定义三个int型变量,变量名分别为 a, b, c

int a, b, c;

1.2 命名规则

变量名的命名规则遵循C#中标识符的命名规则。

规则如下:

  • 变量首字符必须是字母,下划线或者“@”字符;
  • 其后可以是数字,字母或下划线;
  • 变量名不可与预留关键字重名。

比如:变量名不能是int,但是可以是_int或者@int


1.3 使用变量

  • 变量初始化
    1. 定义时赋值: int num = 1;
    2. 使用时赋值: int num; num = 1

C# 3.0之后支持使用var关键字来定义隐式类型变量,声明隐式类型变量是必须进行初始化。

示例如下:

//声明隐式类型变量i,根据其初始化值10可推断i的真实类型为int
var i = 10;

使用示例

class Program
{
    static void Main(string[] args)
    {    	
        int num = 100;
        Console.WriteLine("整数类型变量 num= "+ num);
        
        num = 200;
        Console.WriteLine("重新赋值变量 num= "+ num);

        bool isOn = true;
        Console.WriteLine("布尔类型变量 isOn=" + isOn);
        
        string name = "陈言必行";
        Console.WriteLine("字符串类型变量 name=" + name);

        var pi = 3.14;
        Console.WriteLine("隐式类型变量 pi=" + pi);
    }
}

二,常量

常量是固定值,程序执行期间不会改变。常量可以是任何基本数据类型。

常量可以被当作常规的变量,只是它们的值在定义后不能被修改。

2.1 const

在C#中,经常通过const关键字和数据类型来声明常量。

声明语法如下:

const 常量类型 常量名 = 常量值;

代码示例如下:

const double PI = 3.14;

const关键字修饰的常量又被称为静态常量(编辑时常量):声明的常量必须在定义时赋值,经过编译后值被固定,任何在const符号常量定义之外的常量值修改都将引起编译错误;

如下图:


2.2 readonly

readonly修饰的常量又被成为 动态常量(运行时常量)

在运行时确定值,只能在声明时或构造函数中初始化,只能在类中定义。

声明语法如下:

readonly 常量类型 常量名 = 常量值;

代码示例如下:

class Program // 类名
{
    readonly int a = 1;  // 声明并初始化
    readonly int b;    
    Program() // 构造函数中初始化
    {
        b = 2;
    }
}

2.3 拓展:两者区别

  1. 初始化
    const:在声明时必须初始化值;
    readonly:可以不初始化值,且可以延迟到构造函数。
  2. 解析:
    const:在编译期间会被解析,并将常量的值替换成初始化的值;
    readonly:延迟到运行的时候。
  3. 效率:
    const:注重的是效率;
    readonly:注重灵活。
  4. 内存:
    const:没有内存消耗;
    readonly:因为需要保存常量,所以有内存消耗。

PS:初学者只需要了解常量的概念,知道constreadonly的区别即可。在后续学习的过程中会慢慢加深理解,实际用过几次后就可完全掌握了。


三,例题 – 两数交换

3.1 问题描述

定义两个变量,并将两个变量的值交换后输出

3.2 题目分析

根据题目要求,由于要交换两个变量中存放的值,最简单的方法是定义一个中间变量来存放交换的值,就像交换两个容器中存放的水需要借着第 3 个容器才能完成。代码如下。

3.3 参考代码

class Program
{
    static void Main(string[] args)
    {
        int a = 10;
        int b = 20;
        Console.WriteLine("交换前:");
        Console.WriteLine("a=" + a + ";b=" + b);
        int temp;
        temp = a;
        a = b;
        b = temp;
        Console.WriteLine("交换后:");
        Console.WriteLine("a=" + a + ";b=" + b);
    }
}

3.4 不用中间值实现

不使用第三个数实现两数交换:一种是使用加减法运算的形式代码如下,还有一种是使用亦或的形式,后续学到的时候会讲解一下。

class Program
{
    static void Main(string[] args)
    {
        int a = 10;
        int b = 20;
        Console.WriteLine("交换前:");
        Console.WriteLine("a=" + a + ";b=" + b);
       
        a = a + b;
        b = b - a;
        a = a - b;
        
        Console.WriteLine("交换后:");
        Console.WriteLine("a=" + a + ";b=" + b);
    }
}

以上是关于《C#零基础入门之百识百例》变量常量 -- 两数交换的主要内容,如果未能解决你的问题,请参考以下文章

《C#零基础入门之百识百例》位和赋值运算符 -- 2的n次幂

《C#零基础入门之百识百例》(六十二)结构体类型变量 -- 学生数据记录

《C#零基础入门之百识百例》(六十三)结构体类型数组 -- 学生数据存储

《C#零基础入门之百识百例》(二十)异常处理 -- 除数为0

《C#零基础入门之百识百例》(二十三)数组排序 -- 选择排序

《C#零基础入门之百识百例》(三十八)常用方法 -- Math类