《C语言习题课(指针).ppt》由会员分享,可在线阅读,更多相关《C语言习题课(指针).ppt(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、习题课习题课(函数指针)(函数指针)定义定义含义含义int i;i是整型变量是整型变量 int*p;p是指向整型数据的指针变量是指向整型数据的指针变量 int aN;a是整型数组,它有是整型数组,它有N个整型元素个整型元素int*pN;p是指针数组,它由是指针数组,它由N个指向整型数据的个指向整型数据的指针元素组成指针元素组成 int f();f是返回值是整型的函数是返回值是整型的函数int *p();p是返回一个指针的函数,该指针指向整是返回一个指针的函数,该指针指向整型数据型数据 int(*p)();p是指向函数的指针变量,该函数返回整是指向函数的指针变量,该函数返回整型数据型数据 int
2、*p;p是指针的指针变量,它指向一个指向整是指针的指针变量,它指向一个指向整型数据的指针变量型数据的指针变量一、有关指针的数据类型一、有关指针的数据类型1、指指针针变变量量a所所指指的的字字符符串串长长度度为为(),这这个个长长度是可以用度是可以用strlen(a)测出来的。测出来的。char*a=“nMy Name is”wang fei”.n”;(1)26 (2)27 (3)28 (4)24 (5)232、下下面面程程序序的的作作用用是是,将将两两个个变变量量中中的的值值互互换换,请检查程序是否正确,如不正确的,请改正。请检查程序是否正确,如不正确的,请改正。#include void m
3、ain()int a=3,b=4;int *p1,*p2,*p;p1=&a,p2=&b;p=p1;p1=p2;p2=p;printf(“a=%d,b=%dn”,a,b);这里改为:这里改为:int*p1,*p2,p;这里改为:这里改为:p=*p1;*p1=*p2;*p2=p;3、已设、已设p1和和p2为指针变量,且已指向同一个整为指针变量,且已指向同一个整 型数组中的元素,型数组中的元素,a是一个整型变量,问下面是一个整型变量,问下面 哪一个语句不能正确执行哪一个语句不能正确执行?(1)a=*p1 (2)a=*p1+*p2 (3)a=*p1-*p2 (4)p1=a-p24、有一个二维数组、有一
4、个二维数组a34,2行行3列元素的正确表列元素的正确表 示方法为()。示方法为()。(1)&a23 (2)a2+3 (3)*(a+2)+3 (4)*(a2+3)5、若有语句、若有语句:int a=4,*p=&a;下面均代表地址的下面均代表地址的一组选项是一组选项是:1)a,p,&*a 2)*&a,&a,*p 3)&a,p,&*p 4)*&p,*p,&a6、以下程序段的输出结果为、以下程序段的输出结果为:char a=“Program”,*ptr;ptr=a;for(;ptra+7;ptr+=2)putchar(*ptr);1)Program 2)Porm 3)有语法错误有语法错误;4)Por7
5、、下面说明不正确的是:、下面说明不正确的是:1)int*a4;3)float(*p)();2)int*p;4)char*(*a);8、以下程序段的输出结果为:、以下程序段的输出结果为:#include void main()int s=1,2,3,4,5,6,7,8,9,*p;p=s;*(p+5)=22;p+;printf(%d,%dn,*p,*(p+4);输出结果是:输出结果是:2,229、下列程序的输出结果是:下列程序的输出结果是:#include void main()int a5=2,4,6,8,10,*p,*k;p=a;k=&p;printf(%d,*(p);printf(%dn,*
6、k);A)4 4 B)2 2 C)2 4D)结果错误结果错误10、写出下面程序的运行结果。、写出下面程序的运行结果。#include stdio.h#include string.hvoid main()char a30=nice to meet you!;int b;b=strlen(a)-9;strcpy(a+b,you);printf(%sn,a);运行结果:运行结果:nice to you!11、下列程序的输出结果是多少?、下列程序的输出结果是多少?#include void fun(int*a,int*b)int k;k=5;*a=k;*b=*a+k;void main()int*a
7、,*b,x=10,y=15;a=&x;b=&y;fun(a,b);printf(%d,%dn,*a,*b);printf(%d,%dn,x,y);运行结果:运行结果:5,105,1012、以下程序段的输出结果是、以下程序段的输出结果是()#include void main()int a10=9,8,7,6;int*p;p=a;printf(%d,%dn,*p,*(p+2);运行结果:运行结果:9,713、已有变量定义和函数调用语、已有变量定义和函数调用语句:句:int a=25;print_value(&a);下面函数的正确输出结果是下面函数的正确输出结果是()。void print_val
8、ue(int*x)printf(%dn,+(*x);A)23 B)24 C)25 D)2614、阅读下面程序,输出结果是多少?、阅读下面程序,输出结果是多少?#include stdio.hvoid main()int c6=1,2,3,4,5,6;int*p;p=c;printf(%d,*+p);p=p+3;printf(%dn“,*p-);运行结果:运行结果:2,515、阅读下面程序,则程序的输出结果是多少、阅读下面程序,则程序的输出结果是多少?#include void main()int i;char*p;char*name=Ann,Hare,Jack,Mary;printf(n St
9、udentss names are:n);for(i=2;i4;i+)p=name+i;printf(%sn,*p);运行结果:运行结果:JackMary16、写出程序的运行结果。、写出程序的运行结果。#include#include void fun(char*s)int i;char a10=opqrst;for(i=0;ai!=0;i+)*(s+i)=ai;void main()char*p,a=abcdef;p=a;fun(p);printf(%s,p);运行结果:运行结果:opqrst17、写出程序的运行结果。、写出程序的运行结果。#include#include void fun(
10、char*s)char a10;strcpy(a,opqrst);s=a;void main()char*p,a=abcdef;p=a;fun(p);printf(%s,p);运行结果:运行结果:abcdef18、写出程序的运行结果、写出程序的运行结果#include void fill(char*p)p=opqrst;void main()char t=abcdef;fill(t);printf(%s,t);运行结果:运行结果:abcdef19、写出程序的运行结果、写出程序的运行结果#include void fun(char*s)s=“opqrst;void main()char*p=ab
11、cdef;fun(p);printf(%s,p);运行结果:运行结果:abcdef20、写出程序的运行结果、写出程序的运行结果#include void main()char*p=BOOL,OPK,H,SP;int i;for(i=3;i=0;i-,i-)printf(%c,*pi);printf(n);运行结果:运行结果:SO#include void main()char*month13=january,february,march,april,may,june,july,august,september,october,november,decenber;int n;printf(inp
12、ut month:);scanf(%d,&n);printf(%sn,*(month+n-1);编一个程序,输入月份号,输出该月份的编一个程序,输入月份号,输出该月份的英文月名。英文月名。有有n个整数,使前面各数个整数,使前面各数顺序向后移顺序向后移m个位置,最后个位置,最后m个数变成最前面个数变成最前面m个数。个数。#include void input(int*p,int n)int i;printf(请输入%d个整数:,n);for(i=0;in;i+)scanf(%d,p+i);void output(int*p,int n)int i;for(i=0;i=p;h-)for(i=0;i
13、m;i+)t=*(h+i);*(h+i)=*(h+i+1);*(h+i+1)=t;void main()int m,a10;input(a,10);output(a,10);printf(请输入要把后面多少个整数移动到前面?);scanf(%d,&m);move(a,10,m);output(a,10);有一字符串,包含有一字符串,包含n个字符,个字符,写一函数,将此字符串中从第写一函数,将此字符串中从第m个个字符开始的全部字符复制成为另一字符开始的全部字符复制成为另一个字符串。个字符串。#include#define M 5/从第个字符开始复制(可以行更改)/*定义函数:把指针head处开头
14、的字符串从第m个字符开始复制到指针cpy开头的字符数组*/char*stringcpy(char*head,int m,char*cpy)char*h,*c;/定义两个工作指针int i=0;h=head;c=cpy;/工作指针分别指向源字符串和目标字符串while(i=m-1)h=head+i;if(*h=0)break;i+;/这个循环是为了把指针h指向第m个字符while(*h!=0)*c=*h;c+;h+;/这个循环是从第个字符开始逐个字符进行复制*c=*h;/复制源字符串末尾的字符0return cpy;/给函数返回目标字符串首地址void main()char c181,c281;
15、/c1是源字符串,c2是目标字符串printf(请输入源字符串:n);gets(c1);/输入源字符串printf(目标字符串是:n);puts(stringcpy(c1,M,c2);/输出目标字符串有有N个人围成一圈,顺序排号,从第一个人围成一圈,顺序排号,从第一个人开始报数(从一到三报数),凡报到三个人开始报数(从一到三报数),凡报到三的人退出圈子,问最后留下的是原来第几号的人退出圈子,问最后留下的是原来第几号的那位?的那位?#include void main()int i,k,m,n,num50,*p;scanf(%d,&n);p=num;for(i=0;in;i+)*(p+i)=i+1;i=0;k=0;m=0;while(mn-1)if(*(p+i)!=0)k+;if(k=3)*(p+i)=0;k=0;m+;i+;if(i=n)i=0;while(*p=0)p+;printf(%dn,*p);i是数组计数变量是数组计数变量k是按是按1,2,3报数是的报数是的计数变量计数变量m是退出的人数的计数变量是退出的人数的计数变量P123450000
限制150内