我的老师要求编写一个程序,使用递归函数打印每个数组元素的功能.
我的代码:
#include <stdio.h>
#include <conio.h>
void pow(int a[10],int i);
main()
{
int a[10],i,c=0;
printf("Enter 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("Power of elements in array:\n");
pow(a,c);
getch();
}
void pow(int a[10],int i)
{
if(i!=10)
{
printf("%d\n",a[i]*a[i]);
pow(a,i+1);
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我没有遇到任何问题.但是,当我将第三行最后一行 pow(a,i+1)更改 pow(a,i++)
为输出时,无数个.
任何人都可以解释一下为什么它最终会像这样?当我将i + 1改为i ++时究竟发生了什么?
先感谢您!
C中有两个增量运算符:例如,其中一个是后缀或后增量运算符
i++
Run Code Online (Sandbox Code Playgroud)
例如,其他是一元运算符或preincrement运算符
++i
Run Code Online (Sandbox Code Playgroud)
postincrement运算符的表达式的值是操作数增加之前的值.因此这个电话
pow(a,i++);
Run Code Online (Sandbox Code Playgroud)
相当于
pow(a,i), i = i + 1;
Run Code Online (Sandbox Code Playgroud)
您可以使用preincrement运算符代替postincrement运算符
pow(a, ++i);
Run Code Online (Sandbox Code Playgroud)
并且您将获得预期的结果,因为运算符的值是其增量后的操作数的值.
考虑到主要应具有返回类型int.
一般情况下你的功能也是错误的.它不能应用于任何数组,因为它使用幻数10.
我会按照以下方式编写函数
void pow( int a[], int n )
{
if ( n > 0 )
{
printf( "%d\n", a[0] * a[0] );
pow( a + 1, n - 1 );
}
}
Run Code Online (Sandbox Code Playgroud)
并称之为
pow( a, 10 );
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它可以与具有不同大小的阵列一起使用.