1. 程式人生 > >c++ primer第五版----學習筆記(五)

c++ primer第五版----學習筆記(五)

1.空語句:最簡單的語句,只包含一個單獨的分號

複合語句:指用花括號括起來的語句和宣告的序列,複合語句也被稱為塊

2.if語句

//語法形式:
if (condition)
    statement

//if、else語句
if (condition)
    statement
else
    statement1

//懸垂else:就c++而言,規定else與離它最近的尚未匹配的if匹配,消除了程式的二義性
if (grade % 10 >= 3)
    if (grade % 10 > 7)
        lettergrade += '+';
else                                //此else與內層if匹配
    lettergrade += '-';

3.switch語句

(1)case標籤:case關鍵字和它對應的值,必須是整型常量表達式

(2)在下一個case標籤之前應該有一條break語句;但有時候希望多個值能共享同一組操作,就故意省略break語句

(3)default標籤:程式沒有任何一個case標籤能匹配上switch的值,就進入default語句

(4)不允許跨過變數的初始化語句直接跳到該變數作用域內的另一個位置

4.迭代語句

//while語句
while (condition)
    statement

//傳統的for語句
for (init-statemen; condition; expression)  //init-statemen可以為宣告語句、表示式語句、空語句
    statement

//範圍for語句
for (declaration : expression)     //確保型別相同最好使用auto說明符
    statement

//do while語句
do 
    statement
while (condition);

5.跳轉語句

(1)break語句:終止離它最近的while、do while、for或switch語句,並從這些語句之後的第一條語句開始執行

(2)continue語句:終止最近的迴圈中的當前迭代並立即開始下一次迭代

(3)goto語句:從goto語句無條件跳轉到同意函式中的另外一條語句(最好不要使用,因為它使得程式既難理解又難修改)

6.try語句塊和異常處理

(1)try語句塊:

//try語句塊通用語法形式
try {
    program-statements
} catch (exception-declearation) {
    handle-statements
} catch (exception-declearation) {
    handle-statements
}//.......

(2)標準異常:c++標準庫中定義了一組類,用於報告標準庫函式遇到的問題(書p176)

7.部分問題解答

5.4:

(a)iter變數未初始化,且需要定義在語句外部

(b)if部分無意義,在while迴圈中已經完成了判斷

5.9、5.10、5.11、5.12:

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
    unsigned acnt = 0, ecnt = 0, icnt = 0, ocnt = 0, ucnt = 0,sum_space = 0;
    unsigned sum_table = 0, sum_newline = 0, sum_ff = 0, sum_fl = 0, sum_fi = 0;
    char ch, char_brefore = '\0';
    while (cin >> ch)
    {
	switch(ch)
	{
	case 'a':
	case 'A':
		++acnt;
		break;
	case 'e':
	case 'E':
		++ecnt;
		break;
	case 'i':
		if (char_brefore == 'f')
		{
			++sum_fi;
		}
	case 'I':
		++icnt;
		break;
	case 'o':
	case 'O':
		++ocnt;
		break;
	case 'u':
	case 'U':
		++ucnt;
		break;
	case ' ':
		++sum_space;
		break;
	case '\t':
		++sum_table;
		break;
	case '\n':
		++sum_newline;
		break;
	case 'f':
		if (char_brefore == 'f')
		{
			++sum_ff;
		}
		break;
	case 'l':
		if (char_brefore == 'f')
		{
			++sum_fl;
			break;
		}
	}
	char_brefore = ch;
    }
    cout << "母音字母a的個數為; " << acnt << endl;
    cout << "母音字母e的個數為: " << ecnt << endl;
    cout << "母音字母i的個數為: " << icnt << endl;	
    cout << "母音字母o的個數為: " << ocnt << endl;
    cout << "母音字母u的個數為: " << ucnt << endl;	
    cout << "空格的個數為: " << sum_space << endl;
    cout << "製表符的個數為: " << sum_table << endl;
    cout << "換行符的個數為: " << sum_newline << endl;	
    cout << "字母序列ff的個數為: " << sum_ff << endl;	
    cout << "字母序列fl的個數為: " << sum_fl<< endl;
    cout << "字母序列fi的個數為: " << sum_fi << endl;
    system("pause");
    return 0;
}

5.14:

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
    string my_string, before_string ;
    vector<string> v;//將不重複的單詞記錄
    vector<int> v1;//記錄單詞出現的次數;
    int repeat_number = 1;
    while (cin >> my_string)
    {
	if (my_string == before_string)
	{
		++repeat_number;
	}
	else
	{
		v.push_back(my_string);
		v1.push_back(repeat_number);
		repeat_number = 1;
		before_string = my_string;
	}
    }
    v1.push_back(repeat_number);//把末尾單詞出現的次數壓入vector
    int a = 0;
    auto it = v1.begin();
    for (it; it != v1.end(); ++it)
    {
	if (*it > a)
	{
	    a = *it;
	}
    }
    for (int i = 0; i < v1.size(); ++i)
    {
          if (a > 1)
	  {
	        if (v1[i] == a)
	        {
                    //注意如果輸入沒有單詞連續出現的情況,注意判斷a的大小,否則v[i-1]可能會報錯
	            cout << "單詞" << v[i - 1] << "出現的次數" << v1[i] << "次" << endl;		        }
	  }
    }
    if (a == 1)
    {
	  cout << "沒有單詞連續出現!" << endl;
    }
    system("pause");
    return 0;
}

5.17:

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
    vector<int> v1;
    vector<int> v2;
    int n, m;
    cout << "輸入第一個vector物件: ";
    while (cin >> n)
    {
	v1.push_back(n);
    }
    cin.clear();//重置輸入流
    cin.ignore();//忽略最後一個輸入字元
    cout << endl << "輸入第二個vector物件: ";
    while (cin >> m)
    {
	v2.push_back(m);
    }
    int small_size = v1.size() > v2.size() ? v2.size() : v1.size();//返回更小的vector
    int flag = 0;
    for (int i = 0; i < small_size; ++i)
    {
	if (v1[i] != v2[i])
	{
		cout << "false" << endl;
		flag = 1;
		break;
	}
    }
    if (flag != 1)
    {
	cout << "true" << endl;
    }
    system("pause");
    return 0;
}

5.20、5.21:

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
    string my_string, before_string;
    int flag = 0;
    cout << "請輸入單詞: ";
    while (cin >> my_string)
    {
	if (my_string[0] > 'Z' || my_string[0] < 'A')
	{
		cout << "請繼續輸入單詞: ";
		continue;
	}
        if (my_string == before_string)
	{
		cout << "重複單詞為: " << my_string << endl;
		flag = 1;
		break;
	}
	else
	{
		before_string = my_string;
	}
    }
    if (flag == 0)
    {
	cout << "無重複單詞出現" << endl;
    }
    system("pause");
    return 0;
}

5.23、5.24、5.25:

#include <iostream>
#include <string>
#include <vector>
#include <stdexcept>
using namespace std;
int main()
{
    int a, b;
    cout << "請輸入相除的兩個整數: ";
    while (cin >> a >> b)
    {
	try
	{
	    if (b == 0) throw std::runtime_error("被除數不能為0");
	    cout << static_cast<double>(a) / b << endl;
	}
	catch (runtime_error err)
	{
	    cout << err.what()
		    << "\n是否需要重新輸入? Enter y or n: " << endl;
	    char c;
	    cin >> c;
	    if (!cin || c == 'n')
	    {
	    	break;
	    }
	    else
	    {
	    	cout << "請輸入相除的兩個整數: ";
	    }
	}
    }
    system("pause");
    return 0;
}

相關推薦

c++ primer----學習筆記十三

知識點: 拷貝控制操作:拷貝、移動、賦值和銷燬 在定義一個類時,我們可以顯式或隱式的定義在此型別的物件拷貝、賦值、移動、銷燬是做什麼,主要通過五種特殊的成員函式來完成這些操作:拷貝建構函式、拷貝複製運算子、移動建構函式、移動複製運算子和解構函式 1.拷貝建構函式: 定

c++ primer----學習筆記

1.空語句:最簡單的語句,只包含一個單獨的分號 複合語句:指用花括號括起來的語句和宣告的序列,複合語句也被稱為塊 2.if語句: //語法形式: if (condition) statement //if、else語句 if (condition) s

python基礎教程)學習筆記

第六章 抽象(函式) 6.1 懶惰是一種美德 6.2 抽象和結構 6.3 自定義函式 判斷某個物件是否可呼叫,可使用內建函式callable。格式是callable(物件)。 函式是結構化程式設計的核心。使用def(表示定義函式)語句。 '''   def fun(str_s): #

python基礎教程)學習筆記

第四章 字典 字典一種可通過名稱來訪問其各個值的資料結構。這種資料結構稱為對映。字典是Python中唯一的內建對映型別,其中的值不按順序排列,而是儲存在鍵下。鍵可能是數、字串或元組。 4.1 字典的用途 i表示棋盤的狀態,其中每個鍵都是由座標組成的元組; ii儲存檔案修改時間,其中的鍵為檔名; ii

python基礎教程)學習筆記

第三章 使用字串 3.1 字串基本操作 所有標準序列操作(索引、切片、乘法、成員資格檢查、長度、最小值和最大值)都適用於字串,但別忘了字串是不可變的,因此所有的元素賦值和切片賦值都是非法的。 3.2設定字串的格式 3.2.1% 使用字串格式設定運算子——百分號。這個運算子的行為類似於C語言中的經典函

python基礎教程)學習筆記

第二章 列表和元組 2.1序列概述 Python內建的序列包括列表、元組、字串、Unicode字串、buffer物件和xrange物件等,本章僅介紹列表和元組。 列表和元組的主要不同在於,列表的元素是可以修改的,而元組不可以單獨更改其中的單個元素,但可以更改元組的整體內容。 在序列中,每個元素都有編

python基礎教程)學習筆記

第十章 開箱即用 本章簡要介紹模組的工作原理以及如何探索模組以獲悉其提供的功能,然後概述標準庫,重點是幾個很有用的模組。 10.1 模組 使用import將函式從外部模組匯入到程式中。 ''' import math as ma Pi=3.1415926 v=ma.sin(Pi/6) pri

