




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、使用使用VC+6.0VC+6.0調試程序調試程序調試程序v調試運行v單步跟蹤v單步跳進跟蹤v觀察自動變量v觀察其他變量v停止調試v1:打開jiecheng項目(雙擊jiecheng.dsw文件)v2:build該項目,確定程序可以運行v3:調試運行階乘程序v4:設置斷點v5:再次調試運行程序v6:使用單步執行程序到結束1:打開jiecheng項目2:Build該項目,確定程序可以運行3:調試運行階乘程序Go4:設置斷點v將鼠標停留在程序的第8行,在第8行的任意地方單擊鼠標左鍵(第8行即“i = i*4;”)v在工具欄上選擇 按鈕,為第8行設置斷點,以便讓程序在此處暫停運行5:再次調試運行階乘程
2、序v注意觀察,現在調試運行程序會如何?Go5:再次調試運行階乘程序(續)程序暫停之處調試(Debug)工具:控制程序前進步伐查看程序當前狀態6:使用單步執行到程序結束v設置斷點以后,調試運行程序時,程序開始執行,并且運行到斷點處暫停下來,此時我們有機會觀察程序的運行情況,并且診斷程序目前的狀態是否如我們所預期的那樣。v不過我們先不著急觀察程序的狀態,而是來看看如何控制程序的運行,以便在我們需要的時候讓程序暫停下來,并且以我們需要的方式走走停停!6:使用單步執行到程序結束v程序停下來了,如何讓程序從暫停的地方繼續向前執行?v方法是使用單步執行手段(Step Over)讓程序向前走一步停止調試停止
3、調試并重新啟動調試單步執行當前位置熟悉調試工具欄和菜單(只在調試運行時出現)對比調試運行時出現的調試菜單“Debug”和調試工具欄,根據圖標查找對應項觀察自動變量自動變量觀察變量的值及其隨程序運行時的變化情況v設置斷點,調試運行程序,此時程序暫停在斷點處等待v選擇Debug菜單,找到最后一項“Quick Watch”并點擊輸入想要觀察的變量變量名變量的值點擊Add Watch點擊Add watch,看到如下畫面調試觀察每一步驟變量i的值v點擊單步執行按鈕或者菜單,程序則向前單獨運行一個步驟v每向前執行一步,就會暫停下來,這樣我們就有充足的時間觀察所關心的變量名稱v觀察變量i的值的情況注意在調試
4、過程中v斷點不能設置在空白行上面v添加斷點和刪除斷點的方法一樣v一個程序中可以設置多個斷點v按下F5鍵可以讓程序從當前位置向前執行,直到遇見下一個斷點或者程序結束相關C語言基礎知識指針:結構體:指針新建新建Visual C+程序程序四、利用已有的程序編寫新程序四、利用已有的程序編寫新程序無論是控制臺程序,或者是無論是控制臺程序,或者是Windows窗口程序,窗口程序,Visual C+都會要求有對都會要求有對應的項目文件。而且在大多數情況下,應的項目文件。而且在大多數情況下,C程序的基本框架都是一致的,例程序的基本框架都是一致的,例如:都有主函數等等。所以在編寫一個新的程序時,可以利用以前編寫
5、過如:都有主函數等等。所以在編寫一個新的程序時,可以利用以前編寫過的程序,其操作方法有兩種。的程序,其操作方法有兩種。(1)程序復用操作)程序復用操作將已有的程序復用到新程序上的方法很簡單,就是將程序內容通過將已有的程序復用到新程序上的方法很簡單,就是將程序內容通過“復制復制粘貼粘貼”實現。實現。(2)項目復用操作)項目復用操作打開已有的項目文件,將原來的文件刪除,利用項目管理增加新程序文件打開已有的項目文件,將原來的文件刪除,利用項目管理增加新程序文件或資源元素等。或資源元素等。 新建新建Visual C+程序程序五、項目管理五、項目管理無論項目是否建立,只要開始程序的編譯、鏈接、運行或調試
6、過程,無論項目是否建立,只要開始程序的編譯、鏈接、運行或調試過程,Visual C+就會按項目管理方式進行控制。就會按項目管理方式進行控制。例如:當使用文件新建方式建立一個源程序文件后,只要開始編譯則例如:當使用文件新建方式建立一個源程序文件后,只要開始編譯則Visual C+會自動提示創建項目。會自動提示創建項目。 新建新建Visual C+程序程序地址和指針的概念地址和指針的概念一、指針概述:一、指針概述:1 1、“&” &” :地址運算符:地址運算符2. “2. “* *” ” :指針運算符,取其指向的:指針運算符,取其指向的內容內容: exp:exp: &a:
7、&a: 變量變量a a的地址:的地址: * *p: p: 變量變量p p的內容;的內容; 注:注: “ “&” &” 不能施加在常數,常量和表達式上;不能施加在常數,常量和表達式上;二、指針變量:二、指針變量: 存放某種變量地址的變量稱為指針存放某種變量地址的變量稱為指針變量。變量。 1035.ab20102012p2010q2012因此,在因此,在C語言中,將地語言中,將地址形象化地稱為址形象化地稱為指針指針定義一個指針變量定義一個指針變量指針變量的定義一般形式為:指針變量的定義一般形式為:基類型基類型*指針變量名指針變量名;例如:例如:int i, j, int i
8、, j, * *pi, pi, * *pj;pj; float x, y, float x, y, * *p1, p1, * *p2;p2;指針變量的賦值:使得指針變量指向變量指針變量的賦值:使得指針變量指向變量指針變量名指針變量名& &變量名變量名; ;如:如: pi=&i; pj=&j; p1=&y; p2=&x;pi=&i; pj=&j; p1=&y; p2=&x;注意:指針變量只能存放指針(地址),且只能是相同類型變量的地址。注意:指針變量只能存放指針(地址),且只能是相同類型變量的地址。例如,指針變量例如
9、,指針變量pipi、pjpj,只能接收,只能接收intint型、型、p1, p2p1, p2只能接收只能接收floatfloat型的地址,型的地址,否則出錯否則出錯。結構體指針變量的引用在程序中,可以用:在程序中,可以用:*指針變量名代替其所指變量。指針變量名代替其所指變量。如若如若:int i, *p; p=&i;則則 i=5;與與*p=5;的作用相同,即可用的作用相同,即可用*p代替代替i,這里這里*號稱為指號稱為指針運算符(或稱為間接訪問運算符)針運算符(或稱為間接訪問運算符)指針變量作為函數參數實參:變量地址或已賦值的指針變量,形參:指針變量實參:變量地址或已賦值的指針變量,形
10、參:指針變量功能:地址傳送方式,會將改變后的值帶回。功能:地址傳送方式,會將改變后的值帶回。例例10.3通過函數調用實現例通過函數調用實現例10.2的功能。的功能。swap(int *p1, int *p2)int temp;temp=*p1; *p1=*p2; *p2=temp;main()int a, b, *pointer1,*pointer2;scanf(%d%d,&a,&b);pointer1=&a; pointer2=&b;if(ab) swap(&a,&b);printf(n%d,%d,a,b);數組與指針1.1.概念概念數組的指針
11、數組的指針數組在內存中的起始地址,用數組在內存中的起始地址,用數組名表示數組名表示2.2.指向數組的指針變量指向數組的指針變量-賦于數組名的指針變賦于數組名的指針變量量例如,例如,int a 10, int a 10, * *p=a (p=a (或或* *p=&a0);p=&a0);或者:或者: int a 10, int a 10, * *p;p; p pa;a;3.3.通過指針引用數組元素通過指針引用數組元素如果有如果有“int a 10,int a 10,* *p=a;” p=a;” ,則:,則:(1 1)p+i=a+i=&aip+i=a+i=&ai。 (
12、2 2)* *(p+i)=(p+i)=* *(a+i)=ai(a+i)=ai。(3 3)pipi* *(p+i)(p+i)aiai。注意注意:p+1p+1指向數組的下一個元素,而不是簡單指向數組的下一個元素,而不是簡單地 使 指 針 變 量地 使 指 針 變 量 p p 的 值的 值 + 1+ 1 。 其 實 際 變 化 為。 其 實 際 變 化 為p+1p+1* *size(sizesize(size為一個元素占用的字節數)。為一個元素占用的字節數)。例如,假設指針變量例如,假設指針變量p p的當前值為的當前值為30003000,則,則p+1p+1為為3000+13000+1* *2=300
13、22=3002,而不是,而不是30013001用數組名作為函數參數用數組名作為函數參數形參:數組或指針變量形參:數組或指針變量實參:數組名或指向數組的指針變量實參:數組名或指向數組的指針變量傳遞方式:地址傳送方式傳遞方式:地址傳送方式作用:若函數中對數組作了修改,則調用作用:若函數中對數組作了修改,則調用函數中的數組也會作同樣的修改函數中的數組也會作同樣的修改指向函數的指針指向函數的指針1.1.函數指針的概念函數指針的概念一個函數在編譯時,被分配了一個入口地址,一個函數在編譯時,被分配了一個入口地址,這個地址就稱為該函數的指針。這個地址就稱為該函數的指針。可以用一個指針變量指向一個函數,然后通
14、過可以用一個指針變量指向一個函數,然后通過該指針變量調用此函數。該指針變量調用此函數。 2.2.指向函數的指針變量指向函數的指針變量 (1 1)定義格式)定義格式 函數類型函數類型 ( (* *指針變量指針變量)( )( ); 注意:注意:“* *指針變量指針變量”外的括號不能缺,否則外的括號不能缺,否則成了返回指針值的函數。成了返回指針值的函數。 例如,例如,int (int (* *fp)(); /fp)(); /* * fp fp為指向為指向intint函數的指針變量函數的指針變量* */ /(2 2)賦值)賦值 函數名代表該函數的入口地址。因此,可函數名代表該函數的入口地址。因此,可用
15、函數名給指向函數的指針變量賦值。用函數名給指向函數的指針變量賦值。 指向函數的指針變量指向函數的指針變量&函數名函數名; ; 注意:函數名后不能帶括號和參數;函注意:函數名后不能帶括號和參數;函數名前的數名前的“&”&”符號是可選的。符號是可選的。(3)調用格式調用格式 (*函數指針變量函數指針變量)(實參表實參表)3.指向函數的指針變量作函數參數指向函數的指針變量作函數參數 指向函數的指針變量的常用用途之一,就是將函數指針作指向函數的指針變量的常用用途之一,就是將函數指針作參數,傳遞到其它函數。參數,傳遞到其它函數。 注意:對指向函數的指針變量,諸如注意:對指向函數的
16、指針變量,諸如p+i、p+/p-等運算是等運算是沒有意義的。沒有意義的。例例10.24 設有一個函數設有一個函數process,在調用它時,每次實現不同的功,在調用它時,每次實現不同的功能。輸入能。輸入a和和b兩個數,第一次調用時找出兩個數,第一次調用時找出a與與b中的大者,第中的大者,第 二次找出小者,第三次求和。二次找出小者,第三次求和。#includevoid main()int max(int,int);int min(int,int);int add(int,int);int process(int, int, int (*fun)();int a,b;printf(enter a
17、and b:);scanf(%d%d,&a,&b);printf(nmax=);process(a,b,max);printf(nmin=);process(a,b,min);printf(nsum=);process(a,b,add);max(int x, int y)return xy?x:y;min(int x, int y)return xy?y:x;add(int x, int y)return x+y;process(int x, int y, int (*fun)(int,int) /*fun是一個指向函數是一個指向函數的指針,該函數是一個有兩個整型參數的返回整型
18、值的函數的指針,該函數是一個有兩個整型參數的返回整型值的函數*/int result;result=(*fun)(x,y);printf(%dn,result);返回指針值的函數返回指針值的函數一個函數可以返回一個一個函數可以返回一個intint型、型、floatfloat型、型、charchar型的數據,也可以返回一個指針類型的數型的數據,也可以返回一個指針類型的數據。據。 返回指針值的函數(簡稱指針函數)的定返回指針值的函數(簡稱指針函數)的定義格式如下:義格式如下: 函數類型函數類型 * *函數名函數名( (形參表列形參表列) )例如:例如:int int * *a(int x,int
19、y);a(int x,int y);該函數的函數名為該函數的函數名為a a,返回的是一個整型的指針。,返回的是一個整型的指針。指針數組指針數組指針數組的概念指針數組的概念 數組的每個元素都是一個指針數據。指針數數組的每個元素都是一個指針數據。指針數組比較適合用于指向多個字符串,使字符串處理組比較適合用于指向多個字符串,使字符串處理更加方便、靈活。更加方便、靈活。 數據類型數據類型 * *數組名數組名 元素個數元素個數 例如:例如: int int * *p4; char p4; char * *string10;string10;p指向數組a易混淆的問題v*p+,*p(+),*(+p),(*p
20、)v設P指向a數組中的第i個元素: *(p-)=ai-; *(-p)=a-i; *(+p)=a+i.結結 構構 體體例:例:描述一個學生的姓名、學號、性別、年齡。描述一個學生的姓名、學號、性別、年齡。每個學生都有這樣的屬性,它們構成一個描述學生具體情每個學生都有這樣的屬性,它們構成一個描述學生具體情況的一個整體。而每個屬性又是一個基本的類型,本例中況的一個整體。而每個屬性又是一個基本的類型,本例中可分別用字符數組、長整型、字符型、和整型來描述。可分別用字符數組、長整型、字符型、和整型來描述。一、結構體類型的定義一、結構體類型的定義結構體概念的引入結構體概念的引入數據的描述:數據的描述:基本類型
21、基本類型:整型、實型、字符型。:整型、實型、字符型。數組數組:屬于同一種類型的元素的集合。:屬于同一種類型的元素的集合。有時,需要用不同的數據類型來描述一個事物的各方面屬性,有時,需要用不同的數據類型來描述一個事物的各方面屬性,故此,故此,C語言引入了語言引入了結構體結構體的概念。的概念。struct struct 結構體類型名結構體類型名 類型標識符類型標識符 成員名成員名1 1; 類型標識符類型標識符 成員名成員名2 2; 類型標識符類型標識符 成員名成員名n n;;結構體類型的定義結構體類型的定義如:如:struct student struct student char name10;
22、 char name10; long id; long id; char gender; char gender; int age; int age; 注意:注意: struct student struct student 應作為一個類型整體,應作為一個類型整體, name10name10、idid、gendergender、ageage都是其成員。都是其成員。 structstruct及花括號后的及花括號后的“;”不能省。不能省。定義結構體類型,定義結構體類型, 描述下列數據描述下列數據 struct studentstruct student int no int no; / /* *學
23、號學號* */ / char namechar name1010; / /* *姓名姓名* */ / char sexchar sex; / /* *性別性別* */ / int ageint age; / /* *年齡年齡* */ / float score10float score10; / /* *成績成績* */ / ;結構體類型的舉例結構體類型的舉例(1) (1) 學生情況學生情況: : 包含學生的學號、包含學生的學號、 姓名、姓名、 性別、性別、 年齡、年齡、1010門課程成績:門課程成績:結構體類型可以嵌套定義結構體類型可以嵌套定義 即一個結構體類型中的某些成員又是其他結構體類型
24、即一個結構體類型中的某些成員又是其他結構體類型注意注意例如,對已定義的結構體類型例如,對已定義的結構體類型struct student struct student ,可以定義結構體,可以定義結構體變量:變量: struct student zhang ,stu1struct student zhang ,stu1; 二、結構體變量二、結構體變量結構體變量的定義結構體變量的定義1.1.先定義結構體類型,先定義結構體類型, 再定義結構體變量再定義結構體變量格式:格式: struct struct 結構體名結構體名 結構體變量名表;結構體變量名表;三種方法:三種方法:2.2.在定義結構體類型的同時
25、定義變量在定義結構體類型的同時定義變量例如:例如:struct studentstruct student char name10; char name10; char sex; char sex; int age; int age; float score; float score; stu1,stu2; stu1,stu2;格式:格式: struct struct 結構體類型名結構體類型名 類型標識符類型標識符 成員名成員名1 1; 類型標識符類型標識符 成員名成員名2 2; 類型標識符類型標識符 成員名成員名n n; 變量名表變量名表; ;3. 3. 用匿名形式直接定義結構體類型變量(不
26、出現結構體名)用匿名形式直接定義結構體類型變量(不出現結構體名)例如:例如:structstruct char name10; char name10; char sex; char sex; int age; int age; float score; float score; stu1,stu2; stu1,stu2;格式:格式:structstruct 類型標示符類型標示符 成員名成員名1 1; 類型標示符類型標示符 成員名成員名2 2; 類型標示符類型標示符 成員名成員名n n; 變量名表變量名表; ;(1 1)類型與變量是不同的概念,不要混同。對結構體變量來說,在定)類型與變量是不同
27、的概念,不要混同。對結構體變量來說,在定義時一般先定義一個結構體類型,然后定義變量為該類型。只能對變量義時一般先定義一個結構體類型,然后定義變量為該類型。只能對變量賦值、存取或運算,而不能對一個類型賦值、存取或運算。在編譯時,賦值、存取或運算,而不能對一個類型賦值、存取或運算。在編譯時,對類型是不分配存儲空間的,只對變量分配存儲空間。對類型是不分配存儲空間的,只對變量分配存儲空間。(2 2)對結構體中的成員,可以單獨使用,它的作用相當于普通變量。)對結構體中的成員,可以單獨使用,它的作用相當于普通變量。(3 3)成員也可以是一個結構體變量。)成員也可以是一個結構體變量。(4 4)成員名可與程序
28、中的變量同名,兩者不代表同一對象。)成員名可與程序中的變量同名,兩者不代表同一對象。 結構體的說明結構體的說明例。定義結構體變量例。定義結構體變量stu1: stu1: struct student stu1; struct student stu1; stu1.age=20; stu1.age=20; scanf(%f,&stu1.score); scanf(%f,&stu1.score);stu1.age stu1.age 表示引用結構體變量表示引用結構體變量stu1stu1中的中的ageage成員,因該成員的成員,因該成員的類型為類型為intint型,所以可以對它執行任何
29、型,所以可以對它執行任何intint型變量可以執行的運型變量可以執行的運算。算。結構體變量的使用結構體變量的使用結構體變量一般不整體引用,而是引用其成員變量。結構體變量一般不整體引用,而是引用其成員變量。成員變量引用格式成員變量引用格式結構體變量名結構體變量名. .成員名成員名其中的圓點運算符稱為成員運算符,它的運算級別是最高的。其中的圓點運算符稱為成員運算符,它的運算級別是最高的。(1) (1) 結構體類型變量的各成員(分量)必須單獨引用結構體類型變量的各成員(分量)必須單獨引用, ,成員運算符成員運算符“”具有最高優先級。具有最高優先級。(2) (2) 不允許對結構體變量進行整體的輸入輸出
30、不允許對結構體變量進行整體的輸入輸出 如:如:scanf(“%s%c%d%f”,&stu1); scanf(“%s%c%d%f”,&stu1); (3) (3) 如果結構體變量類型相同,可以互相賦值。如果結構體變量類型相同,可以互相賦值。 stu1=stu2; stu1=stu2; (4) (4) 嚴格區分類型與變量的概念。嚴格區分類型與變量的概念。 (5) (5) 如果結構體成員本身又是結構體類型的,則可繼續使用成員運算如果結構體成員本身又是結構體類型的,則可繼續使用成員運算符取結構體成員的結構體成員,逐級向下,引用最低一級的成員。程符取結構體成員的結構體成員,逐級向下,引用
31、最低一級的成員。程序只能對最低一級的成員進行運算。例如,對序只能對最低一級的成員進行運算。例如,對stu1stu1某些成員的訪問:某些成員的訪問: stu1.birthday.day=23stu1.birthday.day=23; stu1.birthday.month=8stu1.birthday.month=8; stu1.birthday.year=1985stu1.birthday.year=1985; 說明說明結構體變量的初始化結構體變量的初始化結構體變量可以在定義時初始化。結構體變量可以在定義時初始化。格式格式struct struct 結構體名結構體名 成員表;成員表; 結構體變量結構體變量=初始化數據表初始化數據表 ;例例 struct studentstruct student char name10; ch
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公益類國企混合所有制改革路徑實踐與探索
- 能源政策的績效評估與技術創新-洞察闡釋
- 金融科技的法律挑戰與合規發展
- 金融風險管理與投資策略案例
- 金融風控中的決策樹算法研究
- 湖南省長沙市雅禮集團2025年中考語文一模試卷及答案
- 醫院藥劑調配管理制度
- 園區團隊標識管理制度
- 工地管制刀具管理制度
- 公司員工食宿管理制度
- 2023-2024學年廣東省中山市高二數學第一學期期末考試試題含解析
- 《荷花淀》說課課件
- 房屋建筑學中國建筑發展史
- li3000c中文操作手冊
- 國開中國當代文學專題形考任務2-3-5-6答案
- 醫療安全(不良)事件匯總登記表(科室)
- TRIZ矛盾矩陣48參數
- 學校超市經營服務方案
- 列車員初級技能鑒定復習題庫
- 解讀血氣分析-課件
- 設備點檢記錄表
評論
0/150
提交評論