测周法测频率c程序_哈尔滨工业大学C课程设计说明书

Harbin Institute of Technology课程设计说明书(论文)
课程名称: C语言课程设计
设计题目: 乐曲谱写、根轨迹、24点
院 系: 航天学院
指导教师: 侯明哲
设计时间: 2019.7.3
哈尔滨工业大学教务处哈尔滨工业大学课程设计任务书
院 (系):航天学院
专 业:自动化类
任务起至日期: 2019年 7月 1日至 2019年 7月 5日 课程设计题目
1.编辑音乐程序
2.绘制二次方程

方程根的轨迹

3.小游戏24点,给出4各数字,运用加减乘除计算得到24 已知技术参数和设计要求:
1.编辑音乐程序
a.播放默认歌曲
b.通过键盘录入曲谱,回车后播放;
c.直接使用键盘弹奏。
d.每首歌曲以自己定义的格式(越易读越好)保存为一个文件,程序运行后可选择文件播放。
2.绘制方程根轨迹
a. 函数自变量和值保存到数据文件,编写一个自动绘图的程序,能够读取数据文件,自动根据数据的内容绘制曲线,坐标范围可自动调整,横纵座标标注可设定。
b. 可通过修改配置文件来改变坐标系的位置和形状显示范围等。
c. 在运行期,可设置函数的参数(比如正弦函数的幅值频率相位等) ,绘制不同的曲线。
d. 可多次画图,不用每画一个图都要重新运行程序。
3.二十四点
a.二十四点牌游戏。任给四个1-13之间的数,利用加减乘除以及括号将给出的四个数组成一个值为24的表达式。 工作量:20学时,一周实现三个小程序 工作计划安排:
1.仔细研读程序要求,规划程序功能
2.研究老师给出例题,弄清程序实现原理
3.实现任务1
4.实现任务2
5.实现任务3
6.优化及调试程序
7.撰写设计说明书

题目一

1.1 题目详细描述:

编制音乐程序,曲目自选,不要重复。功能1是播放默认歌曲,功能2是弹奏乐曲,功能3是输入并演奏乐曲,功能4是读取txt文件中的乐曲并演奏

1.2 程序设计思路及流程图:

e86d178482564ac252296c17475841ef.png

