C语言 带你理解函数的调用

最近也挺充实的,在学习MYSQL,Java ,数据结构与算法,接触了GitHub啦,也学了git的使用,今后会继续学习的!今天就整理这些啦,晚安,加油加油!

一、函数的调用

(一)函数的递归调用

在调用函数的过程中,直接或间接地调用该函数本身,称为函数的递归调用。

示例

int f(int)
{
int y,z;
z=f(y); //在执行该函数的过程中又调用了该函数
return z;
}

示例:用递归方法求n!

#include <stdio.h> 
int main()
{
	int fac(int x);//函数声明 
	int y; 
	printf("请输入一个数:\n");
	scanf("%d",&y);
	printf("%d!=%d",y,fac(y));//调用函数fac() 
}

int fac(int x)
{
	int f;
	if(x<0)
	printf("error!");
	else if(x==0||x==1)
	f=1;
	else
	f=fac(x-1)*x;
	return f;
	
}

输入0
在这里插入图片描述

输入10
在这里插入图片描述

二、数组

(一)定义数组

1、一维数组的定义:

形如:int a[8]、int b[10] 、int c[3] 由类型、变量名、常量表达式组成。

2、二维数组的定义:

形如:int a[3][4]、int c[5][6]类型、变量名、常量表达式(代表行)、常量表达式(代表列)组成

3、字符数组的定义:

形如:char c[10],char a[5],char[5][2]

(二)数组的引用

1、一维数组的引用

数组名[下标],下标可以是常量、变量、表达式形如:a[1]、a[2*5-8]、c[8]

2、二维数组的引用

数组名[下标][下标],形如:a[5*2][3-1]、c[4][2-1]

3、字符数组的引用

示例:

#include <stdio.h>
int main()
{
	char a[10]={'b','o','y','.'};
	int i;
	for(i=0;i<10;i++)
		printf("%c",a[i]);
	printf("\n");
	return 0; 
}

运行结果
在这里插入图片描述

注意:数组元素可以出现在表达式中也可以被赋值,形如:a[5][1]=b[5*2-6]b[6]

(三)数组的初始化

初始化即在定义数组时同时给各数组元素赋值

1、一维数组的初始化

形如:int a[2]={1,2,5}、int a[10]={1,2,3,4,5,6,7,8,9,10}
int a[5]={1,2}(未赋值部分元素自动设定为0)、int[ ]={1,2,3}(可以省略数组名)

2、二维数组的初始化

按照行,列进行赋值,形如:int a[2][3]={{1,2,3},{4,5,6}}
所有元素放到一个括号,形如:int a[2][3]={1,2,3,4,5,6}
省略,形如:int [ ][3]={1,2,3,4,5,6} (列不能省)
对部分,形如:
int a[2][3]={{1},{2,8}}

1 0 0
2 8 0
未赋值的元素自动设定为0

3、字符数组的初始化

char c[3]={‘b’,‘o’,‘y’};
char c[ ]={‘b’,‘o’,‘y’};

使用字符串常量来初始化字符数组
形如:
char a[ ]={“boy”};(此时,a数组的长度为4,而不是3,因为它包含了一个空字符‘\0’)
char a[3]=“boy”;

4、字符串

‘\0’作为字符串结束的标志

#include <stdio.h>
int main()
{
	int c[10];
	printf("请输入字符串:\n");
	scanf("%s",c);//不是&c,c是数组名
	
	printf("输入的字符串是:\n%s",c);
	return 0;} 
	

结果是:
在这里插入图片描述
输入,输出连续的字符串:

字符串输出的原理是:按字符数组名c找到其数组的第一个元素的地址,然后逐个输出其中的字符,直到遇到‘\0’为止。

在输入字符串boy后,系统会自动在“boy”的后面自动添加‘\0’


#include <stdio.h>
int main()
{
	int str1[10],str2[10],str3[10];
	printf("请输入字符串:\n");
	scanf("%s%s%s",str1,str2,str3);//不是&c,c是数组名
	
	printf("输入的字符串是:\n%s %s %s",str1,str2,str3);
	return 0;
	} 
	

运行结果:
在这里插入图片描述
注意:输入连续的字符串时用空格分隔开

5、8个处理字符串的相关函数

输出一个字符串:puts

#include <stdio.h>
int main() 
{
	char str[10]="boy";
	puts(str);
	return 0;
}

运行结果:
在这里插入图片描述

输入一个字符串:gets

#include <stdio.h>
int main() 
{
	printf("请输入一个字符串:\n");
	char str[10];
	gets(str);
	return 0;
	}

运行结果:
在这里插入图片描述
字符串连接函数:
char str1[10],str2[10];
一般形式为:strcat(str1,str2)

#include <stdio.h>
int main()
{
	char str1[30] = "boy love", str2[] = " me";
	printf("%s", strcat(str1, str2));
	return 0;
}

运行结果:
在这里插入图片描述
字符串复制函数:
char str1[10],str2[10];
一般形式:strcpy(str1,str2)

#include <stdio.h>
int main()
{
	char str1[5], str2[] = "me";
	printf("%s", strcpy(str1, str2));//或写成strcpy(str1,"me")
}

运行结果:
在这里插入图片描述

字符数组要足够大以便容纳复制的字符串
不能直接将一个字符串赋给一个字符数组

字符串比较函数:
char str1[10],str2[10];
一般形式:
strcmp(str1,str2)

比较规则:自左至右逐个字符比较ASCII码值
字符串相同,函数值为0;
字符串1>字符串2,函数值为一个整数;
字符串1<字符串2,函数值为一个负整数;

字符串长度的函数:
char str[10];
一般形式:strlen(str);

#include <stdio.h>
int main()
{
	char str1[ ]="boy";
	printf("%d", strlen(str1));
	return 0;
}

在这里插入图片描述
字符串转换为小写的函数
char str1[5]=“BOY”;
strlwr(str1)

#include <stdio.h>
int main()
{
	char str1[ ]="BOY";
	printf("%s", strlwr(str1));
	return 0;
}

运行结果:
在这里插入图片描述

字符串转换成大写的函数
char str1[5];
一般形式:strupr(str1);

#include <stdio.h>
int main()
{
	char str1[ ]="boy";
	printf("%s", strupr(str1));
	return 0;
}

运行结果:
在这里插入图片描述

注意:在使用字符串处理函数时,应加上#include<string.h>
在Vsual Studio 2019中可不加

二维数组举例

题目:将二维数组a[1][2]的行列元素互换,存到另外的一个二维数组中

如下:

# include <stdio.h>
int main()
{
int a[2][3]={{0,1,2},{2,4,5}};
int b[3][2];
int i,j;
/*输出数组a元素,将a,b数组元素互换*/ 

printf("输出数组a的各元素:\n");
for (i=0;i<2;i++)
{
	for(j=0;j<3;j++)
{
	printf("%5d",a[i][j]);
	b[j][i]=a[i][j]; //a的i赋给b的j ,j=2,i=3
	}
printf("\n");
}

 printf("输出数组b的各元素:\n");
 for(i=0;i<3;i++)
 {
 
	for(j=0;j<2;j++)
 {
	printf("%5d",b[i][j]);
 }	
 printf("\n");
}
return 0;
}

运行结果:
在这里插入图片描述

下一篇数组作为函数参数,变量的存储方式、生存期,指针

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值