在C语言中使用数组
我有一个麻烦的家庭作业,希望有正确方向的指针 任务是开发一个C程序,该程序可实现以下功能:在C语言中使用数组,c,arrays,2d,C,Arrays,2d,我有一个麻烦的家庭作业,希望有正确方向的指针 任务是开发一个C程序,该程序可实现以下功能: 在main()中,创建一个名为qqqq的二维数组,该数组可以容纳48个整数(6行8列) 使用1到15之间随机生成的整数值填充qqqq 计算每行的总数 计算每列的总数 以表格格式显示二维数组的内容,行总计位于行的右侧,列总计位于列的底部 在main之后从何处开始 以下是我到目前为止的情况: int main (void) { int qqqqq [6] [8]; int r; int
main()
中,创建一个名为qqqq的二维数组,该数组可以容纳48个整数(6行8列)qqqq
main
之后从何处开始
以下是我到目前为止的情况:
int main (void)
{
int qqqqq [6] [8];
int r;
int c;
srandom ((unsiged) time (NULL));
for (r=0; r <=6; r++)
{
for(c=0; c <=8; c++)
{
qqqqq[r][c] = random ( )
int main(无效)
{
int-qqq[6][8];;
INTR;
INTC;
srandom((未生成)时间(NULL));
对于(r=0;r一些关键事项:
random()返回什么
行/列的总数是多少?
这只是把所有的数据加起来
行/列中的数字。请重试
编写一个函数来累加所有
给定行或列中的值
想一想如何打印出一行
矩阵的,然后对每个
矩阵中的行
共有6行和8列,每个行和列都需要一个总数。首先,制作更多的数组作为存储这些总数的位置。这是一个非常好的开始!不过,请注意,维度X的数组的有效索引是0…(X-1)。您的循环应该如下所示
for (r=0; r <6; r++)
for(r=0;r算法思维
以下是我将如何解决这个问题:
用我自己的话写下算法
了解如何用C语言生成随机数
了解如何在屏幕上打印信息
算法
算法是解决问题所需的一组步骤。手头的任务已经描述了问题,但通常用自己的话重新编写是一种很好的做法。(作为实践点,你可以把你的话告诉你的客户——在本例中是你的老师——并确认你对问题的理解是正确的。)
创建二维阵列
用随机数填充数组
计算每行数字的和(需要行和计数器)
计算每列数字的总和(需要一个列总和计数器)
将2D阵列打印到屏幕上
在每行末尾打印每行的总和
在每列末尾打印每列的总和
假设:既不打印总和(例如,列总和的总和)
生成随机数
谷歌在这里很有用。请尝试谷歌搜索:
generate random integers C
你会发现很多帮助,特别是关于rand()
函数的提示。修改谷歌搜索:
generate random integers C rand()
此搜索找到了一个很好的资源:
打印信息
同样,谷歌搜索在这里也有帮助:
print information on the screen in C
这将产生:
printf
功能似乎很方便。了解更多信息:
printf C
这将产生一个熟悉的站点:
发展
如果你真的想让你的教授“惊叹”:
确定程序中最有可能更改的部分,并将其设置为常量
将程序划分为逻辑区域(称为函数)
使用有意义的变量名。是的r
和c
可能表示行和列,但就拼写行和列所需的时间而言,这将使任何阅读代码的人不必猜测或阅读代码以发现其真正用途
告诉你的教授,qqqq
可以用一个更好的名字。甚至建议一个
例如:
#include <stdio.h>
/* Subject to change; only change it in one spot. */
#define MAX_ROWS 6
#define MAX_COLS 8
#define MIN_RANDOM_NUMBER 1
#define MAX_RANDOM_NUMBER 15
/** Returns a number between MIN_RANDOM_NUMBER and MAX_RANDOM_NUMBER. */
int randomNumber() {
return 0; /* FIX ME to use rand() and the modulus operator. */
}
int main( int argc, char *argv[] ) {
int qqqqq[MAX_ROWS][MAX_COLS];
/* FIX ME: Move these variables into the display function. */
int sumRows = 0;
int sumCols = 0;
/* Use different random numbers each time the program runs. */
seedRandomNumber();
/* Initialize the array with random numbers. */
for( int row = 0; row < MAX_ROWS; row++ ) {
for( int col = 0; col < MAX_COLS; col++ ) {
qqqqq[row][col] = randomNumber();
}
}
/* Display the array to the screen along with the sum totals. */
display( qqqqq );
}
这应该让你开始
请注意,您可以在此处进行许多简化和优化。忘记它们。首先获取代码,使其实际工作。一旦代码工作,请保存它。甚至创建备份副本
然后开始更改它。看看你是否可以删除变量。也许你甚至可以删除一些for
循环。如果你犯了错误,你可以随时引用你的备份副本。最终你的“备份”副本将成为“源代码存储库”.提示:使用%
运算符获取1到15之间的数字。对于随机数,您可能会发现此链接很有用:mod运算符不是将随机数的结果映射到不同范围的好方法;它对于类分配来说效果很好,但根据所使用的RNG,您可能会得到绝对非随机的值分布s、 更好的方法是:val=(int)((rand()/(double)rand_MAX)*(MAX-min+1)+min);
void display( int randomValues[MAX_ROWS][MAX_COLS] ) {
int sumCols = 0;
for( int row = 0; row < MAX_ROWS; row++ ) {
/* FIX ME: Write the calculateSumCols function. */
sumCols = calculateSumCols( randomValues, row );
for( int col = 0; col < MAX_COLS; col++ ) {
/* FIX ME: Use printf here to display the value at this row/column. */
}
}
/* FIX ME: Use printf here to display sumRows. */
for( int col = 0; col < MAX_COLS; col++ ) {
/* FIX ME: Use printf here to display the value of the rows. */
printf( "%d ", calculateSumRows( randomValues, col ) );
}
}