C语言中4×3二维数组填充指定范围随机数输出异常求助
解决4×3二维数组输出为网格的问题
嘿,刚入门C语言碰到这种输出排版问题太常见啦!你说程序只输出一列数字,大概率是输出时的换行时机不对——每次打印一个数就换行,自然会变成垂直一列。我结合你的需求,给你写一份修正后的代码,再逐点解释问题所在:
修正后的完整代码
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> // 用于sqrt函数计算斜边 int main() { // 定义4行3列的二维数组 int triangle[4][3]; // 初始化随机数种子,确保每次运行生成不同随机数 srand((unsigned int)time(NULL)); // 填充数组:前两列是3-19的随机直角边,第三列计算斜边 for (int row = 0; row < 4; row++) { // 生成两条直角边(3到19之间,rand()%17是0-16,加3得到3-19) triangle[row][0] = rand() % 17 + 3; triangle[row][1] = rand() % 17 + 3; // 计算斜边,用round取整为整数(也可以用强制类型转换(int)) triangle[row][2] = (int)round(sqrt(pow(triangle[row][0], 2) + pow(triangle[row][1], 2))); } // 输出表头 printf("直角边1\t直角边2\t斜边\n"); // 按网格格式输出数组 for (int row = 0; row < 4; row++) { for (int col = 0; col < 3; col++) { // 每个元素后加制表符分隔,不换行 printf("%d\t", triangle[row][col]); } // 每行3个元素输出完后,再换行 printf("\n"); } return 0; }
关键问题解析
- 输出格式错误:你之前的代码应该是在打印每个元素时都用了
printf("%d\n", ...),\n会让每个数单独占一行。改成printf("%d\t", ...)用制表符分隔元素,等一行的3个元素都打印完,再单独换行一次,就能形成网格了。 - 随机数范围验证:
rand() % 17 + 3是正确的——rand()生成0到RAND_MAX的数,取模17得到0-16,加3后正好是3-19的整数。 - 斜边计算:用
sqrt和pow函数需要引入<math.h>头文件,如果你不需要浮点数转整数,也可以直接存储浮点型结果,把数组改成double triangle[4][3]就行。
额外小提示
- 如果想让输出更整齐,也可以用格式化输出比如
printf("%4d", ...),指定每个数字占4个字符宽度,避免不同位数的数字打乱对齐。 - 记得每次运行前要初始化随机数种子
srand(time(NULL)),不然每次生成的随机数序列都是一样的。
内容的提问来源于stack exchange,提问作者Zach Johnstone
相关产品推荐
相关产品推荐

