版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
函数与程序结构Typical
C
ProgramOrganizationProgramfile1function1functionm………filenfunction1functionn函数概述C语言程序的特点:函数化结构函数分类:系统函数、用户函数系统函数:printf()、scanf()、sqrt()等用户函数:在程序中编写的函数,又称自定义函数。用户函数的特例:main()函数如果在程序中经常需要某种处理,就可以编写
一个函数,在需要这种处理时,就调用该函数。函数的定义返回值类型function-name
(参数声明表){声明和语句(组成函数体)}//
example:int
sum
(int
a,
int
b){int
temp;temp
=
a
+
b;return
temp;}return
功能返回函数值例子中把temp作为函数的返回值,类型为int;return一般格式return(表达式)或:return
表达式当return语句后面没有表达式时,函数将不像调用这返回值函数的调用#include<stdio.h>void
main(){void
p_star(int
n);int
k;for(k=1;k<=5;k++){p_star(k);putchar('\n');}void
p_star(int
n){int
i;for(i=1;i<=n;i++)putchar('*');return;}函数原型及函数声明函数调用}函数实参函数形参函数定义函数的声明与定义要一致函数调用也可以作为一个函数的实参#include<stdio.h>void
main(){float
max(float,float);float
a,b,c;printf("a,b,c:
");scanf("%f,%f,%f",&a,&b,&c);printf("Max=%f\n",max(max(a,b),c));}float
max(float
x,float
y){float
m;m=x>y?x:y;return(m);}函数调用作为函数的实参函数调用编写输出n个连续的任意字符的函数
p_string(),并调用该函数输出一个5行的“*”三角形图案注意函数调用时,实参和形参按照在参数表中的位置对应传值。#include
<stdio.h>void
main(){void
p_string(int,char);int
k;for(k=1;k<=5;k++){p_string(k,'*');putchar('\n');}void
p_string(int
n,char
ch){int
i;for(i=1;i<=n;i++)putchar(ch);return;}按位置对应传送}前面代码变为如下形式编译其会发生错误正确形式:提前声明变量的作用域在函数体内定义的变量称为局部变量,也称为内部变量。局部变量只能在定义它的函数中使用。程序中的两个i是相互隔离的,不同的,没有影响的内部变量{}}{#include<stdio.h>void
main(){ void
p_star50(void);int
i;for(i=1;i<=20;i++)p_star50();putchar('\n');void
p_star50(void)int
i;for(i=1;i<=50;i++)putchar('*');return;}变量的作用域#include
<stdio.h>//
Declared
in
outer
block//
This
is
another
variable
called
count++count; //
this
applies
to
inner
countprintf("count
=%d\n",count);}while(
++count
<=2); //
This
works
with
outer
countprintf("count
=
%d\n",
count); //
Inner
count
is
dead,
this
is
outercountreturn
0;intmain(void){int
count
=0;do{int
count
=0;}程序执行结果:count=1count=1count=3说明:两个count不相关,循环体内定义的变量,作用域循环体内部;函数在执行时在循环体内部本地变量会掩盖main中的变量。重名时编译器使用的是当前块中声明的变量外部变量(全局变量)全局变量是在函数之外定义的变量。在任何一个函数之外的位置,都可以定义全局变量。在一个程序中,凡是在全局变量之后定义
的函数,都可以使用在其之前定义的全局变量。因此,一个全局
变量,可以被多个函数使用,但并不一定能被所在程序中的每一
个函数使用,全局变量也有一定的作用范围。变量的作用域int
a=3,b=5;void
main(){int
max(int,int);int
a=8;printf("MAX=%d\n",max(a,b));}int
max(int
m,int
n){return(m>n?m:n);}定义全局变量定义局部变量局部变量全局变量局部变量和全局变量示例。重名时编译器使用的是当前块中声明的变量#include
<stdio.h>变量作用域规则自动变量(局部):在函数开头声明的自动变量,其作用域是声明该变量名的函数。不同函数中声明的具有相同名字的局部变量之间没有关系。外部变量或函数的作用域从声明它的地方开始,到其所在的文件的末尾结束。例如:依次定义在同一文件中的5个函数或外部变量如下:main()
{…..}int
sp=0;double
val[maxval];void push
(double
f)
{….}double pop
(void){…..}其变量的使用关系?(page80)
如果要在外部变量定义之前使用该变量,或者外部变量的定义与变量的使用不在同一个源文件,则需用关键字extern声明Exampleint
a;
extern
int
b;//外部变量//声明过//自动变量//
#1//声明(其它地方定义过)void
foo
(){int
i;while
(…)
{int
j;
b
=
i+j;}extern
void
bar
();…;bar
();}变量的声明与定义的区别?External
Variablesint
f
(){…;}//file2.cextern
int
i;extern
float
j[];int
g
(){i=9;…;}variable
definitions//file1.cint
i;float
j[10];variable
declarationsDeclarations
and
Definitions//file1.cint
i;float
j[10];int
f(){…}//file2.cextern
int
i;extern
float
j[];…//file3.cextern
int
i;extern
float
j[];…利用外部变量实现打印最长输入行静态变量外部变量和函数在所有的程序代码中是可见的,能被访问的;即使这些代码不在相同的文件中但有些函数或变量希望仅供其所在的源文件中的函数使用,其它函数不能访问,保持一定的私有性。C语言提供了静态变量提供这种功能静态变量用static声明,限定外部变量和函数静态变量//main.cextern
int
myDollar;extern
void
add
(int
a);int
main
(){//
Ooooops!myDollar
-=
999999;add
(999999);…;}//visa.cintmyDollar;int
lookup
(){return
myDollar;}void
add
(int
a){myDollar
+=a;}//
void
sub
(int
a)静态变量的使用//main.c//
compiler
complains…extern
int
myDollar;extern
void
add
(int
a);int
main
(){//
Ooooops!myDollar
-=
999999;add
(999999);…;}//visa.cstatic
int
myDollar;int
lookup
(){return
myDollar;}void
add
(int
a){myDollar
+=a;}//
void
sub
(int
a)静态变量Static声明也可用于声明函数,static类型的函数除了该函数声明所在的文件可见外,其他文件都无法访问。Static声明也可用于声明内部变量,static类型的作用域与自动变量相同;但它不会像自动变量一样随着被所在函数的被调用和退出而存在和消失。static类型的内部变量是一种只能在特定函数中使用,但一直占据存储空间的变量;该变量只在程序运行时被初始化一次静态局部变量寄存器变量头文件Aheader
filegroup
common
declarations
togethercould
be
included
by
other
filestypically
named
*.h使用头文件可以各个文件需要共享的定义和声明集中在一起,便于保证程序的正确性可以解决extern的不方便问题Header
Files
Example//area.hdouble
area
(int
r);//area.c#include
“area.h”double
area
(int
r){double
pi
=3.14;double
f
=
pi
*r
*r;return
f;}//main.c#include
“area.h”int
main
(){double
f;f
=
area
(5);return
0;}宏替换宏定义的常见错误函数嵌套函数嵌套是指在一个用户函数的函数体中,又出现了另外用户函数的调用。如函数a调用函数b,函数b又调用函数c等。#include<stdio.h>voidmain(){long
fac(int);long
cmn(int,int);intm,n;printf("m,n=");scanf("%d,%d",&m,&n);printf("C(%d,%d)=%ld\n",m,n,cmn(m,n));}/*
定义求k!的函数*/long
fac(int
k){inti;long
t;for(i=1,t=1;i<=k;i++)t*=i;return(t);/*定义求组合数的函数*/}long
cmn(int
m,int
n){long
res;res=fac(m)/(fac(n)*fac(m-n));return(res);}递归函数递归函数用递归函数计算累加和nii
=
1⑴用递归公式描述问题设累加和用函数sum(n)表示:
sum(n
-1)
+
n(n
=
1)(n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026建筑节能玻璃产业发展趋势与投资机会前瞻性研究报告
- 2026建筑物联网智能窗系统集成解决方案市场评估报告
- 2026建筑涂料行业政策红利与企业战略调整研究报告
- 2026建筑涂料行业价格战影响及行业整合趋势分析报告
- 2026建筑涂料品牌集中度提升与竞争格局演变研究报告
- 2026建筑外窗节能标识制度实施效果与市场响应分析报告
- 2026建筑反射隔热涂料在节能减排中的应用效果报告
- “双减”背景下我国中学音乐课堂教学创新发展路径研究
- 血液透析患者的血液动力学监测与护理
- 2026-2030农用拖拉机行业行业市场发展分析及政策建议与策略研究报告
- 潞安化工集团考试试题及答案
- 全国行政事业单位资产管理信息系统用户手册
- DB11∕T687-2024公共建筑节能设计标准
- 《煤矿防治水》课件
- GB/T 25229-2024粮油储藏粮仓气密性要求
- 江苏省连云港市2023-2024学年七年级下学期期末数学试卷(含答案解析)
- 2024年全国新高考1卷(新课标Ⅰ)数学试卷(含答案详解)
- 普通肺炎病历报告
- 语料库语言学
- 《归园田居(其一)》优秀课件
- 【心灵读物】人生海海,劈浪前行-读麦家《人生海海》有感
评论
0/150
提交评论