《c++語言程序設(shè)計》課后答案_第1頁
《c++語言程序設(shè)計》課后答案_第2頁
《c++語言程序設(shè)計》課后答案_第3頁
《c++語言程序設(shè)計》課后答案_第4頁
《c++語言程序設(shè)計》課后答案_第5頁
已閱讀5頁,還剩187頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第一章

概述

i-i簡述計算機程序設(shè)計語言的發(fā)展歷程。

解:

迄今為止計算機程序設(shè)計語言的發(fā)展經(jīng)歷了機器語言、匯編語言、高級語言等階段,C++語

言是一種面向?qū)ο蟮木幊陶Z言,也屬于高級語言。

1-2面向?qū)ο蟮木幊陶Z言有哪些特點?

解:

面向?qū)ο蟮木幊陶Z言與以往各種編程語言有根本的不同,它設(shè)計的出發(fā)點就是為了能更直接

的描述客觀世界中存在的事物以及它們之間的關(guān)系。面向?qū)ο蟮木幊陶Z言將客觀事物看作具

有屬性和行為的對象,通過抽象找出同一類對象的共同屬性(靜態(tài)特征)和行為(動態(tài)特征),

形成類。通過類的繼承與多態(tài)可以很方便地實現(xiàn)代碼重用,大大縮短了軟件開發(fā)周期,并使

得軟件風格統(tǒng)一。因此,面向?qū)ο蟮木幊陶Z言使程序能夠比較直接地反問題域的本來面目,

軟件開發(fā)人員能夠利用人類認識事物所采用的一般思維方法來進行軟件開發(fā)。C++語言是H

前應(yīng)用最廣的面向?qū)ο蟮木幊陶Z言。

1-3什么是結(jié)構(gòu)化程序設(shè)計方法?這種方法有哪些優(yōu)點和缺點?

解:

結(jié)構(gòu)化程序設(shè)計的思路是:白頂向下、逐步求精;其程序結(jié)構(gòu)是按功能劃分為若干個基本模

塊;各模塊之間的關(guān)系盡可能簡單,在功能上相對獨立;每一模塊內(nèi)部均是由順序、選擇和

循環(huán)三種基本結(jié)構(gòu)組成;其模塊化實現(xiàn)的具體方法是使用子程序。結(jié)構(gòu)化程序設(shè)計由于采用

了模塊分解與功能抽象,自頂向下、分而治之的方法,從而有效地將一個較復(fù)雜的程序系統(tǒng)

設(shè)計任務(wù)分解成許多易于控制和處理的子任務(wù),便于開發(fā)和維護。

雖然結(jié)構(gòu)化程序設(shè)計方法具有很多的優(yōu)點,但它仍是一種面向過程的程序設(shè)計方法,它把數(shù)

據(jù)和處理數(shù)據(jù)的過程分離為相互獨立的實體。當數(shù)據(jù)結(jié)構(gòu)改變時,所有相關(guān)的處理過程都要

進行相應(yīng)的修改,每一種相對于老問題的新方法都要帶來額外的開銷,程序的可重用性差。

由于圖形用戶界面的應(yīng)用,程序運行由順序運行演變?yōu)槭录?qū)動,使得軟件使用起來越來越

方便,但開發(fā)起來卻越來越困難,對這種軟件的功能很難用過程來描述和實現(xiàn),使用面向過

程的方法來開發(fā)和維護都將非常困難。

1-4什么是對象?什么是面向?qū)ο蠓椒??這種方法有哪些特點?

解:

從一般意義上講,對象是現(xiàn)實世界中一個實際存在的事物,它可以是有形的,也可以是無形

的。對象是構(gòu)成世界的一個獨立單位,它具有自己的靜態(tài)特征和動態(tài)特征。面向?qū)ο蠓椒ㄖ?/p>

的對象,是系統(tǒng)中用來描述客觀事物的一個實體,它是用來構(gòu)成系統(tǒng)的一個基本單位,由一

組屬性和一組行為構(gòu)成。

面向?qū)ο蟮姆椒▽?shù)據(jù)及對數(shù)據(jù)的操作方法放在一起,作為一個相互依存、不可分離的整體

-對象。對同類型對象抽象出其共性,形成類。類中的大多數(shù)數(shù)據(jù),只能用本類的方法進行

處理。類通過一個簡單的外部接口,與外界發(fā)生關(guān)系,對象與對象之間通過消息進行通訊。

這樣,程序模塊間的關(guān)系更為簡單,程序模塊的獨立性、數(shù)據(jù)的安全性就有了良好的保障。

通過實現(xiàn)繼承與多態(tài)性,還可以大大提高程序的可重用性,使得軟件的開發(fā)和維護都更為方

便。

面向?qū)ο蠓椒ㄋ鶑娬{(diào)的基本原則,就是直接面對客觀存在的事物來進行軟件開發(fā),將人們在

日常生活中習慣的思維方式和表達方式應(yīng)用在軟件開發(fā)中,使軟件開發(fā)從過分專業(yè)化的方

法、規(guī)則和技巧中回到客觀世界,回到人們通常的思維。

1-5什么叫做封

裝?

解:

封裝是面向?qū)ο蠓椒ǖ囊粋€重要原則,就是把對象的屬性和服務(wù)結(jié)合成一個獨立的系統(tǒng)單

位,并盡可能隱蔽對象的內(nèi)部細節(jié)。

1-6面向?qū)ο蟮能浖こ贪男┲饕獌?nèi)容?

解:

面向?qū)ο蟮能浖こ淌敲嫦驅(qū)ο蠓椒ㄔ谲浖こ填I(lǐng)域的全面應(yīng)用,它包括面向?qū)ο蟮姆治?/p>

(00A)、面向?qū)ο蟮脑O(shè)計(00D)、面向?qū)ο蟮木幊蹋∣OP)、面向?qū)ο蟮臏y試(00T)和

面向?qū)ο蟮能浖S護(OOSM)等主要內(nèi)容。

1-7簡述計算機內(nèi)部的信息可分為兒類?

解:

計算機內(nèi)部的信息可以分成控制信息和數(shù)據(jù)信息二大類;控制信息可分為指令和控制字兩

類;數(shù)據(jù)信息可分為數(shù)值信息和非數(shù)值信息兩類。

1-8什么叫二進制?使用二進制有何優(yōu)點和缺點?

解:

二進制是基數(shù)為2,每位的權(quán)是以2為底的鼎的進制,遵循逢二進一原則,基本符號為0

1。采用二進制碼表示信息,有如下幾個優(yōu)點:1.易于物理實現(xiàn);2.二進制數(shù)運算簡單;;嘿

3.機器可靠性高;4.通用性強。其缺點是它表示數(shù)的容量較小,表示同一個數(shù),二進制較其

他進制需要更多的位數(shù)。

1-9請將以下卜進制數(shù)值轉(zhuǎn)換為二進制和十六進制補碼:

(1)2(2)9(3)93

(4)-32(5)65535(6)-1

解:

(1)(2)10=(10)2=(2)16

(2)(9)10=(1001)2=(9)16

(3)(93)10=(1011101)2=(5D)16

(4)(-32)10=(11100000)2=(E0)16

(5)(65535)10=(1111111111111111)2=(FFFF)

16

(6)(-1)10=(1111111111111111)2=(FFFF)16

1-10請將以下數(shù)值轉(zhuǎn)換為十進制:

(1)(1010)2(2)(10001111)2(3)(0101111111000011)

2

(4)(7F)16(5)(2D3E)16(6)(F10E)16

解:

(1)(1010)2=(10)10

(2)(10001111)2=(143)10

(3)(0101111111000011)2=(24515)10

⑷(7F)16=(127)10

(5)(2D3E)16=(11582)10

(6)(F10E)16=(61710)10

簡要比較原碼、反碼、補碼等幾種編碼方法。

解:

原碼:將符號位數(shù)字化為0或1,數(shù)的絕對值與符號一起編碼,即所謂"符號一絕對值表

示"的編碼。

正數(shù)的反碼和補碼與原碼表示相同。

負數(shù)的反碼與原碼有如卜關(guān)系:

符號位相同(仍用1表示),其余各位取反(0變1,1變0)。

補碼由該數(shù)反碼的最末位加1求得。

第二C++簡單程序設(shè)計

2-1C++語言有那些主要特點和優(yōu)點?

解:

C++語言的主要特點表現(xiàn)在兩個方面,一是全面兼容C.二是支持面向?qū)ο蟮姆椒?。C++是

一個更好的C,它保持了C的簡潔、高效、接近匯編語言、具有良好的可讀性和可移植性

等特點,對C的類型系統(tǒng)進行了改革和擴充,因此C++比C更安全,C++的編譯系統(tǒng)能檢

查出更多的類型錯誤。C++語言最重要的特點是支持面向?qū)ο蟆?/p>

2-2下列標識符哪些是合法的?

Program,,Jock,test2,3inl,@mail,A_B_C_D

解:

Program,Jock,test2,A_B_C_D是合法的標識符,其它的不是。

2-3例2.1中每條語句的作用是什么?

#include<iostream.h>

voidmain(void)

{

cout?',Hcllo!\nM;

cout?HWelcometoc++!\n";

解:

#include<iostream.h>//指示編譯器將文件iostream.h中的代碼

//嵌入到該程序中該指令所在的地方

voidmain?!ㄖ骱瘮?shù)名,void表示函數(shù)沒有返回值

{〃函數(shù)體標志

cout?”HeHo!\n”;〃輸出字符串Hello!到標準輸出設(shè)備(顯示器)上。

cout?"Welcometoc++!\n";/腌出字符串WelcometoC-H-!

在屏幕輸出如下:

Hello!

Welcometoc+十!

2-4使用關(guān)鍵字const而不是#define語句的好處有哪些?

解:

const定義的常量是有類型的,所以在使用它們時編譯器可以杳錯;而且,這些變量在調(diào)試

時仍然是可見的。

2-5請寫出C++語句聲明一個常量PL值為3.1416;再聲明一個浮點型變量a,把PI的值

賦給a。

解:

constfloatPI=3.1416;

floata=PI;

2-6在下面的枚舉類型中,Blue的值是多少?

enumCOLOR{WHITE.BLACK=100,RED,BLUE,GREEN=300};

解:

Blue=102

2-7注釋有什么作用?C++中有哪幾種注釋的方法?他們之間有什么區(qū)別?

解:

注釋在程序中的作用是對程序進行注解和說明,以便于閱讀。編譯系統(tǒng)在對源程序進行編譯

時不理會注釋部分,因此注釋對于程序的功能實現(xiàn)不起任何作用。而且由于編譯時忽略注釋

部分,所以注釋內(nèi)容不會增加最終產(chǎn)生的可執(zhí)行程序的大小。適當?shù)厥褂米⑨?,能夠提高?/p>

序的可讀性。在C++中,有兩種給出注釋的方法:一種是延用C語言方法,使用"/*"和"*/"

括起注釋文字。另一種方法是使用"〃",從"〃"開始,直到它所在行的行尾,所有字符都被作

為注釋處理。

2-8什么叫做表達式?x=5+7是一個表達式嗎?它的值是多少?

解:

任何?個用于計算值的公式都可稱為表達式。x=5+7是個表達式,它的值為12。

2-9卜列表達式的值是多少?

1.201/4

2.201%4

3.201/4.0

解:

1.50

2.I

3.50.25

2-10執(zhí)行完下列語句后,a、b、c三個變量的值為多少?

a=30;

b=a++;

c=++a;

解:

a:32;b:30:c:32:

2-11在一個fbr循環(huán)中,可以初始化多個變量嗎?如何實現(xiàn)?

解:

在for循環(huán)設(shè)置條件的第一個”;”前,用,分隔不同的賦值表達式。

例如:

for(x=0,y=10;x<100;x++,y-H-)

2-12執(zhí)行完下列語句后,n的值為多少?

intn;

fbr(n=0;n<100;n++)

解:

n的值為100

2-13寫一條for語句,計數(shù)條件為n從100至I」200,步長為2;然后用while和do...while

語句完成同樣的循環(huán)。

解:

for循環(huán):

fbr(intn=100;n<=200;n+=2);

while循環(huán):

intx=100;

while(n<=200)

n+=2;

do...while循環(huán):

intn=100;

do

{

n+=2;

}while(n<=200);

2-14if(x=3)和if(x==3)這兩條語句的差別是什么?

解:

語句if(x=3)把3賦給x,賦值表達式的值為true,作為if語句的條件;語句if(x==3)首先

判斷x的值是否為3,若相等條件表達式的值為ture,否則為false。

2-15什么叫做作用域?什么叫做局部變量?什么叫做全局變量,如何使用全局變量?

解:

作用域是一個標識符在程序正文中有效的區(qū)域。局部變量,一般來講就是具有塊作用域的變

量;全局變量,就是具有文件作用域的變量。

2-16已知x、y兩個變量,寫一條簡單的if語句,把較小的的值賦給原本值較大的變量。

解:

if(x>y)

x=y;

else//y>x||y==x

y=x;

2-17修改下面這個程序中的錯誤,改正后它的運行結(jié)果是什么?

#include<iostream.h>

voidmain()

inti

intj;

i=10;/*給i賦值

j=20;/*給j賦值*/

cout?Hi+j=?i+j;/*輸出結(jié)果?/

return0;

解:

改正:

#include<iostream.h>

intmain()

(

inti;

intj;

i=10;//給i賦值

j=20;/*給j賦值*/

cout?Hi+j="?i+j;/*輸出結(jié)果*/

return0;

}

程序運行輸出:

i+j=30

2-18編寫一個程序,運行時提示輸入一個數(shù)字,再把這個數(shù)字顯示出來。

解:

源程序:

#include<iostream.h>

intmain()

(

inti;

coutw”請輸入?個數(shù)字:”;

cin?i;

coutw”您輸入?個數(shù)字是"wiwendl;

return0;

}

程序運行輸出:

請輸入一個數(shù)字:5

您輸入?個數(shù)字是5

2-19C++有哪幾種數(shù)據(jù)類型?簡述其值域。編程顯示你使用的計算機中的各種數(shù)據(jù)類型的字

節(jié)數(shù)。

解:

源程序:

//include<iostream.h>

intmain()

{

cout?”Thesizeofanintis:\t\t"?sizeofifint)?”bytes.\nM;

cout?"Thesizeofashortintis:\tn?sizeofifshort)?"bytes.\nM;

cout?"Thesizeofalongintis:\t"?sizeofiflong)?”bytes.\n";

cout?"Thesizeofacharis:\t\tH?sizeof^char)?“bytes.\rT;

cout?nThesizeofafloatis:\t\tM?sizeof(float)?'*bytes.\nH;

cout?"Thesizeofadoubleis:\tM?sizeofifdouble)?”bytes.\nM;

return0;

)

程序運行輸出:

Thesizeofanintis:4bytes.

Thesizeofashortintis:2bytes.

Thesizeofalongintis:4bytes.

Thesizeofacharis:1bytes.

Thesizeofafloatis:4bytes.

Thesizeofadoubleis:8bytes.

2-20打印ASCII碼為32?127的字符。

解:

//include<iostream.h>

intmain()

