函数的定义、写法及使用

前言

对函数的补充

一、 函数分类

系统函数:
是操作系统以函数接口形式提供的一套功能,这些功能:
内存管理、信号处理、文件IO、文件管理、进程管理、进程通信、线程管理、线程同步、网络通信

第三方库函数:
由第三方提供的,一些开源或者收费的代码
MD5 验证
JSON 序列化和反序列化
glog 日志记录

自定义函数:
为了更好地管理代码,减少冗余把代码封装成函数
注意:一个函数尽量控制在50行以内,一个函数一个功能

函数声明:函数声明的目的是为了告诉其他代码该函数的调用格式

二、返回值

返回值类型 函数名(类型1 形参名1,类型2 形参名2,…);
1、C语言中函数名全部小写,用下划线分隔
2、如果不需要参数时,建议写void,不要空着
3、如果不需要返回值,也写void,但是return后不能跟数据

隐式声明:
当调用函数之前没有声明和定义,编译器会猜测函数的格式,参数列表会根据调用时提供的实参(数据)来猜测,返回值会猜测成int类型

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

函数定义:
返回值类型 函数名(类型1 形参名1,类型2 形参名2,…)
{
函数体
return val;
}

函数调用:
函数名(实参1,实参2,…);
注意:返回值会放在调用的位置,可以立即打印显示,或者也可以用变量记录下来

三、练习

1、实现一个函数,判断整数是否是素数,调用该函数显示出100~10000之间的所有素数
2、输入两个日期,计算两个日期之间间隔了多少天
3、实现一个函数,判断整数是否是回文数,调用该函数显示出1亿-10亿之间的所有回文数
4、计算出100的阶乘
5、输入一个整数,显示该整数的补码
练习1代码如下(示例):

#include <stdio.h>
#include <stdbool.h>
bool Is_prime(int num);

int main(int argc,const char* argv[])
{
	for(int i=100;i<1000;i++)
		{
			Is_prime(i) && printf("%d ",i);
		}
}


bool Is_prime(int num)
{
	for(int i=2;i<=num/2;i++)
	{
		if(num%i==0)
			return false;
	}
	return true;
}

练习2代码如下(示例):

#include <stdio.h>
#include <stdlib.h>

int data(int year,int month,int day);
int main(int argc,const char* argv[])
{
	printf("输入第一个日期:");
	int year,month,day;
	scanf("%d-%d-%d",&year,&month,&day);
    int one=data(year,month,day);
	printf("输入第二个日期:");
	scanf("%d-%d-%d",&year,&month,&day);
	int two=data(year,month,day);
		printf("两个日期相隔%d天",abs(one-two));
}
int data(int year,int month,int day)
{
	int sum=0;
	for(int i=1;i<year;i++)
	{
		sum+=365+(i%4==0&&i%100==0||i%400==0);
	}
	for(int i=1;i<month;i++)
	{
		if(i==2)
			sum+=28+(year%4==0&&year%100==0||year%400==0);
		else if(i==4||i==6||i==9||i==11)
			sum+=30;
		else
			sum+=31;
	}
	return sum+=day-1;
}

练习3代码如下(示例):

#include <stdio.h>
#include <stdbool.h>
bool is_hw(int num);
int main(int argc,const char* argv[])
{
	for(int i=100000000;i<=1000000000;i++)
	{
		is_hw(i) && printf("%d ",i);
	}
}
bool is_hw(int num)
{
	int copy,new=0;
	copy=num;
	while(copy)
	{
		new=new*10+(copy%10);
		copy/=10;
	}
	return new==num
}

练习4代码如下(示例):

#include <stdio.h>

int main(int argc,const char* argv[])
{
	char rets[256]={1};
	int cnt=1;//指向结果接下去要进位的下标
	for(int i=2;i<=100;i++)
	{
		char carry=0;//进位
		for(int j=0;j<cnt;j++)
		{
			short num =rets[j]*i+carry;
			rets[j]=num%10;
			carry=num/10;
		}
		while(carry)
		{
			rets[cnt++]=carry%10;
			carry/=10;
		}
	}
	while(cnt--)
	{
		printf("%d",rets[cnt]);
	}
}

练习5代码如下(示例):

#include <stdio.h>

void bm(int num);
int main(int argc,const char* argv[])
{
	printf("输入一个整数:");
	int num;
	scanf("%d",&num);
	bm(num);
}

void bm(int num)
{
	int arr[32]={};
	for(int i=0;i<32;i++)
	{
	   arr[i]=num >>i & 1;
	}
	for(int i=31;i>=0;i--)
	{
		printf("%d",arr[i]);
	}
}

总结

上面的代码仅供参考,也不一定是最精简的,一些变量名命名比较随意,望大家不要模仿。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值