全國計算機等級考試二級C語言教程64總復習_第1頁
全國計算機等級考試二級C語言教程64總復習_第2頁
全國計算機等級考試二級C語言教程64總復習_第3頁
全國計算機等級考試二級C語言教程64總復習_第4頁
全國計算機等級考試二級C語言教程64總復習_第5頁
已閱讀5頁,還剩66頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C語言總復習〔64學時〕以考試難度為限.一、C語言的數據表示1.1常量和變量1.2表達式1.3數據類型簡單類型、結構類型、指針類型1.4輸入、輸出.1.1常量和變量1.常量常量是在程序執(zhí)行中,值不發(fā)生改變的數據。其值預先決定,之后不變。有不同的數據類型?!?〕常數〔有的稱直接常量、頁面常量〕例如的:整數:+5、-3、017〔八進制〕、0x1f(16進制)實數(浮點數):3.14、-1.2E-3、1E10單個字符:‘A’,占一個字節(jié)’\\’,轉義字符‘\’‘\’非法’\77’〔八進制ASCII碼63,‘?’〕,’\78’非法’\x3f’〔十六進制ASCII碼63,‘?’〕‘\x3g’非法字符串:“A〞后面有\(zhòng)0,占兩個字節(jié)E3,2E3.0不合法不是整型量占一個字節(jié).〔2〕符號常量給常量起標識符名字。C語言的符號常量〔用宏定義〕:#definePI3.14159265好處:提高程序易讀性;方便修改常量的值;注意:1.一般用大寫字母。2,#defineM3不是C語句,后面沒有“;〞。3.可以做M+1,不能做M++.〔3〕地址常量當數組在定義時,其變量名為其首地址,是地址常量。inta[10];可以做a+1,不能做a++..1.1常量和變量2.變量用各種操作來改變值數據。從“名〞和“值〞兩個角度認識變量〔1〕變量名每個變量,要在使用前定義變量的名字,遵循標識符命名規(guī)那么。只能用字母、數字和下劃線組成。不能以數字開頭。不能用保存字(int,printf,main…..)。.變量定義就是申請數據的存儲空間,登記數據的各種存儲特性。例如:intm;2個字節(jié)-215~215-1(-32768~32767)longn;4個字節(jié)-231~231-1charch;1個字節(jié)0~255floatx;4個字節(jié)±3.4×

(10-38~1038)

doubley;8個字節(jié)±1.7×(10-308~10308)

可以用sizeof獲得字長sizeof(char)=1sizeof(int)=2sizeof(double)=8.〔2〕變量的值變量值就是由變量名所指定空間上的存儲數據內容。即變量的當前值。數據內容用語言的操作語句來改變。賦值語句;鍵盤輸入語句;charchx;intm;/*變量的定義*/chx=‘A’;m=12*3;/*賦值語句*/scanf(“%d〞,&m);/*鍵盤輸入語句*/在程序運行時,將數據存入制定內存空間。②①變量初始化:定義變量時同時確定變量初值。例如:charchy=‘a’;intweight=2;

③.1.2C語言的表達式1、算術表達式2、關系表達式3、邏輯表達式4、賦值表達式5、逗號表達式6、條件表達式7、其他表達式C語言的表達式:使用規(guī)定的運算符,將常量、變量、函數〔調用〕連結的一個有意義的式子。