(

for(inti=32;i<128;i++)

cout?(char)i;

return0;

程序運行輸出:

!"#$%G'()*+,./0123456789:;o?@ABCDEFGHIJKLMNOP_QRSTUVWXYZ[\]A'abcdefghijkl

mnopqrstuvwxyz<|>~s

2-21運行下面的程序,觀察其輸出,與你的設(shè)想是否相同?

#include<iostream.h>

intmain()

(

unsignedintx;

unsignedinty=100;

unsignedintz=50;

x=y-z;

cout?uDifferenceis:"?x;

x=z-y;

cout?"\nNowdifferenceis:"?x?endl;

return0;

解:

程序運行輸出:

Differenceis:50

Nowdifferenceis:4294967246

注意,第:行的輸出并非-50,注意x、y、z的數(shù)據(jù)類型。

2-22運行下面的程序,觀察其輸出,體會i++與++i的差別。

#include<iostream.h>

intmain()

{

intmyAge=39;//initializetwointegers

intyourAgc=39;

cout?nIam:"?myAge?”yearsold.\nu;

cout?"Youarc:"?yourAge?"yearsold\n";

myAge-H-;//postfixincrement

-H-yourAge;//prefixincrement

cout?"Oneyearpasses...\nH;

cout?"Iam:"?myAge?"yearsold.\n";

coutvv"Youare:M?yourAge?Hyearsold\nu;

cout?"Anotheryearpasscs\nn;

cout?"Iam:"?myAge++?”yearsold.\n";

cout?"Youarc:"?-H-yourAgc?”yearsold\nM;

cout?"Let'sprintitagain.\nM;

cout?"Iam:"?myAge?”yearsold.\n";

cout?"Youare:M?yourAge?Hyearsold\nM;

return0;

)

解:

程序運行輸出:

Iam39yearsold

Youare39yearsold

Oneyearpasses

Iam40yearsold

Youare40yearsold

Anotheryearpasses

Iam40yearsold

Youare41yearsold

Lefsprintitagain

Iam41yearsold

Youare41yearsold

2-23什么叫常量?什么叫變量?

解:

所謂常量是指在程序運行的整個過程中其值始終不可改變的量,除了用文字表示常量外,也

可以為常量命名,這就是符號常量;在程序的執(zhí)行過程中其值可以變化的量稱為變量,變量

是需要用名字來標識的。

2-24變量有哪幾種存儲類型?

解:

變量有以下幾種存儲類型:

auto存儲類型:采用堆棧方式分配內(nèi)存空間,屬于一時性存儲,其存儲空間可以被若干變量

多次覆蓋使用;

register存儲類型:存放在通用寄存器中;

extern存儲類型:在所有函數(shù)和程序段中都可引用;

static存儲類型:在內(nèi)存中是以固定地址存放的,在整個程序運行期間都有效。

2-25寫出下列表達式的值:

1.2V3&&6V9

2.!(4<7)

3.!(3>5)||(6<2)

1.true

2.false

3.true

2-26若a=1,b=2,c=3,下列各式的結(jié)果是什么?

1.a|b-c

2.aAb&-c

3.a&b|c

4.a|b&c

解:

1.-1

2.1

3.3

4.3

2-27若a=l,下列各式的結(jié)果是什么?

1.!a|a

2.?a|a

3.aAa

4.a?2

解:

1.1

2.-1

3.0

4.0

2-28編寫一個完整的程序,實現(xiàn)功能:向用戶提問"現(xiàn)在正在下雨嗎?",提示用戶輸入Y

或N?若輸入為Y,顯示“現(xiàn)在正在下雨。";若輸入為N,顯示"現(xiàn)在沒有下雨。";否則繼

續(xù)提問”現(xiàn)在正在下雨嗎?"

解:

源程序:

#include<iostream.h>

^include<stdlib.h>

voidmain()

(

charflag;

whilc(l)

(

cout?”現(xiàn)在正在下雨嗎?(YesorNo):";

cin?flag;

if(toupper(flag)==*Y')

{

cout?”現(xiàn)在正在下雨。

break;

)

if(toupper(flag)=N)

(

cout<V”現(xiàn)在沒有下雨?!?;

break;

程序運行輸出:

現(xiàn)在正在下雨嗎?(YcsorNo):x

現(xiàn)在正在下雨嗎?(YesorNo):l

現(xiàn)在正在下雨嗎?(YcsorNo):q

現(xiàn)在正在下雨嗎?(YesorNo):n

現(xiàn)在沒有下雨。

或:

現(xiàn)在正在下雨嗎?(YesorNo):y

現(xiàn)在正在下雨。

2-29編寫一個完整的程序,運行時向用戶提問”你考試考了多少分?(0700)”,接收輸入

后判斷其等級,顯示出來。規(guī)則如下:

解:

#include<iostream.h>

voidmain()

(

inti,score;

cout<<"你考試考了多少分?((K100):";

cin?score;

if(scorc>100||scorc<0)

cout<<"分數(shù)值必須在0到100之間!

else

{

i=score/10;

switch(i)

(

case10:

case9:

cout?"你的成績?yōu)閮?yōu)!

break;

case8:

cout你的成績?yōu)榱?!”?/p>

break;

case7:

case6:

cout<<"你的成績?yōu)橹校?/p>

break;

default:

cout?”你的成績?yōu)椴睿?/p>

)

}

}

程序運行輸出:

你考試考了多少分?(0~100):85

你的成績?yōu)榱迹?/p>

2-30(1)實現(xiàn)一個簡單的菜單程序,運行時顯示"Menu:A(dd)D(elete)S(ort)Q(uit),Select

one:"提示用戶輸入,A表示增加,D表示刪除,S表示排序,Q表示退出,輸入為A、D、

S時分別提示"數(shù)據(jù)已經(jīng)增加、刪除、排序?!陛斎霝镼時程序結(jié)束。要求使用if...else語

句進行判斷,用break、continue控制程序流程。

解:

//include<iostream.h>

#include<stdlib.h>

voidmain()

(

charchoice,c;

while(l)

{

cout?,fMcnu:A(dd)D(clcte)S(ort)Q(uit),Selectone:'1;

cin?c;

choice=touppcr(c);

if(choice=,A,)

(

coutvv”數(shù)據(jù)已經(jīng)增加.”vvendl;

continue;

}

elseif(choice==*D*)

{

cout?”數(shù)據(jù)已經(jīng)刪除.”<<endl;

continue;

)

elseif(choice='S')

(

coutvv”數(shù)據(jù)已經(jīng)排序."vvendl;

continue;

)

elseif(choice=='Q')

break;

}

)

程序運行輸出:

Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:a

數(shù)據(jù)已經(jīng)增加.

Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:d

數(shù)據(jù)已經(jīng)刪除.

Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:s

數(shù)據(jù)已經(jīng)排序.

Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:q

(2)實現(xiàn),個簡單的菜單程序,運行時顯示"Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:"

提示用戶輸入,A表示增加,D表示刪除,S表示排序,Q表示退出,輸入為A、D、S時

分別提示"數(shù)據(jù)已經(jīng)增加、刪除、排序?!陛斎霝镼時程序結(jié)束。要求使用Switch語句。

解:

源程序:

#include<iostream.h>

#include<stdlib.h>

voidmain()

(

charchoice;

while(l)

{

cout?,fMcnu:A(dd)D(clcte)S(ort)Q(uit),Selectone:'1;

cin?choice;

switch(touppcr(choice))

{

case'A':

coutw”數(shù)據(jù)已經(jīng)增加.”wendl;

break;

case*D':

cout?”數(shù)據(jù)已經(jīng)刪除."wendl;

break;

caseS':

cout?”數(shù)據(jù)已經(jīng)排序.”《endl;

break;

case*Q':

cxit(O);

break;

default:

>

)

(

}

程序運行輸出:

Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:a

數(shù)據(jù)已經(jīng)增加.

Menu:A(dd)D(clcte)S(ort)Q(uit),Selectone:d

數(shù)據(jù)已經(jīng)刪除.

Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:s

數(shù)據(jù)已經(jīng)排序.

Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:q

2-31用窮舉法找出1~100間的質(zhì)數(shù),顯示出來。分別使用while,do-whilc,for循環(huán)語句實

現(xiàn)。

解:

源程序:

使用while循環(huán)語句:

//include<iostream.h>

#include<math.h>

voidmain。

(

intij,k,flag;

i=2;

while(i<=100)

(

flag=1;

k=sqrt(i);

j=2;

while(j<=k)

|

if(i%j==0)

(

flag=0;

break;

}

}

if(flag)

cout?i?”是質(zhì)數(shù).”《endl;

i++;

使用do...while循環(huán)語句:

#include<iostream.h>

#include<math.h>

voidmain()

{

intij,k,flag;

i=2;

do{

flag=1;

k=sqrt(i);

j=2;

do{

if(i%j==0)

{

flag=0;

break;

j++;

{while(j<=k);

if(flag)

cout?i?”是質(zhì)數(shù)vvendl;

i++;

}whilc(i<=100);

}

使用for循環(huán)語句:

#include<iostrcam.h>

#include<math.h>

voidmain()

(

intij,k,flag;

fbr(i=2;i<=100;i++)

|

flag=1;

k=sqrt(i);

fbr(j=2;j<=k;j++)

(

if(i%j=O)

(

flag=0;

break;

)

)

if(flag)

cout?i?"是質(zhì)數(shù)vvendl;

程序運行輸

2是質(zhì)數(shù).

3是質(zhì)數(shù).

5是質(zhì)數(shù).

7是質(zhì)數(shù).

11是質(zhì)數(shù).

13是質(zhì)數(shù).

17是質(zhì)數(shù).

19是質(zhì)數(shù).

23是質(zhì)數(shù).

29是質(zhì)數(shù).

31是質(zhì)數(shù).

37是質(zhì)

數(shù).

41是質(zhì)

數(shù).

43是質(zhì)

數(shù).

47是質(zhì)

數(shù).

53是質(zhì)

數(shù).

59是質(zhì)

數(shù).

61是質(zhì)

數(shù).

67是質(zhì)

數(shù).

獨混廄較Break語句與Continue語句的不同用法。

數(shù).

73是質(zhì)

跟e提廉程序從循環(huán)體和switch語句內(nèi)跳出,繼續(xù)執(zhí)行邏輯上的卜一條語句,不能用在別處;

數(shù)ntinue語句結(jié)束本次循環(huán),接著開始判斷決定是否繼續(xù)執(zhí)行下一次循環(huán);

83是質(zhì)

數(shù).

89是質(zhì)

麴3定義一個表示時間的結(jié)構(gòu)體,可以精確表示年、月、日、小時、分、秒;提示用戶輸

只眼離3、日、小時、分、秒的值,然后完整地顯示出來。

數(shù).

解:

源程序見"實驗指導(dǎo)"部分實驗二

2-34在程序中定義一個整型變量,賦以1700的值,要求用戶猜這個數(shù),比較兩個數(shù)的大

小,把結(jié)果提示給用戶,直到猜對為止。分別使用while、do...while語句實現(xiàn)循環(huán)。

解:

//使用while語句

#include<iostream.h>

voidmain(){

intn=18;

intm=0;

while(m!=n)

|

cout?”請猜這個數(shù)的值為多少?(0—100):";

cin?m;

if(n>m)

coutw"你猜的值太小了!”《endl;

elseif(n<m)

cout?”你猜的值太大了!"wendl;

else

cout?”你猜對了!',?endl;

)

)

〃使用do...while語句

#include<iostream.h>

voidmain(){

intn=18;

intm=0;

do{

coutw”請猜這個數(shù)的值為多少?(0—100):";

cin?m;

if(n>m)

cout<v"你猜的值太小了!"<vendl;

elseif(n<m)

cout?”你猜的值太大了!”《endl;

else

cout<<"你猜對了!"wendl;

}while(n!=m);

程序運行輸出:

請猜這個數(shù)的值為多少?(0??100):50

你猜的值太大了!

請猜這個數(shù)的值為多少?(0—100):25

你猜的值太大了!

請猜這個數(shù)的值為多少?(0700):10

你猜的值太小了!

請猜這個數(shù)的值為多少?(0—100):15

你猜的值太小了!

請猜這個數(shù)的值為多少?(0—100):18

你猜對了!

2-35定義枚舉類型weekday,包括Sunday到Saturday七個元素在程序中定義weekday類型

的變量,對其賦值,定義整型變量,看看能否對其賦weekday類型的值。

解:

#include<iostrcam.h>

enumweekday

(

Sunday,

Monday,

Tuesday,

Wednesday,

Thursday,

Friday,

Saturday

};

voidmain()

(

inti;

weekdayd=Thursday;

cout?"d="?d?endl;

i=d;

cout?=n?i?endl;

d=(weekday)6;

cout?"d=H?d?endl;

d=weekday(4);

cout?"d=11?d?cndl;

}

程序運行輸出:

d=4

i=4

d=6

d=4

第三章函數(shù)

3-1C++中的函數(shù)是什么?什么叫主調(diào)函數(shù),什么叫被調(diào)函數(shù),二者之間有什么關(guān)系?如何

調(diào)用一個函數(shù)?

解:

?個較為復(fù)雜的系統(tǒng)往往需要劃分為若干子系統(tǒng),高級語言中的子程序就是用來實現(xiàn)這種模

塊劃分的。c和C++語言中的子程序就體現(xiàn)為函數(shù)。調(diào)用其它函數(shù)的函數(shù)被稱為主調(diào)函數(shù),

被其它函數(shù)調(diào)用的函數(shù)稱為被調(diào)函數(shù)。?個函數(shù)很可能既調(diào)用別的函數(shù)乂被另外的函數(shù)調(diào)

用,這樣它可能在某一個調(diào)用與被調(diào)用關(guān)系中充當主調(diào)函數(shù),而在另一個調(diào)用與被調(diào)用關(guān)系

中充當被調(diào)函數(shù)。

調(diào)用函數(shù)之前先要聲明函數(shù)原型。按如下形式聲明:

類型標識符被調(diào)函數(shù)名(含類型說明的形參表);

聲明了函數(shù)原型之后,便可以按如下形式調(diào)用子函數(shù):

函數(shù)名(實參列表)

3-2觀察下面程序的運行輸出,與你設(shè)想的有何不同?仔細體會引用的用法。

源程序:

#include<iostream.h>

intmain()

intintOne;

int&rSomeRef=intOne;

intOne=5;

cout?nintOne:\t\tH?intOne?endl;

cout?urSomeRef:\tM?rSomeRef?endl;

intintTwo=8;

rSomeRef=intTwo;//notwhatyouthink!

cout?"\nintOnc:\t\tn?intOne?cndl;

cout?nintTwo:\t\tu?intTwo?endl;

cout?"rSomcRcfAt"?rSomeRef?endl;

return0;

}

程序運行輸出:

intOne:5

rSomeRef:5

intOne:8

intTwo:8

rSomeRef:8

3-3比較值調(diào)用和引用調(diào)用的相同點與不同點。

解:

值調(diào)用是指當發(fā)生函數(shù)調(diào)用時,給形參分配內(nèi)存空間,并用實參來初始化形參(直接將實參

的值傳遞給形參)。這一過程是參數(shù)值的單向傳遞過程,一旦形參獲得了值便與實參脫離關(guān)

系,此后無論形參發(fā)生了怎樣的改變,都不會影響到實參。

引用調(diào)用將引用作為形參,在執(zhí)行主調(diào)函數(shù)中的調(diào)用語句時,系統(tǒng)自動用實參來初始化形參。

這樣形參就成為實參的一個別名,對形參的任何操作也就直接作用于實參。

3-4什么叫內(nèi)聯(lián)函數(shù)?它有哪些特點?

解:

定義時使用關(guān)鍵字inline的函數(shù)叫做內(nèi)聯(lián)函數(shù);

編譯器在編譯時在調(diào)用處用函數(shù)體進行替換,節(jié)省了參數(shù)傳遞、控制轉(zhuǎn)移等開銷;

內(nèi)聯(lián)函數(shù)體內(nèi)不能有循環(huán)語句和switch語句;

內(nèi)聯(lián)函數(shù)的定義必須出現(xiàn)在內(nèi)聯(lián)函數(shù)第一次被調(diào)用之前;

對內(nèi)聯(lián)函數(shù)不能進行異常接口聲明;

3-5函數(shù)原型中的參數(shù)名與函數(shù)定義中的參數(shù)名以及函數(shù)調(diào)用中的參數(shù)名必須一致嗎?

解:

不必一致,所有的參數(shù)是根據(jù)位置和類型而不是名字來區(qū)分的。

3-6重載函數(shù)時通過什么來區(qū)分?

解:

重載的函數(shù)的函數(shù)名是相同的,但它們的參數(shù)的個數(shù)和數(shù)據(jù)類型不同,編譯器根據(jù)實參和形

參的類型及個數(shù)的最佳匹配,自動確定調(diào)用哪一個函數(shù)。

3-7編寫函數(shù),參數(shù)為兩個unsignedshortint型數(shù),返回值為第一個參數(shù)除以第二個參數(shù)的

結(jié)果,數(shù)據(jù)類型為shortint;如果第二個參數(shù)為0,則返回值為-1。在主程序中實現(xiàn)輸入輸

出。

解:

源程序:

/include<iostream.h>

shortintDividcr(unsigncdshortinta,unsignedshortintb)

|

if(b==0)

return-1;

else

returna/b;

)

typedefunsignedshortintUSHORT;

typedefunsignedlongintULONG;

intmain()

{

USHORTone,two;

shortintanswer;

cout?"Entertwonumbers.\nNumberone:

cin?one;

cout?"Numbertwo:

cin?two;

answer=Dividcr(onc,two);

if(answer>>1)

cout?"Answer:"?answer;

else

cout?"Error,can*tdividebyzero!";

return0;

)

程序運行輸出:

Entertwonumbers.

Numberone:8

Numbertwo:2

Answer:4

3-8編寫函數(shù)把華氏溫度轉(zhuǎn)換為攝氏溫度,公式為:C=(F-32)*5/9;在主程序中提示用戶

輸入一個華氏溫度,轉(zhuǎn)化后輸出相應(yīng)的攝氏溫度。

解:

源程序見"實驗指導(dǎo)"部分實驗三

3-9編寫函數(shù)判斷一個數(shù)是否是質(zhì)數(shù),在主程序中實現(xiàn)輸入、輸出。

解:

#includc<iostrcam.h>

#include<math.h>

intprime(inti);〃判一個數(shù)是否是質(zhì)數(shù)的函數(shù)

voidmain()

{

inti;

COUt<V”請輸入一個整數(shù):”;

cin?i;

if(prime(i))

cout?i?”是質(zhì)數(shù)wendl;

else

cout?i?”不是質(zhì)數(shù)《endl;

}

intprimc(inti)

|

intj,k,flag;

flag=1;

k=sqrt(i);

fbr(j=2;j<=k;j++)

{

if(i%j=0)

(

flag=0;

break;

)

)

if(flag)

return1;

else

return0;

}

程序運行輸出:

請輸入一個整數(shù):1151

1151是質(zhì)數(shù).

3-10編寫函數(shù)求兩個整數(shù)的最大公約數(shù)和最小公倍數(shù)。

解:

源程序:

#include<iostream.h>

#include<math.h>

intfhl(inti,intj);//求最大公約數(shù)的函數(shù)

voidmain()

{

intij,x,y;

coutvv”請輸入一個正整數(shù):”;

cin?i;

coutvv”請輸入另一個正整數(shù):”;

cin?j;

x=fol(ij);

y=i*j/x;

cout?i?“和"v<j<<”的最大公約數(shù)是:"<<x?endl;

cout?i?"flI"?jw”的最小公倍數(shù)是:M?y?endl;

)

intfhl(inti,intj)

{

inttemp;

if(ivj)

(

temp=i;

i=j;

j=i;

}

while(j!=0)

{

temp=i%j;

i=j;

j=temp;

)

returni;

}

程序運行輸出:

請輸入一個正整數(shù):120

請輸入另一個正整數(shù):72

120和72的最大公約數(shù)是:24

120和72的最小公倍數(shù)是:360

3-11什么叫作嵌套調(diào)用?什么叫作遞歸調(diào)用?

解:

函數(shù)允許嵌套調(diào)用,如果函數(shù)1調(diào)用了函數(shù)2,函數(shù)2再調(diào)用函數(shù)3,便形成了函數(shù)的嵌套

調(diào)用。

函數(shù)可以直接或間接地調(diào)用自身,稱為遞歸調(diào)用。

3-12在主程序中提示輸入整數(shù)儲編寫函數(shù)用遞歸的方法求1+2+...+n的值。

解:

#include<iostream.h>

#include<math.h>

intfhl(inti);

voidmain()

{

inti;

COUtVV”請輸入一個正整數(shù):”;

cin?i;

cout<<”從1累力口至心《ivv”的和為:M?fiil(i)?endl;

)

intfnl(inti)

(

if(i=1)

returnI;

else

returni+fhl(i-1);

)

程序運行輸出:

請輸入?個正整數(shù):100

從1累加到100的和為:5050

3-13編寫遞歸函數(shù)GetPower(intx,inty)計算x的y次累,在主程序中實現(xiàn)輸入輸出。

解:

源程序:

//include<iostream.h>

longGetPower(intx,inty);

intmain()

(

intnumber,power;

longanswer;

cout?"Enteranumber:

cin?number;

cout?"Towhatpower?

cin?power;

answer=GetPowcr(numbcr,power);

cout?number?”tothe"?power?"thpoweris"?answer?endl;

return0;

}

longGetPower(intx,inty)

(

if(y=1)

returnx;

else

return(x*GctPowcr(x,y-1));

}

程序運行輸出:

Enteranumber:3

Towhatpower?4

3tothe4thpoweris81

3-14用遞歸的方法編寫函數(shù)求Fibonacci級數(shù),公式為fib(n)=fib(n-l)+fib(n-2),n>2;

fib(l)=fib(2)=1;觀察遞歸調(diào)用的過程。

解:

源程序見”實驗指導(dǎo)”部分實驗三

3-15用遞歸的方法編寫函數(shù)求n階勒讓德多項式的值,在主程序中實現(xiàn)輸入、輸出;

解:

#include<iostream.h>

floatp(intn,intx);

voidmain()

intn,x;

coutvv”請輸入正整數(shù)n:

cin?n;

coutw”請輸入正整數(shù)x:

cin?x;

cout?nn=n?n?endl;

cout?”x=H?x?endl;

cout?UPU?n?n(H?x?n)=n?p(n,x)?endl;

)

floatp(intn,intx)

(

if(n==0)

return1;

elseif(n==1)

returnx;

else

return((2*n-l)*x*p(n-l,x)-(n-l)*p(n-2,x))/n;

}

程序運行輸出:

請輸入正整數(shù)n:1

請輸入正整數(shù)x:2

n=1

x=2

Pl(2)=2

請輸入正整數(shù)n:3

請輸入正整數(shù)x:4

n=3

x=4

P3(4)=154

3-16使用模板函數(shù)實現(xiàn)Swap(x,y),函數(shù)功能為交換x、y的值。

解:

源程序:

#include<iostream.h>

template<typenameT>voidswap(T&x,T&y)

Tz;

x=y;

y=z;

)

voidmain()

{

intj=1,k=2;

doublev=3.0,w=4.0;

cout?nj="<<j?uk=n?k?cndl;

cout?”v="?v?"w="?w?endl;

swap。,k);//int

swap(v,w);//double

cout?"Afterswap:"?cndl;

cout?"j=n<<j?Mk="?k?endl;

cout?"v=''?v?Mw="?w?cndl;

}

程序運行輸出:

j=1k=2

v=3.14w=4.35

Afterswap:

j=2k=l

v=4.35w=3.14

第四類

4-1解釋public和private的作用,公有類型成員與私有類型成員有些什么區(qū)別?

解:

公有類型成員用public關(guān)鍵字聲明,公有類型定義了類的外部接口;私有類型的成員用

private關(guān)鍵字聲明,只允許本類的函數(shù)成員來訪問,而類外部的任何訪問都是非法的,這樣,

私有的成員就整個隱蔽在類中,在類的外部根本就無法看到,實現(xiàn)了訪問權(quán)限的有效控制。

4-2protected關(guān)鍵字有何作用?

解:

protected用來聲明保護類型的成員,保護類型的性質(zhì)和私有類型的性質(zhì)相似,其差別在于繼

承和派生時派生類的成員函數(shù)可以訪問基類的保護成員。

4-3構(gòu)造函數(shù)和析構(gòu)函數(shù)有什么作用?

解:

構(gòu)造函數(shù)的作用就是在對象被創(chuàng)建時利用特定的值構(gòu)造對象,將對象初始化為一個特定的狀

態(tài),使此對象具有區(qū)別于彼對象的特征,完成的就是是一個從一般到具體的過程,構(gòu)造函數(shù)

在對象創(chuàng)建的時候由系統(tǒng)自動調(diào)用。

析構(gòu)函數(shù)與構(gòu)造函數(shù)的作用幾乎正好相反,它是用來完成對象被刪除前的一些清理工作,也

就是專門作掃尾工作的。一般情況下,析構(gòu)函數(shù)是在對象的生存期即將結(jié)束的時刻由系統(tǒng)自

動調(diào)用的,它的調(diào)用完成之后,對象也就消失了,相應(yīng)的內(nèi)存空間也被釋放。

4-4數(shù)據(jù)成員可以為公有的嗎?成員函數(shù)可以為私有的嗎?

解:

可以,:者都是合法的。數(shù)據(jù)成員和成員函數(shù)都可以為公有或私有的。但數(shù)據(jù)成員最好定義

為私有的。

4-5已知classA中有數(shù)據(jù)成員inta,如果定義了A的兩個對象Al、A2,它們各自的數(shù)

據(jù)

成員a的值可以不同嗎?

解:

可以,類的每一個對象都有自己的數(shù)據(jù)成員。

4-6什么叫做拷貝構(gòu)造函數(shù)?拷貝構(gòu)造函數(shù)何時被調(diào)用?

解:

拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),具有?般構(gòu)造函數(shù)的所有特性,其形參是本類的對象

的引用,其作用是使用一個已經(jīng)存在的對象,去初始化一個新的同類的對象。在以下三種情

況下會被調(diào)用:在當用類的一個對象去初始化該類的另一個對象時;如果函數(shù)的形參是類對

象,調(diào)用函數(shù)進行形參和實參結(jié)合時;如果函數(shù)的返回值是類對象,函數(shù)調(diào)用完成返回時;

4-7拷貝構(gòu)造函數(shù)與賦值運算符(=)有何不同?

解:

賦值運算符(=)作用于一個已存在的對象;而拷貝構(gòu)造函數(shù)會創(chuàng)建一個新的對象。

4-8定義一個Dog類,包含的age、weight等屬性,以及對這些屬性操作的方法。實現(xiàn)并測

試這個類。

解:

源程序:

#include<iostream.h>

classDog

{

public:

Dog(intinitialAge=0,intinitialWcight=5);

?Dog();

intGetAge(){returnitsAge;}//inline!

voidSetAge(intage){itsAge=age;}//inline!

intGetWcight(){returnitsWcight;}//inline!

voidSetWeight(intweight){itsAge=weight;}//inline!

private:

intitsAge,itsWeight;

};

Dog::Dog(intinitialAge,intinitialweight)

(

itsAge=initialAge;

itsWeight=initialweight;

)

Dog::?Dog()//destructor,takesnoaction

intmain()

{

DogJack(2,10);

cout?"JackisaDogwhoisn;

cout?Jack.GctAge()?”yearsoldand";

cout?Jack.GetWeight()?“poundsweightAn";

Jack.SctAgc⑺;

Jack.SetWeight(20);

cout?"NowJackisM;

cout?Jack.GctAgc()?"yearsoldand',;

cout?Jack.GetWeight()?”poundsweight.*';

return0;

)

程序運行輸出:

JackisaDogwhois2yearsoldand10poundsweight.

NowJackis7yearsold20poundsweight.

4-9設(shè)計并測試一個名為Rectangle的矩形類,其屬性為矩形的左下角與右上角兩個點的坐

標,能計算矩形的面積。

解:

源程序:

#include<iostream.h>

classRectangle

(

public:

Rectangle(inttop,intleft,intbottom,intright);

-Rectangle(){}

intGetTopOconstjreturnitsTop;}

intGetLeft()const{returnitsLeft;}

intGetBottom()const{returnitsBottom;}

intGetRight()const{returnitsRight;}

voidSetTop(inttop){itsTop=top;}

voidSetLcft(intleft){itsLcft=left;}

voidSetBottom(intbottom){itsBottom=bottom;}

voidSctRight(intright){itsRight=right;}

intGctArca()const;

private:

intitsTop;

intitsLcft;

intitsBottom;

intitsRight;

};

Rectangle::RcctangIc(inttop,intleft,intbottom,intright)

itsTop=top;

itsLcft=left;

itsBottom=bottom;

itsRight=right;

}

intRectangle::GetArea()const

(

intWidth=itsRight-itsLeft;

intHeight=itsTop-itsBottom;

return(Width*Height);

)

intmain()

(

RectangleMyRectangle(100,20,50,80);

intArea=MyRcctangle.GctArca();

cout?HArea:M?Area?”\n”;

return0;

)

程序運行輸出:

Area:3000

UpperLeftXCoordinate:20

4-10設(shè)計一個用于人事管理的People(人員)類??紤]到通用性,這里只抽象出所有類型

人員都具有的屬性:number(編號)、sex(性別)、birthday(出生日期)、id(身份證號)等

等。其中“出生日期”定義為一個“日期”類內(nèi)嵌子對象。用成員函數(shù)實現(xiàn)對人員信息的錄入和

顯示。要求包括:構(gòu)造函數(shù)和析構(gòu)函數(shù)、拷貝構(gòu)造函數(shù)、內(nèi)聯(lián)成員函數(shù)、帶缺省形參值的成

員函數(shù)、聚集。

解:

本題用作實驗四的選做題,因此不給出答案。

4-11定義一個矩形類,有長、寬兩個屬性,有成員函數(shù)計算矩形的面積

解:

#include<iostream.h>

classRectangle

public:

Rcctanglc(floatlen,floatwidth)

{

Length=len;

Width=width;

}

-Rectangle(){};

floatGctArca(){returnLength*Width;}

floatGetLength(){returnLength;}

floatGctWidth(){returnWidth;}

private:

floatLength;

floatWidth;

};

voidmain()

|

floatlength,width;

cout?”請輸入矩形的長度:”;

cin?length;

cout?"請輸入矩形的寬度:

cin?width;

Rectangler(length,width);

cout?"長為length?"寬為"《w

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論