freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于自然語言思想的遞進(jìn)c_c教程4ppt-資料下載頁

2025-01-19 10:02本頁面
  

【正文】 tem=LoadStudent(n)。 //從文件中讀第 n名同學(xué)信息 OutputStudent(amp。tem)。//輸出信息 break。 } default: { break。 } } if ((id1)||(id3)) break。 //break while } } //------輸入函數(shù)------------ void InputStudent(Student * p) { int i。 printf(\n請(qǐng)輸入整數(shù)編號(hào),回車結(jié)束: )。 scanf(%d,amp。pid)。 getchar()。 printf(\n請(qǐng)輸入姓名字符串,回車結(jié)束 : )。 gets(pname)。 printf(\n請(qǐng)輸入兩門課的整數(shù)成績,每門成績以回車結(jié)束: \n)。 for (i=0。 i2。 i++) { scanf(%d,amp。pscore[i])。 getchar()。 } } //---------輸出函數(shù)-------- void OutputStudent(Student *p) { printf(\n%d\t%s\t%d\t%d\n, pid, pname, pscore[0], pscore[1])。 } //-------寫文件函數(shù)-------- void SaveStudent(Student * p, int n) { FILE *fp。 char filename[20]。 int i。 printf(\n請(qǐng)輸入保存文件名: \n)。 gets(filename)。 if ((fp=fopen(filename, wb))==NULL) { //創(chuàng)建二進(jìn)制文件 printf(cannot open file\n)。 return。 } for (i=0。 in。 i++){ if (fwrite(p++, sizeof(Student), 1, fp)!=1)//向文件中一次寫一個(gè)結(jié)構(gòu)體量值 printf(file write error\n)。 } fclose(fp)。 } //---------讀文件函數(shù)-------- Student LoadStudent( int n) { Student tem。 FILE *fp。 char filename[20]。 printf(\n請(qǐng)輸入打開文件名: \n)。 gets(filename)。 fp=fopen(filename, rb)。//打開二進(jìn)制文件 fseek(fp,(long)(n*sizeof(Student)),0)。 //根據(jù)參數(shù) n調(diào)整文件指針位置 fread(amp。tem, sizeof(Student), 1, fp)。//從文件中一次讀 1個(gè)結(jié)構(gòu)體量值 fclose(fp)。 return tem。 } ? 文件操作中出錯(cuò)不僅僅發(fā)生在文件打開時(shí),對(duì)文件的任何一次讀寫,都有發(fā)生錯(cuò)誤的可能。 ? 文件打開時(shí),我們用 fopen()函數(shù)是否返回 NULL識(shí)別是否發(fā)生錯(cuò)誤。 ? 嚴(yán)格的編程在對(duì)文件讀寫( fputc(), fread()等)操作后,都應(yīng)該檢查是否有錯(cuò)誤發(fā)生 feof() ? 前面已經(jīng)使用過的函數(shù) feof()可以判斷是否到達(dá)文件尾。該函數(shù)可以避免越界讀取文件。函數(shù)feof()的使用格式: ? feof(文件指針 )。 ? 當(dāng)文件內(nèi)指針指向文件尾,函數(shù)返回 0,否則返回非 0。常用的使用方法是: ? while(!feof(fp)) { ? //對(duì)文件操作 ? } ferror() ? 調(diào)用 ferror()函數(shù)可以返回當(dāng)前文件狀態(tài)標(biāo)識(shí)。函數(shù) ferror()的調(diào)用格式: ? ferror(文件指針 )。 ? 如果 “ 文件指針 ” 所標(biāo)識(shí)的文件正常,函數(shù)ferror()返回 0,否則返回非 0。常用的調(diào)用方法是: ? //對(duì)文件讀寫操作代碼 ( fread(), fwrite(),fputc等) if( ferror( fp ) ) { fprintf(stderr, “File error” )。 exit(0)。 } clearerr() ? 當(dāng)對(duì)一個(gè)文件做輸入輸出操作時(shí)出現(xiàn)錯(cuò)誤,調(diào)用函數(shù) ferror會(huì)返回該文件狀態(tài)標(biāo)識(shí)為非 0。 ? 這個(gè)錯(cuò)誤標(biāo)識(shí)非 0值會(huì)一直保留,直到對(duì)同一文件調(diào)用 clearerr函數(shù)或 rewind函數(shù),或任何其它一個(gè)輸入輸出函數(shù)。 ? 函數(shù) clearerr(fp)用來主動(dòng)將文件錯(cuò)誤標(biāo)識(shí)置 0。 ? 有些時(shí)候,程序處理的數(shù)據(jù)取值范圍很小,一個(gè)字節(jié)也用不了 ? 為了節(jié)省內(nèi)存, C/C++語言提供了位運(yùn)算和一種叫 “ 位域 ” 的量值的運(yùn)算 ? 有的書翻譯成 “ 位段 ” 。 第 9章 C/C++語言的縱向名詞性擴(kuò)充( 4): 微觀擴(kuò)充 ——位和位域 1. 位 “ 與 ” 運(yùn)算 ? 3 的補(bǔ)碼 00000011 ? 5 的補(bǔ)碼 00000101 ? amp。 00000001 ? 如 x=xamp。0x7F。 ? 因?yàn)槭M(jìn)制 7F,八進(jìn)制數(shù) 0177的二進(jìn)制形式是11111111,即十進(jìn)制數(shù)的 127。所以上面位與賦值運(yùn)算的結(jié)果是將變量 x的其它位置零,只保留低端0- 7位。 2. 位 “ 或 ” 運(yùn)算 ? 00110100 ? 01010011 ? | 01110111 ? 位或運(yùn)算常用來將一個(gè)數(shù)據(jù)的某些位置 1。 ? 例如,要將變量 x的第 3- 5位置為 1,就應(yīng)該將 x和只有第 3, 4, 5位是 1,其它位是 0的數(shù)( 111000)或,而這個(gè)數(shù)是 十 進(jìn)制 56,八進(jìn)制的 70, 十六 進(jìn)制 38。 ? 位運(yùn)算表示式 x=x|0x70。 3. 位異或運(yùn)算 ? 00111001 ? 00101010 ? ^ 00010011 ? 01111010 ? 00001111 ? ^ 01110101 ? 異或運(yùn)算一個(gè)有趣的實(shí)現(xiàn)是,不需要中間變量,實(shí)現(xiàn)交換兩個(gè)變量的值。 ? a= 5(十 )=101(二 ); b = 6 (十 ) = 110 (二 ) ? a = 101 ? b = 110 ? a = (a^b)= 011 ? b = (a^b)= 101 ? a = (a^b)= 110 4. 位反運(yùn)算 ? 01110101 ? ~ 10001010 5. 位左移運(yùn)算 ? 位左移運(yùn)算符為 “ ”,作用是對(duì)二進(jìn)制數(shù)的各二進(jìn)位施加左移若干位的運(yùn)算。 5. 位左移運(yùn)算 ? 左移一位相當(dāng)于該數(shù)乘以 2,左移 2位相當(dāng)于該數(shù)乘以 4, … 左移 n位相當(dāng)于該數(shù)乘以 2n ,但只有左端溢出位不包含 1時(shí)才成立。 ? 如 64的補(bǔ)碼 01000000,左移一位 10000000,左移兩位 00000000,這時(shí)變?yōu)?0了。 6. 位右移運(yùn)算 ? 位右移運(yùn)算符為 “ ”,作用是對(duì)二進(jìn)制數(shù)的各二進(jìn)位施加右移若干位的運(yùn)算。 7. 位運(yùn)算與賦值運(yùn)算的結(jié)合 ? C/C++語言提供如下位運(yùn)算與賦值運(yùn)算結(jié)合運(yùn)算符: amp。=, |=, =, =, ^=。它們的邏輯規(guī)則和前面學(xué)習(xí)的復(fù)合賦值運(yùn)算相同。如 ? aamp。=b == a=aamp。b ? a=2 == a=a2 … 8. 不同長度的數(shù)據(jù)進(jìn)行位運(yùn)算 ? 如果兩個(gè)長度不同的數(shù)據(jù)(如 long型和 int型)進(jìn)行位運(yùn)算時(shí)(如 aamp。b, 而 a為 long型, b是 int型),系統(tǒng)會(huì)將二者按右端對(duì)齊。 ? 如果 b是正數(shù),左端 16位補(bǔ) 0,如果 b是負(fù)數(shù),左端 16位全補(bǔ) 1。 ? 如果 b為無符號(hào)數(shù),左側(cè)添滿 0。 例 9. 1請(qǐng)寫一個(gè)函數(shù) getbit(x,p,n),該函數(shù)返回 x中從p位開始的向右 n位。(最右端的是第 0位, p和 n都是正數(shù))。 unsigned getbits(unsigned x, unsigned p, unsigned n) { return (x(p+1n))amp。 ~(~0n)。 } 我們編寫如下的 main函數(shù),調(diào)用 getbits函數(shù),程序運(yùn)行結(jié)果是 5,即二進(jìn)制的 101。詳細(xì)見后面的分析。 include void main() { unsigned y。 y=getbits(182,4,3)。 printf(\n%u\n, y)。 } 例 9. 2編寫函數(shù) bitcount(x),返回 x中“ 1”的位數(shù)。 int bitcount(unsigned x) { int b。 for (b=0。 x!=0。 x= 1) if (xamp。01) b++。 return b。 } ? 當(dāng)存儲(chǔ)一個(gè)取值范圍較小的量值時(shí),不必用一個(gè)或多個(gè)字節(jié),可以在一個(gè)字節(jié)中放幾個(gè)這樣的量值。 ? 例如 “ 真 ” 或 “ 假 ” 用 0或 1表示,只需一位。這時(shí),我們可以用前面的位運(yùn)算方法,直接操作內(nèi)存中的特定 1位或 幾位 。 ? C語言中還提供了更簡便的方法。這就是 “ 位域 ” 。 ? 位域是在結(jié)構(gòu)體類型中,以若干位為單位定義的無符號(hào)成員 。例如: struct BitField { unsigned a : 2。 unsigned b : 6。 unsigned c : 4。 unsigned d : 4。 int i。 }data。 ? 也可以使各個(gè)位域的和不恰好占滿一個(gè)字節(jié)。如: struct BitField {unsigned a : 2。 unsigned b : 3。 int i。 }。 ? 對(duì)位域的引用方法與結(jié)構(gòu)體變量完全相同。如: ? =1。 ? =7。 ? 注意位域允許的最大值范圍, a為 3,因?yàn)橹挥?2位;b為 7,因?yàn)橹挥?3位。 關(guān)于位域的定義和引用的幾點(diǎn)說明: ? 若某一位域要從下一個(gè)字開始存放??梢杂靡韵滦问蕉x: struct BitField { unsigned a : 3。 unsigned b : 2。 unsigned : 0。 /*長度為 0的位域把兩個(gè)字分開 */ unsigned c : 3。 /*另一個(gè)字節(jié)的開始 */ }。 2. 一個(gè)位域必須存儲(chǔ)在同一個(gè)存儲(chǔ)單元(字)中,不能跨兩個(gè)單元。如果第一個(gè)單元空間不能容納下一個(gè)位域,則該空間不用,而從下一個(gè)單元起存放該位域。 3. 可以定義無名位域。如: struct BitField { unsigned a : 1。 unsigned : 2。 //(這兩位空間不用 ) unsigned b : 3。 }。 4. 位域的長度 不能大于存儲(chǔ)單元的長度 ,也 不能定義位域數(shù)組。 5. 位域結(jié)構(gòu)體內(nèi)是無符號(hào)的整型變量, 整型變量可以使用的場合,位域都可以使用 。
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1