6 函数
6.1 概述
6.1.1 函数分类
C程序是由函数组成的,我们写的代码都是由主函数main()开始执行的。函数是C程序的基本模块,是用于完成特定任务的程序代码单元。
从函数定义的角度看,函数可分为系统函数和用户函数两种:
- 系统函数,即库函数:这是由编译系统系统的,用户不必自己定义这些函数,可以直接使用它们,如我们常用的打印函数是printf()。
- 用户定义函数:用以解决用户的专门需求。
6.1.2 函数的作用
-
函数的作用可以省去重复代码的编写,降低代码重复率。冗余
-
函数可以让程序更加模块化,从而有利于程序的阅读,修改和完善
假如我们编写一个实现以下功能的程序:读入一行数字:对数字进行排序;找到它们的平均值;打印出一个柱状图。如果我们把这些操作直接写在main()里,这样可能会给用户感觉代码会有点凌乱。但,假如我们使用函数,这样可以让程序更加清晰、模块化。
这里我们可以这么理解:程序就像公司,公司是由部门组成的,这个部门就类似于C程序的函数。默认情况下,公司就是一个大部门(只有一个部门的情况下),相当于C程序的main()函数。如果公司比较小(程序比较小),因为任务小而简单,一个部门即可(main()函数)胜任。但是,如果这个公司很大(大型应用程序),任务多而复杂,如果只是一个部门管理(相当于没有部门,没有分工),我们可想而知,公司管理、运营起来会有多混乱,不是说这样不可以运营,只是这样不完美而已,如果根据公司要求分成一个个部门(根据功能封装一个一个函数),招聘由行政部门负责,研发由技术部门负责等,这样就可以分工明确,结构清晰,方便管理,各部门之间还可以相互协调。
6.1.3 函数的调用:产生随机数
当调用函数时,需要关心5要素:
- 头文件:包含指定的头文件
- 函数名字:函数名字必须和头文件声明的名字一样
- 功能:需要知道此函数能干嘛后才调用
- 参数:参数类型要匹配
- 返回值:根据需要接收返回值
#include<time.h>
time_t time(time_t *t);
功能:获取当前系统时间
参数:常设置为NULL
返回值:当前系统时间,time_t相当于long类型,单位为毫秒
#include<stdlib.h>
void srand(unsigned int seed);
功能:用来设置rand()产生随机数时的随机种子
参数:如果每次seed相等,rand()产生随机数相等
返回值:无
#include<stdlib.h>
int rand(void)
功能:返回一个随机数值
参数:无
返回值:随机数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main01()
{
//sand(unsigned int seed);
//time_t timer=time(NULL);
//srand((size_t)timer);//强制类型转换,把time.h的返回值作为srand的参数
//添加随机数种子
srand((size_t)time(NULL));
//rand() 鼠标放上去 返回值为int类型
for(int i=0;i<100;i++)
{
printf("%d\n",rand()%100);//取余%100,得到数的范围为0-99
//rand()%101 -->0-100
//rand()%51+50 -->50-100 %51得到0-50再+50,得到范围50-100
}
return 0;
}
int main02()
{
//双色球 6个红球 1-32 蓝球 1-16
srand((unsigned int)time(NULL));
int arr[6]={
0};
int value=0;//接收1-32随机数
int flag=0;//arr里有几个球
int i,j;
//for(int k=0;k<10;k++)//把整体代码括起来,执行10次
//{
flag=0;
for(i=0;1<6;i++)
{
value=rand()%32+1;//%32得到0-31,再+1得到1-32
//去重
for(j=0;j<flag;j++)
{
if(value==arr[j])
{
i--;//保证程序执行多次,有效次数执行6次
break;
}
}
}
if(j==flag)//表示之前所有的数都没有重复
{
arr[flag]=value;
flag++;
}
for(i=0;i<6;i++)
{
printf("%d\n",arr[i]);
}
printf("+%d\n",