C语言 谁给详细讲下这道题,有答案,.
/*习题描述:将一个5*5的矩阵中最大的元素放在中心,四个角分别放四个最小的元素(顺序从左到右,从上到下顺序依次从小到大存放),写一个函数实现之。用main函数调用。例如...
/*
习题描述:
将一个5*5的矩阵中最大的元素放在中心,四个角分别放四个最小的元素(顺序从左到右,从上到下顺序依次从小到大存放),写一个函数实现之。用main函数调用。
例如原来矩阵:
35 34 33 32 31
30 29 28 27 26
25 24 23 22 21
20 19 18 17 16
15 14 13 12 11
改变后的矩阵
11 34 33 32 12
30 29 28 27 26
25 24 35 22 21
20 19 18 17 16
13 23 15 31 14
*/
#include <stdio.h>
main()
{
int a[] = {35, 34, 33, 32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11};
int b=0;
for(int i=0;i<5;i++)
{
for(int j=i+1;j<25;j++)
{
if(i<4)
{
if(a[j]<a[i])
{
b = a[i];
a[i] = a[j];
a[j] = b;
}
}
else
{
if(a[j]>a[i])
{
b = a[i];
a[i] = a[j];
a[j] = b;
}
}
}
}
b = a[12];
a[12] = a[4];
a[4] = a[1];
a[1] = b;
b = a[20];
a[20] = a[2];
a[2] = b;
b = a[24];
a[24] = a[3];
a[3] = b;
for(int y=0;y<5;y++)
{
for(int x=0;x<5;x++)
{
printf("%d ", a[y*5+x]);
}
printf("\n");
}
}
我没看懂 每条语句都最好讲下拉 谢谢 展开
习题描述:
将一个5*5的矩阵中最大的元素放在中心,四个角分别放四个最小的元素(顺序从左到右,从上到下顺序依次从小到大存放),写一个函数实现之。用main函数调用。
例如原来矩阵:
35 34 33 32 31
30 29 28 27 26
25 24 23 22 21
20 19 18 17 16
15 14 13 12 11
改变后的矩阵
11 34 33 32 12
30 29 28 27 26
25 24 35 22 21
20 19 18 17 16
13 23 15 31 14
*/
#include <stdio.h>
main()
{
int a[] = {35, 34, 33, 32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11};
int b=0;
for(int i=0;i<5;i++)
{
for(int j=i+1;j<25;j++)
{
if(i<4)
{
if(a[j]<a[i])
{
b = a[i];
a[i] = a[j];
a[j] = b;
}
}
else
{
if(a[j]>a[i])
{
b = a[i];
a[i] = a[j];
a[j] = b;
}
}
}
}
b = a[12];
a[12] = a[4];
a[4] = a[1];
a[1] = b;
b = a[20];
a[20] = a[2];
a[2] = b;
b = a[24];
a[24] = a[3];
a[3] = b;
for(int y=0;y<5;y++)
{
for(int x=0;x<5;x++)
{
printf("%d ", a[y*5+x]);
}
printf("\n");
}
}
我没看懂 每条语句都最好讲下拉 谢谢 展开
1个回答
推荐于2016-06-09
展开全部
首先,这个所谓的答案并不符合题目要求,所以虽然结果正确,但是我不能给它打对号!
1.
题目要求用函数实现这个过程,并且在main()中调用这个函数,这一点程序没有做到!
2.
程序中有许多地方不符合ANSI C标准,所以与编译器的兼容性极差。
********************************************
解释如下,算法很简单,自己多想一想,也可以弄明白!
#include <stdio.h>
int main(void)
{
int a[] = {35, 34, 33, 32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11};
int b=0,i,j,x,y;
for(i=0;i<5;i++)/*这个循环用于对数组a排序*/
{
for(j=i+1;j<25;j++)
{
if(i<4)/*数组a的前4个元素将存放这个数组中最小的四个数,这里用于从所有元素中找出四个最小的数*/
{
if(a[j]<a[i])
{
b = a[i];
a[i] = a[j];
a[j] = b;
}
}
else/*数组a的第5到最后一个元素用于存放由其余数字组成的一个已排序的增减数列*/
{
if(a[j]>a[i])
{
b = a[i];
a[i] = a[j];
a[j] = b;
}
}
}
}
/*以下的三段用于将5个有特殊要求的元素放在合适的位置*/
b = a[12];/*这里用于将最大值放到“中心”位置*/
a[12] = a[4];
a[4] = a[1];
a[1] = b;
b = a[20]; /*这里将第三小的元素a[2]和“左下角”的元素对调*/
a[20] = a[2];
a[2] = b;
b = a[24];/*这里将第四小的元素a[3]和“右下角”的元素对调*/
a[24] = a[3];
a[3] = b;
for(y=0;y<5;y++)/*输出结果*/
{
for(x=0;x<5;x++)
{
printf("%d ", a[y*5+x]);
}
printf("\n");
}
return 0;
}
1.
题目要求用函数实现这个过程,并且在main()中调用这个函数,这一点程序没有做到!
2.
程序中有许多地方不符合ANSI C标准,所以与编译器的兼容性极差。
********************************************
解释如下,算法很简单,自己多想一想,也可以弄明白!
#include <stdio.h>
int main(void)
{
int a[] = {35, 34, 33, 32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11};
int b=0,i,j,x,y;
for(i=0;i<5;i++)/*这个循环用于对数组a排序*/
{
for(j=i+1;j<25;j++)
{
if(i<4)/*数组a的前4个元素将存放这个数组中最小的四个数,这里用于从所有元素中找出四个最小的数*/
{
if(a[j]<a[i])
{
b = a[i];
a[i] = a[j];
a[j] = b;
}
}
else/*数组a的第5到最后一个元素用于存放由其余数字组成的一个已排序的增减数列*/
{
if(a[j]>a[i])
{
b = a[i];
a[i] = a[j];
a[j] = b;
}
}
}
}
/*以下的三段用于将5个有特殊要求的元素放在合适的位置*/
b = a[12];/*这里用于将最大值放到“中心”位置*/
a[12] = a[4];
a[4] = a[1];
a[1] = b;
b = a[20]; /*这里将第三小的元素a[2]和“左下角”的元素对调*/
a[20] = a[2];
a[2] = b;
b = a[24];/*这里将第四小的元素a[3]和“右下角”的元素对调*/
a[24] = a[3];
a[3] = b;
for(y=0;y<5;y++)/*输出结果*/
{
for(x=0;x<5;x++)
{
printf("%d ", a[y*5+x]);
}
printf("\n");
}
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询