Использование массивов в C - PullRequest
2 голосов
/ 05 апреля 2011

У меня тревожное домашнее задание и я хочу указатели в правильном направлении.

Задача состоит в том, чтобы разработать программу на C, которая выполняет следующее:

  1. В main() создайте двумерный массив с именем qqqqq, который может содержать 48 целых чисел (6 строк, 8 столбцов)
  2. Заполните qqqqq случайно сгенерированными целочисленными значениями от 1 до 15.
  3. Рассчитать сумму для каждой строки.
  4. Рассчитать сумму для каждого столбца.
  5. Отображение содержимого двумерного массива в табличном формате с итогами строк справа от строк и итогами столбцов в нижней части столбцов.

С чего начать после 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 ( )

Что мне делать дальше?

Я ценю любую помощь или руководство.

Спасибо -Джеймс

Ответы [ 4 ]

5 голосов
/ 05 апреля 2011

Алгоритмическое мышление

Вот как я бы решил эту проблему:

  1. Напишите алгоритм своими словами.
  2. Узнайте, как генерировать случайные числана языке C.
  3. Узнайте, как печатать информацию на экране.

Алгоритм

Алгоритм представляет собой набор шагов, необходимых для решения проблемы.Задание уже описывает проблему, но часто рекомендуется переписать ее своими словами.(На практике вы можете передать свои слова клиенту - в данном случае своему преподавателю - и подтвердить, что вы правильно поняли проблему).

  1. Создать двумерный массив
  2. Заполните массив случайными числами.
  3. Вычислите сумму каждой строки чисел (необходим счетчик суммы строк).
  4. Вычислите сумму каждого столбца чисел (нужен счетчик суммы столбцов).
  5. Вывести 2D-массив на экран.
  6. Вывести сумму каждой строки в конце каждой строки.
  7. Распечатать суммукаждый столбец в конце каждого столбца.

Предположение: ни сумма сумм не печатается.(Например, сумма столбца sum.)

Генерация случайных чисел

Здесь вам поможет Google.Попробуйте в Google поиск:

generate random integers C

Вы найдете много помощи, особенно советы о функции rand().Измените поиск Google:

generate random integers C rand()

Этот поиск находит большой ресурс: http://www.cplusplus.com/reference/clibrary/cstdlib/rand/

Информация для печати

Опять же, поиск Google может помочь здесь:

print information on the screen in C

Это дает: http://www.daniweb.com/software-development/c/threads/9688

Функция printf кажется удобной.Узнайте больше об этом:

printf C

Это дает знакомый сайт: http://www.cplusplus.com/reference/clibrary/cstdio/printf/

Разработка

Если вы действительно хотите «удивить» своего профессора:

  1. Определите части вашей программы, которые наиболее вероятно изменятся, и сделайте их постоянными.
  2. Разделите вашу программу на логические области (называемые функциями).
  3. Используйте значимую переменнуюимена.Да, r и c, вероятно, представляют строки и столбцы, но в течение времени, необходимого для написания row и column, это избавит любого, кто читает ваш код, от необходимости делать предположения или читатькод, чтобы обнаружить его истинное использование.
  4. Скажите своему профессору, что qqqqq может использовать более подходящее имя.Предложите одно, четное.

Например:

#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 );
}

Обратите внимание, что у вас есть выбор.

Вы можете передать переменную sumRows вфункцию display, или вы можете закодировать функцию display для вызова самого calculateSumRows.Я предпочитаю всегда упрощать прототипы функций.То есть уменьшить количество параметров.Это облегчает изменения в будущем.

Поэтому напишите display как-то так:

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 ) );
  }
}

Это должно помочь вам начать.

Обратите внимание, что естьряд упрощений и оптимизаций вы можете сделать здесь.Забудь их.Получите код, чтобы он действительно работал первым.Как только код заработает, сохраните его.Сделайте резервную копию, даже.

Затем начните ее менять.Посмотрите, можете ли вы удалить переменные.Возможно, вы даже можете удалить некоторые из петель for.Если вы допустили ошибку, вы всегда можете сослаться на свою резервную копию.Со временем ваша «резервная копия» станет «хранилищем исходного кода».

3 голосов
/ 05 апреля 2011

Это довольно хорошее начало! Обратите внимание, что действительными индексами для массива измерения X являются 0 ... (X-1). Ваши петли должны выглядеть как

for (r=0; r <6; r++)

(Обратите внимание, что «<6», а не «<= 6». </p>

Теперь вам нужен еще один массив для хранения итогов строки и массив для хранения итогов столбца, а затем еще несколько циклов для их вычисления и сохранения в массивах.

1 голос
/ 05 апреля 2011

Некоторые ключевые вещи:

  1. Что возвращает random ()?
  2. Какова общая сумма строки / столбца?Это просто сложение всех чисел в строке / столбце.Попробуйте написать функцию, чтобы сложить все значения в одну строку или столбец.
  3. Подумайте, как распечатать строку матрицы.Затем сделайте это для каждой строки в матрице.
0 голосов
/ 05 апреля 2011

Есть 6 строк и 8 столбцов, и вам нужно общее количество для каждого из них.Начните с создания еще нескольких массивов в качестве мест для хранения этих итогов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...