printf(“%d,%d,%d\\n”,a,b,c); }
第三章 选择语句和循环语句
【要点归纳】
1、if语句
if语句有三种使用形式 ⑴单分支if语句。
if(条件) 语句; ⑵双分支if语句。
if(条件) 语句1; else 语句2; ⑶多分支if语句。
if(〈条件1〉) 语句1; else if(〈条件2〉)语句2; ?
else if (〈条件n〉)语句n; else 语句n+1;
2、switch(开关)语句
switch语句用于方便地从多个语句中选择一个或多个语句执行。 switch(〈表达式〉) {
case 常量表达式1: 语句1; case 常量表达式2: 语句2; ?
case 常量表达式n: 语句n; default: 语句n+1; }
注:表达式的值一定是整型值,若为其他类型,最后都要转换为整型数。 3、while循环语句
while(条件)语句;
注:先判断条件,后执行语句; 4、do-while循环语句
do 语句;
while(条件);
注:先执行一次循环体,再判断条件。
While和do-while语句的差别是,后者至少执行“语句”一次,而前者有时一次也不执行语句。
5、for循环语句
for(表达式1;表达式2;表达式3) 语句;
13
注:省略各个表达式时,应能够知道其意义。
⑴“表达式1”可以省略,此时应在该语句之前给循环变量赋初值。其后的分号不能省略。
⑵“表达式2”可以省略,即无判定条件,循环无终止进行下去。需要在循环体中用break等语句退出循环。
⑶“表达式3”可以省略,这样需要在循环体“语句”中让循环变量变化,以保证循环能正常结束。
⑷“表达式1”和“表达式3”可以同时省略,这样为⑴和⑶两种情况同时出现,需要使用相关语句保证循环结束。
⑸三个表达式都可省略,这样为⑵和⑷两种情况同时出现,需要使用相关语句保证循环结束。
#include
int i=1,sum=0; for(; ;) {
if(i>100) break; sum+=i; i++; }
printf(“sum=%d”,sum); }
6、 break语句
break语句的使用格式很简单,由关键字break和分号构成,其功能如下:
? 在switch语句中,break用来使程序流程跳出switch语句,继续执行switch后的语
句;
? 在循环语句中,break用来从最近的循环体内跳出来。 7、 continue语句
continue语句只能用于循环语句中,作用为结束本次循环,即跳过循环体中尚末执行的语句,接着进行是否执行下一次循环的判定。
【本节例题选编】 1、选择题
【例3.1】以下语句错误的是
A.if(x>y); B.if(x=y)&&(x!=0) x+=y; C.if(x!=y) scanf(“%d”,&x); esle scanf(“%d”,&y); D.if(x 【例3.2】C语言的if语句中,用作判断的条件表达式为 A.任意表达式 B.逻辑表达式 C.关系表达式 D.算术表达式 【例3.3】为了避免在嵌套的条件语句if-else中产生二义性,C语言规定:else子句总是与 配对。 A.缩排位置相同的if B.同一行上的if C.其之后最近的if D.其之前最近的if 【例3.4】以下程序的输出结果是 14 #include int i=1,j=1,k=2; if((j++ || k++) && i++) printf(“%d,%d,%d\\n”,i,j,k); } A.1,1,2 B.2,2,1 C.2,2,2 D.2,2,3 【例3.5】已知int x=10,y=20,z=30; 以下语句执行后x,y,z的值是 。 if(x>y) z=x; x=y; y=z; A.x=10,y=20,z=30 B.x=20,y=30,z=30 C.x=20,y=30,z=10 D.x=20,y=30,z=20 【例3.6】以下程序的运行结果是 。 #include int m=5; if(m++>5) printf(“%d\\n”,m); else printf(“%d\\n”,m--); } A.4 B.5 C.6 D.7 【例3.7】以下程序的输出结果是 。 #include int a=100,x=10,y=20,ok1=5,ok2=0; if(x if(ok2) a=10; a=-1; printf(“%d\\n”,a); } A.1 B.0 C.-1 D.值不确定 【例3.8】若a,b均是整型变量,正确的switch语句是 A.switch(a) B.switch(a) { { case 1.0: printf(“i\\n”); case b: printf(“i\\n”); case 2: printf(“you\\n”); case 1: printf(“you\\n”); } } C.switch(a+b) D.switch(a+b) 15 { { case 1: printf(“i\\n”); case 1: printf(“i\\n”); case 2*a: printf(“you\\n”); case 2: printf(“you\\n”); } } 【例3.9】对for(表达式1;;表达式3),可理解为 A.for(表达式1;0;表达式3) B.for(表达式1;表达式3;表达式3) C.for(表达式1;1;表达式3) D.for(表达式1;表达式1;表达式3) 【例3.10】执行以下程序段后,变量a,b,c的值分别是 。 int x=10,y=9; int a,b,c; a=(--x= =y++)? --x: ++y; b=x++; c=y; A.a=9,b=9,c=9 B.a=8,b=8,c=10 C.a=9,b=10,c=9 D.a=1,b=11,c=10 【例3.11】有以下程序段: int n=0, p; do{ scnaf(“%d”,&p); n++; }while(p!=12345 && n<3); 此处do-while循环的结束条件是 。 A.p的值不等于12345并且n的值小于3 B.的值等于12345并且n的值大于等于3 C.p的值不等于12345或者n的值小于3 D.p的值等于12345或者n的值大于等于3 【例3.12】下面程序中循环体的执行次数是 。 a=10; b=0; do{ b+=2; a-=2+b; }while(a>=0); A.1 B.2 C.3 D.4 【例3.13】以下程序段 。 x=-1; do { x=x*x; } while(!x); A.是死循环 B.循环执行二次 C.循环执行一次 D.有语法错误 【例3.14】以下程序的执行结果是 #include int a=0, i; for(i=1; i<5; i++) { switch(i) 16