C++ Primer Plus習題及答案-第四章

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: ”

<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

}