绍兴文理学院机电系C语言第二次大作业第1页共28页★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★C语言第二次大作业班级:机电***学号:*******姓名:*******★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★绍兴文理学院机电系C语言第二次大作业第2页共28页一、题目1、基于VC6编写一个简易菜单驱动(简易的闪烁菜单)的程序,实现求解三角形面积、一元二次方程根、判断素数、退出四个功能。要求界面友好,光标控制(光标所在行对应文字闪烁显示),按回车键进入相应的功能,其中求解三角形面积功能中有一个子菜单以实现三种不同解法并可以返回主菜单。至少定义5个函数,可适当加入一些趣味函数提高趣味性。2、基于KEIL编写一个控制单片机实验系统V2数码管动态显示本人学号的程序。应用设想:某些店面门口可以动态显示订餐、订货电话,为消费者提供便利。当然,点阵显示效果更好,不仅可以显示数字还可以显示字母、文字。二、题目分析及算法1、该题要求实现光标控制的闪烁菜单,并且有一个子菜单。该题主要是对模块化程序设计进行训练。菜单实现四种不同的功能可使用switch-case函数实现(本程序的选择分支结构均可使用该函数),为使界面友好可定义一个光标定位函数使得光标先到相应行和列再执行程序语句。闪烁菜单可在静态菜单的基础上根据定义好的静态菜单返回的不同的函数值,巧妙结合延时函数间歇性输出菜单选项,实现闪烁。编程时应注意数据类型(全局变量、局部变量、静态变量(关键字Static))的使用。此外还有return、break,continue、exit()、while语句、if语句、kbhit()、getch()等函数的使用。求解三角形面积算法:要求实现三种不同解法(已知三边(首先要判断输入的三边长能否构成三角形)、已知两边及其夹角,已知底和对应的高)。解法一要注意函数sin()的用法!绍兴文理学院机电系C语言第二次大作业第3页共28页判断素数算法:素数(质数)指在大于1的自然数中,除了1和此整数自身外,无法被其他自然数整除的数(也可定义为只有1和本身两个因数的数)。这里可以利用for循环语句定义一个判断素数的函数。求解一元二次方程算法:设a,b,c分别为二次项系数、一次项系数和常数。当a=0时该方程不是一元二次方程,当a≠0时分△0,△0,△=0三种情况,其中△0时需求出虚根(△=b*b-4ac)。注编程时意数据类型的使用。2、本次数码管的动态显示使用循环和延时函数,由于数码管的余辉和人眼的“视觉暂留”作用,只要控制好每位数码管的显示时间和间隔,则可造成多位同时亮的假象,从而达到动态显示。三、流程图1、主菜单一、求解三角形面积二、判断素数三、解一元二次方程四、退出1、已知三角形三边不能构成三角形是素数不是素数a=0不是一元二次方程输出面积a≠0△=0输出相同实解x1=x22、已知两边及其夹角输出面积3、已知底和高输出面积△0输出实解x1、x24、返回主菜单△0输出虚根2、略绍兴文理学院机电系C语言第二次大作业第4页共28页四、源程序代码1、#includemath.h#includestdio.h#includestdlib.h#includeconio.h#includewindows.h#definepi3.1415926#defineUP72#defineDOWN80#defineENTER13voidscreen(charch);//函数说明voiddelay(void);voidgotoxy(intx,inty);intmenu(intcur);intMenu(intcur);voiddisplaymenu(intcu);voiddisplaymenu(intcu);voidkeyscan(void);voidKeyscan(void);voidsanbian(void);voidlbjj(void);voiddhg(void);voidexec(void);voidExec(void);voidArea(void);intIsPrime(intm);voidjfch(void);voidprime(void);voidclear(void);voidclear1(void);intcursor=1,tcqq;//全局变量的定义voiddelay(void)//定义一个延时函数{inti,j;for(i=0;i200;i++)for(j=0;j200;j++);}voidscreen(charch)//定义一个趣味性的屏幕函数绍兴文理学院机电系C语言第二次大作业第5页共28页{inti=1;for(i=1;i6;i++){printf(%c\7,ch);//启用BellSleep(500);delay();}}voidclear(void)//定义由子菜单返回到主菜单时,清除部分屏幕内容的函数{gotoxy(23,12);printf(\n);gotoxy(23,13);printf(\n);gotoxy(23,14);printf(\n);gotoxy(23,15);printf(\n);gotoxy(23,16);printf(\n);gotoxy(23,17);printf(\n);gotoxy(23,18);printf(\n);gotoxy(23,19);printf(\n);gotoxy(23,20);printf(\n);}voidclear1(void)//定义主菜单多次执行时清除部分屏幕内容的函数{gotoxy(23,18);printf(\n);gotoxy(23,19);printf(\n);gotoxy(23,20);printf(\n);}voidgotoxy(intx,inty)//定义光标定位函数{绍兴文理学院机电系C语言第二次大作业第6页共28页COORDc={x,y};//COORD头文件windows.hSetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);}intmenu(intcur)//定义求解三角形面积求法菜单函数{intcu;staticintflag=1;if(flag==1){gotoxy(23,12);printf(1、┍已知三边求三角形面积┑);gotoxy(23,13);printf(2、┍已知两边及其夹角求三角形面积┑);gotoxy(23,14);printf(3、┍已知底和高求三角形面积┑);gotoxy(23,15);printf(4、┍返回主菜单┑);flag=0;}switch(cur){case1:gotoxy(23,12);cu=1;break;case2:gotoxy(23,13);cu=2;break;case3:gotoxy(23,14);cu=3;break;case4:gotoxy(23,15);cu=4;break;}returncu;}voiddisplaymenu(intcu)//定义求解三角形面积求法闪烁菜单函数绍兴文理学院机电系C语言第二次大作业第7页共28页{switch(cu){case1:gotoxy(23,12);printf(1、);delay();gotoxy(23,12);printf(1、┍已知三边求三角形面积┑);break;case2:gotoxy(23,13);printf(2、);delay();gotoxy(23,13);printf(2、┍已知两边及其夹角求三角形面积┑);break;case3:gotoxy(23,14);printf(3、);delay();gotoxy(23,14);printf(3、┍已知底和高求三角形面积┑);break;case4:gotoxy(23,15);printf(4、);delay();gotoxy(23,15);printf(4、┍返回主菜单┑);break;}}voidkeyscan(void)//定义子菜单键盘扫描函数{unsignedcharc1;if(kbhit())//kbhit函数(返回值非0表示捕捉到有人按键)头文件conio.h{c1=getch();switch(c1){绍兴文理学院机电系C语言第二次大作业第8页共28页caseUP:if(cursor==1)cursor=4;elsecursor--;break;caseDOWN:if(cursor==4)cursor=1;elsecursor++;break;caseENTER:exec();break;}}}voidKeyscan(void)//定义主菜单键盘扫描函数{unsignedcharc1;if(kbhit())//kbhit函数(返回值非0表示捕捉到有人按键){c1=getch();switch(c1){caseUP:if(cursor==1)cursor=4;elsecursor--;break;caseDOWN:if(cursor==4)cursor=1;elsecursor++;break;caseENTER:Exec();break;}}}voidexec(void)//定义一个求解三角形面积菜单按回车进入相应求法的函数绍兴文理学院机电系C语言第二次大作业第9页共28页{switch(cursor){case1:clear1();sanbian();break;case2:clear1();lbjj();break;case3:clear1();dhg();break;case4:tcqq=1;clear();}}voidExec(void)//定义一个主菜单按回车后进入相应功能的函数{switch(cursor){case1:Area();break;case2:clear();prime();break;case3:clear();jfch();break;case4:gotoxy(23,10);exit(1);break;}}voidsanbian(void)绍兴文理学院机电系C语言第二次大作业第10页共28页{floatmj,a,b,c,s;gotoxy(23,18);printf(请输入三角形的三边长a,b,c:);scanf(%f%*c%f%*c%f,&a,&b,&c);if(a+bc&&a+cb&&b+ca){s=0.5*(a+b+c);mj=sqrt(s*(s-a)*(s-b)*(s-c));gotoxy(23,20);printf(〖Area=%f〗,mj);}else{gotoxy(23,20);printf(『不能构成三角形哦!,亲!』\n);}}voidlbjj(void){floatmj,a,b,angle;gotoxy(23,18);printf(请输入三角形两边及其夹角:);scanf(%f%*c%f%*c%f,&a,&b,&angle);mj=0.5*a*b*sin(pi*angle/180);gotoxy(23,20);printf(〖Area=%f〗,mj);}voiddhg(void){floata,h,mj;gotoxy(23,18);printf(请输入三角形底边和对应的高:);scanf(%f%*c%f,&a,&h);mj=0.5*a*h;gotoxy(23,20);printf(〖Area=%f〗,mj);}voidArea(void)//定义求解三角形面积函数{while(1){绍兴文理学院机电系C语言第二次大作业第11页共28页tcqq=0;menu(cursor);displaymenu(cursor);keyscan();if(tcqq==1)break;elsecontinue;}}intIsPrime(intm)//判断M是否为素数,是返回1,不是返回0{inti;if(m=1)return0;else{for(i=2;im;i++){if(m%i==0){return0;break;