版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
./程序設計基本概念1.1程序和程序設計程序:連續(xù)執(zhí)行的一條條指令的集合稱為"程序"。對于計算機來說,它不能識別由高級語言編寫的程序,它只能接受和處理由0和1的代碼構成的二進制指令或數(shù)據(jù)。由于這種形式的指令是面向機器的,因此也被稱為"機器語言"。所以所有由高級語言編寫的程序都要經(jīng)過編譯,編譯成二進制代碼。這種具有翻譯功能的軟件稱為編譯程序。語言有很多種,我們現(xiàn)在要談論的就是C語言。為什么計算機會能進行各種各樣的操作,就是由不同的指令來實現(xiàn)的。而不是只有C語言才可以實現(xiàn)這樣的功能。還有其它很多語言。但是我們一般說C語言是其它語言的母語。會了C語言其它的語言在學習的過程就會感到輕松一些。程序設計1.確定數(shù)據(jù)結構2.確定算法3.編碼4.在計算機上調(diào)試程序5.整理并寫出文檔資料1.2算法定義:是指為了解決某個特定的問題而采取的確定且有限的步驟。有窮性確定性可行性有零個或多個輸入有一個或多個輸出1.3結構化程序設計和模塊化結構結構化程序由三種基本結構組成順序結構語句語句1語句2選擇結構判斷表達式子判斷表達式子不滿足語句1語句2循環(huán)結構判斷表達式判斷表達式不滿足滿足循環(huán)體循環(huán)體判斷表達式循環(huán)體判斷表達式滿足不滿足12計算機能直接執(zhí)行的程序是〔B。A源程序B目標程序C匯編程序D可執(zhí)行程序13以下敘述中正確的是<D>A程序設計的任務就是編寫程序代碼并上機調(diào)試B程序設計的任務就是確定所用數(shù)據(jù)結構C程序設計的任務就是確定所用算法D以上三種說法都不完整:C程序設計的初步知識2.1C語言程序的構成和格式#include<stdio.h>Main<>{doublea,b,area;a=1.2,b=3.6;/*將矩形的兩條邊長分別賦給a和b變量*/area=a*b;printf<"a=%f,b=%f,area=%f\n",a,b,area>;/*輸出矩形的兩條邊長和面積*/}#include<stdio.h>:每當寫一個程序時,第一條語句永遠是這個語句,因為一個程序可以沒有輸入但必須要有輸出,而這個語句就是控制輸入輸出的。所以任何一個程序都必須由這個語句開始。Main<>:是一個程序的主函數(shù)。一個程序是由多個函數(shù)組成的,而任何一個程序都要有一個主函數(shù),有且只有一個。任何程序都是由主函數(shù)開始執(zhí)行的。{}:它們兩個必須要成對出現(xiàn),它們中的語句是主函數(shù)體。包括定義部分和執(zhí)行部分。它們中的語句,每一條必須由;結束。;是C語句的一個組成部分而不是一個結束標識。/**/:注釋符一定要成對出現(xiàn),不允許嵌套。兩個符號間的語句不被執(zhí)行。例年真題:#include<stdio.h>main<>{Inta;A=5;/*給A變量賦值5A+=3;再賦值后再加3*/Printf<"%d",a>;}〔11以下敘述中正確的是〔C。AC程序的基本組成單位是語句BC程序中的每一行只能寫一條語句二級C語言程序設計試卷C簡單C語句必須以分號結束DC語句必須在一行寫完〔11以下敘述中正確的是<C>
A>C程序中的注釋只能出現(xiàn)在程序的開始位置和語句的后面
B>C程序書寫格式嚴格,要求一行只能寫一個語句
C>C程序書寫格式自由,一個語句可以寫在多行上
D>用C語言編寫的程序只能放在一個程序文件中第二課:C語言的基礎知識2.2標識符,常量和變量標識符:定義:由字母,數(shù)字和下劃線組成,并且第一個字符必須為字母或下劃線的。這樣的組成就是標識符。下列合法的是:elsewhat#$12334aa34a_ba-bIfa=3A=4注意:在C寫字母與小字字母被認為是兩個不同的字符。分類:關鍵字:在C中已經(jīng)定義好了的,不能用作它用的。如ifdoubleint等等。預定義標識符:如printfscanf用戶標識符:用戶根據(jù)自己的需求來定義的?!?2以下選項中,能用作用戶標識符的是<C>AvoidB8_8C_0_Dunsigned〔11以下選項中合法的標識符是<C>A1-1B1—1C-11D1〔12以下選項中不合法的標識符是<C>
A>printB>FORC>&aD>_00常量:定義:是指在程序的執(zhí)行的過程中,其值不會被改變的量。分類:整型常量:沒有小數(shù)的常量如:391234等等都是。實型常量:有小數(shù)點的常量如:3.93.03.字符常量:由單個字符組成的量如:’a’‘b’‘3’字符串常量:至少由一個字符組成的量如:"a""abc""beijing"符號常量:符號常量的值到底是多少,這是由在來定義符號常量時來決定的?2*pi〔13以下選項中,能用作數(shù)據(jù)常量的是<D>
Ao115B0118C1.5e1.5D115L〔13以下選項中不能作為C語言合法常量的是〔A。A'cd'B0.1e+6C"\a"D'\011'<13>以下選項中不屬于字符常量的是<B>
A>'C'B>"C"C>'\xCC0'D>'\072'2.3整型常量與實型常量整型常量的幾個表示方法十進制數(shù):八進制數(shù):以0開頭的數(shù)字,由0-7組成。下列合法的八進制數(shù)是A,0B,028C,-077D,01.0十六進制數(shù):以0X開頭,由0-9和A-F組成。A,oxffB,0xabcC,0x11D,0x19實型常量123.4小數(shù)形式:123.4指數(shù)形式:1.234e21.字母e和E之前必須要有數(shù)字2.字母e和E之后的數(shù)字必須是整數(shù)3.字母e’和數(shù)字之間不能有空格。A,2.607E-10.8103E2-77.77456E-2變量:1.定義:在程序的運行過程中其值可以被改變的量,就叫變量。2.原則:變量必須先定義后使用。變量定義的過程就是給變量開辟存儲單元的過程。3.分類:整型變量:用關鍵字int來表示.shortint短整型longint長整型在存中占4個字節(jié)如123Lunsigned無符號如有-200U這就是錯的。變量的定義:inta這是定義了一個整型變量a.實型變量:用關鍵字double或float來表示。float單精度在存中占4個字節(jié)double雙精度在存中占8個字節(jié)。算術表達式一、基本的算術運算符+-*/%這些是雙目運算符〔就是指操作對象有兩個注意:除%外,其它的運算符的運算對象可以是整型也可以是實型。%的操作對象只能是整型。如10%3=110.7%310%4.5x%3=0+-也可以做為單目運算。-5.4+4.9說明:1.如果雙目運算符兩邊運算數(shù)的類型一致,則所得結果的類型與運算數(shù)的類型一致。如1.0/2.0=0.51/2=02.如果雙目運算符兩邊運算數(shù)的類型不一致,則系統(tǒng)會自動進行類型轉換,使兩邊的類型一致后,再進行運算。1.0/2=0.53.所有的單精度數(shù)據(jù),在運算過程中都以雙精度進行運算。二、優(yōu)先級〔+-*/%+-由高——————低如<5+1>/2=???強制類型轉換表達式格式:〔類型名〔表達式例:〔int3.234=3<double>10%3=?〔14表達式:4-<9>%2的值是<B>A0B3C4D5<14>設變量已正確定義并賦值,以下正確的表達式是<C>A>x=y*5=x+zB>int<15.8%5>C>x=y+z+5,++yD>x=25%5.02.6賦值表達式格式:變量名=表達式注:1.不可以顛倒〔左邊必須是變量名,右邊必須是C語言中合法的表達式2.功能就是先求出右邊表達式的值,然后把此值賦值給賦值號左邊的變量。確切的說是把數(shù)據(jù)存入以該變量為標識的存儲單元中去。a=4,a=73.結合性的優(yōu)先級僅高于逗號表達式。順序是自右向左的。如a=2+7/34."="是一個賦值號,不是一個等號。5.x=y。變量的值也是可以傳遞和賦值的。它的意思就是將變量Y中的值賦值到X中去。同樣N=N+1也成立6.賦值運算符的左側只能是變量,不能是常量或表達式a+b=c這就是的7。賦值號的右邊也可以是一個賦值表達式。如a=b=7+1;補充;表達式與語句的區(qū)別,表達式后面加一個分號就是語句。復合賦值表達式例:a+=3a=a+3同理可得a*=3/=-=a+=a-=a+aa的初值是9a+=a-=18a+=<a=a-18>a+=<a=-9>a+=a-18〔15若有定義語句:intx=10;,則表達式x-=x+x的值為<B>A-20B-10C0D10〔14設有定義:intx=2;,以下表達式中,值不為6的是<D>Ax*=x+1x=x*<x+1>Bx++,2*xCx*=〔1+xD2*x,x+=2<17>若變量均已正確定義并賦值,以下合法的C語言賦值語句是<A>A>x=y==5;B>x=n%2.5;C>x+n=ID>x=5=4+1;2.7++和——的講解++:自身加1--:自身減1如i=3i++_______I=i+1i=4單目3++++II++當++在前,先自身加1,然后再干別人讓干的事情。當++在后,先別人讓干的事情然后再干自身加1。inti=3;inta;a=i++;a=3a=++I;a=4第三課:輸入和輸出語句3.2輸出語句的講解一、printf函數(shù)的一般調(diào)用形式格式:printf<格式控制,輸出項1,輸出項2,>;在printf函數(shù)的最后面寫上;號就是輸出語句。1,給輸出項白提供輸出格式說明格式說明符:作用:就是使數(shù)據(jù)按格式說明符的要求進行輸出。組成:由%號和緊跟在其后的格式描述符組成。int%dfloat或double%f或e%char%c2.提供原樣輸出的文字或字符在""中除了格式說明符之外的容要全部原樣輸出。各個輸出項之間要用逗號隔開。輸出項可以是任意合法的常量,變量或表達式。printf中常用的格式說明在格式說明符中,每一個格式說明符都必須以%號開頭由相應的類型標識字母結束。但在他們之間可以有其它的一個容:%c:輸出一個字符%d:輸出一個十進制的數(shù)據(jù)%o:以八進制格式輸出。%X:以十六進制輸出%U:無符號十進制輸出%f:以帶小數(shù)點的數(shù)字輸出%e:以指數(shù)形式輸出%s:輸出一個字符串。%%:輸出一個%號%4d:輸出的數(shù)據(jù)長度是4個長度,當原來的長度大于4個時會自動突破。小于4個時會填充空格。%x.yf:x代表數(shù)制的寬度〔包括小數(shù)點。Y代表小數(shù)點后面的小數(shù)位數(shù)。注意事項:1.輸出比較自由一些,輸出有的各個數(shù)之到底是什么,取決于格式說明符之間的容。2.格式說明符要與輸出項一一對應。3.輸出語句中還可以有\(zhòng)n\r\t\a4.盡量不要在輸出語句中改變輸出變量的值。5.輸出的數(shù)據(jù)中如果存在變量,一定要定義過的。習題講解〔13閱讀以下程序#includemain<>{intcase;floatprintF;printf<"請輸入2個數(shù):">;scanf<"%d%f",&case,&pjrintF>;printf<"%d%f\n",case,printF>;}該程序編譯時產(chǎn)生錯誤,其出錯原因是〔AA定義語句出錯,case是關鍵字,不能用作用戶自定義標識符B定義語句出錯,printF不能用作用戶自定義標識符C定義語句無錯,scanf不能作為輸入函數(shù)使用D定義語句無錯,printf不能輸出case的值〔16有以下程序#includemain<>{inta=1,b=0;printf<"%d,",b=a+b>;printf<"%d\n",a=2*b>;}程序運行后的輸出結果是〔DA0,0B1,0C3,2D1,2〔15程序段:intx=12;doubley=3.141593;printf〔"%d%8.6f",x,y;的輸出結果是〔AA123.141593B123.141593C12,3.141593D123.141593#include<stdio.h>main<>{doublea=123.456;printf<"%6.2f",a>;}輸入語句格式:scanf<格式控制,輸入項1,輸入項2,...>;例如:想通過鍵盤輸入3個數(shù)分別給變量a,b,c。并且他們分別為整型,浮點型,雙精度型。輸入語句為scanf<"%d%f%lf",&k,&a,&y>;說明:1.格式說明符與輸出語句一樣。2.在格式串中,必須含有與輸入項一一對應的格式轉換說明符。3.在VC6.0的環(huán)境下,要收輸入的DOUBLE型數(shù)據(jù)的格式說明符一定要用%lf,否則數(shù)據(jù)不能正確的輸入4.由于輸入是一個字符流,所以當輸入的數(shù)據(jù)少于輸入項時,程序會等待用戶輸入,直到滿足要求。當輸入的數(shù)據(jù)多于輸入項時,多余的數(shù)據(jù)會自動作廢。例題:intx;x=11/3;inty=5;printf<"%%d,%%%d\n",x,y>;結果是:%d,%3[3.5]若變量已正確說明為int類型,要給a、b、c輸入數(shù)據(jù),以下正確的輸入語句是<D>A>read<a,b,c>;B>scanf<"%d%d%d",a,b,c>;C>scanf<"%D%D%D",&a,%b,%c>;D>scanf<"%d%d%d",&a,&b,&c>;[3.6]若變量已正確說明為float類型,要通過以下賦值語句給a賦予10、b賦予22、c賦予33,以下不正確的輸入形式是<A>A>10B>10.0,22.0,33.0C>10.0D>10222222.033.03333scanf<"%f%f%f",&a,&b,&c>;復合語句:多個語句被{}括起來,當成一條語句來執(zhí)行??照Z句:最后的表示只有一個;程序舉例:1。編寫一個程序,從鍵盤上輸入兩個數(shù)字,讓后讓他們互換一下。#include<stdio.h>main<>{inta,b;printf<"請輸入兩個數(shù)字:">;scanf<"%2d%3d",&a,&b>;printf<"qian:%d%d",a,b>;intc;c=a,a=b,b=c;printf<"后:%d%d",a,b>;}2。編寫程序,對一個double型數(shù)據(jù)進行四舍五入運算。要求保留兩位有效小樹。123.4567123'4567*100=12345.6712345.67+0.5=12346.17<int><12346.17>=1234612346/100=123.463。編寫程序,使從鍵盤中輸入的三位數(shù)倒著輸出。選擇題[3.1]若a、b、c、d、都是int類型變量且初值為0,以下選項中不正確的賦值語句是<C>A>a=b=c=d=100;B>d++;C>c+b;D>d=<c=22>-<b++>;[3.2]以下選項中不是C語句的是<C>A>{inti;i++;printf<"%d\n",i>;}B>;C>a=5,c=10D>{;}[3.3]以下合法的C語言賦值語句是<D>A>a=b=58B>k=int<a+b>;C>a=58,b=58D>--i;[3.4]以下程序的輸出結果是<C>A>0B>1C>3D>main<>{intx=10,y=3;printf<"%d\n",y=x/y>;}[3.5]若變量已正確說明為int類型,要給a、b、c輸入數(shù)據(jù),以下正確的輸入語句是<D>A>read<a,b,c>;B>scanf<"%d%d%d",a,b,c>;C>scanf<"%D%D%D",&a,%b,%c>;D>scanf<"%d%d%d",&a,&b,&c>;[3.6]若變量已正確說明為float類型,要通過以下賦值語句給a賦予10、b賦予22、c賦予33,以下不正確的輸入形式是〔BA>10B>10.0,22.0,33.0C2222.033.03333scanf<"%f%f%f",&a,&b,&c>;[3.7]若變量已正確定義,要將a和b中的數(shù)進行交換,下面不正確的語句組是<C>A>a=a+b,b=a-b,a=a-b;B>t=a,a=b,b=t;C>a=t;t=b;b=a;D>t=b;b=a;a=t;[3.8]若變量已正確定義,以下程序段的輸出結果是<D>A>輸出格式說明與輸出項不區(qū)配,輸出無定值B>5.17C>5.168D>5.169X=5.16894;Printf<"%f\n",<int><x*1000+0.5>/<float>1000>;[3.9]若有以下程序段,c3中的值是<A>A>0B>1/2C>0.5D>1intc1=1,c2=2,c3;c3=c1/c2;[3.10]若有以下程序段,其輸出結果是<B>A>3,0,-10B>0,0,5Cinta=0,b=0,c=0;c=<a-=a-5>,<a=b,b+3>;printf<"%d,%d,%d\n",a,b,c>;填空題[3.21]若有以下定義,請寫出以下程序段中輸出語句執(zhí)行后的輸出結果?!?-200,2500〔2i=-200,j=500<3>i=-200回車j=2500inti=-200,j=2500;printf<"<1>%d%d",i,j>;printf<"<2>i=%d,j=%d\n",i,j>;printf<"<3>i=%d\nj=%d\n",i,j>;[3.22]變量i、j、k已定義為int類型并有初值0,用以下語句進行輸入時scanf<"%d",&I>;scanf<"%d",&j>;scanf<"%d",&k>;當執(zhí)行第一個輸入語句,從鍵盤輸入:12.3<CR><CR>表示Enter鍵則變量i、j、k的值分別是____12____、____0___、__0____。[3.23]復合語句在語法上被認為是一條語名。空語句的形式是;[3.24]C語句的最后用;結束。[3.25]以下程序段,要求通過scanf語句給變量賦值,然后輸出變量的值。寫出運行時給k輸入100,給a輸入25.81,給x輸入1.89234時的三種可能的輸入形式_____、_____、_____。intk;floata;doublex;scanf<"%d%f%lf",&k,&a,&x>;pirntf<"k=%d,a=%f,x=%f\n",k,a,x>;編程題和改錯題[3.29]以下程序多處有錯。要按下面指定的形式輸入數(shù)據(jù)和輸出數(shù)據(jù)時,請對該程序做相應的修改。main{doublea,b,c,s,v;printf<inputa,b,c:\n>;scanf<"%d%d%d",a,b,c>;s=a*b;/*計算長方形面積*/v=a*b*c;/*計算長方體體積*/printf<"%d%d%d",a,b,c>;printf<"s=%f\n",s,"v=%d\n",v>;}當程序執(zhí)行時,屏幕的顯示和要求輸入形式如下:inputa,b,c:2.02.03.0此處的2.02.03.0是用戶輸入的數(shù)據(jù)a=2.000000,b=2.000000,c=3.000000此處是要求的輸出形式s=4.000000,v=12.000000[3.30]編寫程序,把560分鐘換算成用小時和分鐘表示,然后進行輸出。[3.31]編寫程序,輸入兩個整數(shù):1500和350,求出它們的商數(shù)和余數(shù)并進行輸出。[3.32]編寫程序,讀入三個雙精度數(shù),求它們的平均值并保留此平均值小數(shù)后一位數(shù),對小數(shù)點后第二位數(shù)進行四舍五入,最后輸出結果。[3.33]編寫程序,讀入三個整數(shù)給a、b、c,然后交換它們中的數(shù),把a中原來的值給b,把b中原來的值給c,把c中原來的值給a。第四課:C語言的程序結構4-1節(jié)、關系運算與邏輯運算一、簡介關系表達式與邏輯表達式的運算結果都會得到一個邏輯值。就是"真"、"假"在C語言中0表示"假",非0〔無論是負數(shù)還是正數(shù)都是真,更多時候用1來代替表示"真"。二、幾個簡單的關系運算符<<=>>===!=注意:1,由兩個字符組成的運算符,中間不能有空格2,它們都是雙目運算符,具有自左至右的結合性。3,上面的6個運算符中,前4個的優(yōu)先級要比后2個的優(yōu)先級要高。先計算,后判斷,最后進行賦值運算。三、幾個簡單的邏輯運算符&&與一假則假||或一真則真!非非假則真,非真則假1&&2=10&&6=0inta=4,b=7;a&&7=1intx=0,y=7;x++&&y++?x=1y=7++x&&y++?x=1y=8同樣放在||中也是一樣的。4-2、4-3節(jié)、if語句一、定義:只有兩種結果。要么執(zhí)行這條語句,要么執(zhí)行那條語句。if<條件表達式>上述條件成立執(zhí)行的句子else上述條件不成立執(zhí)行的句子如:if<成績>60>顯示及格else顯示不及格二、分類1.不含有else的語句if<表達式>語句if<a<b>{t=a;a=b;b=t;}2.含有else語句if<條件>語句1;else{語句2;語句3;}注:1.沒有分號2.控制的是與if或者else緊臨的"一條"語句。if<a<b>printf<"%d",b>;elseprintf<"%d",a>;if<a%3==0>yeselseno4-4節(jié)、結合一個例題來給大家分析if的嵌套輸入一個學生的成績,評定他的等級。每十分一個等級if<>elseif<>elseif<>`elseif<a>=90>printf<"a">;elseif<a>=80>printf<"b">;elseif<a>=70>printf<"c">;elseif<a>=60>printf<"d">;elseprintf<"e">;4-5、節(jié)7設有定義:inta=1,b=2,c=3;,以下語句中執(zhí)行效果與其它三個不同的是〔CAif<a>b>c=a,a=b,b=c;Bif<a>b>{c=a,a=b,b=c;}Cif<a>b>c=a;a=b;b=c;Dif<a>b>{c=a;a=b;b=c;}〔18有以下程序應該選〔B#include<stdio.h>main〔{intx;scanf〔"%d",&x;if〔x<=3;elseif〔x!=10printf〔"%d\n",x;}程序運行時,輸入的值在哪個圍才會有輸出結果A不等于10的整數(shù)B大于3且不等于10的整數(shù)C大于3或等于10的整數(shù)D小于3的整數(shù)〔19有以下程序〔C#include<stdio.h>Main〔{inta=1,b=2,c=3,d=0;if〔a==1&&b++==2if〔b!=2||c--!=3printf〔"%d,%d,%d\n",a,b,c;elseprintf〔"%d,%d,%d\n",a,b,c;elseprintf〔"%d,%d,%d\n",a,b,c;}程序運行后的輸出結果是A1,2,3B1,3,2C1,3,3D3,2,14-6節(jié)、條件表達式是C語言中唯一的一個三目運算。格式:表達式1?表達式2:表達式3當1成立〔非零時時,表達式的值就是2的值,否則就是3的值。如:1.1<2?4:52.printf<"%d",x<0?<-1>*++x:x++>;<假定X的值為-3>3.++X>3?<x<3?a:b>:b4-7節(jié)、switch語句〔一switch<表達式>{case常量表達式1:語句1case常量表達式2:語句2case常量表達式3:語句3case常量表達式4:語句4case常量表達式5:語句5。。。case常量表達式N:語句N}4-8節(jié)、switch語句〔二switch<A/10>{case10:printf<"A">;case9:printf<"A">;case8;printf<"b">;case7;printf<"c">;case6;printf<"d">;default:printf<"e">;}4-9節(jié)4-15節(jié)、選擇題[4.1]下列運算符中優(yōu)先級最高的運算符是〔AA!B%C>-=D>&&[4.2]下列運算符中優(yōu)先級最低的運算符是〔AA>||B>!=C><=D>+[4.3]為表示關系x>=y>=z,應使用的C語言表達式是〔AA><x>=y>&&<y>=z>B><x>=y>AND<y>=z>C><x>=y>=z>D><x>=y>&<y>=z>[4.4]設a、b和c都是int型變量,且a=3,b=4,c=5;則以下的表達式中,值為0的表達式是〔DA>a&&bB>a<=bC>a||b+c&&b-cD>!<<a<b>&&!c||1>[4.5]以下程序的輸出結果是:〔CA>0B>1C>2D>3main<>{inta=2,b=-1,c=2;if<a<b>if<b<0>c=0;elsec+=1;printf<"%d\n",c>;}[4.6]以下程序的輸出結果是:〔AA>1B>2C>3D>4main<>{intw=4,x=3,y=2,z=1;printf<"%d\n",<w<x?w:z<y?z:x>>;}[4.7]若執(zhí)行以下程序時從鍵盤上輸入3和4,則輸出結果是〔BA>14B>16C>18D>20main<>{inta,b,s;scanf<"%d%d",&a,&b>;s=a;if<a<b>s=b;s*=s;printf<"%d\n",s>;}[4.9]運行以下程序后,輸出〔DA>####B>&&&&C>####&&&&D>有語法錯誤不能通過編譯main<>{intk=-3;if<k<=0>printf<"****\n">;elseprintf<"&&&&\n">;}[4.10]若a和b均是正整數(shù)型變量,以下正確的switch語句是〔AA>switch<pow<a,2>+pow<b,2>><注:調(diào)用求冪的數(shù)學函數(shù)>{case1:case3:y=a+b;break;case0:case5:y=a-b;}B>switch<a*a+b*b>;{case3:case1:y=a+b;break;case0:y=b-a;break;}C>switch<>a{default:x=a+b;case10:y=a-b;break;case11:y=a*d;break;}D>switch<a+b>{case10:x=a+b;break;case11:y=a-b;break;}二、填空題[4.11]C語言中用非0表示邏輯值"真",用0表示邏輯值"假"。[4.12]C語言中的關系運算符按優(yōu)先級別是〔!=<=_!=、<=[4.13]C語言中的邏輯運算符按優(yōu)先級別是<||&&!>[4.14]C語言中的關系運算符和邏輯運算符的優(yōu)先級別是<==&&>[4.15]C語言中邏輯運算符!的優(yōu)先級高于算術運算符。[4.16]將下列數(shù)學式改寫成C語言的關系表達式或邏輯表達式A>a=b||a<c和B>x>4||x<-4A>a=b或a<cB>|x|>4[4.17]請寫出以下程序的輸出結果1。main<>{inta=100;if<a>100>printf<"%d\n",a>100>;elseprintf<"%d\n",a<=100>;}[4.18]請寫出與以下表達式等價的表達式A>X<=0B>1A>!<x>0>B>!0[4.19]當a=1,b=2,c=3時,以下if語句執(zhí)行后,a、b、c中的值分別為3、2、2if<a>c>b=a;a=c;c=b;[4.20]若變量巳正確定義,以下語句段的輸出結果是*#x=0,y=2,z=3;switch<x>{case0:switch<y==2>{case1:printf<"*">;break;case2:printf<"%">;break;}case1:switch<z>{case1:printf<"$">;case2:printf<"*">;break;default:printf<"#">;}}三、編程題[4.21]請將以下語句改寫成switch語句。if<a<30>m=1;elseif<a<40>m=2;elseif<a<50>m=3;elseif<a<60>m=4;elsem=5;[4.22]編寫程序,輸入一位學生的生日〔年:y0、月:m0、日:d0;并輸入當前的日期〔年:y1、月:m1、日:d1;輸出該生的實足年齡。[4.23]編寫程序,輸入一個整數(shù),打印出它是奇數(shù)還是偶數(shù)。[4.24]編寫程序,輸入a、b、c三個數(shù),打印出最大者。[4.25]有一函數(shù):x<-5<x<0>y=x-1<x=0>x+1<0<x<10>編寫一程序,要求輸入x的值,輸出y的值。分別用〔1不嵌套的if語句〔2嵌套的if語句〔3if-else語句〔4switch語句第五課:循環(huán)結構5-1、5-2節(jié)、while語句一、格式:while<表達式>循環(huán)體注:1:2:3:一條while<a<3>1{a+=s;2s=a;3}1100inti=1,sum=0;while<i<101>sum=sum+i++;printf<"%d",sum>;叢1開始加到哪個數(shù)時他們的和將超過1000?inti=1,sum=0;while<sum<1000>{sum+=i;999+42=1041i++;}4243printf<"%d",--i>;5-3節(jié)、do-while語句dowhile<>格式:do循環(huán)體while<表達式>1235813do{a3=a1+a2;a1=a2;a2=a3;}while<a3<=1000>;1:12:;5-4節(jié)、for語句〔1for語句和for語句構成的循環(huán)結構一、格式:for<表達式1;表達式2;表達式3>循環(huán)體相當于while語句的表達式1;while<表達式2>{循環(huán)體;表達式3;}k=0for<;k<=10;>{printf<"*">;k++;}intk=0;while<k<10>{printf<"*">;k++;}注:1:表達式可以省略,但分號不可以。2:表達式可以是任意有效的C語言表達式第六課、字符型數(shù)據(jù)6-1節(jié)、字符型常量格式:’a’‘A’‘’要求:1,單引號中的大寫字母和小寫字母代表不同的字符常量。2.單引號中的空格也是一個字符常量,但不能是兩個連續(xù)的單引號3.字符常量只能用單引號括起來,不能用雙引號。轉義字符\n代表回車\’代表一個單引號‘\\代表一個\\"代表一個雙引號注意:轉義字符常量,如’\141’只代表一個字符反斜線后的8進制數(shù)可以不用0開頭。如1中所講的141就是一個8進制數(shù)。0141反斜線后的16進制數(shù)只可以用x開頭,不可以用X開頭。字符串常量格式:由雙引號括起來的一串字符。同時也要知道"A"和’A’是不一樣的。"A"‘A’ACSII碼A65a97‘a(chǎn)’-‘A’=326.2節(jié)、字符變量格式:chara=’s’6.3字符的輸入和輸出Printf和scanf函數(shù)輸出和輸入字符對于字符型數(shù)據(jù)的格式說明符是%cCharc=’a’;Printf<"%c",c>;Chara,b,c,d;Scanf<"%c%c%c",&a,&b,&c>;6-3節(jié)、程序舉例寫出26個大寫字母和他們的ASCII代碼要求每行輸出兩組數(shù)據(jù)。#include<stdio.h>Main<>{Charch;intI;For<i=0;i<26:i++>{Ch=i+65;If<i%2==0>Printf<"\n">;Printf<"c=%c,ASCII=%d",ch,ch>;}}在上面的程序中有對于字符的輸入與輸出,在C語言中也有另外的輸入輸出字符的語句。輸入:變量名=getchar<>輸出:putchar<變量名>函數(shù)7-1節(jié)、庫函數(shù)1.調(diào)用C語言標準庫函數(shù)時要求的include命令行Include命令行必須以#開頭,系統(tǒng)提供的頭文件以.h作為文件的后綴,文件名用一對雙引號或一對尖括號〔需要注意include命令行不是C語句,因此不能在最后加分號2.標準庫函數(shù)的調(diào)用函數(shù)名〔參數(shù)表如:putchar<ch>出現(xiàn)在表達式中的ch=getchar<>做為單獨的語句完成某種操作。printf<"********">;7.2函數(shù)的定義和返回值由于C語言中的定義的函數(shù)不能完成用戶所有的要求,所以用戶可以為自己定義函數(shù)實現(xiàn)相應的功能。函數(shù)定義的語法1:格式:函數(shù)返回值的類型名函數(shù)名〔類型名形式參數(shù)1,類型名形式參數(shù)2……{說明部分語句部分}2:函數(shù)名和形式參數(shù)都是用戶命名的標識符。在同一個程序中,函數(shù)名必須唯一,形式參數(shù)名只要在同一函數(shù)中唯一即可,可以與其他函數(shù)中的變量同名。3:C語言規(guī)定,不能在函數(shù)的部定義函數(shù)。4:若在函數(shù)的首部省略了函數(shù)返回值的類型名,則說明該函數(shù)的返回值是int類型5:除了返回值類型為int類型的函數(shù)外,函數(shù)必須先定義后調(diào)用。6:當沒有函數(shù)返回值,則必須把函數(shù)定義成void類型。例:編寫求兩個雙精度數(shù)之和的函數(shù)。
doubleadd<doublea,doubleb>{doubles;s=a+b;returns;}7-2節(jié)、函數(shù)的返回值函數(shù)的值通過return語句返回,return表達式;此表達式的值必須與函數(shù)首部所說明的類型一致,若類型不一致,則以函數(shù)值的類型為準。需要注意的是,無論函數(shù)體中有多少個return語句,只能執(zhí)行一次。函數(shù)體可以沒有return語句,這時也必須定義函數(shù)為
viod類型。7-3節(jié)、函數(shù)的調(diào)用函數(shù)的兩種調(diào)用方式格式為:函數(shù)名〔實在參數(shù)表當實參的個數(shù)多于一個時,各實參用逗號隔開。實參的個數(shù)必須與調(diào)用函數(shù)中形參的個數(shù)相周,類型一一對應匹配。如沒有形參,則形式為函數(shù)名〔注意后面的小括號不能丟。如題:#include<stdio.h>doubleadd<double,double>;main<>{doublem,n,z;scanf<"%lf%lf",m,n>;z=add<m,n>;printf<"%lf",z>;\}
doubleadd<doublea,doubleb>{doubles;s=a+b;returns;}7.3.2函數(shù)調(diào)用時的語法要求1.調(diào)用函數(shù)時,函數(shù)名必須與所調(diào)用的函數(shù)名字完全一致。2.實參的個數(shù)必須與形參的個數(shù)一致。3.C語言中規(guī)定,函數(shù)必須先定義后使用。4.C語言中,函數(shù)可以直接或間接的自己調(diào)用自己。稱為遞歸調(diào)用fac<n>=fac<n-1>*n7-4節(jié)、函數(shù)的說明在C語言中凡是未在調(diào)用前定義的函數(shù),C編譯程序都默認函數(shù)的返回值為int型。對于返回值是其它類型的,若把函數(shù)的定義放在調(diào)用之后,應該在調(diào)用之前對函數(shù)進行說明。說明的格式:類型名函數(shù)名〔參數(shù)類型1,參數(shù)類型2.。。。。也可以用以下格式類型名函數(shù)名〔參數(shù)類型1參數(shù)名1,參數(shù)類型2參數(shù)名2,……函數(shù)說明的位置:一般為了讓程序早點識別出程序中的定義好了的函數(shù),一般將其放在程序的開始部分7-5節(jié)、調(diào)用函數(shù)和被調(diào)用函數(shù)之間的數(shù)據(jù)傳遞一:三種格式進行傳遞實在參數(shù)和形式參數(shù)之間進行數(shù)據(jù)傳遞通過return語句把函數(shù)值返回調(diào)用函數(shù)能過全局變量,但這不是一種好的方式,通常不提倡使用。通過一個程序來看一下數(shù)據(jù)到底是怎樣傳遞的。#include<stdio.h>viodtry<int,int,int>;main<>{intx=2,y=3,z=0;printf<"<1>x=%dy=%dz=%d\n",x,y,z>;try<x,y,z>;printf<"<4>x=%dy=%dz=%d\n",x,y,z>;}voidtry<intx,inty,intz>{printf<"<2>x=%dy=%dz=%d\n",x,y,z>;z=x+y;x=x*x;y=y*y;printf<"<3>x=%dy=%dz=%d\n",x,y,z">;}屏幕上的結果是:x=2y=3z=0x=2y=3z=0x=4y=9z=5x=2y=3z=0再來一個程序#include<stdio.h>viodswap<int,int>;main<>{intx=10,y=20;printf<"<1>x=%dy=%d\n",x,y>;swap<x,y>;printf<"<4>x=%dy=%d\n",x,y>;}voidswap<inta,intb>{intt;printf<"<2>a=%db=%d\n",a,b>;t=a;a=b;b=t;printf<"<3>a=%db=%d\n",a,b>;}程序運行結果x=10y=20a=10b=20a=20b=10x=10y=207.6程序應用舉例編寫一個函數(shù)isprime<inta>,用來判斷自變量a是否為素數(shù)。若是素數(shù),函數(shù)返回整數(shù)1,否則返回0.#include<stdio.h>intisprime<int>main<>{intx;printf<"enteraintegernumber:">;scanf<"%d",&x>;if<isprime<x>>printf<"%disprime\n",x>;elseprintf<"%disnotprime\n",x>;}intisprime<inta>{inti;for<i=2;i<=a/2;i++>if<a%i==0>return0;return1;}編寫函數(shù)myupper<ch>,把ch中的小寫字母轉換成大寫字母作為函數(shù)值返回,其他字符不變。主函數(shù)中不斷輸入字符,用字符結束輸入,同時不斷輸出結果。#include<stdio.h>#include<ctype.h>charmyupper<charch>{if<ch>=’a’&&ch<=’z’>ch=ch-32;returnch;}main<>{charc;while<<c=getchar<>>!=’’>{c=myupper<c>;putchar<c>;}}編寫函數(shù)統(tǒng)計輸入字符的個數(shù),用字符結束輸入,在主函數(shù)中調(diào)用此函數(shù),輸出統(tǒng)計結果。#include<stdio.h>longcountch<>;main<>{longn;n=countch<>;printf<"n=%ld\n",n>;}longcountch<>{long;for<cn=0;getchar<>!=’’;cn++>;return;}7-107-13節(jié)、課后習題[7.1]以下說法中正確的是CA>C語言程序總是從第一個定義的函數(shù)開始執(zhí)行B>在C語言程序中,要調(diào)用的函數(shù)必須在main函數(shù)中定義C>C語言程序總是從main函數(shù)開始執(zhí)行D>C語言程序中的main函數(shù)必須放在程序的開始部分[7.2]以下函數(shù)的類型是CA>與參數(shù)x的類型相同B>void類型C>int類型D>無法確定fff<floatx>{printf<"%d\n",x*x>;}[7.3]以下函數(shù)調(diào)用語句中,含有的實參個數(shù)是BA>1B>2C>4D>5func<<exp1,exp2>,<exp3,exp4,exp5>>;[7.4]以下程序的輸出結果是CA>11B>20C>21D>31func<inta,intb>{intcc=a+b;returnc;}main<>{intx=6,y=7,z=8,r;r=func<<x--,y++,x+y>,z-->;printf<"%d\n",r>;}[7.5]以下程序的輸出結果是AA>-1B>0C>1D>2main<>{inti=2,p;p=f<i,i+1>;printf<"%d",p>;}intf<inta,intb>{intc;c=a;if<a>b>c=1;elseif<a==b>c=0;elsec=-1;return<c>;}[7.6]以下程序的輸出結果是DA>0B>1C>6D>無定值fun<inta,intb,intc>{c=a*b;}main<>{intc;fun<2,3,c>;printf<"%d\n",c>;}[7.7]以下程序的輸出結果是AA>5.500000B>3.000000C>4.000000D>8.25doublef<intn>{inti;doubles;s=1.0;for<i=1;i<=n;i++>s+=1.0/i;returns;}main<>{inti,m=3;floata=0.0;for<i=0;i<m;i++>a+=f<i>;printf<"%f\n",a>L;}二、填空題[7.8]以下程序的輸出結果是____12____.unsignedfun6<unsignednum>{unsignedk=1;do{k*=num%10;num/=10;}while<num>;returnk;}main<>{unsignedn=26;printf<"%d\n",fun6<n>;}[7.9]以下程序的輸出結果是___9.0_____.doublesub<doublex,doubley,doublez>{y-=1.0;z=z+x;returnz;}main<>{doublea=2.5,b=9.0;printf<"%f\n",sub<b-a,a,a>>;}[7.10]以下程序的輸出結果是___4_____.fun1<inta,intb>{intc;a+=a;b+=b;c=fun2<a,b>;returnc*c;}fun2<inta,intb>{intc;c=〔a*b%3;returnc;}main<>{intx=11,y=19;printf<"%d\n",fun1<x,y>>;}[7.11]下面pi函數(shù)的功能是,根據(jù)以下公式返回滿足精度要求的的值.請?zhí)羁?pi/2=1+1/3+1/3*2/5+1/3*2/5*3/7+1/3*2/5*3/7*4/9+...doublepi<doubleeps>{doubles=0.0,t=1.0;intn;for<__n=1__;t>eps;n++>{s+=t;t=n*t/<2*n+1>;}return<2.0*__S___>;}[7.12]以下函數(shù)用以求x的y次方.請?zhí)羁?doublefun<doublex,inty>{inti;doublez=1;for<i=1;i___<=y__;i++>z=___z*x__;returnz;}n[7.13]以下程序的功能是計算S=SK!.請?zhí)羁?longf<intn>K=1{inti;longs;s=__1___;for<i=1;i<=n;i++>s=__s*i___;returns;}main<>{longs;intk,n;scanf<"%d",&n>;s=__0___;for<k=0;k<=n;k++>s=s+___f<k>__;printf<"%ld\n",s>;}三、程序調(diào)試和編程題[7.14]以下fun函數(shù)用以判斷n是否是素數(shù),fun函數(shù)中有邏輯錯,請調(diào)試改正.fun<intn>{intk,yes;for<k=2;k<=n/2;k++>if<n%k==0>returnyes=0;yes=1;returnyes;}:指針變量8.1變量的地址和指針:在最開始的時候,一直給大家強調(diào)變量要先定義,后使用。為什么會這個樣子?這是因為,每當我們使用一個變量系統(tǒng)就必須要給他開辟一個存儲單元。系統(tǒng)要對它的值進行記錄。每時每刻的記錄。怎樣進行記錄呢?系統(tǒng)會自動的開辟一個地方將該變量監(jiān)督起來,觀察和記錄它的變化。這個地方多大放什么東西?這都要求我們提前和系統(tǒng)說好。所以就有了變量要先定義在使用說法。其實變量定義的過程就是給他開辟存儲空間的過程。那么存儲空間又是什么東西呢??計算機種有一個硬件叫存條,當我們提起這個硬件的時候往往都會說多大的。1G,2G,4G……這都是在說他的空間大小。計算機中的存是以字節(jié)為單位的一片連續(xù)的存儲空間,每一個字節(jié)都有一個編號,這個編號就稱為存地址。如同旅館的房間一樣,單人間,雙人間等等,每個房間都有自己的編號。存中的空間是連續(xù)的,地址號也是連續(xù)的,并且都是用二進制數(shù)來表示的。變量在定義的時候先要說明定義的類型。如:intk;doubleb;charch;等等如此的定義。這樣是在和電腦系統(tǒng)打招呼,我們是2人要一個兩人間。目的就是告訴老板你的房間要是兩個人的空間。不能定的是2人間,結果來了3個人?。煌瑫r也不能定的2人間,結果就你自己來了〔對自己來說多花錢了。綜上所述:變量的定義就是給變量開辟存儲空間的過程。intafloatbaaabbbb101210131014101510161017這就是變量定義的時候系統(tǒng)給隨機開辟的地址空間。在結合我們在一開始講的不同類型的變量的大小,其實就是在說變量所占的存單元的多少。1012就是整型變量a的首地址,1014就是浮點型變量b的首地址。當要用到一個變量時,系統(tǒng)就會迅速的找到這個變量。所以在C程序中還有這樣的一個變量的存在,就是指針。指針就是用來存放一個變量在存中的地址,當要調(diào)用這個變量的時候能迅速的找到。用來存放一個變量地址的變量就叫指針變量。同時大家也要走出一個誤區(qū)就是:指針變量之所以叫變量,就是因為它里面所存放的變量的地址也不斷的變化的。指針是可以移到的。8.2指針變量的定義和指針變量的基類型一:格式:類型名*指針變量名1,*指針變量名2….如int*pi,*pj;與之前不一樣的地方就是在變量的前面加了一個*。*是一個說明符,用來說明該變量是指針變量。*號省略的話就和普通的變量一樣了。又如:int*pi;char*ch;inta;charc;指針的作用都是一樣的,都是用來存放地址的,為什么還要分類型的。原因就是指針變量pi只能存放整型變量的地址,指針變量ch只能存放字符變量的地址。如何讓一個指針存放一個變量的地址呢?pi=&a;ch=&c;&叫取址符。*叫指針運算符。能過以上的講解在家一定對指針有了更進一步和了解。我們共同的回顧一下;變量的定義就是給其開辟存儲單元的過程。任何一個變量都有自己的存儲地址。指針就是用來存放變量地址的。指針也是一個變量。指針也要一個地址。那,有沒有能存放指針變量地址的一個對象呢?用該怎么稱呼?有它是專門用來存放指針的地址的。它就是指向指針的指針。int**p,*s;p=&s;**p就是一個指向指針的指針。它里面只能存放同種數(shù)據(jù)類型的指針的地址。給指針變量賦地址值一個指針變量可以通過不同的方式獲得一個確定的地址值,從而指向一個具體的對象。〔在以后的課程中,每當一個指針中存放了一個變量的地址的時候,我們就說這個指針指向了這個變量。intk=1,*q,*p;q=&k;11qk這時可以說:q指向了變量k;q=&k+1q=&<k+1>這是錯誤的,指針q就是用來存放地址的,前兩個例子不是。同時:&必須放在運算對象的左邊,而且運算對象的類型必須與指針變量的基類型相同。2,通過指針變量獲得地址值可以通過賦值運算,把一個指針變量中的地址值賦給另一個指針變量,從而使這兩個指針指向同一地址。
intk,*p,*q;q=&k;p=q;也就是說指針變量p和q都指向了變量k.注:當進行賦值運算時,賦值號兩邊指針變量的基類型必須相同。3.給指針變量賦"空"值;"空":null的代碼值為0,當執(zhí)行了以上和賦值語句后,稱P為空指針。null的代碼值為0.p=’\0’p=0;注意:p并不是指向地址為0的存儲單元,而是一個有確定的值"空"。8.4對指針變量的操作C語言提供了一個稱作"間接訪問運算符"的單目運算符:"*"當指針變量中存放了一個確切的地址值是,就可以用"間接運算預算符"通過指針來引用該地址的存儲單元。int*p,i=10,j;p=&i;則這樣的賦值語句j=*p;上面的這個賦值語句我們可以這樣理解:j變量的值是由指針指向的空間中的值賦予的。這里的*p代表指針p中存放的變量i的地址中的值。*不是乘而是用來說明指針的說明符。j=i~~~~~~~j=*<&i>如果有這樣的表達式代表:j=*p+1代表指針p指向的空間中中的值加1后的值給了變量j;再如int*p,k=0;p=&k;*p=100;*p+=1;注意:當*p出現(xiàn)在賦值號左邊時,代表的是指針所指的存儲單元,當出*p出現(xiàn)在賦值號右邊時,代表的是指針所指的存儲單元的容。如果有:*p+=1++*p<*p>++這三個表達式有什么不一樣嗎?++和*兩個運算符的優(yōu)先級相同。但按自右至左的方向結合。因此++*p相當于++〔*p。而在〔*p++中,一對括號不可以少,〔*p++代表先取里面的值然后再加1。而如果去掉怎成了*p++,根據(jù)順序,先++然后再取值。這樣就成了先p++再取值。而P++就是指針先向后移動。例8,1用指針指向兩個變量,通過指針運算選出值小的那個數(shù)。#include<stdio.h>main<>{inta,b,min,*pa,*pb,*pmin;pa=&a;pb=&b;pmin=&min;scanf<"%d%d",pa,pb>;printf<"a=%d,b=%d\n",a,b>;*pmin=*pa;if<*pa>*pb>*pmin=*pb;printf<"min=%d\n",min>;}8.4移動指針所謂移動指針就是對指針變量加上減去一個整數(shù),或通過賦值運算,使指針變量指向相鄰的存儲單元?!惨虼酥挥挟斨羔樦赶蛞淮B續(xù)的存儲單元時,指針的移動才有意義1122334455a[0]a[1]a[2]a[3]a[4]Pqp=&a[0]q=p+2q++q++q--p++對指針進行加減運算時,數(shù)字"1"不再代表十進制數(shù)1,而是指一個單位存儲單元長度。這個單元到底多長,要看存儲數(shù)據(jù)的類型了。如果是int則代表1個存儲單元長度就是位移4個字節(jié)。如果是char類型則代表1個存儲單元長度就是位移1個字節(jié)。如果變量的類型是double,8個字節(jié)為一個單位,而指向它的指針是int,4個字節(jié)為一個單位。那么這個時候指針每移動一個單位就代表移動4個字節(jié)的長度,這個時候讀取數(shù)據(jù)的時候就會出錯。8.5函數(shù)之間地址值的傳遞▲形參為指針變量時參數(shù)和形參之間的數(shù)據(jù)傳遞若函數(shù)的形參為指針類型,調(diào)用該函數(shù)時,對應的實參必須是基類型相同的地址值或者是已指向某個存儲單元的指針變量。例題:編寫函數(shù)myadd〔int*a,int*b,函數(shù)中把指針a和b所指的存儲單元中的兩個值相加,然后將和值作為函數(shù)值返回。在主函數(shù)中輸入兩個數(shù)給變量,把變量地址做為實參,傳給對應的形參。#include<stdio.h>intmyadd<int*a,int*b>{intsum;sum=*a+*b;returnsum;}main<>{intx,y,z;int*p,*q;p=&x,q=&y;printf<"enterx,y:">;scanf<"%d%d",&x,&y>;z=myadd<*p,*q>;printf<"%d+%d=%d",x,y,z>;}通過傳送地址值在被調(diào)用函數(shù)中直接改變調(diào)用函數(shù)中的變量的值之前我們已經(jīng)知道形參值的改變并不能改變對應實參的值,把數(shù)據(jù)從被調(diào)用函數(shù)返回到調(diào)用函數(shù)的唯一途徑是通過return語句返回函數(shù)值。例題:調(diào)用swap函數(shù),交換主函數(shù)中變量x和y中的數(shù)據(jù)#include<stdio.h>voidswap<int*,int*>main<>{intx=30,y=20;printf<"<1>x=%dy=%d\n",x,y>;swap<&x,&y>;printf<"<4>x=%dy=%d\n",x,y>;}voidswap<int*a,int*b>{intt;printf<"<2>a=%db=%d\n",*a,*b>;t=*a;*a=*b;*b=t;printf<"<3>a=%db=%d\n",*a,*b>;}例題:編寫函數(shù)order〔int*a,int*b,使用函數(shù)中的第一個實參總是存放兩個數(shù)中較小的數(shù),第二個參數(shù)存放兩個數(shù)中較大的數(shù)#include<stdio.h>voidswap<int*x1,int*x2>{intt;t=*x1;*x1=*x2;*x2=t;}voidorder<int*a,int*b>{if<*a>*b>swap<a,b>;}main<>{intx,y;printf<"輸入x,y:">;scanf<"%d%d",&x,&y>;printf<"x=%dy=%d\n",x,y>;order<&x,&y>;printf<"x=%dy=%d\n",x,y>;}8.5函數(shù)返回地址值函數(shù)值的類型不僅可以是簡單的數(shù)據(jù)類型,而且可以是指針類型例:以下函數(shù)把主函數(shù)中變量i和j中存放較大數(shù)的那個地址作為函數(shù)值傳回。數(shù)組之前我們只學過單個變量的定義,而有的時候就需要一片連續(xù)的存儲單元。單個單個的定義第一,分配的存空間不一定連續(xù),這樣指針就不能移動了。第二,單個單個的定義會費時費力。所以這個時候就需要一個東西來滿足用用戶這樣一個需求。數(shù)組就在這樣的條件下產(chǎn)生了。數(shù)組:多個相同類型的變量被存儲在一片連續(xù)的存儲單元中。9.1一維數(shù)組的定義和一維數(shù)組元素的引用★一維數(shù)組的定義:當數(shù)組中每個元素只帶有一個下標時,稱這樣的數(shù)組為一維數(shù)組。格式:類型名數(shù)組名[整型常量表達式]如inta[10]說明:定義了一個名為a的一維數(shù)組方括號中的10規(guī)定了a數(shù)組含有10個元素,它們是〔a[0].a[1].a[2].a[3].a[4].a[5].a[6].a[7].a[8].a[9]類型名int規(guī)定了a數(shù)組中每個元素都是整型,在每個元素中只能存放整形數(shù)。每個元素只有一個下標,C語言規(guī)定每個數(shù)組第一個元素的下標總為0〔稱為數(shù)組下界,那么最后一個9〔稱為數(shù)組的下標為上界在存中給數(shù)組中每個成員開辟了一個存儲單元??傆嫶笮。?0*4=40字節(jié)。這樣每當調(diào)用數(shù)組中的一個成員時就用它們的下標。如a[*]注:當同時定義多個數(shù)組時彼此之間用,號隔開如doublew[22],v[100],u[5];以上定義了三個數(shù)組。需要注意的是,[]中的容只能是整型常量或整型常量表達式。如inta[11+22]也可以。一維數(shù)組元素的引用格式:數(shù)組[下標表達式]其實x[0],x[j],x[i+k]都是對數(shù)組中元素的合法引用形式。但是需要注意的是下標表達式的值必須大于或等于0,并且小于數(shù)組上界的數(shù)。能過上面知識講解,大家應該建立以下概念:1:一個數(shù)組元素實質上就是一個變量名,代表存中一個存儲單元。一個數(shù)組占有一串連續(xù)的存儲單元。2:在C語言中一個數(shù)組不能整體引用。不能說用一個數(shù)組名就代表整個數(shù)組了。這是錯誤的。因為在C語言中規(guī)定數(shù)組名是一個地址常量,它代表整個數(shù)組的首地址。int*p;inta[10]p=a<p=&a[0]>a==&a[0]a=103:數(shù)組元素中下標表達式的值必須是整數(shù)。在編寫程序時保證數(shù)組下標不越界是十分重要的。a[2.5]a[10]=123一維數(shù)組的初始化一維數(shù)組的始化,其實就是給數(shù)組元素賦值。格式:inta[8]={0,1,2,4,5,6,7}所賦的值放在等號后的一對花括號中,數(shù)值類型必須必須與所說明的類型一致,所賦值之間用逗號隔開。系統(tǒng)會按賦值順序來自動分配。當花括號中的值少于數(shù)組元素個數(shù)時,將自動給數(shù)組后面元素賦值0.如inta[10]={1}這個時候除了a[0]=1外,其它的都是0;對于字符數(shù)組也是一樣;chara[10]={‘!’}不夠的也會賦值‘\0’通過賦初值定義數(shù)組的大小C語言中規(guī)定,可以通過賦初值來定義數(shù)組的大小,這時數(shù)組說明符的一對方括號中可以不指定數(shù)組的大小。如inta[]={1,1,1,1,1,1,1,1,1,1}這樣相當于數(shù)組中有了10個元素例題:編寫一個程序,通過鍵盤給數(shù)組a中的10個成員賦初值。#include<stdio.h>main<>{inta[10];inti,*p;p=a;for<i=0;i<10;i++>{scanf<"%d",p>;printf<"a[i]=%d",*p>;}}編寫一個程序定義一個含有30個成員的數(shù)組。并給其賦值,要求從1這樣的奇數(shù)開始。當賦值完畢后,按每行10個輸出。include<stdio.h>#definem30main<>{inta[m];inti,k=1;for<i=0;i<m;i++>{a[i]=k;k+=2;}for<i=0;i<m;i++>{
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 運營中心崗責制度
- 機器學習模型調(diào)優(yōu)策略梳理與應用要點
- 數(shù)學知識搶答競賽
- 跨部門項目制打分制度
- 財務審批審核制度
- 2026年及未來5年市場數(shù)據(jù)中國證券投資基金行業(yè)市場全景評估及投資前景展望報告
- 藥理學入門:烏孜別克藥藥理學基礎課件
- 董事責任制度
- 2025年大東社區(qū)筆試真題及答案
- 2025年湖南事業(yè)單位保育員考試及答案
- DB32/ 4440-2022城鎮(zhèn)污水處理廠污染物排放標準
- 文第19課《井岡翠竹》教學設計+2024-2025學年統(tǒng)編版語文七年級下冊
- 干部教育培訓行業(yè)跨境出海戰(zhàn)略研究報告
- 車庫使用協(xié)議合同
- 組件設計文檔-MBOM構型管理
- 《不在網(wǎng)絡中迷失》課件
- 山東省泰安市2024-2025學年高一物理下學期期末考試試題含解析
- 竹子產(chǎn)業(yè)發(fā)展策略
- 【可行性報告】2023年硫精砂項目可行性研究分析報告
- 2024-2025年上海中考英語真題及答案解析
- 2023年內(nèi)蒙古呼倫貝爾市海拉爾區(qū)公開招聘公辦幼兒園控制數(shù)人員80名高頻筆試、歷年難易點考題(共500題含答案解析)模擬試卷
評論
0/150
提交評論