C語言程序設(shè)計技術(shù)(下)課件_第1頁
C語言程序設(shè)計技術(shù)(下)課件_第2頁
C語言程序設(shè)計技術(shù)(下)課件_第3頁
C語言程序設(shè)計技術(shù)(下)課件_第4頁
C語言程序設(shè)計技術(shù)(下)課件_第5頁
已閱讀5頁,還剩202頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、The C Programming LanguageC語言程序設(shè)計技術(shù)(下)The C Programming LanguageC語言程The C Programming Language第11講 函數(shù)(1) The C Programming Language第11講一. 函數(shù)的定義與調(diào)用1. 函數(shù)的定義 () 函數(shù)體 一. 函數(shù)的定義與調(diào)用2. 函數(shù)值 非void型函數(shù)的函數(shù)值必須用return語句返回。2. 函數(shù)值3. 函數(shù)調(diào)用 ();例如: c=2*max(13, 25) m=max(a, max(b,c)3. 函數(shù)調(diào)用說明:(1) 調(diào)用函數(shù)前,應對函數(shù)原型進行聲明(2) 實參的個數(shù)必

2、須與虛參個數(shù)相同,類型必須匹配(3) 實參可以是一個表達式,虛參只能是變量(4) 當虛參是一個指針或數(shù)組時,實參與虛參的值雙向傳遞說明:(5) 函數(shù)不能嵌套定義,但可嵌套調(diào)用(6) 函數(shù)的實參類型與虛參類型不相同時將實參轉(zhuǎn)換為虛參的類型(7) 函數(shù)的返回值與函數(shù)類型不相同時將返回值轉(zhuǎn)換為函數(shù)值的類型。(5) 函數(shù)不能嵌套定義,但可嵌套調(diào)用例1(P106例4-2). 已知a=2,b=3,求ab的值。 例1(P106例4-2). 已知a=2,b=3,求ab的值#include#includevoid main(void) int add(int x,int y); int a=2,b=3,c; c

3、lrscr( ); c=add(a,b); printf(%d+%d=%dn, a,b,c); getch( ); #include /* 求和 */int add(int x,int y) int t; printf(x和y的值分別是:%d,%d n, x,y); t=x+y; x=2*x; y=2*y; printf(改變后的x和y的值分別是:%d,%d n, x,y); return t; /* 求和 */ 二. 函數(shù)嵌套調(diào)用 在一個子函數(shù)中調(diào)用另一個函數(shù)稱為函數(shù)嵌套調(diào)用 二. 函數(shù)嵌套調(diào)用例2(P125例4-14).從鍵盤輸入一正整數(shù)limit(limit=6),驗證從6到n之間的所有

4、偶數(shù)都可以分解為兩個奇素數(shù)之和。 例如 98=19+79例2(P125例4-14).從鍵盤輸入一正整數(shù)limit(l#include#include#includevoid main(void) int prime(int m); int n,a,b,limit;#include clrscr( ); while(1) printf(nInput 1 number(=6):n); scanf(%d,&limit); if (limit=6) break; clrscr( ); for(n=6;n=limit;n+=2) for(a=3;a=n/2;a+=2) if (prime(a) b=n-

5、a; if (prime(b) printf(%d=%d+%dn,n,a,b); break; getch( ); for(n=6;n=limit;n+=2) /* 判斷一個數(shù)是否為素數(shù) */int prime(int m) int i,k; k=sqrt(m)+1; for(i=2;ik;i+) if (m%i=0) return 0; return 1; /* 判斷一個數(shù)是否為素數(shù) */C語言程序設(shè)計技術(shù)(下)課件The C Programming Language第12講 函數(shù)(2) The C Programming Language第12講一. 函數(shù)遞歸調(diào)用 在一個函數(shù)中,如果直接或

6、間接調(diào)用自己,則稱為遞歸調(diào)用。如:int f(int n) if (n1) return 0; return f(n-1)+n; 一. 函數(shù)遞歸調(diào)用例1. 逆序輸出一個整數(shù)的各位數(shù)字。 例1. 逆序輸出一個整數(shù)的各位數(shù)字。 #includevoid main(void) void printd(long n); long n; scanf(%ld,&n); printd(n); #includevoid printd(long n) if (n0) putchar(-); n=-n; putchar(n%10+0); if (n/10) printd(n/10); void printd(lo

7、ng n)二. 局部變量和全局變量1. 在函數(shù)內(nèi)部定義的變量稱為局部變量。2. 在函數(shù)外部定義的變量稱為全局變量。二. 局部變量和全局變量說明: (1) 局部變量只在函數(shù)內(nèi)部起作用,函數(shù)結(jié)束時,所占內(nèi)存空間被釋放(2) 全局變量在定義它的后面任一個函數(shù)中都起作用說明: (3) 全局變量與局部變量同名時,使用局部變量。(4) 函數(shù)的虛參視同局部變量(3) 全局變量與局部變量同名時,使用局部變量。例2(P113例4-7). 分析程序運行結(jié)果。例2(P113例4-7). 分析程序運行結(jié)果。#includeint y,z;void main(void) void abc(int x); int x;

8、x=10; y=20; z=30; printf(ok1: x=%d y=%d z=%d n,x,y,z); abc(x); printf(ok2: x=%d y=%d z=%d n,x,y,z); #includevoid abc(int x) int y; printf(ok3: x=%d y=%d z=%d n,x,y,z); x=100; y=200; z=300; printf(ok4: x=%d y=%d z=%d n,x,y,z); void abc(int x)例3(P126例4-15). 輸入100個整型數(shù),尋找其最大值和最小值。例3(P126例4-15). 輸入100個整型

9、數(shù),尋找其最大#include#includeint Max,Min;void main(void) void find(int a,int n); int data100,i;#include clrscr( ); for(i=0;i100;i+) scanf(%d,&datai); find(data,100); printf(Max=%d,Min=%d,Max,Min); getch( ); clrscr( ); /* 查找數(shù)組中的最大值和最小值 */void find(int a,int n) int i; Max=Min=a0; for(i=1;iMax) Max=ai; if (a

10、iMin) Min=ai; /* 查找數(shù)組中的最大值和最小值 */C語言程序設(shè)計技術(shù)(下)課件The C Programming Language第13講 指針(1) The C Programming Language第13講一. 指針變量1. 指針概念與定義 表示某個變量所在內(nèi)存地址的變量稱為指針變量,簡稱為指針。指針變量的說明方法: *;一. 指針變量例: int a,*p,*p1=&a,*p2=p1; p,p1,p2都是指向整型數(shù)據(jù)變量的指針變量,其中p1,p2已指向變量a。例: char *s; s 是指向字符型數(shù)據(jù)變量的指針。 例:2. 指針運算符(1) & 取變量的地址 例 p=

11、&a2. 指針運算符(2) * 取出或改變指針所指向的變量之值。例 int *p,a; a=10; p=&a; *p=*p+2; printf(%d,a);(2) *(3) + 指針可以加上一個整型量,以便指向另一個變量。 例: int d11,*p=&d4,*q; p+=3,q=p-2;(3) +(4) - 兩個同類型的指針可以進行減法運算。 例:int d100,*p1,*p2,m; p1=d; p2=&d8; m=p2-p1; m的值等于p1與p2相距的整型變量的個數(shù),即m=8。(4) -3. 說明(1) 指針的類型與其代表的變量的類型必須相同。例:int *p,i; float *pf

12、,f; p=&i是合法的 而p=&f是非法的3. 說明(2) 指針必須先賦值后使用。例如:int *p;*p=*p+2;是非法的。(2) 指針必須先賦值后使用。(3) 數(shù)組名及函數(shù)名可代表其所在內(nèi)存的開始地址。(4) 函數(shù)調(diào)用中的虛參使用指針時,將雙向傳遞變量的值。(3) 數(shù)組名及函數(shù)名可代表其所在內(nèi)存的開始地址。例1(P146例5-11). 交換兩個變量的值。例1(P146例5-11). 交換兩個變量的值。#includevoid main(void) void swap(int *x, int *y); int i,j; printf(輸入兩個整數(shù):); scanf(%d %d,&i,&j

13、); swap(&i,&j); printf(i=%d j=%d,i,j); #includevoid swap(int *x, int*y) int p; p=*x; *x=*y; *y=p; void swap(int *x, int*y)例2. 將三個數(shù)排序。例2. 將三個數(shù)排序。#includevoid main(void) void sort(int *q1,int *q2,int *q3); int a,b,c; printf(輸入三個整數(shù):); scanf(%d %d %d,&a,&b,&c); sort(&a,&b,&c); printf(%d,%d,%d,a,b,c); #i

14、ncludevoid sort(int *q1,int *q2,int *q3) void swap(int *x,int *y); if (*q1*q2) swap(q1,q2); if (*q1*q3) swap(q1,q3); if (*q2*q3) swap(q2,q3); void sort(int *q1,int *q2,int void swap(int *x, int *y) int p; p=*x; *x=*y; *y=p; void swap(int *x, int *y)C語言程序設(shè)計技術(shù)(下)課件The C Programming Language第14講 指針(2)

15、The C Programming Language第14講一. 指針與一維數(shù)組設(shè)有定義:int a100, *p指針賦值方法:p=&a0 或p=a元素ai引用方法:*(p+i) 或 pi 一. 指針與一維數(shù)組例1(P139例5-5). 用四種方法打印數(shù)組中的元素。 例1(P139例5-5). 用四種方法打印數(shù)組中的元素。 #include#includevoid main(void) int i, c =10,20,30,40; int *cp=c; clrscr( );#include for(i=0;i=3;i+) printf(“%d ”ci); printf(“n”); for(i=

16、0;i=3;i+) printf(“%d ”,*(c+i); printf(“n”); for(i=0;i=3;i+) for(i=0;i=3;i+) printf(“%d ”,cpi); printf(“n”); for(i=0;i=3;i+) printf(“%d ”,i,*(cp+i); printf(“n”); getch( ); for(i=0;i=3;i+)二. 指針與二維數(shù)組 設(shè)二維數(shù)組為int amn,指針變量為p1. 指針變量指向二維數(shù)組首地址指針說明方法:int *p;指針賦值方法:p=&a00;元素aij引用方法:*(p+n*i+j)二. 指針與二維數(shù)組 設(shè)二維數(shù)組為in

17、t amn,例2例2#includevoid main( void) int a23,*p; int i,j; p=&a00; for(i=0;i2;i+) for(j=0;j3;j+) scanf(“%d”,p+3*i+j);#include for(i=0;i2;i+) for(j=0;j3;j+) printf(“%4d”,*(p+3*i+j); printf(“n”); for(i=0;i2;i+)2. 指向數(shù)組的行指針變量(1)指針說明方法 int (*p)n;(2)指針賦值方法 p=a; 2. 指向數(shù)組的行指針變量(3)第i行元素的首地址(即 ai0的地址) *(p+i) 或 pi

18、(4)元素aij引用方法 *(*(p+i)+j) 或 *(pi+j) 或 pij 或 (*(p+i)j (3)第i行元素的首地址(即 ai0的地址)例3(P141例5-7). 用二維數(shù)組指針變量輸出二維數(shù)組中的每個元素。 例3(P141例5-7). 用二維數(shù)組指針變量輸出二維數(shù)組中#include#includevoid main(void) int a34=1,2,3,4,5,6,7,8,9,10,11,12; int (*p)4; int i,j; clrscr( ); p=a;#include for(i=0;i3;i+) for(j=0;j4;j+) printf(%2d ,*(*(p

19、+i)+j); printf(n); getch( ); for(i=0;i3;i+)三. 指針數(shù)組相同類型指針的集合稱為指針數(shù)組。三. 指針數(shù)組相同類型指針的集合稱為指針數(shù)組。例4(P144例5-10). 輸出數(shù)組的值。 例4(P144例5-10). 輸出數(shù)組的值。 #includevoid main(void) int a23=1,2,3,4,5,6,*p2; int i,j; p0=a0; p1=a1; for(i=0;i2;i+) for(j=0;j3;j+) printf(“%4d”,pij); printf(“n”); #include元素aij引用方法:*(*(p+i)+j) 或

20、 *(pi+j) 或 pij 或 (*(p+i)j 元素aij引用方法:C語言程序設(shè)計技術(shù)(下)課件The C Programming Language第15講 指針(3) The C Programming Language第15講一. 指針與字符數(shù)組一. 指針與字符數(shù)組例1(P143例5-9). 不斷輸入字符串a(chǎn),直到它與已知字符串p相等為止。若不相等,則提示是比p大還是小。 例1(P143例5-9). 不斷輸入字符串a(chǎn),直到它與已知字#include#includevoid main(void) char *p=12345678,a10,*pa,*pp,flag; clrscr( );#

21、include while(1) gets(a); pp=p; pa=a; flag=m; while(*pp!=0) if (*pa*pp) flag=g;break; if (*papn); else printf(apn); printf(%s=%sn,p,a); getch( ); if (flag=m & *p二. 函數(shù)與指針一個函數(shù)可以返回一個指針值。二. 函數(shù)與指針例2(P147例5-12). 求字符串的左子串。例2(P147例5-12). 求字符串的左子串。#include#include#include#includevoid main(void) char *left(ch

22、ar*s,int n); char *p,s100,s110; int n; strcpy(s,1234567890); gets(s1); n=atoi(s1);#include p=left(s,n); gotoxy(1,1); printf(%sn%s,s,p); free(p); p=left(s,n);char *left(char *s, int n) char *t; int l; l=strlen(s)+1; t=malloc(l); strcpy(t,s); if (nl) tn=0; return t; char *left(char *s, int n)例3 將字符串中的

23、每一個字符循環(huán)向右移動若干位。 例3 將字符串中的每一個字符循環(huán)向右移動若干位。 #include#include# includevoid main(void) void MoveStr(char *s,int n); char s101; int n;#include printf(source: ); gets(s); printf(How many column you want to move? ); scanf(%d,&n); MoveStr(s,n); printf(result: %s,s); printf(source: );void MoveStr(char *s, int

24、 n) char d,*p; int Lenth; Lenth=strlen(s); p=s+Lenth-1; d=*p; for(;ps;p-) *p=*(p-1); *p=d; n-; if (n) MoveStr(s,n); void MoveStr(char *s, int n)C語言程序設(shè)計技術(shù)(下)課件The C Programming Language第16講 結(jié)構(gòu)與聯(lián)合 The C Programming Language第16講一. 結(jié)構(gòu)1. 結(jié)構(gòu)體定義struct = ;一. 結(jié)構(gòu)例: struct date int year,month,day; ;例:例: struct

25、 student char name9,sex3; int age; struct date birthday; ;例:2. 結(jié)構(gòu)體變量說明(1) struct date int year,moth,day; ; struct date d1,d2;2. 結(jié)構(gòu)體變量說明(2) struct date int year,moth,day; d1,d2;(2) (3) struct int year,month,day; d1,d2;(3)3. 結(jié)構(gòu)體成員訪問 . 3. 結(jié)構(gòu)體成員訪問例1(P159例6-1). 結(jié)構(gòu)體在程序中的使用。 例1(P159例6-1). 結(jié)構(gòu)體在程序中的使用。 #incl

26、ude#include#includestruct student long num; char name20; char sex; float score; ;#includevoid main(void) struct student stu1; clrscr( ); stu1.num=200402L; strcpy(, “ZhangHong”); stu1.sex=f; void main(void) stu1.score=92.5f; printf(“num=%ld name=%sn”,stu1.num, ); printf(“sex=%c scor

27、e=%5.2f ”,stu1.sex, stu1.score); getch( ); stu1.score=92.5f;二. 結(jié)構(gòu)體與指針1. 結(jié)構(gòu)型指針變量說明 struct *如:struct student *p;二. 結(jié)構(gòu)體與指針2. 成員引用 (*指針變量) . 成員名或 指針變量 - 成員名2. 成員引用例2(P167例6-7).計算一組學生的平均成績和不及格人數(shù)。 例2(P167例6-7).計算一組學生的平均成績和不及格人數(shù)#include#includestruct student long num; char *name; char sex; float score; ;#i

