C语言教案第6章
大学C语言程序设计 第六章

2.函数表达式: 2.函数表达式: 函数表达式
功能:将函数作为表达式的一部分。 功能:将函数作为表达式的一部分。 如: c=2*max(a,b); 要点:要求函数带回一个确定的值,以参加表达式的运算。 要点:要求函数带回一个确定的值,以参加表达式的运算。
3.一个函数作为另一个函数的参数: 3.一个函数作为另一个函数的参数: 一个函数作为另一个函数的参数
若不需要函数带回任何值,可使用: 若不需要函数带回任何值,可使用:
void printstar(){ …} } void print_message(){…} print_message(){ }
例exp6_5:函数返回值的类型与其定义的 exp6_5:函数返回值的类型与其定义的 类型不符的情况。 类型不符的情况。
一函数的定义重点二函数的调用重点1函数的一般调用2函数的嵌套调用3函数的递归调用三数组作为函数的参数难点四局部变量与全局变量难点五变量的存储类别难点六内部函数与外部函数1概述2函数定义的方法重点3函数的参数难点4函数的返回值难点1c程序的基本结构回顾2什么是函数
第六章
[教学要求] 教学要求]
函
数
1.理解函数的功能。 理解函数的功能。 2.掌握函数定义的一般形式(重点)。 掌握函数定义的一般形式(重点)。 掌握函数的形参与实参的对应关系、 3.掌握函数的形参与实参的对应关系、参数传递方法及函数返回值 的概念(难点) 的概念(难点) 。 掌握函数调用的基本方法(重点) 4.掌握函数调用的基本方法(重点) 。 掌握函数嵌套调用的一般过程(重点) 5.掌握函数嵌套调用的一般过程(重点) 。 了解函数递归调用的几种形式。 6.了解函数递归调用的几种形式。 掌握数组名作为函数的参数的一些特点(难点) 7.掌握数组名作为函数的参数的一些特点(难点) 。 8.掌握局部变量与全局变量的概念及它们的使用特点(难点) 。 掌握局部变量与全局变量的概念及它们的使用特点(难点) 掌握动态存储变量与静态存储变量的含义,会正确识别和使用。 9.掌握动态存储变量与静态存储变量的含义,会正确识别和使用。 10.了解内部函数与外部函数的含义。 10.了解内部函数与外部函数的含义。
C语言教案第6章

max=a[0][0]; row=col=0;/*假定a[0][0]最大*/
for(i=0; i<=3; i++)
for(j=0; j<=2; j++)
if(a[i][j]>max)
{ max=a[i][j]; /*刷新max*/
#include “stdio.h”
main()
{ int i=1,j;
char con_key=‘\x20’;/* ‘\x20’空格键的ASCII码*/
float score[5],ratio[4]={0.1,0.2,0.2,0.5}; /*定义成绩、比例系数数组*/
while(con_key=='\x20')
复习
字符数据类型、字符和字符串
新授
第六章 数组
前面使用了一些基本的数据类型如整型、实型等,可以满足数据的基本要求,然而在现实中对数据的处理仅依赖于已的基本数据类型是不够的,为了解决比较复杂的问题,C语言提供了一种最简单的构造类型──数组。
6.1一维数组的定义和引用
6.1.1 1维数组的定义
数组是同类型数据的在序集合,即数组由若干数组元素组成,期中所有元素都属于同一个数据类型,即它们的先后次序是确定的。
main()
{ int data[NUM];/*定义1个1维整型数组data*/
int i,j,temp;/*定义循环变量和临时变量*/
clrscr();/*库函数clrscr():清屏*/
printf("Please input 10 numbers:\n");
《新编C语言程序设计教程》课件第6章

第 6章 循环结构程序设计
6.1 while语句 6.2 do-while语句 6.3 for语句 6.4 终止循环语句 6.5 多重循环 6.6 程序设计举例
第 6章 循环结构程序设计
6.1 while语句
格式: while (条件表达式)
其中,条件表达式描述进行循环的条件,语句描述要反复执行 的操作,称为循环体。
for(i=1;;i++) sum+=i
第 6章 循环结构程序设计
(4) 表达式3也可省略,分号也不能省,此时循环体中应有改 变循环条件的语句。例如:
for(i=1;i<=100;) {sum+=i;i++;}
(5) 当缺省表达式1、表达式2、表达式3中的一个、二个或全 部,或当采用逗号表达式时,可产生for语句的多种变化形式。
第 6章 循环结构程序设计
6.2 do-while语句
do–while语句是while语句的倒装形式。 格式:
do 语句 while (条件表达式)
功能:先执行循环,再计算条件表达式的值。当条件表达式的 值为真时,代表循环的条件成立,则继续执行循环。当条件表达 式的值为假,代表循环的条件不成立,则退出循环,执行循环的 下一条语句。
do–while语句反复执行循环,直到循环的条件不成立时为止。
第 6章 循环结构程序设计
说明:
(1) do–while语句是先执行,后判断。如果循环的条件一开始 就不成立,循环也将执行一次。
(2) 与while语句一样,循环体中同样必须有改变循环条件的语 句,否则循环将不能终止,形成无限循环。
(3) 循环体为多条语句时必须采用复合语句。 (4) 当循环条件为永真条件时,将变成无限循环。
C语言程序设计(第二版)课件第6章

6.2函数
❖ 运行结果:
main函数是主调函数,max是被调函数。其中x,y是实参,在数据传 递过程中x,y必须是确定的值。a,b是形参,用之前形参的数据类型 与实参相匹配。最后通过return语句返回a,b中较大值。
6.2函数
6.2.2 函数的声明
❖ 在本章例6.2中,如果被调函数的定义在main函数的后面,那么在 主函数main中需要对被调函数的进行声明。这种方式和变量相同, 先定义后使用。主要目的是使编译系统知道被调函数返回值类型, 以便在主调函数中对此类型的函数值作相应的处理。
❖ C程序的全部工作是由各种功能的函数完成的,C语言 称为函数式语言。采用函数模块式的结构,C语言实现 了结构化程序设计,使程序的层次结构清晰,方便程序 的编写、阅读、调试。
本章目录
6.1函数分类 6.2函数 6.3 函数调用 6.4函数和数组 6.5变量的作用域 6.6变量的存储类别 6.7内部函数和外部函数
其中第一,第二行对str函数和f函数预先作了说明。 因此在以后各 函数中无须对str和f函数再作说明就可直接调用。 ❖ 4. 对库函数的调用不需要再作说明, 但必须把该函数的头文件用 include命令包含在源文件前部。
6.2函数
❖ 6.2.3函数的参数
❖ 函数的参数分为形参和实参两种。 在本小节中,进一步介绍形参、 实参的特点和两者的关系。形参出现在函数定义中,在整个函数体 内都可使用,离开该函数不能使用。实参出现在主调函数中,进入 被调函数后,实参变量也不能使用。实参和形参之间的数据传递是 单项值传递,相当于实参的值复制到形参中,并且形参的任何变化 不影响实参。
6.1函数分类
C语言中可从不同的角度对函数分类。
❖ 1. 从函数定义的角度,函数分为库函数和用户定义函数。
C语言程序设计教案第6章21-24

【问题】两种排序算法哪一种排序效率更高,高在什么地方?
6.2嵌套与递归设计与应用(0.5学时)
教学内容
(1)函数的嵌套。
(2)函数的递归设计与应用。
讲解思路
(1)函数的嵌套
二维数组作为函数参数:用实例来说明数组传递数据的重要作用。
【实践】编写程序实现(1)中的例题。
5.4模块化设计中程序代码的访问和应用实例(1学时)
教学内容
(1)模块化设计中程序代码的访问。
(2)应用实例。
讲解思路
(1)模块化设计中程序代码的访问举例说明用指针可以访问程序代码。
(2)应用实例。
计算器增加一个连续相加的功能。
(3)教师程序编写:让学生观摩程序的编写、运行及产生结果的过程,与知识点一一对应,加深理解。
(4)学生用手机C语言模拟器编写程序:题目与例题类似,但小有变化,让学生在设计中的错误。
(5)问答:就一些知识点的变化与学生进行问答互动。
(6)就(4)和(5)中同学们的表现给出部分平时分,为了鼓励同学们的参与积极性,答对者加2-3分。
(3)掌握模块间批量数据传递的方法,提高综合应用程序设计的能力。
重点:简单的排序算法、嵌套与递归设计与应用、模块间的批量数据传递。
难点:递归调用、学生成绩管理综合用例。
教学方法及手段
(1)课件:根据本节课程设计的内容及计划安,逐步展现知识点。
(2)板书:针对学生在学习和练习过程中出现的问题,进行补充讲解。调节课堂节奏,给学生思考的时间。
模块化设计中程序代码的访问
应用实例
C语言程序设计:第6章 函数 课件教案

C语言程序设计课件教案第六章函数教学目的掌握函数的定义、函数的声明、函数的调用、函数的设计原则,能够灵活的去定义和调用函数。
教学要求1.掌握函数的定义、声明、调用掌握常量的概念与使用2.熟练掌握函数的设计原则3.熟练掌握函数形参的异常判断、函数返回值的使用重点和难点1.函数定义和使用2.形参的异常判断、函数返回值的使用教学支撑环境与教学资源:1.笔记本电脑2.VC20103.投影仪教学方法讲授法、练习法、讨论法授课课时6课时教学过程一、课程引入什么是模块化?模块化有哪些特点?我们C语言中是否可以实现模块化编程?函数是完成一个个特定任务的语句集合,它能完成你所想要的某种特定任务,当你要用时,只需要调用它即可,在后续的修改或是维护过程中,只需要针对这一个进行修改即可。
作用1:减少程序的代码量作用2:代码复用作用3:使程序具有良好的结构二、函数的定义函数的定义:包括两个部分,分别是“函数头”和“函数体”。
返回值数据类型函数名(数据类型形参1,数据类型形参2,....)//函数头{//函数体(可以有多条语句)}[注意1]:函数的返回值和参数可以是任意类型,包括空类型!!当函数无返回值或无形参列表时,建议用void指明[注意2]:函数名是一种标识符,必须符合标识符的命名规则!单词首字母不大写,从第二个单词起首字母大写。
[注意3]:函数的参数可以没有,也可以有多个参数(本章最后讲解)【思考】如果源文件只有如上说是的代码可以运行吗?同学们自己尝试一下![注意4]:一个项目中必须要有一个主函数,没有主函数,程序找不到执行的入口,代码无法运行。
[注意5]:函数头要有头注释(功能,参数,返回值),函数定义不可以嵌套。
【思考】现在在上面代码的基础上添加好主函数,试试可以运行吗?[注意6]:函数如果不被调用,就不会执行。
三、函数的调用语法 : 函数名(实际参数1,实参2,...)#include <stdio.h>void printStar(void){printf("****");return ;}int main(void){printStar();//调用函数printStarreturn 0;}[注意1]:如果是A函数调用B函数,则A函数叫主调函数,B叫被调用函数在这个代码示例中,main函数就可以称为主调函数,prinfStar函数就可以称为被调函数。
C语言程序设计:第6章函数课件教案

C语⾔程序设计:第6章函数课件教案C语⾔程序设计课件教案第六章函数教学⽬的掌握函数的定义、函数的声明、函数的调⽤、函数的设计原则,能够灵活的去定义和调⽤函数。
教学要求1.掌握函数的定义、声明、调⽤掌握常量的概念与使⽤2.熟练掌握函数的设计原则3.熟练掌握函数形参的异常判断、函数返回值的使⽤重点和难点1.函数定义和使⽤2.形参的异常判断、函数返回值的使⽤教学⽀撑环境与教学资源:1.笔记本电脑2.VC20103.投影仪教学⽅法讲授法、练习法、讨论法授课课时6课时教学过程⼀、课程引⼊什么是模块化?模块化有哪些特点?我们C语⾔中是否可以实现模块化编程?函数是完成⼀个个特定任务的语句集合,它能完成你所想要的某种特定任务,当你要⽤时,只需要调⽤它即可,在后续的修改或是维护过程中,只需要针对这⼀个进⾏修改即可。
作⽤1:减少程序的代码量作⽤2:代码复⽤作⽤3:使程序具有良好的结构⼆、函数的定义函数的定义:包括两个部分,分别是“函数头”和“函数体”。
返回值数据类型函数名(数据类型形参1,数据类型形参2,....)//函数头{//函数体(可以有多条语句)}[注意1]:函数的返回值和参数可以是任意类型,包括空类型!!当函数⽆返回值或⽆形参列表时,建议⽤void指明[注意2]:函数名是⼀种标识符,必须符合标识符的命名规则!单词⾸字母不⼤写,从第⼆个单词起⾸字母⼤写。
[注意3]:函数的参数可以没有,也可以有多个参数(本章最后讲解)【思考】如果源⽂件只有如上说是的代码可以运⾏吗?同学们⾃⼰尝试⼀下![注意4]:⼀个项⽬中必须要有⼀个主函数,没有主函数,程序找不到执⾏的⼊⼝,代码⽆法运⾏。
[注意5]:函数头要有头注释(功能,参数,返回值),函数定义不可以嵌套。
【思考】现在在上⾯代码的基础上添加好主函数,试试可以运⾏吗?[注意6]:函数如果不被调⽤,就不会执⾏。
三、函数的调⽤语法 : 函数名(实际参数1,实参2,...)#includevoid printStar(void){printf("****");return ;}int main(void){printStar();//调⽤函数printStarreturn 0;}[注意1]:如果是A函数调⽤B函数,则A函数叫主调函数,B叫被调⽤函数在这个代码⽰例中,main函数就可以称为主调函数,prinfStar函数就可以称为被调函数。
C语言程序设计实用教程 第6章.ppt

for(i=0;i<N;i++)
if(score[i]>aver) n++;
printf(“average=%.2f \n ”,aver);
printf(“n=%d”,n);
}
6.1.2 数组中的相关概念
1.数组:是指一组具有相同类型的数据的有序的集合。
2.数组下标:是数组元素在数组中位置的一个索引或指示。
printf(“please input students grade:”);
for(i=0;i<N;i++)
score[i]是数组元素,用来存放第i个
{ scanf(“%f”,&score[i]); 学生成绩*
sum=sum+score[i]; /*将学生成绩累加到总分中 */
}
aver=sum/N;
则数组a中元素的初始值为系统分配给数组元素的内存单 元中的原始值,这些值对编程者来说是不可预知的,因此 在使用时要注意。
(2)若定义数组时在类型名前面加一个关键字static,即将 数组定义成静态存储,这时不为数组赋初值,系统也会自 动将全部元素赋以0值。例如: static int b[5]; 表示定义了一个静态数组b,该数组中所有元素值均为0。
aver=sum/100;
/*求出平均成绩*/
在本程序中能否统计高于平均分的学生人数呢?
用数组来解决这个问题,不仅效率高而且程序编写容易。
#define N 100 void main()
score[N]表示数组,用来存放 N个学生的成绩
{ int i,n=0;
float score[N],sum=0,aver;
一维数组的初始化有以下几种情形:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1维数组是只有1个下标的数组,定义形式如下:
数据类型数组名[常量表达式][,数组名2[常量表达式2]……];
(1)“数据类型”是指数组元素的数据类型。
(2)数组名,与变量名一样,必须遵循标识符命名规则。
(3)“常量表达式”必须用方括号括起来,指的是数组的元素个数(又称数组长度),它是一个整型值,其中可以包含常数和符号常量,但不能包含变量。
Printf(“min=%d”,min);
}
6.1.4 1维数组应用举例
1、已知某课程的平时、实习、测验和期末成绩,求该课程的总评成绩。其中平时、实习、测验和期末分别占10%、20%、20%、50%。
/*案例代码文件名:AL6_2.C*/
/*功能:从键盘上循环输入某课程的平时、实习、测验和期末成绩,按10%,20%,20%,50%的比例计算总评成绩,并在屏幕上显示出来。按空格键继续循环,其他键终止循环。*/
(4)数组元素的下标,是元素相对于数组起始地址的偏移量,所以从0开始顺序编号。
(5)数组名中存放的是一个地址常量,它代表整个数组的首地址。同一数组中的所有元素,按其下标的顺序占用一段连续的存储单元。
6.1.2数组元素的引用
引用数组中的任意一个元素的形式:
数组名[下标表达式]
1.“下标表达式”可以是任何非负整型数据,取值范围是0~(元素个数-1)。
2.1个数组元素,实质上就是1个变量,它具有和相同类型单个变量一样的属性,可以对它进行赋值和参与各种运算。
3.在C语言中,数组作为1个整体,不能参加数据运算,只能对单个的元素进行处理。
6.1.3 1维数组元素的初始化
初始化格式:
数据类型数组名[常量表达式]={初值表}
(1)如果对数组的全部元素赋以初值,定义时可以不指定数组长度(系统根据初值个数自动确定)。如果被定义数组的长度,与初值个数不同,则数组长度不能省略。
score[4] += score[j] * ratio[j];
}
printf("总评成绩为:%6.1f\n", score[4]);
printf("\n按空格键继续,其它键退出");
con_key=getch(); /*getch()函数等待从键盘上输入一个字符*/
}
}
2、线性查找:从数组的第一个元素开始,依次将要查找的数和数组中元素比较,直到找到该数或找遍整个数组为止。
由A[n]~A[1]组成的n个数据,进行冒泡排序的过程可以描述为:
(1)首先将相邻的A[n]与A[n-1]进行比较,如果A[n]的值小于A[n-1]的值,则交换两者的位置,使较小的上浮,较大的下沉;接着比较A[n-1]与A[n-2],同样使小的上浮,大的下沉。依此类推,直到比较完A[2]和A[1]后,A[1]为具有最小排序码(数值)的元素,称第一趟排序结束。
main()
{ inta[10] ={0,2,4,6,8,10,12,14,16,18};
Int x,i,find=0;
printf("input the num for search");
scanf(“%d”,&x);
for(i=0;i<10; j++)
if x==a[i];
{find=1;
Break;
Printf(“input data;”);
For(i=0;i<4;i++)
Scanf(“%d”,&a[i]);
Printf(“\noutput data”);
for(i=0;i<4;i++)
Printf(“\a[%d]=%d”,I,a[i]);
}
案例1:求数组元素中的最大和最小值
Main()
{intI,max,min,inta[10];
#include “sቤተ መጻሕፍቲ ባይዱdio.h”
main()
{ int i=1,j;
char con_key=‘\x20’;/* ‘\x20’空格键的ASCII码*/
float score[5],ratio[4]={0.1,0.2,0.2,0.5}; /*定义成绩、比例系数数组*/
while(con_key=='\x20')
Printf(“input data;”);
For(i=0;i<10;i++)
Scanf(“%d”,&a[i]);
Max=a[0];
Min=a[0];
for(i=0;i<10;i++)
{if(a[i]<min) min=a[i];
If(a[i]>max) max=a[i];
Printf(“max=%d”,max);
复习
字符数据类型、字符和字符串
新授
第六章 数组
前面使用了一些基本的数据类型如整型、实型等,可以满足数据的基本要求,然而在现实中对数据的处理仅依赖于已的基本数据类型是不够的,为了解决比较复杂的问题,C语言提供了一种最简单的构造类型──数组。
6.1一维数组的定义和引用
6.1.1 1维数组的定义
数组是同类型数据的在序集合,即数组由若干数组元素组成,期中所有元素都属于同一个数据类型,即它们的先后次序是确定的。
while(con_key=='\x20')
{clrscr();
printf("输入第%2d个学生的成绩\n", i++);
printf("平时实习测验期末成绩\n");
score[4]=0;/* score[4]:存储总评成绩*/
for(j=0; j<4; j++)
{scanf("%f",&score[j]);
(2)“初值表”中的初值个数,可以少于元素个数,即允许只给部分元素赋初值。
(3)根据存储类型的不同,数组有静态数组(static)和动态数组(auto)之分;根据定义的位置不同,数组有内部数组(在函数内部定义的数组)和外部数组(在函数外部定义的数组)之分。
案例1:一维数组的输入与输出
Main()
{ int i, a[4];
}
If(find==1)
Pfintf(“%d is in a[%d]\n”,x,I);
Else
printf("not find the num:%d\n”,x);
}
3、从键盘上任意输入10个整数,要求按从小到大的顺序在屏幕上显示出来。
排序的方法有很多,本题采用冒泡法。
冒泡法的基本思想:通过相邻两个数之间的比较和交换,使排序码(数值)较小的数逐渐从底部移向顶部,排序码较大的数逐渐从顶部移向底部。就像水底的气泡一样逐渐向上冒,故而得名。