Chap 3 分支结构 3.1 简单的猜数游戏 3.2 四则运算 3.3 查询自动售货机中商品的价格.

Slides:



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

Loops.
第 5 章 流程控制 (一): 條件分支.
補充: Input from a text file
第4章 选择结构程序设计 在现实生活中,需要进行判断和选择的情况是很多的 如果你在家,我去拜访你 如果考试不及格,要补考
第一章 程序设计入门.
C语言程序设计 第五章 选择结构程序设计.
主讲教师:吴琼 微信群:C语言2016 QQ群: 密码scu2016 昵称:“真名+学号”
第3章 顺序结构程序设计 本章要点: 格式化输出函数──printf() 格式输入函数——scanf() 字符输出函数——putchar()
適用於多選一 可減少if 與 else配對混淆的錯誤.
第4章 选择结构程序设计 4.1 选择结构和条件判断 4.2 用if语句实现选择结构 4.3关系运算符和关系表达式
Chap 10 函数与程序结构 10.1 函数的组织 10.2 递归函数 10.3 宏定义 10.4 编译预处理.
第4章 选择结构程序设计 4.1 选择结构和条件判断 4.2 用if语句实现选择结构 4.3关系运算符和关系表达式
C程序设计.
If … else 選擇結構 P27.
第五章 选择结构程序设计 一、关系运算符和表达式 1、关系运算符 在程序中经常需要比较两个量的大小关系, 以决定程序下一步
C 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
Chap 2 用C语言编写程序 2.1 在屏幕上显示 Hello World! 2.2 求华氏温度 100°F 对应的摄氏温度
C 程式設計— 控制敘述 台大資訊工程學系 資訊系統訓練班.
搜尋資料結構 Search Structures.
Introduction to the C Programming Language
C++ 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
QQ: 李祥 QQ: 欢迎多种方式的学习交流,祝大家学有所成.
Function.
C 語言簡介 - 2.
Chap 8 指针 8.1 寻找保险箱密码 8.2 角色互换 8.3 冒泡排序 8.4 电码加密 8.5 任意个整数求和*
Introduction to the C Programming Language
第二章 顺序结构 1 数据类型和标识符、常量与变量 2 运算符和表达式 3 简单的输入输出 4 程序举例.
第四章 C 语言中的输入和输出.
1. 說明一個一維整數陣列passwd,下標範圍0至49 2. 在屏幕顯示 "Enter password"
C语言 程序设计基础与试验 刘新国、2012年秋.
Chap 3 分支结构 3.1 统计输入的一批字符中各类字符的数量 3.2 查询自动售货机中商品的价格 3.3 分支结构程序设计.
第3讲 C++程序控制结构 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析.
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
第三章 顺序结构程序设计 主讲教师 贾月乐 电话:
第3章 顺序结构程序设计 为了让计算机处理各种数据,首先就应该把源数据输入到计算机中;计算机处理结束后,再将目标数据信息以人能够识别的方式输出。C语言中的输入输出操作,是由C语言编译系统提供的库函数来实现。 3.1 格式化输出——printf()函数 3.2 格式化输入——scanf()函数.
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
第七章 函数及变量存贮类型 7.1 函数基础与C程序结构 7.2 函数的定义和声明 7.3 函数的调用 7.4 函数的嵌套与递归
第二章 基本数据类型及运算 C数据类型概述 基本数据类型 运算符和表达式 混合运算与类型转换 数据的输入输出 顺序程序设计举例.
C语言概述 第一章.
程式結構&語法.
4 條件選擇 4.1 程式基本結構 循序式結構 選擇式結構 重複式結構 4-3
for 迴圈 while迴圈 do-while迴圈 break 與 continue goto 與 標籤 程式觀摩
Introduction to the C Programming Language
Instructor:Po-Yu Kuo 教師:郭柏佑
C语言程序设计 教案 崔武子制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
Chap 5 函数 5.1 计算圆柱体积 5.2 数字金字塔 5.3 复数运算.
輸出與輸入(I/O).
第十四章 若干深入问题和C独有的特性 作业: 函数指针 函数作参数 函数副作用 运算 语句 位段 存储类别 编译预处理
C程序设计.
第2章 基本数据及其运算 本章学习的目标: 1、掌握基本数据的各种表示,基本数据常数的书写方法;
第二章 类型、对象、运算符和表达式.
Introduction to the C Programming Language
第三章 基本的輸出與輸入函數 (Basic Output & Input Function)
第四章 C 语言中的输入和输出.
第4章 顺序结构程序设计 为了让计算机处理各种数据,首先就应该把源数据输入到计算机中;计算机处理结束后,再将目标数据信息以人能够识别的方式输出。C语言中的输入输出操作,是由C语言编译系统提供的库函数来实现。 4.1 格式化输出——printf()函数 4.2 格式化输入——scanf()函数.
第3章 最简单的C程序设计 3.1 顺序程序设计举例 3.2 数据的表现形式及其运算 3.3 C语句 3.4 数据的输入输出.
第五章 逻辑运算和判断选取控制 §5.1 关系运算符和关系表达式
Introduction to the C Programming Language
第1章 数据结构基础概论 本章主要介绍以下内容 数据结构研究的主要内容 数据结构中涉及的基本概念 算法的概念、描述方法以及评价标准.
C/C++基礎程式設計班 字元與字串 講師:林業峻 CSIE, NTU 3/14, 2015.
Chap 7 数 组 7.1 排序问题 7.2 找出矩阵中最大值所在的位置 7.3 进制转换.
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
多重條件選擇敘述
Chap 10 函数与程序结构 10.1 圆形体积计算器 10.2 汉诺塔问题 10.3 长度单位转换 10.4 大程序构成.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
Q1(a) 小偉打算編寫一個程序。該程序把兩個44的表內的數字相加。表3內的數字是由表1和表2應格子內的數字相加而成。例如:
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

