C语言程序设计项目7函数

合集下载

C语言程序设计第四版_谭浩强7章

C语言程序设计第四版_谭浩强7章

➢函数的功能
return z; }
函数体
函数首部,不是语 句,行尾无分号
精选课件ppt
函数的返回值,类 型与首部定义一致14
函数的定义
关于函数类型的说明
无返回值的函数类型为void; 有返回值的函数,其类型根据返回值 类型决定;省略类型时默认为int(建议 不要省略)
精选课件ppt
15
函数的调用
int main( )
{ int max(int a[ ],int n);
int x[6],i;
for(i=0;i<=5;i++)
scanf("%d",&x[i]);
printf("max=%d",max(x,6));
return 0;
}
实参为数组名
精选课件ppt
int max(int a[ ],int n) { int m,i; m=a[0]; for (i=1;i<n;i++)
float fac; fac=1; for(i=1;i<=n;i++)
fac=fac*i; return fac;
printf("c="); scanf("%d",&c);
}
sum=factorial(a)+factorial(b)+factorial(c);
printf("%d!+%d!+%d!=%.0f",a,b,c,sum);
函数1 函数2 函数3
函数1 函数2
精选课件ppt
34
变量作用域——局部变量和全局变量

C语言第七讲 函数(2)

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语言程序设计(第四版 谭洪强)实验7 答案

大学生C语言程序设计(第四版 谭洪强)实验7 答案

实验七 参考答案(参考答案)(1) (sy7-1.c )请编写函数fun ,它的功能是:计算并输出n (包括n )以内能被5 或9 整除的所有自然数的倒数之和。

例如,若主函数从键盘给n 输入20后,则输出为s=0.583333。

注意:n 的值要求不大于100。

算法分析:使用for 循环i ,遍历n 包含n 以内的所有整数,逐一判断每个i ,是否满足条件(能被5 或9 整除),如果满足,则把它的倒数累加到累加器里。

注意:i 的倒数要表示成:1.0/i;参考子函数如下:double fun(int n){double sum=0;int i;for(i=5;i<=n;i++)if(i%5==0||i%9==0)sum=sum+1.0/i;return sum;}(2) (sy7-2.c ) 请编写函数fun ,其功能是:根据以下公式计算s ,并计算结果作为函数值返回,n 通过形参传入。

n s ⋯++++⋯++++++=321132112111例如:若n 的值为11时,函数的值为1.83333算法分析:等式右边从第二项(i=2)开始,其分母等于前一项的分母加上i ;一共有n 项;求出每项的分母,然后把每项进行累加。

参考子函数如下:float fun(int n){float sum=1; //sum 中已经累加了第一项的值int i,m=1; //m 表示每项的分母;for(i=2;i<=n;i++){ m=m+i;sum=sum+1.0/m;}return sum;}(3) (sy7-3.c)请编写函数fun,其功能是:将两个两位数的正整数a、b 合并形成一个整数放在c 中。

合并的方式是:将 a 数的十位和个位依次放在c 数的十位和千位上,b 数的十位和个位数依次放在c 数的个位和百位上。

例如,当a=45,b=12,调用该函数后,c=5241。

算法分析:对一个两位数n,它的各位可以通过n%10求的,它的十位数可以通过n/10求的;所以分别用上述方法求的a和b的个位和十位,同时按照要求累加到c里。

习题答案(7函数)《C语言程序设计》课后习题解答

习题答案(7函数)《C语言程序设计》课后习题解答
#include <stdio.h>
void main()
{int xyz(int i);
int i;
for (i=100;i<=200;i++)
if(xyz(i))
printf("%d\n",i);
}
int xyz(int i)
{int j=0;
if(i%5==0&&i%3!=0) j=1;
return j;
}
void triangle(int n)
{int i,j;
for(i=1;i<=n;i++)
{for(j=1;j<=i;j++)
printf("*");
printf("\n");
}
}
2.编写一个求1~n之间奇数和的函数,在main( )函数中输入n,然后调用该函数求1~n之间奇数和并输出。
#include <stdio.h>
scanf("%d",&a);
if(sushu(a)) printf("是素数");
else printf("不是素数");
}
int sushu(int a)
{ int i;int j=1;
for(i=2;i<=a-1;i++)
if(a%i==0) j=0;
return j;
}
4.在main( )函数中输入一个人的年龄和性别,女性退休年龄为55岁,男性退休年龄为60岁,编写一个函数根据年龄和性别判断一个人是工作还是退休,若工作,则输出“woking”,退休则输出“retired”。

