C語言期末考試復習資料完整版_第1頁
C語言期末考試復習資料完整版_第2頁
C語言期末考試復習資料完整版_第3頁
C語言期末考試復習資料完整版_第4頁
C語言期末考試復習資料完整版_第5頁
已閱讀5頁,還剩113頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

考試的主要題型和分數分布:1單項選擇題(10小題,每題2分,共20分)2填空題(每空1分,共10分)3閱讀程序(每題2分,共10分)4程序填空(每空2分,共40分)5編寫程序(2小題,每題10分,共20分)第一章

第1章C語言概述本章包含4項目重點內容:1簡單的C語言程序#include<stdio.h>voidmain(){printf("ThisisaCprogram.\n");}

2VC++6.0環境:編輯C語言源程序后綴是.c或.cpp經過編譯產生目標文件,后綴是.obj再經過連接成為可執行文件,后綴是.exe3C語言是結構化程序,有三種結構(1)順序結構;(2)選擇結構;(3)循環結構;4C語言是由函數組成的,其中必須有一個并且只有一個主函數main,程序的執行從main函數開始,到main函數結束.第二章

C的數據類型C語言提供了以下一些數據類型。

數據類型構造類型指針類型空類型(無值類型)void枚舉類型enum數組類型結構類型struct聯合類型union基本類型整型int字符型char實型(浮點型)單精度實型float雙精度實型

double

常量與變量

常量和符號常量在程序運行過程中,其值不能被改變的量稱為常量常量區分為不同的類型:整型100,125,-100,0實型3.14,0.125,-3.1e3字符型‘a’,’\057’,‘\x3c’字符串“a”,“ab”,”1232”定義字符常量:#definePI3.1415926#defineN20

變量命名的規定:C語言規定標識符:1只能由字母、數字和下劃線三種字符組成;(注意不要混淆下劃線_和杠號(減號)-)2第一個字符必須為字母或下劃線;3不能使用關鍵字.

例:sum,_123,m123,Student_name1

12a,Jo-hn,¥123,a#b,int

整型常量的表示方法整型常量即整常數。在C語言中,整常數可用以下三種形式表示:(1)十進制整數。

如:123,-456(2)八進制整數。以0開頭的數是八進制數。

如:0123表示八進制數123,等于十進制數830129非法(每位0-7合法)(3)十六進制整數。以0x開頭的數是16進制數。如:0x123,代表16進制數123,等于十進制數291而0x12g非法(每位0-f合法)

字符型數據

字符常量(1)用單引號包含的單個字符(2)用單引號包含的由\開始的轉義字符例‘a’,’A’,‘1’,’\037’,’\x2d’‘abc’,“a”,’\082’,’\x5g’

字符串常量字符串常量是一對雙引號括起來的字符序列.合法的字符串常量:“Howdoyoudo.”,“CHINA”,“a”,“$123.45”可以輸出一個字符串,如printf(“Howdoyoudo.”);C運算符簡介

C的運算符有以下幾類:(1)算術運算符(+-*/%)(2)關系運算符(><==>=<=!=)(3)邏輯運算符(!&&||)(4)位運算符(<<>>~|∧&)(5)賦值運算符(=及其擴展賦值運算符)(6)條件運算符(?:)算術運算符和算術表達式基本的算術運算符:+(加法運算符或正值運算符如:3+5、+3)-(減法運算符或負值運算符,如:5-2、-3)*(乘法運算符。如:3*5)/(除法運算符,實數相除結果是雙精度實數,整數相除結果是整數;兩數同號結果是正數,兩數異號結果是負數,且舍入得方向不固定,Vc++是“向0取整)%(求余運算符,%兩側必須為整型數據,結果與被除數一致。)

自增、自減運算符作用是使變量的值增1或減1如:++i,--i(在使用i之前,使i+1或-1)

i++,i--(在使用i之后,使i+1或-1)

就是使用i的原值執行本條語句,而在執行下條語句前將i+1或-1

intm=5,n=10;printf("%d,%d\n",m++,--n);顯示5,9若再有:printf(“%d\n”,m);顯示6賦值運算符

