用C语言弹一首卡农

B站教程

1.左手

#include<stdio.h>
#include<windows.h>

using namespace std;

#define qdo 262 
#define qre 294
#define qmi 330
#define qfa 349
#define qso 392
#define qla 440
#define qsi 494
#define do_ 523
#define re 578
#define mi 659
#define fa 698
#define so 784
#define la 880
#define si 988
#define do1 1046
#define re1 1175
#define mi1 1318
#define fa1 1480
#define so1 1568
#define la1 1760
#define si1 1976
#define sqdo 277
#define sqre 311
#define sqfa 370
#define sqso 415
#define sqla 466
#define sdo 554
#define sre 622
#define sfa 740
#define sso 831
#define sla 932
#define sdo1 1046
#define sre1 1245
#define sfa1 1480
#define sso1 1661
#define sla1 1865

#define P 3   //折合bpm==120,原bpm为105,此处取了个近似值

#define semibreve 1024
#define minim 512     
#define crotchet    256
#define quaver    128
#define semiquaver    64
#define demisemiquaver    32
#define hemidemisemiquaver   16

//semibreve     全音符 
//minim         二分音符 
//crotchet         四分音符 
//quaver         八分音符3 
//semiquaver     十六分音符 
//demisemiquaver 三十二分音符 
//hemidemisemiquaver 六十四分音符 
typedef struct 
{
    int freq; //赫兹
    int duration;//持续时间
    char text[32];//文本内容
}STU;
STU t[]=
    {
        //1
        {0,semibreve,"开始...\n第1个次拍\n"},
        //2
        {0,semibreve,"第2个次拍\n\n"},
        //3 
        {0,semibreve,"第3个次拍\n\n"},
        //4
        {0,semibreve,"第4个次拍\n\n"},
        //5
        {0,semibreve,"第5个次拍\n\n"},
        //6
        {0,semibreve,"第6个次拍\n\n"},      
        //7
        {0,semibreve,"第7个次拍\n\n"}, 
        //8
        {0,semibreve,"第8个次拍\n\n"},
        //9
        {0,semibreve,"第9个次拍\n\n"},
        //10
         {do_, quaver, "第10个次拍\ndo "}, 
        {re, quaver, "re "},         
         {mi, quaver, "mi "}, 
        {fa, quaver, "fa "},      
        {so, quaver, "so "}, 
        {re, quaver, "re "}, 
        {do_, quaver, "do "}, 
        {qsi, quaver, "qsi "},
        //11   
         {do_, quaver, "\n第11个次拍\ndo "}, 
        {la, quaver, "la "},         
         {so, quaver, "so "}, 
        {fa, quaver, "fa "},      
        {mi, quaver, "mi "}, 
        {fa, quaver, "fa "}, 
        {so, quaver, "so "}, 
        {la, quaver, "la "},      
        //12
         {fa, quaver, "\n第12个次拍\nfa "}, 
        {re, quaver, "re "},         
         {re, quaver, "re "}, 
        {fa, quaver, "fa "},      
        {mi, quaver, "mi "}, 
        {re, quaver, "re "}, 
        {do_, quaver, "do "}, 
        {qsi, quaver, "qsi "},       
        //13
         {qla, quaver, "\n第13个次拍\nqla "}, 
        {do_, quaver, "do "},         
         {fa, quaver, "fa "}, 
        {mi, quaver, "mi "},      
        {re, quaver, "re "}, 
        {mi, quaver, "mi "}, 
        {fa, quaver, "fa "}, 
        {mi, quaver, "mi "},
        //14
        {do_, minim, "\n第14个次拍\ndo "}, 
        {qso, minim, "qso "},         
        //15    
        {qla, minim, "\n第15个次拍\nqla "}, 
        {qmi, minim, "qmi "},       
        //16
        {qfa, minim, "\n第16个次拍\nqfa "}, 
        {qdo, minim, "qdo "},       
        //17
        {qfa, minim, "\n第17个次拍\nqfa "}, 
        {qso, minim, "qso "}, 
        //18     
        {do_, minim, "\n第18个次拍\ndo "}, 
        {qso, minim, "qso "}, 
        //19
        {qla, minim, "\n第19个次拍\nqla "}, 
        {qmi, minim, "qmi "},
        //20          
        {qfa, minim, "\n第20个次拍\nqfa "}, 
        {qdo, minim, "do "},
        //21         
        {qfa, minim, "\n第21个次拍\nqfa "}, 
        {qso, minim, "qso "},      
        //22
        {do_, minim, "\n第22个次拍\ndo "}, 
        {qsi, minim, "qsi "}, 
        //23
        {qla, minim, "\n第23个次拍\nqla "}, 
        {qso, minim, "qso "},  
        //24
        {qfa, quaver, "\n第24个次拍\nqfa "}, 
        {qmi, semiquaver, "qmi "},
        //25      
        {qla, minim, "\n第25个次拍\nqla "}, 
        {qso, quaver, "qso "}, 
        {qsi, semiquaver, "si "},
        //26
        {do_, minim, "\n第26个次拍\ndo "},      
        {qsi, minim, "qsi "},
        //27
        {qla, minim, "\n第27个次拍\nqla "},         
        {qso, minim, "qso "}, 
        //28
        {qfa, minim, "\n第28个次拍\nqfa "},      
        {qmi, minim, "qmi "}, 
        //29
        {do_, minim, "\n第29个次拍\ndo "}, 
        {qso, minim, "qso "}, 
        //30
        {do_, minim, "\n第30个次拍\ndo "}, 
        {qso, minim, "qso "},
        //31
        {qla, minim, "\n第31个次拍\nqla "},         
        {qso, minim, "qso "}, 
        //32
        {qla, minim, "\n第32个次拍\nqla "},         
        {do_, minim, "do "},
        //33
        {qla, minim, "\n第33个次拍\nqla "},         
        {qso, minim, "qso "},         
        //34
        {do_, minim, "\n第34个次拍\ndo "},       

};