28、ncludestruct student stu5= 200401L,Zhou ping,M,65.4, 200402L,Zhang ping,M,72.5, 200403L,Liu fang,F,95.5, 200404L,Cheng ling,F,87, 200405L,Wang ming,M,58.2, ;struct student stu5=void main(void) struct student *ps; void ave(struct student *ps); clrscr( ); ps=stu; ave(ps); getch( ); void main(void)void

29、 ave(struct student *ps) int count=0,i; float ave,sum=0; for(i=0; iscore; if (ps-score60) count+=1; void ave(struct student *ps) printf(s=%fn,sum); ave=sum/5; printf(ave=%fncount=%dn,ave,count); printf(s=%fn,sum);三. 聯(lián) 合 定義方法: union = ;三. 聯(lián) 合 如: union abc int i; char a,b; ;如:例3(P172例6-9). 分析程序運行結(jié)果。 例

30、3(P172例6-9). 分析程序運行結(jié)果。#includevoid main(void) union long i; int k; char c,s10; x;#include x.i=0 x12345678L ; printf(k=%xn,x.k); printf(c=%cn,x.c); printf(s=%xt%xt,x.s0,x.s1); printf(%xt%xn,x.s2,x.s3); x.i=0 x12345678L ;C語言程序設(shè)計技術(shù)(下)課件The C Programming Language第17講 順序文件 The C Programming Language第17講一

31、. 文件分類1. 按存取方式分類(1)順序文件 只能按順序讀取、改寫文件中的數(shù)據(jù)。若按讀方式打開文件,則只能讀取數(shù)據(jù),而不能修改數(shù)據(jù)。反之,若按寫方式打開文件,則只能寫數(shù)據(jù),而不能讀數(shù)據(jù)。 一. 文件分類(2)隨機文件 無論按何種方式打開文件,既能讀取數(shù)據(jù),也能修改數(shù)據(jù)。(2)隨機文件2. 按存儲格式分類(1)文本文件 這種文件在磁盤中存放時每個字符對應一個字節(jié),用于存放對應的ASCII碼。例如,數(shù)5678的存儲形式為:ASCII碼:00110101 00110110 00110111 00111000 十進制碼: 5 6 7 82. 按存儲格式分類(2)二進制文件 二進制的編碼方式來存放數(shù)據(jù)

32、。例如,數(shù)5678的存儲形式為:00010110 00101110只占二個字節(jié)。 (2)二進制文件二. 順序文件存取方法1. 定義文件指針變量 FILE *fp fp為文件型指針。二. 順序文件存取方法2. 打開文件 FILE *fopen (char *fname, char *mode) mode常用值: w: 寫文本文件 r: 讀文本文件 wb 寫二進制文件 rb 讀二進制文件 wb+ 隨機讀、寫二進制文件 rb+ 隨機讀、寫二進制文件2. 打開文件3. 關(guān)閉文件 fclose(fp);3. 關(guān)閉文件4. 輸出字符串 fputs(char *s, FILE *fp) 將串s輸出到文件fp

33、中4. 輸出字符串5. 讀取字符串 fgets(char *s, int n, FILE *fp) 從文件fp中讀取n-1個字符送到s中。讀到換行符(ASC碼為10)時,將自動結(jié)束讀取。5. 讀取字符串6. 格式化輸入與輸出(1)fscanf (fp,格式串,數(shù)據(jù))(2)fprintf (fp,格式串,數(shù)據(jù))6. 格式化輸入與輸出7. 檢測文件是否結(jié)束int feof(FILE *fp)文件結(jié)束時返回1,否則返回0。7. 檢測文件是否結(jié)束例1. 生成若干隨機數(shù)并存儲到磁盤中。例1. 生成若干隨機數(shù)并存儲到磁盤中。#include#include#includeint GetData(int d

34、);void DisplayData(int d,int n);void SaveData(int d,int n,char *fname);int LoadData(int *p,char *fname);#includevoid main(void) int n,d101; char s41; n=GetData(d); DisplayData(d,n); gets(s); SaveData(d,n,s); n=LoadData(d,s); if (n) DisplayData(d,n); void main(void)int GetData(int d ) int n,i; do pri

