2013級C++第12周程式閱讀專案——理解函式
第一部分 重重重要的技能:掌握單步執行,跟蹤觀察執行中變數的變化
今後在除錯程式時,儘可能利用好除錯功能,這是職業的要求。
第二部分 閱讀程式碼,理解函式的用法
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”,出錯的原因是_____________
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每次呼叫時被不同實際型別替代。
相關推薦
2013級C++第12周程式閱讀專案——理解函式
課程首頁在:http://blog.csdn.net/sxhelijian/article/details/11890759第一部分 重重重要的技能:掌握單步執行,跟蹤觀察執行中變數的變化今後在除錯程式時,儘可能利用好除錯功能,這是職業的要求。第二部分 閱讀程式碼,理解函式的
2013級C++第12周(春)項目——成員的訪問屬性、多重繼承
更新 日期 報告 時間 上下 cin out 讀取 edate 課程首頁在:http://blog.csdn.net/sxhelijian/article/details/11890759,內有完整教學方案及資源鏈接第一部分 程序閱讀 1、閱讀程序。分析類中成員的訪問屬性
2015級C++第7周項目 友元、共享數據保護、多文件結構
執行 pub 程序 block tails 一個 date類 能夠 tracking 【項目1-成員函數、友元函數和一般函數有差別】參考解答 (1)閱讀以下的程序,體會凝視中的說明(要執行程序,請找到課程主頁並復制代碼) //例:使用成員函數、友
2015級C++第2周實踐專案
【專案1 - 宣告“主權”】 你已經是CSDN部落格主了,用IT人特有的方式,編一段程式,在螢幕上輸出你想說的話,按要求釋出博文,作為我們的開山之作。 【專案2 - 胖子不想說體重】參考解答 成年男性的標準體重公式為: 標準體重(kg)=身高(c
C#--第12周實驗--任務2(設計一個窗體)--開啟對話方塊
/* (程式頭部註釋開始) * 程式的版權和版本宣告部分 * Copyright (c) 2011, 煙臺大學計算機學院學生 * All rights reserved. * 檔名稱:訊息對話方塊 * 作 者: 雷恆鑫 * 完成日期: 2
2015級C++第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. * 檔名稱:設計一個窗體 * 作 者: 雷恆鑫
2015級C++第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