c语言程序设计函数调用
C语言第七讲 函数(2)

21
一、变量的存储空间分配概念
变量定义位置 变量的作用域 空间 (变量的使用范围)
变量的存储类别变量的生存期 时间
26
局部变量
二、变量的作用域——
局部变量(local variable)与全局变量(global variable)
例
void swap( ) { int t,x,y; t=x;x=y;y=t; } main() { int x=3,y=5; printf("x=%d,y=%d\n",x,y); swap( ); printf("x=%d,y=%d\n",x,y); }
斐波那契数列的递归方法实现。计算并输出斐波 那契数列的前7个数据。
1 当n =0, 1时
fib(n) =
fib(n-1)+ fib(n-2) 当n > 1时
int fib(int n) { if(n==0||n==1) return 1; else return fib(n-1)+fib(n-2); }
10
void main() { int n; for(n=11;n<=99;n++) if( absoluteprime(n) ) printf("%d\t",n); } /*判断一个数是否为绝对素数*/ int absoluteprime (int n) /*函数定义*/ { if(prime(n)==0) return 0; else if(prime(invert(n))==1) return 1; else return 0; }
大学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语言与程序设计》实验06---函数

实验六函数一、实验目的1. 熟练掌握函数的定义、函数的类型和返回值。
2. 熟练掌握形式参数与实际参数、参数值的传递。
3. 掌握函数的嵌套调用与递归调用。
4.学会使用指向函数的指针变量。
5.了解指向指针的指针的概念及带参数的main函数。
6. 掌握局部变量和全局变量。
7. 掌握变量的存储类型。
8. 了解内部函数和外部函数。
二、实验学时:8课时三、预习知识1.标准库函数标准库函数是C系统提供的,这些库函数定义了一些基本的、常用的功能,用户可以使用这些库函数,但是在使用库函数之前需要用预编译命令# include将该库函数所在的头文件包含进来。
2.自定义函数定义函数一般有两种形式形式1:存储类型类型符函数名(类型符形参1,类型符形参2 ,… ) { 说明语句执行语句}形式2:存储类型类型符函数名(形参1,形参2 ,……)形参类型说明{ 说明语句执行语句}说明:①形参表中即使没有参数,函数名后的一对圆括号也不能省略。
②函数名前的类型符是用来说明函数返回值的数据类型(也作为函数的数据类型) 。
当函数值为整型时,类型符可以省略。
③当函数只完成某一特定操作不需要返回值时,可用类型标识符 void 说明,将函数定义成空类型。
④C 规定:不允许在一个函数内部再定义另外一个函数,即函数不允许嵌套定义。
⑤函数的存储类型:函数的存储类型有 extern 和 static 两种。
extern 型的函数除了可以被本程序中其它函数调用外,还可以被其它文件中的函数调用,这种函数称为外部函数,如果定义函数时省略 extern ,则隐含为外部函数。
static 型的函数只能被本源程序文件中的函数调用,称为内部函数(静态函数)。
3.函数的参数(1)在定义函数时函数名后面括号中的变量称为形参(形式参数),如果有两个以上形参,形参之间以逗号分隔。
形参是函数的内部变量,只在函数内部才有意义。
在未出现函数调用时,形参不占内存。
对每个形参必须指明其名字和数据类型。
c语言程序设计5(函数)

参数的传递
1. 函数调用时,被调函数中的形参被分配 临时的存储单元,实参的值赋给形参变量 2. 实参可以是常量、变量或表达式 3. 实参的个数、类型和顺序必须与形参一致 4. 形参与实参各占一个独立的存储空间,调 用结束后,形参单元被释放
形参值的改变不会影响实参-----值传递
例:P134 main( ) { int v1=10, v2=20; printf(“v1=%d v2=%d\n”,v1,v2); printf(“_ do swap _\n”); swap(v1,v2); printf(“v1=%d v2=%d\n”,v1,v2); } void swap(int x, int y) { int temp; v1=10 v2=20 temp=x; _ do swap _ x=y; y=temp; v1=10 v2=20 }
自定义函数的应用实例
P136 例3:输出“九 九表”。 它是一个
9行9列的二维表格,
加上一个行标题和一
个列标题,显示出来
应该是10行10列。
#include <stdio.h> void drawLine(int n,char ch); /* 连续显示n个ch字符 */ main() { int i,j; printf("\n 9.9 table\n"); /* 显示表名 */ drawLine(30, '='); /* 显示每列的标题 */ printf("\n 1 2 3 4 5 6 7 8 9"); drawLine(30, '='); for (i=1; i<=9; i++) { /* 显示每行的内容 */ printf("\n%3d", i); for (j=1; j<=9; j++) printf("%3d", i*j); if (i<9) drawLine(30, '-'); else drawLine(30, '='); } void drawLine(int n, char ch) /*连续显示n个ch字符*/ } { int i; putchar('\n'); /*换行*/ for (i=1; i<=n; i++) putchar(ch); /*连续显示n个字符ch*/ }
C语言第3章(A-6(函数调用语句))

