C语言练习题

梯形法计算定积分

按如下函数原型,采用梯形法编程实现(分成100个小梯形,再求这100个梯形面积的和),
在积分区间[a,b]内计算函数 y 1 = ∫ a b 1 + x 2 d x y1=\int_a^b 1+x^2 dx y1=ab1+x2dx y 2 = ∫ a b 1 1 + x 2 d x y2=\int_a^b \frac{1}{1+x^2} dx y2=ab1+x21dx的定积分。
其中,指向函数的指针变量f用于接收被积函数的入口地址。
Integral(float (*f)(float), float a, float b);
**输出格式要求:“y1=%f\ny2=%f\n”

代码答案:

#include <stdio.h>
float Fun1(float x);
float Fun2(float x);
float Integral(float (*f)(float), float a, float b);
int main()
{
    float y1, y2;
    y1 = Integral(Fun1, 0.0, 1.0);
    y2 = Integral(Fun2, 0.0, 3.0);
    printf("y1=%f\ny2=%f\n", y1, y2);
    return 0;
}
/*  函数功能:计算函数1+x*x的函数值 */
float Fun1(float x)
{
    return  1 + x * x;
}
/*  函数功能:计算函数x/(1+x*x)的函数值 */
float Fun2(float x)
{
    return x / (1 + x * x);
}
/*    函数功能:用梯形法计算函数的定积分 */
float Integral(float (*f)(float), float a, float b)
{
    float s, h;
    int n = 100, i;
    s = ((*f)(a) + (*f)(b)) / 2;
    h = (b - a) / n;
    for (i = 1; i < n; i++)
    {
        s += (*f)(a + i * h);
    }
    return s * h;
}

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

编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数 求1/1+1/3+…+1/n(要求利用函数指针编程)
程序运行示例1如下:
10
Even=1.141666
程序运行示例2如下:
9
Odd=1.787302

#include <stdio.h>
#include <stdlib.h>
double oushu(int n);
double jishu(int n);
int main()
{
	int n;
	double (*p)(int);
	
	scanf("%d",&n);
	if(n%2==0){
	
		p=oushu;
		double r=(*p)(n);
		printf("Even=%lf\n",r);
	}
	else{
		p=jishu;
		double r=(*p)(n);
		printf("Odd=%lf\n",r);
}
}
double oushu(int n)
{
	double sum=0;
	int i;
	for(i=2;i<=n;i++){
		if(i%2==0)
			sum+=(double)1/i;
	}
	return sum;
}
double jishu(int n)
{
	double sum=0;
	int i;
	for(i=1;i<=n;i++){
		if(i%2!=0)
			sum+=(double)1/i;
	}
	return sum;
}

将数组元素倒置 ,改错

下面程序的功能是将数组元素倒置 ,找出其中的4处错误并改正之。
#include “stdio.h”
#define M 5;
main()
{ int a[M]={1,2,3,4,5};
int i,j,t;
i=0;j=M-1;
while(i)
{
t=
(a+i);
(a+i)=(a+j);
*(a+j)=t;
i++;j++
}
for(i=0;i<M;i++) printf("%d",(a+i));
}

源码`

#include "stdio.h"
#define M 5
main()
{	int a[M]={1,2,3,4,5};
	int i,j,t; 
	i=0;j=M-1;
	while(i<=j)
 	{	
 	    t=*(a+i);
		*(a+i)=*(a+j);
		*(a+j)=t;
		i++;j--;
	}
	for(i=0;i<M;i++) printf("%d",*(a+i));
}  
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值