计 算 第三章程序控制结构 机 序·学习目标 设 计 了解结构化程序设计的一般概念 基 熟悉顺序结构、分支结构与循环结构等三种程序 础 流程控制结构 掌握C语言实现分支结构的语句与 switch语 句,能熟练应用语句与 switch语句编写程序 掌握C语言实现循环结构的whie语句、for语 句与do- while语句,能熟练应用这三种循环控制 结构编写程序 了解三种循环结构的关系,掌握在循环结构中控 制程序流程转移的方法 清华大学计算中心 http://learn.tsinghua.edu.cn 2
清华大学计算中心 http://learn.tsinghua.edu.cn 2 计 算 机 程 序 设 计 基 础 第三章 程序控制结构 • 学习目标 – 了解结构化程序设计的一般概念 – 熟悉顺序结构、分支结构与循环结构等三种程序 流程控制结构 – 掌握 C 语言实现分支结构的 if 语句与 switch 语 句,能熟练应用 if 语句与 switch 语句编写程序 – 掌握 C 语言实现循环结构的 while 语句、for 语 句与 do-while 语句,能熟练应用这三种循环控制 结构编写程序 – 了解三种循环结构的关系,掌握在循环结构中控 制程序流程转移的方法
3.1C语言结构化程序设计基础 机 程 序 程序的控制结构(黑箱) 设 单入口单出口的控制结构易于理解 计 基 三种基本控制结构:顺序、分支、循环 础 控制结构可以嵌套,以构成更复杂的控制结构 程序的结构化 三种基本控制结构可以构造任何复杂的结构化算法 结构化程序设计原则:自顶向下,逐步求精 结构化程序设计过程:首先对任务进行功能分解,然后 使用结构化程序设计思想逐一解决各个子问题,最后构 造原始问题的解 好处:逻辑性强,可读性好,维护方便 清华大学计算中心 http://learn.tsinghua.edu.cn 3
清华大学计算中心 http://learn.tsinghua.edu.cn 3 计 算 机 程 序 设 计 基 础 3.1 C 语言结构化程序设计基础 • 程序的控制结构(黑箱) – 单入口单出口的控制结构易于理解 – 三种基本控制结构:顺序、分支、循环 – 控制结构可以嵌套,以构成更复杂的控制结构 • 程序的结构化 – 三种基本控制结构可以构造任何复杂的结构化算法 – 结构化程序设计原则:自顶向下,逐步求精 – 结构化程序设计过程:首先对任务进行功能分解,然后 使用结构化程序设计思想逐一解决各个子问题,最后构 造原始问题的解 – 好处:逻辑性强,可读性好,维护方便
3.2顺序结构 计算机程序设计基础 顺序结构的含义 由一组顺序执行的处理块组成,每个处理块可能包含 条或一组语句,完成一项任务 顺序结构是最基本的算法结构 入口 出口 A B 顺序结构 ·语句与复合语句(语句块) 三种语句结构:单语句(表达式)、空语句(;)、复合 语句({语句序列}) 清华大学计算中心 http://learn.tsinghua.edu.cn
清华大学计算中心 http://learn.tsinghua.edu.cn 4 计 算 机 程 序 设 计 基 础 3.2 顺序结构 • 顺序结构的含义 – 由一组顺序执行的处理块组成,每个处理块可能包含一 条或一组语句,完成一项任务 – 顺序结构是最基本的算法结构 A B 入口 出口 顺序结构 • 语句与复合语句(语句块) – 三种语句结构:单语句(表达式;)、空语句(;)、复合 语句({语句序列})
计 算 顺序结构程序示例 机 程 序·分别输入两个复数的实部与虚部,计算两个复数的 设 和、差、积、商并输出结果 计 基 #include <stdio. h 础 nt main0 实际需要输入4个实数 float a, b, c, d, real, imaginary printf("Inputreals and imaginaries of two complexesIn); scanf(%of, %of, %of, %op ,&a, &b, &c, &); printf("Sum: %f+%fin",a+c,b+d); printf( Difference: %f+ %ofin"a-c, b-d) real=a*c-b*d; imaginary =ad+b*ci printf("Product: %of+%ofin"real, imaginary); rel=(a“c+b“d)/(cc+d“; imaginary=(bc-a“d)/(cec+d printf("Quotient: %f+%fin",real, imaginary); return O: 清华大学计算中心 http://learn.tsinghua.edu.cn 5
清华大学计算中心 http://learn.tsinghua.edu.cn 5 计 算 机 程 序 设 计 基 础 顺序结构程序示例 • 分别输入两个复数的实部与虚部,计算两个复数的 和、差、积、商并输出结果 #include int main() { float a, b, c, d, real, imaginary; printf(“Input reals and imaginaries of two complexes\n”); scanf(“%f,%f,%f,%f”, &a, &b, &c, &d); printf(“Sum: %f + %fi\n”, a + c, b + d); printf(“Difference: %f + %fi\n”, a – c, b – d); real = a * c – b * d; imaginary = a * d + b * c; printf(“Product: %f + %fi\n”, real, imaginary); real = (a*c + b*d) / (c*c + d*d); imaginary = (b*c – a*d) / (c*c + d*d); printf(“Quotient: %f + %fi\n”, real, imaginary); return 0; } 实际需要输入4个实数
计 算 3.3分支结构 机 序·分支结构(选择结构)的含义 设 根据某一条件的判断结果,确定程序的流程,即选择哪 计 个程序分支中的处理块去执 基 础 最基本的分支结构是二路分支结构 rlli A 真 入口 出口 条件 假 B 分支结构 以条件判断为起点,如果判断结果为真,则执行A处理块 的操作,否则执行B处理块的操作 清华大学计算中心 http://learn.tsinghua.edu.cn 6
清华大学计算中心 http://learn.tsinghua.edu.cn 6 计 算 机 程 序 设 计 基 础 3.3 分支结构 • 分支结构(选择结构)的含义 – 根据某一条件的判断结果,确定程序的流程,即选择哪 一个程序分支中的处理块去执行 – 最基本的分支结构是二路分支结构 – 以条件判断为起点,如果判断结果为真,则执行A处理块 的操作,否则执行B处理块的操作 入口 分支结构 真 假 出口 A B 条件
计 算 ele语句 机 程 序 语句格式:if(表达式)语句1else语句2 设 计·表达式必须位于括号内,一般为关系或逻辑表达式 基 础·先计算表达式值,若为真则执行语句1,否则执行 语句2 ·语句1与语句2可以为复合语句 语句1与语句2只能有一个被执行 如果仅仅用于确定某条语句是否执行,else分支可 以省略 清华大学计算中心 http://learn.tsinghua.edu.cn
清华大学计算中心 http://learn.tsinghua.edu.cn 7 计 算 机 程 序 设 计 基 础 if-else 语句 • 语句格式:if(表达式) 语句1 else 语句2 • 表达式必须位于括号内,一般为关系或逻辑表达式 • 先计算表达式值,若为真则执行语句1,否则执行 语句2 • 语句1与语句2可以为复合语句 • 语句1与语句2只能有一个被执行 • 如果仅仅用于确定某条语句是否执行,else分支可 以省略
计 算 ele语句示例一 机 程 序 输入一个字符,判断它是否为0~9之间的数字 设 include 计 基 nt main0 因:字符以ASC川码值存储 础 且数字的ASC码值4857 printfInput a character:"):故:比较ASC码值 char c c=getchar if(c>=48&&c<=57) printf"It is a number. I); else rintf(No, it is not a number. In) return 0 清华大学计算中心 http://learn.tsinghua.edu.cn
清华大学计算中心 http://learn.tsinghua.edu.cn 8 计 算 机 程 序 设 计 基 础 if-else 语句示例一 • 输入一个字符,判断它是否为0~9之间的数字 #include int main() { char c; printf(“Input a character: ”); c = getchar(); if(c >= 48 && c <= 57) printf(“It is a number.\n”); else printf(“No, it is not a number.\n”); return 0; } 因:字符以ASCII码值存储 且数字的ASCII码值48~57 故:比较ASCII码值
计 算 ele语句示例二 机 程 序 输入一个整数,输出其绝对值 设 include 计 基 int main 真 础 出口 int n, abs, 入口条件假 printf "Enter integer: ) 单分支结构 scanf"%od",&n) abs =ns if(abs <0) abs = -abss printf" Original integer: %d, absolute value: %dn",n, abs); return 0 清华大学计算中心 http://learn.tsinghua.edu.cn
清华大学计算中心 http://learn.tsinghua.edu.cn 9 计 算 机 程 序 设 计 基 础 if-else 语句示例二 • 输入一个整数,输出其绝对值 #include int main() { int n, abs; printf(“Enter integer: ”); scanf(“%d”, &n); abs = n; if(abs < 0) abs = –abs; printf(“Original integer: %d, absolute value: %d\n”, n, abs); return 0; } 入口 单分支结构 真 假 出口 A 条件
计 算 else if-else语句 机 程 序·语句格式 设 计 近f(表达式1)语句1 else if(表达式2)语句2…else语句n 基 础入口 表达式假 复杂分支结构 真 假 <表达式 真 假 语句1语句2 语句n 出口 清华大学计算中心 http://learn.tsinghua.edu.cn 10
清华大学计算中心 http://learn.tsinghua.edu.cn 10 计 算 机 程 序 设 计 基 础 if-else if-else 语句 • 语句格式 – if(表达式1) 语句1 else if(表达式2) 语句2 … else 语句n 入 口 复杂分支结构 真 假 出 口 真 假 假 语 句1 表达式1 表达式2 语 句2 ... 语 句n
计 算 else if-else示例 机 程 序 ·根据百分制成绩给出优秀、通过或不通过成绩 设 #include 计 基 Int main(0 础 float score. printf(Input score: ) scanf( %of &score); if(score >=85 && score =60 &&e score =0 & score 60)printf( No pass m); else printf("Error score. n); return 0 清华大学计算中心 http://learn.tsinghua.edu.cn 11
清华大学计算中心 http://learn.tsinghua.edu.cn 11 计 算 机 程 序 设 计 基 础 if-else if-else 示例 • 根据百分制成绩给出优秀、通过或不通过成绩 #include int main() { float score; printf(“Input score: “); scanf(“%f“, &score); if(score >= 85 && score = 60 && score = 0 && score < 60) printf(“No pass.\n“); else printf(“Error score.\n“); return 0; }