标准输入输出函数
printf scanf 例题: 注意: main() 必须为地址,“&”是地运算符, &a指a在内的地址。 { int a ,b ,c; scanf(“%d%d%d”, &a,&b,&c ); printf(“%d,%d,%d”,a,b,c); }
C语言程序设计
标准输入输出函数
C语言程序设计
标准输入输出函数
printf
用法:
1) %f :不指定输出的宽 度,由系统自动指定, 使整数部分全部输出, 并输出6位小数。
scanf
main() { float x,y; x=1111.2222; y=2222.4444; printf(“%f”,x+y); } 结果:3333.666608
实例:
printf(“ i= %d , c= %c ” , i , c);
格式控制:是用双引号括起来的字符串,也称为 “转换控制字符串”,它包括两部分信息: 1) 格式说明:由“%”和格式字符组成,如%d,%f等。 它的作用是将输出的数据转换为指定的格式输出。 2) 普通字符:需要原样输出的字符。如双引号中的 逗号、空格和换行符。
标准输入输出函数
printf scanf
2) %ms,输出的字符串占m列,如字符串本身长度大 于m,则按实际长度输出;如串长度小于m,则左补 空格。
printf(“%3s”,”china”);
输出结果:
printf(“%6s”,”china”);
china
china
C语言程序设计
标准输入输出函数
printf(“%ld”,e);
如果用%d输出,就会发生错误,因为整型数 据的范围为-32768-32767。
C语言_实验四、函数程序设计

