總網頁瀏覽量

2015年10月21日 星期三

[C] 2-3: 迴圈與測試資料讀取 2 - 起手數 Number_of_hands_2.cpp

這個題目基本上和前一題幾乎是一樣的, 唯一不一樣的地方是輸入資料的格式, 每一列的兩個整數資料之後一直到那一列的結尾是一些說明文字 (很多時候輸入資料和撰寫程式是不同的人, 輸入資料可能是用一個編輯器直接編輯檔案, 這個時候如果只有一堆數字, 很容易輸入錯誤, 所以常常在製作資料檔案的時候希望檔案裡有一些額外的說明文字, 可以使得人可以比較輕鬆地檢查資料), 這些說明文字是你的程式需要運用 scanf 的功能 跳過去不要處理的

請撰寫一個程式運用 stdio 函式庫的 scanf 和 printf 函式讀取測試資料並且計算兩數之和、整數除法的商和餘數、浮點數除法的商, 請練習下面的迴圈控制

    scanf(...); // 讀取案例個數至整數變數 n
    for (i=0; i<n; i++)
    {
        ...
    }

請注意:

    下面的測試用範例中, 輸入測試資料的第一列為一個整數 n, 代表接下來有 n 個測試案例
    每一列是一個案例, 包含兩個整數, 請讀入此兩個整數資料並且完成指定的運算, 這兩個數字之後一直到這一列的結束是程式不需要的註解
    請注意觀察輸出測試資料, 程式需要輸出 n 列, 每一列是一個測試案例的測試結果, (假設 a + b = c, a / b = d, a % b = e, a / b = f) 列印的格式是每一列四個數字 c, d, e, f 以逗點和一個空格隔開, 其中 c, d, e 三個整數都列印在 5 格的欄位中, 浮點數 f 列印在 10 格的欄位中, 小數點後印 5 位數字

輸入測試資料:

7↵
73 56 this the first set of data↵
28 27     這是第二組測試案例↵
185 30the third↵
1412 345 )*&^&(^ (*&^↵
210 -75↵
-3123 -4215    both negative↵
-4703 1014↵
輸出測試資料:
  129,     1,    17,    1.30357↵
   55,     1,     1,    1.03704↵
  215,     6,     5,    6.16667↵
 1757,     4,    32,    4.09275↵
  135,    -2,    60,   -2.80000↵
-7338,     0, -3123,    0.74093↵
-3689,    -4,  -647,   -4.63807↵
 
---------------------------------------------------- 
 
#include <stdio.h>
#include <stdlib.h>
int main(void) {

 int n, i, a, b; 
 scanf("%d",&n);
 for(i = 0 ; i < n ; i++){
  scanf("%d %d%*[^\n]",&a,&b);
  int add=0, div=0, mid=0;
  float div2=0.0;
  printf("%5d,%6d,%6d,%11.5f",add = a+b, div = a/b, mid = a%b, div2 = (float)a/b);
   printf("\n");
 }
 return 0;
}


----------------------------------------------------
 
這裡比較特別的式正規表示法,
scanf("%d %d%*[^\n]",&a,&b);
中的 %*[^\n] 表示從前一個輸入之後到換行符號出線為止都不列入input中.

沒有留言:

張貼留言