中国高校课件下载中心 》 教学资源 》 大学文库

《C语言程序设计》课程授课教案(讲义)程序设计算法流程控制

文档信息
资源类别:文库
文档格式:DOC
文档页数:11
文件大小:54.01KB
团购合买:点击进入团购
内容简介
《C语言程序设计》课程授课教案(讲义)程序设计算法流程控制
刷新页面文档预览

·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 main() int n: for(m=l:n 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 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 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≥ main() int n: n=1: while(n 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 则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 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()

第2章流程控制 ·13· int m,n printf("Please input two numbers\n"); scanf("%d %d",&m,&n): if(m>n) printf("The first number is bigger\n"): 2.复合句的if语句 复合的if语句格式为: if(逻辑表达式) 语句块1 els 语句块2 若满足逻辑关系,即逻辑表达式的值为真,则执行语句块1:否则,执行语句块2。 例2.9:比较两个数的改进 #include main( int m,n: printf("Please input two numbers\n"): scanf("&d d",&m,&n): if(m>n) printf("The first number is bigger\n"); else /条相当于m main() int x printf("Please input two numbers\n"): scanf (d",&x): if(x%4==0&&x%100!=0|x%400=0) printf("%d is a leap vear\n",x) else /*不满足上述条件

第2章 流程控制 ·13· { int m,n; printf(″Please input two numbers\n″); scanf(″%d %d″,&m,&n); if(m>n) printf(″The first number is bigger\n″); } 2.复合句的 if 语句 复合的 if 语句格式为: if(逻辑表达式) 语句块 1 else 语句块 2 若满足逻辑关系,即逻辑表达式的值为真,则执行语句块 1;否则,执行语句块 2。 例 2.9:比较两个数的改进 #include <stdio.h> main() { int m,n; printf(″Please input two numbers\n″); scanf(″%d %d″,&m,&n); if(m>n) printf(″The first number is bigger\n″); else /* 相当于 m<n */ printf(″The first number is bigger\n″); } 例 2.10:检查闰年 /* This program determines if a year is a leap yaer */ #include <stdio.h> main() { int x; printf(″Please input two numbers\n″); scanf(″%d″,&x); if(x%4==0&&x%100!=0||x%400==0) printf(″%d is a leap year\n″,x); else /* 不满足上述条件 */

·14: C程序设计要点分析与题解 printf("%d is not a leap year\n",x): 可见,这种复合的if语句是等同于两个简单的f语句,即 if(逻辑表达式 语句块1 if(逻辑表达式) 语句块2 3.嵌套的if语句 在if语句的语句块中还可包含if语句,这就形成嵌套的if语句。其格式为: if(逻辑表达式1) if(逻辑表达式2) 语句块1 语句块2 else 语句块3 -1 (x0) /*LA.3*/ main ( (int x,y scanf (d",&x): if(x0)和(x=0)*/ else y=1; /*else只包括(x>0)*/ printf ("x=%d.y=%d\n".x.y): 此例if与else是成对的,比较容易理解。实际上也可能在嵌套中只有if,而没有else 这样就容易造成错误。因为else总是与前面最相近的一个不包含lsc的if语句对应匹配, 为避免发生这种错误,应将嵌套中的if语句用“[”和“}”括起米,即: if(逻辑表达式1)( if(G逻辑表达式2 语句块1 else 语句块2 4.else-if语句

·14· C 程序设计要点分析与题解 printf(″%d is not a leap year\n″,x); } 可见,这种复合的 if 语句是等同于两个简单的 if 语句,即: if(逻辑表达式) 语句块 1 if( 逻辑表达式) 语句块 2 3.嵌套的 if 语句 在 if 语句的语句块中还可包含 if 语句,这就形成嵌套的 if 语句。其格式为: if(逻辑表达式 1) if(逻辑表达式 2) 语句块 1 else 语句块 2 else 语句块 3 -1 (x0) /* L4.3 */ main ( ) {int x,y; scanf ("%d",&x); if (x0)和(x=0) */ else y=1; /* else 只包括(x>0) */ printf ("x=%d,y=%d\n",x,y); } 此例 if 与 else 是成对的,比较容易理解。实际上也可能在嵌套中只有 if,而没有 else, 这样就容易造成错误。因为 else 总是与前面最相近的一个不包含 else 的 if 语句对应匹配, 为避免发生这种错误,应将嵌套中的 if 语句用“{”和“}”括起来,即: if(逻辑表达式 1){ if(逻辑表达式 2) 语句块 1 } else 语句块 2 4. else-if 语句

第2章流程控制 ·15· 实际上,这也是一种嵌套,在else下再嵌套if_else,形成如下格式: if(逻辑表达式1) 语句块1 else if(逻辑表达式2) 语句块2 else if(逻辑表达式3) 语句块3 else 语句块n 例2.12:用else-if语句,写一个程序,输入一个数x,打印出符号函数sign(x)的值。 -1 x0 #include in0 int number,sign: printf("Please type in a number x="): scanf("d",&number): if(number0两者*/ sign=0: else sig=1: printf("sign(x)=%din",sign): 2.6条件表达式运算符 条件表达式运算符的一般格式为 条件?表达式1:表达式2 这是一个三元运算符,它控制三个操作数,第一个操作数是条件,条件通常是一个逻 辑关系表达式。该条件若为真,取表达式1的值,就是整个条件表达式的运算结果:否则, 取表达式2的值作为整个条件表达式的运算结果

第2章 流程控制 ·15· 实际上,这也是一种嵌套,在 else 下再嵌套 if_else,形成如下格式: if(逻辑表达式 1) 语句块 1 else if(逻辑表达式 2) 语句块 2 else if(逻辑表达式 3) 语句块 3 . else 语句块 n 例 2.12:用 else-if 语句,写一个程序,输入一个数 x,打印出符号函数 sign(x)的值。 -1 x<0 符号函数为 sign(x)= 0 x=0 1 x>0 #include <stdio.h> main() { int number,sign; printf(″Please type in a number x=″); scanf(″%d″,&number); if(number<0) sign=-1; else if(number==0) /*else 包括=0 和>0 两者*/ sign=0; else sign=1; printf(″sign(x)=%d\n″,sign); } 2.6 条件表达式运算符 条件表达式运算符的一般格式为: 条件 ? 表达式 1:表达式 2 这是一个三元运算符,它控制三个操作数,第一个操作数是条件,条件通常是一个逻 辑关系表达式。该条件若为真,取表达式 1 的值,就是整个条件表达式的运算结果;否则, 取表达式 2 的值作为整个条件表达式的运算结果

·16· C程序设计要点分析与愿解 例2.13:求最大值. #include main( int a,b,c; scanf("%d %d",&a,&b): c=(a>b)?a:b: /体取a和b中大者赋给c*/ printr(The mxum is) 2.7 break语句 break语句用在fo 。do以及switch语句中。当执行一个循环体时,在某一特 例2.14:九九乘法表 #include mainO int i,j: for(i=l:ii)break:/*被乘数大于乘数时跳出内循环*/ printf(("d",i*j》: printf("\n"): 其结果将打出三角形的乘法表,即 24 369 481216 91827364554637281 2.8 continue语句 continue语句执行后,在本次循环中其他语句均不执行,转而继续执行循环体的下一次 循环。在hile.do循环中意味若立即转入条件测试,在for循环中意味者立即转到执行i

·16· C 程序设计要点分析与题解 例 2.13:求最大值. #include <stdio.h> main() { int a,b,c; scanf(″%d %d″,&a,&b); c=(a>b)?a:b; /* 取 a 和 b 中大者赋给 c */ printf(″The maxum is %d″,c); } 2.7 break 语句 break 语句用在 for,while,do 以及 switch 语句中。当执行一个循环体时,在某一特 定状态出现 break 语句时,立即退出循环体,且只退出本级循环。 例 2.14: 九九乘法表 #include <stdio.h> main() { int i,j; for(i=1;i<=9;i++){ for(j=1;j<=9;j++){ if(j>i)break; /* 被乘数大于乘数时跳出内循环 */ printf(″%d ″,i*j); } printf(″\n″); } } 其结果将打出三角形的乘法表,即 1 2 4 3 6 9 4 8 12 16 . 9 18 27 36 45 54 63 72 81 2.8 continue 语句 continue 语句执行后,在本次循环中其他语句均不执行,转而继续执行循环体的下一次 循环。在 while﹑do 循环中意味着立即转入条件测试,在 for 循环中意味着立即转到执行 i

第2章流程控制 ·17· 十十,而进入下一次重复。 例2.15:只做正数的累加而跳过负数 #include main() { sum=0: for(i=0:i<n:i++)( scanf("%d",&a): if(a<0) continue: sum十=a: printf("The sum=%d\n",sum): 2.9 switch语句 switch语句的一般格式为: switch(表达式) case常量l: 语句块1 break: case常量2: 语句块2 breaka case常量n: 语句块n break: default: 语句块n十1 break: 它是根据表达式为不同的值而执行不同的语句块,可以看成是特殊的else_if语句。即: if(表达式 =常量1)

第2章 流程控制 ·17· ++,而进入下一次重复。 例 2.15:只做正数的累加而跳过负数 #include <stdio.h> main() { int a,i,n,sum; scanf(″%d″,&n); sum=0; for(i=0;i<n;i++){ scanf(″%d″,&a); if(a<0) continue; sum+=a; } printf(″The sum=%d\n″,sum); } 2.9 switch 语句 switch 语句的一般格式为: switch(表达式) { case 常量 1: 语句块 1 break; case 常量 2: 语句块 2 break; . case 常量 n: 语句块 n break; default: 语句块 n+1 break; } 它是根据表达式为不同的值而执行不同的语句块,可以看成是特殊的 else_if 语句。即: if(表达式==常量 1)

共11页,试读已结束,阅读完整版请下载
刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档