130 likes | 308 Vues
TKS. 1. 高级语言. (自学第三讲). 多路开关 ?. 绍兴文理学院. 计算机系计算机应用教研室. 第四章 流程控制语句 ( 二 ). 一、自学目的: 明确多分支的概念; 掌握 switch 结构的用法; 掌握 do…while 循环结构的使用方法;掌握 do…while 循环结构程序设计;程序设计训练。. 二、自学重点: switch 结构的用法; 迭代与穷举算法的思想和方法; do…while 循环结构的使用方法; do…while 循环结构进行程序设计;程序设计训练。. 三、自学难点: 迭代与穷举算法;循环结构进行程序设计;程序设计训练。 四、自学内容:.
E N D
TKS 1 高级语言 (自学第三讲) 多路开关 ? 绍兴文理学院 计算机系计算机应用教研室
第四章 流程控制语句(二) 一、自学目的:明确多分支的概念;掌握switch结构的用法;掌握do…while循环结构的使用方法;掌握do…while循环结构程序设计;程序设计训练。 二、自学重点:switch结构的用法;迭代与穷举算法的思想和方法;do…while循环结构的使用方法;do…while循环结构进行程序设计;程序设计训练。 三、自学难点:迭代与穷举算法;循环结构进行程序设计;程序设计训练。 四、自学内容:
§4.3 switch语句 TKS 3 1、语句格式 switch(表达式) {case 常量表达式1: 语句序列1 case 常量表达式2: 语句序列2 ┆ case 常量表达式n: 语句序列n default: 语句序列n+1 } 2、语句执行过程:计算表达式的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断, 继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同,则执行default后的语句。 00:50
3、匹配一分支执行 TKS 4 switch(表达式) {case 常量表达式1: 语句序列1 break; case 常量表达式2: 语句序列2 break; ┆ case 常量表达式n: 语句序列n break; default: 语句序列n+1 break; } 功能:执行与判断表达式相匹配的一个case子结构中的switch语句 00:50
4、例题 例1 将一个月份数字转换成月份的英文名称C+S3_1 TKS 5 void MonthName(int month) {switch(month) {case 1: cout<<"January\n";break; case 2: cout<<"February\n";break; case 3: cout<<"March\n";break; case 4: cout<<"April\n";break; case 5: cout<<"May\n";break; case 6: cout<<"June\n";break; case 7: cout<<"July\n";break; case 8: cout<<"August\n";break; case 9: cout<<"September\n";break; case 10: cout<<"October\n";break; case 11: cout<<"November\n";break; case 12: cout<<"December\n";break; default: cout<<"Illegal month\n";break; } } 00:50
例2 编写函数测试是数字、空白还是其他字符C+S3_2 TKS 6 void test_char(char c) {switch(c) {case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': cout<<"it \'s a digit\n";break; case ' ': case '\n': case '\t': cout<<"it \'s a white\n";break; default:cout<<"it \'s a char\n"; break; } } 00:50
5、注意 TKS 7 (1) 一个switch结构的执行部分是由一些case子结构和一个可缺省的default子结构所组成的复合语句,它们位于一对花括号之内。 (2) switch中的表达式只整数(包括字符)类型和整型常数表达式。 case 5+6: √ int x=5,y=6; case x+y: × (3)在case后的各常量表达式的值不能相同,否则会出现错误。 (4) case “常量表达式”只是起语句标号作用,并不是在该处进行条件判断。在执行switch语句时,根据switch后面表达式的值找到匹配的人口标号,就从此标号开始执行下去,不再进行匹配。 (5) switch结构允许嵌套。 (6)在case后,允许有多个语句,可以不用{}括起来。 如:case 1: x=x*x;printf(“\n%d”,x;);i++; (7) default子句可以省略不用。 (8)多个case可以共用一组执行语句。 (9)使用break语句,使程序结束switch语句的执行。 00:50
int main(void) {char c; cin>>c; switch(c) {case 'a': case 'A': cout<<"Ada,Algol?\n"; cin>>c; switch(c){ case 'd': case 'D': cout<<"Ada \n"; break; case 'l': case 'L': cout<<"Algol \n"; break; default: cout<<"input error\n"; break; } break; case 'b': case 'B': cout<<"BasiC,BCDL? \n"; cin>>c; switch(c){ case 'a': case 'A': cout<<"BasiC \n"; break; case 'c': case 'C': cout<<"BCDL \n"; break; default: cout<<"I am sorry! \n"; break; } break; case 'c': case 'C': cout<<"C,Cobol,C++,C#? \n"; cin>>c; switch(c){case 'c': case 'C': cout<<"C\n"; break; case 'o': case 'O': cout<<"Cobol \n"; break; case '+': cout<<"C++ \n"; break; case '#': cout<<"C# \n"; break; default: cout<<"I am sorry! \n"; break; } break; default: cout<<"I am sorry! \n"; break; } return 0; } TKS 8 例3 联想猜词游戏C+S3_3 00:50
§4.6 do 语句 TKS 9 1、语句格式 do 语句 while(表达式); 2、执行过程 实现“直到型”循环。先执行循环中的语句,然后再判断表达式是否为真,如果为真则继续循环;如果为假, 则终止循环。因此, do-while循环至少要执行一次循环语句。其执行过程如右图所示。 00:50
例4 用牛顿迭代法计算一个正实数a的平方根,精确到ε=10-5C+S3_4 xk+1=xk-f(xk)/f’(xk)=xk-( -a)/2xk 2 x k 取 =a为初值 迭代终止标志 | -a|<ε TKS 10 分析:建立迭代关系 由于 f(x)=x2-a 由 f(x)==0, f’(x)=2x 得迭代公式: #define E0 0.00005 double sq_root(double a) {double x=a; do x=(x+a/x)/2; while(fabs(x*x-a)>=E0); return(x); } int main(void) {double f=2.0; printf("The root of %lf is %lf\n",f,sq_root(f)); return 0; } =(xk+a/xk)/2 #include<iostream> using namespace std; #include<cmath> 00:50
TKS 11 例5 编写程序将所输入的字符原样输出(标志法)C+S3_5 #include<iostream > using namespace std; int main(void) {int c; do {c=getchar(); putchar(c); }while(c!=EOF); // EOF 一般表示文件结束;其值一般为 return 0; // -1,这里可按“Ctrl-Z”键或F6键作为 } // 输入结束。 注意至少输出一个字符 00:50
例6 输入若干个数,将最大数打印输出C+S3_6 TKS 12 #include<iostream > using namespace std; #define FLAG -32768 int main(void) {int max,n; printf("Input a number:"); cin>>n; max=n; do {if(n>max) max=n; cout<<"Input next number:"; cin>>n; }while(n!=FLAG); cout<<"The max is:"<<max<<endl; return 0; } 00:50
TKS 13 五、自学练习题: 编程题:5014、5019、5020、5026、1103、1119、1140 ? 00:50