c语言指针题(1)
来源:互联网 发布:java手机编译器aide 编辑:程序博客网 时间:2024/06/06 03:34
将一个5*5的矩阵中最大元素放在中心,4个角分别放四个最小的元素
相较之前所做的提取最大最小值,本题有五个数据需要处理,所以不能在for循环中简单得通过遍历数组处理。解决的策略是将二维数组转化为一维数组,并排序,通过指针处理这5个数据。
另外一个难点在于矩阵的四个角,但是通过指针可以很灵活的实现数据的交换即位置处理。
#include<stdio.h>#include<stdlib.h>int main(){ void change(int(*nkz_name)[5]); int old_nkz[5][5],i,j,m; int (*new_nkz)[5],n=1; system("color 2a"); new_nkz=old_nkz; printf("你是否使用默认数组?如果是请输入(Y),如果不是请输入(N)\n"); if ((m=getchar())=='Y'||m=='y') { printf("转换前:\n"); for (i=0;i<5;i++) { for (j=0;j<5;j++) { *(*(new_nkz+i)+j)=n++;//数组赋值 printf("%4d",*(*(new_nkz+i)+j)=n++); } printf("\n"); } change(new_nkz);//调用函数 printf("转化后\n"); for (i=0;i<5;i++) { for (j=0;j<5;j++) { printf("%4d",*(*(new_nkz+i)+j)); } printf("\n"); } getchar();//??? } if (m=='N'||m=='n') { printf("请依次输入数组5*5的值\n"); for (i=0;i<5;i++) for(j=0;j<5;j++) scanf("%d",&old_nkz[i][j]); } //便于对照 printf("您选用的测试数组为:\n"); for (i=0;i<5;i++) { for (j=0;j<5;j++) printf("%4d",old_nkz[i][j]); printf("\n"); } printf("\n"); change(new_nkz); printf("转化后\n"); for (i=0;i<5;i++) { for (j=0;j<5;j++) { printf("%4d",*(*(new_nkz+i)+j)); } printf("\n"); } getchar();}/***********************************将一个5*5的矩阵中最大的元素放在中心,4个角分别放四个最小的元素***********************************/void change(int (*nkz_name)[5]){ int temp_nkz[25],i,j,k=0,temp; int *temp_p=temp_nkz;//把二维数组中元素按行的顺序存放到一维数组 for(i=0;i<5;i++) { for(j=0;j<5;j++) { *(temp_p+k)=*(*(nkz_name+i)+j); k++; } } //选择排序法,对一维数组中的元素从小到大排序 for(i=0;i<24;i++) { k=i; for(j=i+1;j<25;j++) { if(*(temp_p+j)<*(temp_p+k)) k=j; } if (k!=i) { temp=*(temp_p+k); *(temp_p+k)=*(temp_p+i); *(temp_p+i)=temp; } } //将一个5*5矩阵中最大元素放在中心 for(i=0;i<5;i++) for(j=0;j<5;j++) { if(*(*(nkz_name+i)+j)==*(temp_p+24)) { temp=*(*(nkz_name+i)+j); *(*(nkz_name+i)+j)=*(*(nkz_name+2)+2); *(*(nkz_name+2)+2)=temp; break; } } //将最小的元素放在左上角for(i=0;i<5;i++) for(j=0;j<5;j++) { if(*(*(nkz_name+i)+j)==*(temp_p)) { temp=*(*(nkz_name+i)+j); *(*(nkz_name+i)+j)=*(*(nkz_name+0)+0); *(*(nkz_name+0)+0)=temp; break; } } //将次小的元素放在右上角for(i=0;i<5;i++) for(j=0;j<5;j++) { if(*(*(nkz_name+i)+j)==*(temp_p)+1) { temp=*(*(nkz_name+i)+j); *(*(nkz_name+i)+j)=*(*(nkz_name+0)+4); *(*(nkz_name+0)+4)=temp; break; } } //将第3小的元素放在左下角for(i=0;i<5;i++) for(j=0;j<5;j++) { if(*(*(nkz_name+i)+j)==*(temp_p)+2) { temp=*(*(nkz_name+i)+j); *(*(nkz_name+i)+j)=*(*(nkz_name+4)+0); *(*(nkz_name+4)+0)=temp; break; } } //将第四小的元素放在右下角for(i=0;i<5;i++) for(j=0;j<5;j++) { if(*(*(nkz_name+i)+j)==*(temp_p)+3) { temp=*(*(nkz_name+i)+j); *(*(nkz_name+i)+j)=*(*(nkz_name+4)+4); *(*(nkz_name+4)+4)=temp; break; } }}
阅读全文
0 0
- c语言指针题(1)
- C语言指针1
- C语言 指针1
- c语言-指针(1)
- C语言 指针1
- C语言--指针1
- C语言指针1
- C语言指针(1)
- C语言指针1
- C语言指针1
- C语言指针题集
- c语言:指针错题
- C语言指针题集
- c语言指针题(2)
- C语言指针练习1
- C语言-指针(1)
- C语言-指针(1)
- C语言指针1-定义
- v5填报展现正常但提交时报对象错误的排查
- C# 给 Excel 工作表添加水印
- #30秒理解代码# 求数组最大值、最小值
- 【广告】前端架构师独家揭秘:月薪30k难吗?
- 51nod 1272 最大距离 -暴力
- c语言指针题(1)
- 高可用高性能yii2.0
- 求生大逃亡
- 重磅下载!678页阿里内部技术干货
- MySQL存储类型选择
- Django框架学习笔记(14.一对多跨表操作)
- 图的邻接矩阵和邻接表存储
- Web 动画帧率(FPS)计算
- java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig