c语言指针上课实用教案_第1页
c语言指针上课实用教案_第2页
c语言指针上课实用教案_第3页
c语言指针上课实用教案_第4页
c语言指针上课实用教案_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、本章(bn zhn)主要内容:l 地址和指针的概念(ginin)l 对指针变量的操作和运算l 指针变量作为函数参数和函数返回值l 数组与指针l 指向函数的指针第1页/共78页第一页,共79页。 10.1指针变量的概念(ginin)与使用 10.1.1 变量与地址程序程序(chngx)中中: int i; float k; 内存中每个字节有一个编号内存中每个字节有一个编号(bin ho)-地址地址.2000200120022005内存内存02003ik 编译或函数调用时为其分配内存单元编译或函数调用时为其分配内存单元变量变量是对程序中数据是对程序中数据存储空间的抽象存储空间的抽象第2页/共78页

2、第二页,共79页。10.1.2 地址与指针变量地址与指针变量(binling)指针变量指针变量(binling)的值:其他变量的值:其他变量(binling)的地址的地址.2000200420062005整型变量i10变量i_pointer2001200220032000变量(binling)i的地址指针(zhzhn)i_pointer的值i的值第3页/共78页第三页,共79页。10.1.3 指针变量指针变量(binling)的定义的定义一般形式:一般形式: 存储类型存储类型 基类型基类型 *指针变量指针变量(binling)名;名;合法(hf)标识符指针变量本身(bnshn)的存储类型指针的

3、目标变量的数据类型表示定义指针变量不是*运算符例 int *p1,*p2; float *q ; static char *name;注意:1、int *p1, *p2; 与 int *p1, p2;2、指针变量名是p1,p2 ,不是*p1,*p23、指针变量只能指向定义时所规定类型的变量4、指针变量定义后,变量值不确定,应用前必须先赋值第4页/共78页第四页,共79页。10.1.4 指针变量的赋值取地址运算符 &变量名/表示变量的地址单目运算符,优先级: 2 结合性:自右向左例如(lr): int a; int *p = &a;取指针所代表地址的内容运算符 *单目运算符,优先

4、级: 2 结合性:自右向左例如(lr): *p = 1;第5页/共78页第五页,共79页。 指针变量(binling)的初始化 一般形式:存储类型 数据类型 *指针名=初始地址值;例 int i; int *p=&i;变量必须(bx)已说明过类型应一致例 int *p=&i; int i;例 int i; int *p=&i; int *q=p;用已初始化指针(zhzhn)变量作初值例 main( ) int i; static int *p=&i; . ()不能用auto变量的地址去初始化static型指针第6页/共78页第六页,共79页。例 main( )

5、int i=10; int *p; *p=i; printf(“%d”,*p); 危险(wixin)!例 main( ) int i=10,k; int *p; p=&k; *p=i; printf(“%d”,*p); 指针变量必须(bx)先赋值,再使用.2000200420062005整型变量i10指针变量p200120022003随机第7页/共78页第七页,共79页。 10.1.5 对指针变量的操作 直接访问:按变量地址存取变量值 间接访问:通过(tnggu)存放变量地址的变量去访问变量例例 i=3; -直接直接(zhji)访问访问指针变量指针变量.2000200420062005

6、int i10int *i_pointer = &i20012002200320003例例 *i_pointer=20; -间接间接(jin ji)访问访问20第8页/共78页第八页,共79页。指针变量.2000200420062005整型变量i10变量i_pointer2001200220032000整型变量k例 1: int i, k, *i_pointer = &i; i = k;-直接访问(fngwn) k=*i_pointer; -间接访问(fngwn)10第9页/共78页第九页,共79页。 指针变量与其所指向(zh xin)的变量之间的一些等价关系例: int i,

7、 *i_pointer=&i;3i2000i_pointer*i_pointeri*i_pointer&ii_pointeri=3;*i_pointer=33i2000i_pointer*i_pointeri*i_pointer&ii_pointeri=3;*i_pointer=3第10页/共78页第十页,共79页。例2:int i=100, x, *p, *q;x = i;p =&i;x = *p; x = *(&i); q = &x;*q = i;*q = *p;第11页/共78页第十一页,共79页。u 指针变量定义时指定的基类型, 应该与指