.1、算術表達式用算術運算符來表示對數據的算術運算求值過程。算術運算符:+-*/%2/3結果是0,2%3結果是2注意不同類型運算問題:doublelongunsignedintfloatcharshort高低.2、關系表達式關系運算符:>>=<<=(優(yōu)先級較高)!===(優(yōu)先級較低)關系表達式的結果:1〔真〕,非0〔假〕如:x>0,sin(x)<=0.5,(a+b)==(c*d)注意語法合理與數學邏輯錯誤問題:分析:10<=a<=15a=9是假10<=a<=1510<=a假00<=15真所以要寫成10<=a&&a<=15.3、邏輯表達式用邏輯表達式來表示對數據的邏輯關系判斷,運算結果是邏輯值“真〞1或者“假〞0。C邏輯運算符包括:!&&||參加邏輯運算的數據必須是邏輯量,可以是邏輯類型的變量、常量,關系表達式或邏輯表達式。C語言中,沒有專門的邏輯量,1是真值,0是假值。也認為非零的值為真值。如:inta=3,b=4,c=-5;(1)!((a<b)&&!c||1)(2)if(a)printf(“\nyes〞);a,c均按非0〔即真〕處理.邏輯運算規(guī)律①在&&(與)表達式中,假設&&的左端為假,那么不再計算另一端,該表達式值肯定為0〔假〕。②在||(或)表達式中,假設||的左端為真,那么不再計算另一端,表達式的值必定為1〔真〕。inta=5,b=1k=a<=3&&b-->0k?b?假,后面不算了k=0,b=1.判斷閏年的條件是:能被4整除但不能被100整除,或能被400整除。(x%4==0&&x%100!=0)水仙花數是指一個三位正整數,其各位數字的立方和等于該數本身(k*100+m*10+n==k*k*k+m*m*m+n*n*n)三角形的根本條件((a+b)>c)&&((c+b)>a)&&((c+a)>b)).4、賦值表達式=,+=,-=,*=,/=,++〔單目〕,--〔單目〕級別僅高于逗號表達式,右結合inta=3,c=2,ba=b=c;n*=m+2相當于n=n*(m+2)k=i++;先k=i,再i=i+1k=++i;先i=i+1,再k=ic賦值給b,b=2b賦值給a,a=2.5、條件表達式e1?e2:e3假設e1為真,表達式的值為e2,否那么為e3.(--a==b++)?--a:b++5-1==4Ta=4--aa=3表達式的值為3a=5,b=44-1==5Fb=6b++b=7表達式的值為6a=4,b=5條件表達式的值的類型為e2,e3二者中類型較高者。如果y=5;y<3?-1.0:2其值為2.0.6、逗號表達式表達式的值等于最后一個表達式的值,運算等級最低!a=5,b=2,c=3a=7+b+c,

a++

a=(7+b+c,

a++)a=12a=57、強制類型轉換表達式〔單目〕intm;sqrt((float)m);并沒有改變m的類型和數值.理解記憶運算符表

(高)(低)!++,--,等算數運算符關系運算符邏輯運算符&&||條件運算符賦值運算符

逗號運算符右結合單目運算符賦值運算符.1.3數據類型數據類型:在高級語言的數據表示機制中,數據類型〔datatyPe〕是個核心概念。簡單類型構造類型指針類型整型實型字符型數組結構體共用體數值型枚舉型空類型.1.3數據類型〔1〕整型〔輸入、輸出格式“%d〞〕類型名字節(jié)數數值范圍int2-32768~32767short2-32768~32767long4-2147483648~2147483647還有無符號整型〔輸入、輸出格式“%u〞〕Unsigned[int]20~65535Unsignedshort20~65535Unsignedlong40~42949672951.簡單類型.(2)實型實型〔float〕數據的值集是實數集的一個有限子集.-3.4e38,-3.4e-39,3.4E-38,3.4E381.簡單類型類型名字節(jié)數輸入、輸出格式有效數字位float4

%f

7doubule8%lf16longdoubule16%lf19不要以為是長整型E38非法.(3)字符型〔輸入、輸出格式“%c〞〕ASCII碼,一個字符占1字節(jié);charca;ca=‘#’;注意轉義字符’\’的使用?!?〕字符串〔輸入、輸出格式“%s〞〕所謂“字符串〞是指假設干有效字符的序列。C語言字符串可以包括字母、數字、專用字符、轉義字符等。字符串常量:使用雙引號"China""BASIC""a+b=c""Li-Li""39.4""%d\n""解放軍“字符型的一維數組〔相當于字符串變量〕charst[8],str[10];strcpy(st,"12345");strcpy(str,st);不能st=“12345〞;str=st;.2.結構類型“結構〞一般可以稱為數據元素,在不同的結構類型中,數據元素會有特定的名稱。結構類型的數據由更加根本的成分組成。這些成分稱為“數據項〞,結構的子成員。1.3數據類型.(1)數組

A[0]A[1]A[2]A[3]A[4]A[5]A[6]A[7]1020304050607080一個數組〔array〕是由相同類型的假設干數組元素構成的有限序列。C語言的數定義:intB[8],A[8];charC[10];

2.結構類型.例日期類型的定義〔2〕結構體C語言中實現(xiàn):structDate{intmonth;/*月*/intday;/*日*/intyear;/*年*/};structDatemyd={12,16,1978};系統(tǒng)分配給它的內存是各成員所需內存量的總和。本例是6.

