char buf[40 * 5 + 1];
buf[40 * 5] = '\0'; // 末尾に車止め
...
for (i =...
  for (j =...
    fread(buf, sizeof(char), 40 * 5, fp1); // 5桁が40個
    for (k = 0; k < 40; k++)
      x[i][j][k] = atoi(buf[k * 5]);
...
こういう意味だよね?