ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:19.80KB ,
资源ID:3525672      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3525672.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言教材 第七章 指针 实验.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言教材 第七章 指针 实验.docx

1、C语言教材 第七章 指针 实验第七章 指针第一部分 知识训练【知识要点】1. 地址与指针 指针变量的概念:用一个变量专门来存放另一个变量的地址。2. 指向变量的指针变量指针变量的形式:基类型 *指针变量名;&: 取地址运算符;*:指针运算符。3. 指针与数组 引用一个数组元素可以用下标法和指针法;可以用数组名作函数的参数。4. 指针与函数函数指针变量定义的一般形式为:类型说明符 (*指针变量名)(); 一个函数的返回值可以是一个函数。【典型习题与解析】5.char * const p;char const * pconst char *p上述三个有什么区别?【解析】char * const p

2、; /常量指针,p的值不可以修改;char const * p;/指向常量的指针,指向的常量值不可以改;const char *p; /和char const *p。6.main()int a5=1,2,3,4,5;int *ptr=(int *)(&a+1);printf(%d,%d,*(a+1),*(ptr-1); 输出结果是什么?【解析】答案:输出:2,5*(a+1)就是a1,*(ptr-1)就是a4,执行结果是2,5。&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int)。int *ptr=(int *)(&a+1);则ptr实际是&(a5),

3、也就是a+5。原因如下:1) &a是数组指针,其类型为 int (*)5;而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同。2) a是长度为5的int数组指针,所以要加 5*sizeof(int),所以ptr实际是a5,但是prt与(&a+1)类型是不一样的(这点很重要),所以prt-1只会减去sizeof(int*)a,&a的地址是一样的,但意思不一样。3) a是数组首地址,也就是a0的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a1,&a+1是下一个对象的地址,即a5。【练习题】一、填空题1. 指针变量是把内存中另一个数据的 作为其值的变量。2.

4、 能够直接赋值给指针变量的整数是 。3. 如果程序中已有定义:int k;1)定义一个指向变量k的指针变量p的语句是 。2)通过指针变量,将数值6赋值给k的语句是 。3)定义一个可以指向指针变量p的变量pp的语句是 。4)通过赋值语句将pp指向指针变量p的语句是 。5)通过指向指针的变量pp,将k的值增加一倍的语句是 。4. 当定义某函数时,有一个形参被说明成int *类型,那么可以与之结合的实参类型可以是 、 等。5. 以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数。例如,输入的字符串为:556,则输出十进制整数366。请填空。#include main( ) char *

5、p,s6; int n; p=s; gets(p); n=*p-0; while( != 0)n=n*8+*p-0; printf(%d n,n); 二、选择题1变量的指针,其含义是指该变量的( )。 A)值 B)地址 C)名 D)一个标志2下面程序的运行结果是( )。 #include #include main() char *s1=AbDeG; char *s2=AbdEg; s1+=2;s2+=2; printf(%dn,strcmp(s1,s2); A)正数 B)负数 C)零 D)不确定的值3若有以下定义,则对a数组元素的正确引用是( )。int a5,*p=a;A)*&a5 B)a

6、+2 C)*(p+5) D)*(a+2)4若有以下定义,则p+5表示( )。int a10,*p=a;A)元素a5的地址B)元素a5的值C)元素a6的地址D)元素a6的值5. 以下Delblank函数的功能是删除字符串s中的所有空格(包括Tab、回车符和换行符)。void Delblank(char *s) int i,t;char c80;for(i=0,t=0; ;i+)if(!isspace( )ct+=si;ct=0;strcpy(s,c); A) si B) !si C) si=0 D) si=0 A) s+i B) *ci C) *(s+i)=0 D) *(s+i)6. 以下con

7、j函数的功能是将两个字符串s和t连接起来。char *conj(char *s,char *t) char *p=s;while(*s) ;while(*t)*s= ;s+;t+;*s=0; ; A) s- B) s+ C) s D) *s A) *t B) t C) t- D) *t+ A) return s B) return t C) return p D) return p-t7. 下列程序的输出结果是( )。#include main()int *k,*a,b=100;a=&b; k=&a;printf(“%dn”,*k);A) 运行出错 B) 100 C) a的地址 D) b的地址

