第十一章
任务一:函数的定义和使用
任务二:函数的作用
小结
习题
时隔了一个多星期了,相信大家也已经期待了这么长时间了,本章所讲的内容对我们目前来说虽然使用的次数不多,但对我们以后的核心编程思想还是有很大的帮助的,本章的内容很简单,但我们学的不仅仅内容,而是一种思想,那么,废话不多说了,直接开始。
其实,我们之前刚开始将的时候,大家实际就应该理解了“函数(function)”,就如在“stdio.h”库中的“printf();”函数,我们目前仅仅会使用“printf();”但我们还不会制作属于我们自己的“printf();”那么,今天我们就可以自己写一个“printf();”Plus(升级版),
我们自定义函数,分为,无参函数 和 有参函数
我们先定义一个 无参函数,定义代码如下:
这个第二行的,“void func1(){}”就是我们自定义的一个无参函数,“void”我们之前讲过就是整块函数结束之后,不需要返回值,而“int”或“char”“double”则需要“return xx;”进行返回某个数值.
我们自定义的函数里面有个“printf();”函数,我们运行时发现没有任何内容,这是因为程序运行时,直接从 main()函数(主函数)的第一条语句开始运行,并没有运行我们定义的无参函数,
#include<stdio.h> void func1() { printf("这是我的第一个无参函数\n"); } int main() { return 0; }
代码调试截图如下:没有任何输出
那么接下来我们要这样使用我们刚刚定义的无参函数,代码如下:在 main()主函数调用我们定义的无参函数,
#include<stdio.h> void func1() { printf("这是我的第一个无参函数\n"); } int main() { func1(); return 0; }
代码调试截图如下:我们的自定义的函数代码可以写在main()主函数上方,同时也可以写在main()主函数的下方,不过写法有些不同,代码如下:我们要想把 我们自定义的函数写在main()主函数的下方,那么我们在调用这个自定义函数时,要先向编译器进行申明一下,这里的申明代码如:void func1(); 告诉编译器,我已经自定义了一个无参函数,无返回值,函数名为 func1,,之后编译器才会然我们通过并且它会继续向下检查看看你是不是真的自定义了一个无参函数,最后才会完全通过编译过程
#include<stdio.h> int main() { void func1(); //向编译器申明一下我们定好了自定义函数 func1(); //调用我们定义的自定义函数 return 0; } void func1() { printf("这是我的第一个无参函数\n"); }
代码调试截图如下:
定义一个有返回值的无参函数,就以整数类型的为例,代码如下:我们这个是有返回值的无参函数,返回值为 return 999; 这个自定义函数结束后会返回一个999的整数值,然后我们可以直接“printf();”输出这个返回值,
#include<stdio.h> int func1() { return 999; } int main() { printf("%d",func1()); return 0; }
代码调试截图如下:成功输出返回值999,
那么我又产生了几个疑问,那这个 具有返回值的 func1()函数能否做一些运算呢?那么我们带着疑问去尝试一下运算,代码如下:
#include<stdio.h> int func1() { return 999; } int main() { printf("%d",3*func1()); return 0; }
代码调试截图如下:可以参与运算,那么我们就可以将其作为变量来使用了
前面我们也提到过“printf();”与我们定义的函数大体相同,那么“printf();”是不是也能参与运算呢?我们也将“printf();”当做变量来使用一下,看看会发生什么
代码如下:以整数类型的输出“printf(“abc”)”
#include<stdio.h> int main() { printf("%d",printf("abc")); return 0; }
代码调试截图如下:发现竟然编译通过了,且输出了“abc3”后面这个3就是我们这句话的字符个数,大家可以用一些其他的符号,会发现有些符号用这样的方式输出数值与其个数不等(具体我也不知道,若有人知道请评论留言)
那么我们将其做一下运算,看看是什么样子,代码如下:
#include<stdio.h> int main() { printf("%d",3*printf("abc")); return 0; }
代码调试截图如下:可以进行运算
上面就是无参函数的定义和简单的使用,那么我们接下来来讲有参函数的使用,其实他们差别不大,就是多了些我们可以自定义的参数而已,代码如下:
在func1(int a,int b) 中我们添加了“int a,int b”这两个自变量,也就是我们为这个自定义函数添加了两个整数类型的参数,int a为参数一,int b为参数二
然后这个func1(int a,int b)的函数里有一个“printf();”用来输出 a b的数值
main()主函数这里也定义了两个变量 a ,b 这里我们先发现了,a , b变量已经在func1函数里定义过了,这里重复定义了,但并不是,在我们自定义的函数里所定义的变量,我们可以理解为“局部变量”也就是指针对这一块有用,执行完func1函数之后a,b两个变量就会被自动释放,这里func1的局部变量与 main()主函数的变量没有任何关系,所以编译器不会报错程序正常运行
主函数,scanf();我们输入两个整数值,然后接下来执行下面一条语句“func1(b,a);”执行的是我们的自定义函数,并且赋予自定义函数 参数一和参数二,这里的“func1(b,a);”b所占的位置为参数一的位置,a所占的位置为参数二的位置
#include<stdio.h> void func1(int a,int b) { printf("参数一:%d 参数二:%d\n",a,b); } int main() { int a,b; scanf("%d%d",&a,&b); func1(b,a); //调用我们定义的自定义函数 return 0; }
代码调试截图如下:
我们可以用这具有参数的自定义函数来简单的写一个加法小函数,代码如下:
#include<stdio.h> void func_add(int a,int b) { printf("%d",a+b); } int main() { int a,b; scanf("%d+%d",&a,&b); func_add(a,b); return 0; }
代码调试截图如下:
这是一种写法,还有另一种写法,就是我们用 具有返回值的含参函数 来实现,代码如下:利用return xx;来实现运算
#include<stdio.h> int func_add(int a,int b) { return a+b; } int main() { int a,b; scanf("%d+%d",&a,&b); printf("%d",func_add(a,b)); return 0; }
代码调试截图如下:这里也说明了 return xx;可以返回某个表达式当然我们会发现,运算这么简单的东西,干嘛要用函数来解决呢?这不是将简单复杂化了吗?,目前我们C语言中暂时用的较少,当你学习高级语言时,用的就会非常频繁,而且是一个函数嵌套着另一个函数而另一个函数又嵌套着其他更多的函数,这样多次嵌套,目的是为了让我们所编写的程序尽量清晰化,缩小化,所以我们目前学这个函数虽然目前用的不多,但以后非常重要,
对了,忘了说一点,我们自定义函数时,只能由字母,下划线,数字构成,不能为关键语句,例如 不能为 int for() void for() void if() ……而且定义时也不能以数字作为开头,开头只能为字母或下划线
点击下一页,开始学习任务二“函数的作用”
评论抢沙发