using namespace std;
int main(void)
{
    static int a=1;

    int i;
    int aaa;
    scanf("%d",&aaa); 
    //结构体数组的长度sizeof(t)/sizeof(STU)得到,总结构体数组大小 / 单个结构体大小
    for (i=0; i<sizeof(t)/sizeof(STU); i++)
    {
        printf("%s",t[i].text);
        Beep(t[i].freq,t[i].duration*P);
    }
    return 0;
}

2.右手

#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
using namespace std;

#define qdo 262 
#define qre 294
#define qmi 330
#define qfa 349
#define qso 392
#define qla 440
#define qsi 494
#define do_ 523
#define re 578
#define mi 659
#define fa 698
#define so 784
#define la 880
#define si 988
#define do1 1046
#define re1 1175
#define mi1 1318
#define fa1 1480
#define so1 1568
#define la1 1760
#define si1 1976
#define sqdo 277
#define sqre 311
#define sqfa 370
#define sqso 415
#define sqla 466
#define sdo 554
#define sre 622
#define sfa 740
#define sso 831
#define sla 932
#define sdo1 1046
#define sre1 1245
#define sfa1 1480
#define sso1 1661
#define sla1 1865

#define P 3   //折合bpm==120,原bpm为105,此处取了个近似值

#define semibreve 1024
#define minim 512     
#define crotchet    256
#define quaver    128
#define semiquaver    64
#define demisemiquaver    32
#define hemidemisemiquaver   16

