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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

C语言实验六+指针.docx

1、C语言实验六+指针实验六 指针一、实验目的1、掌握指针的概念,定义和使用指针变量;2、掌握指针与数组的关系,指针与数组有关的算术运算、比较运算。3、掌握字符串指针作的用法。二、相关知识点地址和指针的概念;数组和指针的关系;字符串和指针的关系;三、实验内容一(验证及程序分析)Eg5-1: 输入两个整数,并使其从大到小输出,用指针变量实现数的比较。(1)源程序: #include void 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,

2、a,b); printf(max=%d,min=%dn,*p1,*p2);(2)程序运行结果:运行结果抓图至下方:(3)在程序中的定义一个整型变量t,然后将语句段 if(ab) p=p1; p1=p2; p2=p; 改为: if(ab) t=*p1; *p1=*p2; *p2=t; 再运行结果,观察两程序的区别。运行结果抓图至下方:区别:a和b输出的值与输入的数字换了 Eg5-2:运行并改正下面程序中的错误。#include void main() int a=3,b; int *p; *p=a; b=*p; printf(%dn,b); a=100; b=*p; printf(%dn,b);

3、(1)程序运行结果:运行结果抓图至下方:(2)请简要分析程序错误的原因:程序错误的原因:不能对指针进行赋值,只能对p赋值地址(3)请将程序中的错误改正后重新运行:程序中错误语句:*p=a;改正为:p=&a;程序运行的结果:Eg5-3:用指针法输入 12 个数,然后按每行 4 个数输出。(1)算法分析:定义一个整型数组和一个整型指针,这样通过数组就可以静态分配内存空间,存储数据;然后将指针与数组相关,使指针指向与数组相同的首地址处,这样就可以通过指针对数组的存储空间加以操作。(2)源程序:#include void main() int j,k,a12,*p ; p=a; /使指针 p 指向与数

4、组 a的首地址处 for(j=0;j12;j+) scanf(%d,p+); /移动 P 的位置,输入数据 p=a; /指针重新定位到数组a的首地址 for(j=0;j12;j+) if( ) printf(n); /按每行 4 个数输出 printf(%4d,*p+); /注意:*p+相当于*(p+) printf(n); (2)程序运行结果:运行结果抓图至下方:Eg5-4:用字符串指针实现两个字符串的复制。(1)算法分析:分别定义两个字符数组,用于存放字符串;再定义两个字符串指针,分别指向两个串的起始地址,进行串复制,其实就是将一个指针(如p1)所指向的字符,复制给另一个指针(如p2)所指

5、向的位置,重复该过程直到串尾。如下图:(2)源程序:#includevoid main() char a30=C program.; char b30,*p1,*p2; p1=a; p2=b; /两个指针分别指向两个字符串的起始位置 for( ;*p1!=0;p1+,p2+) /当串1没有到串尾时,进行复制 ; * p2=0; /给串2加上结束标志 printf(string a is:%sn,a); printf(string b is:%sn,b);(3)程序的运行结果:运行结果抓图至下方:Eg5-5: 用字符串指针实现字符串的接收。(1)源程序#includevoid main() ch

6、ar * str; scanf(%s,str); printf(输入的字符串是:%sn,str);(2)请简要分析程序错误的原因:程序运行错误的原因:str只是一个指针,没有具体地址,不能存储数据 (3)请将程序中的错误改正后重新运行:改正后的程序:#includevoid main() int *str,a40; str=a; scanf(%s,str); printf(输入的字符串是:%sn,str);程序运行的结果:Eg5-6:用字符指针数组处理多个字符串:用选择排序法将若干字符串按字母顺序排序输出。(1)算法分析: 定义一个字符指针数组,给定其初值为若干字符串,则数组中的各指针分别指向

7、字符串。用strcmp函数比较各字符串的大小,并按选择法进行排序后,则str指针数组中的指针所指向的字符变为有序。注意:在进行字符比较时,一定要用strcmp函数;比较过程中,当需要交换两字符位置时,并不是直接交换两串的内容,而是交换指针变量中的值。当指针的指向变了,则输出时的内容也随之改变。如下图:(2)源程序:#include#includevoid main( ) char * str=C program, Basic, Foxbase+, Fortran, Pascal; int i,j; char * temp; for(i=0;i4;i+) /*选择法排序*/ for(j=i+1;

8、j0) /当前面串比后面的大时,交换位置 temp=stri; stri=strj; strj=temp; for(i=0;i5;i+) printf(%sn,stri);(3)运行程序,并将程序的运行结果抓图至下方:运行结果抓图至下方:四、实验内容二(综合及设计类)Eg5-7: 练习指针与字符串:在一行字符串中删去指定的字符。例如,要求在一行文字:“I have 150 Yuan!”中删去字符“0”,使其变为“I have 15 Yuan!”。字符串可用gets()函数接收,要删除的字符用getchar( )函数接收。(1)算法提示:先用一个字符串指针指向串的开头,然后用循环进行比较,当*p

9、与接收到的字符不同时,指针后移,继续比较。比较到相同时,把指针后面的字符复制给指针当前所指向的位置,如 *p=*(p+1);(2)请将源程序及结果粘贴到下面。#include#includevoid main( ) char *str,*p,a100,b100,*t; str=a;p=b; printf(请输入你的字符串:); gets(str); printf(请输入你要减去的字符:); gets(p); for(;*str!=0;str+) for(p=b;*p!=0;p+) if(*str=*p) t=str; for(;*t!=0;t+) *t=*(t+1); *t=0; str=a;

10、 printf(最后的字符串是:); printf(%sn,str);运行结果抓图至下方:五、体会函数与指针 :Eg5-9:函数参数传值的单向值传递示例:#includeswap(int m ,int n) int z; z=m;m=n;n=z; printf(形参:m=%d,n=%d,m,n);void main() int m=3,n=5; swap(m,n); printf(实参:m=%d,n=%d,m,n);(1)程序运行结果:运行结果抓图至下方:(2)请简要说明程序中的swap函数为何没有实现主函数中实参值的互换:原因:因为swap中的m,n是有生命期限的而且没有返回给主函数,所以在

11、主函数中m,n还是没有换位置。Eg5-10:地址作为函数的参数示例。#include void swap(int * p1,int * p2) int t; t=*p1;*p1=*p2;*p2=t; void main() int a,b,*p1,*p2; scanf(%d,%d,&a,&b); p1=&a; p2=&b; swap(p1,p2); printf(a=%d,b=%dn,a,b); printf(*p1=%d,*p2=%d,*p1,*p2); (1)程序运行结果:运行结果抓图至下方:(2)请将本程序与上一程序比较,并分析在本程序中,swap函数是否改变了函数单向值传递的特性?回答

12、:这个函数改变了p1,p2所指向地址的值(3)若将swap函数改为:void swap(int * p1,int * p2) int * t; t=p1;p1=p2;p2=t; 是否仍能实现两数互换?为什么?程序运行的结果:是否仍能实现两数互换?为什么?不能,因为p1,p2 装的是地址,即使在swap函数中换了位置,在主函数中也没有换位置,这和Eg5-9的问题一样。(4)若将swap函数改为:void swap(int * p1,int * p2) int * t; *t=*p1;*p1=*p2;*p2=*t; 是否仍能实现两数互换?为什么?程序运行的结果:是否仍能实现两数互换?为什么?不能,因为t没有指向一个地址,不能储存数据

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

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