第3章 运算符、表达式与语句 本章导读 1、算术运算符和算术表达式 2、关系运算符与关系表达式 3、逻辑运算符与逻辑表达式

Slides:



Advertisements
Similar presentations
多元評量與 Greenfoot 簡介 南港高中高慧君. 演講大綱 多元評量 高中階段程式設計教學目標與困境 Greenfoot 快速入門 – 袋熊吃樹葉 – 沙灘螃蟹 Greenfoot 臺灣社群介紹 2.
Advertisements

第一單元 建立java 程式.
项目6 通用堆栈.
第4章 條件判斷與迴圈 Java 2 程式設計入門與應用.
迴圈 迴圈基本觀念 while迴圈 do 迴圈 for迴圈 巢狀迴圈 迴圈設計注意事項 其他控制指令 迴圈與選擇的組合.
四資二甲 第三週作業 物件導向程式設計.
C#程序设计案例教程 第3章 程 序 结 构.
第一章 C语言概述 计算机公共教学部.
南京理工大学 第2章 Java基本语法 本章我们将学习Java编程语言的基本语法,包括变量、操作符、表达式、语句、字符串、数组、控制流以及如何使用帮助文档。 使用下面的编程框架: public class Test{ public static void main(String []args){ //以下添加测试代码.
第 5 章 流程控制 (一): 條件分支.
第二章 JAVA语言基础.
選擇 運算式 邏輯運算 if指令 流程圖基本觀念 程式註解 巢狀if指令 switch指令.
第三章 控制结构.
程式設計實作.
Q1: 追蹤程式: 印出結果? 搶答 while (i<=n) { p=p*i; i=i+2; }
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
程序设计基础.
第三章 C语言基础 学习目标: 熟练掌握:C语言的基本数据类型、运算符及表达式 掌握:常见的输入、输出函数使用方法;
C#程序设计基础 $5 流程控制.
控制流程 邏輯判斷 迴圈控制.
流程控制結構 4-1 流程控制與UML活動圖 4-2 程式區塊與主控台基本輸入 4-3 條件控制敘述 4-4 迴圈控制敘述 4-5 巢狀迴圈
實作輔導 日期: 3/11 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
2018/11/22 Java语言程序设计-程序流程 教师:段鹏飞.
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
第3章 語法入門 第一個Java程式 文字模式下與程式互動 資料、運算 流程控制.
第3章 C语言的基本语句 和程序结构设计.
程式設計實作.
第2章回顾 标识符:不用记,动手 关键字:if, else, switch, for, while, do, break, continue, void, …… 局部变量和成员变量 ①变量作用域 ②内存布局 基本数据类型 ①4类8种 ②互相转换 流程控制语句 ①分支 if……else, switch.
第4章 选择结构程序设计 4.1 关系表达式和逻辑表达式 关系表达式 1.关系运算符 关系运算符是比较两个操作数大小的符号。
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
實作輔導 3 日期: 4/14(星期六) 09:10~12:00、13:10~16:00
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
C语言程序设计基础 刘新国.
第二章 Java语言基础.
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
Java程序设计 第2章 基本数据类型及操作.
Ch02-基礎語法.
第一單元 建立java 程式.
第三章 C# 基础知识.
第4章 PHP流程控制语句.
實作輔導 2 日期: 3/24(星期六) 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
第二章Java基本程序设计.
JAVA 程式設計 資訊管理系 - 網路組.
程式結構&語法.
第9章 位 运 算.
浙江长征职业技术学院-计算机应用系-相方莉制作
第二章 Java基本语法 讲师:复凡.
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 Java语法基础.
第九节 赋值运算符和赋值表达式.
Review 1~3.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
ASP.NET实用教程 清华大学出版社 第4章 C#编程语言 教学目标 教学重点 教学过程 2019年5月5日.
龍老師我不會Debug QQ.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
第二章 Java基本语法 讲师:复凡.
第二章 Java基本语法 讲师:复凡.
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
第2章 Java语言基础.
鸡兔同笼(续) ——选择结构.
迴圈(重複性結構) for while do while.
判斷(選擇性敘述) if if else else if 條件運算子.
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
第二章 Java基础语法 北京传智播客教育
第9章 位 运 算.
第二章 Java基本语法 讲师:复凡.
Presentation transcript:

第3章 运算符、表达式与语句 本章导读 1、算术运算符和算术表达式 2、关系运算符与关系表达式 3、逻辑运算符与逻辑表达式 第3章 运算符、表达式与语句 本章导读 1、算术运算符和算术表达式 2、关系运算符与关系表达式 3、逻辑运算符与逻辑表达式 4、赋值运算符与赋值表达式 5、移位运算符 6、位运算符 7、条件运算符

本章导读 8、instanceof 运算符 9、一般表达式 10、语句概述 11、分支语句 12、循环语句 13、跳转语句

3.1 算术运算符和算术表达式 加减运算符(+、-) 结合性是从左到右 双目运算符,操作元是整型或浮点型数据 优先级是4级 3.1 算术运算符和算术表达式 加减运算符(+、-) 结合性是从左到右 双目运算符,操作元是整型或浮点型数据 优先级是4级 乘、除和求余运算符(*、/、%) 5%2.2 优先级是3级

自增、自减运算符 (++、- -) 都是单目运算符,操作元必须是一个整型或浮点型变量(不能是常量或表达式),作用是使变量的值增1或减1。 运算符的优先级是2级。 运算符可以放在操作元之前(前置式),也可以放在操作元之后(后置式)。 int x=5; int y=x++; int x=5; int y=++x; int x=5; int y=x--; int x=5; int y=--x;

用算术符号和操作元连接起来的符合Java语法规则的式子,称为算术表达式。 x+2*y-30+3*(y+5) -12+n+(--n) 算术混合运算的精度 精度从“低”到“高”排列的顺序是: byte short int long float double Java将按运算符两边的操作元的最高精度保留结果的精度。 5/2的结果是2。 要想得到2.5,必须写成5.0/2或5.0f/2。 char型数据和整型数据运算结果的精度是int。 返回

3.2 关系运算符与关系表达式 关系运算符用来比较两个值的关系,关系运算符的运算结果是boolean型数据,当运算符对应的关系成立时,运算结果是true,否则是false。 大小关系运算符(>、>=、<、<=) 双目运算符,操作元是数值型的常量、变量或表达式。 运算符的优先级是6级。 等与不等关系(==、!=) 都是双目运算符,运算符的级别是7级。 关系表达式 结果为数值型的变量或表达式可以通过关系运算符形成关系表达式。 返回

3.3 逻辑运算符与逻辑表达式 逻辑运算用来实现boolean型数据的逻辑“与”、“或”和“非”运算,运算结果是boolean型数据。 3.3 逻辑运算符与逻辑表达式 逻辑运算用来实现boolean型数据的逻辑“与”、“或”和“非”运算,运算结果是boolean型数据。 逻辑“与”和逻辑“或”(&&、||) 是双目运算符,操作元是boolean型的变量或求值结果是boolean型数据的表达式。 “&&”和“||”的级别分别是11和12级,结合性是左到右。 逻辑运算符“&&”和“||”也称做短路逻辑运算符。 op1&&op2 op1||op2

结果为boolean型的变量或表达式可以通过逻辑运算符形成逻辑表达式。 24>18&&4<0 x!=0||y!=0 逻辑“非”(!) 是单目运算符,操作元在左面。 “!”的运算级别是2级,结合性从右到左。 逻辑表达式 结果为boolean型的变量或表达式可以通过逻辑运算符形成逻辑表达式。 24>18&&4<0 x!=0||y!=0 返回

3.4 赋值运算符与赋值表达式 赋值运算符(= ) 赋值运算符是双目运算符;优先级较低,是14级;结合方向右到左。 3.4 赋值运算符与赋值表达式 赋值运算符(= ) 赋值运算符是双目运算符;优先级较低,是14级;结合方向右到左。 左面的操作元必须是变量(左值),不能是常量或表达式。 赋值表达式 用赋值运算符和操作元连接起来的符合Java语法规则的式子,称为赋值表达式 赋值表达式的值就是“=”左面变量的值。 “=” “==” 返回

3.5 移位运算符 移位运算符用来对二进制位进行操作,分为左移位操作(<<)和右移位操作(>>) 3.5 移位运算符 移位运算符用来对二进制位进行操作,分为左移位操作(<<)和右移位操作(>>) 都是双目运算符,左面的操作元称作被移位数,右面的操 作数称作移位量,操作元必须是整型类型的数据 a<<n; a>>n; a是被移位数,n是移位量。

左移位运算符(<<) a<<n运算的结果是通过将a的所有位都左移n位,每左移一个位,左边的高阶位上的0或1被移出丢弃,并用0填充右边的低位 对于byte或short型数据,a<<n的运算结果是int型精度。运算时,计算系统首先将a升级为int型数据(对于正数将高位用0填充;负数用1填充), 然后再进行移位。 byte a=-8; a<<2; 1111,1000 1111,1111,1111,1111,1111,1111,1111,1000 1111,1111,1111,1111,1111,1111,1110,0000 即得到-25

例如:a<<33的计算结果与a<<1相同 在进行a<<n运算时,如果a是byte、short或int型数据,系统总是先计算出n%32的结果m,然后进行a<<m运算。 例如:a<<33的计算结果与a<<1相同 对于long型数据,系统总是先计算出n%64的结果m,然后进行a<<m运算 右移位运算符(>>) a>>n运算的结果是通过将a的所有位都移右n位,每右移一个位,右边的低阶位上的0或1被移出丢弃,并用0或1填充左边的高位 byte a=9; a>>2; 0000,1001 0000,0000,0000,0000,0000,0000,0000,1001 0000,0000,0000,0000,0000,0000,0000,0010 返回 (例3-1) 即得到2。

例3-1 Example3_1.java import java.util.*; public class Example3_1{ public static void main (String args[ ]){ Scanner reader=new Scanner(System.in); System.out.println("输入待移位的int型整数:"); int x = reader.nextInt(); System.out.println("输入移位量:"); int n = reader.nextInt(); System.out.println("左移位的结果:"+(x<<n)); System.out.println("右移位的结果:"+(x>>n)); } 输出结果: 输入待移位的int型整数: 3 输入移位量: 2 左移位的结果:12 右移位的结果:0

3.6 位运算符 包括“按位与”运算符(&)、 “按位或”运算符(|)、“按 位非”运算符(~)、“按位异或”运算符(^) 3.6 位运算符 包括“按位与”运算符(&)、 “按位或”运算符(|)、“按 位非”运算符(~)、“按位异或”运算符(^) “&”、 “|”、 “^”是双目运算符,对两个整型数据a、b 按位进行运算,运算结果是一个整型数据c;如果b的精 度高于a,那么结果c的精度和b相同 “~”是单目运算符,对一个整型数据a按位进行运算,运 算结果是一个整型数据c

“&”运算法则是:如果a、b两个数据对应位都是1,则c的 该位是1,否则是0 “~”运算法则是:如果a对应位是0,则c的该位是1,否则 是0 例3-2 返回

例3_2 Example3_2.java public class Example3_2{ public static void main(String args[ ]){ char a[ ]={'金','木','水','火','土'}; char secret='z'; for(int i=0;i<a.length;i++){ a[i]=(char)(a[i]^secret); } System.out.printf("密文:\n"); System.out.printf("%3c",a[i]); System.out.printf("\n原文:\n");

for(int i=0;i<a.length;i++){ System.out.printf("%3c",a[i]); } 输出结果: 密文: 醫 杒 汎 瀑 坥 原文: 金 木 水 火 土

3.7 条件运算符 条件运算符是一个3目运算符,它的符号是:“?:” 用法: op1?op2:op3 3.7 条件运算符 条件运算符是一个3目运算符,它的符号是:“?:” 用法: op1?op2:op3 要求第一个操作元op1的值必须是boolean型数据 运算法则是:当op1的值是true时,op1?op2:op3运算的结果是op2的值;当op1的值是false时,op1?op2:op3运算的结果是op3的值 12>8?100:200的结果是100 12<8?100:200的结果是200 返回

3.8 instanceof 运算符 该运算符是双目运算符,左面的操作元是一个对象,右面是一个类。 当左面的对象是右面的类创建的对象时,该运算的结果是true,否则是false。 该运算符将在第4章以后使用。 例: String s=new String("javaisland");        System.out.println(s instanceof String); //true  返回

3.9 一般表达式 Java的一般表达式就是用运算符及操作元连接起来的符合Java规则的式子,简称表达式。 3.9 一般表达式 Java的一般表达式就是用运算符及操作元连接起来的符合Java规则的式子,简称表达式。 一个Java表达式必须能求值,即按着运算符的计算法则,可以计算出表达式的值。 int x=1, y=-2, n=10; x+y+n的值是int型数据9。 int x=2, y; y=x的值是int型数据2。 返回

3.10 语句概述 Java里的语句可分为以下5类: 1、方法调用语句:对象调用类中的方法产生行为。 reader.nextInt(); 3.10 语句概述 Java里的语句可分为以下5类: 1、方法调用语句:对象调用类中的方法产生行为。 reader.nextInt(); 2、表达式语句:一个表达式的最后加上一个分号就构成了一个语句,称作表达式语句;分号是语句不可缺少的部分。 x=2+3; 返回

3、复合语句:可以用“{”和“}”把一些语句括起来构成复合语句,一个复合语句也称作一个代码块。 { z=23+x; System.out.println(“Hello”); } 4、控制语句:条件分支语句、循环语句和跳转语句 5、package语句和import语句

3.11 分支语句 条件分支语句(if-else) 格式:if (表达式) <语句1> else <语句2> 3.11 分支语句 条件分支语句(if-else) 格式:if (表达式) <语句1> else <语句2> 流程图: 表达式的值必须是boolean型的 多个if-else语句嵌套可以形成多条件if-else语句 例3-3:用户在键盘输入3个数,程序判断这3个数能构成什么形状的三角形? true false 表达式 语句1 语句2

import java.util.*; public class Example3_3{ public static void main (String args[ ]){ Scanner reader=new Scanner(System.in); double a=0,b=0,c=0; System.out.print("输入边a:"); a=reader.nextDouble(); System.out.print("输入边b:"); b=reader.nextDouble(); System.out.print("输入边c:"); c=reader.nextDouble(); if(a+b>c&&a+c>b&&b+c>a){ if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b){ System.out.printf("%-8.3f%-8.3f%-8.3f构成是直角三角形",a,b,c); }

else if(a*a<b*b+c*c&&b*b<a*a+c*c&&c*c<a*a+b*b){ System.out.printf("%-8.3f%-8.3f%-8.3f构成锐角三角形",a,b,c); } else{ System.out.printf("%-8.3f%-8.3f%-8.3f构成钝角三角形",a,b,c); System.out.printf("%f,%f,%f不能构成三角形",a,b,c);

输出结果: 输入边a:3 4 5 输入边b:输入边c:3.000 4.000 5.000 构成是直角三角形 输出结果: 输入边a:1 2 3 输入边b:输入边c:1.000000,2.000000,3.000000不能构成三角形 输出结果: 输入边a:3 8 10 输入边b:输入边c:3.000 8.000 10.000 构成钝角三角形

有一函数: x ( x<1 ) y = 2x-1 ( 1≤x<10 ) 3x-11 ( x≥10 ) 写一程序在键盘输入x的值,求y值。

import java.util.*; public class Ex31 { public static void main (String args[ ]) Scanner reader=new Scanner(System.in); double x,y; System.out.print("输入x:"); x=reader.nextDouble(); System.out.print("输入y:"); y=reader.nextDouble(); if (x>=1) if (x<10) y=2*x-1; else y=3*x-11; else y=x; }

输出结果: 输出结果: 输入x:2 y=3.000000 输入x:0.5 y=0.500000 输出结果: 输入x:11 y=22.000000

switch开关语句 格式: switch (<表达式>) { case 常量值1:若干语句 break; case 常量值2:若干语句 … … … case 常量值n:若干语句 default: 若干语句 }

switch语句中表达式的值必须是整型或字符型。 常量值1到常量值 n必须也是整型或字符型。 执行过程: switch语句首先计算表达式的值,如果表达式的值和某个case 后面的常量值相同,就执行该case里的若干个语句,直到碰到break语句为止。 若没有任何常量值与表达式的值相同,则执行default后面的若干个语句;其中default是可有可无的,如果它不存在,并且所有的常量值都和表达式的值不相同,那么switch语句就不会进行任何处理。 需要注意的是,在同一个switch语句中,case后的常量值必须互不相同。 例3-4:使用switch语句,用户在键盘输入一个代表月份的整数,程序输出是该月是在年度的第几季度? 返回

import java.util.*; public class Example3_4{ public static void main (String args[ ]){ Scanner reader=new Scanner(System.in); System.out.println("输入一个月份:"); int n=reader.nextInt(); switch(n){ case 1 : case 2 : case 3 :System.out.printf("%d月属于第一季度",n); break; case 4 : case 5 : case 6 :System.out.printf("%d月属于第二季度",n);

case 7 : case 8 : case 9 :System.out.printf("%d月属于第三季度",n); break; case 10 : case 11 : case 12 :System.out.printf("%d月属于第四季度",n); default: System.out.printf("%d不代表月份",n); } 输出结果: 输入一个月份: 4 4月属于第二季度

3.12 循环语句 while循环 格式: while (表达式) {若干语句} 流程图: false 表达式 3.12 循环语句 while循环 格式: while (表达式) {若干语句} 流程图: 表达式的值为boolean型数据 false 表达式 true 循环体

do-while循环 格式: do{ 若干语句 } while(表达式); do-while循环和while循环的区别是:do-while的循环体至少被执行一次。 流程图: 例3-5:分别用while和do-while循环计算常数e的近似值:e=1+1/1+1/2!+1/3!+… … do 语句入口 循环体 true 表达式 false 向下执行

public class Example3_5{ public static void main (String args[]){ double sum=0,item=1; int i=1; while(i<=1000){ sum=sum+item; i++; item=item*(1.0/i); } sum=sum+1; System.out.println("e="+sum); sum=0; i=1; item=1;

do{ sum=sum+item; i++; item=item*(1.0/i) ; } while(i<=1000); sum=sum+1; System.out.println("e="+sum); } 输出结果: e=2.7182818284590455

for循环 格式:for (表达式1;表达式2;表达式3){ 若干语句} “表达式2”必须是一个求值为boolean型数据的表达式 流程图: 表达式1 false 表达式2 true 循环体 表达式3

例3-6:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6=1+2+3。下面使用for循环计算出1000内的全部完数 。 返回

public class Example3_6{ public static void main (String args[ ]){ int sum,i,j; for(i=1;i<=1000;i++){ for(j=1,sum=0;j<=i/2;j++){ if(i%j==0){ sum=sum+j; } if(sum==i){ System.out.printf("%8d是一个完数%n",i); 输出结果: 6是一个完数 28是一个完数 496是一个完数

3.13 跳转语句 跳转语句是指用关键字break或continue加上分号构成的 语句。 在循环语句的循环体中使用跳转语句。 3.13 跳转语句 跳转语句是指用关键字break或continue加上分号构成的 语句。 在循环语句的循环体中使用跳转语句。 在一个循环中,比如循环50次的循环语句中,如果在某次循环 体的执行中执行了break语句,那么整个循环语句就结束。 在一个循环中,比如循环50次的循环语句中,如果在某次循环 体的执行中执行了continue语句,那么本次循环就结束,即不 再执行本次循环中循环体中continue语句后面的语句,而转入 进行下一次循环。 下面的例3-7、例3-8使用的跳转语句。 返回

public class Example3_7{ public static void main(String args[]){ int sum=0,i=0,max=8888,number=7; while(true){ i++; sum=sum+i; if(sum>=max) break; } System.out.println("1+2+...n<"+max+"的最大整数n是:"+(i-1));

for(i=1,max=200,sum=0;i<=max;i++){ if(i%number!=0){ continue; } sum=sum+i; System.out.println(max+"内能被"+number+"整除的数字之和:"+sum); 输出结果: 1+2+...n<8888的最大整数n是:132 200内能被7整除的数字之和:2842

import java.util.Scanner; public class Example3_8{ public static void main(String args[]){ int n,start,end,middle; int a[]={-2,1,4,5,8,12,17,23,45,56,90,100}; start=0; end=a.length; middle=(start+end)/2; int count=0; Scanner reader=new Scanner(System.in); System.out.print("请输入一个整数:"); n=reader.nextInt();

while(n!=a[middle]){ if(n>a[middle]){ start=middle; } else if(n<a[middle]){ end=middle; middle=(start+end)/2; count++; if(count>a.length/2) break;

if(count>a.length/2) System.out.println(n+"不在数组中"); else System.out.println(n+"是数组中的第"+middle+"个元素"); }

输出结果: 请输入一个整数:12 12是数组中的第5个元素 输出结果: 请输入一个整数:10 10不在数组中