8、针变量使用时指向(zh xin)的变量类型相同。u u main()u float x=2.0, y;u int *p; u p=&x; u y=*p; u printf(%f,y);u u 修改(xigi)为float *p;第12页/共78页第十二页,共79页。练习(linx)1请选出正确(zhngqu)的程序段()。A) int *p; B) int *s, k;scanf(“%d”,p); *s=100; C) int *s, k; D) int *s, k;char *p, c; char *p, e;s=&k; s=&k;p=&c; p=&e

9、;*p= a ; s=p; *s=1;第13页/共78页第十三页,共79页。例例3 : 通过通过(tnggu)指针变量访问整指针变量访问整型变量型变量Main() int a,b; int *pointer_1,*pointer_2; a=100;b=10; pointer_1=&a; pointer_2=&b; printf(“%d,%d”,a,b); printf(“%d,%d”,*pointer_1,*pointer_2);运行运行(ynxng)结果结果: 100,10 100,10定义定义(dngy)两个指两个指针变量针变量代表两个指针变代表两个指针变量分别指向的两量分

10、别指向的两个变量个变量第14页/共78页第十四页,共79页。零指针与空类型零指针与空类型(lixng)指针指针零指针:零指针:(空指针空指针)定义定义:指针变量值为零指针变量值为零表示:表示: int * p=0; p指向地址指向地址(dzh)为为0的单元,的单元,系统保证该单元不作它用系统保证该单元不作它用表示指针变量值没有意义表示指针变量值没有意义#define NULL 0int *p=NULL:l p=NULL与未对与未对p赋值不同赋值不同l 用途用途: l 避免指针变量的非法引用避免指针变量的非法引用l 在程序中常在程序中常(zhngchng)作为状态比较作为状态比较 例例 int

11、*p; . while(p!=NULL) . 第15页/共78页第十五页,共79页。例例4 输入输入(shr)两个数,并使其从大到小输出两个数,并使其从大到小输出main() int *p1,*p2,*p,a,b; scanf(%d,%d,&a,&b); p1=&a; p2=&b; if(ab) p=p1; p1=p2; p2=p; printf(a=%d,b=%dn,a,b); printf(max=%d,min=%dn,*p1,*p2);运行运行(ynxng)结果:结果:a=5,b=9 max=9,min=5.指针变量指针变量p1 指针变量指针变量p2000

12、2008200220042006 指针变量指针变量p2 整型变量整型变量b 整型变量整型变量a5200692008200620082006第16页/共78页第十六页,共79页。 10.1.7 指针变量(binling)作为函数参数地址传递 特点:共享内存,“双向”传递swap(int x,int y) int temp; temp=x; x=y; y=temp;main() int a,b; scanf(%d,%d,&a,&b); if(ab) swap(a,b); printf(n%d,%dn,a,b);例例5 5 将数从大到小输出将数从大到小输出(shch)(shch).5

13、变量变量a 变量变量b(main)95运行运行(ynxng)结果:结果:5, 9值值传传递递59 变量变量temp 变量变量y 变量变量x(swap)95第17页/共78页第十七页,共79页。swap(int *p1, int *p2) int p; p=*p1; *p1=*p2; *p2=p;main() int a,b; scanf(%d,%d,&a,&b); if(ab)swap(&a,&b); printf(n%d,%dn,a,b);.20002002.59整型变量整型变量a 整型变量整型变量b(main)(swap)指针指针p1指针指针p2整型整型p5

