c语言 指针讲义 复习资料_第1页
c语言 指针讲义 复习资料_第2页
c语言 指针讲义 复习资料_第3页
c语言 指针讲义 复习资料_第4页
c语言 指针讲义 复习资料_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、第十章 指针 (10学时)学习目的与要求:1 、理解地址和指针的概念;2 、重点掌握指针变量的定义和引用;3 、重点掌握指向数组的指针和通过指向数组的指针操纵数组;4 、重点掌握指向字符串的指针和通过指向字符串的指针操纵字符串 ; 5 、理解指向指针的指针、指针数组等概念。重点:1 、指针变量的定义和引用;2 、指向数组的指针和通过指向数组的指针操纵数组;3 、指向字符串的指针和通过指向字符串的指针操纵字符串第1讲知识归纳:1、地址和指针的概念:(1) 地址:内存区的每一个字节的编号 ;(2) 指针:一个变量的地址称为该变量的指针,即地址就是指针,指针就是地址;2、指向变量的指针变量:(1)

2、指针变量:是指专门用来存放变量地址的一类变量 ;(2) 注意区分指针和指针变量的概念;指针是地址;指针变量是存放地址的变量;平时所说的定义一个指针,实际上是指定义一个指针变量;3、指针变量的定义和引用:(1) 定义指针变量格式: 基类型 * 指针变量名 ;(2) 如何确定指针变量的类型?要定义的指针准备指向什么类型变量,该指针就是什么类型;(3) 如何让一个指针指向一个变量? 将变量的地址赋值给指针变量;& -取地址运算符;如 : int a =5 ;int * pa ;int pa = &a ;(4) 指针变量的引用:*-取内容运算符, 该运算符与指针变量结合,表示指针所指向的变量的内容;

3、如:printf (“ % d ,%dn “, * pa , a ) ;下面是错误的:int * pa ;printf (“ % d n “, * pa ) ;/一个指针在没有指向一个确切的存储空间时,是不能使用 * pa4、指针总结: int a = 5 ;int * pa =&a ;在定义指针,并指向某个变量后,我们可以得出如下结论:(1) *pa 等价于 a(2) pa 等价于 &a(3) & * pa 等价于 &a 、 pa(4) * &a 等价于 a基础训练(A)一、选择题1、已知:int *p,a;则语句“p=&a;”中的运算符“&”的含义是( )。A)位与运算 B)逻辑与运算 C

4、)取指针内容 D)取变量地址2、已知:double d;希望指针变量pd指向d,下面对指针变量pd的正确定义是 ( )。A)double pd; B)double &pd C)double *pd D)double *(pd)3、若x为整型变量,p是指向整型数据的指针变量,则正确的赋值表达式是( )。A)p=&x B)p=x C)*p=&x D)*p=*x二、填空题1、要使指针变量与变量之间建立联系,可以用运算符来建立指针变量与变量之间的联系。2、已知:int a=10,*p=&a;则“printf(%d,%dn,a,*p);”的输出结果是3、已知:float f1=3.2,f2,*pf1=&

5、f1;现在希望变量f2的值为3.2,可使用赋值语句或4、已知:int b=5,*p=&b;并且b的地址为4000,则“printf(%d,%d,p,*p);”的输出结果是 。三、阅读程序,回答问题。1、main() int var, *p;var=100; *p=&var;var=*p+10;printf(%d,var);运行结果:2、# include void prtv(int *x) printf(%dn,+*x);main() int a=25;prtv(&a);运行结果:能力提高(B)一、选择题1、已知:int a,*p=&a;则下列函数调用中错误的是( )。A)scanf(%d,&

6、a); B)scanf(%d,p);C)printf(%d,a); D)printf(%d,p);2、已知:int i=0,j=1,*p=&i,*q=&j;错误的语句是( )。A) i=*&j; B) p=&*&i; C)j=*p; D)i=*&q;3、函数的功能是交换变量x和y中的值,且通过正确调用返回交换的结果。能正确执行此功能的函数是( )。A)funa(int *x,int *y) int *p;*p=x; *x=*y; *y=*p;B)funb(int x,int y) int t;t=x; x=y; y=t;C)func(int *x,int *y) *x=*y; *y=*x;D)

