新生練習(一) 題解
阿新 • • 發佈:2019-01-09
Problem A:ASCII碼排序
解題難點:對於字串的多組輸入,要考慮到每組資料輸入之後的回車符,利用getchar()來吸收回車符.
AC程式碼:
#include<stdio.h> int main(void){ char a,b,c; //定義三個字元變數 char temp; //定義一個用於交換的中間變數 while(~scanf("%c%c%c",&a,&b,&c)){ /*輸入格式: 1、C語言格式:while(scanf("%c%c%c",&a,&b,&c)!=EOF) 2、C++格式:while(~scanf("%c%c%c",&a,&b,&c)) */ getchar(); //getchar()用於吸收每組資料的回車符 /*也可以不利用getchar()來吸收回車符 而寫這樣的輸入格式:while(~scanf(" %c%c%c",&a,&b,&c)) 在scanf裡多加一個空格符用於接收每組資料的回車符 */ //因為是按照ASCII碼從小到大排序 //用3個if來確保a>b>c if(a>b){ temp=a; a=b; b=temp; } if(a>c){ temp=a; a=c; c=temp; } if(b>c){ temp=b; b=c; c=temp; } printf("%c %c %c\n",a,b,c); //輸出 } return 0; }
Problem B:求兩點間的距離
解題難點:小數輸出格式
AC程式碼:
#include<stdio.h> #include<math.h> int main(void){ double x1,x2,y1,y2; //定義兩點 /*輸入看清是x1 y1 x2 y2 而不是x1 x2 y1 y2 */ while(scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2)!=EOF){ double x; //利用 math 庫呼叫sqrt()函式對計算資料開根號 x=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); printf("%.2lf\n",x); /*小數格式常考: 結果保留 a 位小數:printf("%.alf\n",x); 當題上未給明a的值要求自行輸入時的輸出格式:printf("%.*lf\n",a,x); */ } return 0; }
Problem C:計算球體積
題目難點:對PI的定義(最好還是按照題上給的提示去定義)
AC程式碼:
#include<stdio.h> #define PI 3.1415927 //精準度更高的定義:#define PI acos(-1.0) int main(void){ double r,v; while(scanf("%lf",&r)!=EOF){ //v=4.0/3*PI*r*r*r; //此處用r*r*r也可用pow(r,3)替換 //注意:若使用pow()函式則需呼叫 math 庫 printf("%.3lf\n",v); } return 0; }