版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、The C Programming LanguageC語(yǔ)言程序設(shè)計(jì)技術(shù)(下)The C Programming LanguageC語(yǔ)言程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語(yǔ)句返回。2. 函數(shù)值3. 函數(shù)調(diào)用 ();例如: c=2*max(13, 25) m=max(a, max(b,c)3. 函數(shù)調(diào)用說(shuō)明:(1) 調(diào)用函數(shù)前,應(yīng)對(duì)函數(shù)原型進(jìn)行聲明(2) 實(shí)參的個(gè)數(shù)必
2、須與虛參個(gè)數(shù)相同,類型必須匹配(3) 實(shí)參可以是一個(gè)表達(dá)式,虛參只能是變量(4) 當(dāng)虛參是一個(gè)指針或數(shù)組時(shí),實(shí)參與虛參的值雙向傳遞說(shuō)明:(5) 函數(shù)不能嵌套定義,但可嵌套調(diào)用(6) 函數(shù)的實(shí)參類型與虛參類型不相同時(shí)將實(shí)參轉(zhuǎn)換為虛參的類型(7) 函數(shù)的返回值與函數(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)用 在一個(gè)子函數(shù)中調(diào)用另一個(gè)函數(shù)稱為函數(shù)嵌套調(diào)用 二. 函數(shù)嵌套調(diào)用例2(P125例4-14).從鍵盤輸入一正整數(shù)limit(limit=6),驗(yàn)證從6到n之間的所有
4、偶數(shù)都可以分解為兩個(gè)奇素?cái)?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) /* 判斷一個(gè)數(shù)是否為素?cái)?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; /* 判斷一個(gè)數(shù)是否為素?cái)?shù) */C語(yǔ)言程序設(shè)計(jì)技術(shù)(下)課件The C Programming Language第12講 函數(shù)(2) The C Programming Language第12講一. 函數(shù)遞歸調(diào)用 在一個(gè)函數(shù)中,如果直接或
6、間接調(diào)用自己,則稱為遞歸調(diào)用。如:int f(int n) if (n1) return 0; return f(n-1)+n; 一. 函數(shù)遞歸調(diào)用例1. 逆序輸出一個(gè)整數(shù)的各位數(shù)字。 例1. 逆序輸出一個(gè)整數(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ù)外部定義的變量稱為全局變量。二. 局部變量和全局變量說(shuō)明: (1) 局部變量只在函數(shù)內(nèi)部起作用,函數(shù)結(jié)束時(shí),所占內(nèi)存空間被釋放(2) 全局變量在定義它的后面任一個(gè)函數(shù)中都起作用說(shuō)明: (3) 全局變量與局部變量同名時(shí),使用局部變量。(4) 函數(shù)的虛參視同局部變量(3) 全局變量與局部變量同名時(shí),使用局部變量。例2(P113例4-7). 分析程序運(yùn)行結(jié)果。例2(P113例4-7). 分析程序運(yùn)行結(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個(gè)整型數(shù),尋找其最大值和最小值。例3(P126例4-15). 輸入100個(gè)整型
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語(yǔ)言程序設(shè)計(jì)技術(shù)(下)課件The C Programming Language第13講 指針(1) The C Programming Language第13講一. 指針變量1. 指針概念與定義 表示某個(gè)變量所在內(nèi)存地址的變量稱為指針變量,簡(jiǎn)稱為指針。指針變量的說(shuō)明方法: *;一. 指針變量例: int a,*p,*p1=&a,*p2=p1; p,p1,p2都是指向整型數(shù)據(jù)變量的指針變量,其中p1,p2已指向變量a。例: char *s; s 是指向字符型數(shù)據(jù)變量的指針。 例:2. 指針運(yùn)算符(1) & 取變量的地址 例 p=
11、&a2. 指針運(yùn)算符(2) * 取出或改變指針?biāo)赶虻淖兞恐?。?int *p,a; a=10; p=&a; *p=*p+2; printf(%d,a);(2) *(3) + 指針可以加上一個(gè)整型量,以便指向另一個(gè)變量。 例: int d11,*p=&d4,*q; p+=3,q=p-2;(3) +(4) - 兩個(gè)同類型的指針可以進(jìn)行減法運(yùn)算。 例:int d100,*p1,*p2,m; p1=d; p2=&d8; m=p2-p1; m的值等于p1與p2相距的整型變量的個(gè)數(shù),即m=8。(4) -3. 說(shuō)明(1) 指針的類型與其代表的變量的類型必須相同。例:int *p,i; float *pf
12、,f; p=&i是合法的 而p=&f是非法的3. 說(shuō)明(2) 指針必須先賦值后使用。例如:int *p;*p=*p+2;是非法的。(2) 指針必須先賦值后使用。(3) 數(shù)組名及函數(shù)名可代表其所在內(nèi)存的開(kāi)始地址。(4) 函數(shù)調(diào)用中的虛參使用指針時(shí),將雙向傳遞變量的值。(3) 數(shù)組名及函數(shù)名可代表其所在內(nèi)存的開(kāi)始地址。例1(P146例5-11). 交換兩個(gè)變量的值。例1(P146例5-11). 交換兩個(gè)變量的值。#includevoid main(void) void swap(int *x, int *y); int i,j; printf(輸入兩個(gè)整數(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. 將三個(gè)數(shù)排序。例2. 將三個(gè)數(shù)排序。#includevoid main(void) void sort(int *q1,int *q2,int *q3); int a,b,c; printf(輸入三個(gè)整數(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語(yǔ)言程序設(shè)計(jì)技術(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ù)組首地址指針說(shuō)明方法: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)指針說(shuō)明方法 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ù)組中的每個(gè)元素。 例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語(yǔ)言程序設(shè)計(jì)技術(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ù)與指針一個(gè)函數(shù)可以返回一個(gè)指針值。二. 函數(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、每一個(gè)字符循環(huán)向右移動(dòng)若干位。 例3 將字符串中的每一個(gè)字符循環(huán)向右移動(dòng)若干位。 #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語(yǔ)言程序設(shè)計(jì)技術(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)體變量說(shuō)明(1) struct date int year,moth,day; ; struct date d1,d2;2. 結(jié)構(gòu)體變量說(shuō)明(2) struct date int year,moth,day; d1,d2;(2) (3) struct int year,month,day; d1,d2;(3)3. 結(jié)構(gòu)體成員訪問(wèn) . 3. 結(jié)構(gòu)體成員訪問(wèn)例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)型指針變量說(shuō)明 struct *如:struct student *p;二. 結(jié)構(gòu)體與指針2. 成員引用 (*指針變量) . 成員名或 指針變量 - 成員名2. 成員引用例2(P167例6-7).計(jì)算一組學(xué)生的平均成績(jī)和不及格人數(shù)。 例2(P167例6-7).計(jì)算一組學(xué)生的平均成績(jī)和不及格人數(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). 分析程序運(yùn)行結(jié)果。 例
30、3(P172例6-9). 分析程序運(yùn)行結(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語(yǔ)言程序設(shè)計(jì)技術(shù)(下)課件The C Programming Language第17講 順序文件 The C Programming Language第17講一
31、. 文件分類1. 按存取方式分類(1)順序文件 只能按順序讀取、改寫文件中的數(shù)據(jù)。若按讀方式打開(kāi)文件,則只能讀取數(shù)據(jù),而不能修改數(shù)據(jù)。反之,若按寫方式打開(kāi)文件,則只能寫數(shù)據(jù),而不能讀數(shù)據(jù)。 一. 文件分類(2)隨機(jī)文件 無(wú)論按何種方式打開(kāi)文件,既能讀取數(shù)據(jù),也能修改數(shù)據(jù)。(2)隨機(jī)文件2. 按存儲(chǔ)格式分類(1)文本文件 這種文件在磁盤中存放時(shí)每個(gè)字符對(duì)應(yīng)一個(gè)字節(jié),用于存放對(duì)應(yīng)的ASCII碼。例如,數(shù)5678的存儲(chǔ)形式為:ASCII碼:00110101 00110110 00110111 00111000 十進(jìn)制碼: 5 6 7 82. 按存儲(chǔ)格式分類(2)二進(jìn)制文件 二進(jìn)制的編碼方式來(lái)存放數(shù)據(jù)
32、。例如,數(shù)5678的存儲(chǔ)形式為:00010110 00101110只占二個(gè)字節(jié)。 (2)二進(jìn)制文件二. 順序文件存取方法1. 定義文件指針變量 FILE *fp fp為文件型指針。二. 順序文件存取方法2. 打開(kāi)文件 FILE *fopen (char *fname, char *mode) mode常用值: w: 寫文本文件 r: 讀文本文件 wb 寫二進(jìn)制文件 rb 讀二進(jìn)制文件 wb+ 隨機(jī)讀、寫二進(jìn)制文件 rb+ 隨機(jī)讀、寫二進(jìn)制文件2. 打開(kāi)文件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個(gè)字符送到s中。讀到換行符(ASC碼為10)時(shí),將自動(dòng)結(jié)束讀取。5. 讀取字符串6. 格式化輸入與輸出(1)fscanf (fp,格式串,數(shù)據(jù))(2)fprintf (fp,格式串,數(shù)據(jù))6. 格式化輸入與輸出7. 檢測(cè)文件是否結(jié)束int feof(FILE *fp)文件結(jié)束時(shí)返回1,否則返回0。7. 檢測(cè)文件是否結(jié)束例1. 生成若干隨機(jī)數(shù)并存儲(chǔ)到磁盤中。例1. 生成若干隨機(jī)數(shù)并存儲(chǔ)到磁盤中。#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語(yǔ)言程序設(shè)計(jì)技術(shù)(下)課件The C Programming Language第18講 隨機(jī)文件 The C Programming Language第18講一. 二進(jìn)制文件存取函數(shù) 1. 讀取數(shù)據(jù)原型:long fread(void *p, long size, long n, FILE *fp) 功能:按照二進(jìn)制數(shù)據(jù)格式讀取n項(xiàng)數(shù)據(jù)(每項(xiàng)數(shù)據(jù)占size個(gè)字節(jié)),存儲(chǔ)到由指針p指向的存儲(chǔ)區(qū)中。函數(shù)返回實(shí)際讀取的數(shù)據(jù)項(xiàng)數(shù)。一. 二進(jìn)制文件存取函數(shù) 1. 讀取數(shù)據(jù) 2.
38、 存儲(chǔ)數(shù)據(jù) 原型: long fread(void *p, long size, long n, FILE *fp) 功能:按照二進(jìn)制數(shù)據(jù)格式將指針p指向的存儲(chǔ)區(qū)中n的n項(xiàng)數(shù)據(jù)存儲(chǔ)到文件中。函數(shù)返回實(shí)際存儲(chǔ)的數(shù)據(jù)項(xiàng)數(shù)。 2. 存儲(chǔ)數(shù)據(jù)例1. 生成一個(gè)二進(jìn)制文件,然后修改其中的某一項(xiàng)。例1. 生成一個(gè)二進(jìn)制文件,然后修改其中的某一項(xiàng)。#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;二. 隨機(jī)文件 1. 文件指針定位 原型: int fseek(FILE *fp,long offset,int whence) 功能:將文件指針移到由whence所確定的位置開(kāi)始,偏移offset個(gè)字節(jié)的位置處。定位成功時(shí)函數(shù)返回0,否則返回非0值。二
45、. 隨機(jī)文件 1. 文件指針定位 whence: 0(或SEEK_SET) :文件首 1(或SEEK_CUR):當(dāng)前位置 2(或SEEK_END):文件末尾 whence:例2. 修改二進(jìn)制文件中的某一項(xiàng)。例2. 修改二進(jìn)制文件中的某一項(xiàng)。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語(yǔ)言程序設(shè)計(jì)技術(shù)(下)課件The C Programming Language第19講 位運(yùn)算與預(yù)處理命令The C Programming Language第19講一. 位運(yùn)算1. 按位或 運(yùn)算符為 |運(yùn)算規(guī)則:0 | 0=0, 0 | 1=1, 1 | 0=1, 1 | 1=1一. 位運(yùn)算 例1(P220例9-1). 設(shè)字符變量a=3,b=5,求 a | b。 例1(P220例9-1). 設(shè)字符變量a=3,b=5,2. 按位與 運(yùn)算符為 &運(yùn)算規(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. 按位異或 運(yùn)算符為:運(yùn)算規(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. 位取反 運(yùn)算符:運(yùn)算規(guī)則:1=0, 0=1 4. 位取反 例4(P223例9-8).對(duì)有符號(hào)整型變量i = 100和無(wú)符號(hào)整型變量 j = 100分別進(jìn)行取反操作。 0000 0000 0110 01
50、00 1111 1111 1001 1011i = -101 , j = 65435 例4(P223例9-8).對(duì)有符號(hào)整型變量i = 100和5. 移位 運(yùn)算符:運(yùn)算規(guī)則:將二進(jìn)制數(shù)向左移位,右邊補(bǔ)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運(yùn)算規(guī)則: 將二進(jìn)制數(shù)位向右移動(dòng),最高位為時(shí)左邊補(bǔ)0, 最高位為時(shí)補(bǔ)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). 從鍵盤輸入一個(gè)正整數(shù),輸出由811位構(gòu)成的數(shù)。例7(P225例9-13). 從鍵盤輸入一個(gè)正整數(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; 二. 預(yù)處理命令 2. 文件包含(1) 絕對(duì)路徑查找#include 該命令表示在 TCINCLUDE 中去查找指定的文件,并將該文件添加到源文件中。 二. 預(yù)處理命令 2. 文件包含(2) 相對(duì)路徑查找 #include ”文件名” 先在當(dāng)前目錄中查找文件,未找到時(shí)再到 TCINCLUDE 中去查找。 (2) 相對(duì)路徑查找 2. 宏定義 (1) 無(wú)參宏 語(yǔ)法:#define 字符串 如:#define PI 3.14 2. 宏定義 (2) 有參宏#define () 字符串
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度托盤租賃與供應(yīng)鏈金融結(jié)合合同范本3篇
- 二零二五年度昌平區(qū)食堂員工激勵(lì)與績(jī)效考核合同3篇
- 2025年度汽車租賃與品牌合作推廣合同范本3篇
- 二零二五年度城市綠化工程承包合同14篇
- 2025年度線上線下聯(lián)動(dòng)大型促銷活動(dòng)合作合同3篇
- 民政局2025版二零二五年度離婚協(xié)議書范本使用說(shuō)明4篇
- 2025年度綠色建筑項(xiàng)目鋼管腳手架環(huán)保材料供應(yīng)合同2篇
- 2025年在線借貸借款合同
- 房地產(chǎn)融資與貸款
- 2025年定制家居加工合同
- 項(xiàng)目前期選址分析報(bào)告
- 急性肺栓塞搶救流程
- 《統(tǒng)計(jì)學(xué)-基于Python》 課件全套 第1-11章 數(shù)據(jù)與Python語(yǔ)言-時(shí)間序列分析和預(yù)測(cè)
- 《形象價(jià)值百萬(wàn)》課件
- 紅色文化教育國(guó)內(nèi)外研究現(xiàn)狀范文十
- 中醫(yī)基礎(chǔ)理論-肝
- 小學(xué)外來(lái)人員出入校門登記表
- 《土地利用規(guī)劃學(xué)》完整課件
- GB/T 25283-2023礦產(chǎn)資源綜合勘查評(píng)價(jià)規(guī)范
- 《汽車衡全自動(dòng)智能稱重系統(tǒng)》設(shè)計(jì)方案
- 義務(wù)教育歷史課程標(biāo)準(zhǔn)(2022年版)
評(píng)論
0/150
提交評(píng)論