7、fund(int *x,int *y) int t;t=*x; *x=*y; *y=t;二、阅读程序,写出运行结果1、# include main() int a,b;a=5;b=10;printf(before swap a=%d,b=%dn,a,b);swap(a,b);printf(after swap a=%d,b=%dn,a,b);swap(int x,int y) int temp;temp=x; x=y; y=temp;printf(in swap x=%d,y=%dn,x,y);运行结果:2、# include main() int a,b;a=5;b=10;printf(be

8、fore swap a=%d,b=%dn,a,b);swap(&a,&b);printf(after swap a=%d,b=%dn,a,b);swap(int *px,int *py) int temp;temp=*px; *px=*py; *py=temp;printf(in swap x=%d,y=%dn,*px,*py);运行结果:比较上面两个程序,试说明两者的区别?第2讲知识归纳:1、指针变量做实参:(1) 指针变量做实参,实质传的是指针所指向的变量的地址-即传地址调用;(2) 指针变量做实参 ,形参必须是指针,即通过形参指针操纵主调函数中的变量;2、指向数组的指针变量:(1) 定义

9、一个指向数组元素的指针变量的方法,与定义指向变量的指针变量相同;(2) 使指针指向数组首地址 :将数组名赋值给已定义的指针变量;使指针指向数组的某一元素: 将数组元素地址赋值给已定义的指针变量; 如:int arr 10 ;int * p ; /定义指针变量,类型与将要指向的数组类型一致;p = arr ; /p 指针指向 arr数组的首地址;等价于 p = & arr0;p = &a 9 ; / p 指针指向 arr数组的最后一个元素arr9 ;3、通过指针引用数组元素:int arr 10 ;int * p = arr ;在定义指针,并指向某个数组的首地址后,我们可以得出如下结论:(1)

10、(1) p + i =arr + i = &arr i ,均表示 arr数组的第 i 个元素的地址 ;指针变量加1 ,即在指针当前所指向的元素的地址基础上+ 一个数组元素的字节数 ;即 p + i*d /d是一个数组元素的字节数;(2) (2) *(p+i) = *(arr + i) = arri , 均表示 arr 数组的第 i 个元素;(3)数组元素的两种表示方法: 下标法: arr i , p i / 均表示arr数组的第 i 个元素;指针法: * ( p+i) , * (arr+i) /均表示arr数组的第 i 个元素;4、在使用指向数组的指针变量时,应注意的问题:int arr 10

11、 ; int * p = arr ;在定义指针,并指向某个数组的首地址后:(1) p + ; 正确 ;但 arr+ ; 不正确 ;因为 arr 表示数组名 ,是常量,不能执行 arr = arr + 1 ;(2) 要注意 指针变量的当前值;(3) ) ( * p ) + -表示p所指向的元素值加一 ;即 arr 0 + ;* p + 、* ( p + ) - 先取指针所指向空间的内容, 即 arr0 , 然后指针pa 下移一个存储空间, 指向 arr1 ;(4) * +pa -指针pa 先下移一个存储空间,然后取指针所指向空间的内容;基础练习(A)一、选择题1、已知:int a10,*p=a;

12、则下面说法不正确的是 ( )。A)p指向数组元素a0 B)数组名a 表示数组中第一个元素的地址C)int a10,*p=&a0;与上述语句等价 D)以上均不对2、已知:int a10=1,2,3,4,5,6,7,8,9,10,*p=a;则不能表示数组a中元素的表达式是 ( )。A)*p B)a10 C)*a D)ap-a二、填空题1、在C语言中,指针变量的值增1,表示指针变量指向下一个 ,指针变量中具体增加的字节数由系统自动根据指针变量的 决定。2、已知:int a5,*p=a;则p指向数组元素a0,那么p+1指向“ printf(%d,p);”的输出结果是200,那么:“ printf(%d

13、,p+1);”的输出结果是 。3、对数组元素的引用方法有两种: 。设int a10,*p=a;则对a3的引用可以是 。4、在C程序中,可以通过三种运算来移动指针: 、。5、设有如下定义:int a5=0,1,2,3,4,*p1=&a1,*p2=&a4;则p2-p1的值为 _ ,*p2-*p1的值为三、阅读程序,写出运行结果1、main() int a10,i,*p;*p=a;for (i=0; i10; i+)scanf(%d,&ai);for (;pa+10;p+)printf(%d,*p);执行程序,输入:0 1 2 3 4 5 6 7 8 9运行结果:2、main() int a10,*

14、p;p=&a0;for (;p=a; p-)printf(%d,*p);执行程序,输入:0 1 2 3 4 5 6 7 8 9运行结果:能力提高(B)一、选择题1、已知:int a=1,2,3,4,y,*p=&a1;则执行语句y=*p+;之后,变量y的值为 ( )。A) 3 B) 2 C) 1 D) 42、已知:int a=1,2,3,4,y,*p=&a0;则执行语句y=+(*p);之后,下面( )元素的值发生了变化。A) a0 B) a1 C) a2 D) 都没发生变化3、已知:int x=1,3,5,7,9,11,*ptr=x;则能够正确引用数组元素的语句是 ( )。A) x B) *(p

15、tr-) C) x6 D) *(-ptr)4、若有以下语句并且0=k6,则正确表示数组元素地址的语句是( )。int x=1,3,5,7,9,11,*ptr=x,k;A) x+ B) &ptr C) &ptrk D)&(x+1)5、已知:int a=1,2,3,4,5,6,*p=a;则值为3的表达式是 ( )。 .A) p+=2,*(p+) B) p+=2,*+p C) p+=3,*p+ D) p+=2,+*p6、若第一个printf语句的输出为194,则第二个printf语句的输出为( )。int a10,*p=a;printf(%x,p);printf(%x,p+9);A) 203 B)

16、212 C) 1a6 D)19d二、阅读程序,写出运行结果1、# include main() int a=1,2,3,4,5;int x,y,*p;p=&a0;x=*(p+2);y=*(p+4);printf(*p=%d,x=%d,y=%dn,*p,x,y);运行结果:2、# include main() int a=1,2,3,4,5,6;int *p;p=a;printf(%d,*p);printf(%d,*(+p);printf(%d,*+p);printf(%d,*(p-);p+=3;printf(%d,%dn,*p,*(a+3);运行结果:三、程序填空1、下面的程序实现从10个数中

17、找出最大值和最小值.int max,min;find_max_min(int *p,int n) int *q;max=min=*p;for (q= ; ; q+)if ( ) max=*q;else if ( ) min=*q;main() int i,num10;printf(input 10 numbers:n);for (i=0; i10; i+)scanf (%d,&numi);find_max_min(num,10);printf(max=%d,min=%dn,max,min);四、编程1、编写两个函数,分别完成一维数组的输入和输出.main() int a10;input(a,1

18、0);output(a,10);void input(int *p,int n)void output(int *p,int n)第3讲知识归纳:1、数组、指针和函数的结合应用:2、二维数组的地址问题: int a 34 = 1,2 ,3,4,5,6,7,8,9,10,11,12 ;int * p = a ;(1) (1) a -数组名表示数组的首地址 ; 等价于 *( a + 0 ) 、* a(2) (2) a i -表示数组的第 i行的行地址,即 第 i行第一个元素的地址;等价于 *( a + i ) 、* ( p + i ) ;(3) (3) &a i j -表示数组的第 i行 j 列元

19、素的地址; 等价于 *( a + i ) +j和 *( p + i ) +j(4) (4) a i j - 表示数组的第 i行 j 列元素;等价于 * ( *( a + i ) +j ) ;和 * ( *( p + i ) +j ) ;3、指向二维数组的行指针: int a 34 = 1,2 ,3,4,5,6,7,8,9,10,11,12 ;int ( * p )4 = a ;(1) (1) int ( * p )4 = a ;表示 p 是一个指向二维数组(一行有四个元素的)行地址的行指针;(2) p + 1 ; 行指针加 1 ,是加 一行元素的字节数的和;p = p + 1 ; 行指针从当前