賦值符號“=”就是賦值運算符,它的作用是將一個數據賦給一個變量,如a=5;(單等號)而a==5是判斷a是否等于5;(雙等號)如inta=3;if(a==2)為假,而if(a=5)為真。第三章

C語句概述C程序源程序文件1源程序文件2源程序文件n預處理命令函數n函數1數據聲明函數首部函數體數據聲明執行語句

C語句概述控制語句完成一定的控制功能 1if()~else條件語句6break間斷語句 2for()~循環語句7switch()開關語句 3while()~循環語句8goto轉向語句 4do~while();循環語句9return返回語句 5continue繼續語句格式輸入與輸出(一).格式輸出函數函數作用:向終端(或系統隱含指定的輸出設備)輸出若干個任意類型的數據。一般格式:printf(格式控制,輸出表列)%d:以帶符號的十進制形式輸出整數%o:以八進制無符號形式輸出整數%x:以十六進制無符號形式輸出整數

格式輸入與輸出%u:以無符號十進制形式輸出整數%c:以字符形式輸出,只輸出一個字符%s:輸出字符串%f:以小數形式輸出單,雙精度數,隱含輸出六位小數%e:以指數形式輸出實數%g:選用%f或%e格式中輸出寬度較短的一種格式,不輸出無意義的0

格式輸入與輸出用printf和scanf函數輸出和輸入數據。

#include<stdio.h>

intmain()

{

inta,b,c;

scanf(“%d,%d,%d”,&a,&b,&c);

printf(“%d,%d,%d\n”,a,b,c);

}

運行情況:

3,4,5(輸入a,b,c的值)

3,4,5(輸出a,b,c的值)表示a在內存中的地址其中,&是地址運算符

在格式輸入與輸出中

格式控制是用雙引號包括的,其中一般帶有%d,%c,%f,%s等各種對數據類型的要求.第四章

關系運算符和關系表達式1.關系運算符及其優先次序<(小于)<=(小于或等于)>(大于)>=(大于或等于)==(等于)!=(不等于)優先級相同(高)優先級相同(低)說明:關系運算符的優先級低于算術運算符關系運算符的優先級高于賦值運算符

關系運算符和關系表達式2.關系表達式用關系運算符將兩個表達式(可以是算術表達式或關系表達式,邏輯表達式,賦值表達式,字符表達式)接起來的式子,稱關系表達式例:a>b,a+b>b+c,(a=3)>(b=5),’a’<‘b’,(a>b)>(b<c)關系表達式的值是一個邏輯值,即“真”或“假”。例:關系表達式”a>b”的值為“真”,表達式的值為1。C語言中沒有專用的邏輯值,1代表真,0代表假

邏輯運算符和邏輯表達式1.邏輯運算符及其優先次序(1)&&(邏輯與)(2)||(邏輯或)(3)!(邏輯非)

優先次序:邏輯非!算術運算符關系運算符邏輯與或賦值運算符

或運算中有1,值為1,與運算中有0,值為0if語句2.If語句的嵌套在if語句中又包含一個或多個if語句稱為if語句的嵌套。形式:if()

if()語句1 else語句2else

if()語句3 else語句4內嵌ifif語句如inta=3,b=4,c=5;if(a<b)a=b;b=c;c=a;if(a>b)a=b;b=c;c=a;第1個,因為a<b,所以a=b;b=c;c=a;都執行,第2個,因為a不大于b,所以不執行a=b;只執行b=c;c=a;

則a,b,c是4,5,4則a,b,c是3,5,3條件運算符格式:表達式1?表達式2∶表達式3功能:判斷表達式1的值,如果成立就執行表達式2,否則就執行表達式3max=(a>b)?a:b;min=(a<b)?a:b;if語句例:輸入一個字符,判別它是否大寫字母,如果是,將它轉換成小寫字母;如果不是,不轉換。然后輸出最后得到的字符。

#include<stdio.h>

voidmain()

{charch;

scanf(“%c”,&ch);

ch=(‘A’<=ch&&ch<=‘Z’)(ch+32):ch;

printf(“%c\n”,ch);

}

