本文约2200字,主要讲了C语言基础之函数,递归,数组作为函数参数以及案例、练习题等。
带你进入C语言的世界,入门C语言,后边将持续更新。可以收藏学习。想了解C语言基础之函数,函数的基本概述,函数的调用关系,函数的一般形式,函数参数和函数的值以及例题等,请点击该处跳转阅读。
本文全干货,新手必备,感谢你的阅读,祝你学有所成,生活愉快!
一、函数的嵌套调用
嵌套定义就是在定义一个函数时,其函数体内又包含另一个函数的完整定义。然而,C语言不能嵌套定义函数,但可以嵌套调用函数,也就是说,在调用一个函数的过程中,又调用另一个函数。
main(){
a();
}
a(){
b();
}
b(){
return;
}
二、递归
在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。C语言的特点之一就在于允许函数的递归调用。
例如:
int f(int x)
{
int y,z;
z=f(y);
return(2*z);
}
案例1:汉诺塔问题
由上面的分析可知:将n个盘子从A座移到C座可以分解为以下3个步骤:
(1) 将A上n-1个盘借助C座先移到B座上。
(2) 把A座上剩下的一个盘移到C座上。
(3) 将n-1个盘从B座借助于A座移到C座上。
#include
main()
{
void hanoi(int n,char one,char two,char three); /* 对hanoi函数的声明 */
int m;
printf("input the number of diskes:");
scanf("%d", &m);
printf("The step to moveing %d diskes:", m);
hanoi(m, 'A', 'B', 'C');
}
void hanoi(int n, char one, char two, char three) /* 定义hanoi函数, 将n个盘从one座借助two座,移到three座 */
{
void move(char x, char y); /* 对move函数的声明 */
if( n==1 )
{
move(one, three);
}
else
{
hanoi(n-1, one, three, two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
void move(char x, char y) /* 定义move函数 */
{
printf("%c-->%c", x, y);
}
三、数组作为函数参数
数组可以作为函数的参数使用,进行数据传送。数组用作函数参数有两种形式。
一种是把数组元素(下标变量)作为实参使用;另一种是把数组名作为函数的形参和实参使用。
1.数组元素作函数实参
数组元素就是下标变量,它与普通变量并无区别。因此它作为函数实参使用与普通变量是完全相同的,在发生函数调用时,把作为实参的数组元素的值传送给形参,实现单向的值传送。
2.数组名作函数参数
用数组名作函数参数与用数组元素作实参有几点不同:
1) 用数组元素作实参时,只要数组类型和函数的形参变量的类型一致,那么作为下标变量的数组元素的类型也和函数形参变量的类型是一致的。因此,并不要求函数的形参也是下标变量。换句话说,对数组元素的处理是按普通变量对待的。
然而,用数组名作函数参数时,则要求形参和相对应的实参都必须是类型相同的数组,都必须有明确的数组说明。当形参和实参二者不一致时,即会发生错误。
2) 在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元。在函数调用时发生的值传送是把实参变量的值赋予形参变量。
在用数组名作函数参数时,不是进行值的传送,即不是把实参数组的每一个元素的值都赋予形参数组的各个元素。
3.数据的传送实现
数组名就是数组的首地址。因此在数组名作函数参数时所进行的传送只是地址的传送,也就是说把实参数组的首地址赋予形参数组名。
形参数组名取得该首地址之后,也就等于有了实在的数组。实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间。
例如:
void test(int b[10]);
void main()
{
int a[10] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
test(a);
putchar('');
}
void test(int b[10])
{
int i = 0;
for( ; i < 5; i++ )
{printf("%d ", b[i]);}}
4.内存数组的存储:
例题2:有一个一维数组score,内放10个学生成绩,求平均成绩(写一个average函数求平均成绩)。
#include
double average(double array[10]); /* 函数声明 */
main()
{
double score[10] = {82, 100, 87.5, 89, 78, 85, 67.5, 92.5, 93, 94}, result;
result = average(score);
printf("average score is %5.2lf", result);
putchar('');
}
double average(double array[10])
{
double result = 0;
int i = 0;
for( i=0; i < 10; i++ )
{
result += array[i];
}
result /= 10;
return result;
}
感谢您的阅读,希望有所收获!会持续更新!