20、行指向下一行;基础练习(A)一、选择题1、已知:int a34,*p=a;则p表示 ( )。A) 数组a的0行0列元素 B) 数组a的0行0的地址C) 数组a的0行首地址 D) 以上均不对2、已知:int a34,*p;若要指针变量p指向a00,正确的表示方法是 ( )。A) p=a B) p=*a C) p=*a D) p=a003、已知:double b23,*p=b,下面哪个不能表示数组b的0行0列元素 ( )。A) b00 B) *p C) *p0 D) *p4、设有说明int (*ptr)M;其中的标识符ptr是 ( )。A) M个指向整型变量的指针B) 指向M个整型变量的函数指针C

21、) 一个指向M个整型元素的一维数组的指针D) 具有M个指针元素的一维指针数组,每个元素都只能指向整型变量二、填空题1、已知:下面程序段中第一个printf语句的输出是200,则第二个printf语句的输出是 ,第三个printf语句输出是。int a34,*p=a;printf(%d,a);printf(%d,p);printf(%d,p+1);2、已知:int a23=1,2,3,4,5,6,*p=&a00;则表示元素a00的方法有指针法: ,数组名法: 。 *(p+1)的值为 。三、阅读程序,写出运行结果1、main() int a23=0,1,2,3,4,5,*p1,*p2;p1=a;

22、p2=&a00;printf(%d,%dn,p1,p2);printf(%d,%dn,*p1,*p2);printf(%d,%dn,p1+1,p2+1);printf(%d,%dn,*(p1+1),*(p2+1);假设数组a的首地址为3000,则运行结果为:能力提高(B)一、选择题1、已知:int i,x34;则不能把x11的值赋给变量i的语句是 ( )。A) i=*(*(x+1)+1) B) i=x11 C) i=*(*(x+1) D) i=*(x1+12、已知:static int a23=2,4,6,8,10,12;正确表示数组元素地址的是 ( )。A) *(a+1) B) *(a1+2

23、) C) a1+3 D) a00二、阅读程序,写出运行结果1、main() int a23=1,2,3,4,5,6;int m,*ptr;ptr=&a00;m=(*ptr)*(*(ptr+2)*(*(ptr+4);printf(%dn,m);2、main() int a34=1,3,5,7,9,11,13,15,17,19,21,13;int (*ptr)4; int sum=0,i,j;ptr=a;for (i=0;i3;i+)for (j=0;j2;j+)sum+=*(*(ptr+i)+j);printf(%dn,sum);运行结果:三、程序填空1、下面程序通过指向整型的指针将数组a34的

24、内容按3行*4列的格式输出,请给printf()填入适当的参数,使之通过指针p将数组元素按要求输出.int a34=1,2,3,4,5,6,7,8,9,10,11,12,*p=a;main() int i,j;for (i=0; i3; i+ )for (j=0; j4; j+ )printf(%4d, );第4讲知识归纳:1、指向字符串的指针变量:(1) 定义指向字符串的指针:char * 指针名 = 字符串 ;如 char * ps = “I am a teacher .” ;/这里是将 字符串的首地址存放在字符指针中,而不是将字符串中的字符存入指针;(2) 比较:char * ps =

25、“I am a teacher .” ; 分开: char *ps ;ps = “I am a teacher .” ; /因为 可以将字符串的首地址存放在指针中;char s 20 = “I am a teacher .” ; 分开: char s 20 ;s = “I am a teacher .” ; /因为 s 表示字符数组的首地址,是常量,不能在赋值号的左端,不能将字符串的首地址赋值给数组名;(3) 再比较:char s 20 ;scanf ( “%s” , s ) ; 变换:char * ps ;scanf ( “%s” , ps ) ; / 错在 字符指针没有指向任何存储空间,不

26、能给他输入字符串;改成:char s 20 , * ps ;ps = s ;scanf ( “%s” , ps ) ; /字符指针在没有指向一个确切的字符数组时,不能使用%s格式符,输入字符串;2、字符串指针作函数参数:传地址调用基础练习(A)一、选择题1、已知:char str=OK!;对指针变量ps的说明和初始化是( )。A) char ps=str; B) char *ps=str;C) char ps=&str; D) char *ps=&str;2、下面不正确的字符串赋值或赋初值的方式是( )。A) char *str; str=string;B) char str7=s,t,r,i

