#include {int driver,mode; int x,y,x0,y0; float sita,r; driver=DETECT;mode=VGAHI; initgraph(&driver,&mode,\"\"); /*初始化图形模式*/ sita=-150.0;r=sita; /*绘图起点位置*/ x0=getmaxx()/2;y0=getmaxy()/2; /*取原点为屏幕的中心*/ x=x0+r*cos(sita); /*计算起点坐标*/ y=y0+r*sin(sita); moveto(x,y); /*移绘图笔到起点*/ while(sita<150.0) {sita+=0.1;r=sita; x=x0+r*cos(sita); /*计算下一点坐标*/ y=y0+r*sin(sita); lineto(x,y); /*画线*/ } x=x0+150*cos(150.0); /*计算终点坐标*/ y=y0+150*sin(150.0); lineto(x,y); /*落笔到终点*/ getch(); /*按任何键继续*/ closegraph(); /*关闭图形模式*/ } 9.7 编写程序先绘出直角坐标系,再画出正弦曲线和余弦曲线,区间为[0,2π]。 解答: #include {int driver,mode; int x,y,x0,y0,maxx,maxy; float sita,r; sita=0; driver=DETECT;mode=VGAHI; initgraph(&driver,&mode,\"..\\\\BGI\"); /*初始化图形模式*/ maxx=getmaxx()/2;maxy=getmaxy()/2; /*xy坐标的单位值*/ x0=maxx;y0=maxy; /*取原点为坐标为屏幕的左边中心*/ moveto(0,y0); /*移绘图笔到原点*/ lineto(2*x0,y0); /*画线*/ moveto(x0,0); /*移绘图笔*/ lineto(x0,2*y0); /*画线*/ x=x0; /*计算起点坐标*/ y=y0; moveto(x,y); /*移绘图笔到起点*/ setcolor(GREEN); /*设置绘图笔颜色*/ while(sita<2*3.1416) {sita+=0.1; x=x0+sita*maxx/(2*3.1416); /*计算下一点坐标*/ y=y0-sin(sita)*maxy; lineto(x,y); /*画线*/ } x=x0+maxx; /*计算终点坐标*/ y=y0-sin(2*3.1426)*maxy; lineto(x,y); /*落笔到终点*/ sita=0; /*计算cos函数 */ x=x0+sita*maxx/(2*3.1416); /*计算起点坐标*/ y=y0-cos(sita)*maxy; moveto(x,y); /*移绘图笔到起点*/ setcolor(YELLOW); while(sita<2*3.1416) {sita+=0.1; x=x0+sita*maxx/(2*3.1416); /*计算下一点坐标*/ y=y0-cos(sita)*maxy; lineto(x,y); /*画线*/ } x=x0+maxx; /*计算终点坐标*/ y=y0-cos(2*3.1426)*maxy; lineto(x,y); /*落笔到终点*/ getch(); /*按任何键继续*/ closegraph(); /*关闭图形模式*/ } 9.9 设计简单的下拉菜单,实现Turbo C的主菜单以及Run的子菜单。 解答: #include {int i,key0,key,key1,y,test; char *m[]={\"File\ \"Debug\ char *f[]={\"Run Ctrl-F9\子菜单*/ \"Programick Alt-F3\ \"New \ \"Save F2\ \"Write to \ \"Directory \ \"Change dir \ \"Os shell \ \"Quit Alt-X\ char buf0[80*2],buf[16*10*2],buf1[16*2]; /*定义保存屏幕区域的数组*/ textbackground(BLUE); /*定义背景颜色*/ clrscr(); window(1,1,80,1); /*定义主菜单区域的窗口*/ textbackground(WHITE); /*设置窗口背景颜色*/ textcolor(BLACK); /*设置窗口字符颜色*/ clrscr(); window(1,1,80,2); for(i=0;i<8;i++) cprintf(\" %s\显示主菜单*/ gettext(1,1,80,2,buf0); /*保存主菜单区域内容*/ while(1) {key=0; while(bioskey(1)==0); /*等待键盘输入*/ key=bioskey(0); /*取键盘输入码*/ key=key&0xff?0:key>>8; /*屏蔽低8位,只取扩充键码*/ if(key==45) exit(0); /*如果是按Alt+X则退出*/ if(key==33) /*如果是按Alt+F则进入子菜单处理*/ {textbackground(BLACK); textcolor(WHITE); gotoxy(4,1); cprintf(\"%s\ gettext(4,2,19,11,buf); /*保存窗口区域的原有内容*/ window(4,2,19,11); textbackground(WHITE); textcolor(BLACK); clrscr(); window(4,1,19,12); gotoxy(1,1); putch(0xDA); /*作一个单线矩形边框*/ for(i=2;i<16;i++) putch(0xC4); putch(0xBF); for(i=2;i<10;i++) {gotoxy(1,i);putch(0xB3); gotoxy(16,i);putch(0xB3); } gotoxy(1,10); putch(0xC0); for(i=2;i<16;i++) putch(0xC4); putch(0xD9); for(i=1;i<10;i++) /*显示File子菜单内容*/ {gotoxy(2,i+1); cprintf(\"%s\ } gettext(2,2,18,3,buf1); /*保存产生色棒前的原来信息*/ textbackground(BLACK); /*产生一个色棒*/ textcolor(WHITE); gotoxy(2,2); cprintf(\"%s\ y=2; key0=0; while(key0!=27&&key0!=13) /*输入为ESC或回车键则退出循环*/ { while(bioskey(1)==0); /*等待键盘输入*/ key0=key1=bioskey(0); /*取键盘输入码*/ key0=key0&0xFF; /*只取ASCII码*/ key1=key1&0xFF?0:key1>>8; /*屏蔽低8位,只取扩充键码*/ if(key1==72||key1==80) /*如果为上、下箭头键*/ {puttext(2,y,18,y+1,buf1); /*恢复保存在buf1的屏幕内容*/ if(key1==72) y=y==2?10:y-1; /*上箭头处理*/ if(key1==80) y=y==10?2:y+1; /*下箭头处理*/ gettext(2,y,18,y+1,buf1); /*保存新色棒产生前屏幕区域的内容*/ textbackground(BLACK); /*产生新色棒*/ textcolor(WHITE); gotoxy(2,y); cprintf(\"%s\ } test=y-1; } if(key0==13) /*输入回车键对子菜单操作的处理(简化)*/ {switch(test) {case 1:break; case 2:break; /*此处为case 3到case 8*/ case 9:exit(0); default:break; } } window(1,1,80,2); puttext(1,1,80,2,buf0); /*恢复主菜单*/ puttext(4,2,19,11,buf); /*释放子菜单窗口*/ } } } 因篇幅问题不能全部显示,请点此查看更多更全内容