C语言练习题

C语言练习题

  • 梯形法计算定积分
  • 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n, 当输入n为奇数时,调用函数 1/1+1/3+...+1/n(利用指针函数)
  • 将数组元素倒置 ,改错

梯形法计算定积分

按如下函数原型,采用梯形法编程实现(分成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 
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 
#include 
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 }

源码`

#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));
}  

你可能感兴趣的:(C语言,c语言,指针)