1.3 程序清单及注释:

 2 #include <stdio.h> 
 3 #include <dos.h> 
 4 #include <stdlib.h> 
 5 #include <time.h> 
 6 #include <bios.h> 
 7 #include <conio.h> 
 8 #include <string.h> 
 9 #define  N1  64 
 10 #define  N2  32 
 11 #define  N4  16 
 12 #define  N8  8 
 13 #define  N16 4 
 14 #define  END 0 
 15 #define MAX_LINE 1024 
 16  
 17 enum NOTES{  
 18 C10=131,D10=147,E10=165,F10=175,G10=196,A10=220,B10=247,  
 19 C0=262,D0=296,E0=330,F0=349,G0=392,A0=440,B0=494,  
 20 C1=523,D1=587,E1=659,F1=698,G1=784,A1=880,B1=988,  
 21 C2=1047,D2=1175,E2=1319,F2=1397,G2=1568,A2=1760,B2=1976  
 22 };  
 23 typedef enum NOTES SONG;  
 24 SONG song[]={0};  
 25  
 26 void f1() {               //内置歌曲  
 27     SONG song[]={C0,N8,G10,N8,C0,N8,C0,N16,C0,N8,E0,N8,D0,N8,C0,N16,D0,N8,E0,N8,  
 28              C0,N8,C0,N16,E0,N8,G0,N8,A0,N4,A0,N8,G0,N8,E0,N16,E0,N8,C0,N8,  
 29              D0,N8,C0,N16,D0,N8,E0,N8,C0,N8,A1,N16,A1,N8,G1,N8,C0,N4,A0,N8,  
 30              G0,N8,E0,N16,E0,N8,C0,N8,D0,N8,C0,N16,D0,N8,A0,N8,G0,N8,E0,N16,E0,N8,G0,N8,  
 31              A0,N4,C10,N8,G0,N8,E0,N16,E0,N8,C0,N8,D0,N8,C0,N16,D0,N8,E0,N8,C0,N8,A1,N16,A1,N8,G1,N8,C0,N4,  
 32 END,END  
 33 };  
 34  
 35  int note=0, fre , dur , control;  
 36  clock_t  goal;  
 37  
 38  while(song[note]!=END){  
 39             fre=song[note];  
 40             dur=song[note+1];  
 41  if(kbhit()) break;  
 42  if(fre){                             /*若频率值fre非0*/ 
 43             outportb(0x43,0xb6);            /*初始化2号定时器 */ 
 44             fre=(unsigned)(1193180L/fre);   /*计算计数初值 */ 
 45             outportb(0x42,(char)fre);       /*先写计数初值的低8位*/ 
 46             outportb(0x42,(char)(fre>>8));  /*再写计数初值的高8位*/ 
 47             control=inportb(0x61);          /*读0x61的状态*/ 
 48             outportb(0x61,control|0x03); /*将第0位,第1位置1,使喇叭发声*/ 
 49         }  
 50             goal=(clock_t)dur+clock( );   
 51  while(goal>clock( ));  
 52  if(dur)  
 53             outportb(0x61,control);  
 54             note+=2;  
 55     }  
 56 }  
 57  
 58 void f2(){  
 59  int fre;  
 60 int control;  
 61 char c;  
 62  do{             //根据输入按键的不同 决定不同的发声频率  
 63     c=bioskey(0);  
 64  switch(c){  
 65  case 'a':  
 66     fre=C2;  
 67     sound(fre);  
 68     delay(100);  
 69     nosound();  
 70  break;  
 71  case 's':  
 72     fre=D2;  
 73     sound(fre);  
 74     delay(100);  
 75     nosound();  
 76  break;  
 77  case 'd':  
 78     fre=E2;  
 79     sound(fre);  
 80     delay(100);  
 81     nosound();  
 82  break;  
 83  case 'f':  
 84     fre=F2;  
 85     sound(fre);  
 86     delay(100);  
 87     nosound();  
 88  break;  
 89  case 'g':  
 90     fre=G2;  
 91     sound(fre);  
 92     delay(100);  
 93     nosound();  
 94  break;  
 95  case 'h':  
 96     fre=A2;  
 97     sound(fre);  
 98     delay(100);  
 99     nosound();  
 100  break;  
 101  case 'j':  
 102     fre=B2;  
 103     sound(fre);  
 104     delay(100);  
 105     nosound();  
 106  break;  
 107  }  
 108     }while(c!='e');  
 109 }  
 110  
 111 void f3(){  
 112  int note=0, fre , dur , control;  
 113  clock_t  goal;  
 114  int num=0,c1,n1,c2,n2;  
 115  int M[4][7]={{440,494,262,296,330,349,392},{880,988,523,587,659,698,784},{1760,1976,1047,1175,1319,1397,1568},{220,247,131,147,165,175,196}};  
 116     printf("input A4 N0 to play the musicn");  
 117  
 118 do{  
 119     scanf("%c%d %c%d",&c1,&n1,&c2,&n2);    //输入乐谱  
 120     getchar();    
 121  if(n1==10){                               //判断频率  
 122         song[num]=M[3][c1-'A'];  
 123     }  
 124  else if((n1==0)||(n1==1)||(n1==2)){  
 125         song[num]=M[n1][c1-'A'];  
 126     }  
 127  else if(n1==4){  
 128         song[num]=0;  
 129     }  
 130  else{  
 131         printf("error input!");  
 132     }  
 133  
 134  if(n2==1)                               //判断声音长度  
 135     song[num+1]=64;  
 136  else if(n2==2)  
 137     song[num+1]=32;  
 138  else if(n2==4)  
 139     song[num+1]=16;  
 140  else if(n2==8)  
 141     song[num+1]=8;  
 142  else if(n2==16)  
 143     song[num+1]=4;  
 144  else if(n2==0)  
 145     song[num+1]=0;  
 146  else{  
 147         printf("error input!");  
 148     }  
 149  
 150     num+=2;  
 151     }while(n2!=0);  
 152  
 153  while(song[note]!=END){               //播放歌曲  
 154     fre=song[note];  
 155     dur=song[note+1];  
 156     printf("%dn",song[note]);  
 157     printf("%dn",song[note+1]);       
 158  if(kbhit()) break;  
 159  if(fre){                             /*若频率值fre非0*/ 
 160          outportb(0x43,0xb6);            /*初始化2号定时器 */ 
 161          fre=(unsigned)(1193180L/fre);   /*计算计数初值 */ 
 162         outportb(0x42,(char)fre);       /*先写计数初值的低8位*/ 
 163          outportb(0x42,(char)(fre>>8));  /*再写计数初值的高8位*/ 
 164          control=inportb(0x61);          /*读0x61的状态*/ 
 165          outportb(0x61,control|0x03); /*将第0位,第1位置1,使喇叭发声*/ 
 166        }  
 167      goal=(clock_t)dur+clock( );   
 168  while(goal>clock( ));  
 169  if(dur)  
 170          outportb(0x61,control);  
 171     note+=2;  
 172     }  
 173 }  
 174  
 175 void f4(){  
 176  char buf[MAX_LINE];  /*缓冲区*/ 
 177  FILE *fp;            /*文件指针*/ 
 178  int len;             /*行字符个数*/ 
 179  int note=0, fre , dur , control;  
 180  clock_t  goal;  
 181  int i=0;  
 182  int num=0;  
 183  int M[4][7]={{440,494,262,296,330,349,392},{880,988,523,587,659,698,784},{1760,1976,1047,1175,1319,1397,1568},{220,247,131,147,165,175,196}};  
 184  printf("enjoy the music!n");  
 185  
 186  if((fp = fopen("f:tcOUTPUTmusic.txt","r")) == NULL)     //从文件中读取乐谱  
 187  {  
 188  perror("fail to read");  
 189  exit (1) ;  
 190  }  
 191  
 192  while(fgets(buf,MAX_LINE,fp) != NULL)                        //存储为字符串  
 193  {  
 194  len = strlen(buf);  
 195  buf[len-1] = '0';  /*去掉换行符*/ 
 196  printf("%s %d n",buf,len - 1);                              //显示读取的乐谱  
 197  }  
 198  
 199  do{                                                           //判断发音频率  
 200  if(buf[i+1]=='0'){  
 201         song[num]=M[0][buf[i]-'A'];  
 202     }  
 203  else if((buf[i+1]=='1')){  
 204  if(buf[i+2]=='0')  
 205         {  
 206         song[num]=M[3][buf[i]-'A'];  
 207         i++;  
 208         }  
 209  else{  
 210         song[num]=M[1][buf[i]-'A'];  
 211         }  
 212     }  
 213  else if((buf[i+1]=='2')){  
 214         song[num]=M[2][buf[i]-'A'];  
 215     }  
 216  else {  
 217         song[num]=0;  
 218     }  
 219  
 220  
 221  if(buf[i+4]=='1'){                                         //判断发音时长  
 222  if(buf[i+5]=='6'){  
 223             song[num+1]=4;  
 224             i++;  
 225         }  
 226  else{  
 227             song[num+1]=64;  
 228         }  
 229     }  
 230  else if(buf[i+4]=='2')  
 231     song[num+1]=32;  
 232  else if(buf[i+4]=='4')  
 233     song[num+1]=16;  
 234  else if(buf[i+4]=='8')  
 235     song[num+1]=8;  
 236  else 
 237     song[num+1]=0;  
 238  
 239     num+=2;  
 240     i=i+6;  
 241     }while(i<(len-1));  
 242  
 243  while(song[note]!=END){  
 244     fre=song[note];  
 245     dur=song[note+1];  
 246     printf("%dn",song[note]);  
 247     printf("%dn",song[note+1]);       
 248  if(kbhit()) break;  
 249  if(fre){                             /*若频率值fre非0*/ 
 250          outportb(0x43,0xb6);            /*初始化2号定时器 */ 
 251          fre=(unsigned)(1193180L/fre);   /*计算计数初值 */ 
 252         outportb(0x42,(char)fre);       /*先写计数初值的低8位*/ 
 253          outportb(0x42,(char)(fre>>8));  /*再写计数初值的高8位*/ 
 254          control=inportb(0x61);          /*读0x61的状态*/ 
 255          outportb(0x61,control|0x03); /*将第0位,第1位置1,使喇叭发声*/ 
 256        }  
 257      goal=(clock_t)dur+clock( );   
 258  while(goal>clock( ));  
 259  if(dur)  
 260          outportb(0x61,control);  
 261     note+=2;  
 262     }  
 263 }  
 264 int main(){  
 265  
 266  int n;  
 267  char c;  
 268     printf("********************************************n");  
 269     printf("*     Press 1 to play the default music    *n");   
 270     printf("*     Press 2 to play the piano            *n");  
 271     printf("*     Press 3 to input music               *n");  
 272     printf("*     Press 4 to load the music            *n");  
 273     printf("********************************************n");  
 274  
 275     scanf("%d",&n);  
 276     fflush(stdin);                            //清空缓存区  
 277  
 278  if(n==1){  
 279     f1();   
 280     }  
 281  else if(n==2){   
 282     f2();   
 283     }  
 284  else if(n==3){  
 285     f3();   
 286     }  
 287  else if(n==4){  
 288     f4();   
 289     }  
 290  
 291     printf("Have a nice day!n");  
 292     system("pause");       
 293  return 0;     
 294     }  

