```c =
//作業六範例//
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
void t1(void);
void t2(void);
void t3(void);
void t4(void);
int main()
{
t1();
//t2();
//t3();
//t4();
}
void t1(void)
{
int i,j;
int ans,t;
float a,b,c,d;
int ymax=0;
int ymin=0;
printf("請輸入a值 : ");
scanf("%f",&a);
printf("請輸入b值 : ");
scanf("%f",&b);
printf("請輸入c值 : ");
scanf("%f",&c);
printf("請輸入d值 : ");
scanf("%f",&d);
printf("方程式 y = %0.3f*x^3 + %0.3f*x^2 + %0.3f*x + %0.3f\n\n",a,b,c,d);
//計算y的範圍
for(i=-30;i<=30;i++)
{
ans = round(a*pow(i,3)+b*pow(i,2)+c*i+d);
if(ans>ymax)
{
ymax = ans;
}
else if(ans<ymin)
{
ymin = ans;
}
else
{
ymax = ymax;
ymin = ymin;
}
}
//印出答案
for(j=ymax;j>=ymin;j--)
{
for(i=-30;i<=30;i++)
{
//方程式答案計算與斜率計算
ans = round(a*pow(i,3)+b*pow(i,2)+c*i+d);
t = round((a*pow(i,3)+b*pow(i,2)+c*i+d)-(a*pow((i-1),3)+b*pow((i-1),2)+c*(i-1)+d));
//列印斜率
if(j==ans)
{
if(t==0)
{
printf(" - ");
}
else if(t<0)
{
printf(" \\ ");
}
else
{
printf(" / ");
}
}
//原點
else if(j==0)
{
if(i==0)
{
printf(" 0 ");
}
else if(i%5==0)
{
printf(" | ");
}
else
{
printf(" - ");
}
}
//y軸上數值
else if(j==1)
{
if(i==0)
{
printf(" | ");
}
else if((i==5))
{
printf(" 5 ");
}
else if((i==-5))
{
printf("-5 ");
}
else if((i%5==0)&&(i<-5))
{
printf("%d",i);
}
else if((i%5==0)&&(i>5))
{
printf(" %d",i);
}
else
{
printf(" ");
}
}
//x軸與x軸上數值
else if(j%5==0)
{
if(i==0)
{
printf(" - ");
}
else if(i==1)
{
printf("%d",j);
}
else
{
printf(" ");
}
}
//y軸
else
{
if(i==0)
{
printf(" | ");
}
else
{
printf(" ");
}
}
}
printf("\n\n");
}
}
void t2(void)
{
int i,j;
int ans,t;
float a,b,c,d;
int ymax=0;
int ymin=0;
float x1,x2;
float y1,y2;
float x_d,y_d;
int k;
printf("請輸入a值 : ");
scanf("%f",&a);
printf("請輸入b值 : ");
scanf("%f",&b);
printf("請輸入c值 : ");
scanf("%f",&c);
printf("請輸入d值 : ");
scanf("%f",&d);
printf("方程式 y = %0.3f*x^3 + %0.3f*x^2 + %0.3f*x + %0.3f\n\n",a,b,c,d);
for(i=-30;i<=30;i++)
{
ans = round(a*pow(i,3)+b*pow(i,2)+c*i+d);
if(ans>ymax)
{
ymax = ans;
}
else if(ans<ymin)
{
ymin = ans;
}
else
{
ymax = ymax;
ymin = ymin;
}
}
printf("請輸入x1值 : ");
scanf("%f",&x1);
printf("請輸入x2值 : ");
scanf("%f",&x2);;
//計算y1&y2的答案與兩者距離
y1 = (a*pow(x1,3)+b*pow(x1,2)+c*x1+d);
y2 = (a*pow(x2,3)+b*pow(x2,2)+c*x2+d);
x_d = x2-x1;
y_d = y2-y1;
for(j=ymax;j>=ymin;j--)
{
for(i=-30;i<=30;i++)
{
ans = round(a*pow(i,3)+b*pow(i,2)+c*i+d);
t = round((a*pow(i,3)+b*pow(i,2)+c*i+d)-(a*pow((i-1),3)+b*pow((i-1),2)+c*(i-1)+d));
//透過解方程式得出直線
k = round((i-x1)/(x_d)*(y_d)+y1);
//列印直線
if(j==k)
{
printf(" + ");
}
else if(j==ans)
{
if(t==0)
{
printf(" - ");
}
else if(t<0)
{
printf(" \\ ");
}
else
{
printf(" / ");
}
}
else if(j==0)
{
if(i==0)
{
printf(" 0 ");
}
else if(i%5==0)
{
printf(" | ");
}
else
{
printf(" - ");
}
}
else if(j==1)
{
if(i==0)
{
printf(" | ");
}
else if((i==5))
{
printf(" 5 ");
}
else if((i==-5))
{
printf("-5 ");
}
else if((i%5==0)&&(i<-5))
{
printf("%d",i);
}
else if((i%5==0)&&(i>5))
{
printf(" %d",i);
}
else
{
printf(" ");
}
}
//列印標註範圍
else if(j%5==0)
{
if(i==0)
{
printf(" - ");
}
else if(i==1)
{
printf("%d",j);
}
else if(i==round(x1))
{
printf(" | ");
}
else if(i==round(x2))
{
printf(" | ");
}
else
{
printf(" ");
}
}
else
{
if(i==0)
{
printf(" | ");
}
else if(i==round(x1))
{
printf(" | ");
}
else if(i==round(x2))
{
printf(" | ");
}
else
{
printf(" ");
}
}
}
printf("\n\n");
}
}
void t3(void)
{
int i,j;
int ans,t;
float a,b,c,d;
int ymax=0;
int ymin=0;
float x1,x2;
float y1,y2;
float x_d,y_d;
float p,o;
int k;
printf("請輸入a值 : ");
scanf("%f",&a);
printf("請輸入b值 : ");
scanf("%f",&b);
printf("請輸入c值 : ");
scanf("%f",&c);
printf("請輸入d值 : ");
scanf("%f",&d);
printf("方程式 y = %0.3f*x^3 + %0.3f*x^2 + %0.3f*x + %0.3f\n\n",a,b,c,d);
for(i=-30;i<=30;i++)
{
ans = round(a*pow(i,3)+b*pow(i,2)+c*i+d);
if(ans>ymax)
{
ymax = ans;
}
else if(ans<ymin)
{
ymin = ans;
}
else
{
ymax = ymax;
ymin = ymin;
}
}
printf("請輸入x1值 : ");
scanf("%f",&x1);
printf("請輸入x2值 : ");
scanf("%f",&x2);;
//計算y1與y2
//計算x間的距離
x_d = (x2-x1>0)? x2-x1 : x1-x2;
y1 = (a*pow(x1,3)+b*pow(x1,2)+c*x1+d);
y2 = (a*pow(x2,3)+b*pow(x2,2)+c*x2+d);
y_d = y2-y1;
y_d = (y2-y1>0)? y2-y1 : y1-y2;
//趨近過程
for(x_d;(x_d>0.1);x_d=x_d/2)
{
y1 = (a*pow(x1,3)+b*pow(x1,2)+c*x1+d);
y2 = (a*pow(x2,3)+b*pow(x2,2)+c*x2+d);
y_d = y2-y1;
y_d = (y2-y1>0)? y2-y1 : y1-y2;
x1 = x1;
x2 = (x1>x2)? x1-x_d : x1+x_d;
}
//斜率與截距
p = (y2-y1)/(x2-x1);
o = y1-p*x1;
printf("x1 = %f\nx2 = %f\ny1 = %f\ny2 = %f\n(x2-x1) = %f\n(y2-y1) = %f\n斜率 = %f\n截距 = %f\n\n",x1,x2,y1,y2,x_d,y_d,p,o);
for(j=ymax;j>=ymin;j--)
{
for(i=-30;i<=30;i++)
{
ans = round(a*pow(i,3)+b*pow(i,2)+c*i+d);
t = round((a*pow(i,3)+b*pow(i,2)+c*i+d)-(a*pow((i-1),3)+b*pow((i-1),2)+c*(i-1)+d));
k = round((i-x1)/(x_d)*(y_d)+y1);
if(j==round(y1)&&i==round(x1))
{
printf(" @ ");
}
else if(j==ans)
{
if(t==0)
{
printf(" - ");
}
else if(t<0)
{
printf(" \\ ");
}
else
{
printf(" / ");
}
}
else if(j==0)
{
if(i==0)
{
printf(" 0 ");
}
else if(i%5==0)
{
printf(" | ");
}
else
{
printf(" - ");
}
}
else if(j==1)
{
if(i==0)
{
printf(" | ");
}
else if((i==5))
{
printf(" 5 ");
}
else if((i==-5))
{
printf("-5 ");
}
else if((i%5==0)&&(i<-5))
{
printf("%d",i);
}
else if((i%5==0)&&(i>5))
{
printf(" %d",i);
}
else
{
printf(" ");
}
}
else if(j%5==0)
{
if(i==0)
{
printf(" - ");
}
else if(i==1)
{
printf("%d",j);
}
else if(i==round(x1))
{
printf(" | ");
}
else if(i==round(x2))
{
printf(" | ");
}
else
{
printf(" ");
}
}
else
{
if(i==0)
{
printf(" | ");
}
else if(i==round(x1))
{
printf(" | ");
}
else if(i==round(x2))
{
printf(" | ");
}
else
{
printf(" ");
}
}
}
printf("\n\n");
}
}
void t4(void)
{
int i,j;
int ans,t;
float a,b,c,d;
int ymax=0;
int ymin=0;
float x1,y1,m,l;
int k;
printf("請輸入a值 : ");
scanf("%f",&a);
printf("請輸入b值 : ");
scanf("%f",&b);
printf("請輸入c值 : ");
scanf("%f",&c);
printf("請輸入d值 : ");
scanf("%f",&d);
printf("方程式 y = %0.3f*x^3 + %0.3f*x^2 + %0.3f*x + %0.3f\n\n",a,b,c,d);
for(i=-30;i<=30;i++)
{
ans = round(a*pow(i,3)+b*pow(i,2)+c*i+d);
if(ans>ymax)
{
ymax = ans;
}
else if(ans<ymin)
{
ymin = ans;
}
else
{
ymax = ymax;
ymin = ymin;
}
}
printf("請輸入x1 : ");
scanf("%f",&x1);
printf("請輸入斜率值 : ");
scanf("%f",&m);
printf("請輸入截距值 : ");
scanf("%f",&l);
y1 = (a*pow(x1,3)+b*pow(x1,2)+c*x1+d);
for(j=ymax;j>=ymin;j--)
{
for(i=-30;i<=30;i++)
{
ans = round(a*pow(i,3)+b*pow(i,2)+c*i+d);
t = round((a*pow(i,3)+b*pow(i,2)+c*i+d)-(a*pow((i-1),3)+b*pow((i-1),2)+c*(i-1)+d));
k = round(i*m+l);
if(j==round(y1)&&i==round(x1))
{
printf(" @ ");
}
else if(j==k)
{
printf(" # ");
}
else if(j==ans)
{
if(t==0)
{
printf(" - ");
}
else if(t<0)
{
printf(" \\ ");
}
else
{
printf(" / ");
}
}
else if(j==0)
{
if(i==0)
{
printf(" 0 ");
}
else if(i%5==0)
{
printf(" | ");
}
else
{
printf(" - ");
}
}
else if(j==1)
{
if(i==0)
{
printf(" | ");
}
else if((i==5))
{
printf(" 5 ");
}
else if((i==-5))
{
printf("-5 ");
}
else if((i%5==0)&&(i<-5))
{
printf("%d",i);
}
else if((i%5==0)&&(i>5))
{
printf(" %d",i);
}
else
{
printf(" ");
}
}
else if(j%5==0)
{
if(i==0)
{
printf(" - ");
}
else if(i==1)
{
printf("%d",j);
}
else if(i==round(x1))
{
printf(" | ");
}
else
{
printf(" ");
}
}
else
{
if(i==0)
{
printf(" | ");
}
else if(i==round(x1))
{
printf(" | ");
}
else
{
printf(" ");
}
}
}
printf("\n\n");
}
}
```