1、请用C/C++实现matrix_sum函数,要求如下:
- 计算N*N矩阵对角线元素之和;
- N*N矩阵定义为int类型的二维数组;
- N>1,矩阵中的元素是随机的值。
#include <stdio.h>
#include <stdlib.h>
int matrix_sum( int matrix[10][10],int row )
{
int i,j;
int sum = 0;
printf("矩阵matrix:\n");
for(i=0; i<row; ++i)
{
for(j=0; j<row; ++j)
{
matrix[i][j] = rand();
printf("%d\t",matrix[i][j]);
}
printf("\n");
}
for(i=0; i<row; ++i)
{
for(j=0; j<row; ++j)
{
if(i == j)
{
sum += matrix[i][j];
}
}
}
return sum;
}
int main()
{
int a[10][10];
int sum = matrix_sum( a, 10);
printf("\n矩阵对角线元素为:%d\n",sum);
return 0;
}
2、请用C/C++编写一个程序完成以下功能:
- 如下图所示,设每个小格子都是边长为1的正方形。
- R为M*N个小格子组成的矩形。
- 打印出如图中R对角线经过的格子的坐标,M和N的值为大于1的随机整数。
思路:
代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void Print(int M, int N)
{
double rate = (double)M/(double)N;//利用相似三角形
float first = 0;
float end = rate; //用来判断M和N是否相等
int Fir;
int End;
int i,j;
for(i=0; i<N; ++i)
{
if(end == (int)end)
{
End = end;
}
else
{
End = end + 1;
}
Fir = first;
for(j=Fir; j<End; ++j)
{
printf(" (%d,%d)",i+1,j+1);
}
printf("\n");
first = end;
end = first + rate;
}
}
int main()
{
int start = 1;
int end = 10;
srand(time(0));
int M = rand()%(end-start)+start;
int N = rand()%(end-start)+start;
printf("%d*%d 矩阵对角线所经过的格子为:\n",M,N);
Print(M,N);
printf("\12");
M=9;N=5;
printf("%d*%d 矩阵对角线所经过的格子为:\n",M,N);
Print(M,N);
printf("\12");
M=5;N=5;
printf("%d*%d 矩阵对角线所经过的格子为:\n",M,N);
Print(M,N);
printf("\12");
return 0;
}