560 likes | 755 Views
程序设计语言 (C). 王正杰. 第二章 基本语句. [ 本章重点 ] C 程序设计的基本结构包括:顺序结构的程序设计,选择结构的程序设计: if 语句和 switch 语句,循环结构的程序设计: while 语句、 do—while 语句和 for 语句。 [ 本章难点 ] if 语句灵活多样的使用格式,循环初始化、循环体语句序列的确定,每次执行循环体前的准备工作,有效避免“死循环”的发生,如何使用 continue 和 break 语句控制循环跳过不必要的操作。.
E N D
程序设计语言(C) 王正杰
[本章重点] C程序设计的基本结构包括:顺序结构的程序设计,选择结构的程序设计:if 语句和switch 语句,循环结构的程序设计:while 语句、do—while语句和 for语句。 [本章难点] if 语句灵活多样的使用格式,循环初始化、循环体语句序列的确定,每次执行循环体前的准备工作,有效避免“死循环”的发生,如何使用continue和 break 语句控制循环跳过不必要的操作。
程序是由数据和对数据处理的描述(算法)两部分组成,当程序中的运算较为复杂时,就会出现诸如多个运算的先后顺序、根据不同的情况进行不同的运算、一个或者几个运算需要重复进行多次等问题,要解决这些问题,就需要在程序中用不同结构的语句实现对程序执行流程的控制,一系列语句构成了对程序的算法描述。程序是由数据和对数据处理的描述(算法)两部分组成,当程序中的运算较为复杂时,就会出现诸如多个运算的先后顺序、根据不同的情况进行不同的运算、一个或者几个运算需要重复进行多次等问题,要解决这些问题,就需要在程序中用不同结构的语句实现对程序执行流程的控制,一系列语句构成了对程序的算法描述。
一个程序可以包含一个或者多个语句,一般情况下,语句根据它们的书写次序依次执行,如果要改变语句的执行次序,可以用转移、选择和循环等语句来实现复杂的程序流程控制。C程序的执行控制流程,有3种基本结构:顺序结构、分支结构和循环结构。一个程序可以包含一个或者多个语句,一般情况下,语句根据它们的书写次序依次执行,如果要改变语句的执行次序,可以用转移、选择和循环等语句来实现复杂的程序流程控制。C程序的执行控制流程,有3种基本结构:顺序结构、分支结构和循环结构。
语句1 语句2 …… 语句n 顺序结构程序执行示意图
#include<iostream.h> void main() { floats,r; // 声明s、r为浮点型变量 constfloatpi=3.14159; // 声明pi为符号常量 cout<<“请输入圆的半径(厘米):”; //显示提示 //信息"请输入圆的半径(厘米):" cin>>r; // 获取键盘输入数据并存入变量r s=pi*r*r; // 计算圆的面积 cout<<“面积s=”<<s<<“(平方厘米)”<<endl; // 输出 //计算结果 }
选择结构:if 语句的三种形式 if (表达式) 语句 例:if (x>y) cout<<x; if (表达式) 语句1 else 语句2 例:if (x>y) cout<<x; else cout<<y; if (表达式1) 语句1else if (表达式2) 语句2else if (表达式3) 语句3 …else 语句 n
true或 非0 false或0 表达式 语 句 2 后续操作 语 句 1 第二种选择结构的流程图
#include<iostream.h> voidmain() { floatx; cout<<"请输入一个数:"; cin>>x; if ( x >= 0) cout<<"您输入的是一个正数"<<endl; else cout<<"您输入的是一个负数"<<endl; }
if 语句——嵌套 if (表达式1) { if (表达式2) 语句1 else 语句2 } else { if (表达式3) 语句3 else 语句4 }
false或0 表达式1 true或非0 表达式2 表达式3 false或0 false或0 语 句 1 语 句 3 语 句 2 语 句 4 后续操作 嵌套的if语句流程图 true或非0 true或非0
voidmain() { intscore; cout<<"请输入分数: "; cin>> score; if (score >=0 && score<=100 ) //数据应在0-100之间 { if (score >= 60) cout<<"本门课程考试及格" <<endl; else cout<<"本门课程考试不及格" <<endl; } else cout<<"无效的成绩录入!!" <<endl;}
if语句的悬挂问题 有一函数: y=-1 (x<0) 0 (x=0) 1 (x>0) 编一程序,输入一个x值,输出y值。
解法1 #include "iostream.h" main() { intx,y; cin>>x; if(x<0) y=-1; elseif(x==0) y=0; else y=1; cout<<"x="<<x<<"y="<<y; }
解法2 #include "iostream.h" main() { intx,y; cin>>x; if(x>=0) if(x>0) y= 1; else y= 0; else y=-1; cout<<"x="<<x<<"y="<<y; }
解法3 #include "iostream.h" main() { intx,y; cin>>x; y=-1; if(x!=0) if(x>0) y=1; else y=0; cout<<"x="<<x<<"y="<<y; }
解法4 #include "iostream.h" main() { intx,y; cin>>x; y=0; if(x>=0) if(x>0) y=1; elsey=-1; cout<<"x="<<x<<"y="<<y; }
switch语句 switch ( 表达式 ) { case 常量表达式1: 语句1; break; case 常量表达式2: 语句n; break; default: 语句 n+1; }
false或0 表达式==常量1 true或 非0 false或0 表达式==常量2 语 句 1 break true或 非0 …… 语 句 2 break …… true或 非0 false或0 表达式==常量n 语 句 n break 语 句 n+1 后续操作 switch语句执行流程图
#include <iostream.h> void main() { chargrade; cout<<"请输入一个字母(A-E):"; cin>>grade; switch(grade) { case'a': case'A': cout<<"90-100"<<endl; break; case'b': case'B': cout<<"80-89"<<endl; break;
case'c': case'C': cout<<"70-79"<<endl; break; case'd': case'D': cout<<"60-69"<<endl; break; case'e': case'E': cout<<"<60"<<endl; break; default: cout<<"error"<<endl; } }
循环结构 • 程序设计中经常需要对相同或相似的操作重复执行多次,例如计算10的阶乘10!,就需要执行9次乘法。对于相同操作的重复执行问题需要有其他的解决办法,在程序设计中往往采用重复执行一段代码的机制来解决重复执行问题,代码的重复执行机制一般采取的就是循环方式。循环语句是根据某个条件满足与否来决定是否重复执行一组语句,循环一般由四个部分组成:循环初始化、循环条件、循环体和下一次循环准备。
其中,循环的初始化用于为重复执行的语句提供初始值;循环条件描述了重复操作所需要满足的条件,决定继续或终止循环;循环体指那些需要重复执行的语句;下一次循环准备是为了下一次循环准备数据。一般来说,每一次循环操作都有着使循环操作条件不满足的趋势,否则,循环永远无法终止,出现所谓的“死循环”。其中,循环的初始化用于为重复执行的语句提供初始值;循环条件描述了重复操作所需要满足的条件,决定继续或终止循环;循环体指那些需要重复执行的语句;下一次循环准备是为了下一次循环准备数据。一般来说,每一次循环操作都有着使循环操作条件不满足的趋势,否则,循环永远无法终止,出现所谓的“死循环”。
C语言中提供了三种实现重复操作的循环语句: while语句、do-while语句和for语句。这三种循环语句在表达能力上是等价的,用其中任何一种语句表示的循环操作一定可以用其他两种循环语句表示出来,只不过在解决具体问题时,用其中一种可能会比其他两种更加方便好用。 • 另外在循环结构中还有两个比较特殊的语句break和continue语句,它们专门用于跳出和中断循环操作。
while循环语句 while循环语句的一般格式为: while (表达式) { 语句 } • 其中,while是C的关键字,语句是此循环的循环体,它可以是一条语句,也可以是复合语句。当表达式的值为true或非0时,执行while循环体中的语句,然后判断表达式的值是否仍为true,若为true则重复上述操作,否则退出循环执行后续操作。
false或0(循环结束) 表达式 true或非0 语 句 后 续 操 作 while 语句流程图
用while循环语句编程计算 1+2+3+……+100的值。 #include <iostream.h> void main() { inti=1,s=0; // 循环变量i赋初值1 ,作控制循环次数 //s赋初值0 (用作累加和) while(i<=100) // 循环条件:当i值小于等于100时执行{ s+=i; //累加求和 i++; // 为下一次循环作准备:改变i的值 } cout<< “1+2+3+……+100=”<<s<<endl;//输出结果 }
上述程序的语句:int i=1,s=0;仅在进入循环前执行一次,作用是对循环中涉及到的量赋初值, • 反复执行的操作是:f+=i; i++; • 这两条语句,被称为循环体,循环执行过程中i的值不断发生变化,直到表达式i<=100的值变为false,系统退出循环执行后续的输出操作。 • 使用while循环语句要注意如下两点: • 1)一般情况下循环初始化必须在while语句之前给出,而下一次循环的准备工作则在循环体内进行。 • 2)当循环体仅为一条语句时,循环体两端的花括号{}可以省略。
编程计算n的阶乘 n! void main() { intn; cout<<" 请输入n="; cin>>n; inti=2,f=1; //循环初始化 while(i<=n) //循环条件 { f*=i; i++; //为下一次循环作准备 } cout<< n <<"! ="<<f<<endl; }
do...while循环语句 do { 语句 } while (表达式) ; • 其中:do和while都是C的关键字;语句是do...while循环的循环体,它可以是一条语句,也可以是复合语句。当语句执行到while时,将判断表达式的值是否为true或非0值,若为true,则继续执行循环体,直到某一次表达式的值为false或0时跳出循环,执行后续语句。
false或0(循环结束) 表达式 true或非0 语 句 后 续 操 作 do--while 语句执行流程图
用do-while循环语句编程计算阶乘n! void main() { intn; cout<<" 请输入n="; cin>>n; inti=2,f=1; //循环初始化 do { f*=i; i++; //下一次循环的准备 }while (i<=n); //循环条件 cout<< n <<"!="<<f<<endl; }
计算自然数至少前多少项的和大于1000 void main() { intnum=0,sum=0; do { num++; sum+=num; }while(sum<=1000); cout<<"自然数前"<<num<<"项的和="<<sum<<endl; }
for循环语句 • for循环语句一般格式为: • for (表达式1;表达式2;表达式3) 语句 • 其中:for是C关键字;语句是for循环的循环体,它可以是一条语句,也可以是复合语句。一般情况下,表达式1是对循环控制变量进行初始化,表达式2为循环条件,等于true或非0时,执行循环体,然后计算表达式3,再判断表达式2的值是否仍为true或非0,若是,继续执行循环体,再计算表达式3,如此反复,直到表达式2等于false或0为止。
表达式1 false或0(循环结束) 表达式2 true或非0 语 句 表达式3 后 续 操 作 for 语句执行流程图
用for循环语句编程计算n的阶乘n! void main() { intn,i,f; cout<<" 请输入n="; cin>>n; // i=2,f=1为循环初始化, i<=n是循环条件, for(i=2,f=1;i<=n;i++) //i++是为下一次循环做准备 f*=i; // 循环体:将变量f、i当前的值相乘 //积存入f中 cout<<n<<"的阶乘为"<<f<<endl; }
使用for语句要注意以下几点 • 表达式1、表达式2、表达式3都可以省略,但分号”;”不能省略。若省略表达式1,不影响循环体的正确执行,但循环体中所需要的一些变量及其相关的数值要在for语句之前定义。若省略表达式2,则表达式2的值被认为是“真”,循环将无终止的进行下去,应在循环体中使用break语句。若表达式3省略,应在设计循环结构时保证表达式2的值有等于false可能,以便能退出循环。
表达式1和表达3可以是一个简单的表达式,也可以是逗号表达式,即包含两个或两个以上的简单表达式,中间用逗号分隔。例如:表达式1和表达3可以是一个简单的表达式,也可以是逗号表达式,即包含两个或两个以上的简单表达式,中间用逗号分隔。例如: for(num=1,sum=0;num<=50;num++) sum+=num; • 循环体可以由任何类型的语句组成,因此在循环体内还可以包含循环语句,这样就形成了循环的嵌套。
//程序段1 intnum=1,sum=0; for(;num<=50;num++) sum+=num; intnum=1,sum=0; for(;num<=50;) { sum+=num; num++; } intnum=1,sum=0; for(;;) { sum+=num; num+; if(num>50) break; } //程序段2 //程序段3
continue语句 continue语句忽略循环体中该语句之后的操作,结束本次循环,直接进行下一次循环。一般情况下continue语句与循环语句、选择语句配合使用,以while循环语句为例,continue语句的常见使用形式为: while (表达式1) { 语句1 if (表达式2) continue; 语句2 }
当循环语句的循环体被执行时,在顺序执行了语句1中的操作后,如果表达式2的值为true或非0则执行continue 语句,其结果是立即跳过语句2中的所有操作,直接进行下一次循环;否则(表达式2的值为false或0),则跳过continue 语句,执行语句2中的所有操作,之后进行下一次循环。
false或0(循环结束) 表达式1 true或非0 语句1 true或非0 表达式2 continue ; false或0 结束本次循环 语句2 后 续 操 作 while及continue语句执行流程图
计算由键盘输入十个整数中包含多少个正整数,这些正整数的和是多少 void main() { inta,b=0, sum=0; for(inti=1;i<=10;i++) { cout<<"请输入第"<<i<<"个整数: "; cin>>a; if(a<=0) continue; //a为负数或0,进行下一次循环 b++; //正整数的个数加1 sum+=a; //正整数的和加a的值 } cout<<"输入的正整数的个数为:"<<b<<"\n"; cout<<"这些正整数之和为:"<<sum<<"\n"; }
编程计算并输出1-20之间所有不能被3整除的数 void main() { for(intnum=1;num<=20;num++) { if(num%3==0) continue; cout<<num<<" "; } cout<<endl; }
break语句 • C中规定当break语句出现在循环体中时,其作用是结束整个循环,转去执行循环的后续语句。与continue语句相类似,一般情况下break语句与循环语句、选择语句配合使用。以while循环语句为例,break语句的常见使用形式为: while (表达式1) { 语句1 if (表达式2) break; 语句2 } 循环体
当循环语句的循环体被执行时,在顺序执行语句1中的操作后,如果表达式2的值为true或非0,则执行break 语句,其结果是退出循环转去执行循环的后续操作;否则(表达式2的值为false或0),跳过break 语句,执行语句2中的所有操作,之后进行下一次循环。
false或0(循环结束) 表达式1 true或非0 语句1 true或非0 表达式2 break ; false或0 循环结束 语句2 后 续 操 作 while及break语句执行流程图
判断由键盘输入正整数是否是素数 void main() { intm,k,i; cout<<“请输入一个大于1的正整数:"; cin>>m; k=m-1; for (i=2;i<=k;i++) { if (m%i==0) break; } if(i<k+1) cout<<m<<"不是素数"<<endl; else cout<<m<<"是素数"<<endl; } 要对m=2做一个判断,因为它没有通过循环运算,m=1时不正确,因此,对输入范围加以限定
void main() { intm, i; cout<<"请输入一个正整数:"; cin>>m; for (i=2;i<=m;i++) { if (m%i==0) break; } if(i==m) cout<<m<<"是素数"<<endl; else cout<<m<<"不是素数"<<endl; } 对m=1和2都正确,2执行了循环