14、95例例6 6 将数从大到小输出将数从大到小输出(shch)(shch)地址(dzh)传递运行运行(ynxng)结果:结果:9,5地址传递也是值传递,只是值是地址地址传递也是值传递,只是值是地址20002002第18页/共78页第十八页,共79页。swap(int *p1, int *p2) int *p; *p=*p1; *p1=*p2; *p2=*p;main() int a,b; int *pointer_1,*pointer_2; scanf(%d,%d,&a,&b); pointer_1=&a; pointer_2=&b; if(ab) swap(po

15、inter_1,pointer_2); printf(n%d,%dn,a,b);编译编译(biny)警告!警告!结果不对!结果不对!int x;int *p=&x;x;例7 将数从大到小输出(shch).20002008200A200220042006200C200E2010.59整型变量a 整型变量b(main)指针pointer_1指针pointer_22000200220002002COPY(swap)指针p1指针p2指针p*假设(jish)2000指针变量在使用前必须赋值!第19页/共78页第十九页,共79页。main() int *p1,*p2,*p,a,b; scanf(%

16、d,%d,&a,&b); p1=&a; p2=&b; if(ab) p=p1; p1=p2; p2=p; printf(a=%d,b=%dn,a,b); printf(max=%d,min=%dn,*p1,*p2);void main( ) void swap(int *p1,int *p2);int *p1,*p2,a,b;scanf(%d,%d,&a,&b);p1=&a;p2=&b;if(ab) swap(p1,p2);printf(max=%d,min=%dn,*p1,*p2);void swap(int *p1,int *

17、p2) int *temp;temp=p1;p1=p2;p2=temp;第20页/共78页第二十页,共79页。10.1.6 指针的算术运算:指针的算术运算:指针算术运算的结果依赖于指针的基类型指针算术运算的结果依赖于指针的基类型pi 指向地址指向地址 p id (i为整型数,为整型数,d为为p指向的指向的变量所占字节数变量所占字节数)p+, p-, p+i, p-i, p+=i, p-=i等等若若p1与与p2指向同一数组,指向同一数组,p1-p2=两指针间元素两指针间元素(yun s)个数个数(p1-p2)/dp1+p2 无意义无意义第21页/共78页第二十一页,共79页。例 p指向(zh x

18、in)float数,则 p+1 p+1 4例 p指向(zh xin)int型数组,且p=&a0; 则p+1 指向(zh xin)a1例 int a10; int *p=&a2; p+; *p=1;例 int a10; int *p1=&a2; int *p2=&a5; 则:p2-p1=3;a0a1a2a3a4a5a6a7a8a9a数组数组pp+1,a+1p+i,a+ip+9,a+9第22页/共78页第二十二页,共79页。指针变量的关系指针变量的关系(gun x)运算运算若若p1和和p2指向同一数组,则指向同一数组,则p1p2 表示表示p1指的元素在后指的元素在后

19、p1=p2 表示表示p1与与p2指向同一元素指向同一元素若若p1与与p2不指向同一数组,比较无意义不指向同一数组,比较无意义p=NULL或或p!=NULL第23页/共78页第二十三页,共79页。 10.2 指针与数组 指向(zh xin)数组元素的指针变量例 int array10; int *p; p=&array0; / p=array;或 int *p=&array0;或 int *p=array;array0array1array2array3array9.整型指针整型指针p&array0p数组名是表示数组首地址数组名是表示数组首地址(dzh)的地址的地址(dz

20、h)常量常量第24页/共78页第二十四页,共79页。数组元素数组元素(yun s)表示方法表示方法a0a1a2a3a9.aa+9a+1a+2地址地址元素元素下标法下标法a0a1a2a9a0a1a2a3a9.pp+9p+1p+2地址地址元素元素指针法指针法*p*(p+1)*(p+2)*(p+9) 变址运算符变址运算符ai *(a+i)ai pi *(p+i) *(a+i)*a*(a+1)*(a+2)*(a+9)p0p1p2p9第25页/共78页第二十五页,共79页。a0a1a2a3a4例例8 8 数组元素数组元素(yun s)(yun s)的引用方法的引用方法main() int a5,*pa,

