習題9-4 查詢書籍
阿新 • • 發佈:2020-10-21
給定n本書的名稱和定價,本題要求編寫程式,查詢並輸出其中定價最高和最低的書的名稱和定價。
輸入格式:
輸入第一行給出正整數n(<10),隨後給出n本書的資訊。每本書在一行中給出書名,即長度不超過30的字串,隨後一行中給出正實數價格。題目保證沒有同樣價格的書。
輸出格式:
在一行中按照“價格, 書名”的格式先後輸出價格最高和最低的書。價格保留2位小數。
輸入樣例:
3
Programming in C
21.5
Programming in VB
18.5
Programming in Delphi
25.0
輸出樣例:
25.00, Programming in Delphi 18.50, Programming in VB
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<math.h> 5 int main() { 6 int n = 0; 7 char a[10][31]; //二維陣列存放書名 8 double b[10]; //存放價格,浮點型 9 int lmax = 0, lmin = 0; //最大值和最小值在陣列中的位置10 double max = 0.0, min = 9999.0; 11 scanf("%d", &n); 12 getchar(); 13 for (int i = 0; i < n; i++) { 14 gets(a[i]); 15 scanf("%lf", &b[i]); 16 getchar(); 17 if (max < b[i]) { 18 max = b[i]; 19 lmax = i; 20 } 21if (min > b[i]) { 22 min = b[i]; 23 lmin = i; 24 } 25 } 26 27 28 /*for (int i = 0; i < n; i++) { 29 printf("%s , %.2lf\n", a[i], b[i]); 30 } 31 printf("\n\n\n\n");*/ 32 char t[31]; 33 strcpy(t, a[lmax]); 34 printf("%.2lf, %s\n", b[lmax], t); 35 strcpy(t, a[lmin]); 36 printf("%.2lf, %s", b[lmin], t); 37 //system("pause"); 38 return 0; 39 }
說說我寫這個題目的思路。
先定義好n,陣列(我這裡用的是2維陣列),還有最大值最小值,,以及最大值最小值的位置(其實可以省略,我比較偷懶,沒有做到最簡)。然後輸入n,輸入書名,輸入價格,迴圈,比較,最後輸出。
需要非常注意的點是:如果輸入書名的時候用的是gets()函式,然後用scanf()函式輸入價格,一定要注意,這裡scanf()後面要加上getchar(),為什麼要加呢?
gets()它的機制是,你鍵盤隨便輸入,我(gets)只看一個鍵,有沒有回車,如果有回車了,好,我就不接受你了,你回車之前的所有的輸入都存在我這裡。
scanf(%d)呢,如果是單獨的一個它,問題不大,輸入一個數,然後空格回車都行,它就會讀進去。
如果scanf()後面還有gets(),問題就來了:大家可以試一試,如果把上述程式碼的getchar()去掉會發生什麼。
中間空了4行是我為了區分清楚故意空的。大家可以看到, 原本應該是輸入6個的,結果輸入了4個就輸出了。
並且輸出的元素中,第一行和第三行是完全正確的,第二行是亂碼。
我們接下來分析問題:我寫了手稿,大家覺得哪個字看不懂給我說,我字太爛啦。
上述,即是沒有getchar()的情況。
希望大家認真分析問題,解決問題。