27、,n,g;C) char str10; str=string;D) char str1=string,str220; strcpy(str2,str1);3、已知:char b5,*p=b;则正确的赋值语句是 ( )。A) b=abcd; B) *b=abcd; C) p=abcd; D) *p=abcd4、已知:char s20=programming,*ps=s;则不能引用字母o的表达式是 ( )。A) ps+2 B) s2 C) ps2 D) ps+=2,*ps5、下列对字符串的定义中,错误的是( )。A) char str7=FORTRAN;B) char str=FORTRAN;C)

28、 char *str=FORTRAN;D) char str=F,O,R,T,R,A,N,0;6、已知:char c8=beijing,*s=c; int i;则下面的输出语句中,错误的是( )。A) printf(%sn,s); B) printf(%sn,*s);C) for (i=0; i7;i+) D) for (i=0; i7; i+)printf(%c,ci); printf(%c,si);7、已知:char s14=12; char *ptr;则执行下面语句后输出为 ( )。ptr=s1;printf(%cn,*(ptr+1);A) 字符2 B) 字符1 C) 字符2的地址 D)

29、 不确定二、阅读程序,写出运行结果1、# include main() char a=language;char *ptr=a;while (*ptr!=0) printf(%c,*ptr);ptr+;运行结果:2、#include main() char *str=abcde;printf(%c,*str);printf(%c,*str+);printf(%c,*+str);printf(%c,(*str)+);printf(%cn,+*str);运行结果:能力提高(B)一、选择题1、已知:char s10,*p=s;则在下列语句中,错误的语句是 ( )。A)p=s+5; B)s=p+s;

30、C)s2=p4; D)*p=s0;2、已知:char s100; int i=10;则在下列引用数组元素的语句中,错误的表示是 ( )。A)si+10 B)*(s+i) C)*(i+s) D)*(s+)+i3、已知:int i; char *s=a045+045b;执行语句“for ( i=0; *s+; i+) ;”之后,变量i的结果是 ( )。A)7 B)8 C)9 D)以上均是错误的4、已知:char *s=a089+089b;则执行语句“for(i=0;*s+; i+);”之后,变量i的结果是( )。A)7 B)8 C)9 D)1二、填空题1、已知:char *s1=abcde,*s2

31、=abc101+101de,*s3=abc089+980;则语句“printf(%st%st%sn,s1,s2,s3);”的结果是。2、若:char *s1=ChinabBeijingt,*s2=1230780x5,*s3=1230870xa;则语句“printf(%d,%d,%dn,strlen(s1),strlen(s2),strlen(s3);”的结果是三、阅读程序,写出运行结果1、# include # include main() char *p1=abc,*p2=ABC,str50=xyz;strcpy(str+2,strcat(p1,p2);printf(%sn,str);运行结

32、果:( )2、# include main() char a=Program,*ptr;for (ptr=a; ptra+7; ptr+=2)putchar (*ptr);运行结果:( )3、# include main() char a=language;char *ptr=a;while (*ptr) printf(%c,*ptr-32);ptr+;运行结果:LANGUAGE4、以下程序段的输出为 ( ) 。(选做)static char a=Basic;char *ptr;for (ptr=a; ptra+5; ptr+)printf(%sn,ptr);A) Basic B) c C)

33、B D) Basicasic ci asic sic sic asic Ic Basic c四、写出函数实现的功能1、已知函数定义如下:abcd ( char *s1,char *s2) while (*s2+=*s1+);函数abcd的功能是 ( ) 。A)串复制 B)求串长 C)串比较 D)串反向2、已知函数定义如下:int f(char *s) char *p=s;while (*p!=0) p+;return (p-s);函数f的功能是 ( )。A)串比较 B)求串长 C)串复制 D)以上均不对五、编程题1、写一个函数,求一个字符串的长度。在主函数中输入字符串,并输出字符串长度,用指针