.〔1〕指針:變量名的在內存中的存儲地址?!?〕指針變量inti=12,*p;P=&i;把存放變量i的地址的變量p稱作指針變量。指針變量的存放內容是數據的地址。3.指針類型〔3〕指針引用變量指針變量可以指向各種不同的數據類型,因此指針變量也要有不同的指針類型。如:intm,*p;floatx,*q;inta[],*rm=12;p=&m;x=3.14;q=&x;r=a;注意:是否用&.1.4輸入、輸出輸出:printf(“…….〞,…….)%d,%6d,%ld%c,%s%f,%10.2f,%lf,%20.8lfn=3;printf(“\n%d,%d,%d〞,n,++n,n++);計算從右到左,輸出從左到右。%s是輸出以指定首地址到第一個\0或空格之間的字符串。chara[]=“abcdefg〞,*p=a;printf(“%s〞,*++p);bcd5,5,3.1.4輸入、輸出輸入:scanf(“…….〞,…….)%d,%ld對應intlong%c,%s對應charcharstr[]%f,%lf對應flaotdouble常見錯誤inta,b;chard,e[20];scanf("%d,%f\n〞,&a,&b);scanf("%d,%f〞,a,b);scanf("%7.2f",&a);scanf("%s",&e);scanf("%c",d);.(1)表達式語句(2)流程控制語句(3)復合語句C語言語句⒈指令語句⒉非指令語句⑴數據定義語句floatx;intm;⑵編譯預處理①宏定義#definePI3.14159②文件包含處理#include<stdio.h>二、C語言的程序結構與相關語句.表達式語句1.表達式語句的組成:由一個表達式后接一個分號組成的。i=i+1〔是表達式,沒有構成語句〕i=i+1;〔是語句〕x+y;〔是合法語句,但沒有實際意義〕⒉表達式語句的分類:①賦值語句:i=1;c=getchar();②函數調用語句:printf(n\Hello,world!");③空語句。其形式為:;④逗號表達式語句:++a,--b;.完成一定的控制功能。9種控制語句:判斷語句條件判斷語句if()…else…多分支選擇語句switch()…case循環(huán)語句

循環(huán)次數控制語句for()先判斷后執(zhí)行循環(huán)控制語句while()先執(zhí)行后判斷循環(huán)控制語句do…while()轉移控制語句直接轉移語句goto終止語句break(用在循環(huán)結構、swicth)跳轉語句continue(僅用在循環(huán)結構)返回語句return流程控制語句.復合語句⒈一組語句括在一對花括號之中,稱復合語句。{c=getchar();putchar(c);}注意,一個復合語句的后花括號之后不應再寫分號。⒉在語法上是一個整體,相當于一個語句。但凡能夠使用簡單語句的地方,都可以使用復合語句。一個復合語句中又可以包含另一個或多個復合語句。.二、C語言的程序結構與相關語句程序的三種根本結構:順序結構選擇結構if()…else…switch()…case循環(huán)結構for(){…..;}while(){……;}do{……;}while().選擇結構單分支結構if(a==b)printf(“yes〞);雙分支結構if(a==b)printf(“yes〞);elseprintf(“no〞);多分支結構switch_case

