Expressions & Statements

Slides:



Advertisements
Similar presentations
CSIM, PU C Language Introduction to the C Programming Language 重覆敘述 (for,while,break,continue) 適合重複性的計算或判斷.
Advertisements

第 4 章 PHP 基本語法.
第4章 條件判斷與迴圈 Java 2 程式設計入門與應用.
迴圈 迴圈基本觀念 while迴圈 do 迴圈 for迴圈 巢狀迴圈 迴圈設計注意事項 其他控制指令 迴圈與選擇的組合.
第一章 C语言概述 计算机公共教学部.
Performance Evaluation
编译原理上机实习
14 JavaScript语言基础 JavaScript是一种轻量级、解释型的Web开发语言。所谓轻量级,就是语言的体系结构不是很庞杂,例如,没有C、Java等语言中的类、内存管理、系统管理等高深的知识范畴;所谓解释型,就是语言在浏览器或服务器等环境中直接被解释执行,不需要对源代码进行编译操作。
Operators and Expressions
Ch07 PHP程式基礎 網頁程式設計.
C# 程式設計 第一部分 第1-4章 C# 程式設計 - 南華大學資管系.
課程名稱:程式設計 授課老師:________
Visual Basic 6.0 學習範本 第三章 基本資料型態.
struct 可以在同一個名稱下擁有多種資料型態。使用struct能讓資料的存取和處理更為靈活。
第二章 C# 基础知识.
樹狀結構 陳怡芬 2018/11/16 北一女中資訊專題研究.
C++Primer 3rd edition 中文版 Chap 5
C++程序设计 第二讲 清华大学软件学院.
第一次随堂作业(10.16) 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
C++中switch语句的BNF 否极泰来 ——《周易》.
EBNF 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
流程控制結構 4-1 流程控制與UML活動圖 4-2 程式區塊與主控台基本輸入 4-3 條件控制敘述 4-4 迴圈控制敘述 4-5 巢狀迴圈
刘胥影 东南大学计算机学院 面向对象程序设计1 2011~2012第3学期 刘胥影 东南大学计算机学院.
Scope & Lifetime 前言 Local Scope Global Functions & Objects
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
第3章 語法入門 第一個Java程式 文字模式下與程式互動 資料、運算 流程控制.
C 程式設計— 控制敘述 台大資訊工程學系 資訊系統訓練班.
1 巨集 2 資料型態 3 物件、屬性、方法與事件 4 陳述式與副函式 5 其他注意事項 6 範例
JAVA程序设计 第5章 深入理解JAVA语言----补充.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
C 語言簡介 - 2.
第三單元 Control Structure II
第3章 變數、常數與資料型態 3-1 C語言的識別字 3-2 變數的宣告與初值 3-3 指定敘述 3-4 C語言的資料型態
Introduction to the C Programming Language
變數命名 保留字(Reserved Word)
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
程序的三种基本结构 if条件分支语句 switch多路开关语句 循环语句 循环嵌套 break,continue和goto语句
Java程序设计 第2章 基本数据类型及操作.
Programming Languages
陳維魁 博士 儒林圖書公司 第五章 控制結構 陳維魁 博士 儒林圖書公司.
進階 WWW 程式設計 -- PHP 語言結構 靜宜大學資訊管理學系 蔡奇偉副教授 2003
第三章 C# 基础知识.
C++程序语言设计 Chapter 3: The C in C++.
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
第3章 Java語法的JSP程式 3-1 Java語言的基礎 3-2 JSP程式的基本架構 3-3 Java的變數與資料型態
第二章Java基本程序设计.
Chapter 2 & Chapter 3.
程式結構&語法.
Speaker: Liu Yu-Jiun Date: 2009/4/29
4 條件選擇 4.1 程式基本結構 循序式結構 選擇式結構 重複式結構 4-3
Chapter 2 基本語法.
第三章 C++的语句和简单的程序设计 主要内容:
C++语言程序设计 C++语言程序设计 第三章 控制语句 第十一组 C++语言程序设计.
陳維魁 博士 儒林圖書公司 第三章 變數與繫結 陳維魁 博士 儒林圖書公司.
第二章 Java基本语法 讲师:复凡.
第6章 運算式與運算子 [算術與多功能計算機]
第3章 JavaScript基本语句.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 Java语法基础.
挑戰C++程式語言 ──第9章 函數.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
第1章 数据结构基础概论 本章主要介绍以下内容 数据结构研究的主要内容 数据结构中涉及的基本概念 算法的概念、描述方法以及评价标准.
Do While 迴圈 東海大學物理系‧資訊教育 施奇廷.
本章主題 C++的程式結構 資料型態與宣告 算術運算 簡易的輸入輸出指令 程式編譯(Compile)的過程與原理.
第6章 PHP基本語法介紹.
C语言基本语句 判断循环.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
Presentation transcript:

Expressions & Statements Lecture 4

Expressions An expression is composed of one or more operands and yields a result when it is evaluated. The simplest form of an expression is a single literal or variable. More complicated expressions are formed from an operator and one or more operands. cout << 2 a * b “Hello” + “World”

Operators Unary operators Binary operators int a = 3; int *p = &a; int b = *p; double x = 2.3 * 5.0; cout << x; // multiplication // insertion // address-of // dereference

Operators vector<int> v; string s; // do something to v string s; if (v.size( ) > 10) { s = “long”; } else { s = “short”; The conditional operator (ternary) vector<int> v; string s = (v.size( ) > 10) ? “long” : “short”; Syntax (condition) ? (if_true) : (if_false);

Precedence & associativity 优先级 结合性 3 + 4 * 5 20 – 15 – 3 int a[5] = {1, 2, 4, 8, 16}; int b = *(a + 3); int c = *a + 3; // b = 8 // c = 4

Precedence & associativity cout << a == b << endl; error: reference to overloaded function could not be resolved; did you mean to call it? 3.4 + 2 / 5 * 0.6 ok. the result is 3.4. if (a & b != b) // do something else // do something else warning: self-comparison always evaluates to false

Precedence & associativity vector<int> v{1, 2, 4, 8, 16}; vector<int>::const_iterator it = v.begin( ); while (it != v.end( )) { cout << *it << endl; ++it; } 利用优先级写出更简洁的code while (it != v.end( )) cout << *it++ << endl;

Increment & decrement 注意区分表达式的执行结果/效果和表达式的值。 An expression is composed of one or more operands and yields a result when it is evaluated. int a = 3, b = 3; cout << ++a << endl; cout << a << endl; cout << b++ << endl; cout << b << endl; ++a 变量a自增1,表达式的值为自增后的值 4 3 a++ 变量a自增1,表达式的值为自增前的值

Order of evaluation Precedence specifies how the operands are grouped. It says nothing about the order in which the operands are evaluated. In most cases, the order is largely unspecified. int a = Expr1 + Expr2 * Expr3; It is an error for an expression to refer to and change the same object. int a = ++i + i++ * i; // warning: multiple unsequenced modifications to 'i'

Order of evaluation 引用传递,函数改变传入参数的值 值传递,函数不改变传入参数的值 int f(int &x) { return ++x; } int g(int &x) { return x *= 2; } int main( ) { int a = 3; cout << a + f(a) * g(a) << endl; return 0; } int f(int x) { return x + 1; } int g(int x) { return x * 2; } int main( ) { int a = 3; cout << a + f(a) * g(a) << endl; return 0; } 不确定的evaluation顺序,且编译器无法发现。 OK。Evaluation顺序不影响结果。

Short-circuit evaluation The logical AND and OR operators always evaluate their left operand before the right. Moreover, the right operand is evaluated if and only if the left operand does not determine the result. int a = 5, b = 3, c = 7; if ( a++ == 3 || b++ == 3 || c++ == 3) cout << a << “, “ << b << “, “ << c << endl; 6, 4, 7

