![上机实验九 指针-参考答案_第1页](http://file4.renrendoc.com/view/e29767d68501851711b474a6cad4b16c/e29767d68501851711b474a6cad4b16c1.gif)
![上机实验九 指针-参考答案_第2页](http://file4.renrendoc.com/view/e29767d68501851711b474a6cad4b16c/e29767d68501851711b474a6cad4b16c2.gif)
![上机实验九 指针-参考答案_第3页](http://file4.renrendoc.com/view/e29767d68501851711b474a6cad4b16c/e29767d68501851711b474a6cad4b16c3.gif)
![上机实验九 指针-参考答案_第4页](http://file4.renrendoc.com/view/e29767d68501851711b474a6cad4b16c/e29767d68501851711b474a6cad4b16c4.gif)
![上机实验九 指针-参考答案_第5页](http://file4.renrendoc.com/view/e29767d68501851711b474a6cad4b16c/e29767d68501851711b474a6cad4b16c5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
上机试验九指针一.目的规定掌握指针的基本概念。掌握指针变量的定义和初始化。二.试验内容【试验题1】程序填空,互换指针p1,p2所指向的变量。#include<stdio.h>voidmain(){ inta=1,b=2,*p1,*p2,*pt; p1=&a; p2=&b; printf(“p1=%d,p2=%d\n”,p1,p2); //互换指针变量p1,p2所指向的变量 pt=p1;p1=p2; p2=pt;//注意:这三个指针变量前均无间接引用符* printf(“p1=%d,p2=%d\n”,p1,p2);}运行成果: (注意:输出的是p1、p2所指变量的地址,即变量a或b的地址)【试验题2】程序填空,互换指针p1,p2所指变量的值。#include<stdio.h>voidmain(){ inta=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,p2,p3,分别指向i,j,k。然后通过p1,p2,p3使i,j,k三个变量的值依次互换,即本来i的值赋给j,本来j的值赋给k,本来k的值赋给i。输出互换后i,j,k的值。i jk分析:三个值轮换跟两个值互换是同样的原理,在变量被赋新值之前必须保证原值已经被保留。设temp为临时变量,则 temp=i;i=k;k=j;j=temp,参照以上做法,轮换时规定用指针p1,p2,p3来替代i,j,k.源程序:#include<stdio.h>voidmain(){ inti,j,k,temp,*p1=&i,*p2=&j,*p3=&k; printf("Inputijk:");scanf("%d%d%d",&i,&j,&k);//输入ijk //i-->j-->k-->i temp=*p1; *p1=*p3; *p3=*p2; *p2=temp; printf("%d%d%d\n",*p1,*p2,*p3); //输出轮换后的ijk}输入:123输出:312【试验题4】程序填空:输入三个整数,规定设计2个指针变量p1,p2,使p1指向这三个数的最大值,p2指向最小者,并输出最大值和最小值。#include<stdio.h>voidmain(){ inta,b,c,*p1,*p2,*p3; scanf(“%d%d%d”,&a,&b,&c); //令p1指向最大值 p1=a>b?&a:&b;//p1指向a,b中较大者 if(c>*p1) p1=&c; //令p2指向最小值 p2=a<b?&a:&b;//p2指向a,b中较小者 if(c<*p2)p2=&c; printf(“max=%d,min=%d”,*p1,*p2);}运行成果:输入123 输出max=3,min=1【试验5】程序设计(冒泡排序):输入8个实数,规定用冒泡法将这8个实数按降序排列,输出排序成果。#include<stdio.h>voidmain(){ doublea[8],temp,*p,*q;for(i=0;i<7;ifor(i=0;i<7;i++) for(j=0;j<7-i;j++) if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}或者 printf("Input8doubles:\n"); for(p=a;p<a+8;p++)scanf("%lf",p);//冒泡法 for(q=a+7;q>a;q--) for(p=a;p<q;p++) if(*p>*(p+1)){temp=*p;*p=*(p+1);*(p+1)=temp;} //输出排序后的数组 printf("Aftersorted:"); for(p=a;p<a+8;p++)printf("%f",*p);}Part2:指针与数组【试验题1】程序填空:请用下标、数组名、指针等不一样措施来输出数组元素。措施2:用数组名引用数组元素,源程序如下:#include措施2:用数组名引用数组元素,源程序如下:#include<stdio.h>voidmain(){inti,a[5]={1,2,3,4,5};for(i=0;i<5;i++) printf("%d",*(a+i)); printf("\n");}#include<stdio.h>voidmain(){inti,a[5]={1,2,3,4,5};for(i=0;i<5;i++) printf("%d",a[i]); printf("\n");}措施4:用指针引用数组元素,源程序如下:#include措施4:用指针引用数组元素,源程序如下:#include<stdio.h>voidmain(){inta[5]={1,2,3,4,5},*p;for(p=a;p<a+5;p++) printf("%d",*p); printf("\n");}#include<stdio.h>voidmain(){inti,a[5]={1,2,3,4,5},*p;for(p=a,i=0;i<5;i++) printf("%d",*(p+i)或p[i]); printf("\n");}【试验题2】程序填空:运用指针,将数组a中的10个整数按相反次序寄存.源程序如下:#include<stdio.h>voidmain(){ inti,t,a[10],*p,*q; printf("Input10integers:"); for(i=0;i<10;i++)scanf("%d",&a[i]); p=a;q=a+9;//p指向首元素,q指向最终一种元素 for(;p<q;p++,q--){//逐对互换对称元素 t=*p;*p=*q;*q=t; } for(i=0;i<10;i++)printf("%d",a[i]); printf("\n");}【试验题3】程序填空:自定义函数del(s),功能是删除字符串s中的数字字符,规定使用字符处理函数isdigit()和字符串处理函数strcpy()。在主函数中输入1个字符串,然后调用函数del(),用于删除其中的数字字符,并输出处理后的字符串。提醒:从字符串s的首字符开始,到结束符’\0’之前为止,逐一检查第i个字符与否是数字字符,是则删除该字符——使用字符鉴别函数isdigit(s[i]),假如s[i]是数字字符,该函数返回1,否则返回0.难点:怎样删除s的第i个字符?——使用字符串复制函数strcpy(),将子串s+i+1(从字符s[i+1]开始的子串)复制到给s+i(从字符s[i]开始的子串),即strcpy(s+i,s+i+1)。#include<stdio.h>#include<ctype.h> #include<string.h> voiddel(char*s);//line4函数申明voidmain(){ charstr[80];gets(str);//输入字符串strdel(str);//调用函数del(),删除str中的数字puts(str);//输出字符串str}voiddel(char*s)//line12函数定义{inti=0;while(s[i]!='\0')if(isdigit(s[i]))strcpy(s+i,s+i+1);//假如字符s[i]是数字,用函数strcpy删除它elsei++;//否则,继续查看下一种字符}运行程序,输入字符串"a1b2<c3d4",输出成果是:ab<cd语句行line4和line12分别是函数申明和函数定义首部,其中的参数采用了指针的形式,此外,还可采用数组名的形式,即亦可写为voiddel(chars[])【试验题4】分析程序运行成果,源程序如下#include<stdio.h>#include<string.h>voidmain(){char*s1="****",*s2="****";while(*s2!='\0'){puts(s1+strlen(s2)-1); s2++;} }运行程序运行时,共循环4次,每次输出一行字符串,其中1)第1行输出:*,此时,字符串s2="****",strlen(s2)=4,s1+strlen(s2)-1=s1+3;2)第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+strlen(s2)-1=s1+0.
【试验题5】程序填空:用选择法将5个字符串“Zhao”、“Qian”、“Sun”,“Li”,“Wang”按降序排序,并输出(规定:使用字符型指针数组)#include<stdio.h>#include<string.h>//Line2voidmain(){ char*name[5]={"Zhao","Qian","Sun","Li","Wang"},*s;//1个指针对应1个字符串,共5个字符型指针 inti,j,k; for(i=0;i<4;i++){ k=i; for(j=i+1;j<5;j++) if(str
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 塔吊设备销售与现场安装指导服务合同(2025年)
- 体检检查法课件
- 二零二五年度智慧墓地开发与管理合作协议
- 内控培训之财务风险管理(企业培训课件)
- 《台体体积的计算》课件
- 14蜜蜂(课件)【知识精研】统编版语文三年级下册
- 《长期经济增长》课件2
- 《饭店的量化管理》课件
- 3.2产业转移对区域发展的影响-【知识精研】高中地理鲁教版(2019)选择性必修2
- 2025至2031年中国密封型行程开关行业投资前景及策略咨询研究报告
- 公路工程检测技术 课件 项目1 试验检测知识
- 派出所校园安保培训
- 动态公路车辆自动衡器
- 电路邱关源版第10章
- 消防安全管理制度完整版完整版
- 病死畜禽无害化处理技术
- 绿植租摆服务投标方案(技术方案)
- 2020新译林版高中英语全七册单词表(必修一~选择性必修四)
- 经济人假设的历史演变与现实选择
- 安全教育培训记录表(春节节后)
- 2023年高考全国甲卷语文试卷真题(含答案)
评论
0/150
提交评论