//注意:不能用‘A’<=ch<=‘Z’,它永遠為真如果字符變量ch的值為大寫字母,則條件表達式的值為(ch+32),即相應的小寫字母。如果ch的值不是大寫字母,則條件表達式的值為ch,即不進行轉換。

幾個典型的判斷:判斷大寫字母:if(‘A’<=c&&c<=‘Z’)判斷小寫字母:if(‘a’<=c&&c<=‘z’)判斷數字:if(‘0’<=c&&c<=‘9’)判斷閏年:if((year%4==0&&year%100!=0)||year%400==0)注意:例如在判斷數字中:if(‘0’<=c&&c<=‘9’)不可以沒有&&,也不能沒有’’即不能用if(‘0’<=c<=‘9’)也不能用if(0<=c&&c<=9)但可以用if(48<=c&&c<=57)(想想為什么?)用switch語句實現(若a是整數)按照考試成績輸出等級百分制分數段

switch((a/10)){case10: case9:grade='A';break; case8:grade='B';break; case7:grade='C';break; case6:grade='D';break; default:grade='E'; }第五章

用while語句實現循環while語句用來實現“當型”循環結構。一般形式:

while(表達式)語句當表達式為非0值時,執行while語句中的內嵌語句。其特點是:先判斷表達式,后執行語句。

求正整數m和n的最大公約數和最小公倍數:

#include<stdio.h>

voidmain()

{

intp,r,n,m;

printf("請輸入兩個正整數n,m:");

scanf("%d,%d,",&n,&m);

p=n*m;

while(m!=0)

{r=n%m;n=m;m=r;}

printf("它們的最大公約數為:%d\n",n);printf("它們的最小公倍數為:%d\n",p/n);}其中用下面的輾轉相除法求出最大公約數nwhile(m!=0){r=n%m;n=m;m=r;}把它獨立出來就是一個函數inthcf(intm,intn){intr;while(m!=0)

{r=n%m;n=m;m=r;}return(n);}用p/n得到最小公倍數

用do-while語句實現循環

do-while語句的特點:先執行循環體,然后判斷循環條件是否成立。一般形式:

do{循環體語句}while(表達式);執行過程:先執行一次指定的循環體語句,然后判別表達式,當表達式的值為非零(“真”)時,返回重新執行循環體語句,如此反復,直到表達式的值等于0為止,此時循環結束。例如:為了保證輸入成績的正確,可以使用語句:printf("請輸入學生成績a(0-100):");scanf("%d",&a);while(a<0||a>100){printf("\n輸入有誤,請重輸:");scanf("%d",&a);}

我們更簡潔地用do-while語句do

{printf(“請輸入成績a(0-100):”);scanf(“%d”,&a);}while(a<0||a>100);

注意while(a<0||a>100);的含義和;號

用do-while語句計算10!i=1;s=1;do{s=s*i;i++;}while(i<=10);不是:i=1;s=0;do{s=s*i;i++;}while(i<=10);也不是:do{i=1;s=1;s=s*i;i++;}while(i<=10);do{i=1;s=0;s=s*i;i++;}while(i<=10);while語句和用do-while語句的比較:while是先判斷條件,再決定是否執行,所以可能一次也不執行;do-while是先執行再判斷條件,決定是否還執行,所以至少執行一次.

用for語句實現循環C語言中的for語句使用最為靈活,不僅可以用于循環次數已經確定的情況,而且可以用于循環次數不確定而只給出循環結束條件的情況,它完全可以代替while語句。一般形式:

for(表達式1;表達式2;表達式3)語句注意:for中用兩個分號隔開,不能省略;for只對其后第一個語句有效,如果要求對多條語句有效,必須用花括號括之成為復合語;for()后通常沒有分號,有分號將不執行任何語句,只執行自己的循環;

下面是用for語句顯示數組a中的最小值的程序#include<stdio.h>voidmain(){inta[5]={4,2,8,9,5},i,min;min=a[0];for(i=1;i<5;i++)if(min>a[i])min=a[i];printf("%d\n",min);}