1.4程序运行结果及自评:

94d08d63ae6d3410138ef0bea3ee76cf.png
图1 程序1运行结果

70c3dc60850ce6970e918bf9babe96f6.png
图2 程序1读取txt文件中的乐谱并演奏

结果正确。

1.5程序调试中遇到过的问题及解决办法

1.如何输入乐谱。

解决方法:通过简单的scanf()函数实现,通过识别输入的字符及整数来判断对应的音调及频率。

2.如何从txt文件中读取乐谱

解决方法:利用fopen()函数读取txt文件内容。

3.turbo C中fopen函数无法读取文件

解决方法:研究发现,在tc环境中fopen必须使用绝对路径,不能省略相同目录下文件的路径


题目二

2.1 题目详细描述:

绘制方程

的根轨迹函数。要求将计算结果保存,利用计算结果绘制图像。绘制坐标系。设置背景颜色等。

2.2 程序设计思路及流程图:

1463b60df1beca02b300e3607632f2b7.png

2.3 程序清单及注释:

 1. #include <graphics.h> 
 2. #include <math.h> 
 3. #include <dos.h> 
 4. #include <conio.h> 
 5. #define p 400 
 6. #define n 400 
 7. #define o 40 
 8. #define h 60 
 9. main()  
 10. {  
 11.  int i,t,a=1,b=2;  
 12.  int driver=DETECT,mode,x00,x11,y00,y11,k;  
 13.  char str_x[2];  
 14.  char str_y[2];  
 15.  int m1,m2;  
 16.  float x[1000]={0};  
 17.  float y[1000]={0};  
 18.  
 19.     initgraph(&driver,&mode,"f:tc ");    /*图形系统的初始化*/ 
 20.     setbkcolor(9);                 //设置背景色  
 21.     x00=h,y00=o,x11=x00+p,y11=y00+n;  
 22.     rectangle(x00,y00,x11,y11);   /*画矩形框*/ 
 23.     m1=(y00+y11)/2;  
 24.     m2=(x00+x11)/2;  
 25.     line(x00,m1,x11,m1);    //画横轴  
 26.     line(m2,y00,m2,y11);    //画纵轴  
 27.     settextstyle(3,0,2);   /*无衬线笔划字体,水平输出,2号字体*/ 
 28.  
 29.  for(i=-2; i<3; i++)  
 30.     {  
 31.         gcvt((double)i,2,str_x);  /*将浮点数转换成字符串函数*/ 
 32.         outtextxy(m2+i*100-8,m1,str_x);     //标横轴数字刻度  
 33.  if(i!=0)   
 34.         outtextxy(m2+8,m1-i*100,str_x);     //标纵轴数字刻度  
 35.     }  
 36.  
 37.     m1=(y00+y11)/2;  
 38.  for(k=0;k<5;k++){  
 39.         line(x00+k*100,m1,x00+k*100,m1-5);    //标横轴刻度  
 40.         line(m2,y00+k*100,m2+5,y00+k*100);    //标纵轴刻度  
 41.     }  
 42.  
 43.  
 44.  for(k=0;k<=5;k++)                 //取步长为五  
 45.  if(b*b-4*a*k>=0){                 //在循环中按步长计算不同情况下方程的根  
 46.         x[k]=(-b+sqrt(b*b-4*a*k))/(2*a);             
 47.         x[k+6]=(-b-sqrt(b*b-4*a*k))/(2*a);  
 48.     }  
 49.  else{  
 50.         x[k]=-b/(2*a);                
 51.         x[k+6]=-b/(2*a);  
 52.         y[k]=(sqrt(4*a*k-b*b))/(2*a);  
 53.         y[k+6]=-(sqrt(4*a*k-b*b))/(2*a);  
 54.     }  
 55.         setcolor(2);  
 56.  
 57.  for(k=0;k<5;k++){                      //画图  
 58.         delay(2000);                           //延迟画线  
 59.         line(m2+x[k]*100+5,m1+y[k]*100,m2+x[k+1]*100+5,m1+y[k+1]*100);  
 60.         line(m2+x[k+6]*100+5,m1+y[k+6]*100,m2+x[k+7]*100+5,m1+y[k+7]*100);  
 61.     }  
 62.     system("pause");  
 63. } 
 