21、i; for(i=0;i5;i+) ai=i+1; pa=a; for(i=0;i5;i+) printf(*(pa+%d):%dn,i,*(pa+i); for(i=0;i5;i+) printf(*(a+%d):%dn,i,*(a+i); for(i=0;i5;i+) printf(pa%d:%dn,i,pai); for(i=0;i5;i+) printf(a%d:%dn,i,ai);12345pa第26页/共78页第二十六页,共79页。1.int a=1,2,3,4,5,6,7,8,9,10,*p=a,i; 数组元素地址的正确数组元素地址的正确(zhngqu)表示:表示:(A)&

22、;(a+1) (B)a+ (C)&p (D)&pi 数组名是地址数组名是地址(dzh)常量常量p+,p- ()a+,a- ()a+1, *(a+2) ()2.若有定义若有定义(dngy):int *p;则下列各选项中,不同于则下列各选项中,不同于*p=*p+1;的是()的是()A*p+; B.+*p; C.*p+=1; D.+(*p) ;练习练习2第27页/共78页第二十七页,共79页。例 void main() int a =5,8,7,6,2,7,3; int y,*p=&a1; y=(*-p)+; printf(“%d ”,y); printf(“%d”,a0);

23、 输出输出(shch):5 6pp58762730123456a例例9 9 注意注意(zh y)(zh y)指针变量指针变量的运算的运算6第28页/共78页第二十八页,共79页。main() int i,*p,a7; p=a; for(i=0;i7;i+) scanf(%d,p+); printf(n); for(i=0;i7;i+,p+) printf(%d,*p);例例10 10 注意注意(zh y)(zh y)指针的指针的当前值当前值p=a;pp58762730123456apppppp指针变量可以指针变量可以(ky)指到数组后的内存单元指到数组后的内存单元第29页/共78页第二十九页,

24、共79页。数组名作函数参数数组名作函数参数数组名代表数组名代表(dibio)数组首元素的地址,用数组数组首元素的地址,用数组名作函数实参时名作函数实参时,是地址传递只是将实参数组首元是地址传递只是将实参数组首元素的地址传递给形参。这样,实参数组和形参数素的地址传递给形参。这样,实参数组和形参数组就共占同一段内存单元组就共占同一段内存单元第30页/共78页第三十页,共79页。实参实参形参形参数组名数组名指针变量指针变量数组名数组名指针变量指针变量数组名数组名数组名数组名指针变量指针变量指针变量指针变量v一维数组名作函数参数,实参与一维数组名作函数参数,实参与(cny)形参的合法定形参的合法定义和

25、使用形式:义和使用形式:第31页/共78页第三十一页,共79页。void inv(int x, int n) int t,i,j,m=(n-1)/2; for(i=0;i=m;i+) j=n-1-i; t=xi; xi=xj; xj=t; main() int i,a10=3,7,9,11,0,6,7,5,4,2; inv(a,10); printf(The reverted array :n); for(i=0;i10;i+) printf(%d,ai); printf(n);例例11 将数组将数组a中的中的n个整数按相反顺序个整数按相反顺序(shnx)存放存放 ij 3 7 9 11 0

26、6 7 5 4 20 1 2 3 4 5 6 7 8 9ijijijji11760594723实参与实参与(cny)形参均用数组形参均用数组m=4第32页/共78页第三十二页,共79页。v用array这样的形式表示array是一维数组名,中方括号内的数值并无实际作用。vvoid select_sort(int array10,int n) /指定元素个数与实参数组相同(xin tn)vvoid select_sort(int array,int n) /不指定元素个数vvoid select_sort(int array5,int n) /指定元素个数与实参数组不同注注 意意第33页/共78页

27、第三十三页,共79页。例例12 12 将数组将数组a a中的中的n n个整数按相反顺序个整数按相反顺序(shnx)(shnx)存放存放 void inv(int *x, int n) int t,*p,*i,*j,m=(n-1)/2; i=x; j=x+n-1; p=x+m; for(;i=p;i+,j-) t=*i; *i=*j; *j=t; main() int i,a10=3,7,9,11,0,6,7,5,4,2; inv(a,10); printf(The reverted array :n); for(i=0;i10;i+) printf(%d,ai); printf(n);实参用数

28、组实参用数组, ,形参用指针形参用指针(zhzhn)(zhzhn)变量变量37911067542a0a1a2a3a4a5a6a7a8a9xp=x+ma数组60711594723ijijijjiji第34页/共78页第三十四页,共79页。例例13 13 将数组将数组a a中的中的n n个整数按相反顺序个整数按相反顺序(shnx)(shnx)存放存放 void inv(int *x, int n) int t,*i,*j,*p,m=(n-1)/2; i=x; j=x+n-1; p=x+m; for(;i=p;i+,j-) t=*i; *i=*j; *j=t; main() int i,a10,*p

29、=a; for(i=0;i10;i+,p+) scanf(%d,p); p=a; inv(p,10); printf(The reverted array :n); for(p=a;pa+10;p+) printf(%d,*p);实参与形参均用指针(zhzhn)变量第35页/共78页第三十五页,共79页。例例14 14 将数组将数组a a中的中的n n个整数个整数(zhngsh)(zhngsh)按相反顺序存放按相反顺序存放 void inv(int x, int n) int t,i,j,m=(n-1)/2; for(i=0;i=m;i+) j=n-1-i; t=xi; xi=xj; xj=t

30、; main() int i,a10,*p=a; for(i=0;i10;i+,p+) scanf(%d,p); p=a; inv(p,10); printf(The array has been reverted:n); for(p=arr;parr+10;p+) printf(%d ,*p);实参用指针实参用指针(zhzhn)(zhzhn)变量变量, ,形参用数组形参用数组第36页/共78页第三十六页,共79页。10.4字符串与指针(zhzhn)(1) 用字符数组存放一个字符串例15main() char string=I love China!; printf(%sn,string);

31、(2) 用字符指针(zhzhn)指向一个字符串main() char*string=I love China!; printf(%sn,string); 第37页/共78页第三十七页,共79页。例16:#include void main() char s1=abcde,s25=m,n,p,q,0;char *ps=s1;printf(“%s %sn”,s1,s2);printf(“%sn”,ps); printf(“%c%c%c%c n”, s21 , s22 , s13, s14 ); printf(“%c%c%c%c n”, *ps ,*(ps+2) ,*(ps+4),*ps+2);ab

32、cde0mnpq0S1S2psabcde or mnpqabcdenpdeacec第38页/共78页第三十八页,共79页。#include main()char a=I am a Boy.,B20,*p1,*p2; int i; p1=a;p2=B; for (;*p1!=0;p1+,p2+) *p2 =*p1; *p2=0; printf(string a is:%sn,a); printf(string B is:); for(i=0;Bi!=0;i+) printf(%c,Bi); printf(n);例17:将字符串a复制(fzh)为字符串b第39页/共78页第三十九页,共79页。10

33、.4.2 字符串指针(zhzhn)作函数参数例18#include void copy_string(char from, char to) int i=0;while(fromi!=0)toi=fromi;i+;toi=0;main()char a=I am a teacher.;char b=you are a student.;printf(string a=%snstring b=%sn,a,b);copy_string(a,b);printf(string a=%snstring b=%sn,a,b); 第40页/共78页第四十页,共79页。练习(linx)31. void swap

34、(char *x,char *y) char t; t=*x; *x=*y; *y=t; main() char s1=”abc”, s2=”123”; swap(s1,s2); printf(“%s,%sn”,s1,s2); 程序执行后的输出结果是 A)123,abc B) abc,123 C)1bc,a23 D) 321,cba 2.若有以下调用语句(yj),则不正确的fun函数的首部是()。A) void fun(int m, int x) B) void fun(int s, int h41)C) void fun(int p, int *s) D) void fun(int n, i

35、nt a)main() int a50,n;fun(n, &a9);第41页/共78页第四十一页,共79页。v一级指针变量与一维数组的关系一级指针变量与一维数组的关系vint *p 与与 int q10 v数组名是指针(地址)常量数组名是指针(地址)常量(chngling)vp=q; p+i 是是qi的地址的地址v数组元素的表示方法数组元素的表示方法:下标法和指针法,下标法和指针法, 即若即若p=q, 则则 pi qi *(p+i) *(q+i) v形参数组实质上是指针变量,即形参数组实质上是指针变量,即int q int *qv在定义指针变量(不是形参)时,不能把在定义指针变量(不是

36、形参)时,不能把int *p 写写成成int p;v系统只给系统只给p分配能保存一个指针值的内存区分配能保存一个指针值的内存区(一般一般2字节);而给字节);而给q分配分配2*10字节的内存区字节的内存区第42页/共78页第四十二页,共79页。如:建立一份学生档案,对每一个学生至少需要如:建立一份学生档案,对每一个学生至少需要以下以下(yxi)一些信息。一些信息。学号(unsigned no)姓名(xngmng)(char name20)性别(char sex)年龄(int age)成绩(chngj)(float score)地址(char addr30)第43页/共78页第四十三页,共79页