.多分支選擇語句switch〔表達式〕{case常量表達式1:語句序列1;[break;] case常量表達式2:語句序列2;[break;] ……… case常量表達式n:語句序列n;[break;] [default:語句序列n+1;]} 根據“表達式〞的值從上至下去尋找與表達式的值相匹配的“case常量表達式〞,執(zhí)行一個分支后,再執(zhí)行下一個分支,直到break結束,然后執(zhí)行switch結構后面的程序。找不到匹配的入口標號時,執(zhí)行“語句序列n+1〞,然后結束。順序向下執(zhí)行程序。.main(){inta=1,b=1;switch(a){case1:switch(b){case0:printf(“$〞);break;case1:printf(“#〞);break;case2:printf(“*〞);}case2:printf(“^〞);case3:printf(“@〞);break;case4:printf(“&〞);}}a=1case1:swtch(1)b=1printf#,break跳出switch(b)結構進入switch(a)結構case2:printf^case2:printf@break跳出switch(a)結構#^@.for,while,do-while三種結構循環(huán)變量初始化,繼續(xù)循環(huán)條件,改變循環(huán)變量是不可缺少的三個環(huán)節(jié)。for常用于循環(huán)次數的問題中。括號中的兩個“;〞不可省。while與do-while常用于循環(huán)次數未知的問題中。.注意在for和while語句之后一般沒有分號有分號表示循環(huán)體就是分號之前的內容〔空循環(huán)體〕while(i<100);

i++;for(i=0;i<100;i++);

printf("%d",i);if,swtich,while,for后面的語句只能是一句,因此,多句時別忘了{}。.在while(e)和for(;e;)中的e是循環(huán)繼續(xù)的條件,不能寫其它條件!如果缺省,就是死循環(huán)!在if(e),while(e)和for(;e;)中e的值是邏輯值〔0或非0〕e一般是關系表達式,邏輯表達式或變量。if(x=1)if(x==1)main(){inti=1;do{i--;}while(i++);printf(“%d〞,i--);}A)-1B)0C)1D)陷入死循環(huán)i=1i--,i=0while(i)終止循環(huán)i++,i=1輸出i=1i--,i=0.break,coutinuebreak只能用于switch和循環(huán)語句中,作用提前終止本層次switch和循環(huán)。coutinue是跳過循環(huán)體內尚未執(zhí)行的語句,接著執(zhí)行下次循環(huán)。.常用的循環(huán)算法求素數、水仙花數、最小公倍數、最大公約數、分解多位數的數字,累加,累乘,分解質因數等。各種有規(guī)律的圖案。while(m) { k=m%10;/*求最低位的數字*/ m=m/10;/*除去最低位的數字*/ }分解多位數的數字.判斷素數main(){inti,x,flag=0;scanf(“%d〞,&x);for(i=2;i<x;i++)if(x%i==0){flag=1,break;}if(flag)printf(“%disaprime〞,x);elseprintf(“%dis’taprime〞,x);}.求階乘x!longfacto(intx){longy;for(y=1;x>0;--x)y*=x;return(y);}main(){longy;for(y=1;x>0;--x)y*=x;printf(“%ld〞,y);}main(){intm,n;longcmn,facto();scanf("%d%d",&m,&n);cmn=facto(m)/(facto(n)*facto(m-n));printf("%ld\n",cmn);}求C(m,n)=m!/(n!*(m-n)!).數組的定義類型標識符數組名[常量表達式]錯誤的定義是:或intn;intn=10;scanf("%d",&n);inta[n];inta[n];

定義inta[5]時,a[0],a[1]…..=?隨機數!只有inta[5]={3}后,后面幾項自動賦0三數組.數組的初始化合法:inta[]={1,2,3,4,5};inti[][3]={1,2,3,4,5,6};inta[5]={1,2,3};chara[4]=“boy〞chara[3]={‘b’,’o’,’y’}不合法:inta[5]={,2,,4,5};inti[2][]={1,2,3,4,5,6};

inta[5]={};chara[4]={boy}.分別用三種方法(數組元素下標法、數組名地址法、指針變量法)訪問數組元素。#include<stdio.h>voidmain(){inta[5]={1,3,5,7,9},i,*p;for(i=0;i<5;i++)printf("%d",a[i]);/*下標法*/printf("\n");for(i=0;i<5;i++)printf("%d",*(a+i));/*地址法*/printf("\n");for(p=a;p<a+5;p++)printf("%d",*p);/*指針變量*/}.數組的操作往往用循環(huán)結構.數值數組#defineM10inta[M];for(i=0;i<M;i++)字符數組#defineM10chara[M];for(i=0;a[i]!=‘\0’;i++)數值數組倒序#defineM10main(){inti,j,a[M];for(i=0;i<M;i++)scanf(“%d〞,a[i]);for(i=0,j=M;i<j;i++,i--)交換a[i],a[j]字符數組倒序main(){inti,j;chara[50];gets(a);for(i=0,j=strlen(a);i<j;i++,i--)交換a[i],a[j].用函數實現(xiàn)倒序數值數組voidinv(intx[],intn);#defineM10main(){inti,j,a[M];for(i=0;i<M;i++)scanf(“%d〞,a[i]);inv(a,M);for(i=0;i<M;i++)printf(“%d〞,a[i]);}字符數組voidinv(charx[])main(){inti,j;chara[50];gets(a);inv(a);puts(a);}多一個參數,表示元素個數可以整體輸入,輸出必須單個輸入,輸出.數值數組voidinv(intx[],intm){inti,j,k;j=m;for(i=0;i<j;i++,i--){k=x[i];x[i]=x[j];x[j]=k;}}字符數組voidinv(intx[]〕{inti,j,k;j=strlen(x);for(i=0;i<j;i++,i--){k=x[i];x[i]=x[j];x[j]=k;}}.main(){inti,j,s=0,a[3][3];for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);for(i=0;i<3;i++)for(j=0;j<3;j++)if(i==j||i+j==2)s+=a[i][j];printf("s=%d\n",s);}主對角線i==j副對角線i+j==2.累加(積〕#defineM10main(){inti,a[M],s=0;for(i=0;i<M;i++)scanf(“%d〞,&a[i]);for(i=0;i<M;i++)s+=a[i];printf(“s=%d〞,s);}#defineM10main(){inti,a[M],s=1;for(i=0;i<M;i++)scanf(“%d〞,&a[i]);for(i=0;i<M;i++)s*=a[i];printf(“s=%d〞,s);}.求最大〔小〕值#defineM30main(){inti,k,k_i,a[M];for(i=0;i<M;i++)scanf(“%d〞,&a[i]);k=a[0];k_i=0;for(i=1;i<M;i++)if(k<a[i]){k=a[i];k_i=i;}printf(“max=%d,maxi=%d〞,k,k_i);}最小值if(k<a[i])最大值.字符數組charstr[50];inti;for(i=0;str[i]!=‘\0’,i++)構造新的字符數組〔刪除,插入,復制,連接,倒序〕。1.用和不用字符串函數實現(xiàn)上述功能。2.用指針實現(xiàn)。3.必須注意最后一項一定是:str[i]=‘\0’;或*p=‘\0’;.二維字符數組二維數組在內存中的排列順序是“按行優(yōu)先存放〞二維數組a[m][n]可以視為由n個一維數組a[m]組成的。二維字符數組中m由其中最長的字符串決定。charstu[5][6]={“Tom",“Anne",“Mary",“Peter"};其中stu[0]=“Tom“stu[1]=“Anne".字符串函數要用#include<string.h>字符串拷貝函數strcpy字符串連接函數strcat字符串比較函數strcmp測字符串長度函數strlen函數strlen的值為‘\0’之前的全部字符個數.它與數組長度不是一個概念.chars[6]={‘H’,’o’,’w’,’\0’,’o’,’k’}strlen(s)=3.字符串函數的應用字符串賦值字符串比較s1=s2strcpy(s1,s2)s1==s2strcmp(s1,s2)==0s1>s2strcmp(s1,s2)>0s1<s2strcmp(s1,s2)<0.一函數定義的形式:[存儲類型]數據類型函數名(形式參數表)

