Алгоритмическое мышление
Вот как я бы решил эту проблему:
- Напишите алгоритм своими словами.
- Узнайте, как генерировать случайные числана языке C.
- Узнайте, как печатать информацию на экране.
Алгоритм
Алгоритм представляет собой набор шагов, необходимых для решения проблемы.Задание уже описывает проблему, но часто рекомендуется переписать ее своими словами.(На практике вы можете передать свои слова клиенту - в данном случае своему преподавателю - и подтвердить, что вы правильно поняли проблему).
- Создать двумерный массив
- Заполните массив случайными числами.
- Вычислите сумму каждой строки чисел (необходим счетчик суммы строк).
- Вычислите сумму каждого столбца чисел (нужен счетчик суммы столбцов).
- Вывести 2D-массив на экран.
- Вывести сумму каждой строки в конце каждой строки.
- Распечатать суммукаждый столбец в конце каждого столбца.
Предположение: ни сумма сумм не печатается.(Например, сумма столбца 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/
Разработка
Если вы действительно хотите «удивить» своего профессора:
- Определите части вашей программы, которые наиболее вероятно изменятся, и сделайте их постоянными.
- Разделите вашу программу на логические области (называемые функциями).
- Используйте значимую переменнуюимена.Да,
r
и c
, вероятно, представляют строки и столбцы, но в течение времени, необходимого для написания row
и column
, это избавит любого, кто читает ваш код, от необходимости делать предположения или читатькод, чтобы обнаружить его истинное использование. - Скажите своему профессору, что
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
.Если вы допустили ошибку, вы всегда можете сослаться на свою резервную копию.Со временем ваша «резервная копия» станет «хранилищем исходного кода».