Приведенный ниже код выводит время, необходимое улитке, чтобы завершить гонку. Я понимаю, что должен использоваться оператор if, однако я изо всех сил пытаюсь найти способ присвоить мой окончательный код - TimeMinutes1 + TimeMinutes2 + TimeMinutes3 + TimeMinutes4, TimeSeconds1 + TimeSeconds2 + TimeSeconds3 + TimeSeconds4 переменная, которая может использоваться вместе с оператором IF ?
#include <stdio.h>
#include <stdlib.h>
int main()
{
char SquirrelName [20];
int TimeMinutes1;
int TimeMinutes2;
int TimeMinutes3;
int TimeMinutes4;
int TimeSeconds1;
int TimeSeconds2;
int TimeSeconds3;
int TimeSeconds4;
int TotalSeconds1;
int TotalSeconds2;
int TotalSeconds3;
int TotalSeconds4;
printf("What is the name of the squirrel? \n");
scanf("%s", SquirrelName);
printf("How long did it take to complete the first lap in Seconds? \n");
scanf("%d", &TotalSeconds1);
TimeMinutes1 = TotalSeconds1 / 60;
TimeSeconds1 = TotalSeconds1 % 60;
printf("Lap 1 finished in %d minutes and %d seconds\n", TimeMinutes1, TimeSeconds1);
printf("How long did it take to complete the second lap in Seconds? \n");
scanf("%d", &TotalSeconds2);
TimeMinutes2 = TotalSeconds2 / 60;
TimeSeconds2 = TotalSeconds2 % 60;
printf("Lap 2 finished in %d minutes and %d seconds\n", TimeMinutes2, TimeSeconds2);
printf("How long did it take to complete the third lap in Seconds? \n");
scanf("%d", &TotalSeconds3);
TimeMinutes3 = TotalSeconds3/ 60;
TimeSeconds3 = TotalSeconds3 % 60;
printf("Lap 3 finished in %d minutes and %d seconds\n", TimeMinutes3, TimeSeconds3);
printf("How long did it take to complete the fourth lap in Seconds? \n");
scanf("%d", &TotalSeconds4);
TimeMinutes4 = TotalSeconds4 / 60;
TimeSeconds4 = TotalSeconds4 % 60;
printf("Lap 4 finished in %d minutes and %d seconds\n", TimeMinutes4, TimeSeconds4);
printf("The total time it took for the course to complete was %d minutes and %d seconds\n", TimeMinutes1 + TimeMinutes2 + TimeMinutes3 + TimeMinutes4, TimeSeconds1 + TimeSeconds2 + TimeSeconds3 + TimeSeconds4);
return 0;
}
Вы можете привести нам пример того, что будет делать оператор if? (И, в частности, что вам нужно сделать, но вы не можете?) Вы можете сохранить их в отдельных переменных, и вы можете добавить минуты * 60 к секундам, если вы хотите, чтобы для тестирования была всего одна секунда (или просто сложите оригинальные TotalSeconds)
Вы можете описать словами, чем хотите заниматься?
Обратите внимание, что в существующем виде вы уже можете получить здесь недопустимое количество секунд в общей сумме, например если бы все четыре раза были 45 секунд, вы получите всего 0 минут 180 секунд. Вероятно, вам нужно пересчитать долю минут / секунд от общей суммы, а не просто складывать числа, которые у вас есть.
@Rup Хорошо, оператор if должен отображать, было ли время завершения курса менее 4 минут. В таком случае улитка могла бы участвовать в следующем соревновании.
Тогда я думаю, что проще всего было бы просто сложить TotalSeconds1 + 2 + 3 + 4 и проверить, меньше ли это 4 * 60. Но, как указано выше, вам, вероятно, все равно нужно это сделать, чтобы вы могли распечатать общее время, правильно разделенное на минуты и секунды, и если вы вычислите общее время в минутах и секундах, вы можете вместо этого просто протестировать минуты <4, если оно строго меньше чем четыре минуты.
Вы уже научились писать функции? Если это так, ваш код выиграет от использования некоторых функций, а не от написания почти одного и того же кода 4 раза.
@Rup О да, я вижу, спасибо. Однако при этом, как мне назначить переменные, которые становятся единственной переменной, все минуты и секунды, которые я сложил?
То же, что вы уже сделали? Объявите int RaceTotalSeconds, RaceMinutes, RaceSeconds;, а затем, когда у вас будет время круга, RaceTotalSeconds = TotalSeconds1 + TotalSeconds2 + TotalSeconds3 + TotalSeconds4; RaceMinutes = RaceTotalSeconds / 60; RaceSeconds = RaceTotalSeconds % 60;
@JonathanLeffler Нет, я только что начал программировать.
Да, сложите общее количество секунд и разделите на 60, чтобы получить общее количество минут - будучи целыми числами, полученное значение будет автоматически округлено в меньшую сторону.
totalSeconds = TotalSeconds1 + TotalSeconds2 + TotalSeconds3 + TotalSeconds4; if (totalSeconds < 240) { printf("Snail or Squirrel or whatever qualified!\n"); }Если вы не научились писать и использовать функции, которые вы написали, тогда можно (в основном) делать то, что вы сделали. Вы узнали о массивах? Опять же, можно было бы писать меньше кода, если бы вы использовали массивы и циклы вместо того, чтобы писать почти один и тот же код 4 раза. И, опять же, если вы не узнали о них, пусть будет так; они стоят на повестке дня в не очень отдаленном будущем, как и написание и использование функций, отличных от main().
@Rup Спасибо за помощь, код работает отлично
@TormundGiantsbane Спасибо за помощь
@JonathanLeffler Спасибо, я обязательно посмотрю на это подробнее.





