初识函数 & 练习题

函数:function 方法

一段具有某项功能的代码的集合,是C语言中管理代码的最小单位

把代码封装成一个个的函数,是为了方便管理和调用代码。

函数的分类:

标准库函数:

​ C语言标准委员会为C语言以函数形式提供的一些基础的功能,被封装在libc.so库中,使用时需要包含头文件,只需要 函数名(参数) 调用即可。

系统函数:(不是函数)

​ 是操作系统以函数接口形式提供的一些功能,这些功能包括:

​ 内存管理、信号处理、文件IO、文件管理、进程管理、进程通信、线程通信、线程同步、网络通信

第三方库函数:

​ glog 日志记录

​ md5 密码验证

​ JSON 序列化和反序列化

自定义函数:

​ 为了更好的管理代码、减少冗余,把代码封装成函数形式

​ 注意:一个函数尽量不超过50行,一个函数负责一个功能

​ 函数声明:函数声明的目的是为了告诉其他的代码使用者函数的调用形式

​ 返回值类型 函数名(类型1 变量1,类型2 变量2,…);

​ 1、C语言中函数名一般全部小写,用下划线分隔(sum_int)

​ 2、如果不需要参数建议写void,不要空着

​ 3、如果不需要返回值,也写void

​ 隐式声明:当调用函数时没有定义,就会产生隐式声明,编译器会猜测函数的格式,返回值会 猜测成int类型,参数列表会根据调用时提供的参数来猜测。

​ 函数定义:

​ 返回值类型 函数名(类型1 变量1,类型2 变量2,…);

​ {

​ 函数体

​ return val;

​ }

​ 注意:如果定义写在调用之前,函数声明可以省略。

​ 函数调用:

​ 函数名(实参);

​ 返回值放在调用时的位置,可以立即使用,也可以用变量来记录下来

练习:获取10个范围是[100,1000]的随机数

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(int argc,const char* argv[])
{
   
		srand(time(NULL));
		int n;
		for(int i = 0;i < 10;i++)
		{
   
			n = rand() % 901 + 100;
			printf("%d\n",n);
		}
}

运算符优先级:

单目、算数、位、关系、逻辑、三目

函数传参:

  1. 形参变量属于它所在的函数,出了该函数就不能使用了
  2. 实参和形参直接都是以赋值的形式进行数据传递的(值传送)
  3. return 其实是把返回值数据放置到一个公共区域(函数和函数调用者),如果不写return语句,那么该区域中就是一个随机的垃圾数据。
  4. 如果数组作为函数的参数传递时,长度会丢失,需要额外增加一个变量把数组的长度也传递过去。
  5. 函数之间数组的传递是"址传递",函数和函数调用者可以共享数组
值传递:

​ 普通变量单向值传递 函数之间不能共享同名局部变量

址传递:

​ 数组长度会丢失,需要额外增加一个参数传递数组长度,此时该数组就被两个函数共享

​ 返回值:return语句并不是把数据直接传递给调用者,而是把返回值放在一个他们都能访问的公共区域,如果函 数没有return语句,该位置的值就是一个随机的垃圾数据(上上次函数的返回值)

练习:双色球:

​ 6红球:1-33 不重复

​ 1篮球:1-16 不重复

srand(time(NULL));

char red[6] = {
   },cnt = 0,i = 0;
while(cnt < 6)
{
   
    int num = rand() % 33 + 1;
    for(i = 0; i<cnt ;i++)
    {
   
        if(num == red[i])
        {
   
            break;
        }
    }
    if(i == cnt)
    {
   
        red[cnt++] = num;
    }
}

我的垃圾代码

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(int argc,const char* argv[])
{
   
		srand(time(NULL));
		int arr[6] = {
   };
		arr[0] = rand() % 33 + 1;
		int m = 1,cnt = 0;
		while(cnt<6)
		{
   
			arr[m] = rand() % 33 + 1;
			cnt++;
			for(int i = 0;i < m;i++)
			{
   
				if(arr[m
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值