




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验2 Java基本语法和算法案例一. 实验目的1. 通过阅读本实验的知识点和例题,借助已有的C语言基础,学习与算法有关的Java语言的基本语法。2. 利用C语言和Java语言的基础知识,尝试用Java语言编写几个简单的算法,来解决现实中所遇到的计算问题。二. 知识点和例题1. 基本数据类型根据存储长度和编码的不同,Java语言的数据(常量、变量)可分为逻辑型、整数型、浮点型和字符型四种基本类型。在不同的类型上定义了不同的运算。1 逻辑型逻辑型用关键字boolean代表,它只能取true和false两个值,true代表真,false代表假,这也是逻辑型唯一的两个常量。C语言无此类型,false和true分别用0和非0代表;C+逻辑型的关键字为bool,机器内部分别用0和1表示false和true,并允许在逻辑型与整型之间自动转换,Java则不允许这种转换。声明和使用逻辑型变量的例子:boolean x = true, y;/ 声明逻辑型变量x和y,x赋予初值truey = 1 = 2;/ 因12,故y被赋予逻辑值false(注意“=”与“=”的区别)System.out.println(x);/ 打印x的值(true)System.out.println(y); / 打印y的值(false)2 整数型整数型有byte、short、int 和long四种子类型,机器内部分别用1、2、4、8字节保存它们。长度不同造成表示数据范围不同,每种类型都有其固定的取值范围:关键字长度(bits)取值范围byte8-128127short16-3276832767int32-21474836482147483647long64-92233720368547758089223372036854775807声明和使用整数型变量的例子:byte b1 = -128, b2 = 127;System.out.println(b1);/ 输出-128System.out.println(b2);/ 输出127short s1 = -32768, s2 = 32767;System.out.println(s1);/ 输出-32768System.out.println(s2);/ 输出32767int i1 = -2147483648, i2 = 2147483647;System.out.println(i1);/ 输出-2147483648System.out.println(i2);/ 输出2147483647int i3 = i1, i4 = i2;/ i3 = -2147483648, i4 = 2147483647i3-; i4+;/ 若计算正确,则i3 = -2147483649, i4 = 2147483648System.out.println(i3);/ 输出2147483647()System.out.println(i4);/ 输出-2147483648()long l1 = i1, l2 = i2; / l1 = -2147483648, l2 = 2147483647l1-; l2+;/ 若计算正确,则l1 = -2147483649, l2 = 2147483648System.out.println(l1);/ 输出-2147483649()System.out.println(l2);/ 输出2147483648()即输出结果为:-128127-3276832767-214748364821474836472147483647-2147483648-21474836492147483648int型变量i3和i4的值之所以出错,是因为它们超出了int型的取值范围。3 浮点型浮点型用来表示实数的近似值,它分为单精度(float)和双精度(double)两种类型,机器内部分别用4字节和8字节来保存。对于浮点型来说,长度不同不仅造成实数表示范围(数量级)的不同,也造成实数表示精度(有效数字)的不同:关键字长度(bits)取值(绝对值)精度(十进制位数)float321.410-453.410+387double644.910-3241.810+30815和C语言一样,浮点常量既可以按照习惯法书写,也可按照“科学法”书写。在浮点常量尾部分别加f和d来区分float和double型常量,默认为double型常量。使用浮点型的例子:float f1 = 3.1415926f; / 习惯法float常量书写float f2 = 0.31415926e+1f; / 科学法float常量书写double d1 = 3.1415926d; / 习惯法double常量书写double d2 = 0.31415926e+1; / 科学法double常量书写(忽略尾部d)double PI = Math.PI; / 用Math类中定义的常量Math.PI表示System.out.println(f1); / 输出3.1415925System.out.println(f2); / 输出3.1415925System.out.println(d1); / 输出3.1415926System.out.println(d2); / 输出3.1415926System.out.println(PI); / 输出3.141592653589793即输出结果为:3.14159253.14159253.14159263.14159263.141592653589793float变量f1和f2分别用习惯法和科学法书写的float常量3.1415926f和0.31415926e+1f赋值,但由于float的精度只有7位,故输出数据的最后一位是不准确的。double变量d1和d2分别用习惯法和科学法书写的double常量3.1415926d和0.31415926e+1赋值,由于double的精度有15位,故输出数据的最后一位是准确的。double变量PI用Math类中的常量Math.PI赋值,由于double的精度是15位,故输出数据的前15位数字都是准确的。4 字符型与C一样,Java的字符型也是用关键字char代表,但与C不同的是,它采用UNICODE编码而不是ASCII编码,因此可用任何一个字符(包括汉字)为它的变量赋值。例如:char x = 我;5 基本数据类型的转换当不同类型的数据做赋值或混合运算时,将遵循精度由低向高转换的原则:byte short int long float double当把精度级别低的数据赋给精度级别高的变量时,这种转换是自动完成的,例如:double x = 100; / int型常量100自动转换为double型100.0后赋给x当把精度级别高的数据赋给精度级别低的变量时,则必须使用强制类型转换,例如:int y = (int)39.2/ double型常量39.2被强制转换为int型39后赋给y2. 数组和字符串1 数组数组是一组同类型变量按下标顺序组成的复合数据类型。Java没有类似于C语言的通过语法数组元素类型 数组名数组元素个数;例如:int A10;来声明的、元素个数固定、保存在栈中的数组,也没有用于创建动态数组并指向数组元素的“指针”。所有数组均需要通过“声明”和“创建”两个步骤来建立。声明一维数组的两种格式:数组元素类型 数组名;例如:int a;或数组元素类型 数组名;例如:int a;声明二维数组的两种格式:数组元素类型 数组名; / 多维数组以此类推例如:double a;或数组元素类型 数组名;例如:double a;多维数组以此类推。声明数组,仅仅是定义了数组的名字和数组元素的数据类型,相当于C语言声明了一个指向动态数组的指针,要使用该数组,还需要通过创建数组,即给该数组分配内存这一步骤。创建一维数组的格式如下:数组名 = new 数组元素类型数组元素个数;例如:a = new int10;创建二维数组的格式如下:数组名 = new 数组元素类型数组第一维元素个数数组第二维元素个数;例如:a = new int510;多维数组以此类推。声明和创建数组也可以一次完成,例如:double a = new double10;/ 声明并创建一维数组double b = new double510; / 声明并创建二维数组使用一个数组是通过下标访问其数组元素。下标的范围为0数组元素个数减1,例如:int a = new int10; / 数组元素为a0a9double b = new double22; / 数组元素为:a00, a01, a10, a11声明、创建和使用数组的例子:int a = new int10;for (int i = 0; i 10; i+) ai = i;声明一个一维数组的同时也可以给数组元素赋一组初始值,称为数组的初始化:数组元素类型 数组名 = 初值表 ;例如:int a = 1, 2, 3, 4, 5, 6 ;这相当于:int a = new int6;a0 = 1; a1 = 2; a2 = 3; a3 = 4; a4 = 5; a5 = 6; 即初始化数组的同时也完成了数组的创建。2 字符串和C语言一样,Java语言本身也不包括字符串类型,但可以使用java.lang包中的String类来创建字符串对象,这点与C+ 相似。字符串的几种创建和赋值方式:String s1 = A string in s1;String s2 = new String(A string in s2);String s3; s3 = new String(); s3 = A string in s3;String s4 = s3;/ 声明s4同时用s3的值为其赋值String s5; s5 = s4;/ 先声明s5,然后将s4的值赋给它3. 运算符和表达式 运算符 算术运算符算术运算符有“+(加)、-(减)、*(乘)、 /(除)和%(求余)”五个,其中求余运算符“%”只对整型有效。另外,同一种算术运算符对于不同的数据类型有着不同的定义,例如: 3/4等于0,而3.0/4.0等于0.75。算术运算符的优先级为:先乘除,后加减;结合性(同级运算的次序)为:自左向右。 增量运算符单目(即相关的操作数只有一个)的增量运算符“+”和“-”完成对变量增1和减1的运算。前置(即运算符在操作数前)增量运算符的增量运算先于其它运算;后置增量运算符的增量运算后于其它运算。使用增量运算符的例子:int x = 3, y = 4, z;z = +x + y-;System.out.println(x); / 输出 4System.out.println(y); / 输出 3System.out.println(z); / 输出 8z等于8的原因是因为x和y的增量运算分别先于和后于二者的加法运算。 关系运算符关系运算符用于比较两个算术表达式的大小,运算结果为一个逻辑值(true或false):运算符: = = !=运算:小于小于等于大于大于等于等于不等于优先级: |_ 优先级相同(高)_| |优先级相同(低)|关系运算符的优先级低于算术运算符和增量运算符;关系运算符的结合性是自左向右。使用关系运算符的例子:int x = 3, y = 4;boolean a, b;a = x y;b = x = y;System.out.println(a); / 输出 trueSystem.out.println(b); / 输出 false 逻辑运算符逻辑运算符用于对一个或两个逻辑值的逻辑运算,运算结果仍为逻辑值(true 或false)。运算符: ! & |运算: 非 与 或优先级: 高 低逻辑运算符的优先级低于关系运算符;逻辑运算符的结合性是自左向右。逻辑运算结果服从布尔运算规则:ab! aa & ba | btruetruefalsetruetruetruefalsefalsefalsetruefalsetruetruefalsetruefalsefalsetruefalsefalse使用关系运算符和逻辑运算符组合的例子:x = 60 & x = 70 & x = 80 & x = 90 & x = 10060 70 80 90 100不及格 及格 中 良 优 赋值运算符赋值运算符=将其右边表达式的值赋给其左边的变量,赋值表达式的值为左边变量的值。赋值运算符可以与算术运算符组合起来而构成“复合运算符”:+=、-=、*=、/=、%=。赋值运算符和复合运算符的左边,都必须是有固定存储地址的变量。赋值运算符的优先级低于逻辑运算符;赋值运算符的结合性是自右向左。使用赋值运算符和复合运算符的例子:int a, b;a = b = 5;/ 首先将5赋给b,右边表达式的值为b的值5,再将该值赋给aSystem.out.println(a); / 输出 5a += 5;/ 复合表达式,相当于 a = a + 5System.out.println(a); / 输出 10 字符串连接运算符运算符“+”除了对数值进行“加”运算外,还可以对字符串进行首尾连接操作。使用字符串连接运算符的例子:int x = 3, y = 4;String s = 3, t = 4;System.out.println(x + y); / 输出7System.out.println(s + t);/ 输出34对同一运算符赋予不同的意义,称为“运算符重载”。 表达式调用Math类中的方法可用来完成更复杂的数学运算(如幂函数、指数函数、对数函数、三角函数的计算等);String类中的方法可用来完成诸如连接、比较、查找、子串等字符串操作。由操作数(运算符运算的对象或方法要求的函数自变量)、运算符、方法调用组合而成的一个有意义的式子称为表达式,表达式的运算结果产生一个值。数学表达式例子:求阶乘的近似值(Stirling公式)/ 从键盘输入一个整型数n,注意:若使用这段源代码,package语句之后必须加上/ import java.io.*;BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in);String s = ;try System.out.print(n = );s = keyboard.readLine();catch (Exception e) int n = Integer.parseInt(s);long facN = (long)(Math.exp(-n) * Math.pow(n, n) * Math.sqrt(2 * Math.PI * n);System.out.print(n);System.out.print(! = );System.out.print(facN);4. 语句语句是从英文statement翻译过来,意指声明、陈述和综述,它被翻译为语句虽不确切,但很难有更好的中文词汇与之对应。事实上,语句代表了程序中的一个处理单位,它可能是: 由分号结尾的标识符声明、表达式、方法调用或命令; 由一对花括号括起的“复合语句”; 由关键字和(复合)语句组成的控制结构。这里仅阐述最后一类语句,其语法与C完全相同。 if条件语句语法:if (逻辑表达式0) 语句0else if (逻辑表达式1) 语句1else if (逻辑表达式 n-1) 语句n-1else 语句n执行机制:计算表达式0,若为true则执行语句0后退出,若为false则计算表达式1,若为true则执行分支1后退出,若为false则计算表达式2,若无else if或表达式0n-1的值均为false,则若有else则执行分支n后退出,若无else则直接退出。if条件语句的例题:从键盘输入一个年份(公元),判断该年是否为闰年/ 从键盘输入一个整型数n,注意:若使用这段源代码,package语句之后必须加上/ import java.io.*;BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in);String s = ;try System.out.print(n = );s = keyboard.readLine();catch (Exception e) int n = Integer.parseInt(s);/ 先打印出n的值System.out.print(n);/ 判断n是否代表闰年并打印判断结果boolean IsLeapYear = (n%4 = 0 & n%100 != 0) | (n%400 = 0);if (IsLeapYear)System.out.print( is a leap year.);elseSystem.out.print( is not a leap year.); switch开关语句语法:switch (表达式) case 常量表达式 0: 语句序列0case 常量表达式 1: 语句序列1case 常量表达式 n-1: 语句序列n-1default: 语句序列n执行机制:计算表达式,若其值等于常量表达式i (i=0, , n-1),则从分支i开始往下顺序执行各个分支,若其值与所有常量表达式均不等,则在有default的情况下执行分支n,否则直接退出。例题:/ 从键盘输入一个整型数n,注意:若使用这段源代码,package语句之后必须加上/ import java.io.*;BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in);String s = ;try System.out.print(n = );s = keyboard.readLine();catch (Exception e) int n = Integer.parseInt(s);/ 判断该数代表星期几并输出switch (n) case 0:System.out.println(星期日(Sunday);break;case 1:System.out.println(星期一(Monday);break;case 2:System.out.println(星期二(Tuesday);break;case 3:System.out.println(星期三(Wednesday);break;case 4:System.out.println(星期四(Thursday);break;case 5:System.out.println(星期五(Friday);break;case 6:System.out.println(星期六(Saturday);break;default:System.out.println(输入数据错误!); for循环语句语法:for (表达式1; 表达式2; 表达式3) 语句一般情况下,“表达式1”为赋值表达式(或变量声明和赋值表达式),“表达式2”为关系表达式,“表达式3”为增量表达式。尾部的语句称为“循环体”。执行机制:a. 计算表达式1;b. 计算表达式2,若值为true则执行语句,否则退出;c. 计算表达式3;d. 回到b。例题:求整数1n的和(用for循环语句实现)。/ 从键盘输入一个整型数n,注意:若使用这段源代码,package语句之后必须加上/ import java.io.*;BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in);String s = ;try System.out.print(n = );s = keyboard.readLine();catch (Exception e) int n = Integer.parseInt(s);/ 计算1n的和并输出int sum = 0;for (int i = 1; i = n; i +)sum += i;System.out.print(整数1n的和为: );System.out.print(sum); while循环语句语法:while (逻辑表达式) 语句尾部的语句称为“循环体”。执行机制:a. 计算逻辑表达式,若值为true则执行语句,否则退出;b. 回到a。例题:求整数1n的和(用while循环语句实现)。/ 从键盘输入一个整型数n,注意:若使用这段源代码,package语句之后必须加上/ import java.io.*;BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in);String s = ;try System.out.print(n = );s = keyboard.readLine();catch (Exception e) int n = Integer.parseInt(s);/ 计算1n的和并输出int sum = 0, i = 1;while (i = n) sum += i; i +;System.out.print(整数1n的和为: );System.out.print(sum);仔细观察就会发现:对该题目来说,for语句求解算法和while语句求解算法的执行机制是完全一样的,因此也可以这样说,for语句实际上是while语句的一种简化表示。 do-while循环语句语法:do 语句 while (逻辑表达式);中部的语句称为“循环体”。执行机制:a. 执行语句;b. 计算逻辑表达式,若值为true则回到a,否则退出。例题:求整数1n的和(用do-while循环结构实现)。/ 从键盘输入一个整型数n,注意:若使用这段源代码,package语句之后必须加上/ import java.io.*;BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in);String s = ;try System.out.print(n = );s = keyboard.readLine();catch (Exception e) int n = Integer.parseInt(s);/ 计算1n的和并输出int sum = 0, i = 1;do sum += i; i +; while (i 100) break;System.out.print(整数1n的和为: );System.out.print(sum);其中循环控制while(true) 也可以写成for(;),二者都会造成所谓“死循环”,因为前者的逻辑表达式true和后者的三个空表达式都会控制循环永远地执行下去。三. 作业1. 仔细阅读“知识点和例题”。必要时可以将例题拷入Eclipse编辑器的Java应用程序框架试运行,验证例题后给出的输出结果,同时根据该结果理解源程序的语法和语义。2. 编写程序解决给定问题 计算月还贷额月还贷额的计算公式如下:其中Mp 月还贷额(Monthly payment)La 总贷款额(Loan amount)Mi 月利率(Monthly interest)Np
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商铺薪酬方案(3篇)
- 淤泥护坡防护措施方案(3篇)
- 再生涤纶短纤维生产线项目初步设计
- 饮品生产线项目投资计划书
- 农村智能改造方案(3篇)
- 锌溴液流储能电站项目环境影响报告书
- 项目投资建设方案(3篇)
- 会场接送安排方案(3篇)
- 血透护理查房讲课文档
- 2025地铁通信工程合同工入职安全培训记录
- 开题报告-中国特色社会主义教育学话语体系研究
- 成都市公安局锦江区分局招聘警务辅助人员真题
- 雨季施工安全注意事项
- DB32-T 4165-2021 多联式空调(热泵)系统工程技术规程
- 数据中心运维服务投标方案
- 疗愈人心的创业:90后打造“青年养老院”
- 支付合规性评估方法探
- 2024年个人与公司走帐协议书模板范本
- 天津市南开区2023-2024学年四年级上学期期末英语试题
- 2024年初中生物教师进城选调考试模拟试题及答案套
- 人教版三年级数学上册第六单元《多位数乘一位数》(大单元教学设计)
评论
0/150
提交评论