




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
安順上課教案聰明出于勤奮,天才在于積累安順上課教案安順上課教案聰明出于勤奮,天才在于積累第八章函數8.1概述模塊化程序設計基本思想:將一個大的程序按功能分割成一些小模塊,特點:各模塊相對獨立、功能單一、結構清晰、接口簡單控制了程序設計的復雜性提高元件的可靠性縮短開發周期避免程序開發的重復勞動易于維護和功能擴充開發方法:自上向下,逐步分解,分而治之C是模塊化程序設計語言C是函數式語言必須有且只能有一個名為main的主函數C程序的執行總是從main函數開始,在main中結束函數不能嵌套定義,可以嵌套調用函數類型函數名(形參表)形參類型說明{ 說明部分 語句部分}傳統風格:例有參函數(傳統風格)intmax(x,y)
intx,y;{intz;z=x>y?x:y;return(z);}8.3函數的返回值返回語句形式:return(表達式);
或return表達式;
或return;功能:使程序控制從被調用函數返回到調用函數中,同時把返值帶給調用函數說明:函數中可有多個return語句若無return語句,遇}時,自動返回調用函數若函數類型與return語句中表達式值的類型不一致,按前者為準,自動轉換------函數調用轉換void型函數例無返回值函數
voidswap(intx,inty){inttemp;temp=x;x=y;y=temp;}例函數返回值類型轉換main(){floata,b;intc;scanf("%f,%f",&a,&b);c=max(a,b);printf("Maxis%d\n",c);}max(floatx,floaty){floatz;z=x>y?x:y;
return(z);}8.4函數的調用調用形式函數名(實參表);說明:實參與形參個數相等,類型一致,按順序一一對應實參表求值順序,因系統而定(TurboC自右向左)main(){inti=2,p;p=f(i,++i);printf("%d",p);}intf(inta,intb){intc;if(a>b)c=1;elseif(a==b)c=0;elsec=-1;return(c);}例參數求值順序main(){inti=2,p;p=f(i,i++);printf("%d",p);}intf(inta,intb){intc;if(a>b)c=1;elseif(a==b)c=0;elsec=-1;return(c);}運行結果:0運行結果:1調用方式函數語句:例printstar();printf(“Hello,World!\n”);函數表達式:例m=max(a,b)*2;函數參數:例printf(“%d”,max(a,b));m=max(a,max(b,c));函數說明對被調用函數要求:必須是已存在的函數庫函數:#include<*.h>用戶自定義函數:函數類型說明函數說明一般形式:函數類型函數名(形參類型[形參名],…..);
或函數類型函數名();作用:告訴編譯系統函數類型、參數個數及類型,以便檢驗函數定義與函數說明不同函數說明位置:程序的數據說明部分(函數內或外)下列情況下,可不作函數說明若函數返值是char或int型,系統自動按int型處理被調用函數定義出現在主調函數之前有些系統(如BorlandC++)要求函數說明指出函數返值類型和形參類型,并且對void和int型函數也要進行函數說明例函數說明舉例main(){floata,b;intc;scanf("%f,%f",&a,&b);c=max(a,b);printf("Maxis%d\n",c);}max(floatx,floaty){floatz;z=x>y?x:y;return(z);}int型函數可不作函數說明(BorlandC++不行)/*ch7_5.c*/floatadd(floatx,floaty){floatz;z=x+y;return(z);}main(){floata,b,c;scanf("%f,%f",&a,&b);c=add(a,b);printf("sumis%f",c);}被調函數出現在主調函數之前,不必函數說明/*ch7_5.c*/main(){floatadd(float,float);/*functiondeclaration*/floata,b,c;scanf("%f,%f",&a,&b);c=add(a,b);printf("sumis%f",c);}floatadd(floatx,floaty){floatz;z=x+y;return(z);}floatadd();8.5函數參數及其傳遞方式形參與實參形式參數:定義函數時函數名后面括號中的變量名實際參數:調用函數時函數名后面括號中的表達式c=max(a,b);(main函數)(max函數)max(intx,inty){intz;z=x>y?x:y;return(z);}例比較兩個數并輸出大者main(){inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf("Maxis%d",c);}max(intx,inty){intz;z=x>y?x:y;return(z);}形參實參說明:實參必須有確定的值形參必須指定類型形參與實參類型一致,個數相同若形參與實參類型不一致,自動按形參類型轉換———函數調用轉換形參在函數被調用前不占內存;函數調用時為形參分配內存;調用結束,內存釋放8.5函數參數及其傳遞方式形參與實參形式參數:定義函數時函數名后面括號中的變量名實際參數:調用函數時函數名后面括號中的表達式例計算x的立方#include<stdio.h>floatcube(floatx){return(x*x*x);}main(){floata,product;printf("Pleaseinputvalueofa:");scanf("%f",&a);product=cube(a);printf(”Cubeof%.4fis%.4f\n",a,product);}xaproduct××××1.21.21.728參數傳遞方式值傳遞方式方式:函數調用時,為形參分配單元,并將實參的值復制到形參中;調用結束,形參單元被釋放,實參單元仍保留并維持原值特點:形參與實參占用不同的內存單元單向傳遞711x:y:調用前:調用結束:711x:y:例交換兩個數/*ch7_2.c*/#include<stdio.h>main(){intx=7,y=11;printf("x=%d,\ty=%d\n",x,y);printf("swapped:\n");
swap(x,y);printf("x=%d,\ty=%d\n",x,y);}swap(inta,intb){inttemp;temp=a;a=b;b=temp;}調用:711a:b:711x:y:swap:711x:y:117a:b:temp地址傳遞方式:函數調用時,將數據的存儲地址作為參數傳遞給形參特點:形參與實參占用同樣的存儲單元“雙向”傳遞實參和形參必須是地址常量或變量/*ch9_3.c*/swap(p1,p2)int*p1,*p2;{intp;p=*p1;*p1=*p2;*p2=p;}main(){inta,b;scanf("%d,%d",&a,&b);printf(“a=%d,b=%d\n”,a,b);printf(“swapped:\n”);swap(&a,&b);printf(”a=%d,b=%d\n",a,b);}例交換兩個數a59b調前:a59b調swap:p1&a&bp2a95b交換:p1&a&bp2a95b返回:8.6函數的嵌套與遞歸調用嵌套調用C規定:函數定義不可嵌套,但可以嵌套調用函數main()調用函數a結束a函數b函數調用函數b#include<stdio.h>
longsum(inta,intb);longfactorial(intn);main(){intn1,n2;longa;scanf("%d,%d",&n1,&n2);a=sum(n1,n2);printf("a=%1d",a);}longsum(inta,intb){longc1,c2;c1=factorial(a);c2=factorial(b);
return(c1+c2);}
longfactorial(intn){longrtn=1;inti;for(i=1;i<=n;i++)rtn*=i;
return(rtn);}longsum(inta,intb);longfactorial(intn);文件包含編譯預處理命令函數類型說明函數定義函數調用函數調用函數返回值形參實參例求三個數中最大數和最小數的差值#include<stdio.h>
intdif(intx,inty,intz);intmax(intx,inty,intz);intmin(intx,inty,intz);voidmain(){inta,b,c,d;scanf("%d%d%d",&a,&b,&c);
d=dif(a,b,c);printf("Max-Min=%d\n",d);}intdif(intx,inty,intz){returnmax(x,y,z)-min(x,y,z);}intmax(intx,inty,intz){intr;r=x>y?x:y;return(r>z?r:z);}intmin(intx,inty,intz){intr;r=x<y?x:y;return(r<z?r:z);}main()調用函數dif輸出結束dif函數max函數調用函數max調用函數minmin函數8.8變量的存儲屬性概述變量是對程序中數據的存儲空間的抽象內存…….main(){inta;a=10;printf(“%d”,a);}編譯或函數調用時為其分配內存單元1020002001程序中使用變量名對內存操作變量的屬性數據類型:變量所持有的數據的性質(操作屬性)存儲屬性存儲器類型:寄存器、靜態存儲區、動態存儲區生存期:變量在某一時刻存在-------靜態變量與動態變量作用域:變量在某區域內有效-------局部變量與全局變量變量的存儲類型auto-----自動型register-----寄存器型static------靜態型extern-----外部型變量定義格式:[存儲類型]數據類型變量表;6.8變量的存儲屬性概述變量是對程序中數據的存儲空間的抽象如:intsum;
autointa,b,c;
registerinti;
staticfloatx,y;局部變量與全局變量局部變量---內部變量定義:在函數內定義,只在本函數內有效說明:main中定義的變量只在main中有效不同函數中同名變量,占不同內存單元形參屬于局部變量局部變量可用存儲類型:autoregisterstatic(默認為auto)floatf1(inta){intb,c;…….}charf2(intx,inty){inti,j;……}main(){intm,n;…….}a,b,c有效x,y,i,j有效m,n有效全局變量---外部變量定義:在函數外定義,可為本文件所有函數共用有效范圍:從定義變量的位置開始到本源文件結束,及有extern說明的其它源文件應盡量少使用全局變量,因為:全局變量在程序全部執行過程中占用存儲單元降低了函數的通用性、可靠性,可移植性降低程序清晰性,容易出錯定義
說明次數:只能1次可說明多次位置:所有函數之外函數內或函數外分配內存:分配內存,可初始化不分配內存,不可初始化外部變量說明:extern數據類型變量表;外部變量定義與外部變量說明不同若外部變量與局部變量同名,則外部變量被屏蔽外部變量可用存儲類型:缺省或static/*ch7_17.c*/inta=3,b=5;max(inta,intb){intc;c=a>b?a:b;return(c);}main(){inta=8;printf("max=%d",max(a,b));}例外部變量與局部變量運行結果:max=8動態變量與靜態變量存儲方式靜態存儲:程序運行期間分配固定存儲空間動態存儲:程序運行期間根據需要動態分配存儲空間程序區靜態存儲區動態存儲區全局變量、局部靜態變量形參變量局部動態變量(autoregister)函數調用現場保護和返回地址等生存期靜態變量:從程序開始執行到程序結束動態變量:從包含該變量定義的函數開始執行至函數執行結束變量存儲類型靜態動態存儲方式程序整個運行期間函數調用開始至結束生存期編譯時賦初值,只賦一次每次函數調用時賦初值自動賦初值0或空字符不確定未賦初值靜態存儲區動態區存儲區寄存器局部變量外部變量作用域定義變量的函數或復合語句內本文件其它文件局部變量默認為auto型register型變量個數受限,且不能為long,double,float型局部static變量具有全局壽命和局部可見性局部static變量具有可繼承性extern不是變量定義,可擴展外部變量作用域register局部staticauto外部static外部存儲類別第九章編譯預處理作用:對源程序編譯之前做一些處理,生成擴展C源程序種類宏定義#define文件包含#include條件編譯#if--#else--#endif等格式:“#”開頭占單獨書寫行語句尾不加分號如if(x==YES)printf(“correct!\n”);elseif(x==NO)printf(“error!\n”);展開后:if(x==1)printf(“correct!\n”);elseif(x==0)printf(“error!\n”);9.1宏定義不帶參數宏定義一般形式:#define宏名[宏體]功能:用指定標識符(宏名)代替字符序列(宏體)宏展開:預編譯時,用宏體替換宏名---不作語法檢查如#defineYES1#defineNO0#definePI3.1415926#defineOUTprintf(“Hello,World”);宏體可缺省,表示宏名定義過或取消宏體定義位置:任意(一般在函數外面)作用域:從定義命令到文件結束#undef可終止宏名作用域格式:#undef宏名例#defineYES1main(){……..}#undefYES#defineYES0max(){……..}YES原作用域YES新作用域()()9.2文件包含功能:一個源文件可將另一個源文件的內容全部包含進來一般形式:#include“文件名”或#include<文件名>#include“file2.c”file1.cfile2.cfile1.cfile2.cABA處理過程:預編譯時,用被包含文件的內容取代該預處理命令,再對“包含”后的文件作一個源文件編譯<>直接按標準目錄搜索“”先在當前目錄搜索,再搜索標準目錄可指定路徑被包含文件內容源文件(*.c)頭文件(*.h)宏定義數據結構定義函數說明等文件包含可嵌套#include“file2.c”file1.cAfile3.cC#include“file3.c”file2.cBfile1.cAfile3.cfile2.c第十一章結構體與共用體§11.1概述結構體
(structure)—不同類型的數據組合成一個有機的整體定義結構體類型
一般形式:
struct結構體名{成員表列};
其中:struct為關鍵字,表示是一個“結構體類型”結構體名:同標識符規則一樣。成員表列:組成結構體的各成員項。例:structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};numnamesexagescoreaddr10010LiFunM1887.5Beijing
§11.2定義結構體類型變量的方法一.先定義結構體類型再定義變量名
structstudentstudent1,student2;表示:student1,student2為structstudent類型變量。
注意:定義結構體變量之前必須先定義結構體類型。二.在定義類型的同時定義變量例如:structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student1,student2;三.直接定義結構類型變量struct{成員表列}變量名表列;
例:struct{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student1,student2;幾點說明:
1.只能對結構體類型變量賦值,存取,運算等。而不能對結構體類型賦值,存取,運算等;
2.結構體中的成員如同普通變量一樣,可以單獨使用;
3.
結構體類型中的成員名可以與普通變量名相同。但二者是彼此獨立的,互不干擾;4.結構體的成員可以又是一個結構體變量例如:structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];charsex;intage;
structdatebirthday;charaddr[30];}student1,student2;birthdaymonth
dayyear§11.3結構體類型變量的引用先定義后使用規則如下:1.引用方式:
結構體變量名.成員名
“.”:成員(分量)運算符,優先級為1
例:student1.num,student1.addr注意:
(1)不能將一個結構體變量作為一個整體進行輸入,輸出等。而只能對結構體變量成員分別進行輸入,輸出,賦值等.
printf(“%d,%s,%c,%d,%f,%s\n”,student1);不合法
printf(“%s\n”,);
合法
student1.num=10010;合法
(2)新標準C中,可以將一個結構體變量直接賦給另一個具有相同結構的結構體變量.如:
student1=student2;2.如成員本身又屬一個結構體類型。則只能對最低級成員進行賦值,存取和運算等。例:
student1.birthday.month不能用student1.birthday來訪問student1中的成員birthday。3.對結構體變量中的成員可以象普通變量一樣進行各種運算。例:student2.score=student1.score;student1.age++;4.允許使用成員和結構體變量的地址。例:scanf(“%d”,&student1.num);
§11.6指向結構體類型數據的指針一.指向結構體變量的指針
結構體變量的指針就是結構體變量所占內存段的起始地址。存放該地址的變量叫做指向結構體變量的指針變量,簡稱指向結構體變量的指針。例11.3
main(){structstudent{longintnum;charname[20];charsex;floatscore;};structstudentstu1;structstudent*p;
p=&stu1;stu1.num=89101;strcpy(,“LiLin”);stu1.sex=‘M’;stu1.score=89.5;printf(“No.:%ld\nname:%s\nsex:%c\nscore:%f\n”,stu1.num,,stu1.sex,stu1.score);printf(“\nNo.:%ld\nname:%s\nsex:%c\nscore:%f\n”,
(*p).num,(*p).name,(*p).sex,(*p).score);}89101“LiLin”‘M’89.5
p
stu_1運行結果:No.:89101name:LiLinsex:Mscore:89.500000說明:
1.程序中*p表示p指向的結構體變量。(*p).num表示p指向的結構體變量中的成員num。
2.
(*p).num等效于p–>num。–>表示指向結構體成員運算符。
3.結構體變量中成員的引用有三種形式:(1)結構體變量.成員名;(2)(*p).成員名;(3)p–>成員名;注意:
p–>n
表示p指向的結構體變量中的成員n的值。
p–>n++
表示p指向的結構體變量中的成員n的值。用完該值后使其加1。
++p–>n
表示使p指向的結構體變量中的成員n的值加1。(先加)二.指向結構體數組的指針例11.4
structstudent{intnum;charname[20];charsex;intage;};structstudentstu[3]={{10101,“LiLin”,‘M’,18},{10102,“ZhangFun”,‘M’,19},{10104,“WangMin”,‘F’,20}};main(){structstudent*p;printf(“NoNamesexage\n”);for(p=stu;p<stu+3;p++)
printf(“%d%s%c%d\n”,p–>num,p–>name,p–>sex,p–>age);}運行結果:NoNamesexage10101LiLinM1810102ZhangFunM1910104WangMinF20stu[0]stu[1]stu[2]4項4項4項pp+1p+2
注意:
指向結構體數組的指針p加1的含義。例:
(++p)–>num和(p++)–>num例11.5#defineFORMAT“%d\n%s\n%f\n%f\n%f\n”structstudent{intnum;charname[20];floatscore[3];};main(){voidprint();
structstudentstu;stu.num=12345;strcpy(,“LiLi”);stu.score[0]=67.5;stu.score[1]=89;stu.score[2]=78.6;
print(&stu);
}voidprint(p)
structstudent*p;{printf(FORMAT,p–>num,p–>name,p–>score[0],p–>score[1],p–>score[2]);printf(“\n”);}說明:1.程序中各成員的賦值可用scanf函數。
scanf(“%d%s%f%f%f”,&stu.num,,&stu.score[0],&stu.score[1],&stu.score[2]);§11.7鏈表采用鏈式存儲結構的鏈表是用一組任意的存儲單元來存放線性表的數據元素,這組存儲單元既可以是連續的,也可以是不連續的,甚至可以是零散分布在內存中的任何位置上。1、單向鏈表單向鏈表是鏈式存儲結構中最簡單和最基本的結構.在鏈表中數據元素的邏輯次序與物理存儲次序不一定相同,為了能正確表示數據元素間的邏輯關系,在存儲每個元素值的同時,還必須存儲其直接后繼(或直接前趨)的存儲位置,這一部分稱為鏈。因此,單向鏈表的每個數據元素由兩部分組成:存儲元素的數據域(DATE)和存儲直接后繼元素存儲地址的指針域(NEXT)。其結構如下:datanext一個線形表a1,a2,….,an
對應的單鏈表可用下圖表示。h鏈表的頭指針:用以確定線形表中第一個元素對應的存儲位置,單鏈表可以用頭指針的名字來命名。鏈表的終點元素無直接后繼,故其指針域為空NIL,在圖中用^表示。a1ha2…a3an^帶頭結點的單鏈表為空時。其邏輯示意如下圖所示.顯然,帶頭結點的單鏈表把空表和非空表的處理統一起來了,對單鏈表初始化,就是建立一個空的單鏈表.^h為了算法實現上的方便,通常在單鏈表的第一元素之前附加一個稱為頭結點的元素。頭結點的數據域可以不存任何數據,也可以存放象線形表的表長的數據信息。如圖所示,單鏈表的頭指針指向頭的結點。h…a1a2an^(1)鏈表的訪問【算法3】訪問單鏈表的算法elemtypeaccess(node*h,inti){ node*p; intj; p=h;j=0; WHILE(p->next!=NULL&&j<i) { p=p->next; j++; } if(p!=NULL&&j=i) return(p->data); else return(NIL);}(2)單鏈表的插入運算設有線性表a1,a2,…,an,用帶頭結點的單鏈表存儲,現要求在數據元素ai的結點之前插入一個數據元素為x的結點。首先應找到數據元素ai-1結點
,以便打開ai-1與ai的兩數據元素之間的鏈:然后申請一個新的結點空間,放上數據值x。最后,重新建立ai-1與x
、x與ai兩兩數據元素之間的鏈,構成新的鏈表。算法示意圖如圖所示:
hai-1…an^…aix【算法3】單鏈表的插入算法voidinsertsl(node*h,inti){ node*p,*t; intj; p=h;j=0; while(p!=NULL&&j<i-1) { p=p->next; j++; } if(j!=i-1) { printf(“iisinvalid”); return; } t=(node*)malloc(sizeof(node)); t->data=x; t->next=p->next; p->next=t;}ai-1aix(3)單鏈表的刪除運算刪除操作和插入操作一樣,首先要搜索單鏈表以找到指定刪除結點的前趨結點(假設為P),然后將待刪除結點的指針域內容賦予P結點的指針域,最后釋放刪除結點所占的存儲空間。hai-1…an^…ai+1aihai-1…an^…ai+1aipps【算法5】單鏈表的刪除算法voiddeletesl(node*h,inti){node*p,*s;intj;p=h;j=0;while(p->next!=NULL&&j<i-1){p=p->next;j++;}if(j!=i-1){printf(“iisinvalid”);return;}s=p->next;p->next=s->next;free(s);}(4)單鏈表的建立為建立鏈表,首先要為每個數據元素動態申請一個結點空間,然后通過指針將這些結點依次相連。鏈表是一種動態存儲結構,每個結點所需的存儲空間是在程序執行時動態申請的。利用前面已介紹過的鏈表插入新的結點的算法,不難得到創新鏈表的算法:首先建立一個空鏈表,然后不斷向鏈表中插入新的數據元素,形成各結點。根據插入新結點的位置不同,可以形成兩種創建新鏈表的方法:一是每插入的新結點作為鏈表的第一結點,此時,建立鏈表是從表的最后一個元素開始,從后向前依次插入結點的:二是每插入的結點是當前鏈表的做末結點,此時,建立鏈表是從表的第一個元素開始,從前向后依次插入結點的。
§11.8共用體一.共用體的概念
“共用體”類型結構:幾個不同的變量共占同一段內存的結構
“共用體”類型變量的定義
union共用體名{成員表列}變量表列;例如:uniondata{inti;charch;floatf;}a,b,c;整型變量i實型變量f起始地址字符型變量ch
也可:uniondata{inti;charch;floatf;};uniondataa,b,c;union{inti;charch;floatf;}a,b,c;結構體變量所占內存的長度是各成員占的內存長度之和,且每個成員分別占有其自己的內存單元。共用體變量所占的內存長度等于最長的成員的長度。二.共用體變量的引用方式
規則:先定義,后使用,且只能引用共用體變量中的成員。如:a.i,a.ch,a.f等等.而:printf(“%d”,a);(不合法)三.共用體類型數據的特點
1.并非所有成員都同時存在和起作用.即:每一瞬時只有
一個成員起作用。
2.共用體變量中起作用的成員是最后一次存放的成員。例如:uniondata{inti;charch;floatf;}a;……a.i=1;a.ch=‘a’;a.f=1.5;
則只有a.f有效,而此時a.i和a.ch已無意義。
但若存在相同數據類型的成員,則該成員就有意義.如:main(){uniondata{inti;charch;floatf;floatx;}a;
a.i=1;a.ch=‘a’;a.f=1.5;printf(“%f,%f\n”,a.f,a.x);}輸出為:1.5,1.5
a.cha.ia.fa.x3.共用體變量的地址和它的各成員的地址都是同一地址.4.
不能對共用體變量名賦值,也不能在定義是對其初始化。
uniondata{inti;charch;floatf;}a={1,‘a’,1.5};
(不合法)5.共用體變量不能作函數參數,但指向共用體變量的指針則可以。uniondata{
structst{inta;intb;}x;inty;intz;}max;structst{uniondata{inta;charb;}x;inty;floatz;}min;6.
結構體類型和共用體類型可以相互嵌套。如:補充例題:以下程序的輸出為:
#include“stdio.h”main(){uniondata{structst{intx;inty;}m;inta;intb;}e;e.a=1;e.b=2;e.m.x=e.a*e.b;e.m.y=e.a+e.b;printf(“\n%d,%d”,e.m.x,e.m.y);printf(“\n%d,%d”,e.a,e.b);}
e.m.xe.m.y起始地址4,84,4e.ae.b第10章文件操作目錄文件概述文件類型指針文件的打開和關閉文件的讀寫文件的定位文件(File)C語言中的文件C語言把文件看作一個字節的序列C語言對文件的存取是以字節為單位的文本文件(ASCII文件)按數據的ASCII形式存儲二進制文件按數據在內存中的二進制形式存儲文本文件和二進制文件緩沖文件系統文件類型指針FILE類型保存被使用的文件的有關信息所有的文件操作都需要FILE類型的指針FILE是庫文件中定義的結構體的別名注意不要寫成structFILE舉例FILE*fp;FILE類型typedefstruct{shortlevel;/*緩沖區滿空程度*/unsignedflags;/*文件狀態標志*/charfd;/*文件描述符*/unsignedcharhold;/*無緩沖則不讀取字符*/shortbsize;/*緩沖區大小*/unsignedchar*buffer;/*數據緩沖區*/unsignedchar*curp;/*當前位置指針*/unsignedistemp;/*臨時文件指示器*/shorttoken;/*用于有效性檢查*/}FILE;文件的打開(fopen函數)函數原型FILE*fopen(char*filename, char*mode);參數說明filename:要打開的文件路徑mode:打開模式返回值若成功,返回指向被打開文件的指針若出錯,返回空指針NULL(0)文件的打開模式打開模式描述r只讀,打開已有文件,不能寫w只寫,創建或打開,覆蓋已有文件a追加,創建或打開,在已有文件末尾追加r+讀寫,打開已有文件w+讀寫,創建或打開,覆蓋已有文件a+讀寫,創建或打開,在已有文件末尾追加t按文本方式打開(缺省)b按二進制方式打開文件的打開舉例FILE*fp1,*fp2,*fp3;charfilename[]="file3.dat";/*以文本只讀方式打開file1
*/if(!(fp1=fopen("file1","r"))){printf("CannotOpenThisFile!\n");exit(0);/*退出程序*/}/*以二進制讀寫方式打開FILE2.TXT
*/fp2=fopen("C:\\HOME\\FILE2.TXT","rb+");/*以二進制讀寫方式打開file3.dat
*/fp3=fopen(filename,"a+b");文件的關閉(fclose函數)函數原型intfclose(FILE*fp);參數說明fp:要關閉的文件指針返回值若成功,返回0若出錯,返回EOF(-1)不用的文件應關閉,防止數據破壞丟失文件的關閉舉例FILE*fp;charfile[]="D:\\USER\\STUDENTS.DAT";if(!(fp=fopen(file,"rb+"))){printf("Openfile%serror!\n",file);exit(0);}......fclose(fp);文件的讀寫函數功能函數功能fputc輸出字符fprintf格式化輸出fgetc輸入字符fscanf格式化輸入putc輸出字符putw輸出一個字getc輸入字符getw輸入一個字fwrite輸出數據塊fputs輸出字符串fread輸入數據塊fgets輸入字符串feof函數函數原型intfeof(FILE*fp);參數fp:文件指針返回值若文件結束,返回非零值若文件尚未結束,返回0fputc/putc函數函數原型intfputc(intc,FILE*fp);intpu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025維修設備的技術合同
- 2025年LED控制與驅動產品項目建議書
- 2025企業勞動合同書樣本
- 2025新鮮果品購銷合同
- 2025聘請短期工合同模板
- 2025標準股權質押借款合同范本
- 2025年橡膠型密封膠項目建議書
- 2025年勞動合同 住房公積金合同書參考模板
- 2025中天國際酒店公寓精裝修監理合同附件合同條款與監理要求
- 2025年的我合同審查大作戰:來看這份勞動合同
- GB/T 9661-1988機場周圍飛機噪聲測量方法
- GB 29541-2013熱泵熱水機(器)能效限定值及能效等級
- FZ/T 07019-2021針織印染面料單位產品能源消耗限額
- 重癥醫學科各項規章制度匯編
- 社會組織培訓概述課件
- 春節作文優秀課件
- 三角函數的應用論文Word版
- 農業創業風險控制與防范培訓課件
- 生物制造國內外狀況課件
- 幼兒園大班數學口算練習題可打印
- 藥物臨床試驗管理和質量控制課件(PPT 55頁)
評論
0/150
提交評論