Assignment The value of an assignment expression is the value of the right-side operand. int a = 5; if ( a = 3 ) cout << “Equal.“; Equal. warning: using the result of an assignment as a condition

Assignment int i = get_value( ); while ( i != 42 ) { // do something } while ( ( i = get_value( ) ) != 42 ) { // do something }

Statements Null statement. Expression statements. ; a + 1; cout << a; ++a; The expression is evaluated but the result is discarded.

Using the null statement vector<int>::const_iterator it = v.begin( ); for ( ; it != v.end( ); ++it) // do something with *it 循环变量的初始化已经在循环头外完成。 if (1 <= a && a <= 5) { // do something } else if (b > 5) { // do something else } else ; // do nothing 补全if-else语句,表示什么也不做。

Scope for (int i = 0; i != 5; ++i) { // do something } cout << i; error: use of undeclared identifier 'i' 1 2 3 4 -1 int i = -1; for (int i = 0; i != 5; ++i) cout << i << endl; cout << i;

Scope // global variable i // local variable i1 // local variable i2 int i = 1; int main( ) { int i = -1; { int i = 0; cout << i << endl; cout << ::i << endl; } cout << i; return 0; // global variable i // local variable i1 // local variable i2 i2生命期结束 1 -1 i1生命期结束

If-else statement 在多重if-else嵌套时要注意if和else的正确配对 int a = 3, b = 4; if (a == 2) { cout << “a == 2\n”; } else if (a == 3) cout << “a == 3\n”; if (b == 3) cout << “b == 3\n”; else cout << “???\n”; 建议if-else语句始终使用括号 C++无视空格缩进,但应使用正确的缩进增强代码的可读性 a == 3 ???

Switch statement switch (Expr) { case Case1: // handle case 1 break; // handle other cases, if any default: // do default execution } Expr必须是整型或者能够被转换成整型 Case1、Case2必须是常数 break语句一般都要有

Switch statement string s = “hello”; switch (s) { case “hello”: cout << “hi\n”; break; case “goodbye”: cout << “bye\n”; default: cout << “…\n”; } error: statement requires expression of integer type

Switch statement int a = 0, b = 1; switch (a) { case 0: cout << a + b << endl; break; case b: cout << a * b << endl; default: cout << a - b << endl; } error: case value is not a constant expression

Switch statement int a = 0, b = 1; switch (a) { case 0: cout << a + b << endl; case 1: cout << a * b << endl; default: cout << a - b << endl; } Case语句提供一个标记,指示程序开始执行的位置。 1 -1

Break, continue & goto A break statement terminates the nearest enclosing while, do-while, for, or switch statement. for (int i = 0; i != 2; ++i) { for (int j = 0; j != 2; ++j) { for (int k = 0; k != 3; ++k){ if (k == 1) break; cout << “(” << i << “, “ << j << “, “ << k << “)\n”; } (0, 0, 0) (0, 1, 0) (1, 0, 0) (1, 1, 0)

Break, continue & goto A continue statement terminates the current iteration of the nearest enclosing loop and immediately begins the next iteration. for (int i = 0; i != 2; ++i) { for (int j = 0; j != 2; ++j) { for (int k = 0; k != 3; ++k){ if (k == 1) continue; cout << “(” << i << “, “ << j << “, “ << k << “)\n”; } (0, 0, 0) (0, 0, 2) (0, 1, 0) (0, 1, 2) (1, 0, 0) (1, 0, 2) (1, 1, 0) (1, 1, 2)

Break, continue & goto A goto statement provides an unconditional jump from to another statement in the same function. for (int i = 0; i != 2; ++i) { for (int j = 0; j != 2; ++j) { for (int k = 0; k != 3; ++k){ if (k == 1) goto break_me_here; cout << “(” << i << “, “ << j << “, “ << k << “)\n”; } break_me_here: // do something (0, 0, 0)

Break, continue & goto 尽可能避免使用goto语句。 从多重循环的深处跳出几乎是goto语句唯一的合理用法。

Next lecture C++ Primer, Chapter 6