实验四函数一、实验目的1.掌握函数的定义、函数的说明和调用。
2.掌握函数的参数及其传递方式,函数值的正确返回。
二、实验内容1.[目的]掌握标准库函数的说明和调用方法。
[题目内容]编写一个程序,首先显示一个菜单,然后根据用户的选择,输入数据后,执行相应的操作。
[输入]用户选择和函数自变量值[输出]如下菜单:=======MENU======1.。
sin2.。
cos3.。
pow4.。
sqrt0.。
exit==================[提示]使用标准库函数、多分支选择结构。
2.[目的]掌握用户自定义函数的定义、函数的说明和调用方法。
[题目内容]编写一个用户自定义函数,该函数有一个整型参数,函数的功能是:当这个整型数的值是偶数时,函数的返回值为0,当这个整型数的值是奇数时,返回值为1 。
编写一个程序,从键盘输入任意10个整数,分别调用用户自定义函数来判断这10个整数的奇偶性。
[输入]任意10个整数[输出]这10个整数的奇偶性[提示]在主函数中使用循环结构输入10个整数。
根据子函数的返回值输出相应的判断结果信息。
3.[目的]掌握用户自定义函数的定义、函数的说明和调用方法。
[题目内容]编写一个用户自定义函数,该函数有三个整数参数,函数的功能是:求解这三个整数的最大值,函数的返回值为三个参数的最大值。
编写一个程序,从键盘输入任意5个整数,分别两次调用用户自定义函数来求出这5个整数中的最大值。
[输入]任意5个整数[输出]这5个整数的最大值[提示]先用前三个整数调用函数,求出的最大值作为参数之一,再与另两个整数一起求出最大值即为所求。
4.[目的]掌握用户自定义函数的定义、函数的说明和调用方法。
[题目内容]nA表示从m各元素中抽出n个元素的排列的个数。
它的计算公式为:m)!(!n m m A n m -=。
编写一个用户自定义函数,该函数有一个整数参数,函数的功能是:求解这个整数的阶乘,函数的返回值为这个整数的阶乘。
c语言程序设计——标准输入函数

c语言程序设计——标准输入函数
scanf(),printf(),均定义在文件stdio.h中,需要在程序开头做预处理声明#include<stdio.h>一、标准输入函数
scanf() 是格式化输入函数,它从标准输入设备读取输入的信息。
1.scanf()的调用格式:scanf(格式化字符串,变量地址表);
2.scanf()使用说明
①scanf()在读操作中自动忽略一个或多个空白字符
②scanf()在读操作中忽略与一个非空白字符相同的字符
③格式化说明符:%开始,后面跟一个或几个规定字符来确定输入输出的内容格式
3.变量地址表:
①变量地址表是需要读入的所有变量的地址,各变量地址之间用逗号隔开,“&”是取
地址符
②对于各个变量,类型说明符是什么,对应的格式化说明符就应该是什么,否则程序会
出现错误或者实际输入的数据与预期输入的数据不同。
③对于数组或者字符串变量,由于数组名和指针本身就是地址,所以在scanf()函数中不
需要加取地址符。
④可以在格式化字符串中的“%”和格式化规定符之间加入一个数字,表示输入读取的
最大位数。
⑤当使用多个scanf()连续输入多个字符变量时,会出现错误。
(完成一次输入时,按下
回车键,此时回车符在缓冲区,在进行下一次输入时,回车符被赋给下一个变量)解决办法:在输入函数之前加入清除函数fflush(),或者在第二个scanf();之前加一个getchar();。
C程序设计(函数的声明与调用)习题与答案

1、以下关于函数的叙述中正确的是()。
A.每个函数都可以被其它函数调用(包括main函数)B.每个函数都可以被单独编译C.每个函数都可以单独运行D.在一个函数内部可以定义另一个函数正确答案:B2、对于函数,正确的说法是()。
A.必须包含函数体B.必须有返回信息C.必须有返回语句D.必须有形式参数正确答案:A3、以下叙述中正确的是()。
A.函数的定义和函数的调用均不可以嵌套B.函数的定义和函数的调用均可以嵌套C.函数的定义可以嵌套,但函数的调用不可以嵌套D.函数的定义不可以嵌套,但函数的调用可以嵌套正确答案:D4、以下叙述中正确的是()。
A.C语言所有函数本质上都是外部函数B.C语言编译时不检查语法C.C语言的子程序有过程和函数两种D.C语言的函数可以嵌套定义5、以下函数定义正确的是()。
A.double f(int x,int y){ z=x+y ;return z ;}B.double f(int x,int y){ double z ;z = x+y ;return z ;}C.double f(int x,y){ double z=x+y ;return z ;}D.double f(x,y){ int x, y ;double z ;z=x+y;return z ;}正确答案:B6、若调用一个函数int f(),且此函数中没有return语句,则正确的说法是()。
A.该函数没有返回值B.该函数返回一个确定的值C.该函数返回一个不确定的值D.该函数返回一个系统默认值正确答案:C7、若定义函数:fun(int a,float b) {return a+b;}则该函数的返回类型是()。
A.不确定B.voidC.intD.float正确答案:C8、C语言规定,函数返回值的类型是由()决定的。
A.return语句中的表达式类型B.调用该函数时由系统临时C.调用该函数时的主调函数D.在定义函数时所指定的函数类型正确答案:D9、对于函数返回类型,不正确的说法是()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
函数的返回值是由return语句传递的。
格式: return(表达式);
或 return表达式;
功能: 用return语句从函数退出,返回到调用它的程序中.
该语句有两重作用:
(1)从函数中退出,返回到调用它的程序中。 (2)向调用程序返回一个值。
7.3 函数的调用
7.3.1 函数调用的一般形式
7.3.2 对被调用函数的说明
在一个函数中调用另一个被调函数,需要具备的条件:
(1)首先被调函数必须是已经存在的函数(库函数或用户 自定义函数)。
(2)如果使用库函数,一般还应在本文件开头用#include 命令将调用有关库函数时所需用的信息包含到本文件中来。
①输入输出库函数: #include <stdio.h>——使用系统定
(3)从用户使用的角度看,函数分两种:
①标准函数,即库函数。这是由系统提供的,用户不用自
己定义。
②用户自己定义的函数,以解决用户的专门问题。
(4)从函数的形式看,函数分两类:
①无参函数: 主调函数并不将数据传送给被调用函数。
②有参函数: 在调用函数时,在主调函数和被调用函数之
间有参数传递,也就是说,主调函数可以将数据传给被调用函
函数的形参,不能带回变化的值。这种方式适合部分数组元素
传递和元素较小的数组传递。
义的标准输入输出函数。
②数学库函数:#include ″math.h″———使用系统定义
的标准数学运算函数。
(3)如果使用用户自己定义的函数,而且该函数与调用它 的函数(即主调函数)在同一个文件中,一般还应该在主调函 数中对被调用函数的返回值的类型作说明。
这种类型说明的一般形式为:
类型标识符 被调函数函数名();
由主调函数的实际参数把参数值传递给被调用函数中的形式参
数x和y。
7.2 函数参数和返回值
7.2.1 函数参数
在调用函数时,大多数情况下,主调函数和被调函数之间
有数据传递关系。在定义函数时,函数名后面括号中变量名称
为“形式参数”,简称 “形参”。在调用函数时,函数名后面
括号中的表达式称为 “实际参数”,简称 “实参”。
对被调用函数的说明,在以下几种情况下可以省略:
(1)如果函数的值(函数的返回值)是整型或字符型,可
以不进行说明,系统对它们自动按整型说明。
(2)如果被调用函数的定义出现在主调函数之前,可以不 进行说明,因为编译系统已经先知道了已定义的函数类型,会 自动处理。
(3)如果在所有函数定义之前,对函数类型进行了说明, 则在各个主调函数中不再进行说明。
2.有参函数的定义
类型标识符 函数名(形式参数表列)
形式参数说明
{说明部分
语句}
例如:
int max(x,y)
int x,y;
/* 形式参数说明 */
{
int z;
/* 函数体中的说明部分 */
z=x>y?x:y;
return(z); /* z为函数的返回值 */
}
这是一个求x和y二者中大者的函数,x 和 y为形式参数,
7.3.4 函数的嵌套调用
C 语言的函数定义都是互相平行、独立的,可以嵌套调用函数
即在调用一个函数的过程中,又调用另一个函数.
7.3.5 函数的递归调用
在调用一个函数的过程中又出现直接或间接地调用该函数本
身,称为函数的递归调用。C 语言的特点之一就在于允许函数递
归调用。例如:
int f(x)
第7章 函数与变量
7.1 函数概述 7.2 函数参数和返回值 7.3 函数的调用 7.4 数组的作为函数参数 7.5 变量的定义位置和作用域 7.6 动态存储方式与静态存储方式 7.7 函数的存储分类 7.8 程序设计举例 7.9 程序设计题目
7.1 函数概述
C语言函数分为两种: 标准函数和用户自定义的函数。
数使用,被调用函数中的数据也可以带回来供主调函数使用。
7.1.2 函数的定义
1.无参函数的定义
类型标识符 函数名() 类型标识符 函数名(形式参数
或 {说明部分 语句}
说明:
用 “类型标识符” 指定函数值的类型,即函数带回来的
值的类型。C语言默认返回值的类型是整型。
(3)在定义的函数中,必须指定形参的类型。
(4)实参与形参的类型应一致。只有字符型与整型可以互 相通用。
(5)实参变量对形参变量的数据传递是 “值传递”,即单 向传递,只由实参传给形参,而不能由形参传回来给实参。在 内存中,实参单元与形参单元是不同的单元。
7.2.2 函数的返回值
格式: 函数名(实参表列);
函数调用语句的执行过程:首先计算每个实参表达式的值,
并把此值存入所对应的形参单元中,然后把执行流程转入函数
体中,执行函数体中的语句,函数体执行完之后,将返回到调
用此函数的程序中的下一条语句,继续去执行。
当执行到函数体的右花括号或return语句时,表示函数体
执行完成,这时将返回到主调程序中。
int x;
{int y,z;
…
z=f(y);
…
return(2*z);
}
7.4 数组的作为函数参数
7.4.1 数组元素做函数实参
由于实参可以是表达式,数组元素又可以是表达式的组成
部分,因此数组元素可以作为函数的实参,与变量作实参一样,
是单向传递,即 “值传送”。只能将数组元素的值传递给被调
标准函数是系统提供的已设计好的函数,可以直接调用,用 户自己定义的函数是用户自己编写的用来解决具体问题的函数.
(1)C程序的执行从 main函数开始,调用其他函数后流程 回到main函数。
(2)所有函数都是平行的,即在定义函数时,是互相独立 的,一个函数并不从属于另一函数,即函数不能嵌套定义,但 可以互相调用,但不能调用main函数。
(1)在定义函数中指定的形参变量,在未出现函数调用时,它 们并不占内存中的存储单元。只有在发生函数调用时函数 max 中的形参才被分配内存单元。调用结束后,形参所占用的内存 单元也同时被释放。
(2)实参可以是常量、变量或表达式,如:max(3,a+b);但 要求它们有确定的值。在调用时将实参的值赋给形参变量。