第 一 章? 概述
?
1-1 簡(jiǎn)述計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言的發(fā)展歷程。
?
解:
迄今為止計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言的發(fā)展經(jīng)歷了機(jī)器語(yǔ)言、匯編語(yǔ)言、高級(jí)語(yǔ)言等階段,C++語(yǔ)言是一種面向?qū)ο蟮木幊陶Z(yǔ)言,也屬于高級(jí)語(yǔ)言。
?
1-2 面向?qū)ο蟮木幊陶Z(yǔ)言有哪些特點(diǎn)?
?
解:
面向?qū)ο蟮木幊陶Z(yǔ)言與以往各種編程語(yǔ)言有根本的不同,它設(shè)計(jì)的出發(fā)點(diǎn)就是為了能更直接的描述客觀世界中存在的事物以及它們之間的關(guān)系。面向?qū)ο蟮木幊陶Z(yǔ)言將客觀事物看作具有屬性和行為的對(duì)象,通過(guò)抽象找出同一類(lèi)對(duì)象的共同屬性(靜態(tài)特征)和行為(動(dòng)態(tài)特征),形成類(lèi)。通過(guò)類(lèi)的繼承與多態(tài)可以很方便地實(shí)現(xiàn)代碼重用,大大縮短了軟件開(kāi)發(fā)周期,并使得軟件風(fēng)格統(tǒng)一。因此,面向?qū)ο蟮木幊陶Z(yǔ)言使程序能夠比較直接地反問(wèn)題域的本來(lái)面目,軟件開(kāi)發(fā)人員能夠利用人類(lèi)認(rèn)識(shí)事物所采用的一般思維方法來(lái)進(jìn)行軟件開(kāi)發(fā)。C++語(yǔ)言是目前應(yīng)用最廣的面向?qū)ο蟮木幊陶Z(yǔ)言。
?
1-3 什么是結(jié)構(gòu)化程序設(shè)計(jì)方法?這種方法有哪些優(yōu)點(diǎn)和缺點(diǎn)?
?
解:
結(jié)構(gòu)化程序設(shè)計(jì)的思路是:自頂向下、逐步求精;其程序結(jié)構(gòu)是按功能劃分為若干個(gè)基本模塊;各模塊之間的關(guān)系盡可能簡(jiǎn)單,在功能上相對(duì)獨(dú)立;每一模塊內(nèi)部均是由順序、選擇和循環(huán)三種基本結(jié)構(gòu)組成;其模塊化實(shí)現(xiàn)的具體方法是使用子程序。結(jié)構(gòu)化程序設(shè)計(jì)由于采用了模塊分解與功能抽象,自頂向下、分而治之的方法,從而有效地將一個(gè)較復(fù)雜的程序系統(tǒng)設(shè)計(jì)任務(wù)分解成許多易于控制和處理的子任務(wù),便于開(kāi)發(fā)和維護(hù)。
?
雖然結(jié)構(gòu)化程序設(shè)計(jì)方法具有很多的優(yōu)點(diǎn),但它仍是一種面向過(guò)程的程序設(shè)計(jì)方法,它把數(shù)據(jù)和處理數(shù)據(jù)的過(guò)程分離為相互獨(dú)立的實(shí)體。當(dāng)數(shù)據(jù)結(jié)構(gòu)改變時(shí),所有相關(guān)的處理過(guò)程都要進(jìn)行相應(yīng)的修改,每一種相對(duì)于老問(wèn)題的新方法都要帶來(lái)額外的開(kāi)銷(xiāo),程序的可重用性差。
由于圖形用戶(hù)界面的應(yīng)用,程序運(yùn)行由順序運(yùn)行演變?yōu)槭录?qū)動(dòng),使得軟件使用起來(lái)越來(lái)越方便,但開(kāi)發(fā)起來(lái)卻越來(lái)越困難,對(duì)這種軟件的功能很難用過(guò)程來(lái)描述和實(shí)現(xiàn),使用面向過(guò)程的方法來(lái)開(kāi)發(fā)和維護(hù)都將非常困難。
?
?
1-4 什么是對(duì)象?什么是面向?qū)ο蠓椒ǎ窟@種方法有哪些特點(diǎn)?
?
解:
從一般意義上講,對(duì)象是現(xiàn)實(shí)世界中一個(gè)實(shí)際存在的事物,它可以是有形的,也可以是無(wú)形的。對(duì)象是構(gòu)成世界的一個(gè)獨(dú)立單位,它具有自己的靜態(tài)特征和動(dòng)態(tài)特征。面向?qū)ο蠓椒ㄖ械膶?duì)象,是系統(tǒng)中用來(lái)描述客觀事物的一個(gè)實(shí)體,它是用來(lái)構(gòu)成系統(tǒng)的一個(gè)基本單位,由一組屬性和一組行為構(gòu)成。
面向?qū)ο蟮姆椒▽?shù)據(jù)及對(duì)數(shù)據(jù)的操作方法放在一起,作為一個(gè)相互依存、不可分離的整體--對(duì)象。對(duì)同類(lèi)型對(duì)象抽象出其共性,形成類(lèi)。類(lèi)中的大多數(shù)數(shù)據(jù),只能用本類(lèi)的方法進(jìn)行處理。類(lèi)通過(guò)一個(gè)簡(jiǎn)單的外部接口,與外界發(fā)生關(guān)系,對(duì)象與對(duì)象之間通過(guò)消息進(jìn)行通訊。這樣,程序模塊間的關(guān)系更為簡(jiǎn)單,程序模塊的獨(dú)立性、數(shù)據(jù)的安全性就有了良好的保障。通過(guò)實(shí)現(xiàn)繼承與多態(tài)性,還可以大大提高程序的可重用性,使得軟件的開(kāi)發(fā)和維護(hù)都更為方便。
面向?qū)ο蠓椒ㄋ鶑?qiáng)調(diào)的基本原則,就是直接面對(duì)客觀存在的事物來(lái)進(jìn)行軟件開(kāi)發(fā),將人們?cè)谌粘I钪辛?xí)慣的思維方式和表達(dá)方式應(yīng)用在軟件開(kāi)發(fā)中,使軟件開(kāi)發(fā)從過(guò)分專(zhuān)業(yè)化的方法、規(guī)則和技巧中回到客觀世界,回到人們通常的思維。
?
1-5 什么叫做封裝?
?
解:
封裝是面向?qū)ο蠓椒ǖ囊粋€(gè)重要原則,就是把對(duì)象的屬性和服務(wù)結(jié)合成一個(gè)獨(dú)立的系統(tǒng)單位,并盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。
?
1-6 面向?qū)ο蟮能浖こ贪男┲饕獌?nèi)容?
?
解:
面向?qū)ο蟮能浖こ淌敲嫦驅(qū)ο蠓椒ㄔ谲浖こ填I(lǐng)域的全面應(yīng)用,它包括面向?qū)ο蟮姆治觯∣OA)、面向?qū)ο蟮脑O(shè)計(jì)(OOD)、面向?qū)ο蟮木幊蹋∣OP)、面向?qū)ο蟮臏y(cè)試(OOT)和面向?qū)ο蟮能浖S護(hù)(OOSM)等主要內(nèi)容。
?
1-7 簡(jiǎn)述計(jì)算機(jī)內(nèi)部的信息可分為幾類(lèi)?
?
解:
計(jì)算機(jī)內(nèi)部的信息可以分成控制信息和數(shù)據(jù)信息二大類(lèi);控制信息可分為指令和控制字兩類(lèi);數(shù)據(jù)信息可分為數(shù)值信息和非數(shù)值信息兩類(lèi)。
?
1-8 什么叫二進(jìn)制?使用二進(jìn)制有何優(yōu)點(diǎn)和缺點(diǎn)?
?
解:
二進(jìn)制是基數(shù)為2,每位的權(quán)是以2
為底的冪的進(jìn)制,遵循逢二進(jìn)一原則,基本符號(hào)為0和1。采用二進(jìn)制碼表示信息,有如下幾個(gè)優(yōu)點(diǎn):1.易于物理實(shí)現(xiàn);2.二進(jìn)制數(shù)運(yùn)算簡(jiǎn)單;3.機(jī)器可靠性高;4.通用性強(qiáng)。其缺點(diǎn)是它表示數(shù)的容量較小,表示同一個(gè)數(shù),二進(jìn)制較其他進(jìn)制需要更多的位數(shù)。
?
1-9 請(qǐng)將以下十進(jìn)制數(shù)值轉(zhuǎn)換為二進(jìn)制和十六進(jìn)制補(bǔ)碼:
(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 = (11111111 11111111)2 = (FFFF)16
(6) (-1)10 = (11111111 11111111)2 = (FFFF)16
?
1-10 請(qǐng)將以下數(shù)值轉(zhuǎn)換為十進(jìn)制:
(1)(1010)2 (2)(10001111)2 (3)(01011111 11000011)2
(4)(7F)16 (5)(2D3E)16 (6)(F10E)16
?
解:
(1)(1010)2 = (10)10
(2)(10001111)2 = (143)10
(3)(01011111 11000011)2 = (24515)10
(4)(7F)16 = (127)10
(5)(2D3E)16 = (11582)10
(6)(F10E)16 = (61710)10
?
1-11 簡(jiǎn)要比較原碼、反碼、補(bǔ)碼等幾種編碼方法。
?
解:
原碼:將符號(hào)位數(shù)字化為 0 或 1,數(shù)的絕對(duì)值與符號(hào)一起編碼,即所謂"符號(hào)──絕對(duì)值表示"的編碼。
正數(shù)的反碼和補(bǔ)碼與原碼表示相同。
負(fù)數(shù)的反碼與原碼有如下關(guān)系:
符號(hào)位相同(仍用1表示),其余各位取反(0變1,1變0)。
補(bǔ)碼由該數(shù)反碼的最末位加1求得。
第 二 章????? C++簡(jiǎn)單程序設(shè)計(jì)
?
2-1 C++語(yǔ)言有那些主要特點(diǎn)和優(yōu)點(diǎn)?
?
解:
C++語(yǔ)言的主要特點(diǎn)表現(xiàn)在兩個(gè)方面,一是全面兼容C,二是支持面向?qū)ο蟮姆椒?。C++是一個(gè)更好的C,它保持了C的簡(jiǎn)潔、高效、接近匯編語(yǔ)言、具有良好的可讀性和可移植性等特點(diǎn),對(duì)C的類(lèi)型系統(tǒng)進(jìn)行了改革和擴(kuò)充,因此C++比C更安全,C++的編譯系統(tǒng)能檢查出更多的類(lèi)型錯(cuò)誤。
C++語(yǔ)言最重要的特點(diǎn)是支持面向?qū)ο蟆?/p>
?
2-2 下列標(biāo)識(shí)符哪些是合法的?
Program, -page, _lock, test2, 3in1, @mail, A_B_C_D
?
解:
Program, _lock, test2, A_B_C_D是合法的標(biāo)識(shí)符,其它的不是。
?
2-3 例2.1中每條語(yǔ)句的作用是什么?
#include <iostream.h>
void main(void)
{
cout<<"Hello!\n";
cout<<"Welcome to c++!\n";
}
?
解:
#include <iostream.h> //指示編譯器將文件iostream.h中的代碼
//嵌入到該程序中該指令所在的地方
void main() //主函數(shù)名,void 表示函數(shù)沒(méi)有返回值
{ //函數(shù)體標(biāo)志
cout<<"Hello!\n"; //輸出字符串Hello!到標(biāo)準(zhǔn)輸出設(shè)備(顯示器)上。
cout<<"Welcome to c++!\n"; //輸出字符串Welcome to c++!
}
在屏幕輸出如下:
Hello!
Welcome to c++!
?
2-4 使用關(guān)鍵字const而不是#define語(yǔ)句的好處有哪些?
?
解:
const定義的常量是有類(lèi)型的,所以在使用它們時(shí)編譯器可以查錯(cuò);而且,這些變量在調(diào)試時(shí)仍然是可見(jiàn)的。
?
2-5 請(qǐng)寫(xiě)出C++語(yǔ)句聲明一個(gè)常量PI,值為3.1416;再聲明一個(gè)浮點(diǎn)型變量a,把PI的值賦給a。
?
解:
const float PI = 3.1416;
float a = PI;
?
2-6 在下面的枚舉類(lèi)型中,Blue的值是多少?
enum COLOR { WHITE, BLACK = 100, RED, BLUE, GREEN = 300 };
?
解:
Blue = 102
?
2-7 注釋有什么作用?C++中有哪幾種注釋的方法?他們之間有什么區(qū)別?
?
解:
注釋在程序中的作用是對(duì)程序進(jìn)行注解和說(shuō)明,以便于閱讀。編譯系統(tǒng)在對(duì)源程序進(jìn)行編譯時(shí)不理會(huì)注釋部分,因此注釋對(duì)于程序的功能實(shí)現(xiàn)不起任何作用。而且由于編譯時(shí)忽略注釋部分,所以注釋內(nèi)容不會(huì)增加最終產(chǎn)生的可執(zhí)行程序的大小。適當(dāng)?shù)厥褂米⑨專(zhuān)軌蛱岣叱绦虻目勺x性。在C++中,有兩種給出注釋的方法:一種是延用C語(yǔ)言方法,使用"/*"和"*/"括起注釋文字。另一種方法是使用"http://",從"http://"開(kāi)始,直到它所在行的行尾,所有字符都被作為注釋處理。
?
2-8 什么叫做表達(dá)式?x = 5 + 7是一個(gè)表達(dá)式嗎?它的值是多少?
?
解:
任何一個(gè)用于計(jì)算值的公式都可稱(chēng)為表達(dá)式。x = 5 + 7是一個(gè)表達(dá)式,它的值為12。
?
2-9 下列表達(dá)式的值是多少?
1. 201 / 4
2. 201 % 4
3. 201 / 4.0
?
解:
1. 50
2. 1
3. 50.25
?
2-10 執(zhí)行完下列語(yǔ)句后,a、b、c三個(gè)變量的值為多少?
a = 30;
b = a++;
c = ++a;
?
解:
a:32 ; b:30 ; c:32;
?
2-11 在一個(gè)for循環(huán)中,可以初始化多個(gè)變量嗎?如何實(shí)現(xiàn)?
?
解:
在for循環(huán)設(shè)置條件的第一個(gè)";"前,用,分隔不同的賦值表達(dá)式。
例如:
for (x = 0, y = 10; x < 100; x++, y++)
?
2-12 執(zhí)行完下列語(yǔ)句后,n的值為多少?
int n;
for (n = 0; n < 100; n++)
?
解:
n的值為100
?
2-13 寫(xiě)一條for語(yǔ)句,計(jì)數(shù)條件為n從100到200,步長(zhǎng)為2;然后用while和do…while語(yǔ)句完成同樣的循環(huán)。
?
解:
for循環(huán):
for (int n = 100; n <= 200; n += 2);
while循環(huán):
int x = 100;
while (n <= 200)
n += 2;
do…while循環(huán):
int n = 100;
do
{
n += 2;
} while(n <= 200);
?
2-14 if ( x = 3 ) 和 if (x = = 3) 這兩條語(yǔ)句的差別是什么?
?
解:
語(yǔ)句if(x = 3)把3賦給x,賦值表達(dá)式的值為true,作為if語(yǔ)句的條件;語(yǔ)句if(x ==
3)首先判斷x的值是否為3,若相等條件表達(dá)式的值為ture,否則為false。
?
2-15 什么叫做作用域?什么叫做局部變量?什么叫做全局變量,如何使用全局變量?
?
解:
作用域是一個(gè)標(biāo)識(shí)符在程序正文中有效的區(qū)域。局部變量,一般來(lái)講就是具有塊作用域的變量;全局變量,就是具有文件作用域的變量。
?
2-16 已知x、y兩個(gè)變量,寫(xiě)一條簡(jiǎn)單的if語(yǔ)句,把較小的的值賦給原本值較大的變量。
?
解:
if (x > y)
x = y;
else // y > x || y == x
y = x;
?
2-17 修改下面這個(gè)程序中的錯(cuò)誤,改正后它的運(yùn)行結(jié)果是什么?
#include <iostream.h>
void main()
int i
int j;
i = 10; /* 給i賦值
j = 20; /* 給j賦值 */
cout << "i + j = << i + j; /* 輸出結(jié)果 */
return 0;
}
?
解:
改正:
#include <iostream.h>
int main()
{
int i;
int j;
i = 10; // 給i賦值
j = 20; /* 給j賦值 */
cout << "i + j = " << i + j; /* 輸出結(jié)果 */
return 0;
}
程序運(yùn)行輸出:
i + j = 30
?
2-18 編寫(xiě)一個(gè)程序,運(yùn)行時(shí)提示輸入一個(gè)數(shù)字,再把這個(gè)數(shù)字顯示出來(lái)。
?
解:
源程序:
#include <iostream.h>
int main()
{
int i;
cout << "請(qǐng)輸入一個(gè)數(shù)字:";
cin >> i;
cout << "您輸入一個(gè)數(shù)字是" << i << endl;
return 0;
}
程序運(yùn)行輸出:
請(qǐng)輸入一個(gè)數(shù)字:5
您輸入一個(gè)數(shù)字是5
?
2-19 C++有哪幾種數(shù)據(jù)類(lèi)型?簡(jiǎn)述其值域。編程顯示你使用的計(jì)算機(jī)中的各種數(shù)據(jù)類(lèi)型的字節(jié)數(shù)。
?
解:
源程序:
#include <iostream.h>
int main()
{
cout << "The size of an int is:\t\t" << sizeof(int) << " bytes.\n";
cout << "The size of a short int is:\t" << sizeof(short) << " bytes.\n";
cout << "The size of a long int is:\t" << sizeof(long) << " bytes.\n";
cout << "The size of a char is:\t\t" << sizeof(char) << " bytes.\n";
cout << "The size of a float is:\t\t" << sizeof(float) << " bytes.\n";
cout << "The size of a double is:\t" << sizeof(double) << " bytes.\n";
return 0;
}
程序運(yùn)行輸出:
The size of an int is: 4 bytes.
The size of a short int is: 2 bytes.
The size of a long int is: 4 bytes.
The size of a char is: 1 bytes.
The size of a float is: 4 bytes.
The size of a double is: 8 bytes.
?
2-20 打印ASCII碼為32~127的字符。
?
解:
#include <iostream.h>
int main()
{
for (int i = 32; i<128; i++)
cout << (char) i;
return 0;
}
?
程序運(yùn)行輸出:
!"#$%G'()*+,./0123456789:;<>?@ABCDEFGHIJKLMNOP_QRSTUVWXYZ[\]^'abcdefghijklmnopqrstuvwxyz<|>~s
?
2-21 運(yùn)行下面的程序,觀察其輸出,與你的設(shè)想是否相同?
#include <iostream.h>
int main()
{
unsigned int x;
unsigned int y = 100;
unsigned int z = 50;
x= y - z;
cout << "Difference is: " << x;
x = z - y;
cout << "\nNow difference is: " << x <<endl;
return 0;
}
?
解:
程序運(yùn)行輸出:
Difference is: 50
Now difference is: 4294967246
注意,第二行的輸出并非 -50,注意x、y、z的數(shù)據(jù)類(lèi)型。
?
2-22 運(yùn)行下面的程序,觀察其輸出,體會(huì)i++與++i的差別。
#include <iostream.h>
int main()
{
int myAge = 39; // initialize two integers
int yourAge = 39;
cout << "I am: " << myAge << " years old.\n";
cout << "You are: " << yourAge << " years old\n";
myAge++; // postfix increment
++yourAge; // prefix increment
cout << "One year passes...\n";
cout << "I am: " << myAge << " years old.\n";
cout << "You are: " << yourAge << " years old\n";
cout << "Another year passes\n";
cout << "I am: " << myAge++ << " years old.\n";
cout << "You are: " << ++yourAge << " years old\n";
cout << "Let's print it again.\n";
cout << "I am: " << myAge << " years old.\n";
cout << "You are: " << yourAge << " years old\n";
return 0;
}
?
解:
程序運(yùn)行輸出:
I am 39 years old
You are 39 years old
One year passes
I am 40 years old
You are 40 years old
Another year passes
I am 40 years old
You are 41 years old
Let's print it again
I am 41 years old
You are 41 years old
?
2-23 什么叫常量?什么叫變量?
?
解:
所謂常量是指在程序運(yùn)行的整個(gè)過(guò)程中其值始終不可改變的量,除了用文字表示常量外,也可以為常量命名,這就是符號(hào)常量;在程序的執(zhí)行過(guò)程中其值可以變化的量稱(chēng)為變量,變量是需要用名字來(lái)標(biāo)識(shí)的。
?
2-24 變量有哪幾種存儲(chǔ)類(lèi)型?
?
解:
變量有以下幾種存儲(chǔ)類(lèi)型:
auto存儲(chǔ)類(lèi)型:采用堆棧方式分配內(nèi)存空間,屬于一時(shí)性存儲(chǔ),其存儲(chǔ)空間可以被若干變量多次覆蓋使用;
register存儲(chǔ)類(lèi)型:存放在通用寄存器中;
extern存儲(chǔ)類(lèi)型:在所有函數(shù)和程序段中都可引用;
static存儲(chǔ)類(lèi)型:在內(nèi)存中是以固定地址存放的,在整個(gè)程序運(yùn)行期間都有效。
?
2-25 寫(xiě)出下列表達(dá)式的值:
1. 2 < 3 && 6 < 9
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. a ^ b & -c
3. a & b | c
4. a | b & c
?
解:
1. -1
2. 1
3. 3
4. 3
?
2-27 若a = 1,下列各式的結(jié)果是什么?
1. ! a | a
2. ~ a | a
3. a ^ a
4. a >> 2
?
解:
1. 1
2. -1
3. 0
4. 0
?
2-28 編寫(xiě)一個(gè)完整的程序,實(shí)現(xiàn)功能:向用戶(hù)提問(wèn)"現(xiàn)在正在下雨嗎?",提示用戶(hù)輸入Y或N。若輸入為Y,顯示"現(xiàn)在正在下雨。";
若輸入為N,顯示"現(xiàn)在沒(méi)有下雨。";否則繼續(xù)提問(wèn)"現(xiàn)在正在下雨嗎?"
?
解:
源程序:
#include <iostream.h>
#include <stdlib.h>
void main()
{
char flag;
while(1)
{
cout << "現(xiàn)在正在下雨嗎?(Yes or No):";
cin >> flag;
if ( toupper(flag) == 'Y')
{
cout << "現(xiàn)在正在下雨。";
break;
}
if ( toupper(flag) == 'N')
{
cout << "現(xiàn)在沒(méi)有下雨。";
break;
}
?
}
}
程序運(yùn)行輸出:
現(xiàn)在正在下雨嗎?(Yes or No):x
現(xiàn)在正在下雨嗎?(Yes or No):l
現(xiàn)在正在下雨嗎?(Yes or No):q
現(xiàn)在正在下雨嗎?(Yes or No):n
現(xiàn)在沒(méi)有下雨。
或:
現(xiàn)在正在下雨嗎?(Yes or No):y
現(xiàn)在正在下雨。
?
2-29 編寫(xiě)一個(gè)完整的程序,運(yùn)行時(shí)向用戶(hù)提問(wèn)"你考試考了多少分?(0~100)",接收輸入后判斷其等級(jí),顯示出來(lái)。規(guī)則如下:
?
解:
#include <iostream.h>
void main()
{
int i,score;
?
cout << "你考試考了多少分?(0~100):";
cin >> score;
if (score>100 || score<0)
cout << "分?jǐn)?shù)值必須在0到100之間!";
else
{
?
i = score/10;
switch (i)
{
case 10:
case 9:
cout << "你的成績(jī)?yōu)閮?yōu)!";
break;
case 8:
cout << "你的成績(jī)?yōu)榱迹?;
break;
case 7:
case 6:
cout << "你的成績(jī)?yōu)橹校?;
break;
default:
cout << "你的成績(jī)?yōu)椴睿?;
}
}
}
程序運(yùn)行輸出:
你考試考了多少分?(0~100):85
你的成績(jī)?yōu)榱迹?/p>
?
2-30 (1)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的菜單程序,運(yùn)行時(shí)顯示"Menu: A(dd) D(elete) S(ort) Q(uit), Select
one:"提示用戶(hù)輸入,A表示增加,D表示刪除,S表示排序,Q表示退出,輸入為A、D、S時(shí)分別提示"數(shù)據(jù)已經(jīng)增加、刪除、排序。"輸入為Q時(shí)程序結(jié)束。要求使用if
… else語(yǔ)句進(jìn)行判斷,用break、continue控制程序流程。
?
解:
#include <iostream.h>
#include <stdlib.h>
void main()
{
char choice,c;
while(1)
{
cout << "Menu: A(dd) D(elete) S(ort) Q(uit), Select one:";
cin >> c;
choice = toupper(c);
if (choice == 'A')
{
cout << "數(shù)據(jù)已經(jīng)增加. " << endl;
continue;
}
else if (choice == 'D')
{
cout << "數(shù)據(jù)已經(jīng)刪除. " << endl;
continue;
}
else if (choice == 'S')
{
cout << "數(shù)據(jù)已經(jīng)排序. " << endl;
continue;
}
else if (choice == 'Q')
break;
}
}
程序運(yùn)行輸出:
Menu: A(dd) D(elete) S(ort) Q(uit), Select one:a
數(shù)據(jù)已經(jīng)增加.
Menu: A(dd) D(elete) S(ort) Q(uit), Select one:d
數(shù)據(jù)已經(jīng)刪除.
Menu: A(dd) D(elete) S(ort) Q(uit), Select one:s
數(shù)據(jù)已經(jīng)排序.
Menu: A(dd) D(elete) S(ort) Q(uit), Select one:q
(2)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的菜單程序,運(yùn)行時(shí)顯示"Menu: A(dd) D(elete) S(ort) Q(uit), Select
one:"提示用戶(hù)輸入,A表示增加,D表示刪除,S表示排序,Q表示退出,輸入為A、D、S時(shí)分別提示"數(shù)據(jù)已經(jīng)增加、刪除、排序。"輸入為Q時(shí)程序結(jié)束。要求使用Switch語(yǔ)句。
解:
源程序:
#include <iostream.h>
#include <stdlib.h>
void main()
{
char choice;
while(1)
{
cout << "Menu: A(dd) D(elete) S(ort) Q(uit), Select one:";
cin >> choice;
switch(toupper(choice))
{
case 'A':
cout << "數(shù)據(jù)已經(jīng)增加. " << endl;
break;
case 'D':
cout << "數(shù)據(jù)已經(jīng)刪除. " << endl;
break;
case 'S':
cout << "數(shù)據(jù)已經(jīng)排序. " << endl;
break;
case 'Q':
exit(0);
break;
default:
;
}
}
}
程序運(yùn)行輸出:
Menu: A(dd) D(elete) S(ort) Q(uit), Select one:a
數(shù)據(jù)已經(jīng)增加.
Menu: A(dd) D(elete) S(ort) Q(uit), Select one:d
數(shù)據(jù)已經(jīng)刪除.
Menu: A(dd) D(elete) S(ort) Q(uit), Select one:s
數(shù)據(jù)已經(jīng)排序.
Menu: A(dd) D(elete) S(ort) Q(uit), Select one:q
?
2-31 用窮舉法找出1~100間的質(zhì)數(shù),顯示出來(lái)。分別使用while,do-while,for循環(huán)語(yǔ)句實(shí)現(xiàn)。
?
解:
源程序:
使用while循環(huán)語(yǔ)句:
#include <iostream.h>
#include <math.h>
void main()
{
int i,j,k,flag;
i = 2;
while(i <= 100)
{
flag = 1;
k = sqrt(i);
j = 2;
while (j <= k)
{
if(i%j == 0)
{
flag = 0;
break;
}
j++;
}
if (flag)
cout << i << "是質(zhì)數(shù)." << endl;
i++;
}
}
使用do…while循環(huán)語(yǔ)句:
#include <iostream.h>
#include <math.h>
void main()
{
int i,j,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ù)." << endl;
i++;
}while(i <= 100);
}
使用for循環(huán)語(yǔ)句:
#include <iostream.h>
#include <math.h>
void main()
{
int i,j,k,flag;
for(i = 2; i <= 100; i++)
{
flag = 1;
k = sqrt(i);
for (j = 2; j <= k; j++)
{
if(i%j == 0)
{
flag = 0;
break;
}
}
if (flag)
cout << i << "是質(zhì)數(shù)." << endl;
}
}
程序運(yùn)行輸出:
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ù).
71是質(zhì)數(shù).
73是質(zhì)數(shù).
79是質(zhì)數(shù).
83是質(zhì)數(shù).
89是質(zhì)數(shù).
97是質(zhì)數(shù).
?
2-32 比較Break語(yǔ)句與Continue語(yǔ)句的不同用法。
?
解:
Break使程序從循環(huán)體和switch語(yǔ)句內(nèi)跳出,繼續(xù)執(zhí)行邏輯上的下一條語(yǔ)句,不能用在別處;
continue 語(yǔ)句結(jié)束本次循環(huán),接著開(kāi)始判斷決定是否繼續(xù)執(zhí)行下一次循環(huán);
?
2-33 定義一個(gè)表示時(shí)間的結(jié)構(gòu)體,可以精確表示年、月、日、小時(shí)、分、秒;提示用戶(hù)輸入年、月、日、小時(shí)、分、秒的值,然后完整地顯示出來(lái)。
?
解:
源程序見(jiàn)"實(shí)驗(yàn)指導(dǎo)"部分實(shí)驗(yàn)二
?
2-34
在程序中定義一個(gè)整型變量,賦以1~100的值,要求用戶(hù)猜這個(gè)數(shù),比較兩個(gè)數(shù)的大小,把結(jié)果提示給用戶(hù),直到猜對(duì)為止。分別使用while、do…while語(yǔ)句實(shí)現(xiàn)循環(huán)。
?
解:
//使用while語(yǔ)句
#include <iostream.h>
void main() {
int n = 18;
int m = 0;
while(m != n)
{
cout << "請(qǐng)猜這個(gè)數(shù)的值為多少?(0~~100):";
cin >> m;
if (n > m)
cout << "你猜的值太小了!" << endl;
else if (n < m)
cout << "你猜的值太大了!" << endl;
else
cout << "你猜對(duì)了!" << endl;
}
}
//使用do…while語(yǔ)句
#include <iostream.h>
void main() {
int n = 18;
int m = 0;
do{
cout << "請(qǐng)猜這個(gè)數(shù)的值為多少?(0~~100):";
cin >> m;
if (n > m)
cout << "你猜的值太小了!" << endl;
else if (n < m)
cout << "你猜的值太大了!" << endl;
else
cout << "你猜對(duì)了!" << endl;
}while(n != m);
}
程序運(yùn)行輸出:
請(qǐng)猜這個(gè)數(shù)的值為多少?(0~~100):50
你猜的值太大了!
請(qǐng)猜這個(gè)數(shù)的值為多少?(0~~100):25
你猜的值太大了!
請(qǐng)猜這個(gè)數(shù)的值為多少?(0~~100):10
你猜的值太小了!
請(qǐng)猜這個(gè)數(shù)的值為多少?(0~~100):15
你猜的值太小了!
請(qǐng)猜這個(gè)數(shù)的值為多少?(0~~100):18
你猜對(duì)了!
?
2-35
定義枚舉類(lèi)型weekday,包括Sunday到Saturday七個(gè)元素在程序中定義weekday類(lèi)型的變量,對(duì)其賦值,定義整型變量,看看能否對(duì)其賦weekday類(lèi)型的值。
?
解:
#include <iostream.h>
enum weekday
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
};
void main()
{
int i;
weekday d = Thursday;
cout << "d = " << d << endl;
i = d;
cout << "i = " << i << endl;
?
d = (weekday)6;
cout << "d = " << d << endl;
d = weekday( 4 );
cout << "d = " << d << endl;
}
程序運(yùn)行輸出:
d = 4
i = 4
d = 6
d = 4
?