编写程序用指针逐步访问数组中的元素

该程序使用指针遍历二维数组来创建一个恒等矩阵。初始将所有元素设为0,然后每N个元素设置一个1,形成1在对角线上的矩阵。最后输出矩阵,每行结束后换行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面的代码段是用两个嵌套的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;    
}

程序运行结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值