C语言如何实现3个3×3整型数组的随机赋值、相加与打印?
C语言3×3数组对应位置求和实现方案
原代码存在的问题
- 数组访问越界:C语言中3×3数组的合法下标范围是0~2,原代码初始化c数组时使用的
a[3][3]、b[3][3]属于越界访问,会读取到未知的内存值 - 初始化逻辑错误:C语言不支持在数组定义阶段通过
{a[i][j]+b[i][j]}这种写法批量计算所有二维数组元素的值,且初始化c数组时a、b数组还未填充随机值,根本拿不到正确的运算数据 - 打印逻辑错误:
printf函数没有写%d整型格式占位符,传入的数组参数无法被正常输出 - 缺失必要头文件:代码中用到的输入输出、随机数生成、时间函数都需要引入对应头文件,否则无法通过编译
- 逻辑顺序错误:求和操作必须放在a、b数组完成随机数赋值之后执行,原代码完全缺失c数组的逐元素求和逻辑
正确实现代码
#include <stdio.h> #include <stdlib.h> #include <time.h> int main () { int i, j; int a[3][3]; int b[3][3]; int c[3][3]; // 初始化随机数种子,整个程序仅需调用1次,不要放在循环内 srand(time(NULL)); printf("数组元素打印结果:\n"); printf("a数组元素\tb数组元素\tc数组元素(a+b)\n"); for (i = 0; i < 3; i++) { for(j = 0; j < 3; j++) { // 给a、b数组填充1~10范围的随机整数 a[i][j] = rand() % 10 + 1; b[i][j] = rand() % 10 + 1; // 按规则计算c数组对应位置的和 c[i][j] = a[i][j] + b[i][j]; // 带格式占位符打印三个数组对应位置的元素 printf("%d\t\t%d\t\t%d\n", a[i][j], b[i][j], c[i][j]); } } return 0; }
关键说明
- 随机数种子
srand(time(NULL))必须放在所有rand()调用之前,且不能放在循环内部,否则会因为时间戳更新精度问题生成大量重复随机数 - 二维数组遍历必须严格控制下标在合法范围内,禁止访问超出数组长度的下标,避免出现内存访问错误
- 使用
printf打印变量时必须匹配对应类型的格式占位符,整型对应%d,否则无法得到预期输出
内容的提问来源于stack exchange,提问作者sayın
相关产品推荐
相关产品推荐