34、法处理。第5讲知识归纳:1、 指针数组:(1) (1) 概念:一个数组,其元素均为指针类型数据,称为指针类型;指针数组中的每一个元素都相当于一个指针变量;(2) (2) 格式:类型名 * 数组名 常量 ;如 : char * str3 = “China”,”America”,”Canada” ;/三个字符串的首地址依次放入 str0 , str1 , str2 中;2、 指向指针的指针:(1) (1) 概念:专门用来存放指针变量地址的指针变量,称为指向指针的指针;(2) (2) 定义格式: int a =5 ;int * pa = & a ;int * * pp = &pa ;printf (

35、 “%d , %d , %d n” , a , *pa , *pp) ;所以,a , *pa , *pp等价;3、指针的总结和综合应用基础练习(A)一、选择题1、已知:double *p6;它的含义是( )。A)p是指向duoble型变量的指针 B)p是double型数组C)p是指针数组 D)p是数组指针2、已知:char *aa2=abcd,ABCD;则以下说法正确的是( )。A)aa数组元素的值分别是abcd和ABCDB)aa是指针变量,它指向含有两个数组元素的字符型一维数组C)aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址D)aa数组的两个元素中各自存放了字符a和A的地

36、址3、与定义“int *p4”等价的是( )。A)int p4 B)int *p C)int *(p4) D)int (*p)4二、填空题1、对于“int a4;”可理解为数组a有4个元素,每个元素都是整型数据,那么,对于“int *a4;”的理解就是数组a有4个元素,每个元素都是,又因为指针变量可指向与其同类型的变量,故每个元素都只能指向 变量。2、访问变量的方式有两种:和 ,指向指针的指针采用的是“二级间址”方法。现定义一个指向指针数据的指针变量,其基类型是字符型:能力提高(B)一、阅读程序,写出运行结果1、# include main() char *name5,a120,a220,a3

37、20,a420,a520;int i;gets(a1); gets(a2); gets(a3); gets(a4); gets(a5);name0=a1; name1=a2; name2=a3; name3=a4; name4=a5;for (i=0; i5; i+)printf(%sn,namei);运行程序,输入:aababcabcdabcde(表示回车) 运行结果:2、# include main() char *name5=Follow me,BASIC,Great Wall,FORTRAN,Computer;char *p=name;int i;for (i=0; i5; i+)pr

38、intf(%sn,*p+);运行结果:3、main() int a5=2,4,6,8,10,*p,*k;p=a;k=&p;printf(%d,*p+);printf(%dn,*k);运行结果:二、程序填空(选做)1、下面程序完成的功能是对一批程序设计语言名从小到大进行排序并输出。# include # include sort ( char *book, int num) int i,j;char *temp;for (j=1; j0) temp=booki;booki=booki+1;booki+1=temp;main() int i;char *book=FORTRAN,PASCAL,BA

39、SIC,COBOL,C,Smalltalk; sort( );for ( i=0; i6; i+ )printf(%sn,booki);链接二级考试一、一、选择题1、 若有以下调用语句,则不正确的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, int a)main() int a50,n;fun(n, &a9); (2000年4月)2、 设已有定义: char *st=how are you; 下列程序段中正确的是( )

40、 。A) char a11, *p; strcpy(p=a+1,&st4);B) char a11; strcpy(+a, st);C) char a11; strcpy(a, st);D) char a, *p; strcpy(p=&a1,st+2); (2000年4月)3、 有如下说明int a10=1,2,3,4,5,6,7,8,9,10,*p=a; 则数值为9的表达式是( )。A) *P+9 B) *(P+8) C) *P+=9 D) P+8 (2000年9月)4、 有如下程序main() char s=”ABCD”, *P;for(p=s+l; ps+4; p+) printf (“

41、%sn”,p); 该程序的输出结果是( ) 。A) ABCD B) A C) B D) BCDBCD B C CDCD C D DD D(2000年9月)5、 有如下程序main() char ch25=“6937”,”8254”,*p2;int i,j,s=0;for(i=0;i2;i+) pi=chi;for(i=0;i0;j+=2)s=10*s+pij-0;printf(“%dn”,s);该程序的输出结果是( )。A) 69825 B) 63825 C) 6385 D) 693825 (2000年9月)6、 下列程序段的输出结果是( ) 。A) 2 1 4 3 B) 1 2 1 2 C)

