C語言程序設計總復習_第1頁
C語言程序設計總復習_第2頁
C語言程序設計總復習_第3頁
C語言程序設計總復習_第4頁
C語言程序設計總復習_第5頁
已閱讀5頁,還剩35頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

C語言內容提要總復習數(shù)據(jù)類型基本數(shù)據(jù)類型

整型:2,4字節(jié),int,unsignedint,long,unsignedlong

字符型:1字節(jié),char,unsignedchar

實型:4,8字節(jié),float,double構造數(shù)據(jù)類型

數(shù)組:一組同類型數(shù)據(jù)的集合

結構:一組不同數(shù)據(jù)類型的集合指針

變量的地址,每種數(shù)據(jù)類型都有對應的指針類型。字符型數(shù)據(jù)保存的是字符

'a','A','0','*'計算機不能存貯字符,只能用數(shù)字代替——ASCII碼

'a'97'0'48'*'42對內存中數(shù)據(jù)的理解取決于數(shù)據(jù)類型

可以理解為字符'a'和'0';

可以理解為整型數(shù)據(jù):49600;

可以理解為實型的一部分,甚至是指令代碼。字符型數(shù)據(jù)類型的本質1100000111000000類型轉換doublefloatintchar低高'a'+3:字符型+整型 整型'a'+3.0:字符型+實型 實型45/0.3:整型+實型 實型'a'*3.0:字符型+實型 實型自動類型轉換:

不同數(shù)據(jù)類型進行混合計算時,系統(tǒng)按一定規(guī)則進行數(shù)據(jù)類型轉換強制類型轉換:

在自動類型轉換的基礎上,按特殊設定轉換。(char)('a'+3) 字符型floatfd;fd='a'+3;實型輸入/輸出格式符整型:%d,%ld字符型:%c字符串型:%s實型:%f,%lf,%e左對齊:負號占位:%m.n例:

printf("%10.6e",x);→1.4e+002

printf("%-11.6f",data);→3.141593條件分支(一)簡單條件分支:

if(條件){成立時執(zhí)行}

else{不成立時執(zhí)行}多重條件分支:

if(條件1){成立時執(zhí)行}

elseif(條件2){成立時執(zhí)行}

elseif(條件3){成立時執(zhí)行}

else{所有條件均不成立時執(zhí)行} 條件分支1分支2成立不成立條件分支(二)關系表達式:

>, >=, <, <=, ==, !=

建議:多使用括號,不要背優(yōu)先級。

例:if(a>b==c)→if((a>b)==c)邏輯表達式:

多個關系表達式之間的連接。

與:&&(當兩個表達式均成立時結果為真)

或:||(兩個表達式有一個成立時結果就為真)

非:!(當表達式結果不成立時結果為真)

建議:多使用括號,不要背優(yōu)先級。

例:if(a>b||a>c)→if((a>b)||(a>c))條件分支(三)

switch語句:

switch(表達式)

{ case常量1: 語句1;break;

case常量2: 語句2;break; case常量3: 語句3;break; ………… default:語句n; }注意:

(1).每一個分支只能是常量或常量表達式;

(2).每一個分支之后必須有break;

(3).表達式的結果應該落在case的范圍之內。循環(huán)控制while型:

while(條件) {

循環(huán)體

}條件循環(huán)體成立不成立特點:先判斷,再執(zhí)行;可能一次也不執(zhí)行。循環(huán)控制do型:

do {

循環(huán)體

} while(條件)條件循環(huán)體成立不成立特點:先執(zhí)行,再判斷;至少執(zhí)行一次。循環(huán)控制for型:

for(語句1;條件;語句2) {

循環(huán)體

} 語句1條件循環(huán)體語句2成立不成立特點:語句1無條件執(zhí)行一次,語句2是循環(huán)體的一部分。for循環(huán)是萬能循環(huán)語句,可以代替前兩種類型。循環(huán)控制break可以退出任何類型的循環(huán),主要用于多種條件循環(huán)。continue可以在特定條件下只執(zhí)行部分循環(huán)體。break和continue主要是為程序書寫清晰和簡潔而使用,并非必須,本質上都可以通過改變循環(huán)結構而取消。數(shù)組數(shù)組的本質:一組相同類型的變量的順序集合。數(shù)組的各元素必須類型相同;數(shù)組的長度定義必須是常量或常量表達式;數(shù)組在內存中是線性存貯;數(shù)組元素具有簡單變量的一切性質;不允許整體操作;數(shù)組的下標從0開始;系統(tǒng)不對數(shù)組操作進行越界檢查。字符數(shù)組與字符串字符數(shù)組:charuniversity[20]={'B','U','A','A'};字符串:

charuniversity[]={"BUAA"};字符串的操作:可以像普通數(shù)組一樣使用,也可以使用專為字符串開發(fā)的庫函數(shù)<string.h>。字符數(shù)組的使用:與普通數(shù)組的使用相同。字符串的本質:以字符'\0'結尾的字符數(shù)組。注意:字符串的長度不包括'\0',但必須留足夠的空間。函數(shù)的定義函數(shù)是使程序可以重復使用的一種手段。函數(shù)的定義:intfactorial(intx){ intresult,i; result=1; for(i=1;i<=x;i++) { result=result*i; } return(result);}函數(shù)名形參表函數(shù)類型函數(shù)體返回語句形參表必須逐一變量說明;形參表各變量用逗號分隔;函數(shù)體可以沒有;返回類型默認為int;第一行的結尾不要加分號;形參表函數(shù)唯一的可變部分;函數(shù)類型實際是返回值的數(shù)據(jù)類型。函數(shù)的使用intfactor(intx,inty);main(){ inta,b,c; ………… c=factor(a,b); …………}intfactor(intx,inty){ …………}函數(shù)的說明必須與函數(shù)定義完全一樣。函數(shù)的使用實參和形參必須一一對應。函數(shù)的定義局部變量封裝。#include<stdio.h>

main()

{

inta,b,c;

……

a=4;

b=5;

c=max(a,b);

……

}

函數(shù)的調用過程intmax(intx,inty){ intz; if(x>y)z=x; elsez=y; return(z);}x=4,y=5;c=5實參形參實參與形參一一對應:①個數(shù)相等;②類型一致;③順序相同。參數(shù)傳遞的本質是單向變量拷貝:

①內部變量封裝,不影響到函數(shù)以外的變量。 ②允許存在與其它函數(shù)同名的變量。幾種不同的函數(shù)有返回值、有參數(shù):

main(){ …… A=f(n); B=f(n-3); C=f(k);

……}無返回值、有參數(shù):

main(){ ……

star(1); star(3);

printf("%d",a);

……}有返回值、無參數(shù):

main(){ …… c=getchar();

…… ……}無返回值、無參數(shù):

main(){ ……

alarm_on();

…… alarm_off();

……}函數(shù)的嵌套調用main(){func_a()

func_b()}func_a(){func_c()

}func_b(){func_d()

func_e()}func_c(){

}func_d(){

}func_e(){

}注意:函數(shù)可以嵌套調用,但不可以嵌套定義。所有函數(shù)都是平行的,即所有函數(shù)的地位都是相同的。只有主函數(shù)例外。變量的存貯類型全局變量

不在任何一個函數(shù)中定義,可以被任何函數(shù)使用。局部變量

在函數(shù)內部定義,只可以在被定義的函數(shù)內部使用。動態(tài)變量

隨著函數(shù)的執(zhí)行而產生,隨著函數(shù)的退出而消亡。靜態(tài)變量

在程序執(zhí)行之前產生,在程序結束之后消亡。全局變量肯定是靜態(tài)變量,靜態(tài)變量不一定是全局變量。動態(tài)變量肯定是局部變量,局部變量不一定是動態(tài)變量。作用域生存期問題:變量為什么要有存貯類型之分?指針本質:存貯是變量的地址。指針變量有類型,只能保存相應類型變量的地址星號的不同含義:在定義中出現(xiàn):表明該變量為指針變量,其所保存的內容為變量的地址,不可省略,但它并不是變量的一部分。

int*p1;

float*fp;

在使用中出現(xiàn):是對指針的操作,其作用是獲得指針所指向內存的值。

*p1; a=*p1;a????????????????pa&

取地址操作:

pa=&a;

取內容操作:

b=*pb;b????????????????pb*&和*是一對互逆操作指針的操作問題:可以打印出指針的具體值嗎?指針的運算算數(shù)運算

指針只允許加減運算,含義為指針指向的偏移。

p2=p1+3; p1++;p2--;關系比較

允許有大于、小于、相等、不相等的比較,含義為指針指向位置的比較。

if(p1>p2)……;

if(p1!=p2)……;指針不允許有其他類型的運算指針定義必須逐一說明;

int*p1,p2;←p2將是一個整型變量指針變量存貯的是地址,不能和普通變量/常量直接操作;

inta,*p; a=66; p=1000;

←不會將地址1000賦給p指針變量未初始化之前指向不確定的內容,不能直接引用;

inta,*p; a=*p; ←a將得到一個不確定的值

*p=66; ←向不確定的空間寫數(shù)據(jù),后果無法預料,錯誤也難以發(fā)現(xiàn)。指針操作常見的錯誤swap(int*p1,int*p2);main(){ inta,b,*pa,*pb; a=10; b=20; pa=&a; pb=&b; printf("%d,%d",a,b); swap(pa,pb); printf("%d,%d",a,b);}swap(int*p1,int*p2){ inttemp; temp=*p1;

*p1=*p2;

*p2=temp;}主函數(shù)swapabpapbp1p2temp指針變量作為函數(shù)參數(shù)問題:a,b是局部變量,當程序離開main函數(shù)時它們?yōu)槭裁礇]有消亡?指針變量作為參數(shù)的目的:①突破封裝,延伸函數(shù)的觸角,擴大作用域。

