1. 程式人生 > >2013級C++第12周程式閱讀專案——理解函式

2013級C++第12周程式閱讀專案——理解函式

課程首頁在:http://blog.csdn.net/sxhelijian/article/details/11890759

第一部分 重重重要的技能:掌握單步執行,跟蹤觀察執行中變數的變化

今後在除錯程式時,儘可能利用好除錯功能,這是職業的要求。

第二部分 閱讀程式碼,理解函式的用法

1、理解函式的預設引數

#include <iostream>
using namespace std;
const double pi=3.1415926;
float area(float r=6.5);//指定r的預設值為6.5
float volume(float h,float r=6.5); //指定r的預設值為6.5
int main( )
{
    cout<<area()<<endl; //相當於area(6.5);
    cout<<area(7.5)<<endl; //形參得到的值為7.5,而不是6.5
    cout<<volume(45.6)<<endl; //相當於volume(45.6,6.5)
    cout<<volume(34.2,10.4)<<endl; //h的值為34.2,r的值為10.4
    return 0;
}
float area(float r)
{
    return pi*r*r;
}
float volume(float h,float r)
{
    return pi*r*r*h;
}

① 執行程式,利用除錯功能,觀察變數和函式引數的值,結合課堂講解,品味預設引數的作用。

② 去掉第4行的“=6.5”試試,出錯的原因是____________________,給你的啟示是_________________,若堅持這種改法,程式要做的改變是________________________

③ 將第14行改為“float area(float r=6.5)”,出錯的原因是__________________,給你的啟示是____________________

④ 將第5行“float h,float r=6.5”改為“float h=1,float r”,出錯的原因是_____________

,給你的啟示是____________________;改為“float volume(float h=0,float r=6.5)”,結果會是_____________________,給你的啟示_______________________________

2、理解函式的過載

#include <iostream>
using namespace std;
int max(int a,int b,int c);           //函式宣告
double max(double,double,double);    //函式宣告,可以不寫形參名只寫形參型別
long max(long a,long b,long c);      //函式宣告,形參a,b,c處可以只保留型別名
int max(int,int);                      //函式宣告
int main( )
{
    int i1,i2,i3,i;
    cin>>i1>>i2>>i3;                         //輸入3個整數
    i=max(i1,i2,i3);                         //求3個整數中的最大者
    cout<<"i_max="<<i<<endl;
    double d1,d2,d3,d;
    cin>>d1>>d2>>d3;                         //輸入3個雙精度數
    d=max(d1,d2,d3);                         //求3個雙精度數中的最大者
    cout<<"d_max="<<d<<endl;
    long g1,g2,g3,g;
    cin>>g1>>g2>>g3;                         //輸入3個長整數
    g=max(g1,g2,g3);                         //求3個長整數中的最大者
    cout<<"g_max="<<g<<endl;
    cin>>i1>>i2;                             //輸入2個整數
    i=max(i1,i2);                            //求2個整數中的最大者
    cout<<"i_max="<<i<<endl;
    return 0;
}
int max(int a,int b,int c)                //定義求3個整數中的最大者的函式
{
    if(b>a) a=b;
    if(c>a) a=c;
    return a;
}
double max(double a,double b,double c)   //定義求3個雙精度數中的最大者的函式
{
    if(b>a) a=b;
    if(c>a) a=c;
    return a;
}
long max(long a,long b,long c)           //定義求3個長整數中的最大者的函式
{
    if(b>a) a=b;
    if(c>a) a=c;
    return a;
}
int max(int a,int b)                //定義求2個整數中的最大者的函式
{
    if(b>a) a=b;
    return a;
}

① 執行程式,結合課堂講解,品味函式過載的意義。

② 利用codeBlocks中的Debug功能,Step Into到函式內部,觀察每次呼叫的是哪個函式,進一步理解過載中要呼叫的函式。

③ 將第4行加入預設引數的宣告“double max(double,double,double=0.0);”,是否會出現編譯錯誤?

④ 將第3行也加入預設引數的宣告“int max(int a,int b,int c=0);”,情況又會怎樣?請解釋原因(仔細看書能獲得答案)。

3、理解函式模板

#include <iostream>
using namespace std;
template<typename T>        //模板宣告,其中T為型別引數
T max(T a,T b,T c)          //定義一個通用函式,用T作虛擬的型別名
{
    if(b>a) a=b;
    if(c>a) a=c;
    return a;
}
int main( )
{
    int i1=185,i2=-76,i3=567;
    double d1=56.87,d2=90.23,d3=-3214.78;
    long g1=67854,g2=-912456,g3=673456;
    cout<<"i_max="<<max(i1,i2,i3)<<endl; //呼叫模板函式,此時T被int取代
    cout<<"f_max="<<max(d1,d2,d3)<<endl; //呼叫模板函式,此時T被double取代
    cout<<"g_max="<<max(g1,g2,g3)<<endl; //呼叫模板函式,此時T被long取代
    cout<<"c_max="<<max('1','a','A')<<endl; //呼叫模板函式,此時T被long取代
    return 0;
}

① 執行程式,結合課堂講解,品味函式模板的意義。

② 利用codeBlocks中的Debug功能,Step Into到函式內部,觀察每次呼叫時函式的引數值,體會型別引數T每次呼叫時被不同實際型別替代。

相關推薦

2013C++12程式閱讀專案——理解函式

課程首頁在:http://blog.csdn.net/sxhelijian/article/details/11890759第一部分 重重重要的技能:掌握單步執行,跟蹤觀察執行中變數的變化今後在除錯程式時,儘可能利用好除錯功能,這是職業的要求。第二部分 閱讀程式碼,理解函式的

2013C++12(春)項目——成員的訪問屬性、多重繼承

更新 日期 報告 時間 上下 cin out 讀取 edate 課程首頁在:http://blog.csdn.net/sxhelijian/article/details/11890759,內有完整教學方案及資源鏈接第一部分 程序閱讀 1、閱讀程序。分析類中成員的訪問屬性

2015C++7項目 友元、共享數據保護、多文件結構

執行 pub 程序 block tails 一個 date類 能夠 tracking 【項目1-成員函數、友元函數和一般函數有差別】參考解答   (1)閱讀以下的程序,體會凝視中的說明(要執行程序,請找到課程主頁並復制代碼) //例:使用成員函數、友

2015C++2實踐專案

【專案1 - 宣告“主權”】   你已經是CSDN部落格主了,用IT人特有的方式,編一段程式,在螢幕上輸出你想說的話,按要求釋出博文,作為我們的開山之作。 【專案2 - 胖子不想說體重】參考解答   成年男性的標準體重公式為: 標準體重(kg)=身高(c

C#--12實驗--任務2(設計一個窗體)--開啟對話方塊

/* (程式頭部註釋開始) * 程式的版權和版本宣告部分 * Copyright (c) 2011, 煙臺大學計算機學院學生 * All rights reserved. * 檔名稱:訊息對話方塊 * 作 者: 雷恆鑫 * 完成日期: 2

2015C++14實踐專案 模板

【專案1-排序函式模板】   已知 void Sort(int a[],int size); void Sort(double a[],int size); 是一個函式模板的兩個例項,其功能是將陣列a中的前size個元素按從小到大順序排列。試設計這個函

2013-C++15專案參考解答連結集

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

C#--11實驗--任務1(建立Windows窗體應用程式)--設計一個窗體--單擊按鈕時,在標籤上顯示當前系統時間 .

/* (程式頭部註釋開始)    * 程式的版權和版本宣告部分    * Copyright (c) 2011, 煙臺大學計算機學院學生     * All rights reserved.    * 檔名稱:設計一個窗體   * 版 本 號: V1.0     * 對任務

C#--2實驗--任務12--輸入10個數存入陣列中,然後實現氣泡排序

/* (程式頭部註釋開始) * 程式的版權和版本宣告部分 * Copyright (c) 2011, 煙臺大學計算機學院學生  * All rights reserved. * 檔名稱:輸入10個數存入陣列中,然後實現氣泡排序 * 作 者: 雷恆鑫  * 完成日期: 20

C#--11實驗--任務1(建立Windows窗體應用程式)--設計一個窗體--單擊按鈕時,在標籤上顯示當前系統時間

Form.cs /* (程式頭部註釋開始) * 程式的版權和版本宣告部分 * Copyright (c) 2011, 煙臺大學計算機學院學生 * All rights reserved. * 檔名稱:設計一個窗體 * 作 者: 雷恆鑫

2015C++10、11補充實踐專案 繼承和派生

【專案0 - 是春哥啊】參考解答 請在下面程式的橫線處填上適當內容,以使程式完整,並使程式的輸出為: Name: 春哥 Grade: 19 #include <iostream> #

201521123088《Java程序設計》12學習總結

正則 ted 底層 文本文 throw filename ise 網頁 編程 1. 本周學習總結 1.1 以你喜歡的方式(思維導圖或其他)歸納總結多流與文件相關內容。 2. 書面作業 將Student對象(屬性:int id, String name,int age,

2014秋C++ 8項目 分支程序設計

解法 cas 關系表達式 com 人月 bre 不定 cor 決定 課程主頁在http://blog.csdn.net/sxhelijian/article/details/39152703。課程資源在雲學堂“賀老師課堂”同步展示,使用的帳號請到課程主頁中查看。閱讀並驗證

c# 12節 分支語句if、switch、三位運算符

等於 readline 比較 適應 som 提示 con 大於等於 int 本節內容: 1:流程控制語句分類 2:分支語句之if的使用 3:分支語句之switch的使用 4:分支語句之三位運算符 5:分支語句比較 1:流程控5:制語句分類 2:

讀書筆記:CLR var C# 12

clr data ase com esp ring 不能 program lcs 1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.L

2018面向物件程式設計(Java)12學習指導及要求

2018面向物件程式設計(Java)第12周學習指導及要求 (2018.11.15-2018.11.18)   學習目標 (1) 掌握Java GUI中框架建立及屬性設定中常用類的API; (2) 掌握Java GUI中2D圖形繪製常用類的API; (3) 瞭解Java GUI中2D圖形

C++7任務3-輸出星號圖詳解示例

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

C++15專案3 -約瑟夫環

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

201771010141 強 面向對象程序設計(Java)12作業

setfont app gety 用法 draw true eight nds string 實驗十二 圖形程序設計 實驗時間 2018-11-14 1、實驗目的與要求 (1) 掌握Java GUI中框架創建及屬性設置中常用類的API; (2) 掌握Java GUI中2D

12預習作業

with pack 可能 操作 dex util -c nal pointer 6.為如下代碼加上異常處理 byte[] content = null; FileInputStream fis = new FileInputStream("testfis.txt"); in