37、。C C程序可将上述程序可将上述(shngsh)(shngsh)数据的集合定义为一种结构数据的集合定义为一种结构体类型:体类型: struct student unsigned num; char name20; char sex; int age; float score; char addr30;第44页/共78页第四十四页,共79页。一、结构体定义(dngy)的一般形式: 结构结构(jigu)(jigu)的定义和的定义和初始化初始化struct 结构(jigu)体名 成员表列 ; 成员表列的写法:类型标识符 成员名第45页/共78页第四十五页,共79页。例例 struct student

38、 int num; char name20; char sex; int age; float score; char addr30; ; namenumsexagescoreaddr2字节2字节20字节1字节4字节30字节.结构体类型定义描述(mio sh)结构的组织形式,不分配内存结构(jigu)体类型定义的作用域第46页/共78页第四十六页,共79页。注注意意(zh y):1.1.这只是这只是(zhsh)(zhsh)定义一种类型的方法,定义一种类型的方法,尚未定义变量。尚未定义变量。2.struct 2.struct 关键词关键词( (保留字保留字) ),表示定义,表示定义一种一种(y

39、zhn(y zhn) )结构体类型。结构体类型。第47页/共78页第四十七页,共79页。1. 1. 先定义先定义(dngy)(dngy)结构体类型再定义结构体类型再定义(dngy)(dngy)结构体变量结构体变量有三种方法可用来定义结构(jigu)体变量:例:例: struct student int num; char name20; char sex; int age; float score; char addr30;二、结构二、结构(jigu)变量的定义变量的定义struct student x1, x2; 类型标识符第48页/共78页第四十八页,共79页。例:例:struct stu