42、 1 2 3 4 D) 2 1 1 2void fun(int *x, int *y) printf(“%d , %d”, *x, *y); *x=3; *y=4; main() int x=1,y=2;fun(&x,&y);printf(“%d %d”,x, y);(2001年4月)7、 下列程序的输出结果是( )。A) 非法 B)a4的地址 C)5 D)3main() char a10=9,8,7,6,5,4,3,2,1,0,*p=a+5; printf(“%d”,*-p); (2001年4月)8、 下列程序的运行结果是( )。A) 6 3 B) 3 6 C) 编译出错 D) 0 0voi

43、d fun(int *a, int *b) int *k;k=a; a=b; b=k;main() int a=3, b=6, *x=&a, *y=&b;fun(x,y);printf(“%d %d”, a, b); (2001年4月)9、 下面程序的输出结果是( )。A) 0 B) 1 C) 10main() int a =1,2,3,4,5,6,7,8,9,0,*p;p=a;printf(“%dn”,*p+9); (2001年4月) D) 910、 以下程序的输出结果是( ) 。char cchar(char ch)if(ch=A&ch=Z) ch=ch-A+a;return ch;mai

44、n() char s=ABC+abc=defDEF,*p=s;while(*p) *p=cchar(*p);p+;printf(%sn,s);A) abc+ABC=DEFdef B) abc+abc=defdefC) abcaABCDEFdef D) abcabcdefdef(2002年4月)11、 以下程序调用findmax函数返回数组中的最大值( ) 。findmax(int *a,int n) int *p,*s;for(p=a,s=a; p-as B) *p*s C) apas D) p-ap-s(2002年4月)12、 若有以下定义和语句:int s45,(*ps)5;ps=s;则对

45、s数组元素的正确引用形式是( )。A) ps+1 B) *(ps+3) C) ps02 D) *(ps+1)+3(2002年4月)13、 以下程序的输出结果是( ) 。#include #include main() char b18=abcdefg,b28,*pb=b1+3;while (-pb=b1) strcpy(b2,pb);printf(%dn,strlen(b2);A) 8 B) 3 C) 1 D) 7(2002年4月)14、 若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是( )。A) p=q; B) *p=*q; C) n=*q; D) p=n;(200

46、2年9月)15、 有以下程序void fun(char *c,int d) *c=*c+1;d=d+1;printf(“%c,%c,”,*c,d);main() char a=A,b=a;fun(&b,a); printf(“%c,%cn”,a,b);程序运行后的输出结果是( )。A)B,a,B,a B) a,B,a,B C) A,b,A,b D) b,B,A,b(2002年9月)16、 有以下程序#include main() char *p=“abcdeOfghjik0”;printf(“%dn”,strlen(p);程序运行后的输出结果是( ) 。A) 12 B) 15 C) 6(200

47、2年9月)17、 有以下程序void ss(char *s,char t) while(*s) if(*s=t) *s=t-a+A;s+;main() char str1100=“abcddfefdbd”,c=d;ss(str1,c); printf(“%sn”,str1); D) 5程序运行后的输出结果是( ) 。A) ABCDDEFEDBDC) abcAAfefAbA(2002年9月) B) abcDDfefDbD D) Abcddfefdbd18、有以下程序int *f(int *x,int *y) if(*x*y)return x;elsereturn y;main() int a=7

48、,b=8,*p,*q,*r;执行后输出结果是( )。A) 7,8,8 B) 7,8,7(2003年4月) C) 8,7,7 D) 8,7,819、有以下程序main() char *s=one,two,three,*p;p=s1;printf(%c,%sn,*(p+1),s0);执行后输出结果是( )。A) n,two B) t,one(2003年4月)20、有以下程序main() int x8=8,7,6,5,0,0,*s;s=x+3printf(%dn,s2);执行后输出结果是( ) 。A) 随机值 B) 0(2003年4月) C)w,one D) o,two C) 5 D) 621、 阅读以下函数fun(char *s1,char *s2) int i=0;while(s1i=s2i& s2i!=0)i+;return(s1i= & s2i!=0);此函数的功能是( ) 。A) 将s2所指字符串赋给s1B) 比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0C) 比较s1和s2所指字符串是否相等,若相等,函数值为1,

温馨提示

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

评论

0/150

提交评论