这是我第一个用C语言编写的程序,我只是在修改这个想法,因为我在一个基于音乐的课程上,而synth插件都使用毫秒作为它的时间。
任何改进,以使它更有效率或更少的依赖与一点解释,将是非常感谢的。
/* declarations */
int crotchet(int);
int semibreve(int);
int minim(int);
int quaver(int);
int semiquaver(int);
int demisemiquaver(int);
int main() {
int bpm;
/* Ask for note bpm */
printf("Enter bpm value:\n");
scanf("%d", &bpm);
/* returns note lengths from functions */
printf("Semibreve would last for... ");
printf("%d", semibreve(bpm));
printf(" miliseconds! \n");
return 0;
}
int crotchet(int bpm)
{
/* 1 second = 1000
1 min = 60 seconds = 6000 miliseconds
*/
int crotchet;
crotchet = 6000 / bpm;
return crotchet;
}
int semibreve(int bpm)
{
int crot;
crot = crotchet(bpm);
int semibreve;
semibreve = crot * 4;
return semibreve;
}
int minim(int bpm)
{
int crot;
crot = crotchet(bpm);
int minim;
minim = crot * 2;
return minim;
}同样适用于quaver (用2除以crot )、半quaver(除以4)和半quaver(除以8)。
对音乐理论的任何其他解释,我也会补充,如果要求。
发布于 2016-09-23 05:07:41
你的计算都是10倍:一分钟是60000毫秒,而不是6000毫秒。与其使用注释解释6000,不如将其写在代码中,编译器将为您解决这个问题。这种计算根本不会花费任何运行时性能。
我不推荐这种设计,每种类型的注释定义一个函数。我认为,一项功能应该涵盖一切。
既然使用printf()和scanf(),就应该使用#include <stdio.h>。
通常将main()放在末尾,这样您就不必事先声明它使用的函数。
#include <stdio.h>
#define SEMIBREVE (1.0)
#define MINIM (1.0/2)
#define CROTCHET (1.0/4)
#define QUAVER (1.0/8)
#define SEMIQUAVER (1.0/16)
#define DEMISEMIQUAVER (1.0/32)
int millisec(int bpm, double note) {
return (int)(
60 /* seconds */
* 1000 /* milliseconds per second */
* 4 /* crotchets per semibreve */
* note
/ bpm
);
}
int main() {
int bpm;
printf("Enter tempo (crotchets per minute): ");
scanf("%d", &bpm);
printf("Semibreve would last for... %d milliseconds!\n", millisec(bpm, SEMIBREVE));
printf("Dotted crotchet would last for... %d milliseconds!\n", millisec(bpm, 1.5 * CROTCHET));
printf("Demisemiquaver would last for... %d milliseconds!\n", millisec(bpm, DEMISEMIQUAVER));
}https://codereview.stackexchange.com/questions/142190
复制相似问题