<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
        博客園  :: 首頁  :: 新隨筆  :: 聯系 :: 訂閱 訂閱  :: 管理

      C語言練習筆記-0

      Posted on 2022-11-03 19:40  打工的外星人  閱讀(267)  評論(0)    收藏  舉報

      第一章 C語言概述

      1.1 C程序結構特點16

      1、C程序的基本構件——函數。

      2、一個函數由函數首部和函數體兩部分構成。

      函數首部一般包括函數類型、函數名、函數參數等。

      函數體一般包括聲明部分和執行部分。其中:在聲明部分中定義所用到的變量;執行部分則由若干個語句組成。

      3、C程序只有一個main函數,且總是從main函數開始執行。

      4C語言語句必須以結束。

      5、用/* */作為注釋。

      6、C編譯器一般自頂向下順序編譯C源程序,如果被調函數定義在主調函數之后位置時,要在主調函數前,給出被調函數的原型說明。以便編譯器在編譯被調函數的調用語句時,對調用語句進行參數檢查。

      如果不進行原型說明,則無法通過編譯檢查。

      原型說明:類型說明 函數名(參數類型參數類型……

      7、頭文件——頭文件包含了C語言的標準函數庫的原型說明。

      C語言通過使用#include <>預處理命令,將庫函數的原型說明插入到源文件中。

      1.2 C程序上機步驟17

      1、編輯源文件 .c;

      2、編譯成目標文件.obj;

      3、連接——將目標程序和庫函數及其他目標程序連接起來,生產可執行文件,文件擴展名為.exe;

      4、執行。

      第二章 程序的靈魂——算法23

      2.1 算法24

      1、算法——指為求解某一問題而采用的具體方法和步驟。

      2、兩類算法——數值運算算法和非數值運算算法

      3、算法的特性——有窮性、確定性、有效性等

      4、算法描述——文字描述法(如偽代碼描述算法)、圖形描述法(如流程圖和NS流程圖描述算法)。

      2.2 算法的三種基本結構

      順序、選擇、循環

      2.3 結構化程序設計方法42

      1、自頂向下——首先對問題進行分析,確定算法思路。

      2、逐步細化——根據算法思路,制定原始算法流程,并不斷細化流程。

      3、模塊設計——分解算法流程,將功能相對獨立的部分劃分為一個模塊。

      4、結構化編碼——利用高級語言正確實現3種基本結構。

      第三章 數據類型 運算符與表達式48

      3.1 C語言的基本元素48

      1、符號集——C語言使用的基本符號。

      2、標識符——用來標記常量、變量、函數及文件名字的字符序列。

      3、關鍵字——C程序規定的,具有特定含義、專門用作語言特定成分的一類標識符。ANSI推薦的C語言關鍵字是32個。關鍵字全部應該小寫。

      3.2 C的數據類型48

      數據是操作的對象,數據類型是指數據的內在表現形式。如(數據代碼、存儲、運算)。

      1、基本類型:整型、字符型、實型。

      2、構造類型:在基本類型的基礎上,按照某種構成規則構造而成的類型。數組、結構體、共用體、枚舉型。

      3、指針類型:用于存儲地址的一類數據類型。

      4、空類型:

      編譯器根據變量的數據類型,給變量分配存儲單元。

      3.3 常量與變量48

      1、符號常量——符號常量在其作用域內不能改變,也不能被賦值。

      2、變量——變量由變量名和變量值標識。

      變量名實際上是一個符號地址,編譯連接程序時給每個變量名分配一個內存地址,當程序訪問變量值時,實際上是通過變量名找到相應的內存地址,從其存儲單元中讀取數據。

      3.4 基本類型

      1、整形數據在內存中的存放,是以補碼形式存放的。

      2、實型數據:單精度 雙精度。

      在內存中以指數形勢存放。

      若數據超過有效位,則超過C語言規定有效位的數據將被舍去,故產生誤差。

      3、字符型數據:用一個字節存儲單元存儲。即將字符的ASCII碼存儲到內存單元中。

      用單引號括起來的一個字符。

      轉義字符——特殊字符常量或者控制字符常量,它們都以“\”開頭。

      Char、unsigned char區別:char7位數表示,最大表示編碼為127的字符;unsigned char8位數表示,最大表示編碼為255的字符。

      字符數據與整型數據可以相互賦值。

      字符數據可以以字符數據輸出,也可以以整型數據形式輸出。

      4、字符串常量:C語言中,必須是用字符數組來保存字符串常量。在內存中順序存儲。

      用一對雙引號括起來的字符序列。

      每個字符串常量結尾以一個字符\0作為結束標記。(一般由系統自動加上)。

      3.5 變量63

      1、自動變量——在函數體內或復合語句中定義的非靜態變量稱為自動變量。

      C語言編譯時,不對自動變量賦初值。

      當程序執行到自動變量的作用域時,程序才為自動變量分配空間。當定義自動變量的函數或復合語句執行結束后,程序釋放自動變量的存儲空間。

      自動變量保存在程序的動態存儲空間。

      2、靜態局部變量——在函數體內或復合語句中用static定義的變量稱為靜態局部變量。

      C語言編譯時,對靜態局部變量賦初值。

      靜態局部變量存儲在程序的靜態存儲空間。

      靜態局部變量在程序的整個運行期間均占用程序的靜態存儲空間,直到程序退出后才釋放存儲空間。

      3、寄存器變量——register聲明的變量。

      4、外部變量(全局變量)——在函數的外部定義的變量。它的作用域是從定義處開始,到本程序文件的末尾結束,在此作用域內,全局變量可以為程序的各個函數引用。

      C語言編譯時,對全局變量賦初值。

      全局變量存儲在程序的靜態存儲空間。

      全局變量在程序的整個運行期間均占用程序的靜態存儲空間,直到程序退出后才釋放存儲空間。

      注意:

      1)當引用本源文件后面定義的全局變量或引用在其他源文件中定義的全局變量是,應在引用位置前,利用extern 聲明該全局變量,以告訴編譯器編譯時,引用的是一個外部變量,在編譯器連接時,將引用的外部變量的作用域擴展到本文件extern 聲明處。

      2)用static 聲明的全局變量,不能被其他文件引用。

      注意:

      1)變量聲明分為定義性聲明和引用性聲明。

      2)一般把建立存儲空間的聲明稱為變量定義,把不需要建立存儲空間的聲明成為變量聲明。

      3.6 不同類型數據間的混合運算

      不同類型數據進行混合運算時,不同類型的數據要先轉換成同一類型,按照類型級別由低到高(charshort—int——unsigned—long—double;float—double)的順序進行轉換。

      強制類型轉換——(類型名) 表達式。強制類型轉換也就是將存儲數據的內存單元強制轉換為另一種數據類型的單元大小。即強制將存放數據的內存單元改變。

      賦值時進行類型轉換:將數據復制給變量時,將會將數據強制轉換為要賦值變量的類型。一般短類型轉換為長類型時,進行符號擴展;長類型轉換為短類型時,僅賦值低位,難以保證數據的正確性。

      3.7 函數的調用過程(補充)

      C函數其實就是一個程序模塊。

      C函數在編譯時,單獨編譯成一個指令模塊,在函數模塊開始處定義保護現場指令,將用到的CPU寄存器壓入堆棧。在返回時定義了恢復現場指令,將堆棧數據恢復到CPU寄存器。

      在調用函數時,一般利用堆棧傳遞輸入參數;利用EAX傳遞輸出參數,注意在函數調用完成后,要維持堆棧平衡,且函數返回輸出參數在EAX中,在使用輸出參數前,不要改變EAX的值。

      第四章 最簡單的C程序設計——順序程序設計77

      4.1 字符數據的輸入輸出

      1、C語言沒有輸入輸出語句,IO操作通過調用系統函數實現。

      2、在程序的開頭,要有:#include “stdio.h” #include <stdio.h>,預定義語句,用來引用頭文件,在編譯時將頭文件中的函數原型聲明添加到源文件中。

      默認輸出設備——顯示屏,默認輸入設備——鍵盤。

      第五章 選擇結構的程序設計97

      第六章 循環結構程序設計

      6.1 語句標號

      語句標號——用于定義程序中的某個位置,用標識符表示,不能只用數字。

      6.2 break語句和continue語句

      1、break語句結束循環語句和switch語句。

      2、continue 結束本次循環,即忽略循環體中剩余的語句。

      第七章 數組132

      7.1 構造類型

      構造類型——是由基本類型按照一定規則構造而成的。(如數組、結構體、共同體、枚舉型)

      構造類型的每個分量(元素),是一個變量,它可以是一個簡單類型或者構造類型。

      構造類型的分量占用相鄰的存儲空間。

      7.2 數組133

      1、數組——是有序數據的集合,數據元素類型相同,順序存儲,占用相鄰的存儲空間。

      2、數組——數組必須先定義后引用。靜態數組變量定義時編譯器自動初始化數據元素為0,動態數組變量在程序執行時分配存儲空間,在未被賦值初始化之前其值隨機。

      3、C語言只能逐個引用數組元素,不能一次引用整個數組。

      4、數組引用是數組名+下標引用,數組下標均為整數。如a[2]。

      7.3 二維數組

      1、數組元素為數組。

      2、在內存中,C語言的二維數組中數組元素的存放順序是按行存放的。

      3、二維數組引用是數組名+下標+下標。如a[1][2]

      7.4 字符串——字符數組

      1、一般用\0來標識字符串結尾。\0占用一個字符變量空間。

      2、用字符串賦值字符數組時,C編譯器在字符串后自動加\0賦給字符數字。

      3、字符數組可以一次引用整個字符串數組。如整個字符串(數組)的輸入輸出,用%s格式,且在輸入字符數組時,用數組名代表數組的首地址,對于二維數組,僅僅寫行下標不寫列下標,也可以代表給行數組的首地址。

      在用%s輸入輸出字符串數組時,遇到\0結束。

      7.5 字符串處理函數 #include <string.h>

      1、gets(字符數組名)

      從鍵盤輸入一個字符串(以回車結束),并返回字符數組的起始地址。

      getstr)。

      2、puts(字符數組名/字符串)

      將數組中的字符串(\0結尾的字符序列)輸出到終端上,輸完換行。

      putsstr),puts“ok”)。

      3、strcpy(目的字符數組1名,源字符串/字符數組2名)

      拷貝時,將“\0”一起拷貝過去。

      4strcat(字符數組1名,字符串/字符數組2名)

      將字符串/字符數組2連接到字符數組1中。

      連接時,編譯器去掉字符數組1“\0”。

      5、strcmp(字符串/字符數組1名,字符串/字符數組2名)

      比較字符串/字符數組1名 和字符串/字符數組2名的大小。

      字符串/字符數組1>字符串/字符數組2,返回正數

      字符串/字符數組1=字符串/字符數組2,返回0

      字符串/字符數組1<字符串/字符數組2,返回負數。

      第八章 函數153

      8.1 c程序的結構154

      1、一個C程序可以分為若干個函數。

      2、每個程序只能有一個主函數,C程序的執行從main函數開始,從main函數結束。

      3、函數間可以互相調用,但主函數不能被調用。

      4、從用戶角度看,函數可分為標準函數(庫函數)和自定義函數。其中,編譯器僅編譯自定義函數,在連接時才將標準庫函數的目標代碼連接到程序。

      5、一個C源程序由一個或多個文件構成,一個源程序文件是一個編譯單位。

      8.2 函數調用參數傳遞

      1、值傳遞——如數值形參。此時,將實參值復制壓棧,被調函數對復制到棧中的數值進行操作,不改變原來實參值。

      2、地址傳遞——如數組形參(指針形參),此時,將實參數組的首地址壓棧,被調函數引用實參數組的首地址,找到實參數組,對實參數組進行操作,改變實參數組值。即形參數組和實參數組共享同一單元。

      8.3 函數變量的作用范圍

      1、局部變量——在定義局部變量的范圍內有效。當局部變量重名時,有效范圍小的優先。

      在函數內部定義局部變量

      函數的形式參數

      在某個復合語句中定義的變量。

      2、全局變量——在函數之外定義的變量。有效范圍是從定義變量的位置開始到源文件結束。

      8.4 變量的存儲類別

      變量的存儲類別,即生存期。內存中供用戶使用的存儲空間包括:程序區、靜態存儲區、動態存儲區。

      1、靜態存儲區——在編譯時分配空間,在程序運行完后才釋放存儲空間。存儲靜態局部變量和全局變量。

      局部靜態變量在編譯時賦初值,在執行時可改變該值,但該存儲空間一直保存到程序結束。

      定義局部靜態變量,如果沒有賦初值,編譯時會自動賦默認初值。

      局部靜態變量只能在定義它的函數中使用。

      全局變量都是靜態的。

      利用extern 外部變量方式表示變量的定義在別的文件中,提示編譯器遇到此變量時,在其他模塊中尋找其定義。而函數則是利用函數原型來聲明。

      static 關鍵字說明一個不能在其他源文件中引用的全局變量。即靜態全局變量在聲明它的整個文件都是可見的,但是在文件之外是不可見的。

      2、動態存儲區——僅在在執行時分配空間,用完后釋放存儲空間。存放自動變量和形式參數。

      寄存器變量——register關鍵字說明。寄存器變量對寄存器的占用是動態的。

      第九章 預處理命令197

      9.1 預編譯命令作用

      預編譯命令主要完成宏定義、文件包含、條件編譯三種功能。

      1、宏定義——指用一個指定的標識符(名字)來代表一個字符串。在預編譯時,將宏名替代成字符串的過程稱為宏展開。如:

      # define PI 3.1415926 定義宏,
      # undef PI 終止宏定義的作用域。

      #define V(a,b,c) a*b*c 定義帶參數的宏。當宏展開時,將引用宏名語句中的實參字符串代替宏定義的形參字符串。
      int v =V(2,3,4) 則宏展開后為:int v= 2*3*4;

      2、文件包含——指一個源文件可以將另一個源文件的全部內容包含進來。如:

      #include “文件名
      #include <文件名>

      編譯預處理時,將包含文件的全部內容復制到源文件中。在編譯時作為一個源程序來編譯。

      3、條件編譯——在預編譯處理時,確定編譯時要編譯的部分。如:

      # ifdef 標識符
      程序段1
      # else
      程序段2
      # endif

      # if 表達式
      程序段1
      # else
      程序段2
      # endif

      第十章 指針211

      10.1 變量的訪問方式

      1、直接訪問——如:int a = 10

      2、間接訪問——定義一個指針變量p,存放變量a的首地址,通過p訪問變量a。則稱指針變量p指向變量a。

      如:int a=10;int *p1; p=&a;b=*p1; *p1=100;等價于a=100;

      10.2 指針變量

      1、指針變量的類型——是指該變量指向的內存數據的數據類型。

      2、必須用引用變量的地址給指針變量賦值。

      3、可以給指針變量賦值空值null,防止指針變量存儲隨機值導致系統錯誤。

      4、數組名代表數據的首地址。數組指針或數組名+1,指向下一個數組元素的存儲地址。

      聲明格式:數據類型 *p 

      賦值格式:p=a;或p=&a[0]

      引用格式:*p=常量;等價于p[0]=常量;等價于a[0]=常量;等價于*a=常量;

      *p+1=常量;等價于p[1]=常量;等價于a[1]=常量;

      等價于*a+1=常量;

      5、數組名和指針變量雖然都可以代表數組的首地址,但是指針變量值可以改變,而數組名的值不可以改變。

      6、函數的指針專門用來存放函數的入口地址,當把函數的地址賦值給它時,它就指向該函數的入口地址。

      聲明格式:數據類型(*指針變量名)()如:int *P)();

      賦值格式:p=max; max為定義的函數名;函數名代表該函數的入口地址。

      引用格式:c=*p)(a,b);等價——c=maxab);

      7、只能將變量已分配的地址賦值給指針變量,不能直接將整數賦值給指針變量。

      8、指針變量可以有null值,防止指針誤作用。

      第十一章 結構體270

      11.1 結構體270

      1、作用——將不同類型的數據組合成一個有機的整體。

      2、結構體的定義——結構體是一種數據結構,按照某種規則定義,將若干個不同數據類型(也可相同)的數據項的組合成的一個有機整體。

      3、聲明結構體類型的形式:struct 結構體類型名字 {成員列表};

      成員列表形式:類型符 成員名 如:int num

      11.2 聲明結構體類型變量的方法271

      1、先定義結構體類型:struct 結構體類型名字 {成員列表};再定義結構體變量:struct結構體類型名字 結構體變量名。

      2、可在定義結構體類型時,定義結構體類型變量。struct 結構體類型名字 {成員列表}結構體類型變量1,結構體類型變量2……;

      11.3 結構體變量引用273

      1、不能將一個結構體變量作為一個整體進行輸入輸出,只能對結構體變量成員分別賦值。

      2、結構體變量成員引用方式:結構體變量名.成員名

      3、如果結構體變量成員是另一個結構體變量,則要用若干個成員運算符,一級一級找到最低一級的成員。

      11.4 結構體變量初始化

      1、在聲明變量時整體賦值。

      2、復制相同結構的變量賦值。

      3、除以上兩種情況下可以對結構體類型變量整體賦值,其余情況下只能對變量成員分別賦值。

      11.5 結構體數組275

      1、結構體數組在內存中連續存放。

      2、聲明方式:與定義結構體變量方法相同。見11.2,只是在變量名后+[n]。也可在定義結構體數組時直接初始化結構體數組,此時可采用+[]的形式。

      3、初始化方式:同定義結構體變量方法。

      11.6 結構體類型指針

      結構體類型指針——是指指向結構體變量所占據的內存的起始位置的指針。

      聲明形式:struct 結構體類型名 *指針名。如:struct student *p;

      賦值形式:指針名=&結構體變量 。如:p=&studengt1

      引用形式:(*P.成員名  p->成員名。*p表示指針p指向的結構體變量。

      注意:

      1、定義的結構體類型,和聲明結構體變量時不分配空間。

      2、結構體可以嵌套定義。

      3、結構體成員名可以與變量名相同。

      11.7 鏈表283

      1、單項鏈表結構:鏈表有一個頭指針和表尾null指針。每個結點包含實際數據和下一個結點的地址。

      2、可以用結構體類型指針,將多個結構體變量鏈接起來形成結構體鏈表。如:

      11.8 共用體 297

      1、共用體指將幾種不同類型的變量存儲在同一段內存單元中。

      2、共用體變量的存儲單元大小等于最長成員變量所占內存的長度

      3、共用體變量中起作用的是最后一次存放成員。

      4、共用體類型聲明方式:union 公用體類型名稱 {成員變量列表};

      5、共用體變量聲明方式:(1union 公用體類型名稱 {成員列表}共用體變量;(2)先聲明共用體類型,然后聲明共用體變量,union 公用體類型名稱 共用體變量。

      11.9 枚舉類型301

      1、枚舉類型——指將變量的值一一列舉出來,變量的值只限于列舉出來的值的范圍內的一個。

      2、聲明枚舉類型:enum 枚舉類型名稱 {枚舉常量列表};

      3、聲明枚舉變量:enum 枚舉類型名稱 枚舉類型變量;

      11.10 用typedef定義的類型304

      1、typedef 的作用——可以用typedef聲明新的類型名來代替已有的類型名。

      2、聲明方式:typedef 類型名稱 新的類型名稱。

      第十二章 位運算308

      12.1 位段 315

      1、位段——是一種特殊的數據結構,它允許定義一個由位組成段,并可為它賦以一個名字。位段一般作為結構體的成員。

      2、聲明方法:

      位段結構類型聲明方法:struct 結構體類型名稱 {位段成員列表};

      位段結構成員(即位段變量)聲明方法:unsigned int 位段變量 : n;

      如:

      struct packed_struct{
      unsigned int f1 :1;
      unsigned int f2 :1;
      unsigned int f3 :1;
      unsigned int type :4;
      unsigned int index :9;
      };

      3、位段結構類型變量聲明方法:同結構體。

      4、同一位段必須存儲在同一個存儲單元中,不能跨兩個單元。

      第十三章 文件319

      13.1 文件319

      1、文件——指存儲在外部介質上的數據集合(數據文件),操作系統以文件為單位對數據進行管理。

      13.2 文件的分類319

      1、從用戶的觀點看:

      特殊文件——指標準輸入輸出文件或標準設備文件。

      普通文件——指磁盤文件。

      2、從操作系統的角度看:每一個與主機相關聯的輸入輸出設備都可看作一個文件。

      1)根據文件的組織形式分為:順序存取文件  隨機存取文件。

      2)根據文件的存儲形式分為:ASCII文件  二進制文件。

      13.3 C語言對文件的處理方法319

      C語言中對文件的存取是以字符(字節)為單位的,一個輸入輸出流就是一個字節流或二進制流。

      文件的存儲方式分為緩沖文件系統和非緩沖文件系統。區別是緩沖文件系統是系統自動開辟緩沖區,非緩沖文件系統是由程序為每個文件設定緩沖區。

      ANSI C標準只采用 緩沖文件系統 來處理文件。

      13.4 文件結構體類型321

      緩沖文件系統中,每個被使用的文件都在內存中開辟一個FILE結構體類型的區,用來存放文件的有關信息(文件名字、文件狀態、當前位置、緩沖區等有關信息),

      FILE結構體類型原型:

      typedef struct
      short level; *緩沖區滿的程度*
      unsigned flags; *文件狀態標志*
      char fd; *文件描述符*
      unsigned char hold; *如無緩沖區不讀取字符*
      short bsize; *緩沖區的大小*
      unsigned char *buffer; / *數據緩沖區的位置*/
      unsigned char *curp; /*指針,當前的指向*/
      unsigned istemp; /*臨時文件,指示器*/
      short token;/*用于有效性檢查*/FILE

      13.5 文件結構體數組和指針321

      FILE *fp——聲明了一個指向FILE類型結構體的指針變量。

      FILE f5——聲明了一個文件結構體數組f,它有5個元素,存放5個文件的信息。

      FILE 變量——聲明了一個文件結構體變量。

      13.6 文件的操作321

      C語言要求,在文件讀寫之前要打開文件,在使用結束后要關閉文件。

      1、打開文件:

      FILE *fp;

      fpfopen文件名使用文件方式);指針變量指向被打開的文件。

      例如:fp = fopen“a1”“r”)。

      2、關閉文件:

      fclose(文件指針);返回值:關閉成功返回值為0;否則返回EOF(-1) 。

      使文件指針變量不指向該文件,也就是文件指針變量與文件脫鉤,此后不能再通過該指針對原來與其相聯系的文件進行讀寫操作。

      3、將字符寫到文件中:

      fputc ( ch,fp ) ;返回值:如果輸出成功,則返回值就是輸出的字符;如果輸出失敗,則返回一個EOF-1)。

      將字符(ch的值)輸出到文件指針fp所指向的文件中去。該文件必須是以寫或讀寫方式打開的。

      4、將字符從文件中讀出:

      chfgetcfp);返回值:讀取成功一個字符,賦給ch。如果遇到文件結束符,返回一個文件結束標志EOF-1)。

      從指定的文件讀入一個字符,該文件必須是以讀或讀寫方式打開的。

      注意:ANSI C提供一個feof()函數來判斷文件是否真的結束。如果是文件結束,函數feoffp)的值為1(真);否則為0(假)。以上也適用于文本文件的讀取。

      5、數據塊讀寫:

      fread (buffer,size,count,fp);

      fwrite(buffer,size,count,fp);

      buffer:是一個指針。對fread 來說,它是讀入數據的存放地址。對fwrite來說,是要輸出數據的地址(均指起始地址)。

      size: 要讀寫的字節數。

      count: 要進行讀寫多少個size字節的數據項。

      fp: 文件型指針。

      6、格式化讀寫函數:

      fprintf ( 文件指針,格式字符串,輸出表列);

      fscanf ( 文件指針,格式字符串,輸入表列);

      注意:

      fprintffscanf函數對磁盤文件讀寫,使用方便,容易理解,但由于在輸入時要將ASCII碼轉換為二進制形式,在輸出時又要將二進制形式轉換成字符,花費時間比較多。因此,在內存與磁盤頻繁交換數據的情況下,最好不用fprintffscanf函數,而用freadfwrite函數。

      7、以或者整數為單位讀寫函數:

      putw(int i,FILE * fp);

      int i = getw(FILE * fp);

      8、以字符串為單位讀寫文件的函數:

      fgets(str,n,fp); fp指向的文件讀出n-1個字符,在最后加一個’\0’。返回值:str的首地址。如果遇到EOF則讀入結束。

      fputs(“china”,fp); 把字符串寫入到fp指向的文件。第一個參數可以是字符串常量、字符數組名或字符型指針。字符串末尾的\0不輸出。

      13.7 文件的定位333

      1、將文件當前的位置指針重新返回到文件的開頭位置:無返回值。

      rewind fp);執行后,將文件的位置指針重新定位到文件的開頭。

      2、隨機讀寫:改變文件的位置指針,一般用于二進制文件。

      fseek(文件類型指針,位移量,起始點);無返回值。

      起始點:文件開頭 SEEK_SET 0

      文件當前位置 SEEK_CUR 1

      文件末尾 SEEK_END 2

      位移量:以起始點為基點,向后(前,末尾時)移動的字節數。一般要求為long型。

      3、獲取流式文件當前的位置指針:返回當前位置——用相對于文件開頭的位移量來表示。,出錯時返回EOF。

      i = ftell(fp);

      13.8 出錯檢測335

      1、ferrorfp);返回0,表示未出錯;返回非0,表示出錯。

      注意:在調用一個輸入輸出函數后立即檢查ferror函數的值,否則信息會丟失。在執行fopen函數時,ferror函數的初始值自動置為0。

      2、clearerr(fp);使文件錯誤標志和文件結束標志置為0。

      只要出現錯誤標志,就一直保留,直到對同一文件調用clearerr函數或rewind函數,或任何其他一個輸入輸出函數。調用后feerorfp)的值變為0,且文件結束標志置為0

      13.9 小結336

      分類 函數名 功能

      打開文件 fopen() 打開文件

      關閉文件 fclose() 關閉文件

      文件定位 fseek() 改變文件位置指針的位置

      Rewind() 使文件位置指針重新至于文件開頭

      Ftell() 返回文件位置指針的當前值

      文件狀態 feof() 若到文件末尾,函數值為真

      Ferror() 若對文件操作出錯,函數值為真

      Clearerr() 使ferrorfeof()函數值置零

      文件讀寫 fgetc(),getc()從指定文件取得一個字符

      fputc(),putc()把字符輸出到指定文件

      fgets()從指定文件讀取字符串

      fputs()把字符串輸出到指定文件

      getw()從指定文件讀取一個字(int型)

      putw()把一個字輸出到指定文件

      fread()從指定文件中讀取數據項

      fwrite()把數據項寫到指定文件中

      fscanf()從指定文件按格式輸入數據

      fprintf()按指定格式將數據寫到指定文件中

      第十四章 C++對C的擴充 338

      14.1 C++的特點338

      1C++保留了C語言原有的所有優點,增加了面向對象的機制。

      2、C++源文件以.cpp為后綴。

      3、除了可以用 /*……*/ 形式的注釋行外,還允許使用以// 開頭的單行注釋。

      4、除了可以用printf函數輸出信息外,還可以用cout進行輸出。cout的作用是將<<運算符右側的內容送到輸出設備中輸出。使用cout需要用到頭文件iostream.h,在程序的第一行用#include命令將該頭文件包含進來。

      cout <<" This is a c++ program.\ n" ;

      14.2 C++的輸入輸出 339

      C++為了方便使用,除了可以利用printfscanf函數進行輸出和輸入外,還增加了標準輸入輸出流coutcin。cout是由cout兩個單詞組成的,代表C++的輸出流,cin是由cin兩個單詞組成的,代表C++的輸入流。它們是在頭文件iostream.h中定義的。在鍵盤和顯示器上的輸入輸出稱為標準輸入輸出,標準流是不需要打開和關閉文件即可直接操作的流式文件。

      14.3 C++的輸出cout

      1、cout必須和輸出運算符<<一起使用。<< 在這里不作為位運算的左移運算符,而是起插入的作用,例如:cout<<"Hello!\n";的作用是將字符串“Hello!\n” 插入到輸出流cout中,也就是輸出在標準輸出設備上。

      2、也可以不用\n控制換行,在頭文件iostream.h中定義了控制符endl代表回車換行操作,作用與\n相同。endl的含義是end of line,表示結束一行。

      3、可以在一個輸出語句中使用多個運算符<< 將多個輸出項插入到輸出流cout中,<<運算符的結合方向為自左向右,因此各輸出項按自左向右順序插入到輸出流中。每輸出一項要用一個<< 符號。

      例如:

      for (i=1; i<=3;i++)

      cout<<"count="<<i<<endl;

      輸出結果為:

      count=1

      count=2

      count= 3

      4、用cout<< 可以輸出任何類型的數據。例如:

      float a=3.45;

      int b=5;

      char c=′A′;

      cout<<"a="<<a<<""<<"b="<<b<<","<<"c="<<c<<endl;

      5、如果要指定輸出所占的列數,可以用控制符setw設置(注意:若使用setw,必須包含頭文件 iomanip.h),如setw(5) 的作用是為其后面一個輸出項預留5列,如輸出項的長度不足5列則數據向右對齊,若超過5列則按實際長度輸出。例如:

      cout<<"a="<<setw(6)<<a<<endl
      <<"b="<<setw(6)<<b<<endl
      <<"c="<<setw(6)<<c<<endl;

      輸出結果為:

      a=3.45

      b= 5

      c= A

      6、在C++中將數據送到輸出流稱為插入”(inserting) ,或放到”(putting) 。<< 常稱為插入運算符

      14.4 C++的輸入 cin 341

      1、輸入流是指從輸入設備向內存流動的數據流。標準輸入流cin是從鍵盤向內存流動的數據流。用>> 運算符從輸入設備鍵盤取得數據送到輸入流cin中,然后送到內存。在C++中,這種輸入操作稱為提取”(extracting) 得到”(getting) 。>> 常稱為提取運算符。

      2、cin要與 >> 配合使用。例如:

      3、C++為流輸入輸出提供了格式控制,如:dec(用十進制形式),hex(用十六進制形式),oct(用八進制形式), 還可以控制實數的輸出精度等。

      14.5 函數的重載342

      1、C++允許在同一作用域中用同一函數名定義多個函數,這些函數的參數個數和參數類型不同,而且函數類型也可不同,這就是函數的重載,即一個函數名多用。

      2、系統會根據參數的類型和個數找到與之匹配的函數,并調用不同的函數。

      14.6 帶缺省參數的函數344

      C++允許實參個數與形參個數不同。辦法是在形參表列中對一個或幾個形參指定缺省值(或稱默認值)

      例如某一函數的首部可用如下形式:

      void fun(int a, int b, int c=100)

      在調用此函數時如寫成fun(2,4,6),則形參a,bc的值分別為2,46(這是與過去一樣的)。如果寫成fun(24) ,即少寫了最后一個參數,由于在函數定義時已指定了c的缺省值為100,因此ab,c的值分別為2,4,100。請注意:賦予缺省值的參數必須放在形參表列中的最右端。例如:

      void f1(float a, int b, int c=0, char d=′a′) (正確)

      void f2(float a int c=0, char d=′a′, int b) (不正確)

      注意:不要同時使用重載函數和缺省參數的函數,因為當調用函數時少寫一個參數,系統無法判定是利用重載函數還是利用缺省參數的函數,會發生錯誤。

      14.7 變量的引用類型345

      1、引用”(reference)C++的一種新的變量類型,是對C的一個重要擴充。它的作用是為一個變量起一個別名。

      2、假如有一個變量a,想給它起一個別名b,可以這樣寫:

      int a;

      int &b=a;

      這就聲明了ba引用,即a的別名。經過這樣的聲明后,使用ab的作用相同,都代表同一變量。注意:在上述聲明中,&引用聲明符, 并不代表地址。不要理解為a的值賦給b的地址

      3、聲明引用并不另開辟內存單元,ba都代表同一變量單元。在聲明一個引用型變量時,必須同時使之初始化,即聲明它代表哪一個變量。 在聲明一個變量的引用后,

      4、在本函數執行期間,該引用一直與其代表的變量相聯系,不能再作為其他變量的別名。下面的用法不對:

      int a1,a2;

      int &b=a1;

      int &b=a2;(企圖使b變成a2的引用(別名)是不行的)

      5、C++之所以增加引用,主要是把它作為函數參數,以擴充函數傳遞數據的功能。 C++提供了向函數傳遞數據的第三種方法,即傳送變量的別名。例如:

      #include <iostream.h>

      void swap(int &a, int &b)

      {int temp;

      temp=a;

      a=b;

      b=temp;

      }

      void main( )

      {int i=3,j=5;

      swap(i j);

      cout<<"i="<<i<<" "<<"j="<<j<<endl;

      }

      swap函數的形參表列中聲明變量a是整型的引用變量(和其他變量一樣,既可以在函數體中聲明變量的類型,也可以在定義函數時在形參表列中聲明變量的類型)。

      請注意:在此處&a不是“a的地址,而是指“a是一個引用型變量。 但是此時并未對它們初始化,即未指定它們是哪個變量的別名。當main函數調用swap函數時由實參把變量名傳給形參。i的名字傳給引用變量a,這樣a就成了i的別名。同理,b成為j的別名。ai代表同一個變量,bj代表同一個變量。在swap函數中使ab的值對換,顯然,ij的值同時改變了。

      當讀者看到&a這樣的形式時,怎樣區別是聲明引用變量還是取地址的操作呢?請記住,當&a的前面有類型符時(如int &a),它必然是對引用的聲明;如果前面無類型符(如&a),則是取變量的地址。

      14.8 內置函數 348

      調用函數時需要一定的時間,如果有的函數需要頻繁使用,則所用時間會很長,從而降低程序的執行效率。C++提供一種提高效率的方法,即在編譯時將所調用函數的代碼嵌入到主調函數中。這種嵌入到主調函數中的函數稱為內置函數(inline function),又稱內嵌函數。

      例如:

      #include <iostream.h>

      inline int max(int a int b, int c) //這是一個內置函數,求3個整數中的最大者

      { if (b>a) a=b;

      if (c>a) a=c;

      return a;

      }

      void main( )

      {int i=7, j=10 k=25 m ;

      m=max(i, j k);

      cout<<"max="<<m<<endl;

      }

      14.9 作用域運算符349

      1、作用域運算符∷ ,∷aa表示全局作用域中的變量。

      2、不能用∷ 訪問函數中的局部變量。

      14.10 動態分配運算符new349

      1、new運算符使用的一般格式為: new 類型 [初值];

      2、用new分配數組空間時不能指定初值。

      3、如果由于內存不足等原因而無法正常分配空間,則new會返回一個空指針NULL,用戶可以根據該指針的值判斷分配空間是否成功。

      例子:

      new int; (開辟一個存放整數的空間,返回一個指向整型數據的指針)

      new int(100); (開辟一個存放整數的空間,并指定該整數的初值為100

      new char10(開辟一個存放字符數組的空間,該數組有10個元素,返回一個指向字符數據的指針)

      new int5][4(開辟一個存放二維整型數組的空間,該數組大小為5*4

      float *p=new float(3.14159) (開辟一個存放實數的空間,并指定該實數的初值為3.14159,將返回的指向實型數據的指針賦給指針變量p

      14.11 撤銷內存運算符 delete250

      1、delete運算符使用的一般格式為: delete   指針變量;

      例如:

      要撤銷上面用new開辟的存放實數的空間(上面第5個例子),應該用 delete p;

      前面用new char10 開辟的空間,如果把返回的指針賦給了指針變量pt,則應該用以下形式的delete運算符撤銷: delete   pt;(在指針變量前面加一對方括號,表示對數組空間的操作)。

       

       
      主站蜘蛛池模板: 国产又色又刺激高潮视频| 亚洲区小说区图片区qvod | 资源在线观看视频一区二区| 蜜桃亚洲一区二区三区四| 精品人妻中文字幕在线| 国产中文字幕在线一区| 国产精品毛片av999999| 国产精品入口麻豆| 狠狠五月深爱婷婷网| 日本免费视频| 丰满少妇被猛烈进出69影院| 自拍视频一区二区三区四区| 九九热视频在线免费观看| 张家界市| 伊人激情av一区二区三区| 国产精品色呦呦在线观看| 日本在线视频网站www色下载| 库尔勒市| 亚洲av激情一区二区三区| 国产精品亚洲国际在线看| 国产99在线 | 免费| 漂亮人妻中文字幕丝袜| 精品尤物TV福利院在线网站 | 极品少妇无套内射视频| 内射一区二区三区四区| 欧美日韩一区二区三区视频播放| 漂亮人妻被强中文字幕久久| 激情综合五月丁香亚洲| 给我中国免费播放片在线| 日本丰满白嫩大屁股ass| 永久免费的av在线电影网| 精品少妇av蜜臀av| 国产欧美日韩在线在线播放| 亚洲中文字幕人妻系列| 国产精品99一区二区三区| 久久国产乱子伦免费精品无码| 亚洲AV日韩精品久久久久| 自拍偷在线精品自拍偷免费| 日韩一区二区三区三级| 亚洲国产精品日韩在线| 欧洲美熟女乱又伦免费视频|