数组函数调用、strcpy、strcat、strcmp、strlen函数编写———C语言(day11)

首先先来一个练习,编写斐波拉契数列,并输出前几项的值

#include<stdio.h>

int fibo(int n)
{
	int sum = 0;

	if(n == 1 || n == 2)
	{
		sum = 1;	
	}else if(n > 2)
	{
		sum = fibo(n-1) + fibo(n-2);
	}
	return sum;
}

void inputfibo(int *a,int len)
{
	int i = 0;
	for(i = 0;i < len;++i)
	{
		a[i] = fibo(i+1);
	}
}

void printffibo(int *a,int len)
{
	int i = 0;
	for(i = 0;i < len;++i)
	{
		printf("%d ",a[i]);
	}
	putchar('\n');
}

int main(void)
{
	int n;
	printf("Please input one number:");
	scanf("%d",&n);
	int a[n];
	inputfibo(a,n);
	printffibo(a,n);
	return 0;
}

结果如下图所示:
在这里插入图片描述

数组作为函数参数

1.数组元素作为函数实参 — 此时函数的形参 是一个与实参类型相同变量即可

void printInt(int a);
printInt(a[0]); 

2.数组作为函数的形参

void printArray(int a[10]); //此时 形式上看 是数组 
                            //编译器最终 是当做指针变量来看的 
void printArray(int *a); //实际是这样的 

3.一维整型数组作为函数的形参:

a.一个是数组形式
b.数组长度
void printArray(int a[10],int len); //形参 
printArray(a,len); //实参 -(1)数组名,一个是 (2)数组长度 

一维字符型数组:一维字符型数组,做函数形参

void printStr(char s[1000]); //形式上 写成字符数组的形式 
void printStr(char *s); //编译器最终当做指针变量处理

函数调用:
printStr(s); //数组名  
             //注意: 此时不需要传数组长度 ---因为字符串有结束标志 

strcpy实现

void Str_cpy(char *dest,char *src)
{
	for(int i = 0;;++i)
	{
		if(src[i] == 0)
		{
			break;
		}
		dest[i] = src[i];
	}
}

strcat实现

void Str_cat(char *dest,char *src)
{
	int i = 0;
	int j = 0;
	while(src[i])
	{
		++i;
	}

	while(src[i] = dest[j])
	{
		++j;
		++i;
	}
}

strcmp实现

int Str_cmp(char *dest,char *src)
{
	int i = 0;
	while(dest[i] == src[i])
	{
		i++;
	}

	return dest[i] - src[i];
}

strlen实现

long str_len(char *s)
{
	int i = 0;
	while(s[i] != 0)
	{
		++i;
	}
	return i;
}