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