C的回归基础学习6——函数(临时)

C的回归基础学习6——函数(临时)

前言

编写和调用函数是敲代码的重要步骤。因为函数的存在,让我们能更好的划分问题,将大问题划为小问题,特别是递归的存在,很好的实现了一级一级解决问题的思想。其实函数我早就想讲了,但是想到了有指针和结构体存在就想拖一下咕咕咕

函数的组成

  • 定义: <数据类型> 函数名(形式参数及说明){ 函数体 }
    以下是几种实列
void putout(int *a)
{
	for(int i=1 ; i<=a[0] ; i++)
	printf("%d ",a[i]);
	return ;//void函数结尾的return可要可不要
}

int max(int a,int b)
{
	return a > b ? a : b;
}

float eps=0.0001;
bool compare(float a,float b)//比较a,b在eps的精度下是否相等
{
	float c;
	c = a - b;
	if(c < eps && c > eps) return true;
	return false;
}

函数的递归

  • 一句话概括:自己调用自己,直到达到某一条件不在递归
    下面再给出一个实例
int power(int number,int a)//快速幂
{
	if(a==1) return number;
	int t=power(a/2);
	return a % 2? t * t * number: t * t;
}//求number的a次方

这其实是递归(也是二分)的一个典型例子,为了更快的求number(简称为n)的a次幂,我们可以先求到n的[a/2]次幂,a是奇数就补乘一个n,这样计算机就不用进行a次操作,而是log2n次,而求n的[a/2]次幂便直接调用自己,直到a=1时便直接返回a就完事儿
遍历就是基于这个递归的,汉诺塔就是另外一个典例。
这儿就只给出代码了

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int k=0;
void han(int n,char st,char mid,char en)
{
	if(n==0)
	return ;
	han(n-1,st,en,mid);
	printf("%d from %c to %c\n",n,st,en);
	han(n-1,mid,st,en);
}
int main()
{
	int n;
	scanf("%d",&n);
	k=pow(2,n)-1;
	printf("%d\n",k);
	han(n,'A','B','C');
	return 0;
}

函数与结构体

结构体不仅仅是自己所内涵的变量丰富,它其中居然还可以藏函数!

typedef struct {
	char name[100];
	int age;
	bool sex;
	int times_of_Gu;
	
	void Namein()
	{
		gets(name); 
	}
	void Nameout()
	{
		printf("%s\n",name);
	}
}Member;
Member me;
int main()
{
	me.Namein();
	me.Nameout();
	return 0;
}
//输入:CHarthur
//输出:CHarthur

不过网上说这是c++的特性?(有待考察)反正没怎么用过c的我只能说:C++天下第一!

结语

函数其实还有很多我没学到的东西,但是基本上这些就够用了,因为语言的使用方法只是工具,代码时最重要的还是算法和数据结构。当然也不是说不思进取,就只学这几个,能优化常数咱们就优化常数,毕竟常数大了O(NlogN)的算法也会变成O(N2)的算法呀这可是亲身经历过的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值