实验10 指针2 (修复的)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
实验时间:6月7号
实验班级:计算机双学位1501
实验报告总份(片)数: 1 份(片)实验教师:饶东宁
计算机学院工一实验室
广东工业大学
实验报告
实验题目:实验10
实验时间:6月7号
实验班级:双学位1501
实验人学号:3213010359
实验人姓名:梁雪卿
实验教师:饶东宁
计算机学院工一实验室
广东工业大学
实验10 指针2
1 实验目的
(1)进一步掌握指针的应用
(2)能正确使用数组的指针和指向数组的指针变量
(3)能正确使用字符串的指针和指向字符串的指针变量
(4)了解指向指针的指针的用法
2 实验内容
根据题目要求,编写程序(要求用指针处理),运行程序,分析结果,并进行必要的讨论分析。
(1)有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的人。
算法说明:
程序清单:
#include
int main()
{
int i,k,m,n,num[50],*p;
scanf("n=%d",&n);
p=num;
for(i=0;i *(p+i)=i+1; i=0; k=0; m=0; while(m { if(*(p+1)!=0) k++; if(k==3) { *(p+i)=0; k=0; m++; } i++; if(i==n) i=0; } while(*p==0) p++; printf("The last one is NO.%d\n",*p); return 0; } 运行结果: 分析与思考: 以1到n为序给每个人编号,i为每次循环时计数变量,k为按1,2,3报数时的计数变量,m为退出人数,当退出人数比n-1少时执行循环体,对推村恩编号为0,报数到尾i恢复为0,循环继续。 (2)将一个5*5的矩阵(二维数组)中最大元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一函数实现之。用main函数调用。 算法说明: change(int *p) 程序清单: #include int main() { void change(int *p); int a[5][5],i,j,*q; for(i=0;i<5;i++) for(j=0;j<5;j++) scanf("%d",&a[i][j]); q=&a[0][0]; change(q); for(i=0;i<5;i++) { for(j=0;j<5;j++) printf("%d ",a[i][j]); printf("\n"); } return 0; } void change(int *p) { int i,j,temp; int *pmax,*pmin; pmax=p; pmin=p; for(i=0;i<5;i++) { for(j=0;j<5;j++) { if(*pmax<*(p+i*5+j)) pmax=p+i*5+j; if(*pmin>*(p+5*i+j)) pmin=p+i*5+j; } } temp=*(p+12); *(p+12)=*pmax; *pmax=temp; temp=*p; *pmin=temp; pmin=p+1; for(i=0;i<5;i++) { for(j=0;j<5;j++) {if(i==0&&j==0) continue; if(*pmin>*(p+5*i+j)) pmin=p+5*i+j;} } temp=*pmin; *pmin=*(p+4); *(p+4)=temp; pmin=p+1; for(i=0;i<5;i++) { for(j=0;j<5;j++) {if((i==0&&j==0)||(i==0&&j==4)) continue; if(*pmin>*(p+5*i+j)) pmin=p+5*i+j;} } temp=*pmin; *pmin=*(p+20); *(p+20)=temp; for(i=0;i<5;i++) { for(j=0;j<5;j++) {if((i==0&&j==0)||(i==0&&j==4)||(i==4&&j==0)) continue; if(*pmin>*(p+5*i+j)) pmin=p+5*i+j;} } temp=*pmin; *pmin=*(p+24); *(p+24)=temp; } 运行结果: 分析与思考: change函数实现元素值交换。找出最大最小之,最大值与中心