文档详情

第三章程序控制结构

金**
实名认证
店铺
PPT
450KB
约40页
文档ID:204187790
第三章程序控制结构_第1页
1/40

第三章 程序控制构造 学习目的 理解构造化程序设计的一般概念 熟悉顺序构造、分支构造与循环构造等三种程序流程控制构造 掌握 C 语言实现分支构造的 if 语句与 switch 语句,能纯熟应用 if 语句与 switch 语句编写程序 掌握 C 语言实现循环构造的 while 语句、for 语句与 do-while 语句,能纯熟应用这三种循环控制构造编写程序 理解三种循环构造的关系,掌握在循环构造中控制程序流程转移的方法3.1 C 语言构造化程序设计根底 程序的控制构造黑箱 单入口单出口的控制构造易于理解 三种根本控制构造:顺序、分支、循环 控制构造可以嵌套,以构成更复杂的控制构造 程序的构造化 三种根本控制构造可以构造任何复杂的构造化算法 构造化程序设计原那么:自顶向下,逐步求精 构造化程序设计过程:首先对任务进展功能分解,然后使用构造化程序设计思想逐一解决各个子问题,最后构造原始问题的解 好处:逻辑性强,可读性好,维护方便3.2 顺序构造 顺序构造的含义 由一组顺序执行的处理块组成,每个处理块可能包含一条或一组语句,完成一项任务 顺序构造是最根本的算法构造 语句与复合语句语句块语句与复合语句语句块 三种语句构造:单语句表达式三种语句构造:单语句表达式; ;、空语句、空语句; ;、复合语句、复合语句 语句序列语句序列 顺序构造程序例如 分别输入两个复数的实部与虚部,计算两个复数的和、差、积、商并输出结果#include #include int main()int main() float a, b, c, d, real, imaginary; float a, b, c, d, real, imaginary; printf(“Input reals and imaginaries of two complexesn printf(“Input reals and imaginaries of two complexesn); ); scanf(“%f,%f,%f,%f scanf(“%f,%f,%f,%f, &a, &b, &c, &d);, &a, &b, &c, &d); printf(“Sum: %f + %fin printf(“Sum: %f + %fin, a + c, b + d);, a + c, b + d); printf(“Difference: %f + %fin printf(“Difference: %f + %fin, a c, b d); , a c, b d); real = a * c b * d; imaginary = a * d + b * c; real = a * c b * d; imaginary = a * d + b * c; printf(“Product: %f + %fin printf(“Product: %f + %fin, real, imaginary); , real, imaginary); real = (a*c + b*d) / (c*c + d*d); imaginary = (b*c a*d) / (c*c + d*d); real = (a*c + b*d) / (c*c + d*d); imaginary = (b*c a*d) / (c*c + d*d); printf(“Quotient: %f + %fin printf(“Quotient: %f + %fin, real, imaginary); , real, imaginary); return 0; return 0; 实际需要输入实际需要输入4 4个实数个实数3.3 分支构造 分支构造选择构造的含义 根据某一条件的判断结果,确定程序的流程,即选择哪一个程序分支中的处理块去执行 最根本的分支构造是二路分支构造 以条件判断为起点,假如判断结果为真,那么执行以条件判断为起点,假如判断结果为真,那么执行A A处理处理块的操作,否那么执行块的操作,否那么执行B B处理块的操作处理块的操作if-else 语句 语句格式:if(表达式) 语句1 else 语句2 表达式必须位于括号内,一般为关系或逻辑表达式 先计算表达式值,假设为真那么执行语句1,否那么执行语句2 语句1与语句2可以为复合语句 语句1与语句2只能有一个被执行 假如仅仅用于确定某条语句是否执行,else分支可以省略if-else 语句例如一 输入一个字符,判断它是否为09之间的数字#include #include int main()int main() char c; char c; printf(“Input a character: printf(“Input a character: ); ); c = getchar(); c = getchar(); if(c = 48 & c = 48 & c = 57) printf(“It is a number.n printf(“It is a number.n); ); else else printf(“No, it is not a number.n printf(“No, it is not a number.n); ); return 0; return 0; 因:字符以因:字符以ASCIIASCII码值存储码值存储且数字的且数字的ASCIIASCII码值码值48574857故:比较故:比较ASCIIASCII码值码值if-else 语句例如二 输入一个整数,输出其绝对值#include #include int main()int main() int n, abs; int n, abs; printf(“Enter integer: printf(“Enter integer: ); ); scanf(“%d scanf(“%d, &n);, &n); abs = n; abs = n; if(abs 0) if(abs 0) abs = abs; abs = abs; printf(“Original integer: %d, absolute value: %dn printf(“Original integer: %d, absolute value: %dn, n, , n, abs);abs); return 0; return 0; if-else if-else 语句 语句格式 if(表达式1) 语句1 else if(表达式2) 语句2 else 语句nif-else if-else 例如 根据百分制成绩给出优秀、通过或不通过成绩#include #include int int mainmain() () float float scorescore; ; printfprintf(“Input score: “);(“Input score: “); scanfscanf(“%(“%f f“, &“, &scorescore); ); if if( (scorescore = 85 & = 85 & scorescore = 100) = 60 & = 60 & scorescore 85) = 0 & = 0 & scorescore 60) 50) 50) if(if(salsal 500) 50) 50) if(if(salsal 500) 50) 50) if(if(salsal 500) 500) salsal += 200; += 200; elseelse salsal += 300; += 300;条件分支嵌套例如 求方程 ax2 + bx + c = 0 的根#include #include #include #include / / 由于用到平方根函数,要用此头文件由于用到平方根函数,要用此头文件int int mainmain() () float float a a, , b b, , c c, , x1x1, , x2x2, , p p, , q q, , mm; ; / / 定义实型变量定义实型变量 printfprintf(“Enter 3 coefficients: “) ;(“Enter 3 coefficients: “) ; scanfscanf(“%(“%f f,%,%f f,%,%f f“, &“, &a a, &, &b b, &, &c c); ); / / 从键盘读入方程的三个系数从键盘读入方程的三个系数 if if( ( a a = 0.0 & = 0.0 & b b = 0 & = 0 & c c = 0 ) = 0 ) / / 分支分支1 1:三个系数全为:三个系数全为0 0 printfprintf(“any value(“any valuen n“);“); elseelse if if( a = 0 & b != 0 ) ( a = 0 & b != 0 ) / / 分支分支2 2:系数:系数a a为为0 0,解一元一次方程,解一元一次方程 printfprintf(“x1 = x2 = %(“x1 = x2 = %f f n n, , c c / / b b); ); elseelse / / 分支分支3 3:解一元二次方程的两个根:解一元二次方程的两个根 mm = = b b * * b b 4.0 * 4.0 * a a * * c c; ;条件分支嵌套例如 if if( ( mm = 0 ) = 0 ) / / 解实根解实根 x1x1 = ( = ( b b + + sqrtsqrt( (mm) ) / ( 2.0 * ) ) / ( 2.0 * a a ); ); x2x2 = ( = ( b b sqrtsqrt( (mm) ) / ( 2.0 * ) ) / ( 2.0 * a a ); ); printfprintf(“x1 = %(“x1 = %f f n n“, “, x1x1 ); ); / / 输出两个实根输出两个实根 printfprintf(“x2 = %(“x2 = %f f n n“, “, x2x2 ); ); elseelse / / 解虚根解虚根 p p = = b b / ( 2.0 * / ( 2.0 * a a ); ); q q = = sqrtsqrt(mm) / ( 2.0 * ) / ( 2.0 * a a ); ); printfprintf(“x1 = %(“x1 = %f f + %+ %f fi in n“, “, p p, , q q); ); printfprintf(“x2 = %(“x2 = %f f % %f fi in n“, “, p p, , q q); ); return 0; return 0; switch 分支语法 计算过程 先计算表达式的值 依次与一组常量比较 假设一样那么执行该分支 否那么转向default分支 退出switch语句 说明 switch后面的表达式必须为整型、字符型或枚举型 case后面必须为常量表达式,那么各个case值必须不同 假如没有default子句,且没有case子句匹配,那么不执行 case分支中的语句可以有多条,不需要花括号switch( switch( 表达式表达式 ) ) case case 常量表达式常量表达式1: 1: 语句组语句组1 1 case case 常量表达式常量表达式2: 2: 语句组语句组2 2 case case 常量表达式常量表达式n n: : 语句组语句组n n default: default: 语句组语句组 switch 分支流程图switch 分支例如一 根据输入的成绩等级,打印相应分数段#include #include int int mainmain() () char char gradegrade; ; printfprintf(“Input the grade(A,B,C,D,E):“)。

下载提示
相似文档
正为您匹配相似的精品文档
相关文档