2.4程序运行结果及自评:

3d66ebb93f75f21f25914b76392e203b.png
图3 程序2延时画图

b5b66e6e0d6bdfa5544569d676858a33.png
图4 程序2运行结果

对于根轨迹的定义不是很清除,画出的图像与别人有所不同。但是具体的画图所需要掌握的核心能力我已经掌握了。

2.5程序调试中遇到过的问题及解决办法

1.如何绘制坐标轴

解决方法:先利用rectangle()函数框定绘图区域。之后利用line()绘制横纵与纵轴。同理,利用line()设置比较小的参数来标刻度。

2.如何标注坐标轴

需要先用gcvt()函数将浮点数转换成字符串函数,之后使用outtextxy()函数将字符串函数画在图上。


题目三

3.1 题目详细描述:

二十四点牌游戏。任给四个1-13之间的数,利用加减乘除以及括号将给出的四个数组成一个值为24的表达式。

3.2 程序设计思路及流程图:

e64ed7bb003dae74daa782fe1fbfeed6.png

3.3 程序清单及注释:

 2 #include <stdio.h>  
 3 #include <stdlib.h> 
 4 #include <time.h> 
 5  
 6 char op[4]={'+','-','*','/'};  
 7 float cal(float x,float y,int op)  
 8 {  
 9  switch(op)  
 10    {  
 11  case 0:return x+y;  
 12  case 1:return x-y;  
 13  case 2:return x*y;  
 14  case 3:return x/y;  
 15    }  
 16  }  
 17  
 18 //计算((a+b)+c)+d  
 19 cal1(int a,int b,int c,int d){  
 20  int i=0,j=0,k=0;  
 21  int flag1=1,flag2=1,flag3=1;  
 22  int r1=0;  
 23  int r2=0;  
 24  int r3=0;  
 25  for(i=0;i<4;i++){  
 26  for(j=0;j<4;j++){  
 27  for(k=0;k<4;k++){  
 28                 r1=cal(a,b,k);  
 29  if(r1==24)  
 30  if(flag1==1){  
 31                     printf("%d%c%d=24n",a,op[k],b);  
 32                     flag1=0;  
 33                 }  
 34                 r2=cal(r1,c,j);  
 35  if(r2==24)  
 36  if(flag2==1){  
 37                     printf("(%d%c%d)%c%d=24n",a,op[k],b,op[j],c);  
 38                     flag2=0;  
 39                 }  
 40                 r3=cal(r2,d,i);  
 41  if(r3==24)  
 42  if(flag3==1){  
 43                     printf("((%d%c%d)%c%d)%c%d=24n",a,op[k],b,op[j],c,op[i],d);  
 44                     flag3=0;  
 45                 }  
 46             }  
 47         }  
 48     }  
 49 }  
 50  
 51 //计算((a+(b+c))+d  
 52 cal2(int a,int b,int c,int d){  
 53  int i=0,j=0,k=0;  
 54  int flag1=1,flag2=1,flag3=1;  
 55  int r1=0;  
 56  int r2=0;  
 57  int r3=0;  
 58  for(i=0;i<4;i++){  
 59  for(j=0;j<4;j++){  
 60  for(k=0;k<4;k++){  
 61                 r1=cal(b,c,k);  
 62  if(r1==24)  
 63  if(flag1==1){  
 64                     printf("%d%c%d=24n",b,op[k],c);  
 65                     flag1=0;  
 66                 }     
 67                 r2=cal(a,r1,j);  
 68  if(r2==24)  
 69  if(flag2==1){  
 70                     printf("%d%c(%d%c%d)=24n",a,op[k],b,op[j],c);  
 71                     flag2=0;  
 72                 }  
 73                 r3=cal(r2,d,i);  
 74  if(r3==24)  
 75  if(flag3==1){  
 76                     printf("(%d%c(%d%c%d))%c%d=24n",a,op[k],b,op[j],c,op[i],d);  
 77                     flag3=0;  
 78                 }  
 79             }  
 80         }  
 81     }  
 82 }  
 83  
 84 //计算a+(b+(c+d))  
 85 cal3(int a,int b,int c,int d){  
 86  int i=0,j=0,k=0;  
 87  int flag1=1,flag2=1,flag3=1;  
 88  int r1=0;  
 89  int r2=0;  
 90  int r3=0;  
 91  for(i=0;i<4;i++){  
 92  for(j=0;j<4;j++){  
 93  for(k=0;k<4;k++){  
 94                 r1=cal(c,d,k);  
 95  if(r1==24)  
 96  if(flag1==1){  
 97                     printf("%d%c%d=24n",c,op[k],d);  
 98                     flag1=0;  
 99                 }  
 100                 r2=cal(b,r1,j);  
 101  if(r2==24)  
 102  if(flag2==1){  
 103                     printf("%d%c(%d%c%d)=24n",b,op[k],c,op[j],d);  
 104                     flag2=0;  
 105                 }  
 106                 r3=cal(a,r2,i);  
 107  if(r3==24)  
 108  if(flag3==1){  
 109                     printf("%d%c(%d%c(%d%c%d))=24n",a,op[k],b,op[j],c,op[i],d);  
 110                     flag3=0;  
 111                 }  
 112             }  
 113         }  
 114     }  
 115 }  
 116  
 117 //计算a+((b+c)+d)  
 118 cal4(int a,int b,int c,int d){  
 119  int i=0,j=0,k=0;  
 120  int flag1=1,flag2=1,flag3=1;  
 121  int r1=0;  
 122  int r2=0;  
 123  int r3=0;  
 124  for(i=0;i<4;i++){  
 125  for(j=0;j<4;j++){  
 126  for(k=0;k<4;k++){  
 127                 r1=cal(b,c,k);  
 128  if(r1==24)  
 129  if(flag1==1){  
 130                     printf("%d%c%d=24n",b,op[k],c);  
 131                     flag1=0;  
 132                 }     
 133                 r2=cal(r1,d,j);  
 134  if(r2==24)  
 135  if(flag2==1){  
 136                     printf("(%d%c%d)%c%d=24n",b,op[k],c,op[j],d);  
 137                     flag2=0;  
 138                 }  
 139                 r3=cal(a,r2,i);  
 140  if(r3==24)  
 141  if(flag3==1){  
 142                     printf("%d%c((%d%c%d)%c%d)=24n",a,op[k],b,op[j],c,op[i],d);  
 143                     flag3=0;  
 144                 }  
 145             }  
 146         }  
 147     }  
 148 }  
 149  
 150 //计算(a+b)+(c+d)  
 151 cal5(int a,int b,int c,int d){  
 152  int i=0,j=0,k=0;  
 153  int flag1=1,flag2=1,flag3=1;  
 154  int r1=0;  
 155  int r2=0;  
 156  int r3=0;  
 157  for(i=0;i<4;i++){  
 158  for(j=0;j<4;j++){  
 159  for(k=0;k<4;k++){  
 160                 r1=cal(a,b,k);  
 161  if(r1==24)  
 162  if(flag1==1){  
 163                     printf("%d%c%d=24n",a,op[k],b);  
 164                     flag1=0;  
 165                 }  
 166                 r2=cal(c,d,j);  
 167  if(r2==24)  
 168  if(flag2==1){  
 169                     printf("%d%c%d=24n",c,op[j],d);  
 170                     flag2=0;  
 171                 }  
 172                 r3=cal(r1,r2,i);  
 173  if(r3==24)  
 174  if(flag3==1){  
 175                     printf("(%d%c%d)%c(%d%c%d)=24n",a,op[k],b,op[j],c,op[i],d);  
 176                     flag3=0;  
 177                 }  
 178             }  
 179         }  
 180     }  
 181 }  
 182  
 183 int main(){  
 184  int a,b,c,d;  
 185     printf("******************************n");   
 186     printf("*     Let's play a game!     *n");  
 187     printf("*        24 point            *n");  
 188     printf("*    Please enter 4 numbers  *n");  
 189     printf("******************************n");  
 190     scanf("%d",&a);  
 191     scanf("%d",&b);  
 192     scanf("%d",&c);  
 193     scanf("%d",&d);  
 194  
 195     cal1(a,b,c,d);  
 196     cal2(a,b,c,d);  
 197     cal3(a,b,c,d);  
 198     cal4(a,b,c,d);  
 199     cal5(a,b,c,d);  
 200  
 201     system("pause");  
 202  return 0;  
 203 }  
 