40、dent int num; char name20; char sex; int age; char addr30; x1, x2; 成员成员(chngyun)表列表列 变量名表列;变量名表列;2. 2. 在定义结构体类型在定义结构体类型(lixng)(lixng)的同时定义变量:的同时定义变量:定义定义(dngy)(dngy)形式形式 struct struct 结构体结构体名名第49页/共78页第四十九页,共79页。定义形式定义形式(xngsh) struct(xngsh) struct 成员表列成员表列 变量名表列;变量名表列;不出现结构体类型名不出现结构体类型名3. 3. 直接直接(z

41、hji)(zhji)定义结构类型变定义结构类型变量量如如:struct int num char name20; char sex; int age; char addr30; x1, x2;第50页/共78页第五十页,共79页。 1. 类型名与变量名是不同(b tn)的概念 2. 允许成员(chngyun)名又为另一个已定义的结构型变量 3. 每一个成员的作用如同(rtng)该类型的变量 4. 成员名与程序中的变量名可相同但意义不同几点说明几点说明: :类型类型: :不分配内存不分配内存; 变量变量: :分配内存分配内存类型类型: :不能赋值、存取、运算不能赋值、存取、运算; ; 变量变量:

42、 :可以可以第51页/共78页第五十一页,共79页。struct date int month;int day;int year;struct studentint num; char name20; char sex; int age; struct date birthday; char addr30; x1, x2;例:结构例:结构(jigu)体的嵌套定义体的嵌套定义 x1或x2num namesex agebirthdaymonthdayyearaddr第52页/共78页第五十二页,共79页。结构结构(jigu)(jigu)的初始化的初始化 struct student x1=8906

43、, Li Ming , M, 85.5;一、先定义(dngy)结构,在定义(dngy)结构变量时对每个成员赋初值如:如:struct student unsigned No;char name20;char sex;float score;;第53页/共78页第五十三页,共79页。二、结构二、结构(jigu)(jigu)定义与变量定义及初始化合二定义与变量定义及初始化合二为一:为一: struct exp int a; float b; char yn8; x=1234, 56. 7, test; 但不能这样但不能这样(zhyng)写:写: struct exp int a=1234; flo

44、at b=56.7; char yn8=test; x;第54页/共78页第五十四页,共79页。11.1.3 11.1.3 访问结构访问结构(jigu)(jigu)成员成员 如:如:x1x1为为struct studentstruct student型变量型变量(binling)(binling),则,则 x1.No: x1.No: 表示表示x1x1的学号的学号 : : 表示表示x1x1的名字的名字 访问结构访问结构(jigu)变量实质上是引用其成员变量实质上是引用其成员一、圆点运算符一、圆点运算符有两种运算符可访问结构成员有两种运算符可访问结构成员第55页/共78

45、页第五十五页,共79页。注注意意(zh y):1. 1. 只能用变量的成员,不可用结构变量只能用变量的成员,不可用结构变量名直接名直接(zhji)(zhji)运算。运算。2. 2. 每一个成员的作用与其同类型的简单变每一个成员的作用与其同类型的简单变量量(binling)(binling)的引用相同。的引用相同。第56页/共78页第五十六页,共79页。二、箭头二、箭头(jintu)(jintu)运算运算符:符: 例:例:struct student char name 10; char sex; int age; float score; char addr20; x1;struct stud