Если я правильно понимаю, вы хотите сделать что-то вроде этого:
If the total time is less than 4 minutes then display a message
Когда вы произносите это по-английски так, это помогает облегчить перевод в код. Сначала нам нужно рассчитать общее время. Вы можете сделать это с помощью одного задания:
int total = TotalSeconds1 + TotalSeconds2 + TotalSecond3 + TotalSeconds4;
Теперь мы можем написать оператор if. Один из способов сделать это - преобразовать 4 минуты в секунды, но мне лень делать это вручную, поэтому я пишу это явно в коде:
if (total <= 4 * 60) {
printf("You qualified!")
}
Конечно, вы можете изменить здесь сообщение в соответствии со своими потребностями.
Несколько предложений:
Используйте осмысленные имена переменных. По большей части у вас это очень хорошо получается. Мое единственное предложение - использовать lap1, lap2 и т. д. Вместо TotalSeconds1.
Узнайте о петлях. Я понимаю, что вы новичок в программировании. Если вы еще не узнали о лупах for и while, я уверен, что они скоро появятся в классе. Это отличные инструменты, которые позволяют писать меньше кода для повторяющихся задач.
Узнайте о массивах. В том же духе, что и № 2, массивы позволяют хранить списки данных с одной переменной. Всякий раз, когда вы обнаруживаете, что называете переменные числами на конце, вам, скорее всего, следует использовать вместо этого массив.
Когда есть несколько / много переменных, оканчивающихся цифрой, например foo1, foo2, foo3 и т. д., Это указывает на то, что мы должны использовать массив [и цикл вместо репликации кода].
Если у нас есть несколько параллельных массивов, которые индексируются одной и той же индексной переменной, например:
#define LAPCOUNT 4
int time_tot[LAPCOUNT];
int time_min[LAPCOUNT];
int time_sec[LAPCOUNT];
Это указывает на то, что мы должны создать struct и иметь массив этих структур.
Вот версия вашего кода, в которой используются эти идеи:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int time_tot;
int time_min;
int time_sec;
} lap_t;
#define LAPCOUNT 4
int
main(void)
{
char SquirrelName[20];
int lapidx;
lap_t *lap;
lap_t laplist[LAPCOUNT];
lap_t laptot;
printf("What is the name of the squirrel? \n");
scanf("%s", SquirrelName);
for (lapidx = 0; lapidx < LAPCOUNT; ++lapidx) {
lap = &laplist[lapidx];
printf("How long did it take to complete lap %d in Seconds? \n",
lapidx + 1);
scanf("%d", &lap->time_tot);
lap->time_min = lap->time_tot / 60;
lap->time_sec = lap->time_tot % 60;
printf("Lap %d finished in %d minutes and %d seconds\n",
lapidx + 1,lap->time_min, lap->time_sec);
}
laptot.time_min = 0;
laptot.time_sec = 0;
laptot.time_tot = 0;
for (lapidx = 0; lapidx < LAPCOUNT; ++lapidx) {
lap = &laplist[lapidx];
laptot.time_min += lap->time_min;
laptot.time_sec += lap->time_sec;
laptot.time_tot += lap->time_tot;
}
#if 0
printf("The total time it took for the course to complete was %d minutes and %d seconds\n",
laptot.time_min,laptot.time_sec);
#else
laptot.time_min = laptot.time_tot / 60;
laptot.time_sec = laptot.time_tot / 60;
printf("The total time it took for the course to complete was %d minutes and %d seconds\n",
laptot.time_min,laptot.time_sec);
#endif
return 0;
}
Обновлено:
Thanks I’ll definitely look more into this
Это важная концепция для будущего.
Использование массива бы стало более очевидным, если бы количество кругов было больше, скажем, 100, а не только 4.
При разработке алгоритма следует задать себе важный вопрос: Мое решение "масштабируется" [вверх]?
struct подобен форме или записи [базы данных]. Он объединяет все связанные вещи. Форма - это отдельный лист бумаги, содержащий всю информацию по заданной теме (например, налоговая форма или кадровая документация).
Рассмотрим простой кадровый учет:
typedef struct {
char person_name[100];
char person_street[100];
char person_city[100];
char person_state[2];
char person_telno[10];
int person_age;
float person_salary;
} person;
Это похоже на одну страницу на человека, и файл сотрудника содержит все такие страницы.
Без идея struct, нам понадобятся отдельные папки с файлами для каждого из вышеуказанных "полей" записи.
Имена:
Smith, John
Jones, Fred
Miller, Mary
Улицы:
123 Main St
235 Elm St
63 Oak Ave
Города:
New York
Chicago
Los Angeles
Используя struct, наша организация будет больше похожа на:
Smith, John 123 Main St New York
Jones, Fred 235 Elm St Chicago
Miller, Mary 63 Oak Ave Los Angeles
С точки зрения реального мира, конечно, такая организация данных кажется очевидной. Но при кодировании, особенно для более абстрактных вещей, иногда это может быть скрыто из-за сложности проблемы.
Возможность доработать / уменьшить код [часто я удостоверяюсь, что используемые структуры данных минимальны и полны], может сохранять код простым, чистым и надежным.
Это может случиться даже с опытными программистами. В реальном коммерческом продукте, над которым я работал, я обнаружил, что используются «параллельные массивы». Я изменил код, чтобы использовать массив созданного мной нового struct. Я сделал это только для того, чтобы упростить / очистить код. В процессе мне удалось обнаружить и исправить по крайней мере пять ошибок, которые были скрытыми и не были очевидными до очистки.
Спасибо, я обязательно посмотрю на это подробнее
@ itsme86 сделал эту программу, используя c