收藏 分享(赏)

c语言第3章.ppt

上传人:hwpkd79526 文档编号:7321769 上传时间:2019-05-14 格式:PPT 页数:81 大小:1.24MB
下载 相关 举报
c语言第3章.ppt_第1页
第1页 / 共81页
c语言第3章.ppt_第2页
第2页 / 共81页
c语言第3章.ppt_第3页
第3页 / 共81页
c语言第3章.ppt_第4页
第4页 / 共81页
c语言第3章.ppt_第5页
第5页 / 共81页
点击查看更多>>
资源描述

1、上一章我们学到了,1解决判定性问题选择结构 2 关系表达式 , =, =, =,!= 取值为1(真),0(假) 3 逻辑表达式 &, |, ! 取值为1(真),0(假) 注意:a)短路原则;b)操作数非0为真,0为假,上一章我们学到了,4 按位运算 与、或、异或、非、左移、右移 5 格式化输入函数 scanf(“格式控制串”,地址表) 6 指针变量:存储其他变量地址的变量,指针与指针变量 指针:一个变量的地址 指针变量:专门存放变量地址的变量,2000,指针,指针变量,变量的内容,变量的地址,4,如何定义指针变量 指针变量与其所指向的变量之间的关系,指针变量的定义 一般形式: 存储类型 数据类

2、型 *指针名;,合法标识符,指针变量本身的存储类型,指针的目标变量的数据类型,表示定义指针变量 不是*运算符,例 int *p1,*p2;float *q ;static char *name;,注意: 1、int *p1, *p2; 与 int *p1, p2; 2、指针变量名是p1,p2 ,不是*p1,*p2 3、指针变量只能指向定义时所规定类型的变量 4、指针变量定义后,变量值不确定,应用前必须先赋值,选择结构1: if判断结构 if (条件表达式) 语句块1;选择结构2: if-else判断结构 if (条件表达式) 语句块1; else 语句块2;选择结构3: if-else if

3、判断结构 if (表达式1)语句块1; else if (表达式2)语句块2; else语句块n+1;,选择结构4: if语句的嵌套 if (表达式)if (表达式) 语句1;else 语句2; elseif (表达式) 语句3;else 语句4;选择结构5:switch判定性结构 switch(表达式) case常量表达式1: 语句块1; break;case常量表达式2: 语句块2; break;case常量表达式n: 语句块n; break;default : 语句块n+1; ,第三章 循环结构与应用,循环结构是程序中一种很重要的结构。它会根据条件反复执行某程序段,当然不能无限的执行下去

4、,在给定条件不成立时,循环就会停止。给定的条件称为循环条件,反复执行的程序段称为循环体。,语言提供了多种循环语句,可以组成各种不同形式的循环结构: (1) for循环语句; (2) while循环语句; (3) do-while循环语句;,3.1 循环的概述,for(设置初始值;循环条件判断;修改循环变量) 语句1;语句2;语句n; ,for一般形式为:,3.2 for循环,语句功能:,当表达式2的值为非零时,重复执行 语句序列。,表达式1 循环初始表达式,用于进入循环体前为循环变量赋初值 由算术、赋值、逻辑和逗号表达式构成。,表达式2 循环控制表达式,用于控制循环体语句的执行次数由关系表达式

5、或逻辑表达式构成。,表达式3 修改循环变量表达式,即每循环一次使得表达式1的值就要变化一次。由算术、赋值、逻辑和逗号表达式构成。,for(表达式1;表达式2;表达式3) 语句序列; ,for语句的执行流程:,图3-1 for语句执行流程图,main() int n;for(n=1; n=10; n+)printf(“%d,” ,n);,1, 2, 3, 4, 5 ,6 ,7, 8 , 9 , 10,输出1-10,递,增,循,环,main() int n, i=100;for(n=1; n=5; n+)printf(“%d,”, i);,100, 100, 100, 100 , 100,main

6、() int n, i=100;for(n=5; n0; n-)printf(“%d,”, i);,输出5个100,递,减,循,环,例3-1 使用for循环求整数1加到100的值。,图3-3 高斯级数运算的流程图,#include void main(void) int nSum;/* 用于保存计算和*/int i; /* 循环控制变量,也是参与运算的操作数*/nSum=0;for(i=1;i101;i+)nSum+=i;printf(“1+2+3+99+100=%dn“,nSum); ,程序清单3-1 progression.c,双目复合赋值运算符OP,复合赋值表达式的一般形式为:表达式1

