




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、模塊四:數(shù)據(jù)類型C語言源程序中所處理的任何數(shù)據(jù)(常量或變量)都是屬于某一種數(shù)據(jù)類型的,數(shù)據(jù)類型將決定該類型的值在內(nèi)存中占用空間的大小、數(shù)據(jù)值的表現(xiàn)形式及數(shù)據(jù)范圍、可進(jìn)行的運(yùn)算及操作、變量值的組成情況等。C中數(shù)據(jù)類型分為:基本類型、構(gòu)造類型、指針類型、空類型四大類,其中基本類型包括整型、實(shí)型、字符型、枚舉型;構(gòu)造類型有:數(shù)組類型、結(jié)構(gòu)體類型、共同體類型,指針類型的特殊性在于其變量中存放的是內(nèi)存地址信息而不是內(nèi)存中的值。這一模塊的重點(diǎn)是數(shù)組、結(jié)構(gòu)體、指針類型。(1)數(shù)組類型:基本知識(shí):一維及二維數(shù)組變量的定義及初始化、如何正確訪問元素、一維字符數(shù)組操作字符串、會(huì)正確輸入輸出數(shù)組的元素、正確輸出字符
2、串,掌握string.h函數(shù)中的一些常用函數(shù)的使用,如:兩個(gè)字符串的比較(例如:判斷串s1是否大于s2,不能用s1>s2,而應(yīng)該用strcmp(s1,s2)>0)、字符串的賦值、字符串的連接等。算法:首先要理解一維數(shù)組名作實(shí)參和形式能數(shù)傳地址的實(shí)質(zhì);掌握在一維數(shù)組中:輸入數(shù)組所有元素、輸出數(shù)組所有元素、尋找最大數(shù)、最小數(shù)、求元素的平均值、查找某一個(gè)值是否是數(shù)組中的元素、數(shù)組元素逆置、某種常見排序算法等。數(shù)組元素實(shí)際個(gè)數(shù)隨著輸入動(dòng)態(tài)統(tǒng)計(jì)的方法:應(yīng)當(dāng)設(shè)定一個(gè)輸入結(jié)束標(biāo)志,在輸入該標(biāo)志之前的元素都依次作為數(shù)組的有效元素,該標(biāo)志不計(jì)入內(nèi),用如下代碼輸入以-1為結(jié)尾標(biāo)志的數(shù)組并輸出所有的有效
3、元素:#include <stdio.h>void main()int a100,num=0,i=0;do scanf("%d",&ai+);while (ai-1!=-1);num=i-1;for (i=0;i<num;i+)printf("%5d",ai);printf("n%dn",num);練習(xí):1、有數(shù)組定義int amn,則在aij之前的元素的個(gè)數(shù)為_。2、 以下一維數(shù)組的定義正確的是_A、 int n=3, an; B、#define N=3 int aN;C、 const int n=3; i
4、nt an; D、#define N 3 int aN*3;3、以下一維數(shù)組定義及初始化正確的是_A、int a ; B、int a=1,2,3 C、int a3=1,2,3,4 D、int a3=,2,4、以下選擇中,能正確定義二維數(shù)組的是_。A、int x 2; B、int x 2 =2*2;C、int x2 =1,2,3,4 ; D、int a23= , 1 ;5、若定義int a10=9,1,15,6,2,11,8,7,19,3;則mm1+2*m4的值是_,*m+m8的值為_。 6、下列字符數(shù)組定義與初始化不正確的是_A、char s =”abc”; B、char s=”abc”;C、
5、char s3=a,b,c; D、char s3=”abc”;7、下列關(guān)于數(shù)組的描述中不正確的是_。A、可以對(duì)字符型數(shù)組進(jìn)行整體輸入、輸出B、可以對(duì)整型數(shù)組進(jìn)行整體輸入、輸出C、利用字符型數(shù)組可以實(shí)現(xiàn)字符串操作D、不能通過賦值運(yùn)算符“=”對(duì)字符型數(shù)組進(jìn)行整體賦值8、下列程序的輸出結(jié)果是?#include <stdio.h>int f (int *a, int num, int x); void main( )int a10=8,6,17,29,34,5,7,23,2,1;int pos;pos=f (a,10,7);printf("%d",pos+1);int
6、f (int *a, int num, int x) int i;for (i=0; i<n; i+) if (x = ai) return i; return -1; ;教材P239的6.3程序填空題,需要認(rèn)真理解。其中的(3)如果改為統(tǒng)計(jì)某一個(gè)字母出現(xiàn)的次數(shù),可以作怎樣的簡化?(2)指針類型:定義形式為:數(shù)據(jù)類型 *指針變量名,例:int*p;注意p與*p的區(qū)別。指針變量若未賦值,不能對(duì)*p操作,若對(duì)指針賦值為空值,也不能對(duì)*p操作。例如:1、 int *f = NULL; scanf("%d",f)或 *f=10.5;都不正確2、 int t = 'A&
7、#39;, *f; f = &t或*f=t均正確;f=t,*f=&t都不正確3、 int *f; f = NULL;正確練習(xí): 1、已知: char *s = "student" 則printf("%sn", c+3)輸出為_ 2、若有說明:int a, b=9, *p=&a;,則能完成a=b賦值功能的語句是_A、a=*p; B、*p=*&b; C、a=&b; D、*p =&*b;指針與數(shù)組的關(guān)系:對(duì)指針操作一維數(shù)組要熟練掌握,理解數(shù)組名是地址常量的概念,指針指向數(shù)組的時(shí)候執(zhí)行p+、p- -的意義,以及數(shù)組
8、元素的下標(biāo)法訪問及指針運(yùn)算符訪問方法:例:int a4=1,2,3,4 ,*p=a +p;p2或*(p+2)都是表示元素a3,但是p+1或a+2都是表示地址概念的,都等于&a2各種指針的含義:int *p /一級(jí)指針,可等于普通int變量地址、一維數(shù)組名、二維數(shù)組中的列地址int (*p)3;/一個(gè)行指針,指向具有3個(gè)整型元素的一維數(shù)組,與二維數(shù)組一起使用,用于獲得行指針值,例int a23 p=a;int *p3;/含3個(gè)整型指針元素的一維指針數(shù)組pint (*p) ( ) ;/函數(shù)指針,指向返回值為int型的函數(shù)入口int *p(形式參數(shù)表); /
9、返回值為int指針的函數(shù)pint *p /二級(jí)指針p,用來獲得一級(jí)指針的地址,必須兩次間接尋址才能訪問int值,例如:int a,int *r=&a,*p=&r 則下列三句等效: (1)a=1 (2)*r=1 (3)*p=1 這里,有幾種訪問是不正確的:(1) r=1 (2)p=&a (3)p=r (4)*p=1 二維數(shù)組中元素的表示:例:int a34;元素aij的正確表示:aij、*(ai+j)、*(*(a+i)+j)、*(*a+i*4+j),但是*(a+i*4+j)
10、不正確,這里需要正確理解行指針與列指針的表示及它們執(zhí)行算術(shù)運(yùn)算每次移動(dòng)的字節(jié)數(shù)用字符指針操作字符串:比用字符數(shù)組操作字符串具有更大的靈活性,注意二者的區(qū)別例:char *s=“ABC”; char *s; s=”ABC”;都是正確的char p4=“ABC”;正確,但是char p4; p=”ABC”;卻錯(cuò)誤s=p;是正確的賦值,但是s=*p,*s=”AB”都是錯(cuò)誤的 練習(xí):下面的函數(shù)代碼是否都能正確實(shí)現(xiàn)字符串的拷貝(將p1串拷貝到p2串中?)代碼段一:void MyStrcpy( char *p2, char *p1 ) while ( (*p2=*p1) != '0
11、9; ) /此處換成.!=n呢?p1+;p2+;代碼段二:void MyStrcpy( char *p2, char *p1 ) while (*p1 != '0' ) *p2=*p1p1+;p2+;(3)結(jié)構(gòu)體類型:會(huì)正確定義結(jié)構(gòu)體類型,掌握三種變量定義的方式及變量的初始化方式,理解結(jié)構(gòu)體變量內(nèi)存占用的情況(各成分依次存放,故結(jié)構(gòu)體變量所占空間至少為所有成員需要的空間之和),會(huì)正確訪問結(jié)構(gòu)體變量的成員(用點(diǎn)運(yùn)算符或是箭頭運(yùn)算符),結(jié)合結(jié)構(gòu)體數(shù)組及指針會(huì)正確訪問結(jié)構(gòu)體的元素。練習(xí):1、定義struct Point int x,y; pos =1,2,3,4,5,6, *pt=p
12、os;則表達(dá)式(+pt)->y的值為_ , +(pt->x) 的值為_, +pt->x 的值為_、(*pt).y的值為_。2、以下對(duì)結(jié)構(gòu)體變量stu中成員的非法引用是_。struct Pointint x;int y; pos, *p=&pos;A、pos.x B、(*p).y C、p->x D、Point.y作為函數(shù)參數(shù),通常定義結(jié)構(gòu)體的指針作為形式參數(shù),將實(shí)參結(jié)構(gòu)體變量的地址傳入,這樣省時(shí)效率高,而且可在被調(diào)函數(shù)中修改對(duì)應(yīng)實(shí)參結(jié)構(gòu)體成員的值練習(xí):下列程序的運(yùn)行結(jié)果是?#include <stdio.h>typedef struct Student
13、 char name10;double score; STU;void f (STU *s) (*s).score*=20; printf("%s %.1fn", s->name, (*s).score);void main() STU stu="LiuBo", 4.5, "JiWei", 4.6, "Lijie", 5.0;f (stu+1);printf("%s %.1fn", stu->name, (*stu).score);利用結(jié)構(gòu)體和指針的遞歸定義可以實(shí)現(xiàn)單鏈表例:stru
14、ct node int data; struct node *next; *head;在單鏈表中,最重要的是頭指針的信息,頭指針用于指向單鏈表的第一個(gè)結(jié)點(diǎn)處,順著鏈依次尋找其它的結(jié)點(diǎn),單鏈表不可隨機(jī)訪問其中的結(jié)點(diǎn),最后一個(gè)結(jié)點(diǎn)的指針域置為空理解單鏈表的遍歷、插入一個(gè)結(jié)點(diǎn)、刪除一個(gè)結(jié)點(diǎn)等方法。練習(xí):1、設(shè)以下程序的所有的指針均為上面struct node*變量,已知head為頭指針,指針p指向了單鏈表中的某一個(gè)結(jié)點(diǎn)處,但肯定不是指向第一個(gè)結(jié)點(diǎn)和最后一個(gè)結(jié)點(diǎn),指針q指向了某一個(gè)結(jié)點(diǎn)處,該結(jié)點(diǎn)不在鏈表中,下面的代碼實(shí)現(xiàn)的功能是_? (方法提示:根據(jù)描述先畫出單鏈表示意圖來)p=p->next;
15、 s->next=p->next; p->next=s;如果p指向的是鏈表中倒數(shù)第二個(gè)結(jié)點(diǎn)處,則上面代碼實(shí)現(xiàn)的功能為_,這時(shí)代碼還可以寫成_?下面的代碼的功能是_?p->next =p->next->next; delete p->next;下面的代碼的功能是_?for (p=head; p ; p=q) q=p->next; delete p; 下面的代碼的功能是_?p=(struct node*)malloc(sizeof(struct node);p->data=x;p->next=head;head=p;2、鏈表中的結(jié)點(diǎn)的形成
16、可以有兩種方式,一種是靜態(tài)的,即定義了結(jié)構(gòu)體變量,只是將不同變量的next域作了連接,另一種是利用malloc( )函數(shù)逐個(gè)申請(qǐng)動(dòng)態(tài)空間,再進(jìn)行指針間的連接。下面程序代碼的運(yùn)行結(jié)果是:void main() struct node int data; struct node *next *head,*p , a,b,c;int j;a.data=10; b.data=20; c.data=30; b.next=&c; c.next=&a; a.next=0;head=&b; p=head->next;printf("%d n", p->data);動(dòng)態(tài)申請(qǐng)一個(gè)結(jié)點(diǎn)空間:p=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030商用車項(xiàng)目發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報(bào)告
- 2025至2030中國自動(dòng)販賣機(jī)行業(yè)市場深度分析及有效策略與實(shí)施路徑評(píng)估報(bào)告
- 2025至2030中國自動(dòng)清罐機(jī)行業(yè)市場深度研究及發(fā)展前景投資可行性分析報(bào)告
- 2025至2030中國自動(dòng)開縫機(jī)行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報(bào)告
- 酒店服務(wù)質(zhì)量與經(jīng)營效率提升策略
- 2025至2030中國自體基質(zhì)誘導(dǎo)軟骨形成行業(yè)市場深度研究及發(fā)展前景投資可行性分析報(bào)告
- 2025至2030中國腰椎前路椎間融合行業(yè)市場占有率及投資前景評(píng)估規(guī)劃報(bào)告
- 2025至2030中國脫模膜行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報(bào)告
- 2025至2030中國脂肪乳注射液行業(yè)發(fā)展分析及競爭策略與趨勢預(yù)測報(bào)告
- 2025至2030中國膠凝纖維敷料行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報(bào)告
- 2024屆河北省唐山市玉田縣物理高一第二學(xué)期期末質(zhì)量檢測試題含解析
- 第三方醫(yī)療消毒供應(yīng)中心項(xiàng)目可行性研究報(bào)告
- 貨架安裝施工方案
- 美羅培南課件
- 128個(gè)常用自然拼讀發(fā)音規(guī)則和1000句生活口語
- 異口同音公開課
- 專利代理人資格考試實(shí)務(wù)試題及參考答案
- 運(yùn)用信息技術(shù)助力勞動(dòng)教育創(chuàng)新發(fā)展 論文
- GB/T 602-2002化學(xué)試劑雜質(zhì)測定用標(biāo)準(zhǔn)溶液的制備
- GB/T 4074.8-2009繞組線試驗(yàn)方法第8部分:測定漆包繞組線溫度指數(shù)的試驗(yàn)方法快速法
- 2023年涉縣水庫投資管理運(yùn)營有限公司招聘筆試模擬試題及答案解析
評(píng)論
0/150
提交評(píng)論