break語句和continue語句

break語句break語句可以用來從循環體內跳出循環體,即提前結束循環.一般形式:

break;注意:break語句只能用于循環語句或switch語句中。

continue語句作用為結束本次循環,即跳過循環體中下面尚未執行的語句,接著進行下一次循環的判定.一般形式:

continue;例把100~200之間的不能被3整除的數輸出。

#include<stdio.h>

voidmain()

{intn;

for(n=100;n<=200;n++)

{if(n%3==0)continue;

printf(″%d″,n);

}

}

注意是把能被3整除的跳過.不能用n%3!=0判斷m是否素數。

#include<stdio.h>

#include<math.h>

voidmain()

{intm,i,k;

scanf(″%d″,&m);

k=sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0)break;

if(i>k)printf("%disaprimenumber\n″,m);

elseprintf("%disnotaprimenumber\n″,m);

}

也可以是:

#include<stdio.h>

#include<math.h>

voidmain()

{intm,I,k,flag=1;

scanf(″%d″,&m);

k=sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0){flag=0;break;}

if(flag)printf("%disaprimenumber\n″,m);

elseprintf("%disnotaprimenumber\n″,m);

}第六章

一維數組

所謂數組就是一組具有相同數據類型的數據的有序集合。一維數組的定義格式為:例如:inta[10];或者是:#defineN10;inta[N];

(方括號中必須是常數)注意:1此數組有10個元素.分別是a[0]-a[9]

注意:從0開始編號,沒有數組元素a[10]2元素個數必須是常量.所以不可以:intn=10,a[n];//這里n是變量不可以用圓括號:inta(n);也不可是:intn,a[n];scanf(“%d”,&n);

字符數組的定義例如:charc[10]={‘I’,'‘,’a’,’m’,’‘,’h’,’a’,’p’,’p’,’y’};c[0]=′I′;c[1]=′′;c[2]=′a′;c[3]=′m′;c[4]=′′;c[5]=′h′;c[6]=′a′;c[7]=′p′;c[8]=′p′;c[9]=′y′;對字符串初始化,最好的方法是:例如:Charc[]=“Iamaboy”;

字符串的初始化字符串和字符串結束標志

為了測定字符串的實際長度,C語言規定了一個“字符串結束標志”——‘\0’。字符數組的輸入輸出

字符數組的輸入輸出可以有兩種方法:逐個字符輸入輸出。用格式符“%c”輸入或輸出一個字符。將整個字符串一次輸入或輸出。用“%s”格式符,意思是對字符串的輸入輸出。

如果利用一個scanf函數輸入給多個字符串,則在輸入時以空格分隔。例如:charstrl[5],str2[5],str3[5];scanf(″%s%s%s″,str1,str2,str3);輸入數據:Howareyou數組中未被賦值的元素的值自動置′\0′。1.puts函數其一般形式為:puts(str);

字符串處理函數

2.gets函數其一般形式為:gets(str);說明:用scanf(“%s”,str);只能輸入單詞(不包含空格),

而gets(str);可以輸入句子(即可以包含空格);

注意不是gets(“%s”,str);

也不是gets(&str);

3.strcat函數其一般形式為:strcat(字符數組1,字符數組2)Strcat的作用是連接兩個字符數組中的字符串,把字符串2接到字符串1的后面4.strcpy函數其一般形式為:strcpy(字符數組1,字符串2)

strcpy是“字符串復制函數”。作用是將字符串2復制到字符數組1中去。例如:charstr1[10],str2[]={″China″};strcpy(str1,str2);

關于strcpy函數的幾點說明(1)字符數組1必須定義得足夠大,以便容納被復制的字符串。字符數組1的長度不應小于字符串2的長度。(2)“字符數組1”必須寫成數組名形式(如str1),“字符串2”可以是字符數組名,也可以是一個字符串常量。如strcpy(str1,″China″);(3)復制時連同字符串后面的′\0′一起復制到字符數組1中。(4)不能用賦值語句將一個字符串常量或字符數組直接給一個字符數組。如:

str1=″China″;不合法str1=str2;不合法用strcpy函數只能將一個字符串復制到另一個字符數組中去。用賦值語句只能將一個字符賦給一個字符型變量5.strcmp函數其一般形式為:strcmp(字符串1,字符串2)例如:strcmp(str1,str2);strcmp(″China″,″Korea″);strcmp(str1,″Beijing″);比較的結果由函數值返回(1)如果字符串1=字符串2,函數值為0。(2)如果字符串1>字符串2,函數值為1。(3)如果字符串1<字符串2,函數值為-1。注意:判斷str1是否大于str2,不能用以下式:if(str1>str2)只能用if(strcmp(str1,str2)>0)6.strlen函數其一般形式為:strlen(字符數組)strlen是測試字符串長度的函數。函數的值為字符串中的實際長度(不包括′\0′在內)。例如:charstr[10]={″China″};printf(″%d″,strlen(str));輸出結果不是10,也不是6,而是5,即有效字符數.strlwr(字符串)

strlwr函數7.strlwr函數其一般形式為:的作用是將字符串中大寫字母換成小寫字母。8.strupr函數其一般形式為:strupr(字符串)strupr函數的作用是將字符串中小寫字母換成大寫字母。

使用字符串函數時,必須包括字符串函數庫:#include<string.h>我們可以不使用字符串函數編寫程序:例如:不使用strcat連接兩個字符串;不使用strcpy拷貝字符串;不使用strcmp比較字符串;不使用strcpy拷貝字符串:1用數組:For(i=0;i<=strlen(s2);i++)S1[i]=s2[i];2用指針:p1=s1;p2=s2;while(*p1++=*p2++);尋找字符串尾:while(s1[i])i++;i就是字符串尾的下標,再拷貝就是連接。第七章

簡單的C語言函數#include<stdio.h>

/*文件包含*/void

main()

/*主函數*/{/*函數體開始*/

printf(“ThisisaCprogram.\n”);/*函數體語句*/}

/*函數體結束*/

說明:main是主函數名,void是函數類型每個C程序是由若干函數組成的,其中必有一個并且只能有一個主函數main()每個C程序從main函數開始執行,到main函數結束,即執行的是主函數的函數體,與主函數main在程序中的位置無關;{}是函數開始和結束的標志,不可省略;每個C語句以分號結束;在主函數中直接或間接調用其他函數;使用標準輸入出庫函數時應寫:#include<stdio.h>使用數學庫函數和字符串函數時應寫:#include<math.h>#include<string.h>

一個函數由兩部分組成:

函數的首部:例1.3中的max函數首部intmax(intx,inty)

函數體:花括號內的部分。若一個函數有多個花括號,則最外層的一對花括號為函數體的范圍。函數定義的一般形式

類型標識符函數名(形式參數表列){

聲明部分

語句部分}其中類型標識符是函數返回值的數據類型,如:int,charfloat,double等,也可以是無返回值,寫為void.也可以沒有形式參數表列,稱為無參函數.例如:intmax(intx,inty){intz;/*函數體中聲明部分*/z=x>y?x∶y;/*函數體中語句部分*/return(z);/*返回值*/}

函數參數和函數的值形式參數和實際參數

形式參數:函數名后面括弧中的變量名稱為“形式參數”(簡稱“形參”);實際參數:主調函數中調用一個函數時,函數名后面括弧中的參數(可以是一個表達式)稱為“實際參數”(簡稱“實參”);函數返回值:return后面的括弧中的值作為函數帶回的值(稱函數返回值)。說明:

1.函數的返回值是通過函數中的return語句獲得的。一個函數中可以有一個以上的return語句,執行到哪一個return語句,哪一個語句起作用。函數的調用

對被調用函數的聲明和函數原型在一個函數中調用另一函數(即被調用函數)需要具備哪些條件呢?1.首先被調用的函數必須是已經存在的函數(是庫函數或用戶自己定義的函數)。3.如果使用用戶自己定義的函數,而該函數的位置在調用它的函數(即主調函數)的后面,應該在主調函數中對被調用的函數作聲明,即寫上函數的原型。用函數首部加上;號表示函數聲明.2.如果使用庫函數,還應該在本文件開頭用#include命令將調用有關庫函數時所需用到的信息“包含”到本文件中來。如#include<stdio.h>#include<math.h>#include<string.h>函數調用的實例(求兩整數的最大公約數):#include<stdio.h>voidmain(){inthcf(intu,intv);//函數聲明intu,v,h;scanf("%d,%d",&u,&v);h=hcf(u,v);printf("%d,%d的最大公約數是:%d\n",u,v,h);}//函數定義inthcf(intu,intv)//函數首部{intr;while(v!=0){r=u%v;u=v;v=r;}return(u);}

局部變量和全局變量局部變量

在一個函數內部定義的變量是內部變量,它只在本函數范圍內有效,也就是說只有在本函數內才能使用它們,在此函數以外是不能使用這些變量的。這稱為“局部變量”。

全局變量在函內定義的變量是局部變量,而在函數外定義的變量稱為外部變量,也稱全局變量.靜態局部變量是函數中保持最近值不釋放的變量在函數中用下面方式定義:staticintc=7;

考察靜態局部變量的值#include<stdio.h>voidmain(){intf(inta);inta=2,i;for(i=0;i<3;i++)printf(″%d″,f(a));}intf(inta){intb=0;staticint

c=3;b=b+3;c=c+2;return(a+b+c);}3次調用函數f后,c的值是9第八章地址和指針的概念內存區的每一個字節有一個編號,這就是“地址”。如果在程序中定義了一個變量,在對程序進行編譯時,系統就會給這個變量分配內存單元。一個變量的地址稱為該變量的“指針”。例如,地址2000是變量i的指針。如果有一個變量專門用來存放另一變量的地址(即指針),則它稱為“指針變量”。指針和指針變量的定義:指針變量的引用

注意:指針變量中只能存放地址(指針),不要將一個整數(或任何其他非地址類型的數據)賦給一個指針變量。

例通過指針變量訪問整型變量#include<stdio.h>voidmain(){inta;int*p;a=100;p=&a;/*把變量a的地址賦給p*/printf(“%d,%d\n”,a,*p);}對“&”和“*”運算符說明:如果已執行了語句p=&a則:則a和*p是相同的值所以,如果a=3;Printf(“%d,%d”,a,*p);顯示是3,3所以,如果*p=6;Printf(“%d,%d”,a,*p);顯示是6,6指針變量作為函數參數例10.3對輸入的兩個整數按大小順序輸出

#include<stdio.h>voidmain(){voidswap(int*p1,int*p2);inta,b;int*p1,*p2;scanf(″%d,%d″,&a,&b);p1=&a;p2=&b;if(a<b)swap(p1,p2);printf(″\n%d,%d\n″,a,b);}voidswap(int*p1,int*p2){inttemp;temp=*p1;*p1=*p2;*p2=temp;}下面的函數:voidswap(inta,intb){inttemp;temp=a;a=b;b=temp;/*只在函數中交換了局部變量*/}同樣不可用函數:voidswap(int*p,intb)或voidswap(inta,int*p)只能用函數voidswap(int*p1,int*p2)處理主調用函數中的變量定義一個指向數組元素的指針變量的方法例如:inta[10],*p;p=a;(a是數組的首地址,注意a前沒有地址符)或p=&a[0];雖然a和p都是地址,它們是不同的:a是數組的首地址,一旦由系統分配,就是一個固定的值;而p是指針變量,是可以改變的.所以a++是錯誤的,而p++是正確的.指向數組元素的指針10.3.2通過指針引用數組元素如果inta[6],*p=a;引用一個數組元素,可以用:(1)下標法,如a[i]形式;(2)地址或指針法,如*(a+i)或*(p+i)注意:a[0]-a[5]合法,a[6]非法;*(a)-*(a+5)合法,*(a+6)非法;*(p)-*(p+5)合法,*(p+6)非法;字符串與指針字符串的表示形式

例定義一個字符數組,對它初始化,然后輸出該字符串

#include<stdio.h>voidmain(){char*s=″abcdefg″;printf(″%s\n″,s);}輸出abcdefg(1)用字符數組存放一個字符串,然后輸出該字符串。輸出cdefg的語句是:printf(″%s\n″,s+2);s+2是指針輸出efg的語句是:printf(″%s\n″,s+4);s+4是指針輸出字符f的語句是:printf(″%c\n″,*(s+5));*(s+5)是字符注意:輸出字符串用%s和指針;輸出字符用%c和*(指針)指針運算與數據:#include<stdio.h>voidmain(){inta[5]={2,4,6,8,10},*p;p=a;printf("%d,",*(p+2));printf("%d,",*++p);printf("%d,",*p++);printf("%d\n",*++p);}顯示6,4,4,8注意1p+2沒有改變p的值;注意2++p,和p++的區別.調用函數實現數組的相反順序存放:#include<stdio.h>voidmain(){voidinv(intx[],intn);//函數聲明inti,a[10]={3,7,9,11,0,6,7,5,4,2};printf("Theoriginalarray:\n");for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");inv(a,10);//調用函數printf("Thearrayhasbeeninverted:\n");for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");}//用數組元素:voidinv(intx[],intn){inttemp,i,j,m=(n-1)/2;for(i=0;i<=m;i++){j=n-1-i;temp=x[i];x[i]=x[j];x[j]=temp;}}//或用指針:voidinv(int*x,intn){int*p,temp,*i,*j,m=(n-1)/2;i=x;j=x+n-1;p=x+m;for(;i<=p;i++,j--){temp=*i;*i=*j;*j=temp;}}這時函數聲明要改成:voidinv(int*x,intn);用選擇法實現數組從大到小排序的函數:voidsort(intx[],intn){inti,j,k,t;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(x[j]>x[k])k=j;if(k!=i) {t=x[i];x[i]=x[k];x[k]=t;}}}第九章問題定義:

有時需要將不同類型的數據組合成一個有機的整體,以便于引用。如:一個學生有學號/姓名/性別/年齡/地址等intnum;charname[20]; charsex;intage;charaddr[30];

聲明一個結構體類型的一般形式為:

struct

結構體名{成員表列};如:struct

student{

int

num;char

name[20];char

sex;

int

age;float

score;char

addr[30];}

結構體名類型名成員名

定義結構體類型變量的方法

可以采取以下3種方法定義結構體類型變量:先聲明結構體類型再定義變量名例如:structstudent

student1,student2;|||結構體類型名結構體變量名

定義了student1和student2為structstudent類型的變量,即它們具有structstudent類型的結構.

圖9-2student1100101ZhangXinM1990.5Shanghai100102WangLiF2098Beijingstudent2引用結構體變量中成員的方式為結構體變量名.成員名例如,student1.num表示student1變量中的num成員,即student1的num(學號)項。可以對變量的成員賦值和運算student1.num=10010但不能用以下語句整體讀入結構體變量,例如:

scanf(″%d,%s,%c,%d,%f,%s″,&student1);

結構體變量的地址主要用作函數參數,傳遞結構體變量的地址。

對結構體變量初始化.

#include<stdio.h>

voidmain()

{structstudent

{longintnum;

charname[20];

charsex;

charaddr[20];

}a={10101,″LiLin″,′M′,″123BeijingRoad″};/*對結構體變量a賦初值*/

printf(″No.:%ld\nname:%s\nsex:%c\naddress:%s\n″,a.num,,a.sex,a.addr);

結構體數組

一個結構體變量中可以存放一組數據(如一個學生的學號、姓名、成績等數據)。如果有10個學生的數據需要參加運算,顯然應該用數組,這就是結構體數組。結構體數組與以前介紹過的數值型數組不同之處在于每個數組元素都是一個結構體類型的數據,它們都分別包括各個成員項。定義結構體數組

和定義結構體變量的方法相仿,只需說明其為數組即可。例如:structstudent{intnum;charname[20];ch

溫馨提示

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

評論

0/150

提交評論