#include <stdio.h>
int main()
{
    int i = 2,N=3,n=1;
    for(;n<=N;n++)
    i = i * i;
    printf("%d", i);
    return 0;
}

一开始脑子中是这么构思的,为了方便,直接把2赋值给i,然后做3轮运算

但是执行语句后,得到运算结果是256。

所以我改了一下程序。

#include <stdio.h>
int main()
{
	int i = 2,N=3,n=1,t;
	t = i;

	for(;n<=N;n++)
	i = t* i;
	printf("%d", i);
	return 0;
}

在for语句中跑了三轮 但是结果并不是2的三次方=8 ; 而是2的4次方=16

不难发现第一次的i=t*1 就已经是2的2次方是4了,所以我们可以让n的初始值为2/或者让n的初始值还是为1 但是for循环的循环条件改为n<=(N-1)

 让我们完善一下这个程序。

#include <stdio.h>
int main()
{
	int i=1, N, n = 2, t, result;
	scanf_s("%d %d", &i,&N);
	t = i;
	for (; n <= N; n++)
	{
		i = t * i;
		result = i;
	}
	
	printf("%d的%d次方是%d",t, N,result);
	return 0;
}

 运行结果没有问题

但是对于1的0次方好像编译不通过