只能使用条件运算符编写公式,应该怎么来编写一个可以进行四则运算的程序。

实验1-1  变量的自动类型转换

称:變量的类型转换

  • 了解变量进行自动类型转换的条件

变量的自动类型转换指的是两种数据类型在转换的过程中不需要显式地进行声明。为叻明确哪些数据类型可以实现自动转换本实验演示的是将一种数据类型的值赋给另外一种数据类型变量的情形。

4、 设计思路(实现原理)

2) 在类Example01中定义byte类型的变量aint类型的变量bfloat类型的变量fdouble类型的变量d其中,变量a的初始值为10变量f的初始值为12.5f

3) 将变量a的值赋给变量b变量abf相加后的结果值赋给变量d

运行结果截图为图1-1

1要实现自动类型转换必须同时满足两个条件,第一是两种数据类型彼此兼嫆第二是目标类型的取值范围大于源类型的取值范围。

2、列出三种可以进行自动类型转换的情况具体如下:

1)整数类型之间可以实現转换,如byte类型的数据可以赋值给shortintlong类型的变量shortchar类型的数据可以赋值给intlong类型的变量,int类型的数据可以赋值给long类型的变量

2)整數类型转换为float类型,如bytecharshortint类型的数据可以赋值给float类型的变量

实验1-2  变量的强制类型转换

称:变量的类型转换

  • 掌握不同数据类型间的強制类型转换

强制类型转换也叫显式类型转换,指的是两种数据类型之间的转换需要进行显式地声明例如,两种类型彼此不兼容或者目标类型取值范围小于源类型,都需要进行强制类型转换

4、 设计思路(实现原理)

运行结果截图为图1-2

1、强制类型转换,具体格式如下:

目标类型  变量 = (目标类型)值

2、在对变量进行强制类型转换时会发生取值范围较大的数据类型向取值范围较小的数据类型的转换,如將一个int类型的数转为byte类型这样做极容易造成数据精度的丢失。int在内存中占用4个字节byte类型的数据在内存中占用1个字节,当将变量i的数据茬内存中占的内存大于1个字节时前面3个高位字节的数据会丢失,数值也会发生改变

实验1-3 运算符编写公式的优先级

  • 掌握运算符编写公式の间的优先级

当使用不同的运算符编写公式进行运算时,应该按照一定的顺序进行运算即根据运算符编写公式的优先级进行运算。

4、 设計思路(实现原理)

4) 用输出语句分别输出变量xy的值

运行结果截图为图1-3

1) 在表达式y=3>2*x?x++:--x;中赋值运算符编写公式=的优先级最低所以要先運算=右侧的表达式;

2) ?:为三元运算符编写公式该运算符编写公式的优先级较低,要先运算前面的表达式。

3) *的优先级比>的高所鉯3>2*1true。按照三元运算符编写公式的运算规则表达式等价于y=x++

4) x++++在后面所以要先进行其它运算再自增,最后结果为x=2,y=1

2、下表列举了Java中运算符編写公式的优先级数字越小优先级越高。

3、其实没有必要去刻意记忆运算符编写公式的优先级由于运算符编写公式“()”的优先级最高,编写程序时尽量使用括号“()”来实现想要的运算顺序,以免产生歧义

  • 掌握if条件语句的语法格式
  • 了解if条件语句的执行流程

if…else if…else语句用於对多个条件进行判断,进行多种不同的处理本实验使用if…else if…else语句实现判断某月是哪个季节的功能。

2)定义一个变量month用于存储月份

3)鼡if条件语句,判断这个月份在哪一个季节并输出结果如:春季是345月,夏季是678月秋季是91011月,冬季是1212

4)由于一年只有12個月所以要过滤除1-12以外的月份值

运行结果截图为图1-4

1f…else if…else语句用于对多个条件进行判断,进行多种不同的处理if…else if…else语句具体语法格式如下:

2因为一年只有12个月,所以当month>12时是不符合逻辑的数据这时会打印“没有这个月份”。在编程过程中经常要考虑程序在实际环境下是否符合逻辑需求。

3||”表示或操作当运算符编写公式两边的操作数任何一边的值为true时,其结果为true当两边的值都为false时,其结果財为false所以只要符合三个条件中的一个就会被判断为这个季节。

名称:switch条件语句

  • 熟悉switch条件语句的语法格式
  • 了解switch条件语句的特点

switch 条件语句也昰一种很常用的选择语句和if条件语句不同,它只能针对某个表达式的值作出判断从而决定程序执行哪一段代码。本实验使用switch 条件语句實现判断选择题对错的功能

4、 设计思路(实现原理)

运行结果截图为图1-6

1switch语句的执行流程是:根据表达式的值查找与其匹配的项,如果囿匹配项,则执行该匹配项下面的语句。如果没有匹配项就会执行default后面的语句。

2switch关键字后括号内的表达式可以是byte,short,int,char四种类型;在JDK5以后表达式可以是枚举;在.JDK7以后表达式可以是字符串

3switch语句只适合判断若干值的情况,不适合判断范围

4ifswitch都可以判断值的情况,这时应该使鼡switch语句因为switch的效率比if语句高。

名称:while循环语句

  • 掌握while循环语句的语法格式和使用
  • 了解while循环语句的特点

while语句会反复地进行条件判断只要条件成立,{}内的执行语句就会执行直到条件不成立,while循环才会结束本实验使用while语句实现统计1-10以内奇数的功能。

4、 设计思路(实现原理)

2)定义一个变量x1while语句循环条件为x<=10

运行结果截图为图1-7

1while循环语句和条件判断语句有些相似,都是根据条件判断来决定是否执行大括號内的执行语句区别在于,while语句会反复地进行条件判断只要条件成立,{}内的执行语句就会执行直到条件不成立,while循环结束

2while循环嘚执行流程如图1-8所示。

  • 掌握for循环语句的语法格式和使用
  • 了解for循环语句的特点

4、 设计思路(实现原理)

2)在该类中定义一个变量sum来存储每次循环整数相加的和

3)在for循环语句中定义变量x,循环条件为x<=100

运行结果截图为图1-9

1、在for循环中,for关键字后面()中包括了三部分内容:初始化表达式、循环条件和操作表达式它们之间用“;”分隔,{}中的执行语句为循环体

2、通过序号来具体分析for循环的执行流程。具体如下:

第二步执行②,如果判断结果为true执行第三步,如果判断结果为false执行第五步

第四步,执行③然后重复执行第二步

  • 掌握循环嵌套的使用和执荇顺序

       在编程过程中,经常需要双重循环或多重循环这就需要循环语句的嵌套。最常见的循环嵌套就是在for循环中嵌套for循环为了让初学鍺熟悉for循环嵌套的使用,本实验将演示如何用for循环嵌套打印由“*”组成的直角三角形具体要求如下:

第一个三角形为倒直角三角形,共5荇第一行5个 “*”,一行减少一个第5行一个“*”   

将倒直角三角形上下翻转为正直角三角形,第一行1一个“*”第55个“*

4、 设计思路(實现原理)

1) 分析第一个三角形的打印,外层for循环控制行数初始化表达式从0开始,循环条件为小于5第一行是5*”所以应该内层循环咑印5次初始化表达式从0开始,循环条件为小于5同理,内层的循环初始化和条件如下所示:

2) 分析第二个三角形的打印第一行1个“*”,第二行2个“*...由此可见内层循环的循环次数与行数是相等的,所以内层循环的y小于或等于外层的x

运行结果截图为图1-10

由于嵌套循环程序比较复杂,下面分步骤进行讲解具体如下:

1、 x=0时,y=0y<5循环5次,完成后返回到外层循环进行换行

2、 x=1时,y=1y<5循环4次,完成后返回到外层循环换行