Chap 3 分支结构 3.1 简单的猜数游戏 3.2 四则运算 3.3 查询自动售货机中商品的价格

本章要点 什么是分支结构?它的作用是什么? switch 语句中的 break 起什么作用? 逻辑运算和关系运算的相同之处是什么? 它们之间又有什么不同? 字符型数据在内存中是如何存储的?

3.1 简单的猜数游戏 例3-1 简单的猜数游戏。输入你所猜的整数(假定 3.1.1 程序解析 3.1 简单的猜数游戏 例3-1 简单的猜数游戏。输入你所猜的整数(假定 1~100内),与计算机产生的被猜数比较,若相等, 显示猜中;若不等,显示与被猜数的大小关系。 3.1.1 程序解析 3.1.2 二分支结构和if – else语句 3.1.3 多分支结构和else – if 语句

3.1.1 程序解析 多层缩进的书写格式 使程序层次分明 # include <stdio.h> int main(void) { int mynumber = 38; int yournumber; printf("Input your number: "); scanf("%d", &yournumber); if(yournumber == mynumber) printf("Ok! you are right!\n"); else if(yournumber > mynumber ) printf("Sorry! your number is bigger than my number!\n"); printf("Sorry! your number is smaller than my number!\n"); return 0; } 3.1.1 程序解析 Input your number:48 Sorry! your number is bigger than my number! Input your number:38 Ok! you are right! 多层缩进的书写格式 使程序层次分明

3.1.2 二分支结构和 if-else 语句 if (表达式) 语句1 if (表达式) 语句1 else 语句2 一条语句 语句1 真(非0) 假(0) 语句1 表达式 语句2 真(非0) 假(0)

判断数字的奇偶性 例3-2 输入1个整数,判断该数是奇数还是偶数。 读入一个整数 if (该数能被2整除) 则该数为偶数 else 该数为奇数 number % 2 == 0

此处条件内由于只有一条语句,故{ }可省略 源程序-判断数字的奇偶性 #include <stdio.h> int main(void) { int number; printf("Enter a number: "); scanf("%d", &number); if(number % 2 == 0){ printf("Tne number is even. \n"); } else{ printf("Tne number is odd. \n"); return 0; Enter a number: 1028 Tne number is even. Enter a number: 329 Tne number is odd. 此处条件内由于只有一条语句,故{ }可省略

统计学生的成绩 例3-3 输入一个正整数n,再输入n个学生的成绩,计算平均分,并统计不及格成绩的个数。 for(i = 1; i <= n; i++){ 输入1个学生的成绩 grade 累加成绩 total 统计不及格成绩的个数count }

源程序-统计成绩 #include <stdio.h> int main(void) { int count, i, n; double grade, total; printf("Enter n: "); scanf("%d", &n); total = 0; count = 0; for(i = 1; i <= n; i++){ printf("Enter grade #%d: ", i); scanf ("%lf", &grade); total = total + grade; if(grade < 60) count++; } printf("Grade average = %.2f\n", total/n); printf("Number of failures = %d\n", count); return 0; 源程序-统计成绩 Enter n: 4 Enter grade #1: 67 Enter grade #2: 54 Enter grade #3: 88 Enter grade #4: 73 Grade average = 70.50 Number of failures = 1 此处省略else

3.1.3 多分支结构和else – if 语句 else-if 语句是最常用的实现多分支 (多路选择)的方法。 一般格式为: 语句1; else if(表达式2) 语句2; …… else if(表达式n-1) 语句n-1; else 语句n;

else – if 语句 if (表达式1) 语句1 else if(表达式2) 语句2 …… else if(表达式n-1) 语句n-1 else 语句n else – if 语句 假 表达式1 表达式2 语句1 语句2 语句n-1 语句n 真 表达式n-1 n个分支需要n-1次比较

改写例3-1中的判断过程,用else-if实现 … if(yournumber == mynumber) /* 若相等,显示猜中 */ printf("Ok! you are right!\n"); else /* 若不等,比较大小 */ if(yournumber > mynumber ) printf("Sorry! your number is bigger than my number!\n"); else printf("Sorry! your number is smaller than my number!\n"); … if(yournumber == mynumber) printf("Ok! you are right!\n”); else if(yournumber > mynumber ) printf("Sorry! your number is bigger than my number!\n"); else printf("Sorry! your number is smaller than my number!\n");

更改例2-4中的分段计算水费的问题 例3-4 例2-4中提出的分段计算水费的问题。 居民应交水费y(元)与月用水量x(吨)的函数 关系式修正如下,并编程实现。

源程序-分段计算水费 Enter x: -0.5 f(-0.50) = 0.00 Enter x: ? Enter x: 9.5 # include <stdio.h> int main(void) { double x, y; printf("Enter x:"); scanf("%lf", &x); if (x < 0){ y = 0; } else if (x <= 15){ y = 4 * x / 3; else{ y = 2.5 * x - 10.5; printf("f(%.2f) = %.2f\n", x, y); return 0; Enter x: -0.5 f(-0.50) = 0.00 Enter x: ? Enter x: 9.5 f(9.50) = 12.67 Enter x: 21.3 f(21.30) = 42.75

3.2 四则运算 3.2.1 程序解析 3.2.2 字符类型 3.2.3 字符型数据的输入和输出 3.2.4 逻辑运算 3.2 四则运算 例3-5 求解简单的四则运算表达式。 输入一个形式如“操作数 运算符 操作数”的四 则运算表达式,输出运算结果。 3.2.1 程序解析 3.2.2 字符类型 3.2.3 字符型数据的输入和输出 3.2.4 逻辑运算

3.2.1 程序解析 例3-5 输入一个形式如“操作数 运算符 操作数”的四则运算表达式,输出运算结果。 3.2.1 程序解析 例3-5 输入一个形式如“操作数 运算符 操作数”的四则运算表达式,输出运算结果。 # include <stdio.h> int main(void) { double value1, value2; char op; printf("Type in an expression: "); scanf("%lf%c%lf", &value1, &op, &value2); if(op == '+') printf("=%.2f\n", value1 + value2); else if(op == '-') printf("=%.2f\n", value1 - value2); else if(op == '*') printf("=%.2f\n", value1 * value2); else if(op == '/') printf("=%.2f\n", value1 / value2); else printf("Unknown operator\n"); return 0; } Type in an expression: 3.1+4.8 =7.90

3.2.2 字符类型 char op; ( op == '+' ) ( op == '-' ) 字符型数据 char为类型名称; 3.2.2 字符类型 char为类型名称; op为char类型变量 char op; ( op == '+' ) ( op == '-' ) 字符型数据 字符变量:op 字符常量: '+' '-' '*' '/'

字符常量 'a' 'z' 'A' 'Z' '0' '9' ' ' '\n' ASCII字符集:列出所有可用的字符 '0'-'9' 'A'-'Z' 'a'-'z' 区分数字 1 和数字字符 '1'

字符变量 char op; 定义字符变量op,用于存放字符型数据。 op = '+'; 将字符型常量‘+’ 赋值给字符型变量op

3.2.3 字符型数据的输入和输出 调用scanf和printf输入输出字符 double value1, value2; 3.2.3 字符型数据的输入和输出 调用scanf和printf输入输出字符 double value1, value2; char operator; printf(“Type in an expression: ”); scanf(“%lf%c%lf”, &value1, &op, &value2); printf(“%.2f %c %.2f”, value1, op, value2); 操作数和运算符 之间不能出现 空格(' ') Type in an expression: 10.0+5.61 10.00 + 5.61

字符输入函数getchar() 字符输出函数putchar() char ch; ch = getchar(); putchar (ch); 输入一个字符 char ch; ch = getchar( ); 字符输出函数putchar() 输出一个字符 putchar(输出参数); a a? getchar()和putchar()只能处理单个字符的输入和输出,调用一次函数,只能输入或输出一个字符。 字符常量或字符变量

3.2.4 逻辑运算 -1 <= x <= 1 x >= -1 并且 x <= 1 3.2.4 逻辑运算 char ch; printf("Enter a character: "); ch = getchar(); if ((ch >= ’a’ && ch <= ’z’) || (ch >= ’A’ && ch <= ’Z’)) printf( “It is a letter.\n”); else printf(“It is not a letter.\n ”); -1 <= x <= 1 0 -1 1 x x >= -1 并且 x <= 1 x >= -1 && x <= 1

3种逻辑运算符 逻辑与 && 逻辑或 || 逻辑非 ! X X && Y Y X || Y ! X

逻辑运算符的含义 逻辑与 && 逻辑或 || 逻辑非 ! 逻辑与 && 逻辑或 || 逻辑非 ! (x>1)&&(y>1) (x>1)||(y>1) (x>1) !(x>1) 即 x<=1

逻辑运算符的功能 逻辑与 && 逻辑或 || 逻辑非 ! a b a&&b a||b !a 假 假 假 假 真 假 真 假 真 真 逻辑与 && 逻辑或 || 逻辑非 ! a b a&&b a||b !a 假 假 假 假 真 假 真 假 真 真 真 假 假 真 假 真 真 真 真 假

逻辑表达式 逻辑表达式: 用逻辑运算符将逻辑运算对象连接起来的式子。 (ch >= 'a') && (ch <= 'z') 或: ch >= 'a' && ch <= 'z' (ch >= 'a' && ch <= 'z') || ( ch >= 'A' && ch <= 'Z') 判断ch 是否为英文字母,分大小写

条件的表示 例3-6 写出满足下列条件的C表达式。 ch 是空格或者回车。 ch == ' ' || ch == '\n' number是偶数。 number % 2 == 0 year 是闰年,即 year 能被 4 整除但不能被 100 整除,或 year 能被 400 整除。 (year%4 == 0 && year%100 != 0) || (year%400 == 0)

例3-7 输入10个字符,统计其中英文字母、数字字符和其他字符的个数。 #include <stdio.h> int main(void) { int digit, i, letter, other; char ch;   digit = letter = other = 0; printf(“Enter 10 characters: "); for(i = 1; i <= 10; i++){ ch = getchar(); /* 从键盘输入一个字符,赋值给变量 ch */ if((ch >= 'a' && ch <= 'z' ) || ( ch >= 'A' && ch <= 'Z')) letter ++; else if(ch >= '0' && ch <= '9') /* 如果ch是数字字符 */ digit ++; else other ++; } printf("letter=%d,digit=%d,other=%d\n",letter,digit,other); return 0; 例3-7 输入10个字符,统计其中英文字母、数字字符和其他字符的个数。 input 10 characters: Reold 123? letter=5, digit=3, other=2

3.3 查询自动售货机中商品的价格 例3-8 查询自动售货机中商品的价格 3.3.1 程序解析 3.3.2 switch语句 3.3.1 程序解析 3.3.2 switch语句 3.3.3 多分支结构

3.3.1 程序解析 假设自动售货机出售4种商品,薯片(crisps)、爆米花(popcorn)、巧克力(chocolate)和可乐(cola),售价分别是每份3.0、2.5、4.0和3.5元。在屏幕上显示以下菜单,用户可以连续查询商品的价格,当查询次数超过5次时,自动退出查询;不到5次时,用户可以选择退出。当用户输入编号1~4,显示相应商品的价格;输入0,退出查询;输入其他编号,显示价格为0。 [1] Select crisps [2] Select popcorn [3] Select chocolate [4] Select cola [0] Exit

[1] Select crisps [2] Select popcorn [3] Select chocolate [4] Select cola [0] Exit Enter choice: 1 price = 3.0 Enter choice: 7 price = 0.0 [1] Select crisps Enter choice: 0 Thanks #include <stdio.h> int main(void) { int choice, i; double price; for( i = 1; i <= 5; i++) { printf("[1] Select crisps \n"); printf("[2] Select popcorn \n"); printf("[3] Select chocolate \n"); printf("[4] Select cola \n"); printf("[0] exit \n");   printf("Enter choice: "); scanf("%d", &choice);   if(choice == 0) break; switch (choice) { case 1: price=3.0; break; case 2: price=2.5; break; case 3: price=4.0; break; case 4: price=3.5; break; default: price=0.0; break; } printf("price = %0.1f\n", price); printf("Thanks \n");

3.3.2 switch语句 1、在switch语句的每个语句段中都使用break语句 处理多分支选择问题,3种情况 case 常量表达式1:语句段1; break; case 常量表达式2:语句段2 ; break; ....… case 常量表达式n:语句段n ; break; default : 语句段n+1 ; break; }

用else-if 如何实现? switch (choice) { switch(表达式){ case 1: price=3.0; break; case 2: price=2.5; break; case 3: price=4.0; break; case 4: price=3.5; break; default: price=0.0; break; } switch(表达式){ case 常量表达式1:语句段1; break; case 常量表达式2:语句段2 ; break; ....… case 常量表达式n:语句段n ; break; default : 语句段n+1 ; break; } 用else-if 如何实现? 表达式的值=常量表达式 2 的值 表达式 语句段1 语句段2 语句段n 语句段n+1 表达式的值=常量表达式 1 的值 表达式的值=常量表达式 n 的值 其他 break

求解简单表达式 例3-9 输入一个形式如“操作数 运算符 操作数”的四则运算表达式,输出运算结果。 (要求用switch语句实现) 例如: 输入:3.1+4.8 输出:7.9

源程序 错误 case op==‘+’: # include <stdio.h> int main(void) { char op; double value1, value2; printf("Type in an expression: "); scanf("%lf%c%lf", &value1, &op, &value2); switch(op){ case '+': printf("=%.2f\n", value1+value2); break; case '-': printf("=%.2f\n", value1-value2); case '*': printf("=%.2f\n", value1*value2); case '/': printf("=%.2f\n", value1/value2); default: printf("Unknown operator\n"); } return 0; } 源程序 错误 case op==‘+’: Type in an expression: 3.1+4.8 =7.9 如果除数为0?

2、在switch中不使用break switch(表达式){ case 常量表达式1:语句段1; case 常量表达式2:语句段2; ....… case 常量表达式n:语句段n; default : 语句段n+1; }

switch(表达式){ case 常量表达式1:语句段1; case 常量表达式2:语句段2; ....… case 常量表达式n:语句段n; default : 语句段n+1; } switch (choice) { case 1: price=3.0; case 2: price=2.5; case 3: price=4.0; case 4: price=3.5; default: price=0.0; } price=? 表达式的值=常量表达式 2 的值 表达式 语句段1 语句段2 语句段n 语句段n+1 表达式的值=常量表达式 1 的值 表达式的值=常量表达式 n 的值 其他

3、在switch的某些语句段中使用break 例3-10 输入10个字符,分别统计出其中空格或回车、数字字符和其他字符的个数。 比较:例3-7 输入10个字符,统计其中英文字母、数字字符和其他字符的个数。

int main(void) { int blank, digit, i, other; char ch; blank = digit = other = 0; printf("Enter 10 characters: "); for(i = 1; i <= 10; i++){ ch = getchar(); switch (ch){ case ' ' : case '\n': blank ++; break; case '0' : case '1' : case '2' : case '3' : case '4' : case '5' : case '6' : case '7' : case '8' : case '9' : digit ++; default: other ++; } printf("blank=%d, digit=%d, other=%d\n", blank, digit, other); return 0; Enter 10 characters: Reold 123? blank=1, digit=3, other=6

3.3.3 多分支结构 分支结构一般分为二分支和多分支两种结构 二分支结构用基本的 if 语句实现 多分支结构用实现方法: else – if 语句 switch语句 嵌套的 if - else语句

嵌套的 if 语句 if (表达式) 语句1 else 语句2 if 语句 if 语句 例3-1简单的猜数游戏。 … if(yournumber == mynumber) printf("Ok! you are right!\n"); else if(yournumber > mynumber ) printf("Sorry! your number is bigger than my number!\n"); printf("Sorry! your number is smaller than my number!\n");

嵌套的 if – else 语句 if(表达式1) else if(表达式2) 语句1 else 语句2 if(表达式3) 语句3 语句4 真 假 表达式2 语句3 语句1 语句2

例3-11求解简单表达式。要求对除数为0的情况作特别处理。 # include <stdio.h> int main(void) { double value1, value2; char op; printf("Type in an expression: "); scanf("%lf%c%lf", &value1, &op, &value2); if(op == '+') printf("=%.2f\n", value1 + value2); else if(op == '-') printf("=%.2f\n", value1 - value2); else if(op == '*') printf("=%.2f\n", value1 * value2); else if(op == '/') if(value2 != 0) /* 嵌套的if,判断除数是否为0 */ printf("=%.2f\n", value1 / value2); else printf("Divisor can not be 0!\n"); printf("Unknown operator!\n"); return 0; } 例3-11求解简单表达式。要求对除数为0的情况作特别处理。 Type in an expression: 3.1+4.8 =7.9 Type in an expression: 3.4/0 Divisor can not be 0!

else 和 if 的匹配 if(表达式1) else else 与最靠近它的、没有与别的 else 匹配过的 if 匹配 if(表达式1)

改变else 和 if 的配对 例3-12 改写下列 if 语句,使 else 和第1个 if 配对。 if (x < 2) if (x < 1) y = x + 1; else y = x + 2; 每条语句的执行条件? if (x < 2){ if (x < 1) y = x + 1; } else y = x + 2; if (x < 2) if (x < 1) y = x + 1; else; else y = x + 2;

本章总结 分支结构: 分支结构: switch语句 数据类型:char型 运算符与表达式 分支结构程序的综合设计 正确理解if语句和switch语句 的执行机制; 掌握各类关系表达式、逻辑 表达式的运用; 能合理运用分支语句熟练编写 分支结构类的程序; 分支结构: if-else语句 else if 分支结构: switch语句 case后为常量表达式 break的使用 数据类型:char型 运算符与表达式 逻辑运算符、关系运算符 逻辑表达式 分支结构程序的综合设计