8、8. 若定义了以下函数:void f()p=(double *)malloc(10*sizeof(double);p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是( )。A) double *p B) float *p C) double *p D) float *p三、编程题1. 编写一个程序,将用户输入的字符串中的所有数字提取出来。2. 通过指针处理下面的问题:利用随机函数模拟产生 300 个 112 月出生的人数,统计各月所占的出生率。【练习题参考答案】一、填空题1. 首地址 2. 0 3. 1)int *p=&k; 2)*p=6; 3)int

9、*pp; 4)pp=&p; 5)(*pp)*=2;4. 整型数组名、指向整型数据的指针值 5. *(p+)二、选择题1. B 2. B 3. D 4. A 5. BD 6. BAC 7. B 8. C三、编程题1. 编写一个程序,将用户输入的字符串中的所有数字提取出来。#include #include void main() char string81,digit81; char *ps; int i=0; printf(enter a string:n); gets(string); ps=string; while(*ps!=0) if(*ps=0 & *ps=9) digiti=*ps

10、; i+; ps+; digiti=0; printf(string=%s digit=%sn,string,digit);2. 通过指针处理下面的问题:利用随机函数模拟产生 300 个 112 月出生的人数,统计各月所占的出生率。#include #include #include int main(int argc, char* argv) int month12,*m_pt,im_pt=monthsrand( (unsigned)time( NULL ) ) /srand()函数产生一个以当前时间开始的随机种子for (i=0i12i+)*(m_pt+i)=0for (i=0i300i+

11、)(*(m_pt+rand()%12) +printf(月份 出生人数 出生率 (总数300)n)for (i=0i*pb) /第一个数和第二个数比较8 t=*pa*pa=*pb*pb=t /两个数交换9 if (*pb*pc) /第二个数和第三个数比较10 t=*pb*pb=*pc*pc=t 11 if (*pc*pd) /第三个数和第四个数比较12 t=*pc*pc=*pd*pd=t 13 if (*pa*pb) /第一个数和第二个数比较14 t=*pa*pa=*pb*pb=t 15 if (*pb*pc) /第二个数和第三个数比较16 t=*pb*pb=*pc*pc=t 17 if (*

12、pa*pb) /第一个数和第二个数比较18 t=*pa*pa=*pb*pb=t 19 printf(n 排序结果如下:)20 printf(%d,%d,%d,%dn,*pa,*pb,*pc,*pd )21 问题 1:将程序修改为由大到小顺序输出。提示:将程序第 7、9、11、13、15、17 行的“”号。问题 2:完成题目的第二部分提示:对上面的程序作如下修改:1、打开字符串处理函数的头文件在第 1 行下面增加 1 行 #include string.h2、将整型变量改为字符串变量第 3、4 行改为:char a100,b100,c100,d100,t100char *pa=a,*pb=b,*

13、pc=c,*pd=d3、将输入整数改为输入字符串第 6 行改为:scanf(%s%s%s%s,pa,pb,pc,pd)4、将整数比较大小改为字符串比较大小第 7、9、11、13、15、17 行中原比较整数大小使用字符串比较函数来比较,如第 7 行改为:if (strcmp(pa,pb)0)5、将整数赋值改为字符串拷贝第 8、10、12、14、16、18 行中整数赋值改为使用字符串拷贝函数,如第 8行第 1 个赋值语句改为:strcpy(t,pa)6、将整数输出改为字符串输出第 20 行改为:printf(n%sn%sn%sn%snn,pa,pb,pc,pd )2. 完善程序,要求使用函数功能:

14、将一个数字字符串转换成一个整数(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串“-1234”,则函数把它转换为整数值-1234。#include #include long fun(char *p)填写程序void main()char s6;long n;printf(Enter a string:n);gets(s);n=fun(s);printf(%ldn,n);3. 分析下列程序(1)#includemain() char a10=”,*p; p=a; puts(p); (2) #includemain() int max,x,y,*p1,*p2; printf(“

15、Input x and y:”); scanf(“%d%d”,&x,&y);p1=&x; p2=&y; if(*p1*p2) max=*p1; else max=*p2; printf(“The max number is %d”,max);要求:输入程序,并调试、编译、连接、运行程序(1)输出结果若将p=a改为p=&a3输出结果程序(2)功能为你的输入是输出结果4. 输入10个整数,将其中最小的数和第一个数对换,把最大的数和最后一个数对换,即把最小数放到最前面,把最大数放到最后面。(用指针实现)5. 用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数。整数和n在主函数中输入。最后在主函数中输出。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1