·8: C程序设计要点分析与恩解 第2章流程控制 2.1控制表达式 程序的流程走向是由条件表达式的值控制决定的。表达式总是有值的。 1.逻辑表达式 罗铅表达式由变量、常量和罗辑关系云算符构成,用以表示变量的罗辑关系 (①)逻辑与(AND) 逻辑或(0R (3)逻辑非(N0T) 逻辑表达式只有两种可能的取值,真假必取其一。假者取值为0:真者取值为1。 2.关系运算符 变量与变量或常量之间比较数值上大小的关系用关系运算符来表示关系运算符共有六 种, 等于 != 不等于 小于 <= 小于等于 > 大于等于 关系表达式也只有两种可能的取值,例如: 此式取值0,值为假(false)。又如,已知变量x='c',则表表达式 x>b 值为真(true),取值1. 3.运算操作符的结合性和优先级 运算操作符的结合性和优先级规定了表达式运算操作的处理顺序。优先级高的操作应优 先执行。例如,处理表达式 a十b*c时,*优先于+, 相当于a十(6*c) 有部分运算操作符的结合性是从右向左。最常见的赋值表达式中,赋值运算操作符的结 合性就是自右向左。例如, a=b十c是将b十c结果赋给a 又如: 单操作数的运算操作符+十(自增),十十(自减1),一(负号)的结合性也都从右向左。 例如, 一i++相当于一(1++),而不是()++ 关于运算符的优先级低于算术运算符,例如:
·8· C 程序设计要点分析与题解 第2章 流程控制 2.1 控制表达式 程序的流程走向是由条件表达式的值控制决定的。表达式总是有值的。 1.逻辑表达式 逻辑表达式由变量、常量和逻辑关系运算符构成,用以表示变量的逻辑关系。 (1) 逻辑与 (AND) && (2) 逻辑或 (OR) || (3) 逻辑非 (NOT) ! 逻辑表达式只有两种可能的取值,真假必取其一。假者取值为 0;真者取值为 1。 2.关系运算符 变量与变量或常量之间比较数值上大小的关系用关系运算符来表示。关系运算符共有六 种,即: == 等于 != 不等于 < 小于 <= 小于等于 > 大于 >= 大于等于 关系表达式也只有两种可能的取值,例如: ′a′==′b′ 此式取值 0,值为假(false)。 又如,已知变量 x=′c′,则表表达式 x>′b′ 值为真(true),取值 1。 3. 运算操作符的结合性和优先级 运算操作符的结合性和优先级规定了表达式运算操作的处理顺序。优先级高的操作应优 先执行。例如,处理表达式 a+b*c 时,*优先于+,相当于 a+(b*c)。 有部分运算操作符的结合性是从右向左。最常见的赋值表达式中,赋值运算操作符的结 合性就是自右向左。例如, a=b+c 是将 b+c 结果赋给 a 又如: a*=b+c 相当于 a=a*(b+c)。 单操作数的运算操作符++(自增 1),++(自减 1),-(负号)的结合性也都从右向左。 例如, -i++相当于-(i++),而不是(-i)++ 关于运算符的优先级低于算术运算符,例如:
第2章流程控制 9 a<b+c等同于a<(b+c) 2.2for循环语句 1.for循环语句的一般格式为: for(初始化表达式:循环条件:循环表达式) 循环体语句块 例2.1:在屏幕上,显示1~100 #include <stdio.h> main() int n: for(m=l:n<=100:n++) printf("%d\n",n): /*循环体语句* for语句中“:”隔开的各部分: (1)初始化表达式,用于循环开始前,为循环变量设置初始值 ②循环条件是一个逻辑表达式,若该式取值为真即条件满足,则继续执行循环:否则,执 行循环体后的语句。 (3)循环表达式定义了每次循环时,循环变量的变化情况。 (4)循环体可以是一条语句或一组语句,若是一组语句,需要用“”和“]”括起来。 2.f0r语句执行讨程 ()计算初始表达式 (2)判断循环条件,若满足,则执行:否则,退出循环 (3)执行循环。 (4)返回第(2)步。 例2.2:显示十的阶乘10: #include <stdio.h> main() int n,result: ,对=aa,rel片 result*=n 朱循环体语句材
第2章 流程控制 ·9· a<b+c 等同于 a<(b+c) 2.2 for 循环语句 1. for 循环语句的一般格式为: for(初始化表达式;循环条件;循环表达式) 循环体语句块 例 2.1:在屏幕上,显示 1~100 #include <stdio.h> main() { int n; for (n=1;n<=100;n++) printf(″%d\n″,n); /*循环体语句*/ } for 语句中“;”隔开的各部分: (1)初始化表达式,用于循环开始前,为循环变量设置初始值。 (2)循环条件是一个逻辑表达式,若该式取值为真即条件满足,则继续执行循环;否则,执 行循环体后的语句。 (3)循环表达式定义了每次循环时,循环变量的变化情况。 (4)循环体可以是一条语句或一组语句,若是一组语句,需要用“{”和“}”括起来。 2.for 语句执行过程 (1)计算初始表达式。 (2)判断循环条件,若满足,则执行;否则,退出循环。 (3)执行循环。 (4)返回第(2)步。 例 2.2:显示十的阶乘 10! #include <stdio.h> main() { int n,result; result=1; for(n=1;n<=10;n++) { result*=n printf(″%d!=%d\n″,n,result); } /* 循环体语句 */
·10. C程序设计要点分析与愿解 例2.3:打印可印刷字符的ASC(从32到126)代码字符对照表。 #include <stdio.h> main ( inti; for(i=32:i127,i+)从ASCI码为32的开始/ printf"%4d%c"i,i打印ASC码及其对应的字符/ if(i+4)%5=0)printf(n方体每行打印5个字符后换行/ 3.嵌套的for语句 在for的循环体中还包含for语句,这就是嵌套的for语句。 例2.4:计算五个给定数的阶乘 #include <stdio.h int i,j,number,result; for(i=1:i<=5:i++) ( scanf("d",&number): result=1: for(j=1;j<=number:j++) result #=j; /*内循环体语句*/ printf("d!=%d\n",number,result): /外循环体语句*/ 2.3 while语句 这是另一种形式的循环语句,只是按某一条件循环,可以不知道循环的次数,直到不满 足该条件时,才 hile(循环条件) 循环体语句块
·10· C 程序设计要点分析与题解 } 例 2.3:打印可印刷字符的 ASCII(从 32 到 126)代码字符对照表。 #include <stdio.h> main () { int i; for (i=32;i<127; i++) /* 从 ASCII 码为 32 的开始 */ { printf("%4d %c",i,i); /* 打印 ASCII 码及其对应的字符 */ if ((i+4)%5 == 0) printf ("\n"); /* 每行打印 5 个字符后换行 */ } } 3.嵌套的 for 语句 在 for 的循环体中还包含 for 语句,这就是嵌套的 for 语句。 例 2.4:计算五个给定数的阶乘 #include <stdio.h> main() { int i,j,number,result; for(i=1;i<=5;i++) { scanf(″%d″,&number); result=1; for(j=1;j<=number;j++) result *=j; /*内循环体语句*/ printf(″%d!=%d\n″,number,result); } /*外循环体语句*/ } 2.3 while 语句 这是另一种形式的循环语句,只是按某一条件循环,可以不知道循环的次数,直到不满 足该条件时,才停止循环。 1.while 语句的一般格式为: while(循环条件) 循环体语句块
第2章流程控制 ·11· 例2.5:显示1~100 #include<stdio.h>≥ main() int n: n=1: while(n<=100){ printf("n=d",n)a 2.whi1e语句的执行i过程号 (1)判断循环条件是否满足,不满足就退出循环体。 (2)执行循环 (3)返回第(1)步 如果循环条件根本不能成立,则水不执行循环体:反之,若循环条件总是成立,则成为 永久循环(死循环)。 例2.6:倒排输出数字 #include <stdio.h> main() while(number!=0)( rdigit=number%10: /*取出低位数* printf("d",rdigit): number/=10: /*把上次循环的number缩小10倍回到循环头*/ 1 printf("In"): /*循环跳出后换行*/ 输入的数若为12345则输出54321。 注意:number为整数类型,其最大值应不超过32767,否则,会出现不正确的结果。 例如:利用hile语句和空语句跳过所有的空白字符 while(c=getchar()- /*空语句*/ 例如:永久循环 while(1){
第2章 流程控制 ·11· 例 2.5:显示 1~100 #include <stdio.h> main() { int n; n=1; while(n<=100){ printf(″n=%d″,n); n++; } } 2.while 语句的执行过程 (1)判断循环条件是否满足,不满足就退出循环体。 (2)执行循环体。 (3)返回第(1)步。 如果循环条件根本不能成立,则永不执行循环体;反之,若循环条件总是成立,则成为 永久循环(死循环)。 例 2.6:倒排输出数字 #include <stdio.h> main() { int number,rdigit; scanf(″%d″,&number); while(number!=0){ rdigit=number%10; /*取出低位数*/ printf(″%d″,rdigit); number/=10; /*把上次循环的 number 缩小 10 倍回到循环头*/ } printf(″\n″); /*循环跳出后换行*/ } 输入的数若为 12345 则输出 54321。 注意:number 为整数类型,其最大值应不超过 32767,否则,会出现不正确的结果。 例如:利用 while 语句和空语句跳过所有的空白字符 while(c=getchar())==′′) ; /*空语句*/ 例如:永久循环 while(1){
·12. C程序设计要点分析与愿解 2.4Do-while语句 Do-while语句为当型循环结构,执行时先执行循环体语句再判断循环条件。 1.do-while语句的一般格式为: % 循环体语句块 hi1e(循环条件): 例2.7:倒排数字输出 #include<stdio.h> 则in0 int number,rdigit: printf("Please input a number:") scanf("%d",&number): do( /象先执行*/ rdigit=number10: printf("d”,rdigit): number /=10: /来等效于number=number/10 )while(number!=0): /条后判断* 2.执行讨程 ()执行一次循环体 (②)判断是否满足循环条件,若满足,则循环,转到(①)继续执行:否则,执行随后的语句。 2.5if语句 1.简单的if语句 简单的if语句格式为: if(条件表达式) 珥句块快 只要条件表达式满足逻辑关系,即表达式的值为真,就执行语句块。 例2.8:比较两个数 /Compare two numbers * #include <stdio.h> main()
·12· C 程序设计要点分析与题解 } 2.4 Do- while 语句 Do- while 语句为当型循环结构,执行时先执行循环体语句再判断循环条件。 1.do- while 语句的一般格式为: do 循环体语句块 while(循环条件); 例 2.7:倒排数字输出 #include<stdio.h> main() { int number,rdigit; printf(″Please input a number:″); scanf(″%d″,&number); do{ /*先执行*/ rdigit=number%10; printf(″%d″,rdigit); number/=10; /* 等效于 number= number/10 }while(number!=0); /*后判断*/ } 2. 执行过程 (1)执行一次循环体。 (2)判断是否满足循环条件,若满足,则循环,转到(1)继续执行;否则,执行随后的语句。 2.5 if 语 句 1.简单的 if 语句 简单的 if 语句格式为: if(条件表达式) 语句块 只要条件表达式满足逻辑关系,即表达式的值为真,就执行语句块。 例 2.8:比较两个数 /* Compare two numbers */ #include <stdio.h> main()