上机实验九指针参考答案

上传人:大米 文档编号:465746697 上传时间:2022-10-29 格式:DOCX 页数:5 大小:74.23KB
返回 下载 相关 举报
上机实验九指针参考答案_第1页
第1页 / 共5页
上机实验九指针参考答案_第2页
第2页 / 共5页
上机实验九指针参考答案_第3页
第3页 / 共5页
上机实验九指针参考答案_第4页
第4页 / 共5页
上机实验九指针参考答案_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《上机实验九指针参考答案》由会员分享,可在线阅读,更多相关《上机实验九指针参考答案(5页珍藏版)》请在金锄头文库上搜索。

1、上机实验九指针目的要求1 .掌握指针的基本概念。2 .掌握指针变量的定义和初始化。二.实验内容【实验题1】程序填空,交换指针p1,p2所指向的变量。# include void main () int a=1,b=2, *p1, *p2, *pt;p1=&a;p2=&b;printf( p1=%d, p2=%d n ,p1,p2);交换指针变量p1,p2所指向的变量pt= pl ;p1=p2;p2=pt ; 注意:这三个指针变量前均无间接引用符*printf( p1=%d, p2=%d n ,p1,p2);运行结果:(注意:输出的是p1、p2所指变量的地址,即变量 a或b的地址)【实验题2】程

2、序填空,交换指针p1,p2所指变量的值。# include void main () int a=1,b=2, *p1, *p2 , temp;p1=&a;p2=&b;printf( *p1=%d, *p2=%d n ,*p1,*p2);/交换p1,p2所指向的变量的值temp= *p1;*p1= *p2;*p2= temp ; /注意:temp是普通变量,而指针 p1,p2前均使用间接引用符 *printf( *p1=%d, *p2=%d n ,*p1,*p2);运行结果:(注意:指针前加*,代表指针所指变量)【实验题3】程序填空:输入三个整型变量i,j,k 的值。请设置三个指针变量 p1,

3、p2,p3,分别指向i,j,k 。然后通过p1,p2,p3使i,j,k 三个变量的值依次交换,即原来 i的值赋给j,原来j的值赋给k,原来k的 值赋给i。输出交换后i,j,k 的值。i jJk分析:三个值轮换跟两个值互换是一样的原理,在变量被赋新值之前必须保证原值已经被保存。设temp为临时变量,则 temp=i; i=k; k=j; j=temp,参考以上做法,轮换时要求用指针p1,p2,p3来替代i,j,k.源程序:#include void main () int i,j,k,temp, *p1= &i ,*p2= &j ,*p3= &k ; printf(Input i j k: );

4、scanf(%d%d%d,&i,&j,&k);/输入 i j k/i-j-k-itemp= *p1;* p1= *p3;* p3= *p2;* p2= temp;printf(%d %d %d n, *p1,*p2, *p3);/ 输出轮换后的 i j k输入:1 2 3输出:3 1 2【实验题4】程序填空:输入三个整数,要求设计2个指针变量p1,p2 ,使p1指向这三个数的最大值,p2指向最小者,并输出最大值和最小值。# include void main () int a,b,c, *p1, *p2, *p3;scanf( %d%d%d”,&a,&b,&c);/令p1指向最大值p1= ab

5、? &a: &b; /p1 指向 a,b 中较大者if( c *p1) p1=&c;/令p2指向最小值p2= ab? &a:&b; /p2 指向 a,b 中较小者if( c *p2) p2=&c;printf( max=%d, min=%d , *p1,*p2 );)运行结果:输入1 2 3输出max=3, min=1【实验5】程序设计(冒泡排序):输入8个实数,要求用冒泡法将这8个实数按降序排列,输出排序结果。# include void main () double a8, temp, *p,*q;输入数组printf( Input 8 doubles:n);for( p=a; pa+8

6、; p+) scanf(%lf, p);for( i=0; i 7; i+) 或者for( j=0; jaj+1) temp=aj; aj=aj+1; aj+1=temp; 冒泡法for(q=a+ 7; qa; q-)for (p=a; p*(p+1) ) temp=*p; *p=*(p+1); *(p+1)=temp;输出排序后的数组printf(After sorted:);for( p=a; pa+8; p+) printf(%f , *p);Part 2:指针与数组【实验题方法1:用下标引用数组元素,源程序如下:#include void main () int i, a5=1,2,3

