⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 解高次幂方程12.cpp

📁 由于对两次以上的高次函数求解比较不方便 本程序将为你提供便捷
💻 CPP
字号:
#include<math.h>
#include<stdio.h>
#include<conio.h>
#define     NN    3  //设置最高次幂
char ch;  //判别键盘输入字符值,alter()中须传值到主函数中使用
 //double x_min,x_max;
 float  a[NN+1];
 float  fuction(float  x)
  {int i;
   float sum=0;
   for(i=0;i<=NN;i++)
     sum+=a[i]*pow(x,i);
   return    sum;
  }
  
  int check_f (void)
  {char  ch;  int i;
   //clrscr();  ??????????????????
   printf("你输入的方程是:\nf(x)=");
   if(a[0]>0.0001||a[0]<-0.0001)  printf("(%.2f)",a[0]);
   if(a[1]>0.0001||a[1]<-0.0001)  printf("+(%.2f)*x",a[1]);
   for(i=2;i<=NN;i++)
     if(a[i]>0.0001||a[i]<-0.0001)  printf("+(%.2f)*x^%d",a[i],i);
   printf("\n你确认输入正确?(Y/N)");
 label:ch=getch();
       if(ch=='Y'||ch=='y')  return 0;//正确返回 1,只退出当前子程序
       else  if(ch=='N'||ch=='n')  return  1;
       else {printf("please input 'y'(yes) or 'N'(NO)!");goto   label;}
  }
  
  void  alter(void)
   {//用全局ch, 对主函数中是否需退出判断
    int i=-1; //设置初始值,使能进入循环
    printf("do you want to modify?(press 'N' to quit)");
    getch();  //note:接收回车键 ,否则流中的值将赋值给ch,于是将不等待输入就越过
    ch=getchar();
    if(ch=='N'||ch=='n')  return;
    else
      {   while( i<0||i>NN )
            {printf("请输入需要修改的项:(0~~~%d)",NN);scanf("%d",&i); }
          printf("a[%d]:(必须输入实数,不能为字母)",i);
          scanf("\t%f",&a[i]);
      }
   }

int main (void)
  {int i,flag;
//flag=1时,输入的区间是f(min)<0,f(max)>0,flag=0时,输入的区间是f(min)>0,f(max)<0
   float min,max,mid,key,f;
   printf("请输入%d个函数的系数:(即最高次%d次)\n系数的形式为(低次先输入):",NN+1,NN);
   printf("\nf(x)=a[0]+a[1]x+a[2]x^2+....+a[N]x^N\n");
   for(i=0;i<=NN;i++)
     {printf("a[%d]:\t",i);
      scanf("%f",&a[i]);
     }
   if( check_f() )
   {alter();
    if(ch=='N'||ch=='n')  goto quit;}  // 只在输入'n',既不修改时退出
label1:   printf("\n输入解的区间[min,max]\nmin:");
     scanf("%f",&min);
   printf("max:");
     scanf("%f",&max);
  // x_max=max;x_min=min;  //保存方程根所在区间
   if(fuction(min)*fuction(max)>0)
     { printf("此区间不符合要求,请重新"); goto  label1;}
   {if(fuction(min)<0)  flag=1;  else  flag=-1;}
   mid=(min+max)/2;
   f=fuction(mid);
   
   while( f>0.001 || f<-0.001 )  //设置解的精度
     {if((f*flag)>0)  max=mid;
      else       min=mid;
      mid=(min+max)/2;
      f=fuction(mid);}
   key=mid;
   printf("方程的解是:%.3f\n",key);
  quit:return  0;
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -