語言深入講解-第2章編程實(shí)踐_第1頁
語言深入講解-第2章編程實(shí)踐_第2頁
語言深入講解-第2章編程實(shí)踐_第3頁
語言深入講解-第2章編程實(shí)踐_第4頁
語言深入講解-第2章編程實(shí)踐_第5頁
已閱讀5頁,還剩71頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

上章回顧宏定義特點(diǎn)和注意細(xì)節(jié)條件編譯特點(diǎn)和主要用處文件包含的路徑查詢規(guī)則C語言擴(kuò)展宏定義的用法C語言編程實(shí)踐

第二章預(yù)習(xí)檢查異或的運(yùn)算符是什么位段指針特性C語言關(guān)鍵字本章結(jié)構(gòu)指針特性C語言編程實(shí)踐C語言常犯錯(cuò)誤C語言關(guān)鍵詞C語言編程調(diào)試C語言編程要點(diǎn)位段位運(yùn)算課程目標(biāo)了解位運(yùn)算的實(shí)際應(yīng)用。了解C語言幾個(gè)重要關(guān)鍵詞的特性和他們之間區(qū)別熟悉C語言編程要點(diǎn)熟悉C語言常見的語法錯(cuò)誤以及解決方法了解如何去定位錯(cuò)誤以及解決錯(cuò)誤2C語言編程實(shí)踐

位運(yùn)算指針特性C語言關(guān)鍵詞C語言幾個(gè)以混淆的概念C語言編程易犯毛病集合2.1位運(yùn)算

按位與運(yùn)算按位或運(yùn)算按位異或運(yùn)算求反運(yùn)算左移運(yùn)算右移運(yùn)算2.1位運(yùn)算

位運(yùn)算符的含義位運(yùn)算是指進(jìn)行二進(jìn)制位的運(yùn)算。功能:c語言提供對(duì)內(nèi)存單元的二進(jìn)制位的操作,使得c語言能夠編寫系統(tǒng)軟件.位運(yùn)算符&:按位與|:按位或^:按位異或~

:取反<<:左移>>:右移2.1位運(yùn)算

要點(diǎn):位運(yùn)算除~以外,均為二目運(yùn)算;

運(yùn)算對(duì)象只能為整型或字符型數(shù)據(jù).

各個(gè)位運(yùn)算符號(hào)的使用:2.1.1按位與運(yùn)算

按位與──&

格式:x&y

主要用途:取(或保留)1個(gè)數(shù)的某(些)位,其余各位置0規(guī)則:對(duì)應(yīng)位均為1時(shí)才為1,否則為0:3&9=1。例如,3&9=1:0011&1001 ──── 0001=1

2.1.2按位或運(yùn)算

按位或──|

格式:x|y

主要用途:參與運(yùn)算的兩數(shù)各對(duì)應(yīng)的二進(jìn)位相或。只要對(duì)應(yīng)的二個(gè)二進(jìn)位有一個(gè)為1時(shí),結(jié)果位就為1規(guī)則::對(duì)應(yīng)位均為0時(shí)才為0,否則為1:3|9=11。 例如,3|9=11:0011 |1001 ──── 1011=11

2.1.2按位異或運(yùn)算

按位異或──^

格式:x^y規(guī)則:對(duì)應(yīng)位相同時(shí)為0,不同時(shí)為1:3^9=10。主要用途:使1個(gè)數(shù)的某(些)位翻轉(zhuǎn)(即原來為1的位變?yōu)?,為0的變?yōu)?),其余各位不變例子:

00001001^0000010100001100(十進(jìn)制為12)2.1.3求反運(yùn)算

求反──~

格式:~y規(guī)則:各位翻轉(zhuǎn),即原來為1的位變成0,原來為0的位變成1:在IBM-PC機(jī)中,~0=0xffff,~9=0xfff6。主要用途:間接地構(gòu)造一個(gè)數(shù),以增強(qiáng)程序的可移植性

2.1.4左移運(yùn)算

按位左移──<<

格式:x<<位數(shù)規(guī)則:使操作數(shù)的各位左移,低位補(bǔ)0,高位溢出:5<<2=20。

2.1.5右移運(yùn)算

按位右移──>>

格式:x>>位數(shù)規(guī)則:使操作數(shù)的各位右移,移出的低位舍棄;高位:對(duì)無符號(hào)數(shù)和有符號(hào)中的正數(shù),補(bǔ)0;有符號(hào)數(shù)中的負(fù)數(shù),取決于所使用的系統(tǒng):補(bǔ)0的稱為“邏輯右移”,補(bǔ)1的稱為“算術(shù)右移”。例如,20>>2=5說明x、y和“位數(shù)”等操作數(shù),都只能是整型或字符型數(shù)據(jù)。除按位取反為單目運(yùn)算符外,其余均為雙目運(yùn)算符。參與運(yùn)算時(shí),操作數(shù)x和y,都必須首先轉(zhuǎn)換成二進(jìn)制形式,然后再執(zhí)行相應(yīng)的按位運(yùn)算。例如,5<<2=20:0101→10100,20>>2=5:10100→00101。2.1.6位運(yùn)算例子例2

題目:從鍵盤上輸入1個(gè)正整數(shù)給int變量num,輸出由8~11位構(gòu)成的數(shù)(從低位、0號(hào)開始編號(hào))基本思路:(1)使變量num右移8位,將8~11位移到低4位上。(2)構(gòu)造1個(gè)低4位為1、其余各位為0的整數(shù)。(3)與num進(jìn)行按位與運(yùn)算。

/*程序功能:輸出一個(gè)整數(shù)中由8~11位構(gòu)成的數(shù)*/main(){intnum,mask;printf("Inputaintegernumber:");scanf("%d",&num);num>>=8; /*右移8位,將8~11位移到低4位上*/mask=~(~0<<4); /*間接構(gòu)造1個(gè)低4位為1、其余各位為0的整數(shù)*/printf("result=0x%x\n",num&mask);}程序運(yùn)行情況:Inputaintegernumber:1000←┘result=0x3程序說明:~(~0<<4)按位取0的反,為全1;左移4位后,其低4位為0,其余各位為1;再按位取反,則其低4位為1,其余各位為0。這個(gè)整數(shù)正是我們所需要的。2.1.6位運(yùn)算例子例1

題目:從鍵盤上輸入1個(gè)正整數(shù)給int變量num,按二進(jìn)制位輸出該數(shù)。

#include"stdio.h"main(){intnum,mask,i;printf("Inputaintegernumber:");scanf("%d",&num);mask=1<<15;/*構(gòu)造1個(gè)最高位為1、其余各位為0的整數(shù)(屏蔽字)*/printf("%d=",num);for(i=1;i<=16;i++){ putchar(num&mask?’1’:‘0’); /*輸出最高位的值(1/0)*/ num<<=1; /*將次高位移到最高位上*/ if(i%4==0)putchar(‘,’); /*四位一組,用逗號(hào)分開*/}printf("\bB\n");}

程序運(yùn)行情況:

Inputaintegernumber:10001000=0000,0011,1110,1000B階段小節(jié)位運(yùn)算通常可以做哪些操作位域的含義是什么位域的使用要點(diǎn)有哪些2.3指針特性數(shù)據(jù)指針數(shù)組與動(dòng)態(tài)申請(qǐng)2.3.1數(shù)據(jù)指針實(shí)例:

unsignedchar*p=(unsignedchar*)0xF000FF00;*p=11;數(shù)據(jù)指針的運(yùn)算指針自增自減操作的結(jié)果取決于指針指向的數(shù)據(jù)類別int*p=(int*)0xF000FF00;p++(或++p)p=p+sizeof(int),p--(或--p)->p=p-sizeof(int)。2.4C語言關(guān)鍵詞consttypedef與definedefine與enumstatic2.4.1constconst--只讀說說以下的區(qū)別constinta;intconsta;constint*a;int*consta;intconst*aconst;Const的優(yōu)勢(shì)關(guān)鍵字const的作用是為給讀你代碼的人傳達(dá)非常有用的信息通過給優(yōu)化器一些附加的信息,使用關(guān)鍵字const也許能產(chǎn)生更緊湊的代碼防止便利被無意的代碼修改2.4.2typedef與define#define預(yù)處理指令在編譯預(yù)處理時(shí)進(jìn)行簡(jiǎn)單的替換,不作正確性檢查

不需要再在內(nèi)存中分配變量空間調(diào)試程序無法檢查用#define說明的常量用#under指令取消typedef聲明一個(gè)新的類型名代替已有的類型名在編譯時(shí)處理的不實(shí)際分配內(nèi)存空間2.4.2typedef與define#define實(shí)例#defineyour_intint*

your_inta,b;結(jié)果相當(dāng)于int*a,b;只是簡(jiǎn)單的宏替換即int*a;intb;typedef例子typedefint*your_int;

your_inta,b

結(jié)果/a,b都為指向int的指針即int*a;int*b;2.4.3define與enum#enum特點(diǎn)用enum關(guān)鍵字說明的常量由編譯程序自動(dòng)生成,程序員不需要用手工對(duì)常量一一賦值。用enum關(guān)鍵字說明常量使程序更清晰易讀,因?yàn)樵诙xenum常量的同時(shí)也定義了一個(gè)枚舉類型標(biāo)識(shí)符。在調(diào)試程序時(shí)通常可以檢查枚舉常量。需要分配內(nèi)存來存儲(chǔ)常量

2.4.3define與enum#enum例子

enumError_Code{OUT_OF_MEMORY,

INSUFFICIENT_DISK_SPACE,

LOGIC_ERROR,

FILE_NOT_FOUND};

2.4.3define與enum#enum相對(duì)#define的優(yōu)勢(shì)使程序更容易維護(hù)使程序更易讀使程序調(diào)試起來更方便2.4.4staticstatic的特點(diǎn)本地的全局變量設(shè)置變量的鏈接屬性設(shè)置變量的存儲(chǔ)域static的作用在函數(shù)體,一個(gè)被聲明為靜態(tài)的變量在這一函數(shù)被調(diào)用過程中維持其值不變。在模塊內(nèi)(但在函數(shù)體外),一個(gè)被聲明為靜態(tài)的變量可以被模塊內(nèi)所用函數(shù)訪問,但不能被模塊外其它函數(shù)訪問。在模塊內(nèi),一個(gè)被聲明為靜態(tài)的函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用2.5C語言編程要點(diǎn)

C語言存儲(chǔ)空間布局

Heap與stack

2.5.1

C程序存儲(chǔ)空間布局C語言的組成正文段

初始化數(shù)據(jù)段(數(shù)據(jù)段)非初始化數(shù)據(jù)段(bss段)棧堆2.5.1

C程序存儲(chǔ)空間布局C語言存儲(chǔ)布局棧|\|//|\|堆未初始化初始化正文段2.5.2Heap與stackHeap與stackStack的空間由操作系統(tǒng)自動(dòng)分配/釋放,Heap上的空間手動(dòng)分配/釋放。Stack空間有限,Heap是很大的自由存儲(chǔ)區(qū)內(nèi)存分配域malloc函數(shù)分配的內(nèi)存空間即在堆上程序在編譯期對(duì)變量和函數(shù)分配內(nèi)存都在棧上進(jìn)行程序運(yùn)行過程中函數(shù)調(diào)用時(shí)參數(shù)的傳遞也在棧上進(jìn)行內(nèi)存分配的方式從靜態(tài)存儲(chǔ)區(qū)域分配:(1)內(nèi)存在程序編譯的時(shí)候就已經(jīng)分配好,這塊內(nèi)存在程序的整個(gè)運(yùn)行期間都存在。動(dòng)態(tài)存儲(chǔ)區(qū):(1)在棧上創(chuàng)建。函數(shù)內(nèi)局部變量的存儲(chǔ)單元都可以在棧上創(chuàng)建效率很高,但是分配的內(nèi)存容量有限。(2)從堆上分配,亦稱動(dòng)態(tài)內(nèi)存分配。動(dòng)態(tài)內(nèi)存的使用非常靈活,但問題也最多。內(nèi)存分配的方式靜態(tài)存儲(chǔ)區(qū)只讀數(shù)據(jù)區(qū)(RO)已初始化讀寫數(shù)據(jù)區(qū)(RW)低地址高地址未初始化讀寫數(shù)據(jù)區(qū)(BSS)堆內(nèi)存的分配方式棧內(nèi)存的分配方式堆內(nèi)存棧內(nèi)存2.5.3動(dòng)態(tài)分配內(nèi)存——棧與堆

(1)棧內(nèi)存從高地址向地址分配(不同處理器,不同編譯系統(tǒng),會(huì)有所不同),堆內(nèi)存從低地址到高地址分配(2)在實(shí)現(xiàn)機(jī)制上:堆使用鏈表在實(shí)現(xiàn),而棧使用線性存儲(chǔ)方式(3)在內(nèi)存管理上,棧內(nèi)存是由編譯器管理的,而堆內(nèi)存是由程序調(diào)用具體的庫函數(shù)管理的2.5.3動(dòng)態(tài)分配內(nèi)存——棧與堆出棧,入棧,修改寄存器的值,滿棧、空棧(由處理器的硬件決定)棧內(nèi)存的使用,參數(shù)使用??臻g,自動(dòng)變量使用??臻g,返回值使用??臻g內(nèi)層函數(shù)可以使用外層函數(shù)的棧空間,但外層函數(shù)不能使用內(nèi)層函數(shù)的??臻g2.5.3動(dòng)態(tài)分配內(nèi)存——棧與堆堆內(nèi)存的分配和釋放是程序通過調(diào)用C語言的庫函數(shù)完成的堆內(nèi)存分配過程中,每次分配將返回一個(gè)當(dāng)前分配內(nèi)存指針,即堆內(nèi)存有多個(gè)入口點(diǎn),可單獨(dú)釋放,釋放時(shí)只需指定內(nèi)存的指針即可2.5.3動(dòng)態(tài)分配內(nèi)存——棧與堆指針1指針2指針3指針1指針4指針3指針1指針3指針42.5.3動(dòng)態(tài)內(nèi)存分配和釋放void*malloc(size_tsize);允許從空閑內(nèi)存池中分配連續(xù)內(nèi)存;size參數(shù)是一個(gè)所需字節(jié)數(shù)的整數(shù);返回一個(gè)指向void類型的指針,在使用時(shí)要根據(jù)需要做強(qiáng)制類型轉(zhuǎn)換.voidfree(void*pointer);若*pointer所指的內(nèi)存已經(jīng)被釋放,或未知的內(nèi)存地址,則調(diào)用free可能產(chǎn)生未知結(jié)果.

若*pointer是NULL,則free()不會(huì)起任何作用

malloc(例)#include<stdio.h>#include<malloc.h>voidmain(){ int*p,n,i,j,temp; printf("\nEnternumberofelementsinthearray:"); scanf("%d",&n); p=(int*)malloc(n*sizeof(int)); for(i=0;i<n;++i){ printf("\nEnterelementno.%d:",i+1); scanf("%d",p+i); } for(i=0;i<n-1;++i) for(j=i+1;j<n;++j) if(*(p+i)>*(p+j)){ temp=*(p+i); *(p+i)=*(p+j); *(p+j)=temp; } for(i=0;i<n;++i) printf("%d\n",*(p+i));}free()(例)#include<stdio.h>#include<stdlib.h>voidmain(){intnumber,i;int*ptr;printf("Howmanyints?");scanf("%d",&number);ptr=(int*)malloc(number*sizeof(int));if(ptr!=NULL){for(i=0;i<number;i++){ *(ptr+i)=i;}for(i=number;i>0;i--){printf("%d\n",*(ptr+(i-1)));}free(ptr);}else{printf("\nMemoryallocationfailed.\n");}}階段小節(jié)常見的位運(yùn)算符有哪些什么是數(shù)據(jù)指針如何定義一個(gè)函數(shù)指針const有那些特點(diǎn),主要應(yīng)用在哪些方面內(nèi)存堆的操作C強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)化要注意哪些方面2.6C語言編程易犯毛病集合書寫標(biāo)識(shí)符時(shí),忽略了大小寫字母的區(qū)別忽略了變量的類型,進(jìn)行了不合法的運(yùn)算將字符常量與字符串常量混淆忽略了“=”與“==”的區(qū)別忘記加分號(hào)多加分號(hào)輸入字符的格式與要求不一致switch語句中漏寫break語句忽視了while和do-while語句在細(xì)節(jié)上的區(qū)別定義數(shù)組時(shí)誤用變量2.6.1書寫標(biāo)識(shí)符時(shí),忽略了大小寫字母的區(qū)別分析注意:C認(rèn)為大寫字母和小寫字母是兩個(gè)不同的字符main()

{

inta=5;

printf("%d",A);}2.6.2忽略了變量的類型,進(jìn)行了不合法的運(yùn)算分析注意:整型變量a和b可以進(jìn)行求余運(yùn)算,而實(shí)型變量則不允許進(jìn)行“求余”運(yùn)算main()

{

floata,b;

printf("%d",a%b);}2.6.3將字符常量與字符串常量混淆分析charc;

c="a";注意:字符常量是由一對(duì)單引號(hào)括起來的單個(gè)字符字符串常量是一對(duì)雙引號(hào)括起來的字符序列以“\”作字符串結(jié)束標(biāo)志2.6.3將字符常量與字符串常量混淆分析charc;

c="a";注意:字符常量是由一對(duì)單引號(hào)括起來的單個(gè)字符字符串常量是一對(duì)雙引號(hào)括起來的字符序列以“\”作字符串結(jié)束標(biāo)志2.6.4忽略了“=”與“==”的區(qū)別分析if(a==3)a=b;

if(a=3)a=b;注意:“=”是賦值運(yùn)算符“==”是關(guān)系運(yùn)算符2.6.5忘記加分號(hào)分析

{a=1

b=2z=x+y;

t=z/100;

printf("%f",t);}2.6.6多加分號(hào)分析注意:復(fù)合語句的花括號(hào)后不應(yīng)再加分號(hào)for(I=0;I<5;I++);會(huì)出現(xiàn)什么問題???if(a%3==0);{z=x+y;

t=z/100;

printf("%f",t);};2.6.7switch語句中漏寫break語句分析注意:case與break的配對(duì)switch(grade){case'A':printf("85~100\n");

case'B':printf("70~84\n");

case'C':printf("60~69\n");

case'D':printf("<60\n");

default:printf("error\n");}2.6.8忽視了while和do-while語句在細(xì)節(jié)上的區(qū)別While語句分析do-while語句分析注意while循環(huán)是先判斷后執(zhí)行,而do-while循環(huán)是先執(zhí)行后判斷

do-while至少執(zhí)行一次main(){inta=0,i;

scanf("%d",&i);

while(i<=10)

{a=a+i;

i++;

}

printf("%d",a);}main(){inta=0,i;

scanf("%d",&i);

do{a=a+i;

i++;

}while(i<=10);

printf("%d",a);}2.6.9定義數(shù)組時(shí)誤用變量語句分析intn;

scanf("%d",&n);

inta[n];注意數(shù)組名后用方括號(hào)括起來的是常量表達(dá)式,可以包括常量和符號(hào)常量。C不允許對(duì)數(shù)組的大小作動(dòng)態(tài)定義

2.6.10數(shù)組最大下標(biāo)值語句分析main()

{ staticinta[10]={1,2,3,4,5,6,7,8,9,10};

printf("%d",a[10]);

}注意數(shù)組其下標(biāo)值由0開始

a數(shù)組有N個(gè)元素,最大下標(biāo)是N-12.6.11初始化數(shù)組時(shí),未使用靜態(tài)存儲(chǔ)語句分析inta[3]={0,1,2};

???與

staticinta[3]={0,1,2};

注意靜態(tài)存儲(chǔ)(static)數(shù)組和外部存儲(chǔ)(exterm)數(shù)組才能初始化

2.6.12同時(shí)定義了形參和函數(shù)中的局部變量語句分析

語句改正

intmax(x,y)intx,y,z;{ z=x>y?x:y;

return(z);}

intmax(x,y)intx,y;{

intz; z=x>y?x:y;

return(z);}

注意 形參應(yīng)該在函數(shù)體外定義 局部變量應(yīng)該在函數(shù)體內(nèi)定義2.6.13誤認(rèn)為形參值的改變會(huì)影響實(shí)參的值語句分析語句改正main(){intx=3,y=4;swap(x,y);printf("%d,%d",x,y);}intswap(intx,inty){intz;z=x;x=y;y=z;}main(){intx=3,y=4;int*p1,*p2;p1=&xp2=&y;swap(p1,p2);printf("%d,%d",x,y);}intswap(int*p1,int*p2){intz;z=*p1;*p1=*p2;*p2=z;}注意 實(shí)參和形參之間單向傳遞2.6.14函數(shù)的實(shí)參和形參類型不一致語句分析錯(cuò)誤分析C要求實(shí)參與形參的類型一致

P1---指針參數(shù)P1---整形參數(shù)main(){intx=3,y=4;int*P1,*p2;P1=&x,p2=&y;swap(P1,p2);printf("%d,%d",x,y);}intswap(intp1,intp2){intz;z=p1;p1=p2;p2=z;}2.7

C語言的調(diào)試如果我運(yùn)行的程序掛起了,應(yīng)該怎么辦如何檢測(cè)內(nèi)存漏洞(leak)調(diào)試程序的最好方法是什么怎樣調(diào)試TSR程序能報(bào)告條件失敗的程序2.7.1如果我運(yùn)行的程序掛起了,應(yīng)該怎么辦程序掛起的四大原因程序中有死循環(huán);程序運(yùn)行的時(shí)間比所期望的長(zhǎng);程序在等待某些輸入信息,并且直到輸入正確后才會(huì)繼續(xù)運(yùn)行;程序設(shè)計(jì)的目的就是為了延遲一段時(shí)間,或者暫停執(zhí)行。2.7.1.1死循環(huán)什么死循環(huán)有幾張情況可以造成死循環(huán)分析例子:解決方式增加對(duì)應(yīng)的調(diào)試debug信息/*initializeadoubledimensionarray*/for(a=0;a<10;++a){for(b=0;b<10;++a){array[a][b]==0;}}2.7.1.2運(yùn)行時(shí)間比期望的時(shí)間長(zhǎng)什么時(shí)候回出現(xiàn)這種情況該如何消除分析例子:/*AsubroutinetocalculateFibonaccinumbers*/intfib(inti){if(i<3)return1;elsereturnfib(i-1)+fib(i-2);}

解決方式熟悉基本的語法或者算法運(yùn)算信息2.7.1.3等待正確的輸入原因是:等待正確的輸入信息分析例子:#include<stdio.h>main(){FILE*in=fopen("numbers.dat","r");inttotal=0,n;while(fscanf(in,"%d",&n)!=EOF){total+=n;}printf("Thetotalis%d\n",total);fclose(in);}2.7.2如何檢測(cè)內(nèi)存漏洞(leak)什么是內(nèi)存漏洞動(dòng)態(tài)分配的內(nèi)存單元不再使用卻沒有被釋放什么情況會(huì)容易出現(xiàn)這樣的問題忘記釋放分配給臨時(shí)緩沖區(qū)的內(nèi)存空間內(nèi)存漏洞特點(diǎn)最難檢測(cè)最危險(xiǎn)2.7.2如何檢測(cè)內(nèi)存漏洞(leak)例子分析voidSayHi(char*name){char*UpName;inta;UpName=malloc(strlen(name)+1);/*Allocatespaceforthename*/for(a=0;a<strlen(name);++a) UpName[a]=toupper(name[a]);UpName[a]='\0‘;printf("Hello,%si\n",UpName);}intmain(){

SayHi("Dave");return(0);}2.7.2如何檢測(cè)內(nèi)存漏洞(leak)解決方案小心謹(jǐn)慎地編寫程序,充分考慮到內(nèi)存漏洞的可能性malloc和free要配對(duì)使用相應(yīng)的軟件包利用語言的擴(kuò)展功能2.7.3調(diào)試程序的最好方法是什么調(diào)試過程的三個(gè)要素應(yīng)該用什么工具調(diào)試一個(gè)程序?用什么辦法才能找出程序中的錯(cuò)誤?怎樣才能從一開始就避免錯(cuò)誤?2.7.3.1應(yīng)該用什么工具調(diào)試一個(gè)程序調(diào)試工具功能觀察程序的運(yùn)行情況設(shè)置斷點(diǎn)設(shè)置監(jiān)視2.7.3.2用什么辦法才能找出程序中的錯(cuò)誤先調(diào)試程序中較小的組成部分,然后調(diào)試較大的組成部分徹底調(diào)試好程序的一個(gè)組成部分后,再調(diào)試下一個(gè)組成部分連續(xù)地觀察程序流

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論