![C语言程序设计案例式教程-第6章 函数_第1页](http://file4.renrendoc.com/view/42c6c6e0f228257e8e043a4b3c8d1a46/42c6c6e0f228257e8e043a4b3c8d1a461.gif)
![C语言程序设计案例式教程-第6章 函数_第2页](http://file4.renrendoc.com/view/42c6c6e0f228257e8e043a4b3c8d1a46/42c6c6e0f228257e8e043a4b3c8d1a462.gif)
![C语言程序设计案例式教程-第6章 函数_第3页](http://file4.renrendoc.com/view/42c6c6e0f228257e8e043a4b3c8d1a46/42c6c6e0f228257e8e043a4b3c8d1a463.gif)
![C语言程序设计案例式教程-第6章 函数_第4页](http://file4.renrendoc.com/view/42c6c6e0f228257e8e043a4b3c8d1a46/42c6c6e0f228257e8e043a4b3c8d1a464.gif)
![C语言程序设计案例式教程-第6章 函数_第5页](http://file4.renrendoc.com/view/42c6c6e0f228257e8e043a4b3c8d1a46/42c6c6e0f228257e8e043a4b3c8d1a465.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章函数《C语言程序设计案例式教程(第2版)》学习目标/Target了解函数的概念,能够说出函数的作用掌握函数的定义,能够通过定义函数实现功能的封装掌握函数的调用过程和调用方式,能够以不同的方式调用函数了解函数三要素,能够说出函数名、参数列表、返回值类型的作用学习目标/Target掌握递归函数的定义与调用,能够通过递归函数解决特定的数学问题掌握局部变量与全局变量的定义与调用,能够定义局部变量与全局变量实现不同作用域的数据描述掌握数组作为函数参数的应用,能够使用数组传递多个数据了解多个文件之间的变量引用与多个文件之间的函数调用,能够跨文件引用变量、调用函数章节概述/Summary通过前面几章的学习,相信大家会编写一些简单的C语言程序了,但是,随着程序功能的增多,main()函数中的代码也会越来越多,导致main()函数中的代码繁杂、可读性太差,维护也变得很困难。此时,可以将功能相同的代码提取出来,将这些代码模块化,在程序需要的时候直接调用。这就好比组装机器,需要什么直接装上就可以了。C语言的函数类似于机器的组装部件,它用于实现某些特定的功能,本章将针对函数的相关知识进行详细地讲解。目录/Contents案例6-1祖国生日快乐案例6-2简易计算器案例6-3汉诺塔案例6-40.99与1.11的差别目录/Contents案例6-5远水不救近火案例6-6数据去重案例6-7体测成绩判定祖国生日快乐案例6-1【案例6-1】祖国生日快乐(1)了解函数的概念,能够说出函数的作用(2)掌握函数的定义,能够通过定义函数实现功能的封装(3)掌握函数的调用过程和调用方式,能够以不同的方式调用函数学习目标案例描述在国庆节来临之际,我们编写小程序庆祝祖国生日,在小程序中需要多次输出如下祝福语。 *******************************
祝福祖国生日快乐 *******************************如果你作为小程序开发团队一员,请使用C语言完成上述祝福语模块的编写。知识需求祝福语模块,printf()输出语句实现多次输出?代码会重复、臃肿把祝福模块语句封装?需要时拿过来用?函数知识讲解1.函数的概念函数的概念将某一项功能的代码提取出来,封装在一个{}中,为这段代码取一个名字,当需要这项功能时,直接通过这段代码的名字调用这一段代码就可以,这段提取出来的代码就称为函数。在C语言中,函数是最简单的程序模块。函数被视为程序设计的基本逻辑单位。知识讲解1.函数的概念函数的优势函数的思路不仅易于理解,便于操作。函数可以重复调用,避免代码重复。提高程序开发运行效率。知识讲解1.函数的概念函数的分类C语言中的函数可分为库函数与自定义函数。库函数:由系统提供,在文件头部包含相应的库之后就可以直接调用库中的函数。自定义函数:是用户自行定义的函数,是为了解决用户自己的业务问题。知识讲解1.函数的概念定义和使用函数时,需要注意以下问题。(1)C程序的执行是从main()函数开始的。(2)一个C程序可以有多个源程序文件。一个源程序文件由一个或多个函数以及其他有关内容(如指令、数据声明与定义等)组成。(3)函数不能嵌套定义。知识讲解2.函数的定义函数定义格式如下。返回值类型函数名(参数类型参数名1,……,参数类型参数名n){
执行语句 ……… return返回值;}知识讲解2.函数的定义函数定义格式如下。返回值类型函数名(参数类型参数名1,……,参数类型参数名n){
执行语句 ……… return返回值;}用于限定函数的返回值的类型函数的名称用于限定参数的类型知识讲解2.函数的定义函数定义格式如下。返回值类型函数名(参数类型参数名1,……,参数类型参数名n){
执行语句 ……… return返回值;}接收传入数据的变量的名称结束函数函数返回的结果知识讲解2.函数的定义函数定义示例:intadd(inta,intb){ intsum; sum=a+b; returnsum;}函数返回一个int类型的值函数名称为add两个int类型的参数,名称为a和b将参数a、b之和返回知识讲解2.函数的定义函数不能嵌套定义,错误示例:intadd(inta,intb){ //定义add()函数 intsum; sum=a+b; returnsum; charsub(intx,inty){ //在add()函数内部定义sub()函数,错误 intsum=x-y; returnsum; }}知识讲解2.函数的定义VS函数的“定义”与“声明”不是一回事儿。“定义”是指对函数功能的确立,函数的定义是一个完整的、独立的函数单位。“声明”则是把函数名、参数列表、返回值类型通知编译系统,以便在调用时系统按照此声明进行对照检查。知识讲解2.函数的定义函数声明有两种形式。返回值类型函数名(参数类型1参数名1,参数类型2参数名2,…参数类型n参数名n);返回值类型函数名(参数类型1,参数类型2,…参数类型n);函数声明示例:intadd(inta,intb);intadd(int,int);知识讲解3.函数的调用过程函数调用:程序在编译或运行时调用某个函数以实现某种功能的过程。调用一个函数时,系统就会跳转到函数内部执行这个函数,执行完毕后再跳转回来接着执行下一条指令。系统在函数调用之前可以保护好当前程序的执行“现场”,去执行函数,函数执行完毕后,再恢复当前程序的执行“现场”。函数调用这个过程类似于视频播放器中的暂停与播放。知识讲解3.函数的调用过程函数调用示例:intfunc(intx,inty){
returnx+y;}传入参数3、5程序暂停,去执行func()函数知识讲解3.函数的调用过程函数调用示例:intfunc(intx,inty){
returnx+y;}传入参数3、5在func()内部,为形参x、y分配空间,并将3、5赋值给x、y进行运算知识讲解3.函数的调用过程函数调用示例:intfunc(intx,inty){
returnx+y;}传入参数3、5func()函数执行完毕之后,回到“暂停”处继续往下执行知识讲解4.函数的调用方式在调用函数时,要求实参与形参必须满足三个条件。123
3个数相等顺序对应类型匹配知识讲解4.函数的调用方式根据函数在程序中出现的位置,其调用方式可以分为以下4种。01将函数作为表达式调用将函数作为表达式调用时,函数的返回值参与表达式的运算,此时要求函数必须有返回值。将函数作为表达式调用示例:inta=max(10,20);知识讲解4.函数的调用方式根据函数在程序中出现的位置,其调用方式可以分为以下4种。02将函数作为语句调用函数以语句的形式出现时,可以将函数作为一条语句进行调用。将函数作为语句调用示例:printf("helloworld!\n");知识讲解4.函数的调用方式根据函数在程序中出现的位置,其调用方式可以分为以下4种。03将函数作为实参调用将函数作为实参调用时,其实就是将函数返回值作为函数参数,此时要求函数必须有返回值。将函数作为实参调用示例:printf("%d\n",max(10,20));知识讲解4.函数的调用方式根据函数在程序中出现的位置,其调用方式可以分为以下4种。04函数的嵌套调用在调用函数时,可以在一个函数中调用另一个函数,这就是函数的嵌套调用。函数嵌套调用示例:intfunc(intx,inty){
max(10,20); //函数嵌套调用
returnx+y;}案例实现1.案例设计010203定义一个函数blessing()。在blessing()函数内部调用printf()函数输出对祖国的祝福。在main()函数中需要输出祝福语之处调用blessing()函数对案例进行分析,案例设计步骤如下。案例实现2.完整代码本案例中可以实现的效果图如下。intmain(){请参考案例6-1完整代码}代码实现简易计算器案例6-2【案例6-2】简易计算器(1)了解函数三要素,能够说出函数名、参数列表、返回值类型的作用学习目标案例描述计算工具的使用历史非常悠久,最早的计算工具是中国古代的算筹,后来算筹演变为算盘,算盘先后流传至日本、朝鲜、东南亚国家,后传入西方,成为世界上公认最早的计算工具。1946年,第一台电子计算机ENIAC诞生,人类进入计算机时代,现在电子计算器已经普及我们生活的各个角落。案例描述本案例要求编写一个程序实现一个简易的计算器,能够进行简单的整数加减乘除运算,具体要求如下。(1)从键盘输入一个表达式,如12+3。(2)根据表达式选择相应的函数,完成表达式的运算,并将结果输出到控制台。知识需求实现四则运算定义四个函数需要知识:参数、返回值等。函数三要素实现加减乘除四则运算,每种运算可以定义一个函数单独完成,因为函数要完成数据的四则运算,所以定义函数时要有参数、返回值等,这就需要学习函数的函数名、参数列表、返回值等相关知识。知识讲解1.函数名函数名函数名是一个指针常量,记录了函数代码在内存中的地址。函数代码存储在内存代码区,有入口地址,这个入口地址就保存在函数名当中。函数被调用时,函数名负责告诉调用者函数的入口地址,实现函数的调用。知识讲解1.函数名使用printf()函数直接输出函数名时,其结果是一个地址。输出函数名示例:printf("%p\n",add);//输出add()函数代码的存储地址对函数名的非法操作。给函数名赋值比较两个函数大小sizeof计算函数大小注意:在书面用语中,函数后面的小括号()不能省略。知识讲解2.参数列表参数列表:函数中的“(参数类型参数名1,参数类型参数名2,…,参数类型参数名n)”被称作参数列表。参数列表为空的函数称为无参函数。参数列表不为空的函数称为有参函数。知识讲解2.参数列表(1)无参函数无参函数就是参数列表为空的函数。voidfunc(){ printf("这是一个无参函数!\n");}参数列表为空参数列表为空时,小括号()也不能省略。知识讲解2.参数列表(2)有参函数有参函数的参数列表不为空。参数相当于就是一个变量,用于接收调用者传入的数据。函数参数在定义时只是一个形式上的变量,并不真实存在,即编译器不会为其分配内存,因此参数列表中的参数名被称为形式参数,简称为形参。调用有参函数时,调用者会向函数传入具体的数据,这些数据是实际存在的,也被称为实际参数,简称为实参。形参和实参之间的数据传递是单向的,即只能由实参传递给形参,不能由形参传递给实参。知识讲解2.参数列表有参函数定义与调用示例。charswap(charch){ charc; if(97<=ch&&ch<=122) c=ch-32;
elseif(65<=ch&&ch<=90)
c=ch+32;
else
printf("传入的字符不是英文字母!\n"); returnc;
}intmain(){ charc=swap('a'); //调用swap()函数,将返回值保存到变量c中 printf("%c\n",c); //输出转换后的结果为A return0;
}形参实参知识讲解3.返回值类型函数的返回值是指函数被调用之后,返回给调用者的值,由return关键字返回。return表达式;(1)return后面表达式的类型和函数定义返回值的类型应保持一致。(2)如果函数没有返回值,可以直接在return语句后面加分号或省略return语句。(3)如果函数没有返回值,函数返回值类型要定义为void。(4)return结束函数执行,return后面的代码语句不会再执行。知识讲解3.返回值类型return应用示例。intcompare(intx,inty) //定义compare()函数{ if(x>y)
returnx; //调用return语句 elseif(x<y)
returny; //调用return语句 else
return0; //调用return语句}案例实现1.案例设计案例设计定义4个函数,分别实现四则运算。每个函数的参数列表设置两个形式参数,接收两个操作数。010203在main()函数中,定义一个字符变量记录用户输入的运算符,将运算符传递到switch()语句中,让程序判断选择要使用的函数。在main()函数中,使用while(1)语句使程序循环执行,可以使计算器一直使用。案例实现2.完整代码本案例中可以实现的效果图如下。intmain(){请参考案例6-2完整代码}代码实现汉诺塔案例6-3【案例6-3】汉诺塔(1)掌握递归函数的定义与调用,能够通过递归函数解决特定的数学问题学习目标案例描述汉诺塔是一种源自印度古老传说的益智玩具,玩具有三根柱子,其中一根柱子从下到上叠放着一摞由大到小的多个黄金盘。案例描述要求把A座上的黄金盘移动到C座,中间可以借助B座。但规定每次只允许移动一个盘,且在移动过程中,3个座上都始终保持大盘在下,小盘在上的排列顺序。这虽然是个玩具,但蕴含着深刻的数学知识,千百年来吸引着无数的数学家及爱好者,探索不同数量的黄金盘需移动的次数。本案例就要求编写一个程序计算n个黄金盘需要移动的次数。知识需求当n=1时,只需要将圆盘从A座移动到C座,f(1)=1;假设有n个圆盘,移动次数是f(n),则n取不同值时,移动次数规律如下。当n=2时,将上面的圆盘移动到B座,A座上第二个圆盘移动到C座,B座上的圆盘再移动到C座,则f(2)=3;当n=3时,将A座上第一个圆盘移到到C座,第二个圆盘移动到B座,C座上的圆盘移动到B座,A座上的圆盘移动到C座,B座上的第一个圆盘移动到A座,第二个圆盘移动到C座,A座上的圆盘移动到C座,一共移动了7次,f(3)=7;┈
,得出规律:f(n+1)=2*f(n)+1知识需求根据上述规律,当要移动64个圆盘时,需要先将A柱上最大(最底层)的盘子移动到C柱,而在此之前要先将之上的63个圆盘先从A移动到B,在此之后才能将当前处于B上的63个圆盘移动到C柱上。而要将B柱上的63个圆盘移动到C柱上,需要先将B上层的62个圆盘移动到A柱上,然后将B柱上最大的圆盘移动到C上……以此类推,之后需要移动62个盘子、61个盘子……直到A或B柱上只剩下一个圆盘,此时将这个圆盘移动到C柱,移动结束。在这个过程中,只有完成n=1时的任务,才能完成n=2时的任务,每次计算需要用到上一次计算结果,这种规律称为递归,因此要想顺利实现本案例,需要学习递归的相关知识。知识讲解递归函数一种计算过程,如果其中每一步都要用到前一步或前几步的结果,这个计算就是可递归的。用递归过程定义的函数,称为递归函数。要计算1~n之间自然数之和,就需要先计算1加2的结果,用这个结果加3再得到一个结果,用新得到的结果加4,……,以此类推,直到用1~(n-1)之间所有数的和加n,就得到了1~n之间的自然数之和。知识讲解递归函数定义计算1~n之间自然数之和的递归函数,示例如下。intgetsum(intn){ intsum=0; sum=getsum(n-1);
//调用函数本身 returnsum+n; //返回sum+n结果,即getsum(n-1)+n结果}知识讲解递归函数但上述getsum()函数是一个无止境的函数,即调用没有结束条件,调用时,系统会抛出“栈溢出”异常。例如,传入数值4,其调用过程如右图。当传入n=4时没有结束条件,函数会一直递归调用下去知识讲解递归函数函数调用本身,且每一次调用本身时,必须是更接近于解。0102递归必须有结束条件。如果没有停止条件,递归就是一个内存开销较大的无限循环。由此可以得出,递归函数要满足两个条件:01知识讲解递归函数修改getsum()函数的定义,添加终止条件。intgetsum(intn){
if(n==1)
//终止条件:n=1
return1; //n=1时,和为1 inttemp=getsum(n-1);//调用函数本身 returntemp+n; //返回sum+n结果,即getsum(n-1)+n结果}知识讲解递归函数修改之后的getsum()函数中,添加了递归结束条件:n=1,当n从4递减至1时,函数递归结束。假如传入参数为4,则getsum(4)的递归过程如下所示。1234n=4,getsum(4)=temp+4=getsum(3)+4。n=3,getsum(3)=temp+3=getsum(2)+3。n=2,getsum(2)=temp+2=getsum(1)+2。n=1,getsum(1)=1,即temp值为1。知识讲解递归函数递归到n=1时,getsum(1)值为1,将上述过程反推,最终得出1~4之间的自然数之和为10。123n=4,getsum(4)=temp+4=getsum(3)+4。n=3,getsum(3)=temp+3=getsum(2)+3。n=2,getsum(2)=temp+2=getsum(1)+2。知识讲解递归函数getsum(4)的递归调用过程。案例实现1.案例设计根据案例分析可知,求解的每一步中都在求其更小规模的解,已知递推公式为f(n+1)=2f(n)+1,终止条件为n=1,符合递归算法的思想,所以本例使用递归来实现。案例实现2.完整代码本案例中可以实现的效果图如下。intmain(){请参考案例6-3完整代码}代码实现0.99与1.11的差别案例6-4【案例6-4】0.99与1.11的差别巩固前面所学知识,能够利用前面所学知识实现案例6-4。学习目标案例描述陶渊明语:勤学如春起之苗,不见其增,日有所长;辍学如磨刀之石,不见其损,日有所亏。知识来源于日常的点滴积累,学习如同逆水行舟,不进则退。案例描述假如学习标准为1,如果一个人每天退步一点,学习程度为0.99,而另一个人每天进步一点,学习程度为1.11,则3年之后,两个人的差别是非常巨大的。这种微小的差别最终会导致学习效果的南辕北辙,这说明了学习积累的重要性,同时也很好的诠释了量变导致质变的规律。本案例要求编写一个程序实现上面所描述的场景,即计算0.99n与1.11n的差别,n表示天数。案例实现计算0.99n与1.11n的差别,可以定义一个函数实现相应功能,可以使用前面学习过的函数的定义与调用的相关知识。定义一个函数power(),第一个参数定义为float类型,即0.99或1.11;第二个参数定义为int类型,表示天数。01在函数内部,使用循环语句做0.99或1.11的累积,最后返回累积。02案例实现2.完整代码本案例中可以实现的效果图如下。intmain(){请参考案例6-4完整代码}代码实现远水不救近火案例6-5【案例6-5】远水不救近火掌握局部变量与全局变量的定义与调用,能够定义局部变量与全局变量实现不同作用域的数据描述学习目标案例描述在C语言中,不同的变量也有其不同的作用范围。若将C语言中的变量比作“水”与“火”,那么定义在不同代码段中的变量之间也有远近之分。本案例要求编写一个程序,在程序中不同位置定义“水”与“火”的相关变量,模拟远水救近火、近水救近火的场景,以此演示代码中不同位置变量的定义与使用。知识需求起火了近水远水局部变量全局变量局部变量和全局变量在内存中的存储位置不同,作用范围也有差异,在实现案例之前,我们需要先学习局部变量和全局变量的相关知识。知识讲解1.局部变量定义在函数内部的变量称为局部变量,这些变量的作用域仅限于函数内部,函数执行完毕之后,这些变量就失去作用。知识讲解1.局部变量局部变量定义与使用示例。intfun(){
inta=10; //func()函数中的局部变量 returna;
}intmain(){
inta=5; //main()函数中的局部变量 intb=fun(); printf("a=%d,b=%d\n",a,b);
return0;}此处调用的是main()函数中定义的局部变量a知识讲解1.局部变量{}可以起到划分代码块的作用,{}中定义的变量,作用域就局限于{}内。intmain(){
{
inta=10; //作用域在本代码块内,即它所属的{}范围 printf("a=%d\n",a); }
{
inta=5; //作用域在本代码块内,即它所属的{}范围 printf("a=%d\n",a); } return0;}知识讲解2.全局变量在所有函数(包括main()函数)外部定义的变量称为全局变量,它不属于某个函数,而是属于源程序,因此全局变量可以被程序中的所有函数共用,它的有效范围为从源程序定义开始处到源程序结束。若在同一个文件中,局部变量和全局变量同名,则全局变量会被屏蔽。知识讲解2.全局变量全局变量与局部变量定义、使用示例。inta=10;
//全局变量aintmain(){ {
inta=5;
//局部变量a printf("a=%d",a); //全局变量a被屏蔽 } //局部变量a失效 printf(",a=%d\n",a); //全局变量a生效 return0;} //全局变量a失效案例实现1.案例设计全局变量的作用范围为整个程序。局部变量的作用范围从定义处开始,到所在层的“}”处结束。若变量名相同,全局变量将被局部变量屏蔽。案例实现2.完整代码本案例中可以实现的效果图如下。intmain(){请参考案例6-5完整代码}代码实现数据去重案例6-6【案例6-6】数据去重掌握数组作为函数参数的应用,能够使用数组传递多个数据学习目标案例描述本案例要求编写一个程序,实现数组元素的去重处理,案例具体要求如下。(1)从键盘输入一组数据。(2)对输入的数据进行去重处理,将去重后的数据输出到控制台。知识需求从键盘输入一组数据,可以使用数组存储这组数据。数据去重功能可以定义成一个函数。传递数组作为参数需要学习数组作为函数参数的相关知识。知识讲解数组作为函数参数数组作为函数参数时,必须要保证形参与实参的数组是相同的类型,且有明确的数组说明,如数组维数、数组大小等。数组作为函数参数时,传递的就是数组所在内存块的地址,形参与实参操作的是同一块内存。在形参中改变数组中的元素,实参的数组也会改变。知识讲解数组作为函数参数以数组作为参数的函数声明。voidfunc1(intarr[5]);voidfunc2(intarr[],intn);传入数组调用函数。func1(arr[5]); func2(arr,5);知识讲解数组作为函数参数多维数组作为函数参数时,可以指定每一维的长度,也可以省去第一维的长度。voidfunc1(intarr[3][4]);voidfucn2(intarr[][4],intn);传入数组调用以多维数组作为参数的函数。func1(arr[3][4]);fucn2(arr,3);案例实现1.案例设计定义两个大小为10的int类型数组arr1和arr2,arr2用于存储去重后的元素。定义函数func()实现去重功能,以数组arr1和arr2及其大小作为参数,在函数内部,取arr1数组中的元素,逐一与arr2数组中的元素比对,如果arr2数组中没有与之相等的元素,就将获取的arr1数组的元素存储到数组arr2中,否则就丢弃。在main()函数中,调用func()函数进行去重,去重之后,输出arr2数组中的元素。(1)(2)(3)案例设计案例实现2.完整代码本案例中可以实现的效果图如下。intmain(){请参考案例6-6完整代码}代码实现体测成绩判定案例6-7【案例6-7】体测成绩判定了解多个文件之间的变量引用与多个文件之间的函数调用,能够跨文件引用变量、调用函数学习目标案例描述2014年秋季起,我国执行学生体质健康测试的新标准,大学生体测低于50分将不能毕业,按结业或肄业处理。体测所含项目与每项所占比重如下表。背景介绍单项指标权重体重指数(BMI)15肺活量1550米20坐位体前屈10立定跳远10引体向上(男)/仰卧起坐(女)101000米(男)/800米(女)20案例描述男生与女生的测试项目略有不同。根据“大学生体质健康评分标准(2014年修订版)”,男生女生的判断标准也有所差异。男女生各项指标评分细则如下表。背景介绍
项目成绩体重指数(25%)肺活量(35%)引体向上(男)(40%)仰卧起坐(女)(40%)10017.9~23.9男>4800男>19>5617.2~23.9女>3400女800~17.8/24.0~27.9男4181~4800男16~1953~560~17.1/24.0~27.9女3001~3400女60≥28.0男3101~4180男10~1525~52≥28.0女2051~3000女30
男0~3100男0~90~16
女0~2050女案例描述体测成绩判定细则如下表。背景介绍优秀良好及格不及格95~10080~9460~79<60总成绩的计算方式为:各项成绩与其所占比重相乘,将相乘后的成绩相加。男生体重指数×25%+肺活量×35%+引体向上×40%女生体重指数×25%+肺活量×35%+仰卧起坐×40%案例描述本案例要求根据前面所述背景知识,编写程序实现一个简单的体测成绩判定系统,目的在于模拟体测成绩的判定机制,不要求实现所有项目成绩的判定,根据以上分类,结合案例,对将要设计的程序,作如下要求。(1)根据评分表,分别实现体重指数、肺活量、引体向上、仰卧起坐这四项指标的计算功能。(2)可以根据用户的选择,进行单向指标的成绩换算。(3)实现总成绩的计算功能,并根据表6-3对总成绩进行判定(优秀、良好、及格、不及格)。(4)以菜单的形式向用户展示所有功能。知识需求体测成绩判定系统源文件1源文件3源文件2源文件4体测项目代码较多,需要定义多个函数,如果函数较多,为便于阅读,可以使用多个文件存储不同的代码,这就需要学习多文件之间的变量引用、多文件之间的函数调用等相关知识。知识讲解1.多文件之间的变量引用局部变量无法跨文件引用,能跨文件引用的是全局变量。全局变量要跨文件引用,定义文件与引用文件中,全局变量前面都要加上extern关键字。test.c文件demo.c文件extern
inta=100;extern
a; intmain(){printf("%d\n",a);return0;}demo.c文件引用test.c文件中的全局变量a。知识讲解1.多文件之间的变量引用现在编译器默认源文件中的全局变量可以被其他源文件引用,因此在定义时可以不加extern关键字。test.c文件demo.c文件inta=100;extern
a; intmain(){printf("%d\n",a);return0;}demo.c文件引用test.c文件中的全局变量a。知识讲解1.多文件之间的变量引用如果本文件定义的全局变量不想被其他文件引用,可以在全局变量前添加static关键字修饰,这样的全局变量称为静态全局变量。静态全局变量无法跨文件引用。test.c文件demo.c文件staticintcount=100;externcount;intmain(){printf("%d\n",
count);return0;
}demo.c文件引用test.c文件中的静态全局变量count。编译器报错知识讲解1.多文件之间的变量引用如果本文件定义的全局变量不想被其他文件引用,可以在全局变量前添加static关键字修饰,这样的全局变量称为静态全局变量。静态全局变量无法跨文件引用。知识讲解1.多文件之间的变量引用如果本文件定义的全局变量不想被其他文件引用,可以在全局变量前添加static关键字修饰,这样的全局变量称为静态全局变量。静态全局变量无法跨文件引用。由此可以得出,static除了保护全局变量不被其他文件引用,还可以解决重名问题,即两个源文件可以定义重名的全局变量,使用static关键字可以解决重名问题。知识讲解2.多个文件之间的函数调用多文件之间也可以进行函数的相互调用,根据函数能否被其他源文件调用,可以将函数分为外部函数和内部函数。外部函数可以被其他源文件调用的函数称为外部函数。定义外部函数:在函数返回
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 苏科版七年级数学上册《3.2.2代数式》听评课记录
- 2025年税务部门工作总结
- 金融服务战略合作协议书范本
- 小学数学苏教版六年级上册《立体图形表面积和体积总复习》听评课记录
- 光缆线路施工安全协议书范本
- 合作三方协议书范本
- 学校食堂雇佣人员劳务合同范本
- 医院领导班子2024年度运行情况报告
- 华师大版数学八年级下册《从边的角度判定平行四边形》听评课记录2
- 施工场地硬化拆除施工方案
- 房地产调控政策解读
- 山东省济宁市2025届高三历史一轮复习高考仿真试卷 含答案
- 五年级数学(小数乘法)计算题专项练习及答案
- 产前诊断室护理工作总结
- 6S管理知识培训课件
- 2024-2025学年八年级数学人教版上册寒假作业(综合复习能力提升篇)(含答案)
- 医院培训课件:《猴痘流行病学特点及中国大陆首例猴痘病例调查处置》
- 氢气-安全技术说明书MSDS
- 产科护士临床思维能力培养
- 《AP内容介绍》课件
- 医生定期考核简易程序述职报告范文(10篇)
评论
0/150
提交评论