//semibreve     全音符 
//minim         二分音符 
//crotchet         四分音符 
//quaver         八分音符 
//semiquaver     十六分音符 
//demisemiquaver 三十二分音符 
//hemidemisemiquaver 六十四分音符 
typedef struct 
{
    int freq; //赫兹
    int duration;//持续时间
    char text[32];//文本内容
}STU;
STU t[]=
    {
        //1
        //空节拍 
        {0,semibreve,"开始...\n第1个次拍\n"},
        //2
        {do1, minim, "\n第2个次拍\ndo1 "},   
        {si, minim, "si "},
        //3 
        {la, minim, "\n第3个次拍\nla "}, 
        {so, minim, "so "}, 
        //4
        {fa, minim, "\n第4个次拍\nfa "}, 
        {mi, minim, "mi "}, 
        //5 
        {fa, minim, "\n第5个次拍\nfa "}, 
        {re, minim, "re "},
        //6
        {do_, crotchet, "\n第6个次拍\ndo "}, 
        {mi, crotchet, "mi "},      
        {so, crotchet, "so "}, 
        {fa, crotchet, "fa "},        
        //7
        {mi, crotchet, "\n第7个次拍\nmi "}, 
        {do_, crotchet, "do "},      
        {mi, crotchet, "mi "}, 
        {re, crotchet, "re "},  
        //8
        {do_, crotchet, "\n第8个次拍\ndo "}, 
        {qla, crotchet, "qla "},      
        {do_, crotchet, "da "}, 
        {so, crotchet, "so "},  
        //9
        {fa, crotchet, "\n第9个次拍\nfa "}, 
        {la, crotchet, "la "},      
        {so, crotchet, "so "}, 
        {fa, crotchet, "fa "}, 
        //10
        {mi, crotchet, "\n第10个次拍\nmi "}, 
        {mi1, crotchet, "mi1 "},      
        {re1, minim, "re1 "}, 
        //11   
        {do1, minim, "\n第11个次拍\ndo "}, 
        {mi1, minim, "mi1 "},      
        //12
        {la, minim, "\n第12个次拍\nla "}, 
        {so, minim, "so "},       
        //13
        {la, minim, "\n第13个次拍\nfa "}, 
        {si, crotchet, "mi "},      
        {la, crotchet, "fa "}, 
        //14    
        {do1, quaver, "\n第14个次拍\ndo1 "}, 
        {mi1, semiquaver, "mi1 "},      
        {fa1, semiquaver, "fa1 "}, 
        {so1, quaver, "so1 "}, 
        {mi1, semiquaver, "mi1 "}, 
        {fa1, semiquaver, "fa1 "},      
        {so1, semiquaver, "so1 "}, 
        {so, semiquaver, "so "},         
        {la, semiquaver, "la "}, 
        {si, semiquaver, "si "},      
        {do1, semiquaver, "do1 "}, 
        {re1, semiquaver, "re1 "}, 
        {mi1, semiquaver, "mi1 "}, 
        {fa1, semiquaver, "fa1 "}, 
        //15
        {mi1, quaver, "\n第15个次拍\nmi1 "}, 
        {do1, semiquaver, "do1 "},      
        {re1, semiquaver, "re1 "}, 
        {mi1, quaver, "mi1 "}, 
        {mi, semiquaver, "mi "}, 
        {fa, semiquaver, "fa "},      
        {so, semiquaver, "so "}, 
        {la, semiquaver, "la "},         
        {so, semiquaver, "so "}, 
        {fa, semiquaver, "fa"},      
        {so, semiquaver, "so "}, 
        {mi, semiquaver, "mi "}, 
        {fa, semiquaver, "fa "}, 
        {so, semiquaver, "so "}, 
        //16
        {fa, quaver, "\n第16个次拍\nfa "}, 
        {la, semiquaver, "la "},      
        {so, semiquaver, "so "}, 
        {fa, quaver, "fa "}, 
        {mi, semiquaver, "mi "}, 
        {re, semiquaver, "re "},          
        {mi, semiquaver, "mi "}, 
        {re, semiquaver, "re"},         
        {do_, semiquaver, "do "}, 
        {re, semiquaver, "re "},      
        {mi, semiquaver, "mi "}, 
        {fa, semiquaver, "fa"}, 
        {so, semiquaver, "so "}, 
        {la, semiquaver, "la "},  
        //17
        {fa, quaver, "\n第17个次拍\nfa "}, 
        {la, semiquaver, "la "},      
        {so, semiquaver, "so "}, 
        {la, quaver, "la "}, 
        {si, semiquaver, "si "}, 
        {do1, semiquaver, "do1 "},      
        {so, semiquaver, "so "}, 
        {la, semiquaver, "la "},         
        {si, semiquaver, "si "}, 
        {do1, semiquaver, "do1 "},      
        {re1, semiquaver, "re1 "}, 
        {mi1, semiquaver, "mi "}, 
        {fa1, semiquaver, "fa1 "}, 
        {so1, semiquaver, "so1 "},  
        
        //18
        {mi1, quaver, "\n第18个次拍\nmi1 "}, 
        {do1, semiquaver, "do1 "},      
        {re1, semiquaver, "re1 "}, 
        {mi1, quaver, "mi1 "}, 
        {re1, semiquaver, "re1 "}, 
        {do1, semiquaver, "do1 "},      
        {re1, semiquaver, "re1 "}, 
        {si, semiquaver, "si "},         
        {do1, semiquaver, "do1 "}, 
        {re1, semiquaver, "re1 "},      
        {mi1, semiquaver, "mi1 "}, 
        {re1, semiquaver, "re1 "}, 
        {do1, semiquaver, "do1 "}, 
        {si, semiquaver, "si "},
        //19
        {do1, quaver, "\n第19个次拍\ndo1 "}, 
        {la, semiquaver, "la "},      
        {si, semiquaver, "si "}, 
        {do1, quaver, "do1 "}, 
        {do_, semiquaver, "do "}, 
        {re, semiquaver, "re "},      
        {mi, semiquaver, "mi "}, 
        {fa, semiquaver, "fa "},         
        {mi, semiquaver, "mi "}, 
        {re, semiquaver, "re "},      
        {mi, semiquaver, "mi "}, 
        {do1, semiquaver, "do1 "}, 
        {si, semiquaver, "si1 "}, 
        {do1, semiquaver, "do1 "},
        //20
        {la, quaver, "\n第20个次拍\nla "}, 
        {do1, semiquaver, "do1 "},      
        {si, semiquaver, "si "}, 
        {la, quaver, "la "}, 
        {so, semiquaver, "so "}, 
        {fa, semiquaver, "fa "},      
        {so, semiquaver, "so "}, 
        {fa, semiquaver, "fa "},         
        {mi, semiquaver, "mi "}, 
        {fa, semiquaver, "fa "},      
        {so, semiquaver, "so "}, 
        {la, semiquaver, "la "}, 
        {si, semiquaver, "si "}, 
        {do1, semiquaver, "do1 "},
        
        //21 
        {la, quaver, "\n第21个次拍\nla "}, 
        {do1, semiquaver, "do1 "},      
        {si, semiquaver, "si "}, 
        {do1, quaver, "do1 "}, 
        {si, semiquaver, "si "}, 
        {la, semiquaver, "la "},      
        {si, semiquaver, "si "}, 
        {do1, semiquaver, "do1 "},         
        {re1, semiquaver, "re1 "}, 
        {do1, semiquaver, "do1 "},      
        {si, semiquaver, "si "}, 
        {do1, semiquaver, "do1 "}, 
        {la, semiquaver, "la "}, 
        {si, semiquaver, "si "},
        //22
         {mi, crotchet, "\n第22个次拍\nfa "}, 
        {mi1, crotchet, "mi "},      
        {mi1, quaver, "fa "}, 
        {fa1, quaver, "re "}, 
        {mi1, quaver, "fa "}, 
        {re1, quaver, "mi "}, 
        // 23        
         {do1, crotchet, "\n第23个次拍\nfa "}, 
        {do1, crotchet, "mi "},      
        {do1, quaver, "fa "}, 
        {re1, quaver, "re "}, 
        {do1, quaver, "fa "}, 
        {si, quaver, "mi "},
        //24
        {la, minim, "\n第24个次拍\nfa"}, 
        {do1, minim, "mi"},      
        //25
        {do1, quaver, "\n第25个次拍\nfa "}, 
        {sfa, quaver, "re "}, 
        {sso, quaver, "fa "}, 
        {sfa, crotchet, "mi "},
         {so, crotchet, "fa "},
         
        //26
        {so, crotchet, "\n第26个次拍\nfa "}, 
        {so1, crotchet, "mi "},      
        {so1, quaver, "fa "}, 
        {la1, quaver, "re "}, 
        {so1, quaver, "fa "}, 
        {fa1, quaver, "mi "},  
        //27
        {mi1, crotchet, "\n第27个次拍\nmi "},
        {mi1, crotchet, "mi "},      
        {mi1, quaver, "fa "}, 
        {fa1, quaver, "re "}, 
        {mi1, quaver, "fa "}, 
        {re1, quaver, "mi "},        
        //28
        {do1, quaver, "\n第28个次拍\nfa "}, 
        {sfa, quaver, "re "}, 
        {sso, quaver, "fa "}, 
        {sfa, crotchet, "mi "},
         {so, crotchet, "fa "},
       
        //29
        {fa, crotchet, "\n第29个次拍\nfa "}, 
        {do1, crotchet, "re "}, 
        {si, crotchet, "fa "}, 
        {so1, crotchet, "mi "},
        //30
        {so, minim, "\n第30个次拍\nfa "}, 
        {so1, crotchet, "re "}, 
        {fa1, crotchet, "fa "},
        //31
        {mi, minim, "\n第31个次拍\nfa "}, 
        {mi1, crotchet, "re "}, 
        {re1, crotchet, "fa "},                
        //32
        {do1, minim, "\n第32个次拍\nfa "}, 
        {do1, minim, "re "}, 
         //33
        {do1, minim, "\n第33个次拍\nre "}, 
        {so, minim, "fa "},
        //34    
        {so, semibreve, "\n第34个次拍\nre "}, 
};


int main(void)
{
    static int a=1;

    int i;
    //结构体数组的长度sizeof(t)/sizeof(STU)得到,总结构体数组大小 / 单个结构体大小
    for (i=0; i<sizeof(t)/sizeof(STU); i++)
    {
        printf("%s",t[i].text);
        Beep(t[i].freq,t[i].duration*P);
    }
    return 0;
}
Last modification:June 25th, 2020 at 08:54 pm
如果觉得我的文章对你有用,请随意赞赏