46、ent p;第57页/共78页第五十七页,共79页。则p为结构(jigu)指针变量,它可用来存放student型变量的地址令 p=&x1; 则 p为x1的首地址(dzh).namesexaddrpx1agescore访问结构访问结构(jigu)成员:成员:pname 表示x1的姓名;page 表示x1的年龄;pname 等价于 (*p).namepage 等价于 (*p).age第58页/共78页第五十八页,共79页。 小结:小结: 引用结构变量中的成员有三种方法:引用结构变量中的成员有三种方法: (2) 用指针(zhzhn)变量 (p).成员名 (p).num (3) 用指向(zh

47、xin)运算符成员名 p num (1) 结构(jigu)体变量名.成员名 x1.num注意注意:指针变量指针变量p必须是结构指针型,必须是结构指针型,且有p=&x1;第59页/共78页第五十九页,共79页。第十六周上机题(3,4)1. P101 第5题2.以下程序把一个十进制数转换成二进制数,并把此二进制数和每一位放在一维数组b中,然后(rnhu)输出b数组。(注意:二进制数的最低位放在数组的第一个元素中,用指针来实现) 第60页/共78页第六十页,共79页。第十七周(3,4)1.请编一个函数fun(int *a,int n,int *odd,int *even),函数的功能是分别求

48、出数组中所有奇数之和以及所有偶数(u sh)之和。形参n给了数组中数据的个数:利用指针odd返回奇数之和,利用指针even返回偶数(u sh)之和。2.教材p168 3(1)(2)第61页/共78页第六十一页,共79页。第十七周(1,2)1.实验(shyn)教材p73 3(5) 2.教材p168 3(1)(2)第62页/共78页第六十二页,共79页。教材(jioci)p168 3(1)#include#includevoid main()int k=0;char a80,b80,c80=0,*p,*q;p=a;q=b;gets(a);gets(b);while( )if( ) ck=*p;el

49、se ck=*q;p+; ; k+;if(*p!=0) strcat(c,p);else strcat(c,q);puts(c);*p!=0&*q!=0*p*qq+第63页/共78页第六十三页,共79页。教材(jioci)p168 3(2)#includevoid main()int a11,x,i;printf(input 10 integers:n);for(i=1; ;i+)scanf(%d, );printf(input x:);scanf(%d,&x);*a=x;i=10;while(x!=*(a+i) _ if( ) printf(%6d position is:%

50、3dn,x,i);else printf(%6d Not bee found !n,x);i-;&aii0 i11 第64页/共78页第六十四页,共79页。教材( jioci)P101 第5题#include double Fib(int n) double a;if (n=0)a=0;elseif(n=1)a=1; elsea=Fib(n-1)+Fib(n-2);return a;main()int n;printf(请输入请输入(shr)n的值的值:);scanf(%d,&n);printf(Fib(%d)=%lfn,n,Fib(n);第65页/共78页第六十五页,共79页

51、。给出年月日,计算该日是该年的第几天?要求(yoqi)写出int sum_day(int month,int day)计算日期函数int leap(int year) 判断闰年函数int leap(int year) int a;if(year%400=0|(year%100!=0&year%4=0) a=1;else a=0;return a;第66页/共78页第六十六页,共79页。int sum_day(int month,int day) int days;switch(month)case 1: days=day; break; case 2: days=31+day; bre

52、ak; case 3: days=31+28+day; break; case 4: days=31*2+28+day; break; case 5: days=31*2+30+28+day; break; case 6: days=31*3+30+28+day; break; case 7: days=31*3+30*2+28+day; break; case 8: days=31*4+30*2+28+day; break; case 9: days=31*5+30*2+28+day; break; case 10: days=31*5+30*3+28+day; break; case 11

53、: days=31*6+30*3+28+day; break; case 12: days=31*6+30*4+28+day; break; return days;第67页/共78页第六十七页,共79页。main() int month,day,year;printf(输入(shr)年、月、日:);scanf(%d%d%d,&year,&month,&day);if(leap(year)=1&month2) printf(该日是该年%dn,sum_day(month,day)+1);else printf(该日是该年的%dn,sum_day(month,day

54、);第68页/共78页第六十八页,共79页。实验(shyn)教材P(73)3(5)#include double f(double x,int n) int i; double f=1,t=1;for(i=1;i=2*n;i=i+2)t=-t*x*x/(i+1)*i);f=f+t; return f;main() int n; double x;printf(Input x,n:);scanf(%lf%d,&x,&n);printf(y=%lfn,f(x,n)/(f(x+2.3,n)+f(x-3.2,n+3);第69页/共78页第六十九页,共79页。实验(shyn)教材p71 16题#include int factorsum(int n) int index,sum; sum=1; /*1是因子*/ for (index=2;index=n/2;index+) if (n%index=0) sum+=index

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论