Time of Update: 2017-02-27
fclose函數調用的一般形式是: fclose(檔案指標); 例如:fclose(fp); 正常完成關閉檔案操作時,fclose函數傳回值為0。如返回非零值則表示有錯誤發生。檔案的讀寫對檔案的讀和寫是最常用的檔案操作。 在C語言中提供了多種檔案讀寫的函數: ·字元讀寫函數 :fgetc和fputc·字串讀寫函數:fgets和fputs·資料區塊讀寫函數:freed和fwrite·格式化讀寫函數:fscanf和fprinf下面分別予以介紹。
Time of Update: 2017-02-27
檔案開啟函數fopenfopen函數用來開啟一個檔案,其調用的一般形式為: 檔案指標名=fopen(檔案名稱,使用檔案方式) 其中,“檔案指標名”必須是被說明為FILE 類型的指標變數,“檔案名稱”是被開啟檔案的檔案名稱。 “使用檔案方式”是指檔案的類型和操作要求。“檔案名稱”是字串常量或字串數組。例如: FILE *fp;fp=("file
Time of Update: 2017-02-27
檔案檔案的基本概念所謂“檔案”是指一組相關資料的有序集合。 這個資料集有一個名稱,叫做檔案名稱。 實際上在前面的各章中我們已經多次使用了檔案,例如來源程式檔案、目標檔案、可執行檔、庫檔案 (標頭檔)等。檔案通常是駐留在外部介質(如磁碟等)上的, 在使用時才調入記憶體中來。從不同的角度可對檔案作不同的分類。從使用者的角度看,檔案可分為普通檔案和裝置檔案兩種。普通檔案是指駐留在磁碟或其它外部介質上的一個有序資料集,可以是源檔案、目標檔案、可執行程式;
Time of Update: 2017-02-27
2. 第二種形式: #ifndef 標識符 程式段1 #else 程式段2 #endif 與第一種形式的區別是將“ifdef”改為“ifndef”。它的功能是,如果標識符未被#define命令定義過則對程式段1進行編譯, 否則對程式段2進行編譯。這與第一種形式的功能正相反。 3. 第三種形式: #if 常量運算式 程式段1 #else 程式段2 #endif 它的功能是,如常量運算式的值為真(非0),則對程式段1 進行編譯,否則對程式段2進行編譯。
Time of Update: 2017-02-27
檔案包含 檔案包含是C預先處理程式的另一個重要功能。檔案包含命令列的一般形式為: #include"檔案名稱" 在前面我們已多次用此命令包含過庫函數的標頭檔。例如: #include"stdio.h"#include"math.h" 檔案包含命令的功能是把指定的檔案插入該命令列位置取代該命令列, 從而把指定的檔案和當前的來源程式檔案連成一個源檔案。在程式設計中,檔案包含是很有用的。 一個大的程式可以分為多個模組,由多個程式員分別編程。
Time of Update: 2017-02-27
帶參宏定義C語言允許宏帶有參數。在宏定義中的參數稱為形式參數, 在宏調用中的參數稱為實際參數。對帶參數的宏,在調用中,不僅要宏展開, 而且要用實參去代換形參。帶參宏定義的一般形式為: #define 宏名(形參表) 字串 在字串中含有各個形參。帶參宏調用的一般形式為: 宏名(實參表); 例如: #define M(y) y*y+3*y /*宏定義*/:k=M(5); /*宏調用*/: 在宏調用時,用實參5去代替形參y, 經預先處理宏展開後的語句為: k=5*5+3*5#define MAX(a,
Time of Update: 2017-02-27
預先處理概述在前面各章中,已多次使用過以“#”號開頭的預先處理命令。如包含命令# include,宏定義命令# define等。在來源程式中這些命令都放在函數之外, 而且一般都放在源檔案的前面,它們稱為預先處理部分。所謂預先處理是指在進行編譯的第一遍掃描(詞法掃描和文法分析)之前所作的工作。預先處理是C語言的一個重要功能, 它由預先處理程式負責完成。當對一個源檔案進行編譯時間, 系統將自動引用預先處理程式對來源程式中的預先處理部分作處理,
Time of Update: 2017-02-27
二、位域的使用位域的使用和結構成員的使用相同,其一般形式為: 位域變數名·位網域名稱 位域允許用各種格式輸出。main(){struct bs{unsigned a:1;unsigned b:3;unsigned c:4;}
Time of Update: 2017-02-27
位域有些資訊在儲存時,並不需要佔用一個完整的位元組, 而只需占幾個或一個二進位位。例如在存放一個開關量時,只有0和1 兩種狀態, 用一位二進位即可。為了節省儲存空間,並使處理簡便,C語言又提供了一種資料結構,稱為“位域”或“位段”。所謂“位域”是把一個位元組中的二進位劃分為幾個不同的地區, 並說明每個地區的位元。每個域有一個網域名稱,允許在程式中按網域名稱進行操作。 這樣就可以把幾個不同的對象用一個位元組的二進位位域來表示。
Time of Update: 2017-02-27
位元運算前面介紹的各種運算都是以位元組作為最基本位進行的。 但在很多系統程式中常要求在位(bit)一級進行運算或處理。C語言提供了位元運算的功能, 這使得C語言也能像組合語言一樣用來編寫系統程式。一、位元運算符C語言提供了六種位元運算符:& 按位與| 按位或^ 按位異或~ 取反<< 左移>> 右移1. 按位與運算 按位與運算子"&"是雙目運算子。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1
Time of Update: 2017-02-27
枚舉類型變數的賦值和使用枚舉類型在使用中有以下規定:1. 枚舉值是常量,不是變數。不能在程式中用指派陳述式再對它賦值。例如對枚舉weekday的元素再作以下賦值: sun=5;mon=2;sun=mon; 都是錯誤的。2. 枚舉元素本身由系統定義了一個表示序號的數值,從0 開始順序定義為0,1,2…。如在weekday中,sun值為0,mon值為1, …,sat值為6。main(){enum weekday{ sun,mon,tue,wed,thu,fri,sat }
Time of Update: 2017-02-27
枚舉在實際問題中, 有些變數的取值被限定在一個有限的範圍內。例如,一個星期內只有七天,一年只有十二個月, 一個班每周有六門課程等等。如果把這些量說明為整型, 字元型或其它類型顯然是不妥當的。 為此,C語言提供了一種稱為“枚舉”的類型。在“枚舉”類型的定義中列舉出所有可能的取值, 被說明為該“枚舉”類型的變數取值不能超過定義的範圍。應該說明的是, 枚舉類型是一種基礎資料型別 (Elementary Data
Time of Update: 2017-02-27
一、聯合的定義定義一個等位型別的一般形式為: union 聯合名 { 成員表 };成員表中含有若干成員,成員的一般形式為: 類型說明符 成員名 成員名的命名應符合標識符的規定。例如: union perdata{int class;char
Time of Update: 2017-02-27
[例7.14]將以上建立鏈表,刪除結點,插入結點的函數組織在一起,再建一個輸出全部結點的函數,然後用main函數調用它們。#define NULL 0#define TYPE struct stu#define LEN sizeof(struct stu)struct stu{int num;int age;struct stu *next;};TYPE * creat(int n){struct stu *head,*pf,*pb;int
Time of Update: 2017-02-27
creat函數用於建立一個有n個結點的鏈表,它是一個指標函數,它返回的指標指向stu結構。在creat函數內定義了三個stu結構的指標變數。head為頭指標,pf 為指向兩相鄰結點的前一結點的指標變數。pb為後一結點的指標變數。在for語句內,用malloc函數建立長度與stu長度相等的空間作為一結點,首地址賦予pb。然後輸入結點資料。如果當前結點為第一結點(i==0),則把pb值 (該結點指標)賦予head和pf。如非第一結點,則把pb值賦予pf
Time of Update: 2017-02-27
topoic=動態儲存裝置分配在數組一章中,曾介紹過數組的長度是預先定義好的, 在整個程式中固定不變。C語言中不允許動態數群組類型。例如: int n;scanf("%d",&n);int a[n]; 用變數表示長度,想對數組的大小作動態說明, 這是錯誤的。但是在實際的編程中,往往會發生這種情況, 即所需的記憶體空間取決於實際輸入的資料,而無法預先確定。對於這種問題,
Time of Update: 2017-02-27
這三種用於表示結構成員的形式是完全等效的。結構數組指標變數結構指標變數可以指向一個結構數組, 這時結構指標變數的值是整個結構數組的首地址。 結構指標變數也可指向結構數組的一個元素,這時結構指標變數的值是該結構數組元素的首地址。設ps為指向結構數組的指標變數,則ps也指向該結構數組的0號元素,ps+1指向1號元素,ps+i則指向i號元素。 這與普通數組的情況是一致的。[例7.7]用指標變數輸出結構數組。struct stu{int num;char *name;char sex;float
Time of Update: 2017-02-27
結構數組數組的元素也可以是結構類型的。 因此可以構成結構型數組。結構數組的每一個元素都是具有相同結構類型的下標結構變數。 在實際應用中,經常用結構數組來表示具有相同資料結構的一個群體。如一個班的學生檔案,一個車間職工的工資表等。 結構數組的定義方法和結構變數相似,只需說明它為數群組類型即可。例如: struct stu{int num;char *name;char sex;float score;}boy[5];
Time of Update: 2017-02-27
在ANSI C中除了允許具有相同類型的結構變數相互賦值以外, 一般對結構變數的使用,包括賦值、輸入、輸出、 運算等都是通過結構變數的成員來實現的。表示結構變數成員的一般形式是: 結構變數名.成員名 例如:boy1.num 即第一個人的學號 boy2.sex 即第二個人的性別 如果成員本身又是一個結構則必須逐級找到最低級的成員才能使用。例如:boy1.birthday.month
Time of Update: 2017-02-27
結構類型定義和結構變數說明在實際問題中,一組資料往往具有不同的資料類型。例如, 在學生登記表中,姓名應為字元型;學號可為整型或字元型; 年齡應為整型;性別應為字元型;成績可為整型或實型。 顯然不能用一個數組來存放這一組資料。 因為數組中各元素的類型和長度都必須一致,以便於編譯系統處理。為瞭解決這個問題,C語言中給出了另一種構造資料類型——“結構”。