3.4程序运行结果及自评

773c8551395f3b960a14cf8beca4ba82.png
图5 程序3运行结果

结果正确

3.5程序调试中遇到过的问题及解决办法

1.如何遍历4个数字的所用运算可能

解决方法:在考虑括号的情况下,四个数字有以下五种预算顺序

a. ((a#b)#c)#d

b. (a#(b#c))#d

c. a#((b#c)#d)

d. a#(b#(c#d))

d. (a#b)#(c#d)

只需要遍历这五种运算顺序即可判断能否得到24。

2.如何避免在遍历的时候对同样的结果输出多次

设置标志量flag,输出结果前先判断标志量是否为1。输出结果后将标志量置0,在遍历到相同结果时就不会输出啦。


心得体会

C语言课程设计这门课让我再次见识了C语言的强大之处。通过C语言,我成功完成了音乐程序的编辑,绘图程序的设计以及24点游戏的创作,实现了对硬件的操控。

通过对Turbo C环境的学习与运用,我生动的感受到了上世纪计算机科学家研究条件的不易,深刻的认识到了这个时代为我们提供了非常便利的学习计算机科学的环境。应当好好珍惜,有所作为。

之前认为自己C语言这一块掌握的不错了。通过这次程序设计,让我认识到自己仍有不足。学无止境。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值