C 练习实例76

题目:

编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n(利用指针函数)

前言

今天在准备复试复习c语言过程中遇到这题,不难,主要是用来复习指针函数,但花了我很多时间,题目指明用的是指针函数,结果几乎所有题解都用的函数指针(无语,题目错了?)
指针函数和函数指针差别

正文

指针函数写法

我觉得此方法写这题挺麻烦的,不过既然题目需要~

double* func(int n, double* s, int t){
	while(t <= n){
		*s = *s + 1.0/t;
		t += 2;
	}
	return s;
}
int main(){
	int n;
	scanf("%d", &n);
	double a = 0.0;
	double* s = &a;
	double* sum = NULL;
	if(n % 2 == 0)
		sum = func(n, s, 2);//偶
	else
		sum = func(n, s, 1);//奇
	printf("%lf\n", *sum);
	return 0;
}

结果测试

2
0.500000
3
1.333333

收获

刚开始我写了如下代码

double* s = NULL;
*s = 0.0;

但是程序无结果,调试就报段错误,最后查阅发现原因。在声明指针后,希望通过*给它背后的存储区赋值,但指针没有指向实际的内存区域,所以报错。
修改后代码如下:

double a = 0.0;
double* s = &a;
//先分配一块内存空间给a,然后让指针指向此内存空间

函数指针写法

毕竟网上都是这么写的,练练这种写法
函数指针详细说明-C语言中文网

double func(int n, int t){
	double s = 0;
	while(t <= n){
		s += 1.0/t;
		t += 2;
	}
	return s;
}
int main(){
	int n;
	scanf("%d", &n);
	double (*p)(int, int);//函数指针声明 
	p = func;//func是函数的名字也是首地址,给p 
	
	double sum;
	if(n % 2 == 0)
		sum = (*p)(n, 2);//这个*p其实和原来函数名字作用一样 
	else
		sum = (*p)(n, 1);
	printf("%lf", sum);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值