C阵列使用问题

时间:2011-05-31 09:43:04

标签: c arrays multidimensional-array

我是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]

谁能告诉我怎么做?

  • 如何使用单个for循环将值放在2维数组中?
  • 如何使用单个for循环打印2维数组的值?
  • 请不要介意我的英语或问题格式,因为我的英语很差。

4 个答案:

答案 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] ;
}