用函數(shù)計算兩個數(shù)的和與差plusmin(inta,intb,int*p1,int*p2);main(){ inta,b,plus,minus,*pa,*pb; scanf("%d%d",&a,&b); pa=+ pb=− plusmin(a,b,pa,pb); printf("%d+%d=%d\n",a,b,plus); printf("%d-%d=%d\n",a,b,minus);}plusmin(inta,intb,int*p1,int*p2){

*p1=a+b;

*p2=a-b; return(0);}abplusminuspapbabp1p2mainplusmin用指針從函數(shù)帶回多個結果指針與數(shù)組C語言規(guī)定:數(shù)組名代表數(shù)組第一個元素的地址。

inta[10],*p; p=a;

*p+3=6;

*(p+3)=6; a[3]=6;用指針訪問數(shù)組時易犯的錯誤main(){inta[10],i,*p;p=a;for(i=0;i<10;i++){scanf("%d",p);p++;}for(i=0;i<10;i++){printf("%d",*p);p++;}}a[0]a[9]pppppp=a;pa[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]用指針訪問數(shù)組時易犯的錯誤main(){inta[10],i,*p;p=a;for(i=0;i<10;i++){scanf("%d",p);p++;}for(i=0;i<10;i++){printf("%d",*a);a++;}}雖然數(shù)組名也是指針,并且指向數(shù)組的第一個元素,但它是常量,不能改變。C語言規(guī)定:數(shù)組名本身也是一個指針,但它不可變。利用指針向函數(shù)傳遞大量數(shù)據(jù)main(){ inta[10],b[5],i; for(i=0;i<10;i++) a[i]=2*i; for(i=0;i<5;i++) b[i]=i*i; print_array(); print_array();}voidprint_array(int*data,intnum){ inti; printf("Thearrayis:"); for(i=0;i<num;i++) { printf("%d,",*data); data++; } printf("\n");}Thearrayis=0,2,4,6,8,10,12,14,16,18Thearrayis=0,1,4,9,16執(zhí)行結果:例2:利用函數(shù)打印數(shù)組a,10

b,5指針與字符串指針方式的執(zhí)行過程:計算字符串長度申請空間申請指針空間指針指向字符串...BUAA\0...?univer注意:用指針方式定義的字符串沒有名字,只能通過指針方式訪問。char_temp[]="BUAA";char*univer=_temp;相當于char*univer="BUAA";字符串指針作為函數(shù)參數(shù)main(){char*a="Ilikeprogramming";char*b[100];copy_string(a,b);printf("%s",b);}向函數(shù)傳遞字符串指針與向函數(shù)傳遞數(shù)組指針本質上是一樣的,唯一的區(qū)別在于不需要明確告訴函數(shù)字符串的長度。例4.

利用函數(shù)實現(xiàn)字符串拷貝copy_string(char*str1,char*str2){ while(;;) { if(*str1=='\0')break;

*str2=*str1; str1++; str2++; }

*str2='\0';}關于字符串的注意事項字符串的本質:帶有結束標志的字符數(shù)組。

(1).數(shù)組有多大就占用多少內存空間;

(2).對于數(shù)組一般不能進行整體操作;

charstr[14]; str="Cprogramming"; (3).可以利用專用庫函數(shù)對其進行操作。字符串指針的本質:存貯字符串地址的指針變量。

(1).只占用一個變量的存貯空間; (2).不能將一個字符串存入該指針。

char*str; str="Cprogramming";字符串名也是指針,但它是常量,不可變。基本要求指針的基本概念與基本使用指針作為函數(shù)參數(shù)的使用方法用指針從函數(shù)中帶回多個結果用指針操作數(shù)組的方法用指針向函數(shù)傳遞數(shù)組用指針操作字符串的基本方法結構體結構體是對數(shù)據(jù)封裝的主要方法函數(shù)是對程序封裝的主要方法結構體的定義:structbook{ charname[20]; charpublisher[40]; longpub_date; intpages; floatprice;};structstudent{ charname[20]; intage; intgender; floatmath; floatenglish;};結構體的定義只說明了該類型變量的組成情況,并沒有真正的申請內存空間。結構變量的內存分配structstudent{ charname[20]; intage; intgender; floatmath; floatenglish;};structstudentst1,st2;nameagegendermathenglishst1nameagegendermathenglishst2結構體的基本應用structstudent{ charname[20]; intage;}main(){ structstudentst1,st2; strcpy(,"LiMing"); st1.age=19; strcpy(,"LiuYifei"); st2.age=21; printf("Name\

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論