C语言程序设计ppt课件

C语言程序设计ppt课件

C 语言程序设计主编:高立兵1职业教育“十二五”规划教材项目7 函数1项目8 指针2项目9 结构与联合3项目10 位运算4项目11 文件5 目 录项目1 C语言概述1项目2 数据类型、运算符与表达式2项目3 顺序结构程序设计3项目4 选择结构程序设计4项目5 循环结构程序设计5项目6 数组5附件5项目1 C语言概论1Ø项目导读Ø项目目标Ø项目任务本项目主要对C 语言的一些基础知识及其字符集和词汇进行介绍,使读者在学习C 语言之前对其有个全面的认识。

项目导读● 安装、配置TC2.0和VC++6.0,成功启动TC2.0和VC++6.0。

● 能编写一个简单的C 程序的源文件,并编译该源文件,链接目标文件得到可执行文件。

项目目标任务1.1 C语言的发展与特点C语言是1972年由美国的Dennis Ritchie设计发明的,并首次在配备了UNIX操作系统的DEC PDP-11计算机上实现。

它由早期的编程语言BCPL(Basic Combined Programming Language)发展演变而来。

C语言的特点1、C语言是中级语言2、C语言是结构化语言3、C语言功能齐全4、C语言适用范围广任务1.2 认识C语言本任务通过几个简单的C程序,介绍C语言的基本组成和格式。

案例1.1main( ){printf(“This is a c program.\n”);}本程序的功能是输入下列一行信息:This is a c program.任务2.2 数据类型2.2.3 浮点型数据浮点型数据是用来表示具有小数点的实数的。

浮点数类型包括float(单精度浮点型)、double(双精度浮点型)、long double (长双精度浮点型)。

(1)float型(单精度浮点型)。

编译系统为每一个float型变量分配4个字节,数值以规范化的二进制数值形式存放在存储单元中。

在存储时,系统将实型数据分成小数部分和指数部分两个部分,分别存放。

《C语言程序设计(第五版)》课件-第7章函数

《C语言程序设计(第五版)》课件-第7章函数

