/**************************************************************
* Copyright (c) 2013, 西华师范大学计算机学院
* All rights reserved.
* 作 者: 曾舜尧
* 完成日期:2013 年 05 月 12 日
* 工 具:VC6.0
*
* 输入描述:
* 问题描述:写一个定积分的通用函数,分别求sinx,cosx,e^x.
* 程序输出:
* 问题分析:此题写一个通用函数,无非是用一个函数调用fun1,fun2……等,
* 何不就用switch来匹配,再直接调用……
* 算法设计:略
**************************************************************/
#include
#include
#include
#include
/*#define Density 0.00001*/
static double Density=0.0000001;/*定义全局变量 Density(精度)并赋值值*/
int main()
{
void fun1(double a,double b);
void fun2(double a,double b);
void fun3(double a,double b);
int check(int sel,double a,double b);
void info();
int sel;
double a,b;
char ch;
info();
printf("精度默认为0.0000001,是否设置精度(y/n)?:");
scanf("%c",&ch);
if (ch=='y'||ch=='Y')
{
printf("\n请输入您的精度:");
scanf("%lf",&Density);
}
do
{
printf("\n请输入您选择的番号、下线和上线:");
scanf("%d%lf%lf",&sel,&a,&b);
if(check(sel,a,b))
{
switch(sel)
{
case 1:fun1(a,b);break;
case 2:fun2(a,b);break;
case 3:fun3(a,b);break;
//default :printf("输入错误!\n");
}
}
else
{ printf("\n输入有误,请检查后再次输入。。。!\n");}
printf("\n是否继续(y/n):");
ch=' ';/*此处清空ch,以免影响for语句*/
for (;ch!='N'&&ch!='y'&&ch!='Y'&&ch!='n';ch=getchar());
printf("\n");/*为了便于查看*/
}while((ch=='y')||(ch=='Y'));
printf("程序结束!感谢您的光顾!\n");
getch();
system("pause");
return 0;
}
/*sinxdx[0~1]*/
void fun1(double a,double b)
{
double result=0;
for (;a<=b;a+=Density)
result=result+sin(a) * Density;
printf("理论值为:%.2lf\n",result);
return;
}
/*cosxds[0~1]*/
void fun2(double a,double b)
{
double result=0;
for (;a<=b;a+=Density)
result=result+cos(a) * Density;
printf("理论值为:%.2lf\n",result);
return ;
}
/*e^xdx[0~1]*/
void fun3(double a,double b)
{
double result=0;
for (;a
result=result+exp(a);
printf("理论值为:%.2lf\n",result);
return ;
}
int check(int sel,double a,double b)
{
if ((sel==1)||(sel==2)||(sel==3))
{
if(b-a>Density)
return 1;
else
return 0;
}
else
return 0;
}
void info()
{
printf("本程序可以计算下列3个函数的定积分\n");
printf("函数1\t函数2\t函数3\nsinx\tcosx\te^x\n");
printf("示例:\n");
printf("\t计算sinx从0到1的定积分,\n\t输入:1 0 1\n");
printf("注:下限应至少比上限小%.*f\n",Density);
return ;
}