下面的代码段是用两个嵌套的for循环初始化数组ident,此数组是用作恒等矩阵。请重新编写这段代码,采用一个指针来逐步访问数组中的元素,且每次一个元素。 程序段如下:
float ident[N][N];
int row, col;
for(row = 0; row < N; row++)
for(col = 0; col < N; col++)
if(col == row)
ident[row][col] = 1.0;
else
ident[row][col] = 0.0;
提示:因为不能用row和col来索引变量,所以不会很容易知道哪里存储1。但是,可以利用数组的第一个元素必须是1这个事实,接着N个元素都必须是0,再接下来的元素是1,以此类推。用变量来跟踪连续的0的数量,并把此变量存储起来。当计数达到N时,就是存储1的时候了。
改写程序如下:
#include <stdio.h>
#define N 5
main(){
float ident[N][N], *p;
int num = 0;
for(p = &ident[0][0]; p <= &ident[N - 1][N - 1]; p++) /* 初始化数组,全部赋值为0.0 */
*p = 0.0;
for(p = &ident[0][0]; p <= &ident[N - 1][N - 1]; p++){ /* 第一个数赋值为1.0,每隔N个数赋值为1.0 */
*p = 1.0;
p += N;
}
for(p = &ident[0][0]; p <= &ident[N - 1][N - 1]; p++){ /* 输出数组,每隔N个数换行 */
printf("%4.1f", *p);
num++;
if(num % N == 0) printf("%\n");
}
return 0;
}
程序运行结果如下:
