⑴ C中預定義標識符define include undef ifdef ifndef endif line 的用法以及意義最好帶例子
由預處理程序自動完成的。在c語言中,「宏」分為有參數和無參數兩種。 下面分別討論這兩種「宏」的定義和調用。
無參宏定義
無參宏的宏名後不帶參數。其定義的一般形式為: #define 標識符 字元串 其中的「#」表示這是一條預處理命令。凡是以「#」開頭的均為預處理命令。「define」為宏定義命令。 「標識符」為所定義的宏名。「字元串」可以是常數、表達式、格式串等。在前面介紹過的符號常量的定義就是一種無參宏定義。 此外,常對程序中反復使用的表達式進行宏定義。例如: # define M (y*y+3*y) 定義M表達式(y*y+3*y)。在編寫源程序時,所有的(y*y+3*y)都可由M代替,而對源程序作編譯時,將先由預處理程序進行宏代換,即用(y*y+3*y)表達式去置換所有的宏名M,然後再進行編譯。
#define M (y*y+3*y)
main(){
int s,y;
printf("input a number: ");
scanf("%d",&y);
s=3*M+4*M+5*M;
printf("s=%d\n",s);
}
上常式序中首先進行宏定義,定義M表達式(y*y+3*y),在s= 3*M+4*M+5* M中作了宏調用。在預處理時經宏展開後該語句變為:s=3*(y*y+3*y)+4(y*y+3*y)+5(y*y+3*y);但要注意的是,在宏定義中表達式(y*y+3*y)兩邊的括弧不能少。否則會發生錯誤。
當作以下定義後: #difine M y*y+3*y在宏展開時將得到下述語句: s=3*y*y+3*y+4*y*y+3*y+5*y*y+3*y;這相當於; 3y�2+3y+4y�2+3y+5y�2+3y;顯然與原題意要求不符。計算結果當然是錯誤的。 因此在作宏定義時必須十分注意。應保證在宏代換之後不發生錯誤。對於宏定義還要說明以下幾點:
1. 宏定義是用宏名來表示一個字元串,在宏展開時又以該字元串取代宏名,這只是一種簡單的代換,字元串中可以含任何字元,可以是常數,也可以是表達式,預處理程序對它不作任何檢查。如有錯誤,只能在編譯已被宏展開後的源程序時發現。
2. 宏定義不是說明或語句,在行末不必加分號,如加上分號則連分號也一起置換。
3. 宏定義必須寫在函數之外,其作用域為宏定義命令起到源程序結 束。如要終止其作用域可使用# undef命令,例如: # define PI 3.14159
main()
{
……
}
# undef PIPI的作用域
f1()
....表示PI只在main函數中有效,在f1中無效。
4. 宏名在源程序中若用引號括起來,則預處理程序不對其作宏代換。
#define OK 100
main()
{
printf("OK");
printf("\n");
}
上例中定義宏名OK表示100,但在printf語句中OK被引號括起來,因此不作宏代換。程序的運行結果為:OK這表示把「OK」當字元串處理。
5. 宏定義允許嵌套,在宏定義的字元串中可以使用已經定義的宏名。在宏展開時由預處理程序層層代換。例如: #define PI 3.1415926
#define S PI*y*y /* PI是已定義的宏名*/對語句: printf("%f",s);在宏代換後變為: printf("%f",3.1415926*y*y);
6. 習慣上宏名用大寫字母表示,以便於與變數區別。但也允許用小寫字母。
7. 可用宏定義表示數據類型,使書寫方便。例如: #define STU struct stu在程序中可用STU作變數說明: STU body[5],*p;#define INTEGER int 在程序中即可用INTEGER作整型變數說明: INTEGER a,b; 應注意用宏定義表示數據類型和用typedef定義數據說明符的區別。宏定義只是簡單的字元串代換,是在預處理完成的,而typedef是在編譯時處理的,它不是作簡單的代換, 而是對類型說明符重新命名。被命名的標識符具有類型定義說明的功能。請看下面的例子: #define PIN1 int* typedef (int*) PIN2;從形式上看這兩者相似, 但在實際使用中卻不相同。下面用PIN1,PIN2說明變數時就可以看出它們的區別: PIN1 a,b;在宏代換後變成 int *a,b;表示a是指向整型的指針變數,而b是整型變數。然而:PIN2 a,b;表示a,b都是指向整型的指針變數。因為PIN2是一個類型說明符。由這個例子可見,宏定義雖然也可表示數據類型, 但畢竟是作字元
代換。在使用時要分外小心,以避出錯。
8. 對「輸出格式」作宏定義,可以減少書寫麻煩。例9.3 中就採用了這種方法。
#define P printf
#define D "%d\n"
#define F "%f\n"
main(){
int a=5, c=8, e=11;
float b=3.8, d=9.7, f=21.08;
P(D F,a,b);
P(D F,c,d);
P(D F,e,f);
}
帶參宏定義
C語言允許宏帶有參數。在宏定義中的參數稱為形式參數, 在宏調用中的參數稱為實際參數。對帶參數的宏,在調用中,不僅要宏展開, 而且要用實參去代換形參。
帶參宏定義的一般形式為: #define 宏名(形參表) 字元串 在字元串中含有各個形參。帶參宏調用的一般形式為: 宏名(實參表);
例如:
#define M(y) y*y+3*y /*宏定義*/
:
k=M(5); /*宏調用*/
: 在宏調用時,用實參5去代替形參y, 經預處理宏展開後的語句
為: k=5*5+3*5
#define MAX(a,b) (a>b)?a:b
main(){
int x,y,max;
printf("input two numbers: ");
scanf("%d%d",&x,&y);
max=MAX(x,y);
printf("max=%d\n",max);
}
上常式序的第一行進行帶參宏定義,用宏名MAX表示條件表達式(a>b)?a:b,形參a,b均出現在條件表達式中。程序第七行max=MAX(x,
y)為宏調用,實參x,y,將代換形參a,b。宏展開後該語句為: max=(x>y)?x:y;用於計算x,y中的大數。對於帶參的宏定義有以下問題需要說明:
1. 帶參宏定義中,宏名和形參表之間不能有空格出現。
例如把: #define MAX(a,b) (a>b)?a:b寫為: #define MAX (a,b) (a>b)?a:b 將被認為是無參宏定義,宏名MAX代表字元串 (a,b)(a>b)?a:b。
宏展開時,宏調用語句: max=MAX(x,y);將變為: max=(a,b)(a>b)?a:b(x,y);這顯然是錯誤的。
2. 在帶參宏定義中,形式參數不分配內存單元,因此不必作類型定義。而宏調用中的實參有具體的值。要用它們去代換形參,因此必須作類型說明。這是與函數中的情況不同的。在函數中,形參和實參是兩個不同的量,各有自己的作用域,調用時要把實參值賦予形參,進行「值傳遞」。而在帶參宏中,只是符號代換,不存在值傳遞的問題。
3. 在宏定義中的形參是標識符,而宏調用中的實參可以是表達式。
#define SQ(y) (y)*(y)
main(){
int a,sq;
printf("input a number: ");
scanf("%d",&a);
sq=SQ(a+1);
printf("sq=%d\n",sq);
}
上例中第一行為宏定義,形參為y。程序第七行宏調用中實參為a+1,是一個表達式,在宏展開時,用a+1代換y,再用(y)*(y) 代換SQ,得到如下語句: sq=(a+1)*(a+1); 這與函數的調用是不同的, 函數調用時要把實參表達式的值求出來再賦予形參。 而宏代換中對實參表達式不作計算直接地照原樣代換。
4. 在宏定義中,字元串內的形參通常要用括弧括起來以避免出錯。 在上例中的宏定義中(y)*(y)表達式的y都用括弧括起來,因此結果是正確的。如果去掉括弧,把程序改為以下形式:
#define SQ(y) y*y
main(){
int a,sq;
printf("input a number: ");
scanf("%d",&a);
sq=SQ(a+1);
printf("sq=%d\n",sq);
}
運行結果為:input a number:3
sq=7 同樣輸入3,但結果卻是不一樣的。問題在哪裡呢? 這是由於代換只作符號代換而不作其它處理而造成的。 宏代換後將得到以下語句: sq=a+1*a+1; 由於a為3故sq的值為7。這顯然與題意相違,因此參數兩邊的括弧是不能少的。即使在參數兩邊加括弧還是不夠的,請看下面程序:
#define SQ(y) (y)*(y)
main(){
int a,sq;
printf("input a number: ");
scanf("%d",&a);
sq=160/SQ(a+1);
printf("sq=%d\n",sq);
}
本程序與前例相比,只把宏調用語句改為: sq=160/SQ(a+1); 運行本程序如輸入值仍為3時,希望結果為10。但實際運行的結果如下:input a number:3 sq=160為什麼會得這樣的結果呢?分析宏調用語句,在宏代換之後變為: sq=160/(a+1)*(a+1);a為3時,由於「/」和「*」運算符優先順序和結合性相同, 則先作160/(3+1)得40,再作40*(3+1)最後得160。為了得到正確答案應在宏定義中的整個字元串外加括弧, 程序修改如下
#define SQ(y) ((y)*(y))
main(){
int a,sq;
printf("input a number: ");
scanf("%d",&a);
sq=160/SQ(a+1);
printf("sq=%d\n",sq);
}
以上討論說明,對於宏定義不僅應在參數兩側加括弧, 也應在整個字元串外加括弧。
5. 帶參的宏和帶參函數很相似,但有本質上的不同,除上面已談到的各點外,把同一表達式用函數處理與用宏處理兩者的結果有可能是不同的。main(){
int i=1;
while(i<=5)
printf("%d\n",SQ(i++));
}
SQ(int y)
{
return((y)*(y));
}#define SQ(y) ((y)*(y))
main(){
int i=1;
while(i<=5)
printf("%d\n",SQ(i++));
}
在上例中函數名為SQ,形參為Y,函數體表達式為((y)*(y))。在例9.6中宏名為SQ,形參也為y,字元串表達式為(y)*(y))。 兩例是相同的。例9.6的函數調用為SQ(i++),例9.7的宏調用為SQ(i++),實參也是相同的。從輸出結果來看,卻大不相同。分析如下:在例9.6中,函數調用是把實參i值傳給形參y後自增1。 然後輸出函數值。因而要循環5次。輸出1~5的平方值。而在例9.7中宏調用時,只作代換。SQ(i++)被代換為((i++)*(i++))。在第一次循環時,由於i等於1,其計算過程為:表達式中前一個i初值為1,然後i自增1變為2,因此表達式中第2個i初值為2,兩相乘的結果也為2,然後i值再自增1,得3。在第二次循環時,i值已有初值為3,因此表達式中前一個i為3,後一個i為4, 乘積為12,然後i再自增1變為5。進入第三次循環,由於i 值已為5,所以這將是最後一次循環。計算表達式的值為5*6等於30。i值再自增1變為6,不再滿足循環條件,停止循環。從以上分析可以看出函數調用和宏調用二者在形式上相似, 在本質上是完全不同的。
6. 宏定義也可用來定義多個語句,在宏調用時,把這些語句又代換到源程序內。看下面的例子。
#define SSSV(s1,s2,s3,v) s1=l*w;s2=l*h;s3=w*h;v=w*l*h;
main(){
int l=3,w=4,h=5,sa,sb,sc,vv;
SSSV(sa,sb,sc,vv);
printf("sa=%d\nsb=%d\nsc=%d\nvv=%d\n",sa,sb,sc,vv);
}
程序第一行為宏定義,用宏名SSSV表示4個賦值語句,4 個形參分別為4個賦值符左部的變數。在宏調用時,把4 個語句展開並用實參代替形參。使計算結果送入實參之中。
文件包含
文件包含是C預處理程序的另一個重要功能。文件包含命令行的一般形式為: #include"文件名" 在前面我們已多次用此命令包含過庫函數的頭文件。例如:
#include"stdio.h"
#include"math.h"
文件包含命令的功能是把指定的文件插入該命令行位置取代該命令行, 從而把指定的文件和當前的源程序文件連成一個源文件。在程序設計中,文件包含是很有用的。 一個大的程序可以分為多個模塊,由多個程序員分別編程。 有些公用的符號常量或宏定義等可單獨組成一個文件, 在其它文件的開頭用包含命令包含該文件即可使用。這樣,可避免在每個文件開頭都去書寫那些公用量, 從而節省時間,並減少出錯。
對文件包含命令還要說明以下幾點:
1. 包含命令中的文件名可以用雙引號括起來,也可以用尖括弧括起來。例如以下寫法都是允許的: #include"stdio.h" #include<math.h> 但是這兩種形式是有區別的:使用尖括弧表示在包含文件目錄中去查找(包含目錄是由用戶在設置環境時設置的), 而不在源文件目錄去查找; 使用雙引號則表示首先在當前的源文件目錄中查找,若未找到才到包含目錄中去查找。 用戶編程時可根據自己文件所在的目錄來選擇某一種命令形式。
2. 一個include命令只能指定一個被包含文件, 若有多個文件要包含,則需用多個include命令。3. 文件包含允許嵌套,即在一個被包含的文件中又可以包含另一個文件。
條件編譯
預處理程序提供了條件編譯的功能。 可以按不同的條件去編譯不同的程序部分,因而產生不同的目標代碼文件。 這對於程序的移植和調試是很有用的。 條件編譯有三種形式,下面分別介紹:
1. 第一種形式:
#ifdef 標識符
程序段1
#else
程序段2
#endif
它的功能是,如果標識符已被 #define命令定義過則對程序段1進行編譯;否則對程序段2進行編譯。如果沒有程序段2(它為空),本格式中的#else可以沒有, 即可以寫為:
#ifdef 標識符
程序段 #endif
#define NUM ok
main(){
struct stu
{
int num;
char *name;
char sex;
float score;
} *ps;
ps=(struct stu*)malloc(sizeof(struct stu));
ps->num=102;
ps->name="Zhang ping";
ps->sex='M';
ps->score=62.5;
#ifdef NUM
printf("Number=%d\nScore=%f\n",ps->num,ps->score);
#else
printf("Name=%s\nSex=%c\n",ps->name,ps->sex);
#endif
free(ps);
}
由於在程序的第16行插入了條件編譯預處理命令, 因此要根據NUM是否被定義過來決定編譯那一個printf語句。而在程序的第一行已對NUM作過宏定義,因此應對第一個printf語句作編譯故運行結果是輸出了學號和成績。在程序的第一行宏定義中,定義NUM表示字元串OK,其實也可以為任何字元串,甚至不給出任何字元串,寫為: #define NUM 也具有同樣的意義。 只有取消程序的第一行才會去編譯第二個printf語句。讀者可上機試作。
2. 第二種形式:
#ifndef 標識符
程序段1
#else
程序段2
#endif
與第一種形式的區別是將「ifdef」改為「ifndef」。它的功能是,如果標識符未被#define命令定義過則對程序段1進行編譯, 否則對程序段2進行編譯。這與第一種形式的功能正相反。
3. 第三種形式:
#if 常量表達式
程序段1
#else
程序段2
#endif
它的功能是,如常量表達式的值為真(非0),則對程序段1 進行編譯,否則對程序段2進行編譯。因此可以使程序在不同條件下,完成不同的功能
#define R 1
main(){
float c,r,s;
printf ("input a number: ");
scanf("%f",&c);
#if R
r=3.14159*c*c;
printf("area of round is: %f\n",r);
#else
s=c*c;
printf("area of square is: %f\n",s);
#endif
}
本例中採用了第三種形式的條件編譯。在程序第一行宏定義中,定義R為1,因此在條件編譯時,常量表達式的值為真, 故計算並輸出圓面積。上面介紹的條件編譯當然也可以用條件語句來實現。 但是用條件語句將會對整個源程序進行編譯,生成的目標代碼程序很長,而採用條件編譯,則根據條件只編譯其中的程序段1或程序段2, 生成的目標程序較短。如果條件選擇的程序段很長, 採用條件編譯的方法是十分必要的。
本章小結
1. 預處理功能是C語言特有的功能,它是在對源程序正式編譯前由預處理程序完成的。程序員在程序中用預處理命令來調用這些功能。
2. 宏定義是用一個標識符來表示一個字元串,這個字元串可以是常量、變數或表達式。在宏調用中將用該字元串代換宏名。
3. 宏定義可以帶有參數,宏調用時是以實參代換形參。而不是「值傳送」。
4. 為了避免宏代換時發生錯誤,宏定義中的字元串應加括弧,字元串中出現的形式參數兩邊也應加括弧。
5. 文件包含是預處理的一個重要功能,它可用來把多個源文件連接成一個源文件進行編譯,結果將生成一個目標文件。
6. 條件編譯允許只編譯源程序中滿足條件的程序段,使生成的目標程序較短,從而減少了內存的開銷並提高了程序的效率。
7. 使用預處理功能便於程序的修改、閱讀、移植和調試,也便於實現模塊化程序設計
⑵ 請問這張C語言的PPT裡面的短數據長變數的賦值我不懂,誰幫我看下
牽涉到計算機中關於補位的問題。PPT中解釋的很清楚了,將短類型的數據賦值給長數據類型的時候是根據這個數據在計算機中的表示的最高位來補位的,最高位是0,則補0,最高位是1,則補1. 在C中,char是一個位元組(8位) int是兩個位元組(16位) long是四個位元組(32位),這里是一般情況,好像後來有些C編譯器改雙倍了。那麼在你將一個char 賦值 給 int 時,計算機中就根據這個 char變數在計算機中的存儲方式給他補上高位的數字,然後轉成相應的int值。char(43)是字元『+』,ASCII值43,計算機存儲為 00101011,轉為int時按補位規則就存儲為 0000000000101011 ,然後列印出來的時候把這個二進制值轉為十進制(d%格式), 而『\376』 是八進製表示法,換成計算機二進制存儲是 11111110,補位規則給他補上1,變成 1111111111111110 而這個數字在int型中表示負數,負數用補碼存儲,讀取出來的時候要轉成原碼,然後換成相應的int數。int型 最高位 1 表示負數,0表示正數,而char沒有負數的,他都是正數,所以最高位不代表符號
⑶ c語言程序設計
第一章 程序設計的基本概念
第一節 C語言的發展歷史與特點
第二節 程序與程序設計
第三節 演算法與演算法的描述
第四節 C語言的上機操作
思考題與習題
第二章 C語言程序設計基礎
第一節 C語言的程序結構
第二節 數據類型
第三節 運算符與表達式
思考題與習題
第三章 C程序控制結構
第一節 C程序的三種基本控制結構
第二節 順序結構
第三節 選擇結構
第四節 循環結構
思考題與習題
第四章 數組
第一節 數組與數組元素的概念
第二節 一維數組
第三節 二維數組及多維數組
第四節 字元串與字元數組
思考題與習題
第五章 指針
第一節 指針與指針變數的概念
第二節 指針變數的定義和引用
第三節 指針變數與數組
思考題與習題
第六章 函數
第一節 函數的定義
第二節 函數的嵌套調用
第三節 數組作為函數參數
第四節 指針與函數
第五節 變數的使用范圍與存儲類別
第六節 不同文件中的函數使用
思考題與習題
第七章 編譯預處理
第一節 宏定義
第二節 文件包含
第三節 條件編譯
思考題與題
第八章 結構體與共用體
第一節 結構體基礎
第二節 結構體數組
第三節 結構體指針
第四節 鏈表
第五節 位段
第六節 共用體
第七節 枚舉類型與自定義類型
思考題與習題
第九章 文件
第一節 文件概述
第二節 文件的打開與關閉
第三節 文件的讀/寫
第四節 文件的定位
思考題與習題
第十章 程序設計方法
第一節 程序設計的基本概念
第二節 結構化程序設計方法
第三節 程序效率
第四節 程序設計風格
思考題與習題
附錄
附錄A C語言實驗
附錄B 標准ABSII碼表
附錄C C語言中的關鍵字
附錄D 運算符的優先順序與結合性
⑷ 數據結構c語言版嚴蔚敏PPT-PPT誰有 急求
數據結構c語言版嚴蔚敏PPT-PPT在我的網路雲盤里, 要的話,趕緊去下載! 望你採納!
⑸ 使用循環給數組賦30個數值,賦值的規律是從第三個值開始,數組元素等於前面兩個元素之和
1.C源程序的框架
盡管各個C源程序的功能千變萬化,但框架是不變的,主要有:編譯預處理、主函數()、函數n()等,主函數的位答鎮棚置不一定在最前面,可以在程序的中部或後面,主函數的名字固定為main。
2.C語言源程序的書寫規則:
(1)C源程序是由一個主函數和若干個其它函數組成的。
(2)函數名後必須有小括弧,函數體放在大括弧內。
(3)C程序必須用小寫字母書寫。
(4)每句的末尾加分號。
(5)可以一行多句。
(6)可以一句多行。
(7)可以在程序的任何位置加註釋。
3.語句種類
語句是程序的基本成分,程序的執行就是通過一條條語句的執行而得以實現的,根據表現形式及功能的不同,C語言的基本語句可以分為五大類。
(1)流程式控制制語句
流程式控制制語句的功能是控製程序的走向,程序的流程有三種基本結構:順序結構、分支結構和循環結構,任何復雜的程序都可以由這三種基本結構復合而成。其中後兩種結構要用特定的流程式控制制語句實現。
(2)表達式語句
表達式語句的形式是:表達式;,即表達式後跟一分號";",分號是語句結束符,是一個語句必不可少的成分。表達式和表達式語句的區別在於表達式代表的是一個數值,而表達式語句則代表一種動作。最常見的表達式語句是賦值語句。
(3)函數調用語句
函數調用語句實際上也是一種表達式語句,形式為:在一次函數調用的小括弧後面加上一個分號。
(4)空語句
空語句的形式就是一個分號,它不代表任何動作,常常作為一個意義轉折點使用。
(5)復合語句
復合語句從形式上看是多個語句的組合,但在語法意義上它只相當於一個語句,在任何單一語句存在的地方都可以是復合語句。注意復合語句中最後一個語句末尾的分號不能少。復合語句右大括弧後面沒有分號。
4.運算符
用來表示數據各種操作的符號稱為運算符。運算符實際上代表了一種類型數據的運算規則。不同的運算符具有不同旅鍵的運算規則,其操作的數據類型必須符合該運算符的要求,運算結果的數據類型也是固定的。
根據參加操作的數據個數多少,可以將C語言的運算符分為單目運算符,雙目運算符和三目運算符(三目運算符只有條件運算符一個)。
根據運算對象和運算結果的數據類型可分為算術運算符、關系運算符、邏輯運算符等。
5.表達式
表達式是由常量、變數、函數,通過運算符連接起來而形成的一個算式。一個常量,一個變數或一個函數都可以看成是清則一個表達式。
表達式的種類有:
算術表達式、關系表達式、邏輯表達式、賦值表達式、字位表達式、強制類型轉換表達式、逗號表達式(順序表達式)、條件表達式、指針表達式。
6.數據的輸入/輸出
C語言本身沒有輸人/輸出語句,數據的輸入/輸出是通過調用庫函數來實現的。
第二章 數據類型知識點
劃分數據類型的意義是編譯系統對每個不同類型的數據在內存中分配的位元組數不同,不同類型的數據可以按規定參加不同類型的運算。
1.C語言的數據類型
數據類型有:整型、字元型、實型單精度型、雙精度型、構造類型數組類型、結構體類型、共用體類型、枚舉類型、指針類型、空類型,其中整型、實型、字元型是C語言中的基本類型。
2.各種類型數據的定義方法
定義形式:數據類型 變數名1,變數名2,......變數名n;
3.常量與變數
(1)常量--在程序執行期間其值不變的量。它不能被賦值。
(2)變數--在程序運行期間其值可以改變的量。
4.各種類型數據的混合運算
各類數據運算前會自動轉換成同一類型。規律如右圖示:從右向左的箭頭表示必定的轉換,如float型數據運算前化成double型,以提高運算精度,結果也為double型,short或char型數據運算前化成int型,結果也為int型;從下向上的箭頭表示轉換方向是向級別高的靠攏。
5.強制類型變換
當我們需要對數據進行類型變換,而機器又不能自動完成時,就要用強制類型變換,形式為:(數據類型符)(被轉換對象)。
第三章 選擇知識點
C語言中實現選擇結構的控制語句有兩種:條件分支語句if和開關分支語句switch。
1.if語句的三種形式:
(1) if(表達式)語句;
(2) if(表達式)語句1;
else語句2;
(3) if(表達式1)語句1;
else if(表達式2)語句2;
else if(表達式3)語句3;
...
else if(表達式n)語句n;
2.開關分支語句switch
(1)形式
switch(表達式)
{ case e1:語句1;break;
case e2:語句2;break;
case e3:語句3;break;
......
case en:語句n;break;
default :語句n+1;
}
(2)功能
當表達式的值等於e1時,執行語句1;
當表達式的值等於e2時,執行語句2;
......
當表達式的值等於en時,執行語句n;
當表達式的值與常量e1、e2......en誰都不等時,就執行default後的語句
第四章 循環知識點
循環就是在程序執行過程中,反復多次的執行同一段程序。C語言中有三種循環語句。
1.while循環語句
形式為:while(表達式)
{
循環體
};
執行過程是:先計算表達式的值,當表達式的值非0時就執行循環體,之後再判斷表達式的值,且重復以上過程;當表達式的值為0時就結束循環。
2.do-- while循環語句
形式為:do
{
循環體
} while(表達式);
執行過程是:先執行循環體一次,再判斷表達式的值,當表達式的值非0時就再執行循環體,之後再判斷表達式的值,且重復以上過程;當表達式的值為0時就結束循環。
3.for循環語句
形式為:for(表達式1;表達式2;表達式3)
{ 循環體 }
4.三種循環語句的比較
三種循環語句可以完成同一件事,可任選其一。
使用while和do-- while循環時,要提前給循環變數賦初值。而for循環是在表達式1中賦初值的。
while循環和for循環都是先判斷條件後執行循環體,有可能一次也不執行循環體,do-- while循環是先執行循環體,後判斷條件,即循環體至少也得執行一次。for循環不限於計數循環,其循環條件可以是邏輯表達式和字元表達式等。
5.循環嵌套
三種循環控制語句可以互相嵌套,即在一個循環體內部又可以出現另一循環,這種嵌套在理論上來說可以是無限的。注意必須是一個循環完整的套住另一個循環。
6.break語句
break語句只能出現在三種循環語句和switch多分支語句中,其作用是用來中斷這四種語句的執行。當程序執行到break語句時,會跳出break語句所在的循環或switch分支,而直接執行緊跟在它們後面的語句。
7.continue語句
continue語句只能出現在三種循環語句中,當程序執行到continue語句時,其作用是提前結束本次循環,自動跳過循環體中後半部剩餘的語句的執行,而直接回到循環條件判斷。根據判斷的結果決定是否繼續執行下次循環。
8. goto 語句
goto語句是一種非結構化語句,其作用是使程序的執行無條件的轉移到某一處。使用格式為: goto 標號;利用goto語句與if條件語句配合,也可以實現條件循環。C語句允許在任何語句前添加標號,作為跳轉目標,標號的構成是標識符後面加一個":"。
第五章 數組知識點
數組就是同類型的一批數據的集合,用一個變數名存放,區分各元素的辦法是用下標。
1.一維數組
類型說明符數組名\[數組長度\];
(1)數組命名要符合標識符的命名規則。
(2)數組名後的括弧必須是方括弧,不能是圓括弧。
(3)數組長度必須是正整數,可以是個表達式,但不能有變數,C語言不支持動態數組。
(4)數組長度表示數組中元素的個數
(5)數組元素的下標從0開始數,所以最大下標是數組的長度減1。
2.多維數組(以二維為例)
類型說明符數組名\[第一維長度\]\[第二維長度\];
(1)數組命名要符合標識符的命名規則。
(2)數組名後的括弧必須是兩個方括弧,定義時不能寫成inta\[3,4\];。
(3)數組長度必須是整型常量表達式。
(4)第一維長度表示數組行數,第二維長度表示數組列數。
(5)每個數組元素都有兩個下標,第一維表示該元素所在的行,第二維表示該元素所在的列,每一維的下標都從0開始數。
二維數組的初始化:C語言規定只有靜態數組和外部數組才允許在定義時賦初值,賦初值形式如下:
static類型說明符數組名\[第一維長度\]\[第二維長度\]={初值表};
二維數組的引用:二維數組不能整體引用,要引用數組的單個元素,形式為:數組名\[下標\]\[下標\]和普通變數的使用無任何區別。
3.字元數組
C語言中沒有字元串變數,字元串是靠字元數組實現的,所謂字元數組就是元素的數據類型為字元型的數組。
(1)字元數組的定義形式:char數組名\[數組長度\];
因為C語言中的整型數據和字元型數據是相通的,所以也可以這樣定義:int數組名\[數組長度\];
(2)字元數組的初始化:給字元數組的初始化有兩種方式,一種是用字元常量,另一種是用字元串。形式如下:
staticchar數組名\[數組長度\]={字元常量表};
staticchar數組名\[數組長度\]={字元串常量};
4.數組與函數
數組經常作為函數的參數,數組做函數的參數有兩種形式,一是數組元素做函數的參數,一是數組名做函數的參數,當用數組名做函數的實參時傳送的是首地址。
5.常用的字元串處理函數
C語言提供了一些處理字元串的標准函數,用以完成一些常見的操作。對以下幾個函數要掌握其功能和調用形式。
(1)gets(字元數組名)此函數功能是從鍵盤輸入一串字元,回車後送到字元數組中,注意定義數組時數組長度要足夠大。
(2)puts(字元數組名)此函數功能是將字元數組的內容輸出到屏幕上。
(3)strcat(字元數組名1,字元數組名2)此函數功能是將字元數組1中的'\\0'去掉後將字元數組2的內容連接到字元數組1的末尾。
(4)strcpy(字元數組名1,字元數組名2)函數功能是將字元數組2的內容(包括'\\0')拷貝到字元數組1中,字元數組2處也可以是字元串常量。strcpy函數可以實現拷子串。
(5)strcmp(字元數組名1,字元數組名2)函數功能是兩個字元串(ASCII碼)比大小。
(6)strlen(字元數組名)此函數功能是求字元串的長度,注意不包括'\\0'。
(7)strlwr(字元數組名)此函數功能是將字元串中的所有大寫字母都變成小寫。
(8)strupr(字元數組名)此函數功能是將字元串中的所有小寫字母都變成大寫。
第六章 函數知識點
每個C源程序都是由函數組成的,一個主函數和若干個其它函數,C語言程序設計的基礎工作就是函數的具體編寫,C語言中的函數就相當於其它高級語言中的子程序。
1.函數的概念
函數就是一個數據加工廠,從函數外部接收數據,在函數內部加工處理,然後得到一個結果返回給外部的調用者。所以函數就是對語言功能的擴充,對函數的調用就是對功能的調用。
2.標准函數
各種高級語言都定義了一些標准函數,C語言中的標准函數稱為庫函數,是將一些基本的、常用的功能編成了函數,供大家使用方便。使用庫函數時必須把它的頭文件用#i nclude命令包含進來,每個庫函數的功能及對應的頭文件都會在手冊中給出。
3.自定義函數
C 語言也允許用戶自己編寫函數以實現C庫函數中沒有提供的功能,稱作自定義函數。
4.定義函數
C語言規定每個函數都要獨立定義,函數定義不能嵌套。
函數定義的形式:數據類型函數名(形參表)
形參說明語句序列
{ 說明語句序列
可執行語句序列 }
5.函數調用
函數調用的形式是: 函數名(實參表)。當實參表中有多個參數時,要用逗號隔開,若被調函數無參數,調用時小括弧也不能省。函數調用過程是:將實參的值傳給形參,在函數體內進行加工處理,然後由return語句將函數值返回調用處。
5.全局變數和局部變數
局部變數:在函數內部定義的變數稱為局部變數,只在本函數中有效。
全局變數:在函數外部定義的變數稱為全局變數,它的作用范圍是從定義開始到本文件結束。
6.動態存儲與靜態存儲
內存中的用戶數據區分為動態存儲區和靜態存儲區,動態存儲區是指程序運行期間給變數臨時分配存儲單元,變數用完後立即釋放單元的區域,動態存儲區放的是函數的形參、自動變數、函數調用期間的現場保護數據和返回地址。
靜態存儲區是指程序運行期間給變數分配固定的存儲單元,放的是全局變數和局部靜態變數。
一個變數除了它的數據類型以外還有存儲類型,定義一個變數時應該說明這兩種類型。
第七章 預處理知識點
對高級語言編譯連接就是把源程序轉換成機器語言,C語言在進行編譯之前還要預先處理三件事:宏定義命令、文件包含命令和條件編譯命令,統稱為預處理命令,其特點是:
1.所有的預處理命令都放在程序的頭部,以#開頭,且#號後面不留空格。
2.預處理命令不是C的語句,行尾不加分號。
3.預處理命令是在編譯預處理階段完成的,所以它們沒有任何計算、操作等執行功能。
4.預處理命令有所變動後,必須對程序重新進行編譯和連接。
1.宏定義
宏定義命令的作用是給一些常用的對象重新命名,在程序中可以用宏名來引用這些對象,預處理時宏名會被代表的內容替換,此過程稱為宏展開或宏替換。宏定義有兩種形式:
2.文件包含
使用文件包含命令可以將另-個C源程序的全部內容包含進來,其形式為:
#i nclude <文件名>或#i nclude "文件名"
通常可以把經常用到的,帶公用性的一些函數或符號等集合在...起形成一個源文件,然後用此命令將這個源文件包含進來,這樣可以避免在每個新程序中都要重新鍵入這些內容。
3.條件編譯
顧名思義滿足條件時進行編譯,為了解決程序移植問題,C語言提供了條件編譯命令,它能使源程序在不同的編譯環境下生成不同的目標代碼文件。條件編譯命令有3種形式。
第八章 指針知識點
1.什麼是指針和指針變數?
指針就是內存地址,因為通過"地址"可以找到變數,所以內存"地址"形象的稱為指針。
指針變數就是存地址的變數。在C語言中用一個變數存另一個變數的地址,那麼就稱這個變數為指針變數,指針變數的值就是地址。通常指針變數被簡稱為指針。
指針變數是有類型的,即指針值增1表示指向下一個數據,如整型數據在內存中占兩個位元組,它的指針變數增1是增兩個位元組。如實型數據在內存中佔4個位元組,它的指針變數增1是增4個位元組。
2.怎樣定義指針變數?
定義形式為:數據類型*指針變數名1,*指針變數名2......;
3.指針的有關運算
指針為內存地址是整數,可以進行一些算術運算、關系運算、賦值運算、特殊運算等,但要注意運算代表的實際意義。
4.指向數組的指針變數
(1)指向數組元素的指針變數定義形式為:inta\[10\];
int*p=a;
(2)指向一維數組的指針變數
定義形式為:inta\[3\]\[4\];
int(*p)\[4\];
p=a;
(3)指向字元串的指針變數
定義形式為: char*p="字元序列";
C語言中的字元串是以隱含形式的字元數組存放的,定義了指針變數p並不是將整個字元串都存放在p中了,而p中存放的是字元串的首地址。
5.指向函數的指針變數
一個函數在編譯時被分配一個入口地址,這個地址就是函數的指針,可以用一個指針變數指向它。指向函數的指針變數定義形式為:
數據類型(*指針變數名);
6.指針變數做函數的參數
(1)指針作函數的參數可以傳送地址,如數組的首地址,函數的入口地址等。
(2)指針作函數的參數也可以用地址方式傳送數據。
7.返回值是指針的函數
即函數的返回值是內存的地址,利用這種方法可以將一個以上的數據返回給函數的調用者。定義形式如下:
數據類型*函數名(形參表)
8.指針數組
定義形式為:數據類型*數組名\[數組長度\];
數組中的每個元素都是指針類型的數據,這種數組被稱為指針數組。
9.指向指針的指針
定義形式為:數據類型**指針變數名;
指向指針數據的指針變數稱為指向指針的指針。
10.main函數的形參
main函數可以帶兩個形參,如:
main(argc,argv)
intargc;
char *argv\[\];
{
......
}
11.指向結構體的指針變數
結構體變數的指針就是該變數所佔據的內存段的首地址。指向結構體的指針變數定義形式為:struct結構體類型名*指針變數名;
12.指向共用體的指針變數
共用體變數的指針就是該變數所佔據的內存段的首地址。指向共用體的指針變數定義形式為:union共用體類型名*指針變數名;
替換了的字元時(這里為正中間的字元"4"),原來的字元己不復存在。
第九章 結構體與共用體知識點
結構體類型是C語言的一種構造數據類型,它是多個相關的不同類型數據的集合,相當於其它高級語言中的記錄。
1.結構體類型定義
結構體類型的形式為:
struct結構體類型名
{ 數據類型成員名1;
...
數據類型成員名n;
}
2.結構體變數的定義
結構體變數有三種定義形式:
(1)先定義結構體類型,後定義結構體變數。
(2)定義結構體類型的同時定義結構體變數。
(3)不定義結構體類型名,直接定義結構體變數。
3.結構體變數的引用
(1)結構體變數的初始化:許多C版本規定對外部或靜態存儲類型的結構體變數可以進行初始化,而對局部的結構體變數則不可以,新標准C無此限制,允許在定義時對自動變數初始化。
(2)結構體成員的引用:由於C語言一般不允許對結構體變數的整體引用,所以對結構體的引用只能是對分量的引用,結構體變數中的任一分量可以表示為:結構體變數名·成員名
4.結構體與數組
C語言中數組的成員可以是結構體變數,結構體變數的成員也可以是數組。
結構體數組有三種定義形式:
(1)先定義結構體類型,後定義結構體數組。
(2)定義結構體類型的同時定義結構體數組。
(3)不定義結構體類型名,直接定義結構體變數。
5.結構體與指針
一方面結構體變數中的成員可以是指針變數,另一方面也可以定義指向結構體的指針變數,指向結構體的指針變數的值是某一結構體變數在內存中的首地址。
結構體指針的定義形式:struct結構體類型名*結構體指針變數名。
由結構體指針引用結構體成員的方法
6.用指針處理鏈表
結構體的成員可以是指針類型,並且這個指針類型就是本結構體類型的,這樣可以構造出一種動態數據結構-成為鏈表。所謂動態數據就是指在編譯時不能確定數據量的多少,而是在程序執行時才確定的數據,動態數據可以比較方便的進行數據插人或刪除等操作。
7.結構體與函數
結構體變數的成員可以作函數的參數、指向結構體變數的指針也可以作函數的參數。雖然結構體變數名也可以作為函數的參數,將整個結構體變數進行傳遞,但一般不這樣做,因為如果結構體的成員很多,或者有些成員是數組,則程序運行期間,將全部成員一個一個的傳遞,既浪費時間,又浪費空間,開銷太大。
8.結構體與共用體
結構體變數中的成員可以是共用體,共用體變數中的成員可以是結構體。
共用體
為了節省存儲空間,C語言允許將幾種不同類型的數據存放在同一段內存單元,它們共用一個起始地址,稱做共用體。
1.共用體類型定義
union共用體類型名
{ 數據類型成員名1;
...
數據類型成員名n;
}
2.共用體變數定義
(1)先定義類型,後定義變數。
(2)定義類型的同時定義變數。
(3)不定義類型名,直接定義變數。
3.共用體變數的引用
(1)共用體變數不能整體引用,只能引用其成員,形式為:共用體變數名·成員名
(2)共用體變數的成員不能初始化,因為它只能放一個數據。
(3)共用體變數存放的數據是最後放入的數據。
(4)共用體變數的長度是最大的成員的長度。
(5)可以引用共用體變數的地址、各個成員的地址,它們都是同一個地址。
(6)共用體變數不能當函數的參數或函數的返回值,但可以用指向共用體變數的指針作函數的參數。
(7)共用體變數的成員可以是數組,數組的成員也可以是共用體變數。
第十章 位運算知識點
位運算就是按二進制位進行操作的運算,運算的對象只能是整型或字元型,不能是實型。不同長度的變數進行位運算,系統會自動右對齊,而左端的不齊部分,對於無符號數左端補滿0,對於有符號數則:正數左端補滿0,負數左端補滿1。
第十一章 文件知識點
操作系統是以文件為單位對數據進行管理的,任何一種計算機高級語言都要有和磁碟文件打交道的能力,否則該語言的功能充其量是算一算、顯示顯示而已。在C語言中沒有單獨的文件操作語句,所有對文件的操作都是通過庫函數來完成的,所以本章的重點是學會使用有關文件操作的庫函數。
1.文件的基本概念
2.文件類型指針
3.文件的操作
⑹ C語言指針數組的作用
指針數組:數組成員是指針的數組。
作用:數組的屬性全有。因為成員纖如是指針,這就可以延伸出很多內容。包括:
成員是函數指針,整個數組就是一類相關函數的集合,便於代碼架構的管理。
成員是鏈表指針啦,char指針,這種就是能做出類似散列表的結構。
總體來講,就是一組含肆相關數據的指針的集合,達到的目的就是搜集指向相關數據的指針放到一個集合里談豎轎面。
⑺ C語言,高級編程
呵呵,這位兄台很像我前幾個月的樣子。學c以前覺得c應該什麼都能實現。可是能學完發現自己離windows還有很遠的距離。不過我現在不這么想了。開發平台不是問題所在。其實就像上面那位兄台所說得C只是一個工具。學會了c就相當於會用了一個工具。而真正的學習才剛陵明剛開始。一個計算機的體系是與很多東西組成的。想寫出很好程序就要知道怎麼用好自己的這支筆。下面是我對計算機體系的一點淺顯的認識:
1、計算機組前銀成原理。這個就不多說了,學編成的連我們的勞動對象都不清楚那還玩什麼啊?
2、數據結構和演算法。其實所謂的程序就是對數據進行處理,而處理的數據當然要有存儲的方式,而應對這些數據存儲的方式應運而生了演算法。也就是處理問題的方法。這是真正編程的靈魂。十分重要。
3、操作系統。學完了上說的那些東西你還會認為操作系統很神秘。那我們就來親手掀開他神秘的面紗,知道操作系統都為我們做了些什麼是一件很令人愉快的事。
4、編譯原理。這門課有點難度,不過也很重要,其中有很多思維方式需要掌握,不多說了,看了就知道了。尺悔告
懂了上面我說的這些東西,我想你對計算機程序設計會有一種新的認識。可千萬不要被嚇倒了哦。每個出色的程序員都是這么混出來的。為成為一名優秀的程序員而努力吧!
⑻ C語言知識總結
c語言概要
第一章、 概述
1、 c語言的基本知識
1.1、 c語言的執行步驟
編輯-程序代碼的錄入,生成源程序*.c
編譯-語法分析查錯,翻譯生成目標程序*.obj
(語法或邏輯錯誤,從第一個開始改,變數定義,語句格式,表達式格式等)
鏈接-與其他目標程序或庫鏈接裝配,生成可執行程序*.exe
執行
1.2、 main函數的基本知識
main()函數的位置
c程序總是從main( )函數開始執行
一個c程序可以包含一個主函數,即main()函數;也可以包含一個main()函數和若干其它函數
1.3、 c程序的結構
函數與主函數
程序由一個或多個函數組成
必須有一個且只能有一個主函數main()
程序執行從main開始,在main中結束,其他函數通過嵌套調用得以執行
程序語句
C程序由語句組成
用「;」作為語句終止符
注釋
//
或
/* */ 為注釋,不能嵌套
不產生編譯代碼
1.4、c 程序書寫的規則
習慣用小寫字母,大小寫敏感
不使用行號,無程序行概念:通常一個語句佔一行
可使用空行和空格
常用鋸齒形的書寫格式;同一層次結構的語句上下對齊。
第二章、基本數據類型與運算
2.1、c程序的數據類型
注意類型和變數含義的不同(類型是固定好的名字,變數是自己起的名字)
變數佔用的存儲空間
數據類型
基本類型:整型、字元型、浮點型(單精度型,雙精度型)
構造類型:數組類型、結構體類型
指針類型
空類型
注意基本類型賦初值的方式
基本數據類型的表示形式
整形數據
十進制:以非0數字開頭,如:123,-9,0
八進制;以0數字開頭,如:0123,067
十六進制:以0x開頭,如:0x123,0xff
實型數據
十進制:必須帶小數點,如:123.0,-9.0
指數形式;如:1.23E3,0.9e-2,5e2
字元型數據
普通字元:如:』a』,』2』,』H』,』#』
轉義字元:如:』\n』,』\167』,』\xlf,』\\』
(實現幾列的對齊:指定寬度。如%100\ 『\t』製表位)
(字元串長度。「abc\n\t\\」 strlen 6; sizeof 7)
基本數據類型的存儲長度
整型
Int 位元組數 2 位數 16 數的表示範圍 -32768—32767
Short 2 16 -32768—32767
Long 4 32 -2147483648—2147483647
實型
Float 4 32 3.4e-38---3.4e38
Double 8 64 1.7e-308---1.7e308
字元型
Char 1 8 -128----127
2.2、標識符命名規則
C語言標志符命名規則
標識符有數字,字母,下劃線組成
標識符的首字元必須為字母和下劃線
標識符不能為c語言的保留字(關鍵字)
如:auto extern sizeof float static case for struct char goto switch continue in typedef const if union default long unsigned do register void double return else short while enum signed
算術運算符 + - * / %
關系運算符 > < == >= <= !=
邏輯運算符 ! && ||
位運算符 << >> ~ | ^ &
賦值運算符 = 及其擴展賦值運算符
條件運算符 ? :
逗號運算符 ,
指針運算符 * &
求位元組數運算符 sizeof
強制類型轉換運算符 (類型)
分量運算符 . ->
下標運算符 [ ]
其他 如函數調用運算符()
運算符的優先順序
由高到低:單目運算符,算數運算符,關系運算符,賦值運算符
說明:單目運算符:自增運算符,自減運算符,類型裝換運算符。結合方向:自右至左
如:++--I 先—i.。
算術運算 結合方向自左至右
2.3基本運算和表達式
關系表達式和邏輯表達式
(a>b)&&(x>y) (a==b)||(x==y) !=a||(a>b)
A&&b.a為0.不執行b
A||b a為1.不執行b
在 c 中邏輯運算結果:1代表「真」,0代表「假」;
判斷一個表達式是否真:0代表「假」,非0代表「真」
條件表達式 逗號表達式
如:k=5,k++
逗號值為5;k為6.
表達式1?表達式2 :表達式3
K=5>6 ? 1 : 0
2.4、混合運算的數據類型轉換
2/3+0.5 雙精度浮點型
第三章、順序結構程序設計
3.1、c語句的分類
簡單語句
表達式語句 表達式+分號
空語句 只有分號的語句
復合語句 用花括弧將若干語句括起來
流程式控制制語句
選擇語句 if ,switch
循環語句 while, do while , for
轉移語句 break ,continue ,return goto
3.2、格式輸入函數scanf
一般形式:scanf(「格式控制字元串「,地址列表);
使用scanf函數時,需要注意:
格式字元的個數必須與輸入項的個數相同,數據類型必須一一對應,非格式字元串(說明性的)要原封不動的輸入。
輸入實行數據時,可以不帶小數點,即按整型數據輸入
數值型數據與字元或字元串混合輸入時,需要注意輸入方式。
3.3、格式輸出函數printf
Printf(「格式控制字元串「,輸出列表);
指定輸出格式,由格式字元串和非格式字元串兩種組成,非格式字元串照原樣輸出。
%[標志][輸出最小寬度][.精度][長度]類型
標志:- 左對齊;+ 右對齊;
%f, %d, %c, %s
3.4、其他輸入輸出函數
Putchar getchar puts gets
第四章、選擇結構程序設計
If選擇結構
單分支
If(表達式)
語句
雙分支
If(表達式)
語句1
Else
語句2
多分支
If (表達式1)
語句1
Else if(表達式2)
語句2
。。。
Else if(表達式m)
語句m
Else
語句n
Switch(表達式)
{
Case 常量表達式1:語句1;break;
Case 常量表達式2:語句2;break;
。。。
Case 常量表達式m:語句m;break;
Default:語句n;break;
}
注意break的使用
第五章、循環結構程序設計
循環三要素
初始條件 ;終止條件 ;在初始條件和終止條件間反復做某件事情(循環體)
While(表達式)
語句
Do
語句
While(表達式);
For(循環體變數賦初值;循環條件;循環變數增量)
( for( ) ; // ; 進行時間延遲。在信息交換等時用。如for(i=0,i<100) ; 互相通訊的時間延遲。 Delay )
Break語句 :不能用於循環語句和switch語句之外的任何其他語句;跳出循環。
Continue語句 :跳過循環體中剩餘的語句而強行執行下一次循環;跳出本次循環。
第六章、函數與編譯預處理
6.1、函數的定義和調用
類型標識符 函數名 (形式參數列表)
{ 聲明部分
語句
}
例:
Int max (int x,int y)
{int z;<br>Z=x>y?x:y;<br>Return(z);}
6.2、局部變數和全局變數
注意函數中靜態變數的定義和使用
6.3、變數的存儲類型
局部變數的存儲類型
自動變數(auto) 動態存儲
局部靜態變數(static) 靜態存儲
寄存器變數(register) 靜態存儲
全局變數的存儲類型
自動變數(auto) 動態存儲
外部變數 (extern) 靜態存儲
全局靜態變數(static )靜態存儲
Extern 外部引用
Static 不能用extern 引用。
第七章、數組
7.1、一維數組的定義和使用
特別需要注意循環體的初值,終止條件
例:
Main()
{
Int I,a[10];
For(i=0;i<=9;i++)
A=I;
For(i=9;i>=0;i--)
Printf(「%d」,a);
}
注意下標問題
7.2、二維數組的定義和使用
二維數組的初始化
例如:
Int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
Int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
Int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
Int a[ ][4]={{1,2,3,4},{5},{9,10,11,12}};
例如:int a[3][3]={{1},{2},{3}};
是對每一行的第一列元素賦值,未賦值的元素取0
7.3、字元數組和 字元串
字元串用字元數組來處理,結束標志符 『\0』
如:char c[ ]={「I am happy」};
用字元串常量使字元數組初值化
Char c[ ]={『I』,』 『,』a』,』m』,』 『,』h』,』a』,』p』,』p』,』y』,』\0』};
第八章、指針
8.1、地址和指針的概念
Int I;
Int *i_point;
8.2、指針變數和變數的地址
操作符:* &
8.3、指針和一維數組
若有定義
Int a[10];
Int *p=a;
分析下面表達式的含義:
A, &a,
*(a+i), a+I,
*(p+i), p+i
A=*(a+i)=*(P+i)
&a=a+i=p+i
8.4、指針與字元串
Main()
{
Char string[ ]=」I love china!」;
Printf(「%s\n」,string);
}
Main()
{ char *string=」I love china!」;
Printf(「%s\n」,string);
}
8.5、指針變數作為函數參數
形參的定義方式;實參的形式;參數的傳遞方式。
第九章、結構體
9.1、結構體類型和變數的定義
Struct 結構體名
{成員列表};
Struct student
{char stuNO[8];<br>Char name[20];<br>Char sex;<br>Int age;<br>Float score;<br>Char addr[30];<br>};
Stuct student
{char stuNO[8];<br>Char name[20];<br>Char sex;<br>Int age;<br>Float score;<br>Char addr[30];<br>};
Struct student stu1, stu2;
9.2、結構體變數的引用
一般形式為:
結構體變數名.成員名
9.3、結構體數組
結構體數組 結構體數組元素.成員名
指向結構體的指針變數
(*p).成員名
p->成員名
其他
Strcpy(字元數組1,字元串2)
Strcat(字元數組1,字元數組2)
Strcmp(字元串1,字元串2)
Strlen(字元數組)
⑼ c語言中.ppt是什麼文件
這是c語言ppt課件,包括了一個C語言程序,程序與程序設計語言,C語言的發展歷史與特點,實現問題求解的過程等內容
⑽ C語言程序設計第四版譚浩強ppt
[C程序設計(第四版)].譚浩強.pdf http://www.eeskill.com/file/id/25888。