7、Op 表达式2 例如:x+=2; x=x+2;Op表示参与构成复合赋值运算符的双目运算符,它和下面的赋值表达式等价:表达式1 = (表达式1) Op (表达式2)例如:x+=y-3等价于x=x+(y-3),而不是x=x+y-3。,注意:,+i和i+等价于i=i+1,但是,这两个表达式在参与其他运算的时候是有区别的。 在和其他运算结合在一起时,+i表示i自增1后再参与其它运算,同理,-i是i自减1后再参与其它运算 i+表示i参与运算后,i的值再自增1。而i-是i参与运算后,i的值再自减1。 例如下面的程序段:int x=0,int i=1;x=i+;printf(“x=%d,i=%d”,x,i)

8、;输出的结果为x=1,i=2,例3-2 使用逗号运算符在for循环中初始化变量。,#include void main (void) int nSum; /* 用于保存计算和*/int i; /* 循环控制变量,也是参与运算的操作数*/*在循环开始时,初始化变量nSum*/for(i=1,nSum=0;i101;i+)nSum+=i; /*求和*/printf(“1+2+3+99+100=%dn“,nSum); ,例3-3 很多web网站限制登陆次数,如果输入的密码在指定次数内错误,就拒绝登陆。实现一个程序,模拟验证密码的过程,判断用户输入密码的次数,若3次输入密码错误,则结束输入。,图3-5

9、 控制密码输入次数程序流程图,#include “stdio.h“void main (void) int nPwd=0; /* 用于保存输入的密码*/int i; /*循环控制变量*/int nFlag=1; /*密码匹配成功的标志*/* 默认设定密码为87569,可以根据需要进行设定*/for (i=0; (nFlag=(87569 != nPwd) ,程序清单3-3 checklogon.c,#include void main (void) int i; for ( i=0; i10; printf(“%d “,i), i+) /*在“设置循环增减量”部分使用逗号运算符,调用print

