《C和指针》习题8.8
问题
3.单位矩阵就是一个正方形矩阵,它除了主对角线元素值为1以外,其余元素的值均为0,例如:
*1 0 0
*0 1 0
*0 0 1
*就是一个3×3单位矩阵,编写一个名叫identity_matrix的函数,它接受一个10×10整型矩阵为参数
*成功返回1,失败返回1
4、修改前一个问题中的identity_matrix函数,它可以对数组进行扩展,从而能够接受任意大小的矩阵参数。函数的第一个参数应该是一个整型指针,你需要第二个参数,用于指定矩阵的大小。
代码
#include <stdio.h>
#define N 10
int identity_matrix( int (*matrix)[N] );
int identity_matrix_new( int *matrix, int number );
void main(void)
{
int matrix[][N] = {//这是一个10*10的单位矩阵
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
};
int result = identity_matrix( matrix ); //方式1
if( 0 == result ) printf("sucess!!!\n");
else printf("failed!!\n");
result = identity_matrix_new( matrix, 10 ); //方式2
if( 0 == result ) printf("sucess!!!\n");
else printf("failed!!\n");
}
/*
*判断单位矩阵 阶数固定为10
*输入: matrix指针数组
*返回:0成功 1失败
*/
int identity_matrix( int (*matrix)[N] )
{
int i=0,j=0;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if( i == j && matrix[i][j] != 1 ) return 1;
else if( i != j && matrix[i][j] !=0 ) return 1;
}
}
return 0;
}
/*
*判断单位矩阵new 指定阶数
*输入: matrix整形指针 number矩阵阶数
*返回:0成功 1失败
*/
int identity_matrix_new( int *matrix, int number )
{
int i=0,j=0;
for(i=0;i<number;i++)
{
for(j=0;j<number;j++)
{
if( i == j && *(matrix+i*number+j) != 1 ) return 1;
else if( i != j && *(matrix+i*number+j) !=0 ) return 1;
}
}
return 0;
}
展示