• (原创)c#学习笔记03--变量和表达式04--表达式01--数学运算符


    3.4  表达式

      把变量和字面值(在使用运算符时,它们都称为操作数)与运算符组合起来,就可以创建表达式,它是计算的基本构件。

      本章主要介绍数学和赋值运算符,而逻辑运算符将在第4章中介绍,主要论述控制程序流程的布尔逻辑。

      运算符大致分为如下3类。

        一元运算符,处理一个操作数;

        二元运算符,处理两个操作数;

        三元运算符,处理三个操作数;

      大多数运算符都是二元运算符,只有几个一元运算符和一个三元运算符,即条件运算符(条件运算符是一个逻辑运算符,详见第4章)。下面先介绍数学运算符,它包括一元运算符和二元运算符。

    3.4.1  数学运算符

      有5个简单的数学运算符,其中两个有二元和一元两种形式。表3-6列出了这些运算符,并用一个简短示例来说明它们的用法,以及使用简单的数值类型(整数和浮点数)时它们的结果。

      note: +(一元)运算符有点古怪,因为它对结果没有影响。它不会把值变成正的:如果var2是-1,则+var2仍是-1。但是,这是一个普遍认可的运算符,所以也把它包含进来。
    这个运算符最有用的方面是,可以定制它的操作,本书在后面探讨运算符的重载时会介绍它。

      如果对bool变量使用+(或其他数学运算符),编译器会报错。

      char变量的相加也会有点让人摸不着头脑。记住,char变量实际上存储的是数字,所以把两个char变量加在一起也会得到一个数字(其类型为int)。这是一个隐式转换的示例,稍后将详细介绍这个主题和显式转换,因为它也可以应用到var1、var2和var3都是混合类型的情况。

      二元运算符+在用于字符串类型变量时也是有意义的。此时,表3-7的表项应如下所示。

      但其他数学运算符不能用于处理字符串。

      这里应介绍的另外两个运算符是递增和递减运算符,它们都是一元运算符,可以以两种方式加使用:放在操作数的前面或后面。简单表达式的结果如表3-8所示。

      这些运算符改变存储在操作数中的值。
        ++总是使操作数加1
        --总是使操作数减1

      var1中存储的结果有区别,其原因是运算符的位置决定了它什么时候发挥作用。把运算符放在操作数的前面,则操作数是在进行任何其他计算前受到运算符的影响,而把运算符放在操作数的后面,则操作数是在完成表达式的计算后受到运算符的影响。

      看个简单的示例,体会下运算符在操作数前面和后面的区别,如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Ch03Ex01 {
        class Progra {
            static void Main( string[] args ) {
                int i, j, m, n;
                i = j = m = n = 3;
                
                int k = 0;
                k = ++i;
                Console.WriteLine( "k = ++i; k is {0}, i is {1}", k, i );
                
                k = 0;  // init
                k = j++;
                Console.WriteLine( "k = j++; k is {0}, j is {1}", k, j );
                
                k = 0;  // init
                k = --m;
                Console.WriteLine( "k = --m; k is {0}, m is {1}", k, m );
                
                k = 0;  // init
                k = n--;
                Console.WriteLine( "k = n--; k is {0}, n is {1}", k, n );
                
                Console.ReadKey();
            }
        }
    }

      运行结果:

      从上面的示例可以看出,前缀是:先对操作数进行处理(示例里:i,m;),再将操作数处理结果返回给表达式( 示例里:返回给k),如下:

          

        

      后缀是:先将操作数的值返回给表达式(示例里:返回给k),再对操作数自己本身进行处理(示例里:j, n ),如下:

        

        

      下面的示例说明如何使用数学运算符,并介绍另外两个有用的概念。代码提示用户键入一个字符串和两个数字,然后显示计算结果,代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Ch03Ex02
    {
        class Program
        {
            static void Main(string[] args)
            {
                double dFirstNumber, dSecondNumber;
                string strUserName;
                Console.WriteLine("Enter your name:");
                strUserName = Console.ReadLine();
                Console.WriteLine("Welcom {0}!", strUserName);
                Console.WriteLine("Now give me a number:");
                dFirstNumber = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("Now give me another number:");
                dSecondNumber = Convert.ToDouble(Console.ReadLine());
    
                Console.WriteLine("The sum of {0} and (1) is {2}."
                    , dFirstNumber, dSecondNumber, dFirstNumber + dSecondNumber);
    
                Console.WriteLine("The result of subtracting of {0} from (1) is {2}."
                    , dSecondNumber, dFirstNumber, dFirstNumber - dSecondNumber);
    
                Console.WriteLine("The product of {0} and (1) is {2}."
                    , dFirstNumber, dSecondNumber, dFirstNumber * dSecondNumber);
    
    
                Console.WriteLine("The resule of dividing {0} by (1) is {2}."
                    , dFirstNumber, dSecondNumber, dFirstNumber / dSecondNumber);
    
                Console.WriteLine("The remainder after dividing {0} by (1) is {2}."
                    , dFirstNumber, dSecondNumber, dFirstNumber % dSecondNumber);
    
                Console.ReadKey();
            }
        }
    }

      运行程序,并输入相关内容,结果如下:

      示例的说明

      除了演示数学运算符外,这段代码还引入了两个重要概念,在以后的示例中将多次用到这些概念。
        用户输入
        类型转换

      用户输入使用与前面Console.WriteLine()命令类似的语法。但这里使用Console.ReadLine()。这个命令提示用户输入信息,并把它们存储在string变量中。

           string strUserName;
                Console.WriteLine( "Enter your name:" );
                strUserName = Console.ReadLine();
                Console.WriteLine( "Welcom {0}!", strUserName );

      这段代码直接将已赋值变量userName的内容写到屏幕上。

      这个示例还读取了两个数字,下面略微展开讨论一下。因为Console.ReadLine()命令生成一个字符串,而我们希望得到一个数字,所以这就引入了类型转换的问题。

    dFirstNumber = Convert.ToDouble( Console.ReadLine() );
    
    dSecondNumber = Convert.ToDouble( Console.ReadLine() );

      对Console.ReadLine()得到的字符串使用命令Convert.ToDouble(),把字符串转换为double类型,把这个数值赋给前面声明的变量。

      注意,输出结果中,我们提供了表达式firstNumber + secondNumber等,作为Console.WriteLine()语句的一个参数,而没有使用中间变量。这种语法可以提高代码的可读性,减少需要编写的代码量。

    Console.WriteLine( "The sum of {0} and (1) is {2}."
                    , dFirstNumber, dSecondNumber, dFirstNumber + dSecondNumber );
  • 相关阅读:
    我罗斯方块最终篇
    我罗斯汇报作业一
    11组-Alpha冲刺-2/6
    11组-Alpha冲刺-1/6
    结对编程作业
    11组 团队展示
    第一次个人编程作业
    第一次博客作业
    寒假作业3
    寒假作业2
  • 原文地址:https://www.cnblogs.com/wodehao0808/p/4889950.html
Copyright © 2020-2023  润新知