7、,4,5;for( i=0 ;i5 ; i+ )printf(%d , ai );printf(n);方法3:用指针和下标引用数组元素,源程序如下:#include void main () int i, a5=1,2,3,4,5, *p;for( p=a , i=0 ;i5 ; i+)printf(%d , *( p+i )或 pi ); printf(n);1】程序填空:请用下标、数组名、指针等不同方法来输出数组元素。方法2:用数组名引用数组元素,源程序如下:#include void main () int i, a5=1,2,3,4,5;for (i=0; i5; i+)printf(

8、%d , *( a+i );printf(n);方法4:用指针引用数组元素,源程序如下:#include void main () int a5=1,2,3,4,5, *p;for (p=a ; p a+5 ; p+ ) printf(%d , *p );printf(n);【实验题2】程序填空:利用指针,将数组 a中的10个整数按相反顺序存放.源程序如下:#include void main () int i,t, a10,*p,*q;printf(Input 10 integers:);for(i=0; i10; i+) scanf(%d, &ai);p= a ; q= a+9; /p指向

9、首元素,q指向最后一个元素for( ; pq ; p+ , q-) 逐对交换对称元素t= *p;*p= *q;*q=t;for(i=0; i10; i+) printf(%d , ai); printf(n);【实验题3】程序填空:自定义函数del(s),功能是删除字符串s中的数字字符,要求使用字符处理函数isdigit()和字符串处理函数strcpy()。在主函数中输入1个字符串,然后调用函数del(),用于删除其中的数字字符,并输出处理后的字符串。提示:从字符串s的首字符开始,到结束符0之前为止,逐个检查第i个字符是否是数字字符,是则删除该字符一一使用字 符判别函数isdigit(si),

10、如果si是数字字符,该函数返回 1,否则返回0.难点:如何删除s的第i个字符?一一使用字符 串复制函数strcpy(),将子串s+i+1(从字符si+1开始的子串)复制到给s+i (从字符si开始的子串),即strcpy(s+i, s+i+1)。#include #include #include void del( char *s); /line 4 函数声明 void main() char str80;gets( str); /输入字符串 strdel( str ); 调用函数del(),删除str中的数字puts(str); /输出字符串str void del(char *s) /l

11、ine 12 函数定义 int i=0;while (si!=0)if( isdigit(si) ) strcpy( s+i, s+i+1);/ 如果字符 si是数字,用函数 strcpy 删除它else i+;/否则,继续查看下一个字符运行程序,输入字符串a1b2c3d4,输出结果是:abcd语句行line 4和line 12分别是函数声明和函数定义首部,其中的参数采用了 指针的形式,此外,还可采用数组名的形式,即亦可写为 void del( char s)【实验题4】分析程序运行结果,源程序如下#include #include void main() char *s1=*s2=while

12、 (*s2!=0) puts(s1+strlen(s2)-1 );s2+;运行程序运行时,共循环 4次,每次输出一行字符串,其中1)第 1 行输出:*,此时,字符串 s2= *, strlen(s2)= 4, s1+strlen(s2)-1= s1+32)第 2 行输出:* ,此时,字符串 s2=*, strlen(s2)= 3, s1+strlen(s2)-1= s1+2 ;3)第 3 行输出: 二 ,此时,字符串 s2=*, strlen(s2)= 2, s1+strlen(s2)-1= s1+1 ;4)第 4 行输出:* ,此时,字符串 s2=*, strlen(s2)= 1, s1+s

13、trlen(s2)-1= s1+0 .【实验题5】程序填空:用选择法将5个字符串“ Zhao”、“Qian”、“Sun”,“Li”,“Wang”按降序排序,并输出(要求:使 用字符型指针数组)#include#include /Line 2void main() F char *name5=Zhao, Qian, Sun,Li,Wang, *s;/1 个指针对应 1 个字符串,共 5 个字符型指针int i,j,k; for(i=0; i 4; i+) k= i;for(j= i+1 ; j0) k= j; /注意:是降序s= namei ; namei= namek; namek=s; 交换 namei与 namekfor(i=0; i5; i+) puts( namei ); / 输出排序后的字符串运行程序,结果显示为:如果删除语句行 Line2 ,程序是否能正常编译?为什么?-不能,因为要使用字符串比较函数 strcmp,必须要包含string.h

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号