35、ntf(Input number of data: ); scanf(%d,&n); while(n1); for(i=1;in+1;i+) di=random(1000); return n; int GetData(int d )void SaveData(int d ,int n,char *fname) FILE *fp; int i; fp=fopen(fname,w); if (!fp) printf(save fail); return; void SaveData(int d ,int n,c for(i=1;in+1;i+) fprintf(fp,%d ,di); fclos

36、e(fp); for(i=1;in+1;i+)int LoadData(int *p,char *fname) FILE *fp; int n; fp=fopen(fname,r); if (!fp) printf(read fail); return 0; int LoadData(int *p,char *fnam n=0; while(!feof(fp) fscanf(fp,%d ,+p); n+; fclose(fp); return n; n=0;void DisplayData(int d ,int n) int i; for(i=1;in+1;i+) printf(%-6d,di

37、); if (i%10=0) printf(n); puts(n); void DisplayData(int d ,int C語言程序設(shè)計技術(shù)(下)課件The C Programming Language第18講 隨機文件 The C Programming Language第18講一. 二進制文件存取函數(shù) 1. 讀取數(shù)據(jù)原型:long fread(void *p, long size, long n, FILE *fp) 功能:按照二進制數(shù)據(jù)格式讀取n項數(shù)據(jù)(每項數(shù)據(jù)占size個字節(jié)),存儲到由指針p指向的存儲區(qū)中。函數(shù)返回實際讀取的數(shù)據(jù)項數(shù)。一. 二進制文件存取函數(shù) 1. 讀取數(shù)據(jù) 2.

38、 存儲數(shù)據(jù) 原型: long fread(void *p, long size, long n, FILE *fp) 功能:按照二進制數(shù)據(jù)格式將指針p指向的存儲區(qū)中n的n項數(shù)據(jù)存儲到文件中。函數(shù)返回實際存儲的數(shù)據(jù)項數(shù)。 2. 存儲數(shù)據(jù)例1. 生成一個二進制文件,然后修改其中的某一項。例1. 生成一個二進制文件,然后修改其中的某一項。#include#includeint GetData(int d );void DisplayData(int d ,int n);void Save(int d,int n,char *fname);int LoadData(int *p,char *fname

39、);int CorrectData(char *fname);void main(void) int n,d10001; char s41;#include n=GetData(d); DisplayData(d,n); printf(“Filename: ); gets(s); Save(d,n,s); if (!CorrectData(s) return; n=LoadData(d,s); if (n) DisplayData(d,n); n=GetData(d);int GetData(int d ) int n,i; scanf(%d,&n); for(i=1;in+1;i+) di=

40、random(1000); return n; int GetData(int d )void DisplayData(int d ,int n) int i; for(i=1;in+1;i+) printf(%d ,di); puts(n); void DisplayData(int d ,int void Save(int d ,int n,char *fname) FILE *fp; int i; fp=fopen(fname,wb); if (!fp) return; fwrite(&n,2,1,fp); for(i=1;in+1;i+) fwrite(&di,2,1,fp); fcl

41、ose(fp); void Save(int d ,int n,char int CorrectData(char *fname) char s21=Temp.txt; FILE *fpr,*fpw; int i,n,p,data,x; fpr=fopen(fname,rb); if (!fpr) return 0; fread(&n,2,1,fpr);int CorrectData(char *fname) fpw=fopen(s,wb); if (!fpw) fclose(fpr); return 0; printf(correct which item, new data= ); sca

42、nf(%d %d,&p,&data); if (pn) fcloseall( ); return 0; fpw=fopen(s,wb); fwrite(&n,2,1,fpw); for(i=1;ip & !feof(fpr);i+) fread(&x,2,1,fpr); fwrite(&x,2,1,fpw); fread(&x,2,1,fpr); fwrite(&data,2,1,fpw); fwrite(&n,2,1,fpw); for(i=p+1;in+1 & !feof(fpr);i+) fread(&x,2,1,fpr); fwrite(&x,2,1,fpw); fclose(fpr)

43、; fclose(fpw); for(i=p+1;in+1 & !feof(f fpr=fopen(s,rb); if (!fpr) return 0; fpw=fopen(fname,wb); if (!fpw) fclose(fpr); return 0; while(!feof(fpr) fread(&x,2,1,fpr); fwrite(&x,2,1,fpw); fpr=fopen(s,rb); fclose(fpr); fclose(fpw); return 1; fclose(fpr);int LoadData(int *p,char *fname) FILE *fp; int i

44、,n; fp=fopen(fname,rb); if (!fp) return 0; fread(&n,2,1,fp); for(i=1;in+1 & !feof(fp);i+) fread(+p,2,1,fp);int LoadData(int *p,char *fnam n=i-1; fclose(fp); return n; n=i-1;二. 隨機文件 1. 文件指針定位 原型: int fseek(FILE *fp,long offset,int whence) 功能:將文件指針移到由whence所確定的位置開始,偏移offset個字節(jié)的位置處。定位成功時函數(shù)返回0,否則返回非0值。二

45、. 隨機文件 1. 文件指針定位 whence: 0(或SEEK_SET) :文件首 1(或SEEK_CUR):當前位置 2(或SEEK_END):文件末尾 whence:例2. 修改二進制文件中的某一項。例2. 修改二進制文件中的某一項。int CorrectData(char *fname) FILE *fpr; int offset,n,p,data; fpr=fopen(fname,rb+); if (!fpr) return 0; fread(&n,2,1,fpr);int CorrectData(char *fname) printf(which item, new data= )

46、; scanf(%d %d,&p,&data); if (pn) fcloseall( ); return 0; printf(which item, new offset=(p-1)*2; fseek(fpr,offset,SEEK_SET); fwrite(&data,2,1,fpr); fclose(fpr); return 1; offset=(p-1)*2;例3. 分析下面程序的功能 例3. 分析下面程序的功能 #include#includevoid main(void) FILE *fp; int i,x;#include if (fp=fopen(d:intb1.dat,rb)

47、=NULL) printf(file can not open!n); exit(0); for(i=0;i3;i+) fseek(fp,2*i*sizeof(int),0); fread(&x,sizeof(int),1,fp); if (fp=fopen(d:intb1. fseek(fp,-2L*sizeof(int),SEEK_END); fread(&x,sizeof(int),1,fp); fseek(fp,-1L*sizeof(int),SEEK_END); fread(&x,sizeof(int),1,fp); fclose(fp); fseek(fp,-2L*sizeof(i

48、nt)C語言程序設(shè)計技術(shù)(下)課件The C Programming Language第19講 位運算與預處理命令The C Programming Language第19講一. 位運算1. 按位或 運算符為 |運算規(guī)則:0 | 0=0, 0 | 1=1, 1 | 0=1, 1 | 1=1一. 位運算 例1(P220例9-1). 設(shè)字符變量a=3,b=5,求 a | b。 例1(P220例9-1). 設(shè)字符變量a=3,b=5,2. 按位與 運算符為 &運算規(guī)則:0 & 0=0, 0 & 1=0, 1 & 0=0, 1 & 1=12. 按位與 例2(P221例9-2).設(shè)字符變量a=3,b=5,

49、求a & b。 & 例2(P221例9-2).設(shè)字符變量a=3,b=5,求a 3. 按位異或 運算符為:運算規(guī)則:0 0=0, 0 1=1, 1 0=1, 1 1=03. 按位異或 例3(P222例9-5). 設(shè)字符變量a=57,b=42,求 a b。 0 0 1 1 10 1 0 0 1 0 1 0 1 0 0 0 1 0 1 1 例3(P222例9-5). 設(shè)字符變量a=57,b=42,4. 位取反 運算符:運算規(guī)則:1=0, 0=1 4. 位取反 例4(P223例9-8).對有符號整型變量i = 100和無符號整型變量 j = 100分別進行取反操作。 0000 0000 0110 01

50、00 1111 1111 1001 1011i = -101 , j = 65435 例4(P223例9-8).對有符號整型變量i = 100和5. 移位 運算符:運算規(guī)則:將二進制數(shù)向左移位,右邊補0。5. 移位例5. 設(shè)a=60,b=135 求 a2,b1。a2=(0011 1100)22=(1111 0000)2=240b1=(1000 0111)21=(0000 1110)2=14例5. 設(shè)a=60,b=135 求 a2,b運算規(guī)則: 將二進制數(shù)位向右移動,最高位為時左邊補0, 最高位為時補1。6. 右移位例6. 設(shè)a=60,b=135 求 a2,b1。a2=(0011 1100)22

51、=(0000 1111)2=15b1=(1000 0111)21=(1100 0011)2=195例6. 設(shè)a=60,b=135 求 a2,b1。例7(P225例9-13). 從鍵盤輸入一個正整數(shù),輸出由811位構(gòu)成的數(shù)。例7(P225例9-13). 從鍵盤輸入一個正整數(shù),輸出由8#includevoid main(void) int num, mask,x; printf(Input a integer number: ); scanf(%d,&num);#include num = 8; mask = 15; x=num & mask; printf(result=%dn, x); num = 8; 二. 預處理命令 2. 文件包含(1) 絕對路徑查找#include 該命令表示在 TCINCLUDE 中去查找指定的文件,并將該文件添加到源文件中。 二. 預處理命令 2. 文件包含(2) 相對路徑查找 #include ”文件名” 先在當前目錄中查找文件,未找到時再到 TCINCLUDE 中去查找。 (2) 相對路徑查找 2. 宏定義 (1) 無參宏 語法:#define 字符串 如:#define PI 3.14 2. 宏定義 (2) 有參宏#define () 字符串

溫馨提示

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

評論

0/150

提交評論