{變量數據定義語句序列;可執(zhí)行語句序列;}intfun(intx,inty)

{intz;

z=x+y;

returnz;

}函數首部函數體四函數.非void型intfun(intx,inty);main(){inta,b;scanf(“%d,%d〞,&a,&b);printf(“%d〞,fun(a,b));}intfun(intx,inty)

{intz;

z=x+y;

returnz;

}作為框架記住void型voidfun(intx,inty);main(){inta,b;scanf(“%d,%d〞,&a,&b);fun(a,b);printf(“%d,%d〞,a,b);}voidfun(intx,inty)

{intz;

z=x;x=y;y=z;printf(“%d,%d〞,x,y);}.填main()charfun(intx,inty)

{intz;

z=x+y;

returnz;

}main(){}inta,b;函數實參charc;函數返回值scanf(“%d,%d〞,a,b);實參賦值c=fun(a,b);調用函數printf(“%c〞,c);輸出結果注意變量數據類型的對應int%dlong%ldfloat%fdouble%lfchar%c或%s.遞歸調用的概念在C語言中,一個函數直接或間接地調用自身,便構成了函數的遞歸調用。前者為直接遞歸調用,后者稱間接遞歸調用。計算n!的函數rfact()longfac(intn){longp;if(n==0||n==1)p=1;elsep=n*fac(n-1);/*自己調自己*/returnp;}voidmain(){printf(“%ld〞,fac(5));}記住遞歸調用的框架.數組名作函數實參voidfun(inta[],intn);main(){intarr[10],i;for(i=0;i<10;i++)scanf(“%d〞,&arr[i]);fun(arr,10);for(i=0;i<10;i++)printf(“%d〞,arr[i]);}.main(){inti,a=2;for(i=1;i<=5;i++)f(i);printf(“%d\n〞,a);}f(j)intj;{staticinta=100;autok=1;++k;printf(“%d+%d+%d=%d\n〞,a,k,j,a+k+j);a+=10;}函數調用函數定義函數內定義,值不保存。運行結果:100+2+1=103110+2+2=114120+2+3=125130+2+4=136140+2+5=1472兩個函數變量同名,互不影響。靜態(tài)變量.五指針(1)指針:某變量的地址值稱為該變量的指針。(2)指針變量:指針變量是存放普通變量地址的變量。指針變量指向這個普通變量。1112ab地址1010101210101012pq地址100220042006指針變量

整型變量.指針變量的定義<存儲類型>數據類型*指針變量名1<=初值1><,…>;double*pd,d1,d2;/*pd為指向double型變量的指針

溫馨提示

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

評論

0/150

提交評論