int main()
{ int a,yn=0;
while(yn==0)
{ printf("Input a number(0—9): mp;a); fun(a);
/*调用函数,a为实参*/
printf("If continue, please input 0, otherwise input 1:");
C语言程序设计
第7章 函数
7.2 函数的定义
根据有无参数,可以将函数分为无参函数和有参函数两种形式:
1.无参函数
定义形式如下:
类型标识符 函数名( )/*函数的首部*/

声明部分
/*函数体*/
执行部分

类型标识符用来说明函数返回值的类型,也称为函数的类型。若 省略类型标识符,则默认返回值类型为整型;当函数无返回值时,可 以指定函数的类型为void。
(5) 函数定义时,旧版的C语言中,函数首部中的形参列表仅包 含形参,形参的类型另起一行来说明;而新版的C语言中,函数首部 中的形参列表包含形参的类型和形参名。
例如,“int max(int x , int y)”为新版的函数定义方式。 而以下代码为旧版的函数定义方式: int max (x, y) int x, y; 一般来说,在新版的C语言中以上两种定义方式都能使用。
{ int j,k,flag=1; k=sqrt(p); for (j=2;j<=k;j++)
说明: prime函数用于判断参数p是否为素数,形参
if (p%j==0) {flag=0; break; }
p接收main函数传来的实参 i的值,prime函
return flag; }

C语言程序设计_课件_第七章(适于清华谭浩强版)

C语言程序设计_课件_第七章(适于清华谭浩强版)

注意:
(1) return(表达式); 和return 表达式;都 是正确的。 (2) 带返回值的函数只能返回一个值。 (3) 在函数定义时,允许使用多个return语句, 但是应尽量在末尾使用一个return语句。 (4) return语句中的表达式与函数的返回值类 型不匹配时,以函数定义时的返回类型为准。

问题的提出 函数基础 函数的定义 函数说明 函数调用 参数传递 程序举例 递归调用 变量的存储类别
7.1 问题的提出
例6.20它可以解决的问题有: ①输入若干个学生的姓名、某课程的期中 和期末成绩,并计算每个学生的总评成绩; ②计算总评成绩的分数段情况; ③输出所有学生的姓名、期中、期末和总 评成绩; ④查询某个学生的总评成绩。
函数调用时需要传递数据。调用函数要将 实参的值传送给被调用函数的形参。 若函数定义首部是 double power(double x,int n) /*函数定义 */ 调 用 形 式 是 可 以 是 power(y,m) , 也 可 以 是 power(3.0,5)。 其中,x和n是形式参数,y和m是实际参数,3.0 和可以是一个变量 名,因为变量名也构成一个表达式,形式参数只 能是变量名。当实际参数是变量名时,它与形参 的名称既可以相同,也可以不同,只是要注意, 在函数定义内部应该使用形参的名称。 (2) 实际参数与形式参数的参数个数、数据类型 和顺序都应该一致,如果数据类型不一致,系统 将按照自动转换规则进行转换。
7.3 函数的定义
7.3.1 函数的定义形式 在C语言中函数定义的形式有两种。
第一种:
函数返回值的数据类型说明 函数名称(带有类型说明的参数表)
{
函数内部数据说明; 语句;
}
第二种:

C语言程序设计基础 第7章

C语言程序设计基础 第7章

模块化程序设计的基本要点是贯彻“自顶向下,逐步细 化”的思想方法,即将一个复杂功能的编程问题,划分成若 干个功能相对简单的子问题。这种划分可以逐层进行,直到 便于编程为止。在C语言中,一个模块的功能由一个函数来 实现。顶层函数是主函数main( )。功能模块与C语言函数的 关系如图7.1所示。
图7.1 模块与函数
第7章 函数——模块化程序设计方法的实现
7.1 模块化程序设计方法与函数 7.2 函数的定义 7.3 函数的调用 7.4 函数调用的条件与函数声明 7.5 函数的嵌套调用和递归调用 7.6 变量的作用域与函数间的数据传递 7.7 用函数实现模块化程序设计 实训任务十三 熟悉函数的功能及其使用方法 实训任务十四 学习模块化程序设计的方法
② 函数功能实现部分,是一个程序段,要依据实现某 种功能的算法进行设计。
③ 函数体最后使用一个“return(返回值);”语句,括 号中的返回值是一个需传带给主调函数的数据对象。如果没 有返回值,可以不要这个语句。VC++ 6.0系统中提倡在 main( )函数体后使用一个“return 0;”语句,表示正常返 回系统,否则会出现警告。如果函数体仅是一对花括号,没 有任何语句,就是空函数。空函数一般是无参函数。
7.2 函 数 的 定 义
怎样定义函数?定义函数要考虑哪些问题?
定义函数要解决两个方面的问题:一是函数间的接口问 题,二是功能实现问题。接口问题包括如何被上层函数调用 ,调用时需传递什么数据,调用返回时需传带什么数据。功 能实现问题就是如何实现模块的过程算法。
函数定义的一般形式为
基类型符 函数名(类型符形式参数 1,类型符形式参数 2,…) {
函数体内数据对象定义或声明部分; 函数功能实现部分; return(返 回值); }

C语言程序设计知识点—第7章 函数

C语言程序设计知识点—第7章 函数
C 语言程序设计知识点
第 7 章:函数
主讲教师:杨剑
1. 本章目标
熟练掌握函数的定义与调用方法 理解函数的定义、声明和调用的区别 理解函数原型、实参、形参和函数的返回值 了解函数的嵌套调用和递归调用的方法 掌握数组做为函数参数的使用方法 理解变量的作用域和存储方法
2. 函数机制的优点
~6~
C 语言程序设计知识点
主讲教师:杨剑
[练习]若各选项中所用变量已正确定义,函数 fun 中通过 return 语句返回一个函数值,
以下选项中错误的程序是( )
A.main()
{……x=fun(2,10); ……}
float fun(int a,int b){……}
B.float fun(int a,int b){……}
int data; scanf(“%d”,&data); printf(“%d”,add(data)); return 0;
~5~
C 语言程序设计知识点
主讲教师:杨剑
} int add(____②_____) {
int i,sum=0; for(i=1;i<=n;i++)
sum=sum+i; _______③__________ } 答案: ①int add(int); ②int n ③retrun sum;
{
printf(“%d\n”,F(3+5));
}
[练习]程序运行后的输出结果是( )
A.192 B.29
C.25
D.编译出错
答案:D
在 C 语言中,函数返回值的类型最终取决于( )
A.函数定义时在函数首部所说明函数类型
B.return 语句中表达式值的类型 C.调用函数时主调函数所传递的实参类型

C语言程序设计实验(5-7)

C语言程序设计实验(5-7)

C语⾔程序设计实验(5-7)实验41. 以下⼏段源程序有错,请调试修改正确。

①/*源程序实现的功能:输⼊两个实数,按从⼩到⼤的顺序输出*/ main(){ float a,b,t;scanf(“%f,%f”,&a,&b);if (a>b)t=a;a=b;b=tprintf(“%5.2f,%5.2f”,a,b);}#includeint main(){float a,b,t;scanf("%f,%f",&a,&b);if (a>b){t=a;a=b;b=t;}printf("%5.2f,%5.2f",a,b);}②该源程序实现的功能是:有如下函数关系:x (x>0)y= ? 2 (x=0)3x (x<0)根据输⼊的x值,求出y的值。

main( ){ int x,y;printf(“Enter x:”);scanf(“%d”,&x);if x>0 y=x;else if(x=0) y=2;else y=3*x;printf(“x=%d y=%d\n”,x,y);}#includeprintf("Enter x:");scanf("%d",&x);if(x>0)y=x;else if(x==0)y=2;else y=3*x;printf("x=%d y=%d\n",x,y);}#includeint main(){int x,y;scanf("%d",&x);if(x<1)y=x;else if(x<10)y=2*x-1;elsey=3*x-11;printf("y=%d",y);}某物品原有价值为p, 由于使⽤使其价值降低,价值的折扣率根据时间t(⽉数)确定如下:t<3,⽆折扣3<=t<6,2%折扣6<=t<12,5%折扣12=t>=21,10%折扣编程实现:根据输⼊的时间和原有价值计算物品的现有价值。

C语言程序设计实验报告(函数)

C语言程序设计实验报告(函数)

C语言程序设计实验报告(实验名称:函数)1实验目的(1)掌握函数的定义方法、调用方法、参数说明以及返回值;(2)掌握实参与形参的对应关系,以及参数之间的“值传递”的方式;(3)掌握函数的嵌套调用及递归调用的用的设计方法;(4)在编程过程中加深理解函数调用的程序设计思想。

2实验内容(1)编写一个函数primeNum(int x),功能是判别一个数是否为素数。

要求:①在主函数中输入一个整数x(直接赋值或从键盘输入);②函数类型为空值(void),调用primeNum( )函数后,在函数中输出x是否为素数的信息,输出格式为“x is a prime number”或”x is not aprime number”;③分别输入一下数据:0,1,2,5,9,13,59,121,并运行程序,检查结果是否正确。

(2)编写函数 mulNum(int a,int b),它的功能是用来确定a和b是否是整数倍的关系。

如果a是b的整数倍,则函数返回值为1,否则函数返回值为0。

要求:①在主函数中从键盘输入一对整型数据a和b;②调用函数后,根据返回值对a和b的关系进行说明。

例如,在主函数中输入:10,5,则输出“10 is a multiple of 5”;③分别输入下面几组数据进行函数的正确性测试:1与5,5与5,6与2,6与4,20与4,37与9。

3算法描述流程图(1)primeNum(int x)(判别一个数是否是素数)函数流程图①主函数流程图:②判断素数函数流程图:(2)mulNum(int a,int b)(确定a和b是否是整数倍的关系)函数流程图①主函数流程图:②判断倍数流程图:4源程序(1)判断某个数是否是素数#include <stdio.h>int primNum(int x) /*编写函数判断某个数是否是素数*/ {int i;if (x==0||x==1) /*当x等于1或等于0时判断是否为素数*/return 0;for (i=2;i<x;i++) /* 当x大于2时判断不为素数的数*/{if (x%i==0)return 0;}if (x%i) /* 当x等于2或不满足上述条件时时判断出该数是素数*/ return 1;}void main(){int n ;printf("Please input an integer:"); /* 提示从键盘输入一个数x */scanf("%d",&n);if (primNum(n)==1) /* 调用定义的函数*/ printf("%d is a prime number\n",n); /* 由函数得出结论判断是否为素数*/ elseprintf("%d is not a prime number\n",n);}(2)个数是否是整数倍关系#include <stdio.h>int mulNum(int a,int b)/* 定义函数确定两个数是否有整数倍关系*/{if (a%b==0) /* 判断出a是b的整数*/return 1;else /* 判断出a不是b的整数*/return 0;}void main (){int m,n;printf ("please input tow integers:\n"); /*提示从键盘输入两个数*/scanf ("%d%d",&m,&n); /*从键盘输入两个数的值*/if(mulNum(m,n)==1) /*调用定义的函数并判断输出相应的结果*/printf("%d is a multiple of %d\n",m,n);elseprintf("%d is not a multiple of %d\n",m,n);}5测试数据(1)实验(1)测试数据为0,1,2,5,9,13,59,121 运行结果当测试数据0时当测试数据1时当测试数据2时当测试数据5时当测试数据9时当测试数据13时当测试数据59时当测试数据121时(2)实验2测试的数据1与5,5与5,6与2,6与4,20与4,37与9。

高树芳C语言程序设计--第七章

高树芳C语言程序设计--第七章
[解决方案] 一行需要两个函数。一个函数显 示星号左面的空格,一个函数显示星号。
程序代码
11
7.2函数的定义、声明和调用
相关知识:
1.有参、无返回值函数的定义 2.有参、无返回值函数的调用 3.有参、无返回值函数的声明
12
7.2函数的定义、声明和调用
案例7-4 求组合数
[案例任务]
键盘输入m和n两个整数, 计算并显示下面的组合数, C 要求运用函数编程。
n m m! n! (m-n)!
[解决方案] 定义一个求阶乘的函数。它有一个 形参,而且有返回值。
程序代码
13
7.2函数的定义、声明和调用
[课堂训练7-2]
修改案例7-3的主函数,使之显示一个与案例7-3 形状相似的倒三角“*”号图案(要求显示4行)。
14
7.2函数的定义、声明和调用
相关知识: 1.有参、有返回值函数的定义 2.有参、有返回值函数的调用 3.无参、有返回值函数的调用
15
7.2函数的定义、声明和调用
案例7-5
显示100~200间的素数
[案例任务]
参照案例5-9判断素数程序,将其改造成一个函数如 prime,其功能是对给定的整数x,判断它是否是素数,如 是则返回1,不是则返回0。然后利用下面给出的主函数 调用函数prime ,显示100至200之间的全部素数。
[解决方案] 设计一个函数用于判断一个整数是
案例7-2 用函数实现简易菜单 [案例任务]
对案例5-3进行简化和改造。要求循环显示菜单并等 待用户选择,然后显示用户选择了第几项功能,如选 择0则结束程序。要求用函数实现菜单的显示内容。
[解决方案]定义无形参、无返回值的函数显示菜单。
程序代码

C语言第7章 函数

C语言第7章 函数

函数的 参数?
int main() {
int a=12, b=24; … printf("%d\n", Average(a, b)); … return 0; }
int Average(int x, int y) {
int result;
result = (x + y) / 2;
return result; }
C语言程序设计
22/114
7.3.1 函数调用
每次执行函数调用时
现场保护并为函数的内部变量(包括形参)分配内存 把实参值复制给形参,单向传值(实参形参) 实参与形参数目一致,类型匹配(否则类型自动转换)
int main()
{

int a=12, b=24,ave;

ave = Average(a, b);
21
1*2
3 (1*2)
(1*2)*3
}
4 (1*2*3)
(1*2*3)*4
return result;
……

}
n (1*2*3*4*…)
(1*2*3*4*…)*n
C语言程序设计
监视窗(Watches)
26/114
7.3.2函数原型
第7章 函数
函数原型(Function Prototype)
调用函数前先声明返回值类型、函数名和形参类型
Function Call?
int main() {
int a=12, b=24, ave; … ave = Average(a, b); … return 0; }
int Average(int x, int y) {
int result;

《C语言程序设计》课件 《C语言程序设计》课件 第7章 函数的使用

《C语言程序设计》课件 《C语言程序设计》课件 第7章 函数的使用
各种自定义函数
<<C语言程序设计>>
电脑模块化组装
模块化程序
Page 4
7.1 为什么使用函数
【例7-1】打印输出如下所示超市购物小票的票头
某某超市欢送您 *****************************
*
分析
1、第一行为欢送词,自定义一个函数print_welcome来实 现欢送词的输出功能 2、第二行为一定数量的“*〞号,自定义一个函数 print_star来实现 “*〞号的输出功能
第7章 函数的使用
<<C语言程序设计>> 课程
<<C语言程序设计>>
Page 1
主要内容
1 为什么使用函数 2 函数的根本使用 3 函数递归调用 4 用带参数的宏定义代替公式型函数 5 函数和变量的作用域及存储类型
<<C语言程序设计>>
Page 2
问题引入
数学函数sqrt()、字符串处理函数strlen() 等。这些具有通 用功能的函数称之为标准库函数,是由C语言开发环境提供, 标准库函数给编程带来了极大的方便。
形式参数 实际参数
<<C语言程序设计>>
Page 17
7.3 函数的调用
函数调用的形式
函数名(参数表) – 对实参的要求
• 实参个数和形参个数相等。 • 实参的类型要和形参的类型一
致。 • 被调用函数无形参,实参表是
空的,但括号不能省略。
main( ) { int a=1,b=3,c;
函数调用
c=max(a,b);
{ int n=1, i; for(i=1;i<=a;i++) n=n*i; return n;

[练习]C语言实验七、函数程序设计答案

[练习]C语言实验七、函数程序设计答案

实验七 函数及程序结构(二)一、实验目的1.掌握函数的嵌套调用和递归调用2.掌握数组做函数参数的用法3.掌握全局变量和局部变量的用法。

?4.掌握变量的存储类别。

?二、实验内容1.[目的]掌握函数的嵌套调用方法。

[题目内容] 编写程序计算cb a 。

要求设计主函数main()读取a 、b 、c 的值,并调用ratio 函数计算a/(b-c)的值。

如果(b-c)=0那么ratio 就不能计算,因此,ratio 函数调用另一个函数dif ,以测试(b-c)的差是否为零,如果b 不等于c ,dif 返回1,否则返回0。

[输入] a 、b 、c 的值[输出] 计算结果[提示] main 函数调用ratio 函数,ratio 函数调用dif 函数。

三个函数平行定义,嵌套调用。

#include <stdio.h>void main(){float ratio(int x,int y ,int z);int dif(int x,int y);int a,b,c;float d;printf("请输入a,b,c:");scanf("%d%d%d",&a,&b,&c);d=ratio(a,b,c);if(d==0.0) printf("b-c 为零。

");else printf("%d/(%d-%d)=%f\n",a,b,c,d);}float ratio(int x,int y ,int z){if(dif(y ,z)==1) return (float)x/(float)(y-z);else return 0.0;}int dif(int x,int y){if(x==y) return 0;else return 1;}2.[目的]利用标准库提供的随机数功能。

[题目内容]编写程序,帮助小学生练习乘法计算。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
变量与函数存储的方式、生命周期、作用域及变量初始化的值和方式。 1.存储类型区分符 C语言的数据有四种存储类型,分别由四个关键字表示存储类型区
分符,auto(自动),static(静态),register(寄存器)和extern(外 部)。
完整的变量说明的一般形式: 存储类型区分符 类型区分符 变量名表; 若没有指定存储类型区分符,默认是auto存储类型。
该函数来完成。 1.有参函数调用的一般形式 函数名(实际参数表) 实际参数表(简称是实参表)中的实参类型及其个数必须与函数定
义时的形参一一对应。当有多个实参时,相互之间用逗号隔开。 如: y=max(a,b);
2.无参函数调用的一般形式 函数名() 虽然没有实参,但函数名的一对圆括号是不能省略的。
任务7.1 函数的定义与调用
1
项目7 函数
➢ 项目导读 ➢ 项目目标 ➢ 项目任务
项目导读
本项目主要对函数的一些基础知识、函数定义的一般形式 和调用规则进行介绍,使读者对C语言的函数有个全面的认识。 一个C语言程序可以由一个主函数和若干个其他函数组成,由 主函数调用其他函数,其他函数也可相互调用。
项目目标
●在main函数中调用其他函数。
2.实参和形参间的数据传递 在调用函数过程中,系统会把实参的值传递给被调用函数的形参。 或者说,形参从实参得到一个值。该值在函数调用期间有效,可以参加 该函数中的运算。 在调用函数过程中发生的实参与形参间的数据传递,常称为“虚实 结合”。
任务7.1 函数的定义与调用
7.1.5 对被调用函数的声明和函数原型 在一个函数中调用另一个函数(即被调用函数)需要具备如下条件: (1)首先被调用的函数必须是已经定义的函数(是库函数或用户自
为函数的递归调用。C语言的特点之一就在于允许函数的递归调用。例 如:
int f(int x) { int y,z;
z=f(y); return(2*z); }
图7.5
在调用函数f的过程中,又要调用f函数,这是直接调用本函数,见图 7.5。
任务7.3 变量的存储类别
7.3.1变量的存储类型 C语言的变量,有两种属性:数据类型和存储类型,存储类型决定
如 static int fun(int a,int b)
7.4.2 外部函数 (1)在定义函数时,如果在函数首部的最左端冠以关键字extern,
则表示此函数是外部函数,可供其他文件调用。 如函数首部可以写为 extern int fun(int a,int b) 这样,函数fun就可以为其他文件调用。C语言规定,如果在定义函
2.在程序设计中使用函数的优点 (1)避免编写相同的程序段,节省编码时间,减少程序占用的空间。 (2)可以降低主程序的复杂度,便于程序的维护。 (3)便于多人协同合作开发较大的应用程序。 (4)符合结构化程序设计的特性。
任务7.1 函数的定义与调用
7.1.3 函数调用的一般形式 程序中定义了函数,则凡是要完成该函数功能的地方,都可以调用
任务7.3 变量的存储类别
4.静态变量 外部静态变量和局部变量都是在程序被编译时分配存储单元,在程 序运行结束后回收所占用的存储单元,静态变量的生命周期是程序的整 个执行过程,外部静态变量的作用域是外部静态变量所在的文件内从变 量定义之后至文件结束;局部静态变量的作用域是局部静态变量所在的 块。局部静态变量和自动变量一样只有定义性说明,没有引用性说明, 因此必须先定义后引用。外部静态变量的初始化同外部变量。局部静态 变量在编译时执行一次初始化。在有显工初始化的情况政,初值由说明 符中的说明确定,在无显式初始化情况下,同外部变量。 5.寄存器变量 说明为寄存器存储类型的局部变量首先在寄存器中分配存储,如果 无足够的寄存器,则和自动变量一样在内存中分配存储单元。 寄存器变量除不能求地址之外,其余用法同自动变量,对于使用频 繁的值,使用寄存器变量可以提高运行速度。
3.函数调用的执行过程 首先计算每个实参表达式的值并将计算结果一一传入所对应的实参 形量中,然后,程序执行流程转入函数体中,执行函数体中的语句。当 执行到函数体的右花括号“}”或起其中的return语句时,表示函数体执行 完成,这时程序流程返回到主调程序中的调用位置处继续执行。 4.参数的求值顺序 函数调用时,每一实参为一表达式,实参与实参间用逗号分隔,而 不是顺序求值运算符,多数编译程序在计算参数值时从右向左的顺序进 行。 5.函数调用转换的规则和参数的一致性 函数调用时会引起下列类型转换: ⑴ 如果无函数说明,则进行参数提升,即将char, short,枚举转 换为int, float转换为double。
任务7.3 变量的存储类别
6.存储类别小结
内存中动态存储区:自动变量和形式参数 CPU中的寄存器:寄存器变量
任务7.4 内部函数和外部函数
7.4.1 内部函数 如果一个函数只能被本文件中其他函数所调用,它称为内部函数。
在定义内部函数时,在函数名和函数类型的前面加static。即 static类型标示符 函数名(形参表)
⑵ 如果函数说明为原型形式,则将实参转换为原型相应参数的类 型(和赋值转换相似)。
任务7.1 函数的定义与调用
7.1.4 函数调用时的数据传递 1.形式参数和实际参数 在调用有参函数时,主调函数和被调用函数之间有数据传递关系。
从前面已知:在定义函数时函数名后面括号中的变量名称为“形式参数” (简称“形参”)或“虚拟参数”。在主调函数中调用一个函数时,函 数名后面括号中的参数称为“实际参数”(简称“实参”)。实际参数 可以是常量、变量或表达式。
数时省略extern,则隐含为外部函数。本书前面所用的函数都是外部函 数。
(2)在需要调用此函数的文件中,用extern声明所用的函数是外部 函数。
Hale Waihona Puke 己定义的函数)。 (2)如果使用库函数,应该在本文件开头用#include指令将调用有
关库函数时所需用到的信息“包含”到本文件中来。 (3)如果使用用户自己定义的函数,而该函数的位置在调用它的函
数(即主调函数)的后面,应该在主调函数中对被调用的函数作声明 (declaration)。
任务7.2 函数的嵌套和递归调用
7.2.1 函数的嵌套调用 C语言的函数定义是互相平行、独立的,也就是说,在定义函数时,
一个函数内不能再定义另一个函数,也就是不能嵌套定义,但可以嵌套 调用。也就是说,在调用一个函数的过程中,又调用另一个函数,见图 7.4。
图7.4
任务7.2 函数的嵌套和递归调用
7.2.2 函数的递归调用 在调用一个函数的过程中又出现直接或间接的调用该函数本身,称
1.将一个较大的任务划分为子任务是一般应遵循的原则 (1)界面清晰。函数处理的任务明确,函数之间数据传递越少越好。 (2)大小适中。函数太大,处理任务复杂,导致结构复杂,程序可 读性较差;反之。若程序太小,则程序调用关系复杂,这样会降低程序 的效率。 (3)可以将一些常用的功能模块编写为库函数,需要时直接调用。
●将实参的值传递给函数的形参。
●在非main函数中调用其他函数。
●根据程序的需要,将某些代码的执行封装在一个void函数中。
●使用函数的递归调用解决递归问题。
●使用全局变量实现共享。
思考
任务7.1 函数的定义与调用
C程序可有一个主函数和若干个其他函数构成。执行时由主函数调 用其他函数,而其他函数之间也可以互相调用。同一个函数可以被一个 或多个函数调用任意次。
任务7.3 变量的存储类别
2.自动变量 自动变量在进入块时分配存储单元(“块”如函数复合语句),在 退出块后,它所占用的存储单元被回收,其作用域仅在块内有效,自动 变量没有缺省的初值,如果定义时没有明确指出初值,则其初值是不确 定的。对于显示初始化,其初值不限于常量表达式,且每次进入块时, 都要执行一次给变量赋值的操作。 3.外部变量 外部变量在程序被编译时分配存储单元,它的生命周期是程序的整 个执行过程。其作用域是从外部变量定义之后,直到该源文件结束的所 有函数。外部变量初始化是在外部变量定义时进行的,且其初始化仅执 行一次,若无显式初始化,则系统自动初始化为与变量类型相同的0值 (整型0,字符型’\0’,浮点型0.0)。
相关文档
最新文档