python基礎教程)學習筆記

第九章 魔法方法、特性和迭代器 9.1 如果你使用的不是python3 在Python 2.2中,Python物件的工作方式有了很大的變化。這種變化帶來了多個方面的影響。這些影響對Python程式設計新手來說大都不重要,但有一點需要注意:即便你使用的是較新的Python 2版本,有些功能(如特性

python基礎教程)學習筆記

第八章異常 異常事件可能是錯誤(如試圖除以零),也可能是通常不會發生的事情。為處理這些異常事件,可在每個可能發生這些事件的地方都使用異常處理機制。 8.1 異常是什麼 Python使用異常物件來表示異常狀態,並在遇到錯誤時引發異常。異常物件未被處理(或捕獲)時,程式將終止並顯示一條錯誤訊息(trac

python基礎教程)學習筆記

第七章 再談抽象 自定義`類和物件 7.1 物件魔法 多型:可對不同型別的物件執行相同的操作,而這些操作就像“被施了魔法”一樣能夠正常執行。 封裝:對外部隱藏有關物件工作原理的細節。 繼承:可基於通用類創建出專用類。 7.1.1 多型 大致意味著即便你不知道變數指向的是哪種物件,也能夠對其執行操作,

python基礎教程)學習筆記十三

第十三章 資料庫支援 本章討論Python資料庫API(一種連線到SQL資料庫的標準化方式),並演示如何使用這個API 來執行一些基本的SQL。 本章使用的是簡單資料庫SQLite。介紹一些SQLite資料庫知識。不要指望在本章得到多少資料庫操作的具體知識。另外本章學習很大一部分基於PEP 24

SQL入門經典(5)學習筆記

1.判斷對錯:個人社會保險號碼,輸入格式為 '1111111111',它可以是下面任何一種資料型別:定長字元、變長字元、數值。錯 不能是數值 引號會轉換為字元 2.判斷對錯:數值型別的標度是指數值的總體長度。對 會自動補全 3.所有的SQL實現都使用同樣的資料型別嗎?不同 按需使用 4.下面定義的有效位

SQL入門經典(5)學習筆記

1.縮寫“SQL”的含義是什麼?stuctured query language 結構化查詢語言 2.SQL命令的6個主要類別是什麼?事務控制命令 commit 資料定義語言 create table 資料操作語言 update 資料查詢語言 select 資料管理命令(進行審計分析 start audit

SQL入門經典(5)學習筆記

1.下面這個CREATE TABLE命令能夠正常執行嗎?需要做什麼修改?在不同的資料庫(MySQL、Oracle、SQL Server)中執行,有什麼限制嗎? 不要as: middle_name null 2.能從表裡刪除一個欄位嗎?可以 alter drop coloum?? 3.在前面的表EMP

作業系統精髓與設計原理(原書6)——學習筆記8

2.4 現代作業系統的特徵 現代作業系統針對硬體中的新發展、新的應用程式和新的安全威脅。促使作業系統發展的硬體因素主要有: 多處理器的計算機系統 高速增長的機器速度 高速網路連線

作業系統精髓與設計原理(原書6)——學習筆記12

 3.2.3 五狀態模型 如果所有程序都做好了執行準備,則圖3.5b所給出的排隊規則是有效的。佇列是“先進先出”(FIFO)的表,對於可執行的程序處理器以一種輪轉方式操作(依次給佇列中的每個程

作業系統精髓與設計原理(原書6)——學習筆記2

 1.3.1 取指令和執行指令 指令暫存器(InstructionRegister,IR)放置取到的指令。指令中包含確定處理器要執行的操作位,處理器解釋指令並執行對應的操作。大體上,這些操作可

c++ primer----學習筆記十九

部分習題解答: 19.1、19.2: #include <iostream> #include <cstdlib> using namespace std; void *operator new(size_t size) { cout << "new(

c++ primer----學習筆記十九

文章目錄 ==特殊工具與技術== 1.控制記憶體分配 1.1 過載new和delete 1.2 定位new表示式 2. 執行時型別識別 2.1 dynamic_cast運算子 2.2 typeid運算子

c++primer----學習筆記十八

部分習題解答: 18.1: (a)range_error (b)exception 如果寫成throw p,則丟擲指標,是錯誤的18.2: 發生異常,所在塊之前的臨時變數都會被銷燬,v呼叫vector類的解構函式進行銷燬,並釋放相關記憶體;p指標會被銷燬,但p指向的記憶體是動態分配的,所以該記憶