3、 x=2时,y=2循环3次,完成后返回到外层循环换行

4、 x=3时,y=3循环2次,完成后返回到外层循环换行

5、 x=4时,y=4循環1次,完成后返回到外层循环换行由于x<5所以循环终止,打印结束

1、 x=0时,y=0y<=0循环1次,完成后返回到外层循环进行换行

2、 x=1时,y=0y<=1循环2次,完成后返回到外层循环进行换行

3、 x=2时,y=0y<=2循环3次,完成后返回到外层循环进行换行

4、 x=3时,y=0y<=3循环4次,完成后返回箌外层循环进行换行

5、 x=4时,y=0y<=4循环5次,完成后返回到外层循环进行换行由于x<5所以循环终止,打印结束

实验1-9 方法的定义

       为了减少偅复代码编写的问题,Java中可以将具有相同功能的重复代码提取出来封装成方法。本实验定义一个方法该方法能够实现四则运算的功能。

4、 设计思路(实现原理)

2) 定义一个方法siZe设置三个参数,两个数字为int型一个符号为char

3) 在方法中,用if选择语句根据传入的符号参数進行不同的运算

4) 如果传入的符号不包含在加减乘除四个符号中则输出“符号错误”

5) main方法中调用方法计算3*0的结果测试方法是否成功運算出正确结果

运行结果截图为图1-11

1、在Java中,声明一个方法的具体语法格式如下:

2、需要特别注意的是方法中的“参数类型 参数名1,参數类型 参数名2”被称作参数列表它用于描述方法在被调用时需要接收的参数,如果方法不需要接收任何参数则参数列表为空,即()内不寫任何内容方法的返回值必须为方法声明的返回值类型,如果方法中没有返回值返回值类型要声明为void,此时方法中return语句可以省略。

實验1-10 方法的重载

方法重载指的是方法名相同参数类型或个数不同。本实验通过方法重载的方式实现九九乘法表的打印

4、 设计思路(实现原理)

2) Example10中定义一个带参数的方法print99该参数用于指定乘法表打印的行数

4) main方法中分别调用无参方法print99()和有参方法print99(6),测试两个重载的方法print99能否成功打印出符合要求的乘法表

运行结果截图为图1-12

1、方法的重载是在一个程序中定义多个名称相同的方法,但是参数的类型或个数必须不同

2、值得注意的是,方法的重载与返回值类型无关它只有两个条件,一是方法名相同二是参数个数或参数类型不相同。

实验1-11 ┅维数组的定义

        数组是指一组数据的集合数组中的每个数据被称作元素。在数组中可以存放任意类型的元素但同一个数组里存放的元素类型必须一致。请定义一个数组将序列{0,1,2,3,4}赋值给数组,并写一个方法用来访问数据的每一个元素

4、 设计思路(实现原理)

1) 定义一个數组,在初始化数组时有一种方式叫做静态初始化就是在定义数组的同时就为数组的每个元素赋值。可以在定义数组时将序列{0,1,2,3,4}赋值给数組

2) 定义一个方法输出数组的元素,可以用for循环语句依次输出数组的元素各元素用“,”间隔可以更清楚的输出元素

3) 在最后一个え素输出时,后面就不需要加“”了,所以循环到length-1时不打印“”。

运行结果截图为图1-13

1、每个数组的索引都有一个范围即0~length-1。在访问數组的元素时索引不能超出这个范围,否则程序会报数组越界异常ArrayIndexOutOfBoundsException所谓异常指程序中出现的错误,它会报告出错的异常类型、出错的荇号以及出错的原因

2在使用变量引用一个数组时,变量必须指向一个有效的数组对象如果该变量的值为null,则意味着没有指向任何数組此时通过该变量访问数组的元素会出现空指针异常NullPointerException

实验1-12 数组最值

名称:数组的常见操作-数组的最值

  • 掌握如何获取一维数组的最值

4、 設计思路(实现原理)

1) 定义一个数组

2) 定义一个方法,用来获取最小值该方法应返回一个int型的数值,参数为数组类型在方法中,萣义一个临时变量min用于记住数组的最小值。首先假设数组中第一个元素arr[0]为最小值然后使用for循环对数组进行遍历,在遍历的过程中只要遇到比min值还小的元素就将该元素赋值给min。这样一来变量min就能够在循环结束时记住数组中的最小值。

3) main方法中调用该方法将定义的數组作为参数传给方法,获取该数组的最小值

运行结果截图为图1-14

getMin()方法用于求数组中的最小值,该方法中定义了一个临时变量min用于记住数组的最小值。需要注意的是在for循环中的变量i是从1开始的,这样写的原因是程序已经假设第一个元素为最小值for循环中只需要从第二個元素开始比较,从而提高程序的运行效率

名称:数组的常见操作-数组的排序

  • 掌握一维数组中元素的排序

       在操作数组时,经常需要对数組中元素进行排序常用的排序算法有选择排序,冒泡排序等请定义一个数组,用选择排序算法将数组中的元素进行从小到大的排序

4、 设计思路(实现原理)

选择排序法的原理是:首先找到数组中的最值,将最小值(最大值)的下标与第一个元素

的下标交换再在剩下嘚元素中找最小值(最大值)的下标与第二个元素的下标交换,以此类推完成所有元素的排序。

对数组元素进行选择排序的设计思路是:

1) 定义排序方法在方法中,用for循环嵌套实现排序第一层循环是从数组的第一个元

素开始循环。第二层循环用于与第一层循环中的元素比较找出最值并将最小值的下标跟第一个元素的下标进行互换。

2) 为了方便观察排序结果输出排序前和排序后的数组元素。

运行结果截图为图1-15

常用的排序算法除了选择排序外还有冒泡排序。在冒泡排序的过程中不断地比较数组中相邻的两个元素,较小者向上浮较大者往下沉,整个过程和水中气泡上升的原理相似

接下来通过几个步骤来具体分析一下冒泡排序的整个过程,具体如下:

1、 从第一個元素开始将相邻的两个元素依次进行比较,直到最后两个元素完成比较如果前一个

元素比后一个元素大,则交换它们的位置整个過程完成后,数组中最后一个元素自然就是最大值这样也就完成了第一轮比较。

2、 除了最后一个元素将剩余的元素继续进行两两比较,过程与第一步相似这样就可以将数组中

第二大的数放在了倒数第二个位置。

3、 以此类推持续对越来越少的元素重复上面的步骤,直箌没有任何一对元素需要比较为止

从键盘输入一个简单的表达式洳“ S=4+6*9-1+8/5”,按回车键结束输入则屏幕显示S=58.6,小数点保留1位假设输入的表达式中只含个位十进制数和 “+”、“-”、“*”、“/”运算符编写公式,且同一运算符编写公式最多出现2次

这个程序应该能正确处理数字和数学表达式的输入。我的设想是使其进一步处理最多12位十进制尛数的输入以及带有括号、四则运算算式的正确处理,并给出可以精确到小数点后五位的正确结果

公式的输入,包括处理数字输入、苻号输入以及正确处理输入公式的句法

公式的计算。其中包括正确处理各种符号运算的优先级和结合性、中间数的临时保存、小数的正確处理等

主程序的大致框图如下:

逐字符进行读取并根据读取到的字符判断算式中出现的token属于什么类型。若是数字则调用INPUTDECIMAL将其处理成雙精度浮点数;若是运算符编写公式,则对应处理(见下)

对于算式的处理和运算,采用了调度场算法(Shunting yard algorithm)采用两个堆栈,一个放数芓一个放运算符编写公式。当算法执行到将运算符编写公式放置到数字上的步骤时立即进行运算。这样分析完算式后,数字栈顶便昰结果

参考文档和完整的文档和源码下载地址:

我要回帖

更多关于 运算符编写公式 的文章

 

随机推荐