某个同学的题目,写了一下。
题目大概是这样的:
编写函数,求出二维数组主对角线、次对角线以及周边元素之和。
要求:二维数组的行数、列数、数组元素在main函数中由键盘输入。
#include <stdio.h>
int main()
{
int row,col;
printf("请输入“行数”和“列数”:");
scanf("%d,%d",&row,&col);
printf("请为%d*%d数组赋值:\n",row,col);
int arr[row][col];
for(int i = 0; i < row; i++)
{
for(int j = 0; j < col; j++)
{
printf("当前[%d,%d]:",j,i);
scanf("%d",&arr[j][i]);
}
}
int count = row > col ? col : row;
int xSpeed = (row - 0)/count;
int ySpeed = (col - 0)/count;
printf("X轴每次递增%d个下标\n",xSpeed);
printf("Y轴每次递增%d个下标\n",ySpeed);
//这里要考虑对角线不标准情况,比如3*4的矩形
int numA = 0;
int x=0,y=0;
for(int i = 0; i < count; i++)
{
printf("%d,%d\n",x,y);
numA += arr[x][y];
x+=xSpeed;
y+=ySpeed;
//这里要考虑对角线不标准情况,比如3*4的矩形
//对角线的最后一位可能不是右下角的坐标,直接强制指向右下角坐标
if(x == col-1 && y != row-1 || x != col-1 && y == row-1)
{
x = row-1;
y = col -1;
}
}
printf("主对角线之和为:%d\n",numA);
int numB = 0;
x = col-1;
y = 0;
for(int i = 0; i < count; i++)
{
printf("%d,%d\n",x,y);
numB += arr[x][y];
x-=xSpeed;
y+=ySpeed;
//这里要考虑对角线不标准情况,比如3*4的矩形
//对角线的最后一位可能不是左下角的坐标,直接强制指向左下角坐标
if(x == 0 && y != row-1 || x != 0 && y == row-1)
{
x = 0;
y = row -1;
}
}
printf("次对角线之和为:%d\n",numB);
int numC=0;
for (int i =0;i < row;i ++)
{
for (int j= 0; j < col; j++)
{
if(i==0 || j == 0 || i == row-1 || j == col -1)
{
numC += arr[i][j];
}
}
}
printf("周边长度之和:%d\n",numC);
}
某位同学,做人很重要啊!
