C++ Primer Plus習題及答案-第四章
習題選自:C++ Primer Plus(第六版)
內容僅供參考,如有錯誤,歡迎指正 !
cin使用空白(空格、製表符和換行符)來確定字串的結束位置(空格、製表符和換行符仍會留在輸入佇列)。(這意味著cin在獲取字元陣列輸入時只讀取一個單詞,讀取該單詞後,cin將該字串放到陣列中,並自動在結尾新增空字元。注意當輸入的是數字的時候,輸入流中會自動忽略空格回車等控制字元。只有當輸入的是字元時,才會保留‘\n’在輸入流中。)
getline()函式每次讀取一行,他透過換行符來確定行尾,但不儲存換行符,在儲存的字串的時候,它用空字元替換換行符(換行符不會留在輸入佇列)。
get()具體工作方式與getline()類似,但get並不在讀取並丟棄換行符,而是將其留在輸入佇列中。(幸運的是get()有另外一種變體,使用不帶任何引數的cin。get()呼叫讀取下一個字元(即使是換行符),因此可以用它來處理換行符)
複習題
1。如何宣告下述資料?
a。 actor是由30個char組成的陣列
b。 betsie是由100個short組成的陣列
c。 chuck是由13個float組成的陣列
d。 dipsea是由64個long double組成的陣列
char
actor[
30
];
short
betsie[
100
];
float
chuck[
13
];
long
double
dipsea[
64
];
2。使用模板類array而不是陣列來完成1的問題。
array
<
char
,30>actor;
array
<
short
,100>betsie;
arry<
float
,
13
>chuck;
array
<
long
double
,64>dipsea;
3。宣告一個包含5個元素的int陣列,並將他們初始化為前5個正奇數。
int
a[
5
]={
1
,
3
,
5
,
7
,
9
};
4。編寫一條語句,將問題3中陣列第一個元素和最後一個元素的和賦值給變數even。
int
a[
5
]={
1
,
3
,
5
,
7
,
9
};
int
even=a[
0
]+a[
4
];
5。編寫一條語句,顯示float陣列ideas中的第二個元素的值。
cout
< 1 ]<< endl ; 6。宣告一個char的陣列,並將其初始化為字串“cheeseburger”。 char a[]= “cheeseburger” ; 7。宣告一個string物件,並將其初始化為字串“Waldorf Salad”。 string a= “Waldorf Salad” ; 8。設計一個描述魚的結構宣告,結構中應當包括品種、重量(整數,單位為盎司)和長度(英寸,包括小數)。 struct fish { char kind[ 20 ]; int weight; float length; } 9。宣告8中定義的結構變數,並對她進行初始化。 fish Xfish= { “xiaoyu” ; 10 ; 20。5 ; } 10。用enum定義一個名為Response的型別,它包含Yes、No和Maybe等列舉量,其中Yes的值為1,No為0,Maybe為2。 enum Response{No,Yes,Maybe}; 11。假設ted是一個double變數,請宣告一個指向ted的指標,並使用該指標來顯示ted的值。 double *p=&ted; cout <<*p<< endl ; 12。假設treacle是一個包含10個元素的float陣列,請宣告一個指向treacle的第一個元素的指標,並使用該指標來顯示陣列的第一元素和最後一個元素。 float *p=treacle; cout < 0 ]<< “ ” < 9 ]<< endl ; //or cout<<*p<<“ ”<<*(p+10) ; 13。編寫一段程式碼,要求使用者輸入一個正整數,然後建立一個動態int陣列,其中包含的元素數目等於使用者的輸入值,首先使用new來完成這項任務,再使用vector物件完成這項任務。 //use new int num; cout << “Please input a positive integer: ” ; cin >>num; int *shu= new int [num]; //use vector int num; cout << “Please input a number: ” ; cin >>num; vector < int >shu(num); 14。下面的程式碼是否有效,如果有效,他將輸出什麼結果。 cout<<(int*)“Home of the jolly bytes”; 有效,輸出該字串的地址。 15。編寫一段程式碼,給問題8中的結構動態分配記憶體,再讀取該結構的成員的值。 fish yu= new fish{xiaoyu, 10 , 20。5 }; cout < endl ; cout < endl ; cout < endl ; 16。程式清單4。6指出了混合輸入數字和一行字串儲存的問題,如果將下面的程式碼: cin。getline(adress,80); 替換為: cin>>address; 將對程式帶來什麼影響? 使用cin>>address 將使得程式跳過空白,直到找到給空白字元為止。然後它將讀取字元,直到再次遇到空白為止。因此,它將跳過數字輸入的換行符,從未避免這種問題。另一方面,它值讀取一個單詞,而不是整行。 17。宣告一個vector物件和一個array物件,他們都包含10個string物件。指出所需的標頭檔案,但不要使用using,使用const來指定要包含的string物件數。 # include # include # include const int str_num= 10 ; std :: vector < std :: string >vstr(str_num); std :: array << std :: string ,str_num>astr; 程式設計練習 1。編寫一個c++程式,如下述輸出示例的那樣請求並顯示資訊: What is your first name? Betty Sue What is your last name? Yewe What letter grade do you deserve? B What is your age? 22 Name:Yewe,Betty Sue Grade:C Age:22 (注意,該程式應該接受的名字包含多個單詞。另外,程式將向下調整成績,即向上調一個字母。假設使用者請求A、B或C,所以不必擔心D和F之間的空檔。) # include # include int main () { using namespace std ; cout << “What your first name? ” ; string first_name; getline( cin ,first_name) ; cout << “What your last name? ” ; string last_name; getline( cin ,last_name); cout << “What letter grade do you deserve? ” ; char my_grade; cin >> my_grade ; cout << “What is you age? ” ; int age; cin >> age ; cout << “Name: ” << last_name << “,” << first_name << endl ; cout << “Grade: ” << ++my_grade<< endl ; cout << “Age: ” << age << endl ; system( “pause” ); return 0 ; } 2。修改程式清單4。4,使用c++string類而不是char陣列。 # include # include int main () { using namespace std ; string name; string dessert; cout << “Enter your name:\n” ; getline( cin , name); // reads through newline cout << “Enter your favorite dessert:\n” ; getline( cin ,dessert); cout << “I have some delicious ” << dessert; cout << “ for you, ” << name << “。\n” ; system( “pause” ); return 0 ; } 3。編寫一個程式,他要求使用者首先輸入其名,然後輸入其姓;然後程式使用一個逗號和一個空格將姓和名組合起來,並存儲和顯示結合效果,請使用char陣列和標頭檔案cstring中的函式。下面是該程式的執行時的情形: Enter your first name: Flip Enter your last name: Fleaming Here‘s the information in a single string: Fleming, Flip # include # include //#pragma warning(disable:4996) //vs2017需要加上這句話,忽略4996警告 const int Strlen = 20 ; int main () { using namespace std ; char first_name[Strlen]; char last_name[Strlen]; char full_name[ 2 * Strlen]; cout << “Enter your first name: ” ; cin 。get(first_name,Strlen)。get(); cout << “Enter your last name:” ; cin 。get(last_name,Strlen)。get(); strcpy (full_name,last_name); strcat (full_name, “, ” ); strcat (full_name, first_name); cout << “Here’s the information in a single string: ” << full_name << endl ; system( “pause” ); return 0 ; } 4。編寫一個程式,他要求使用者首先輸入其名,然後輸入其姓;然後程式使用一個逗號和一個空格將姓和名組合起來,並存儲和顯示結合效果,請使用string物件和檔案string中的函式。下面是該程式的執行時的情形: Enter your first name: Flip Enter your last name: Fleaming Here‘s the information in a single string: Fleming, Flip # include # include int main () { using namespace std ; string first_name; string last_name; string full_name; cout << “Enter your first name: ” ; getline( cin ,first_name); cout << “Enter your last name:” ; getline( cin , last_name); full_name = last_name + “, ” + first_name; cout << “Here’s the information in a single string: ” << full_name << endl ; system( “pause” ); return 0 ; } 5。結構CandyBar包含3個成員。第一個成員儲存了糖塊的品牌;第二個成員儲存糖塊的重量(可以有小數);第三個成員儲存了糖的卡路里含量(整數)。請編寫一個程式,宣告這個結構,建立一個名為snack的CandBar變數,並將其成員分別初始化為“Mocha Munch”、2。3和350。初始化在宣告snack時進行。最後,程式顯示snack變數的內容。 # include # include struct CandyBar { std :: string brand; float weight; int calorie; }; int main () { using namespace std ; CandyBar snack = { “Mocha Munch” , 2。3 , 350 }; cout << “brand: ” << snack。brand << endl ; cout << “weight: ” << snack。weight << endl ; cout << “calorie: ” << snack。calorie << endl ; system( “pause” ); return 0 ; } 6。結構CandyBar包含3個成員,如程式設計練習5所示。請編寫一個程式,建立一個包含3個元素的CandyBar陣列,並將他們初始化為所選擇的值,然後顯示每個結構的內容。 # include # include struct CandyBar { std :: string brand; float weight; int calorie; }; int main () { using namespace std ; CandyBar snack[ 3 ] = { { “Mocha Munch” , 2。3 , 350 }, { “Mocha Munch” , 2。3 , 350 }, { “Mocha Munch” , 2。3 , 350 } }; for ( int i = 0 ; i < 3 ; i++) { cout << “brand: ” << snack[i]。brand << endl ; cout << “weight: ” << snack[i]。weight << endl ; cout << “calorie: ” << snack[i]。calorie << endl ; } system( “pause” ); return 0 ; } 7。William Wingate從事披薩分析服務。對於每個披薩餅,他都需要記錄下列資訊: 披薩餅公司的名稱,可以有多個單片語成。 披薩餅的直徑 披薩餅的重量 請設計一個能夠儲存這些資訊的結構,並編寫一個使用這種結構變數的程式。程式將請求使用者輸入上述資訊,然後顯示這些資訊。請使用cin(或它的方法)和cout。 # include # include struct Pizza { std :: string company; double diameter; double weight; }; int main () { using namespace std ; Pizza pizza; cout << “Please input pizza‘s company: ” ; getline( cin , pizza。company); cout << “Please input pizza’s diameter: ” ; cin >>pizza。diameter; cout << “Please input pizza‘s weight: ” ; cin >> pizza。weight; cout << “Company: ” << pizza。company << endl ; cout << “Diameter: ” < endl ; cout << “Weight: ” << pizza。weight<< endl ; system( “pause” ); return 0 ; } 8。完成程式設計練習7,但使用new來為結構動態分配記憶體,而不是宣告一個結構變數。另外,讓程式在請求輸入披薩名稱之前輸入披薩直徑。 # include # include struct Pizza { std :: string company; double diameter; double weight; }; int main () { using namespace std ; Pizza *p= new Pizza; cout << “Please input p’s diameter: ” ; cin >> p->diameter; cin 。get(); cout << “Please input p‘s company: ” ; getline( cin , p->company); cout << “Please input p’s weight: ” ; cin >>p->weight; cout << “Company: ” << p->company << endl ; cout << “Diameter: ” < endl ; cout << “Weight: ” << p->weight<< endl ; system( “pause” ); return 0 ; } 9。完成程式設計練習6,但使用new來動態分配陣列,而不是宣告一個包含3個元素的CandyBar的陣列。 # include # include struct CandyBar { std :: string brand; double weight; int calorie; }; int main () { using namespace std ; CandyBar *snack = new CandyBar[ 3 ]; for ( int i = 0 ; i < 3 ; i++) snack[i]={ “Mocha Munch” , 2。3 , 350 }; for ( int i = 0 ; i < 3 ; i++) { cout << “brand: ” << snack[i]。brand << endl ; cout << “weight: ” << snack[i]。weight << endl ; cout << “calorie: ” << snack[i]。calorie << endl ; } delete [] snack; system( “pause” ); return 0 ; } 10。編寫一個程式,讓使用者輸入三次40碼跑的成績(如果你願意,也可以讓使用者輸入40米跑的成績),並顯示次數和平均成績。請使用一個array物件來儲存資料(如果編譯器不支援array類,請使用陣列)。 # include # include int main () { using namespace std ; array < double , 3>grade; cout << “Please input your first grade:” ; cin >> grade[ 0 ]; cout << “Please input your second grade:” ; cin >> grade[ 1 ]; cout << “Please input your third grade:” ; cin >> grade[ 2 ]; cout << “Average three times:” << (grade[ 0 ] + grade[ 1 ] + grade[ 2 ]) / 3。0 << endl ; system( “pause” ); return 0 ; }