我是C的新手。我想添加两个一维整数数组名a[10] b[10]
。
我想把结果放在像二维数组c[5][2]
c[i][j] = a[i]+b[i];
但如果我使用2 for
个循环,那么我如何访问a[9]
,b[9]
值。所以我想使用一个for
循环执行a[i]+b[i]
并将结果放入c[i][j]
。
谁能告诉我怎么做?
答案 0 :(得分:1)
如果我理解你的问题,你可以这样做:
int col=0; //col counter
int row=0; // row counter
for(int x=0;x<9;x++)
{
if(col>x/2) // check the end of row
{
row++; // increment row
col=0; // reset col counter
}
c[row][col]=a[x]+b[x]; // assignement
col++;
}
答案 1 :(得分:0)
只需将数字(0到9)转换为基数5中a
(或b
)的索引:
base 10 | base 5 0 ==> 00 1 ==> 01 ... 4 ==> 04 5 ==> 10 6 ==> 11 ... 9 ==> 14
然后使用结果中的每个基数为5的数字来索引c
编辑:伪示例
for (k = 0; k < 10; k++) {
b5 = base5(k); /* when k is 7, b5 becomes 12 */
c0 = nthdigit(b5, 0); /* when b5 is 12, c0 becomes 2 */
c1 = nthdigit(b5, 1); /* when b5 is 12, c1 becomes 1 */
c[c1][c0] = a[k] + b[k];
}
答案 2 :(得分:0)
好的,所以你将不得不使用两个for循环。这是因为如果您尝试使用其中一个来实现所需的内容c[i][j]
将会均匀上升,即i
将始终等于j
。当你得到任何大于2的数字时,这就成了问题,因为这是j
的最大大小。所以我建议采用以下格式
int i=0, j=0;
int a[10], b[10], c[5][2];
for(i=0; i<10; ++i)
{
for(j=0; j<2; ++j)
{
a[i]+b[i] = c[i][j];
}
}
根据您的需要,将printf
声明置于此内或之后。但请记住首先使用值初始化数组,否则它们将打印垃圾。所以要么使用scanf
并提示用户输入a[10]
和b [10] or else use the format
a [10] = {val1,val2,val3 ...}`
希望我一直很有帮助
答案 3 :(得分:0)
这可能会有所帮助(如果我理解的话):
for ( int i = 0 ; i < 10 ; ++i)
{
c[i%5][i/5] = a[i] + b[i] ;
}