10、f函数输出*/ ,例3-4 使用循环输出0-9这10个数字。,程序清单3-4 aotherfor.c,main() int x, y;for(x=0,y=0; x+y=50; x+,y+) printf(“%3d ”, x+y );if (x%5= =0) printf(“n”);,EXERCISES:,写出右侧 程序段的运行结果,14:58,24/44,for循环语句注意:, 可以省略,但须保留分号(;),同时在for之前必须给循环变量赋值,例如:i=0;for(;i, 一般不可省略,否则为无限循环。 如:for(i=1; i+)sum =sum+i; 相当于条件总为真,程序会一直不停的执行

11、。除非在循环体中设置循环跳出语句break;,14:58,25/44, 亦可省略,但在循环语句体中必须有语句来修改循环变量,以使条件表达式的值在某一时刻为0,从而能正常结束循环。,如:for(sum=0, i=1; i=100;) sum = sum +i;i+;, 三个表达式可均省略,即for(;),易造成无限循环,程序中要避免这种情况的发生。, 条件表达式可以是任意表达式。只要表达式的值0。就执行循环语句。,如:for( i=0; (c=getchar()!= n; i+=c);,for循环语句注意:,14:58,26/44, 初始表达式、修改循环变量表达式可以是逗号表达式,如:for (

12、sum=0, i=1; i=100; sum+, i+), for循环也可以嵌套,执行时是由外向里,逐层进行,先执行外层循环,再进入内层循环;退出时相反,由里向外逐层退出,先退出内层循环,然后退到上一层循环。,for循环语句注意:,从键盘输入100个有符号整数,请分别统计其中正整数和负整数的个数。,EXERCISES,Begin,num=0 sum1=0 sum2=0,num+,输出sum1sum2,End,sum1+,F,X0,T,输入 x,sum2+,F,1、设计算法,T,num100,2、实现算法,main( ) int sum1, sum2, num; sum1=sum2=num=0;

13、for(num=0;num=0)sum1+;elsesum2+;printf (“%d,%dn”, sum1,sum2); ,while(条件判断) 语句1; 语句2; 语句n; ,3.3 while循环,while一般形式为:,图3-8 while循环执行过程,例3-6 用while循环实现从1加到100的计算。,#include void main (void) int nSum; int i; nSum=0;i=1; /*初始化循环控制变量*/while(i101)nSum+=i;i+; /*改变循环控制变量的值*/printf(“1+2+3+99+100=%dn“,nSum); ,程序

14、清单3-6 progression-2.c,例3-5 使用while循环接收键盘输入,若输入字符为q或者Q,则停止循环执行。,图3-9 while循环处理键盘输入的流程图,#include #include void main (void) char cStr; /* 用于保存输入的字符*/cStr=0;while(cStr !=q) ,程序清单3-5checkcharactor.c,补充知识点,getch()、getche()和getchar()函数 getch()和getche()函数 (头文件#include ) 这两个函数都是从键盘上读入一个字符。其调用格式为: getch(); ge

15、tche(); 两者的区别是: getch()函数不将读入的字符回显在显示屏幕上, 而getche() 函数却将读入的字符回显到显示屏幕上。 利用回显和不回显的特点, 这两个函数经常用于交互输入的过程中完成暂停等功能,补充知识点,getch()、getche()和getchar()函数 getchar()函数也是从键盘上读入一个字符, 并带回显。它与前面两个函数的区别在于: getchar()函数等待输入直到按回车才结束, 回车前的所有输入字符都会逐个显示在屏幕上。但只有第一个字符作为函数的返回值。,do 语句1; 语句2; 语句n; while(条件判断);,3.4 do while循环,d

16、o while一般形式为:,图3-11 do while循环执行过程,例3-7 使用do while循环实现1加到100的计算。,图3-12 do while循环实现高斯级数计算的流程图,#include void main (void)int nSum; /* 用于保存计算和*/int i; /* 循环控制变量,也是参与运算的操作数*/nSum=0;i=1; /*初始化循环控制变量*/do nSum+=i;i+; /*改变循环控制变量的值*/while(i101);printf(“1+2+3+99+100=%dn“,nSum); ,程序清单3-7 progression-3.c,main(

17、) int x;x=-1;do x=x*x; while( !x );,EXERCISES:,A) 是死循环 B) 循环执行三次C) 循环执行一次D) 有语法错误,x=0;,main()int x=3;doprintf(“%d,”,x-=2); while( !(-x) );,A) 1 B) 1,-2 C) 3,0 D) 0,x,3,1,0,-2,-3,x=x-2;,EXERCISES:,main()int s;s=7;dos-=2; while(s0); printf(“s=%dn”,s);,请写出 右侧程 序的运 行结果,EXERCISES:,main() int x,y;x=y=0;wh

18、ile(x20) y+,x+=3; printf(“y=%d x=%dn”,y,x);,写出右侧 程序段的 运行结果 以及循环 体中的语 句共执行 了几次。,EXERCISES:,当确定要使用循环时,该使用哪个呢? (1)首先确定需要的循环是先进行条件判断,后执行循环;还是先执行循环,然后判断条件。 (2)在for循环和while循环的选择上,如果涉及到初始化一些变量或者更新一些操作,那么使用for循环比较合适,否则使用while循环。,3.5 循环语句的选择,三种循环特性列表,main( ) int sum, i ;for(sum=0,i=1; i=100; i+) sum+=i;print

19、f(“sum=%dn”, sum ); ,main( ) int sum=0, i =1;do sum+=i; i+; while( i=100 );printf(“sum=%dn”, sum ); ,main( ) int sum=0, i =1;while( i=100 ) sum+=i; i+; printf(“sum=%dn”, sum ); ,main( ) int sum=0, i =1;label: if( i=100) sum+=i; i+;goto label; printf(“sum=%dn”, sum ); ,1+2+3+4+5+ +100,EXERCISES:,一个循环

20、体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。,3.6 循环的嵌套, for(i=0; i=9; i+) for(j=0; j=9; j+) ,内层循环,外层循环,(1) for(;) (2) for(;) for(;) while() (3) while() (4) do do while() while(); while();(5) while() (6) do do for(;)while(); while();,首先看九九乘法表的内容,如下所示: 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 8*1=8 8*2=1

21、6 8*3=24 8*4=32 8*5= 40 8*6=48 8*7=56 8*8=64 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81,例3-8 在屏幕上输出九九乘法表。,图3-14 九九乘法表的程序流程图,#include void main (void) int nRow; /*行数的循环控制变量*/int nCol; /* 列数循环控制变量*/for(nRow=1;nRow10;nRow+) /* 外层循环控制行数*/ for(nCol=1;nCol=nRow;nCol+) /* 内层循环控制列数*/print

22、f(“%d*%d=%d “,nRow,nCol,nRow*nCol);printf(“n“); /*输出一行后换行*/ ,程序清单3-8 multiplication-table.c,双重循环特点,当外层循环变量中的值变换一次时,内层循环变量中的值将变换若干次。,若 i , j 已定义为 int 类型,则以下程序段中内循环体总的执行次数是:for( i=5; i; i -)for(j=0; j4; j+) A) 20 B) 24 C) 25 D) 30,EXERCISES:,beak语句,break语句的一般形式为: break;,例3-11 循环接收有效的学生成绩数据,如果数据大于100或小

23、于0,则结束过程,输出总成绩和平均分。,图3-19 例3-11程序实现的流程图,#include void main (void)float fScore, fMin=0.0f, fMax=100.0f, fTotal=0.0f;int nCount=0; /* 对输入的成绩个数进行计数*/while(scanf(“%f“, ,程序清单3-11 break.c,注意: (1)break语句不能用于循环语句和switch语句之外的任何其他语句中。 (2)在嵌套循环中,break语句只能终止它所在的循环的执行。,本例中break语句的作用就是结束循环的执行,强制退出循环, 程序继续执行循环后的程序

24、语句。,continue语句,continue的作用与break语句相似,也有结束循环的作用,但是continue语句是结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。,continue语句的一般形式为: continue;,#include void main (void)float fScore; /* 用于保存输入的成绩*/float fMin=0.0f,fMax=100.0f; float fTotal=0.0f; /* 保存总成绩*/int nCount=0; /* 对输入的成绩个数进行计数*/while(scanf(“%f“, ,程序清单3-12

25、continue.c,将程序清单3-11进行一下简单的修改,将break语句替换成continue语句。请读者分析程序执行的结果,体会这两种跳出循环体语句的作用和对程序流程的影响。,注意: break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。 continue语句只结束本次循环,而不是终止整个循环的执行。,在下列语句中,哪一个不为无限循环 A) i=100; B) for( ; ; )while(1) i=i %100; i+; if (i 100) break; C) k=32764; D) S=32764;do while(S+%2)|(S%2) S+;k+; while(

26、k0);,EXERCISES:,goto语句,goto语句为无条件转向语句,一般形式为:goto 语句标号;,语句标号用标识符表示,即由字母、数字和下划线组成,且第一个字符必须为字母或下划线,不能用整数来做标号。语句标号加在跳转的目的语句之前,并用冒号(:)与后面的语句分隔。例如,goto lable_123; 是合法的,而goto 25; 是不合法的。,3.7 程序举例,例:下面对计算器做如下功能的扩充:(1) 增加菜单循环执行的功能;(2) 实现三角函数正弦函数的功能(sin函数);(3) 实现三角函数余弦函数的功能(cos函数)。,3.7.1 计算器,菜单反复执行功能既然是要菜单反复 执

27、行,它必然是个重复 性的工作,自然就可以 使用这章讲解的循环语 句来实现。在此采用 while循环语句实现该功 能。,图3-22 重复使用菜单功能的流程图,#include #include void main() int nFun=1;while(nFun!=9)system(“cls“);/clrscr();printf(“ -n“); /* 构造功能菜单 */printf(“ 加法运算-1n“);printf(“ 减法运算-2n“);printf(“ 除法运算-3n“);printf(“ 乘法运算-4n“);printf(“ 退出-9n“);printf(“ -n“);printf(“

28、请输入功能选择: “); /* 在屏幕上显示提示信息 */scanf(“%d“, ,程序清单3-13 AppCalc.c,(2) 三角函数sin函数和cos函数的实现 在高等数学中实现sin函数和cos函数的方法不止一种。在这里,采用的是泰勒(Taylor)公式进行实现。首先分别看下它们的泰勒展开式的形式:,图3-23 sin函数的实现流程图,#include #include #include void main(void)int nFun=1;double dSin=0.0,dCos=0.0, dTemp=1.0, dArc=0.0; /*变量声明初始化*/ int k=0;double

29、pi=3.1415926,dMin=0.000001,dDegree=0.0;,这里只给出sin函数和cos函数实现的程序片段,如程序清单3-15 AppCalc.c所 。,while(nFun!=9)system(“cls“); /clrscr();printf(“ -n“);/* 构造功能菜单 */printf(“ 加法运算-1n“);printf(“ 减法运算-2n“);printf(“ 除法运算-3n“);printf(“ 乘法运算-4n“);printf(“ sinx运算-5n“);printf(“ cosx运算-6n“);printf(“ 退出-9n“);printf(“ -n“)

30、;printf(“ 请输入功能选择: “); /* 在屏幕上显示提示信息 */scanf(“%d“,这里只给出sin函数和cos函数实现的程序片段,如程序清单3-15 AppCalc.c所 。,case 5: /*sinx运算过程 */dSin=0.0; dTemp=1.0; dArc=0.0; k=0; dDegree=0;printf(“ 请输入角度:“);scanf(“%lf“,case 6: /*cosx运算过程 */dCos=0.0; /*变量初始化*/dTemp=1.0; /*变量初始化*/dArc=0.0; /*变量初始化*/k=0;dDegree=0; printf(“ 请输入

31、角度:“);scanf(“%lf”, ,在第1章,学生成绩档案管理系统已经具备了数据的输入和成绩分类分析的功能。不过,它只能进行单独的一次数据处理。学习过循环结构以后,结合本章的知识点,增加系统重复处理数据的能力,既检验对知识的实际应用能力,又把系统的功能进一步充实。下面对学生成绩档案管理系统做如下功能的扩充:(1) 实现可控的数据处理;(2) 对多次输入的三门成绩(C语言、英语和高数)进行 分类求和。,3.7.2 学生成绩档案管理系统,图3-25 循环统计学生总成绩的流程图,#include void main(void)float fMin=0.0f, fMax=100.0f; /* 保存

32、总成绩*/float fTotalc=0.0f,fTotale=0.0f,fTotalm=0.0f; float fClanguege=0.0,fEnglish=0.0,fMath=0.0;int nCount=0; /*对输入的成绩个数进行计数*/,程序清单3-16 AppStud.c,do printf(“ -n“); fClanguege=0.0;fEnglish=0.0;fMath=0.0;printf(“ 请输入C 语言、英语和高数成绩,用逗号分隔:“);scanf(“%f,%f,%f“, /* 若输入的成绩不是合法数字,则结束本次循环*/,程序清单3-16 AppStud.c,if

33、 (fMath fMax | fMath fMin)printf(“ %0.1f 不是合法的成绩数据!n“,fMath); printf(“ 继续输入下一位同学的成绩吗? y or n:n “); flushall(); continue; /* 若输入的成绩不是合法数字,则结束本次循环*/ fTotalc += fClanguege;fTotale +=fEnglish;fTotalm +=fMath;nCount+;printf(“ 继续输入下一位同学的成绩吗? y or n:n “); flushall(); while(getchar()=y);,if(nCount0)printf(“

34、 C 语言的总成绩为 %0.1fn“,fTotalc);printf(“ 英语的总成绩为 %0.1fn“,fTotale);printf(“ 高数的总成绩为 %0.1fn“,fTotalm); elseprintf(“ 无效的成绩数据输入n!“); ,常用的标准数学函数,算术运算符和表达式,(1) 三种循环语句的基本语法 :for语句、while语句和do while语句 (2) 复合赋值运算符 (3) 逻辑运算的“短路”现象 (1) 如何跳离循环结构: break语句、continue语句和goto语句 (2) 无限循环的用途 (3) 循环语句的选择,3.8 本章小结,上次课我们学到了,while循环 do while循环,while(条件判断) 语句1; 语句2; 语句n; ,do 语句1; 语句2; 语句n; while(条件判断);,循环嵌套, for(i=0; i9; i+) for(j=0; j9; j+) ,内层循环,外层循环,上次课我们学到了,上次课我们学到了,break语句:跳出循环continue 语句:提前终止本次循环,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报