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(返 回值); }
  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)。
相关文档
最新文档