以下代码用于输出蜗牛完成比赛所需的时间。我知道要使用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;
}
答案 0 :(得分:1)
只要有多个/很多以数字结尾的变量,例如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;
}
更新:
谢谢,我一定会对此进行深入研究
这是未来的重要概念。
如果圈数更大,例如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
的数组。我这样做只是为了简化/清理代码。在此过程中,我能够发现并修复至少五个潜在的,直到清理才明显的错误。
答案 1 :(得分:0)
如果我正确理解您想要做的事情,像这样:
如果总时间少于4分钟,则显示一条消息
当您用英语这样说时,它有助于简化翻译成代码的过程。首先,我们需要计算总时间。您可以通过一次分配来做到这一点:
int total = TotalSeconds1 + TotalSeconds2 + TotalSecond3 + TotalSeconds4;
现在我们可以编写一个if语句。一种方法是将4分钟转换为秒,但是我懒得手工完成,所以我在代码中明确地写了它:
if (total <= 4 * 60) {
printf("You qualified!")
}
当然,您可以在此处更改此消息以适合您的需求。
一些建议:
使用有意义的变量名。在大多数情况下,您都做得很好。我在这里的唯一建议是使用lap1
,lap2
等代替TotalSeconds1
。
了解循环。我了解您是编程新手。如果您尚未了解for
和while
循环,那么我敢肯定它们会在课堂上出现。这些出色的工具可让您为重复执行的任务编写更少的代码。
了解数组。与#2相同,数组允许您使用单个变量存储数据列表。每当发现自己在变量的末尾都用数字命名时,就应该使用数组代替。