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