1.什么是函数?
函数是C语言程序的基本模块,是用于完成特定任务的程序单元,从函数的定义来看,可以将函数分成两种形式:
系统函数,库函数这个函数就是系统为我们所提供的程序,我们不需要写,可以直接调用,
用户定义函数,用户自己写一个函数处理某些特定的问题
2.函数的作用
降低代码的重复性
函数可以更加让程序模块化,有利于程序的阅读修改和完善
3.函数的调用:随机数的产生
既然现在开始学习随机数了,那么我就是想写一个猜数字小游戏
调用函数时:需要关心的五个要素
头文件:包含指定的头文件
函数名字:函数名字必须和头文件声明的名字一样
功能:需要知道此函数能干什么之后再调用
参数:参数类型要匹配
返回值:根据需要接受返回值#include
time_ttime(time-t*t);
功能:获取当前系统的时间
参数:null
返回值:当前系统时间,time_t类型,单位为毫秒
#include
voidsrand(unsignedintseed)
功能:用来设置rand产生随机数时的种子
参数:如果每次seed相等,rand产生的随机数相等
返回值:无
#include
intrand(void);
功能:返回一个随机数值
参数:无
返回值:随机数
生成随机数:
#include
#include
#include
intmain(void){
srand((size_t)time(NULL));
intrandom=rand%100;
printf('%d',random);
return0;
}
经过一段时间的点击之后返现,这个生成的随机数,其实并不是真正意义上的随机,而是随着时间进行变化的,当运行速度和点击运行速度很快的时候,就是会发现这个数据是递增的;
4.函数的定义格式
返回值类型函数名(参数列表){
代码体;
return0;
}
需求:计算两个数的和
//
//Createdby27760on2023/5/19.
//
#include
intsumm(inta,intb){
intsum1=a+b;
returnsum1;
}
intmain{
intnum1,num2;
printf('请输入两个数:');
scanf('%d%d',&num1,&num2);
intd=summ(num1,num2);
printf('%d',d);
return0;
}
运行结果如下:
D:\code\Ccode\stu03.exe
请输入两个数:45
56
Processfinishedwithexitcode0
函数定义的过程中定义的参数称之为形参;
在函数的调用过曾是传递的参数叫做实参;
在函数的额调用过程中是将实参传递给形参;
5.函数名字、形参、函数体、返回值
函数名:就是这个函数的名称,最好是要见名知意,在函数的后面应该有一个圆括号表示这是一个函数;
形参:函数在定义的时候指定大参数,在函数没有出现调用时,它并不占用内存中的储存单位,因此称他为形参或者虚拟参数,形参并不是实际存在的数据,因此形参变量不能够赋值
函数体:函数体就是自己写的程序,用来执行某些特定任务的代码;
返回值:返回值是经过函数里面的return语句来获得的,return后面也可以是一个语句。(return中的值尽量与函数的返回值已知,当不一致的时候,以函数的返回值为准,即是函数的返回类型决定了返回值的类型,当返回值不一致,并且无法进行转换的时候就会报错)
6.函数的形参和实参
形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。
实参出现在主调函数中,进入被调函数后,实参也不能使用。
实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。
在调用函数时,编译系统临时给形参分配存储单元。调用结束后,形参单元被释放。实参单元与形参单元是不同的单元。调用结束后,形参单元被释放,函数调用结束返回主调函数后则不能再使用该形参变量。实参单元仍保留并维持原值。因此,在执行一个被调用函数时,形参的值如果发生改变,并不会改变主调函数中实参的值。
7.无参函数的调用
如果是调用无参函数,则不能加上实参,但是括号不能够省略
可以用来打印话;
#include
voidsentence{
printf('就是打印出来一句话而已!\n');
}
intmain{
sentence;
return0;
}D:\code\Ccode\stu04.exe
就是打印出来一句话而已!
Processfinishedwithexitcode0
8.函数声明
在c语言中函数的定义顺序是有要求的,只有后定义的函数才可以调用前面声明的函数;
如果想把main函数放在定义的函数之前并且能够执行main函数就必须声明一下,如下格式
//
//Createdby27760on2023/5/21.
//
#include
voidnum2(inta,intb);
intmain{
num2(95,85);
return0;
}
voidnum2(inta,intb){
if(a>b){
printf('今天的天气真不错!');
}
else{
printf('今天的天气真糟糕!');
}
}
函数声明的格式:返回值类型函数名(参数1,参数2,...)
如果只有函数的声明,而没有函数的定义,那么程序将会在链接时出错
9.主函数和exit函数
在main函数中,调用exit和return的结果是一样的,但是子函数中的return只是代表子函数的终止,在子函数的调用exit表示的是程序的终止
10.多文件编程
.c文件内装有函数本体,.h文件内放入函数声明,以供其他函数调用
#include
代表编译时直接在软件设置的指定路径中寻找里面是否有stdio.h的库文件。如果有,直接加载;如果没有,报错。
#include“function1.h”
代表编译时先寻找你正在编辑的源代码文件所在的文件夹里面有没有function1.h的库文件。如果有,优先加载这个文件,如果没有,才会在指定路径中寻找是否有function1.h的库文件。如果有,直接加载;如果没有,报错。
多文件编程的编写过程
1.创建两个.c文件,function1.c和function2.c
2.分别在两个.c文件内定义需要的函数
3.创建两个.h文件,文件名与两个.c文件一致,即function1.h和function2.h
4.在两个.h文件中分别包含各自所需的库文件,声明在.c中定义的函数
5.在main.c文件中包含两个.h文件,在main函数中直接调用两个自定义函数
避免多重包含的两种方法:
方法一:#ifndef
方法二:#pragmaonce
暂时还没有遇到多文件编程,现阶段暂时了解一下就行。
联系客服