这里不是指输出变量的值,而是变量的地址
第二行输出的是指针p1的值,指针p1的值 = 变量 c 的地址值。
第四行输出的是指针p的值, 指针p的值 = 指针变量 p1 的地址值。
指针p的值就是指针的地址呀
**p不是指针p的值,而是指针指向的地址的值
(15分)
本题要求实现下列函数P(n,x)的计算,其函数定义如下:
函数接口定义:
double P( int n, double x );
其中n是用户传入的非负整数,x是双精度浮点数。函数P返回P(n,x)函数的相应值。题目保证输入输出都在双精度范围内。
裁判测试程序样例:
#include <stdio.h>
double P( int n, double x );
int main()
{
int n;
double x;
scanf("%d %lf", &n, &x);
printf("%.2f\n", P(n,x));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
10 1.7
输出样例:
3.05
答案:
double P( int n, double x ){
double r;
if(n0)
r=1;
else if(n1)
r=x;
else
r=((2*n-1)*P(n-1,x)-(n-1)*P(n-2,x))/n;
return r;
}
本题根据题干要求内容可以直接解答;
不需要考虑如何使用递归。
问题解答:
问题1:为什么在以下代码中,第二行输出的是指针p1的值而不是p1的值,第四行输出的是指针p的值而不是p的值?我认为正确的输出应该是p1和**p,请问我的理解有误吗?
答:是正确的。代码中的第4行p不是一个指向指针的指针,而是一个一级指针,指向变量p1的地址。因此,在输出的时候,需要输出指针p的地址,才能够读取到这个地址中的变量。
问题2:如何实现函数P(n, x)的递归计算?
答:
double P(int n, double x) {
if (n == 0)
return 1;
else if (n == 1)
return x;
else
return ((2 * n - 1) * P(n - 1, x) - (n - 1) * P(n - 2, x))/n;
}
问题3:输入样例为“10 1.7”,是什么格式的输入?
答:输入样例为一个整数和一个浮点数,中间用空格隔开。
问题4:如何通过指针变量p去掉字符串中字母之间的星号?
答:
#include <stdio.h>
#include <string.h>
int main() {
char s[100];
scanf("%s", s);
char *p = &s[0];
for (int i = 0; s[i]; i++)
if (s[i] != '*') {
*p = s[i];
p++;
}
*p = '\0';
printf("%s", s);
return 0;
}