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