《C语言第三次课课程讲义.pdf》由会员分享,可在线阅读,更多相关《C语言第三次课课程讲义.pdf(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第三次课课程安排时间课次第一课 时while 语句第二课 时 do-while 语句上午for 语句第三课 时break 和 continue 语句for 语句在上机考试中的考点授课标题上课时长502025252515201552510155305注意:第七章中的部分涉及到指针的题目 先不做,到后面再做。主要做选择题:1、2、3、8、9、10,填空题:2、3、4、5、6 第四章选择题:4、9、10、11、12,16、17、18、20、23、24、26 和所有的填空题一维数组的定义第四课 时 一维数组的赋值一维数组的引用二维数组的定义第五课 时 二维数组的赋值下午二维数组的引用循环与数组的应用一
2、例 1循环与数组的应用一例 2第六课 时循环与数组的应用一例 3循环与数组的应用一例 3课后布置习题作业第四章 循环考点while 语句dowhile 语句for 语句(难点)考核几率100%100%100%分值232357循环结构的嵌套(难点)break 语句(难点)continue 语句(难点)100%70%50%462323I教学内容一、while循环1.循环的引入(1)对循环的引入一定要简单,循环就是在一定条件或是范围内重复做某件事情,例如:人每天都在做着重复的事情,早上起床,然后工作学习,晚上休息睡觉。1+2+3+100 这个例子不用讲,直接进入 while 语句,让学生通过后面的题
3、目慢慢体 会循环。2.while 的一般形式while(表达式)循环体语句(1)while 是 C 语言的关键字,必须小写(2)表达式是任意合法的表达式(包括:常量、算术、关系、逻辑、赋值表达式)(3)循环体语句只能是一条语句或是一个复合语句(4)表达式不能省略,循环体语句省略时表示不做任何的操作3.while 的执行过程1)判断表达式的真假2)如果表达式为真则执行循环体语句,否则结束循环4.知识点举例(注意步骤)计算 1+2+3+4+5int i,sum;i=1,sum=0;while(i=5)sum=sum+i;i+;prin tf(sum=%dn,sum);执行步骤如下:(1)初值:i=
4、1,sum=0 判断:isum=0+1,i=i+1_sum=1,i=2(2)初值:i=2,sum=1 判断:isum=1+2,i=i+1_sum=3,i=3(3)初值:i=3,sum=3 判断:isum=3+3,i=i+1_sum=6,i=4(4)初值:i=4,sum=6 判断:isum=6+4,i=i+1-sum=10,i=5(5)初值:i=5,sum=10 判断:isum=10+5,i=i+1-sum=15,i=6(6)初值:i=6,sum=15 判断:ii=2,判断:n!=0 为假,则结束循环;行完循环后继续执行循环后面的语句:printf(%d,i);输出结果为:2融入考点讲解课本 P
5、63 习题 1,2,3(第 3 题很重要,讲解的时候先将答案告诉学生,然后通例的方式来讲解过程)for循环for 语句的格式 for(表达式 1;表达式 2;表达式 3)(1)for 是 C 语言的关键字(2)for 里面的三个表达式必须使用分号隔开1)表达式 1 表示赋初值2)表达式 2 表示空值循环,和 while(表达式)中的表达式具有同样的效果3)表达式 3 表示赋值执过举二、三、循环体语句4)for PK while表达式 1;while(表达式 2)循环体语句表达式 3EG:i=1;while(i=100)sum=sum+1;i+;for(表达式 1;表达式 2;表达式 3)循环体
6、语句EG:for(i=1;i=100;i+)sum=sum+l;总结:while 和 for 都表示循环,本质上没有区别,用 for 实现的用 while 也能实现,一般认为 for 语句的格式相对要简单,因此考试中出现较多的是for 语句。(3)循环体语句只能是一条语句或是一个复合语句(4)3 个表达式可以省略,但是两个分号不能省略,循环体语句省略时表示不做任何的操作1)省略表达式 1:for(;i=100;i+)sum+=i;2)省略表达式 3:for(i=1;i=100;)sum+=i;i+;3)省略三个表达式:for(;)相当于 while(1),表示永真,程序将进入死循环2.for
7、语句的执行过程(1)首先执行表达式 1判断表达式 2 的真假(3)如果表达式为真则执行循环体,否则结束循环(4)执行完循环体后执行表达式 3,接着执行第 2 步,进入循环3.for 语句举例一重点注意循环步骤(小知识大智慧,把下面的例题讲好讲清楚,基本上 for 也就掌握得差不多了)讲解课本 P66 例 1,不能正确计算 f=4!的程序段是A)f=0;for(i=1;i=4;i+)f*=i;分析步骤:初值:f=0,执行表达式 1:i=1,判断表达式 2:if=f*i-f=0*1-f=0,执行完循环体,继续执行表达式3,i+-i=2(2)初值:f=0,i=2,判断表达式 2:if=f*i-f=0
8、*2-f=0,执行完循环体,继续执行表达式3,i+-i=3(3)初 值:f=0,i=3,判断表达式2:if=f*i-f=0*3-f=0,执行完循环体,继续执行表达式3,i+-i=4(4)初 值:f=0,i=4,判断表达式2:if=f*i-f=0*4-f=0,执行完循环体,继续执行表达式3,i+-i=5(5)初值:f=0,i=5,判断表达式 2:i=4 为假,结束循环总结:通过执行得知 f 最终的值为 0,谨记 0 乘以任何数都为 0,遇到乘法问题一定 I I、I-、八要注意。B)f=1;for(i=1;i4;i+)f*=i;I(1)分析步骤:(1)初值:f=1,执行表达式 1:i=1,判断表达
9、式 2:if=f*i-f=1*1-f=1,执行完循环体,继续执行表达式 3,i+-i=2(2)初 值:f=1,i=2,判 断表达式 2:if=f*i-f=1*2-f=2,执行完循环体,继续执行表达式3,i+-i=3(3)初 值:f=2,i=3,判 断表达式 2:if=f*i-f=2*3-f=6,执行完循环体,继续执行表达式3,i+-i=4(4)初值:f=6,i=4,判断表达式 2:i1;i+)f*=i;分析步骤:(1)初值:f=1,执行表达式 1:i=4,判断表达式 2:i1 为真,因此进入循环体,执行 f*=i-f=f*i-f=1*4-f=4,执行完循环体,继续执行表达式 3,i+-i=5(
10、2)初 值:f=4,i=5,判 断表 达式 2:i1 为 真,因此 进入循环 体,执行f*=i-f=f*i-f=4*5-f=20,执行完循环体,继续执行表达式 3,i+-i=6(3)i 的值自增,判断的条件为 i1,这样 i 永远大于 1,程序会持续执行下去,进 入死循环总结:通过执行得知 f 最终的值为无限大,近年考试往往会让考生判断构成或是不构 成无限循环的语句。D)f=1;for(i=4;i=2;i-)f*=i;分析步骤:(1)初值:f=1,执行表达式 1:i=4,判断表达式 2:i=2 为真,因此进入循环体,执行 f*=i-f=f*i-f=1*4-f=4,执行完循环体,继续执行表达式
11、3,i-i=3(2)初 值:f=4,i=3,判断表达式 2:i=2 为真,因 此进入循环体,执行f*=i-f=f*i-f=4*3-f=12,执行完循环体,继续执行表达式 3,i-i=2(3)初值:f=12,i=2,判断表达式 2:i=2 为真,因此进入循环体,执行f*=i-f=f*i-f=12*2-f=24,执行完循环体,继续执行表达式 3,i-i=1(4)初值:f=24,i=1,判断表达式 2:i=2 为假,结束循环总结:通过执行得知 f 最终的值为 24,为 4*3*2,刚好是 4!,为了好理解循环范围做一个调整:for(i=4;i=2;i-)f*=i;改为 for(i=4;i=1;i-)
12、f*=i;四、循环嵌套该知识点和第七章对数组的排序(冒泡法排序)结合记起来进行讲解,这里不多讲。五、break和continue语句1、break 的使用(1)可以用于 switch 和循环结构;(2)用于 switch 时,表示跳出 switch 语句;用于循环结构时,表示跳出离它最近的循环;2、continue 的使用(1)只能用于循环结构;(2)表示结束本次循环;3、break PK continue(1)跳出循环,以 for 循环为例:Eg:for(表达式 1;表达式 2;表达式 3)语句 1 break;语句 2语句 3其执行顺序是:表达式 1语句 1break语句 3(2)结束本次
13、循环,以 for 循环为例:for(表达式 1;表达式 2;表达式 3)语句 1 con ti nue;语句 2语句 3其执行顺序是:Eg表达式 1表达式 3 语句 1con tinue语句 34、讲解课本 P67 习题 1mai n()判断:x%3-8%3-2 为真,执行 if 语句:printf(%d;”,x-);输出 x-为 8,x 为 7int x=8;执行 continue,结束本轮循环,不在执行 continue 以后的语句for(;x0;x-)执行表达式 3:x-,则 x 的值为 6(2)x=6,判断 x0 为真,执行循环体:if(x%3)判断:x%3-6%3-0 为假,不执行
14、ifprintf(%d:,x-);-语句,执行 if 后面的语句con ti nue;printf(%d,”,-x);输出-x 为 5,x 为 5执行表达式 3:X-,则 x 的值为 4printf(%d,”,-x);.-(3)x=4,判断 x0 为真,执行循环体(1)x=8,判断 x0 为真,执行循环体:六、上机中循环题型(编程题40分)做题技巧:(1)首先确定循环变量i的范围,开始值和终止值(2)确定求和还求乘积,求和必须给变量赋值为0,求乘积给变量赋值为1(3)确定循环体语句,谨记循环体就是一个公式,常见的公式:1)求和:sum=sum+i;2)求乘积:s=s*i;3)求1+1/2+1/
15、3+1/n:sum=sum+1.0/i;4)求ln(1)+ln(2)+.+ln(n):sum=sum+log(i);1、求小于形参 n 能同时被 3 和 7 同时整除的所有自然数之和的平方根(1)确定循环变量的范围:小于 n 的自然数,就可以确定为 1-n(2)该题要求和,因此定义一个变量 sum 并赋值为 0,定义 s 表示和的平方根(3)使用求和公式:sum=sum+i;int i,sum;sum=0;for(i=1;in;i+)if(i%3=0&i%7=0)sum=sum+i;s=sqrt(sum);2、求出 1 到 m 之间各个数字 In(i)值的和的平方根(1)确定循环变量 i 的范
16、围:1-m,在没有特殊说明的情况下,一般都要包括(2)该题要求和,因此定义一个变量 sum 并赋值为 0,定义 s 表示和的平方根(3)使用求和公式:sum=sum+i;int i,sum;sum=0;for(i=1;i=m;i+)sum=sum+Iog(i);s=sqrt(sum);和1第七章数组-I本章考点考点一维数组的定义及引用一维数组的初始化二维数组的定义及引用(难点)考核几率80%80%90%90%:分值13123412二维数组的初始化丿教学内容一、一维数组1.一维数组的定义类型名数组名常量表达式(1)类型名整型(int)、单精度实型(float)、双精度实型(double)、字符型
17、(char)(2)数组名必须符合标示符命名规则(3)常量表达式必须为整型常量,不能为变量,常量表达式表示数组的长度(4)一维数组举例1)2)(5)笔试考试分析(6)上机考试分析int a5;/*定义了一个长度为 5 的一维整型数组 a*/doule b5+5;/*定义了一个长度为 10 的一维双精度实型数组 b*/2.一维数组的赋值(1)单个赋值1)给变量赋值int a;/*定义了一个整型变量 a*/a=10;/*给变量赋值为 10*/2)给数组元素分别赋值,原理:数组元素本质就是变量int a3;/*定义了一个整型数组 a*/a0=10;a1=20;a2=30;(2)整体赋值1)变量赋值in
18、t a=10;2)一维数组赋值之数组长度等于赋值个数的情况 正确形式:int a3=10,20,30;分析:定义了一个一维数组 a,分别为 a0的值为 10,a1的值为 20,a2的值 为30 错误形式:int a3=10,20,30;分析:给数组赋值时不要忘记使用将元素括起来,否则将出错3)一维数组赋值之数组长度大于赋值个数的情况int a5=10,20,30;分析:当赋值的个数小于数组长度时,采用从左向右自动一一对应赋值的策略,右 边不够部分自动补 0。a2a3a4301020004)一维数组赋值之数组长度小于赋值个数的情况int a5=10,20,30,40,50,60;分析:数组长度为
19、 5,赋值个数为 6,这样的情况好比有一个瓶子容积为a0a15L,现在倒入 6L 的水,这样就会出现溢出的情况,因此这种情况下即为错误5)一维数组赋值之特殊情况 int a5=0;分析:表示给数组 a0赋值为 0,a1为 0,a2为 0,a3为 0,a4为 0a0a1a2a3a400000int a5=;表示给数组赋值不确定值,而不是6)一维数组赋值之不指明数组长度int a=1,2,3,4,5;/*数组长度为 4*/int a=0;/*数组长度为 1*/int a=0,0;/*数组长度为 2*/int a=;/*数组长度为 0*/03.一维数组中元素的引用(1)数组元素的一般形式 数组名下标
20、表达式1)数组中的元素其实就是一个变量,占用一个存储单元int a5=1,2,3,4,5;a0=10;/*a0原来的值为 1,重新赋值为 10*/a1+;/*a1的值为 2,执行 a1+后 a1的值为 3*/a4=a2+a3/*a2的值为 3,a3的值为 4,a4的值为 7*/分析:通过执行后数组的元素为:10,3,3,4,7a0 I a1a2a3a4102)下标表达式的下限为 0,上线为常量表达式-1(2)笔试考点:数组与循环的结合1)重点讲解课本 P97 例 2,重点注意步骤例 2main()inti,n=0,0,0,0,0;for(i=1;i=4;i+)n i=ni-1*2+1;prin
21、tf(%d”,ni);分析步骤:初值:i=1,n0=0,n 1=0 判断:i=4 为真,执行循环体:初值:i=5,n4=15 判断:i=4 为假,结束循环体2)重点讲解课本 P97 例 3,注意思想,求一维数组的平均值/*求和时一定要赋初值为 0,此处考点上机考试较多*/sum=0;for(i=0;i10;i+)/*循环控制有多少个元素参加求和运算*/sum=sum+bi;/*通过 bi在 0 到 9 之间的变化,最后将求得 sum 的值*/aver=sum/10;/*使用和除以人数,求得平均值 aver*/3)重点讲解课本 P97 例 4,注意思想,求及格人数/*cnt 表示计数,用来存储及
22、格的人数,必须赋值为cnt=0;for(i=0;i=60)cnt+;/*此条件要求 bi 大于等于 60 时,执行 cnt+*/*如果满足bi 大于等于 60,表示及格,因此计数加 1*/二维数组1、二维数组的定义:类型名 数组名常量表达式 1 常量表达式 2(1)类型名:整型(int)、单精度实型(float)、双精度实型(double)、字符型(char)(2)数组名:必须符合标示符命名规则,是数组的标志(3)常量表达式:必须为整型常量,不能为变量,常量表达式 1 表示二维数组的行,常 量表达式 2表示二维数组的列int a55;double b44;char ch33;(4)数组元素本质
23、就是变量,数组元素有一个下标,下标从 0 开始到数组长度-1 结束 int a22;定义了一个名为 a 的整型数组,数组元素为 2*2=4 个,数组 a 的元素为:列相同 列相同a00、a01行相同:第一行a10、a11行相同:第二行2、二维数组的赋值(1)给一维数组元素分别值1)给变量赋值:int a;/*定义了一个整型变量 a*/a=10;/*给变量赋值为 10*/2)给数组元素分别赋值,原理:数组元素本质就是变量int a22;/*定义了一个整型数组 a*/a00=10;a01=20;a10=30;a11=40;(2)给二维数组元素整体赋值1)给变量赋值int a=10;2)给二维数组赋
24、值,数组长度等于赋值个数的情况 有大括号限定的情况,一个大括号对应一行int a22=10,20,30,40;定义了一个一维数组 a,分别为 a00的值为 10,a01的值为20,a10的值为 30,a11的值为 40 没有大括号限定的情况,一一对应赋值int a22=10,20,30,40;定义了一个一维数组 a,分别为 a00的值为 10,a01的值为20,a10的值为 30,a11的值为 40;int a22=0;分析:表示给数组 a00的值为 0,a01的值为 0,a10的值为 0,a11 的值为 0 省略行下标情况(不能省略列下标)int a2=10,20,30,40;/*省略了行下
25、标,赋值时 10,20和30,40 都被大括号括起来,因此省略的行数应该为 2*/int a2=10,20;/*省略了行下标,赋值时 10,20 刚好够一行,因此行数 为 1*/int a2=10,20,30;/*省略了行下标,赋值时 10,20,30 多于一行少于 2 行,将第二行的列补齐,补入一个数字让赋值个数够两行,因此行数为 2*/int a3=10,20,30,40;/*省略了行下标,赋值时 10,20,30,40 多于一行少 于 2 行,将第二行的列补齐,补入 2 个数字让赋值个数够两行,因此行数为 2*/3)给二维数组赋值,数组长度大于赋值个数的情况,不够赋值的数组元素赋值为 0
26、 有大括号限定的情况,一个大括号对应一行,每行不够的补 0int a22=10,30;定义了一个一维数组 a,第一行有一个元素 10,第二行 有一个元素 30,不够的元素补 0。分别为 a00的值为 10,a01的值为 0,a10 的值为 30,a11的值为 0 没有大括号限定的情况,一一对应赋值,整体剩余补0int a22=10,30;定义了一个一维数组 a,这里没有限定 10 和 30 属于第几行,因此采取一一对应赋值,剩余的元素自动补 0。分别为 a00的值为 10,a01的 值为 30,a10的值为 0,a11的值为 04)给二维数组赋值,数组长度小于赋值个数的情况,错误情况 赋值个数
27、不能多于行数int a22=10,20,40,50,60,70;赋值个数不能多于列数int a22=10,20,30,40,50;赋值个数不能多于数组元素个数int a22=10,20,40,50,60,70;/*数组 a 有 4 个元素,赋值时给了 5 个数字*/(3)重点讲解课本 P100 例 1,讲解时候必须指明为什么对?为什么错?(4)讲解课本 P101 习题 1,讲解时候必须指明为什么对?为什么错?3、一维数组中元素的引用(1)数组元素的一般形式如下:数组名 行下标列下标 1)数组中的元素其实就是一个变量,占用一个存储单元int a25=1,2,3,4,5,6,7,8,9,10;a0
28、0=10;/*a00 原来的值为 1,重新赋值为 10*/a11+;/*a11的值为 7,执行 a11+后 a11的值为 8*/a14=a02+a13;/*a02的值为 3,a13的值为 9,a14的值为 12*/2)下标表达式的下限为 0,上线为常量表达式-1(2)重点讲解课本 P101 习题 2,若有定义:int a23;A)a2!1-a20行越界B)a23-行、列都越界C)a03-列越界D)a12!1-a00表示第一行的第一个元素,正确三、循环嵌套与数组的应用(循环和数组不分家)1.循环与数组的应用(1)讲解课本 P101 例 1,通过键盘输入 10 个数,并输出这些数中的最大值和最小值
29、 上机考试中容易考到填空题,请学员注意以下几个空:for(i=1;i ai)(4)=ai;(2)讲解习题 104 页习题 1,注意过程mai n()int i,t3=9,8,7,6,5,4,3,2,1;for(i=0;i3;i+)printf(“%d,t2-ii);步骤如下:执行 for 表达式 1:i=0,判断表达式 2:i printf(“%d,t20);-输出 3执行表达式 3:i+-i=1 i=1,判断表达式 2:i printf(i=2,判断表达式 2:i printf(“%d,t11);-输出 5 执行表达式 3:i+-i=2“%d,t02);-输出 7执行表达式 3:i+-i=3
30、 i=3,判断表达式 2:i3 为假,结束循环2.循环嵌套与数组的应用(1)必须掌握课本 102 例 2(冒泡法排序)考试重点1)循环嵌套口诀:外循环循环一次,内循环循环全部,直到外循环为假时结束整个 循环;2)将例 2 按步骤讲清楚,学员就明白什么是循环;将例 2 练习熟练,学员就掌握了 循环;3)记住红色部分,上机考试至少可以得到10 分解题步骤:外循环:i=0,判断 ij=1,判断:jb1-42 为真,执行 if 语句,进行交换:a=b0,b0=b1,b1=a-b数组中的元素变为:2,4,8,3,1。执行:j+j=2,判断:jb2-28 为假,不执行 if 语句,执行:j+-j=3,b
31、数组中的元素为:2,4,8,3,1j=3,判断:jb3-23 为假,不执行 if 语句,执行:j+-j=4,b 数组中的元素为:2,4,8,3,1j=4,判断:jb4-21 为真,执行 if 语句,进行 交换:a=b0,b0=b4,b4=a-b数组中的元素变为:1,4,8,3,2。执行:j+j=5,判断:ji=1,继续执行下一次循环 外循环:i=1,判断 ij=2,判断:jb2-48 为假,不执行 if语句,执行:j+-j=3,b 数组中的元素为:1,4,8,3,2 j=3,判断:jb3-43 为真,执行 if 语句,进行 交换:a=b1,b1=b3,b3=a-b 数组中的元素变为:1,3,8
32、,4,2。执行:j+j=4,判断:jb4-32 为真,执行 if 语句,进行 交换:a=b1,b1=b4,b4=a-b 数组中的元素变为:1,2,8,4,3。执行:j+j=5,判断:ji=2,继续执行下一次循环 外循环::i=2,判断 ij=3,判断:jb3-84 为真,执行 if 语句,进行交换:a=b2,b2=b3,b3=a-b 数组中的元素变为:1,2,4,8,3。执行:j+j=4,判断:jb4-43 为真,执行 if 语句,进行 交换:a=b2,b2=b4,b4=a-b 数组中的元素变为:1,2,3,8,4。执行:j+j=5,判断:ji=3,继续执行下一次循环 外循环:i=3,判断 i
33、j=4,判断:jb4-84 为真,执行 if 语句,进行交换:a=b3,b3=b4,b4=a-b 数组中的元素变为:1,2,3,4,8。执行:j+j=5,判断:ji=3,继续执行下一次循环 外循环:i=4,判断 i4 为假,结束整个循环,最终结果:1,2,3,4,8 从小到大排序(2)讲解课本 P72 例 4(嵌套循环和 break 的考点)main()int i=0,a=0;while(i20)for(;)if(i%10=0)break;else i-;i+=21;a+=i;解题步骤:i=0,a=0,执行外循环:判断 i0%10=0 为真,执行break 语句,则跳出内循环 for(),执行之后的语句:i+=21-i=21,a+=i-a=21i=21,a=21,执 行 外 循 环:判 断 i20 为 假,结 束 循 环