当前位置:文档之家› C教案—第六章

C教案—第六章

C教案—第六章
C教案—第六章

第十七讲函数(1)

学时:2学时

授课形式:板书+多媒体讲解+实例程序演示

主要内容及时间安排(课堂90分钟, 80分钟讲课,5分钟复习,5分钟总结):

(1)模块化程序结构的概念、C语言程序结构回顾(5分钟);

(2)函数调用简单例子分析(10分钟);

(3)函数的定义方法(三种有参、无参、空函数)(10分钟)

(4)函数参数和函数值(参数传递方法、参数类型对应关系、函数返回值的含义、返回值的类型等)(20分钟)

(5)简单函数定义和调用举例(40分钟)

(6)总结、习题布置和下一节知识点提要(习题8.1、8.3、8.4,下一节函数的使用深入、变量的作用域、变量的存储分类等)(5分钟)

重点:函数定义方法、函数调用方法、函数参数传递方法、返回值的使用和类型确定;

难点:函数调用方法、函数参数传递方法。

教学内容细节:

一、以具体实例引出函数的优点及函数的作用

例题:打印行列数不同的*号组成的多个矩形,比如打印3*4的、5*6、9*9的。

例题2:求连加和。输入的数不同;

例题3:程序规模方面考虑,如果有些题目太大,把所有程序都编在主函数中,主函数可读性会下降,规模结构也不尽合理。

所以可以考虑将部分程序功能做成功能包(函数),什么时候需要这个功能,什么时候调用这个功能包,这时只写功能包的名字就好了。代码的重用性增强、程序结构简化、可读性强、结构性强。

二、函数的定义方法

定义函数的一般形式如下:

类型标识符函数名(形式参数列表)

{声明部分;

执行部分;}

说明:

(1)类型标识符:C语言的数据类型,包括基本数据类型、指针、结构体等;

(2)函数名:符合C语言用户标识符的命名规则;

(3)形式参数列表:与从主调函数中传过来的参数相对应的形式参数列表,根据实际情况可有可无,但是小

扩号必须要有;与形参对应的是实参,主调函数中变量成为实际参数,实际参数在程序运行时分配空间,直到程序结束,空间释放,而形式参数什么时侯调用什么时候分配空间,子函数调用结束空间就释放。

(4){}:大括号必须要有,表示函数体的开始(左括号)和结束(用return或右括号)

特殊说明:

函数定义有两种形式:传统方式和现代方式,上面的是现代方式,传统方式的形参放在小括号外进行说明,小括号内只写上参数列表,对于参数类型不做说明,具体说明放在小括号和大括号之间。

对于函数体中用到的局部变量(不是用来接收主调函数传过来的变量),需要放到函数体中进行声明,就像我们以前设计主函数的函数体是一样的。

例1:两个数求最大值

int max(int x,int y)

{int t;

if(x>y) t=x;

else t=y;

return(t);}

分析:

(1)这个函数定义属于现代类型,函数返回值为两

个整数的较大值,所以函数类型需要说明为int类型;

(2)形式参数是两个,也就是主调函数需要给它两个值,让它在函数体内进行操作,形参的命名可以随意;

(3)在函数体中为了保存两个数中的最大值,新定义一个局部变量t,这个变量不能放在形参列表中,否则会要求主调函数传过来3个参数;

(4)return的作用是返回到主调函数,从哪调用的返回到哪。然后子函数结束。

三、函数的调用方法

依据上个例子,进行函数调用,只有产生函数调用,子函数才会起作用,否则子函数不起作用。

#include

main()

{

int a,b,c;

scanf("%d,%d",&a,&b);

c=max(a,b);

printf("max=%d",c);

}

int max(int x,int y)

{

int t;

if(x>y) t=x;

else t=y;

return(t);

}

四、关于return的说明

return的作用是将值返回到主调函数,其后的小括号可省略,但要用空格将返回的值和return分开。

每个子函数只能执行一次return,只要执行return 就返回到主调函数,return后的语句将不被执行。

return后的值类型和函数定义时的类型说明标识符一致,否则会出错,如果不一致编译也没有出错,则返回值的类型以类型说明符为准。

return语句不是子函数必须的,有的子函数只是执行具体功能语句,并不返回值,所以可以没有return语句。

return每次只能返回一个值,如果想返回多个值,就要考虑其他方法了。

五、关于变量类别及作用范围的说明

变量的类型包括:

Auto:自动变量,定义变量时默认的设置,使用时分配空间;

Static:静态变量,值一旦更改不能被二次初始化,只能用改变之后的值,一般考试时,这种定义往往放在子

函数中。如果定义了整形的静态变量,并没有赋初值,则

默认为0;

Register:寄存器变量,类似于auto只不过是放在

计算机CPU的寄存器中,运算速度比较快,但不能定义太多。

六、简单函数调用程序的设计

例1、设计函数实现求n!。

例2、设计函数实现数组的排序;注意交换两个数也

用函数实现;

七、其他练习题

(1)若函数中有定义语句:int k; ,则

A)系统将自动给k赋初值0 B)这时k中的值无

定义

C)系统将自动给k赋初值-1 D)这时k中无任何

(2)设函数中有整型变量n,为保证其未赋初值

的情况下初值为0,应选择的存储类别是

A)auto B)register C)static D)auto或register

(3)在C 语言中,只有在使用时才占用内存单元的

变量,其存储类型是

A)auto和 register B)extern 和register

C)auto 和static D)static 和register (4)有以下程序

#include

int f(int x,int y)

{ return((y-x)*x);}

main( )

{int a=3,b=4,c=5,d;

d=f(f(a,b),f(a,c));

printf(“%d\n”,d);

}

程序运行后的输出结果是

A)10 B)9 C)8 D)7

(5)有以下程序

#include

void f(int *p,int *q);

main( )

{int m=1,n=2,*r=&m;

f(r,&n); printf(“%d,%d”,m,n);

}

void f(int *p,int *q)

{p=p+1; *q=*q+1;}

程序运行后的输出结果是

A)1,3 B)2,3 C)1,4 D)1,2 (6)有以下程序

#include

void fun(int a,int b)

{int t;

t=a;a=b;b=t;

}

main()

{int c[10]={1,2,3,4,5,6,7,8,9,0},i;

for(i=0;i<10;i+=2)

fun(c[i],c[i+1]);

for(i=0;i<10;i++) printf("%d,",c[i]);

printf("\n");

}

程序运行的结果是

A)1,2,3,4,5,6,7,8,9,0,

B)2,1,4,3,6,5,8,7,0,9,

C)0,9,8,7,6,5,4,3,2,1,

D)0,1,2,3,4,5,6,7,8,9,

(7)有以下程序

#include

int a=1;

int f(int c)

{static int a=2;

c=c+1;

return (a++)+c;

}

main()

{int i,k=0;

for(i=0;i<2;i++)

{int a=3; k+=f(a);}

k+=a;

printf("%d\n",k);

}

程序的运行结果为

A)14 B)15 C)16 D)17

相关主题
文本预览
相关文档 最新文档