本次实验的目的是通过使用递归函数和函数重载,进一步熟练动态分配等指针使用方法。实验内容包括以下两个部分。
第一部分是第一题,要求使用递归算法编写一个程序,对于任意给定的实数 X 和整数 k( k>0) ,计算 Xk 。
源程序代码如下:
```C
#include <stdio.h>
double power(double x, int k) {
if(k == 0) {
return 1;
} else if (k > 0) {
return x * power(x, k-1);
} else {
return 1 / power(x, -k);
}
}
int main() {
double x;
int k;
printf("请输入实数X:");
scanf("%lf", &x);
printf("请输入整数k:");
scanf("%d", &k);
double result = power(x, k);
printf("X的k次方为:%lf\n", result);
return 0;
}
```
以上代码定义了一个名为power的递归函数,用于计算任意给定实数x和整数k的x的k次方。在函数内部,使用了递归的方式来实现计算。当k为0时,返回1;当k大于0时,返回x与power(x, k-1)的乘积;当k小于0时,返回1除以power(x, -k)的结果。
在主函数中,首先获取用户输入的x和k的值,然后调用power函数来计算x的k次方,并将结果输出到屏幕上。
第二部分是第二题,要求编写一个程序,实现数组元素的反转。代码如下:
```C
#include <stdio.h>
void reverseArray(int *arr, int n) {
int i, temp;
for(i = 0; i < n/2; i++) {
temp = arr[i];
arr[i] = arr[n-i-1];
arr[n-i-1] = temp;
}
}
int main() {
int n, i;
printf("请输入数组元素个数:");
scanf("%d", &n);
int arr[n];
printf("请输入数组元素:");
for(i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
printf("翻转前数组元素:");
for(i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
reverseArray(arr, n);
printf("\n翻转后数组元素:");
for(i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
以上代码定义了一个名为reverseArray的函数,用于将输入的数组逆序排列。在函数内部,使用了一个循环来交换数组元素的位置,最终实现数组的反转。
在主函数中,首先获取用户输入的数组元素个数n,然后定义一个长度为n的整型数组,并通过循环获取用户输入的数组元素。接着,输出原数组的元素值,并调用reverseArray函数将数组反转。最后,输出翻转后的数组元素值。
通过完成以上两个题目,可以进一步提升对递归函数和函数重载的理解,以及动态分配等指针使用方法。