開端—C程式設計 略看

來源:互聯網
上載者:User

 譚浩強著,c語言程式設計第二版,,大概地翻了翻--紀念下
第一章 c語言概述
1。 C語言是在B語言的基礎上發展而來,1975年unix第六版發布後,C語言才引起人們普片注意.
2。 C語言特點:語言簡潔,緊湊,使用方便;運算子多;資料結構豐富;具有結構化的控制語句;文法限制不太嚴格;能進行位(bit)操作,實現組合語言的大部分功能,能直接對硬體進行操作;產生目標代碼品質高,執行效率高;可移植性好(與彙編相比);
3。 簡單介紹:C程式是由函數構成,都必須有一個main函數,作為入口,函數由首部[函數類型函數名,參數類型,參數名]和函數體[聲明部分,執行部分]組成 ;;語句由分號(;)分割;用/* ----- */進行注釋
4。 運行步驟:輸入來源程式->編譯->與庫函數連結->運行可執行目標程式 (.C  --> .obj --> .exe)
 
第二章 程式的靈魂--演算法
1. 程式包含對資料的描述[資料結構]和對操作的描述[演算法]....程式 = 演算法 +資料結構 + 程式設計方法 + 語言工具和環境
2。 廣義的說為解決問題而採用的方法和步驟即稱為演算法,..主要講電腦能執行的演算法(如給我理髮就不能).分 數值[求數值解]和非數值演算法[事務領域如檢索管理調度等]
3 . 舉例:如判斷瑞年,求平均數,判斷素數,求有規律的加減乘除運算等
4 .演算法特點:有窮性,確定性,有零個或多個輸入,有一個或多個輸出,有效性,
5,.演算法的表示:自然語言(如漢語,英語等),用流程圖表示(用一些圖框表示)(BS傳統流程圖,N-S結構化的流程圖大框裡面含小框[包括順序,選擇和迴圈結構框]
虛擬碼表示(中英文混合,把意思表達清楚即可).用電腦語言表示(與c,語言,java語言等)
6。結構化程式設計:自頂向下,逐步細化,模組化設計,結構化編碼

 
第三章 資料類型,運算子,運算式
1。資料類型:基本類型[整型,字元型,浮點型(單精確度和雙精確度),枚舉型],構造類型[數組,結構體,共用體],指標類型,空類型(void)
2. 常量和變數;程式運行過程中,其值不能被改變的量稱為常量,一般從字面意思即可判斷,可用一個標示符代表一個常量,用#define定義,如#define PRICE 30 則出現PRICE的地方用30代替,不能再給PRICE賦值,改變時,'一改全改'
   變數:其值可以改變的量稱為變數,應該由一個名字在記憶體中佔據一定的儲存的單元.變數名實際上是一個符號地址,在編譯時間由系統分配記憶體位址,程式通過變數名找到對應的記憶體位址,從儲存單元取值---變數要求先定義後使用
3。整形資料 :十進位,八進位 (以0開頭如0123等於83, -011等於-9) 十六進位(以0x開頭,如0x123等於291,0x12等於-18
   存放方式,2個位元組16位,2的16次方,若有符號則取以為表示符號,
4。 實型(浮點型)--十進位形式或指數形式如1.23e3;  float佔四個位元組.double 佔8位,long double 佔16位,分數符,指數部分,小數部分
5 .字元型資料;以單引號引起來,如'a' ..  '\'為逸出字元,如\n表示換行,\\指\..\'指' ;;只能存放一個字元,將該字元對應的ASCII碼,放到儲存單元中.
6。 算術運演算法:算術,關係,邏輯,位,賦值,條件,逗號,指標,下標等
7。賦值運算子 =號,類型轉換

第四章 順序程式設計
1。c語句分類:控制語句[if else,for while continue,break,return等],函數調用語句,運算式語句(運算,賦值等),空語句,用{}括起來的符合語句
2。資料的輸入輸出.如printf,scanf不是C語言文本中的組成部分,是c提供的函數以庫的形式放於系統中,使用時要用先行編譯命令#include 添加標頭檔,如#include"studio.h"
3. 字元輸入,輸出char c ;putchar(c),c= getchar();格式化輸入輸出printf(格式控制,輸出資料行表)如printf("%d,%c\n",i,c).
4。 格式字元:d格式符,輸出十進位整數,%d,%md(m表示輸出寬度),%ld(輸出長整型
             o格式,以八進位形式輸出整數
             u格式,輸出unsigned型整數,
             c格式,,輸出一個字元
             s格式,輸出一個字串,%s,%ms,%-md,%m.nd---
             f格式,e格式,g格式
             想輸出%,用2個百分比符號如 printf("%f%f%",1.0/3)--輸出 0.33333%
5.scanf 格式輸入函數
6。順序結構設計舉例

第五章 選接結構程式設計
1。 if (關聯運算式) 語句1 else 語句2
2。 &&邏輯與, ||邏輯或,!邏輯非
3。 switch語句.注意添加break;

 

第六章 迴圈控制
1.goto語句
2。while語句
3。do-while語句
4。for語句
5。迴圈的嵌套,
6。break 語句,continue語句

第七章 數組
1。一維數組定義:  類型說明符 數組名[常量運算式] 如int a[10]
2.一維數組引用:  數組名[下標] 如 a[0] --- a[9]
3 一維數組初始化: (1)可在定義時賦值如 int a[5]={0,1,2,3,4} (2)只給一部分賦值如 int a[5] = {0,1,2,3} 只給前幾位賦值 (3)全部賦值0可寫成 int a[5]={0}
                  (4)在對全部元素賦處值時,可以不指定數組長度,如int a[]={0,1,2,3,4}a
4.二維數組 定義與引用
   (1)定義: 類型說明符 數組名[常量運算式][常量運算式] 如 int a[3][4] 定義了3行四列的數組
   (2)引用: 數組名[下標][下標]
   (3)賦值 a : 如 int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}
5,字元數組
   (1)定義:如 char c[10] (2)引用, (3)初始化都類似
   (4)字串和字串結束標誌:C語言中將字串作為字元數組來處理,系統對字串常量自動加一個'\0'做為結束符
  (5)字串處理函數:puts(字元數組) , gets(字元數組) , strcat(字元數組1,字元數組2) , strcpy(數組一,數組二),strcmp(字串1,字串2)
     strlen(字元數組)測試實際字串長度,不包括'\0\ strlwr(字串) , strupr(字串)分別是 string to lowercase ,string to uppercase

 

第八章 函數
1。概述 :一個來源程式檔案由一個或多個函數組成,來源程式檔案是編譯模組,而不是以函數為單位進行編譯;;一個c程式由一個多多個來源程式檔案組成
        c程式從main函數開始,在main函數中結束,函數都是平行的;;使用者角度分 標準函數(庫函數),自訂函數;;從形式有參和無參
2。定義的形式: 類型標示符 函數名([形參列表]) {聲明部分,語句; }

3。形參實參.定義時用的是形參,調用時賦值的是實參
4。傳回值:通過return 語句獲得
5。函數調用
6。函數嵌套
7 函數遞迴
8。數組作為參數傳遞
9。局部變數,全域變數
10。變數的儲存類別:靜態儲存(程式運行時,分配固定的儲存空間,動態儲存裝置(運行期間根據動態需要分配)
auto.static,register變數
11。用extern聲明外部變數;;;在一個檔案內部聲明外部變數,在多檔案程式中聲明外部變數
12,用static聲明外部變數
13。內建函式 外部函數
14。如何運行一個多檔案的程式.:建立專案檔,用include命令
第九章 預先處理命令
1。宏定義 #define 標示符 字串
2。檔案包含#include <檔案名稱>
3。條件編譯 #ifdef 標識符
                        程式段
            #else
                程式段
            #endif

 

第十章 指標
1。 想著挺清,可寫不出來,,,
記憶體中每個位元組都有一個編號,程式中通過變數名對變數進行操作,而實際上經過編譯以後已將變數名轉換為了變數的地址,是通過地址進行讀取操作,
用一個變數專門來存放另一個變數的地址,稱為指標變數---這樣操作指標即相當於操作變數
2。定義變數指標.. 基底類型 * 指標變數名 .如int *p
3, 指標變數的引用:*指標運算子, &取地址運算子
4。.指標作為函數參數傳遞,在內部改變的是實參的值
5。 數組與指標y
指向數組元素的指標,如int a[10] ;int *p ;p = &a[0] .則p是a[0]元素的地址
6。通過指標引用數組元素m..  假設上面p指向數組a的第一個元素,則p+1指向a數組的下一個元素
7..用函數名作函數參數
8。多維陣列與指標
9字串與指標
-------------
借用網上的:
(1).指標的加減法:指標的加減法不是作簡單的加減,而是以指標變數所佔的位元組數為單位進行加減.
(2).數組名是指標常量,不能改變其值,比如數組a[ ],如果進行a++;就會報錯
(3). 雖然指標變數中存放的地址是整型資料,但不能將整型資料直接賦值給指標變數,應該這樣(假如p為int *型),p=(int *)1000;但禁用些法,因為你不知道1000這個單元有沒有被其它單元佔用,後果不可預料,同樣也不能將一個指標變數的值直接賦給整形變數,也要進行強制類型轉換.
(4)定義指標後,在使用之前一定要先給它賦初值,切記
(5).二維數組中指標問題(int a[3] [4]),數組名a是一個指向行的指標(指向數組),而在其前面加一個 * ,*a就是指向列的指標(指向無素).a與*都是指向a[0][0];但a+1(行指標)指向a[1][0];而*a+1(列指標,和*(a+0)+1一樣)卻指向a[0][1];同樣在a+1前加一個*就又變成列指標了,*(a+1)+2就指向a[1][2].
(6),複雜類型的說明:從變數名處起,根據運算子優先順序結合,一步一步分析,下面以一個比較複雜的類型(int * (*p(int))[ ])為例:
第一步,p先與()結合,說明是一個函數,第二步,()內有一個int,說明函數有一個形參為int型,第三步與*結合,說明返回的是一個指標變數,第四步與[ ]結合,說明該指標變數指向數組,第五步再與*結合,說明數組中的元素為指標型,第六步說明數組中的指標元素的類型為int型,完畢,所以這是一個返回一個由整型指標變數組成的數組的指標變數的函數.

 

-------------
第十一章 結構體,共用體
1。定義結構體變數,變數的引用,初始化,結構體數組
2。指向結構體類型的指標
3,用指標處理鏈表,鏈表的操作
4。枚舉類型
5。typeof定義類型

 

第十二章 位元運算
1。位元運算指進行二進位的運算,
2。包括: & 按位與, ~取反, |按位或, << 左移, ^按位異或, >> 右移 --- 除~取反外都是二目運算子

第十三章 檔案
1。作業系統以檔案為單位進行管理的;;;;;;;C 語言把檔案看做一個字元(位元組)徐磊..根據資料的組織形式,分 ASCII 檔案和二進位檔案.
C語言中對檔案的操作是通過庫函數完成的.
2。檔案類型指標:定義了一個檔案的結構,typedef struct {short level;unsigne flag ;等略} FILE ;-->可定義一二FILE數組 FILE f[5] -->可存放多個檔案資訊-->定義檔案類型指標FILE * fp,可使fp指向
某一個檔案的結構體變數,從而訪問該檔案
3。檔案的開啟,關閉 fopen 函數 返回一個檔案型指標, FILE * fp = fopen(檔案名稱,開啟檔案) 開啟檔案[r讀,w寫,a追加,b二進位]: r,w,a ,rb,wb,ab,
 r+ 讀寫,必須已存在,w+讀寫建立一個新檔案,原來若有被刪除,a+為讀寫開啟一個文本,若有則追加. 關閉用fclose(fp);

4。檔案讀寫:::fputc函數,fgetc函數, putc ,getc,fread,fwrite,fprintf,fscanf,getw,fgets,fputs,putw
5.檔案定位:rewind(重新置放於檔案開頭) fseek(檔案指標,位移量,起始點). ftell(fp) 擷取流式檔案當前位置
6,出錯檢測 ferror函數, ferror(fp)返回0 未出錯, clearerr函數,使檔案錯誤標誌和結束標誌為零

 

十四章(C++對C的擴充)
1。添加了//形式的注釋
2。輸入輸出用cin>> cout<<
3.  C++ --.cpp C plus plus
4。 重載(函數參數個數,類型以及傳回型別 都可不同)同名函數不同功能.
5。 函數(帶預設參數的,放在最右端,如void 飛(int a,int b,int c=10);
6。  .引用(C++中新的變數類型,-為一個變數起一個別名-如int a;int& b = a;聲明引用不另闢記憶體單元,代表同一變數,一個變另一個也一起做相應變化
函數參數傳遞方式
(1)傳給形參變數的值,如void swap(int a,int b)--int i=3,j=5;swap(i,j)--在swap內進行了互動但i,j值沒變
(2)傳給形參變數的指標,如void swap(int *a,int *b)--int i=3.j=5;swap(&i,&j)--在swap內操作的是(int 型的)*a和*b(是地址).i,j的值改變了
(3)C++添加的,傳給形參變數的別名:如void swap(int & a,int &b)--int i =3,j=5; swap(i,j)--在swap內操作的是(int &型的)a,b(是別名),i,j的值隨著改變
7. 內建函數,在函數名前加inline ,如inline int max(int a,int b).相當於把改函數加到調用它的地方作為一個程式段,節省已耗用時間,和宏替換類似,不完全相同,宏是在編譯前由預先處理程式處理,自作簡單字元替換,不做語法檢查,而內建式在編譯時間處理,進行語法檢查
8.範圍運算子, ::a標示全域範圍中的變數a;
9.new/delete 動態分配撤銷記憶體

十五章(C++物件導向基礎)
1。客觀世界任何事物都可看做對象.具有屬性和行為...對象的類型--C++中稱為類.類是對象的抽象,對象是類的實體
2。用關鍵字class 定義類(類似int定義整數)--用"."操作符指明該類的那些屬性或方法
3。建立一個對象時,會有預設的建構函式和解構函式用來進行初始化和釋放資源--均可重載,沒有傳回值,名字與類名相同,析構前加~
4.繼承和派生;繼承機制,在一個已存在的類上建立一個新類,基類(父類)--子類(衍生類別).子類具有父類所有的資料和函數成員,並增加了新的成員;; 用:來繼承
如class a: public b
5.定義衍生類別(子類)形式:  class 子類名 :[引用許可權] 父類名 {新成員; };
引用許可權預設是private;還有public ---對於內部定義成員的訪問權,就是在原有許可權基礎上加上衍生類別定義的許可權,取最小許可權;;;;如父類public,若繼承時用private則在子類中,成為private,若父類private,子類中無論如何繼承均為private
6..基類的建構函式不會被繼承,在執行衍生類別的建構函式時,應調用基類的建構函式
如 a(int a,int b,int c):b(a,b){---};其中a繼承自b,
7.在建立對象時,先調用基類的建構函式再調用子類的,在析構時,先析構子類,再析構父類
8。繼承的重大意義::不說了,偷懶?

十六章:常見的錯誤和程式調試
--

 

 1。想看編譯原理啦:: 先預先處理---編譯---串連---執行
2.宏定義 #define 標識符 字串  三種預先處理之一,是編譯之前的處理[替換],不做語法檢查,結尾沒有分號,可嵌套使用,通常在開頭,可使用#undef命令終止宏定義範圍
      可帶參數,#define 宏名(參數表) 字串  如 #define S(a,b) a*b
  在標頭檔中被大量使用
#define _tstring std::string
#define _tmain main
#define _tostream ostream
#define _tcout cout
#define _tsprintf sprintf
  提高程式的通用性和易讀性,便於修改,主要就是替換
3。條件編譯.希望一部分內容再滿足一定條件才進行編譯,則指定編譯條件,既是條件編譯.
形式如下  #if NNN   statement1;   #elif MMM   statement2;   #else   statement3;   #endif
#if 與 #endif一定是成對出現的, 
如(1)
#ifndef BM2_H
#define BM2_H
#endif 
如果沒有定義BM2_H ,則定義BM2_H
 (2)#ifdef BM2_USES_WCHAR
#define _tstring std::wstring
#else
#define _tstring std::string
#endif
  如果定義過BM2_USES_WCHAR 則宏定義std::wstring 為_tstring.否則定義std::string為_tstring [即在處理時,把程式中的字元_tstring替換為std::string還是std::wstring]
 
 4. #pragma 預先處理指令:它的作用是設定編譯器的狀態或者是指示編譯器完成一些特定的動作
 如#pragma once   這是一個比較常用的指令,只要在標頭檔的最開始加入這條指令就能夠保證標頭檔被編譯一次   
 #pragma once用來防止某個標頭檔被多次include,#ifndef,#define,#endif用來防止某個宏被多次定義。
 如:
#if !defined (BM2_LACKS_PRAGMA_ONCE)
# pragma once
#endif
如果沒有定義BM2_LACKS_PRAGMA_ONCE,則執行# pragma once.保證其所在的標頭檔(.h檔案)只被編譯一次
 5。#typedef 為現有類型建立一個新的名字,
 如:
 #ifndef EP_MSG_QUE
  typedef struct msg_queue {
   long mtype;
   char text[MAX_LEN];
  } MSG_QUE;
  #define EP_MSG_QUE
#endif
 如果沒有定義EP_MSG_QUE,則定義一個結構msg_queue,並為其建立一個新的名字MSG_QUE.則程式中即可用MSG_QUE表示msg_queue結構體,如定義MSQ_QUE temp;定義一個msg_queue結構體temp
 
 6 .名稱空間的使用,using namespace BM2;using namespace BM2::Data::DbClient;
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.