c语言程序设计电子版本
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言程序设计论文
C语言程序设计论文学校:天津电子信息职业技术学院
系别:电子技术系
专业:通信技术
班级:通信S13-26
学号:89757
姓名:王磊
C语言课程设计报告
一、设计题目:计算器
二、设计目标:进一步加深、巩固学生所学专业课程(《C语言》)的基本
理论知识,理论联系实际,进一步培养学生综合分析问题和解决问题的能力。
掌握运用C语言独立地编写、调试应用程序和进行其它相关设计的技能,充分发挥广大同学的潜力,使他们通过本次课程设计而得到全面的锻炼。
三、设计内容:
1.设计系统的功能框图、流程图;
2.编写计算器的源程序代码;
3.上机调
试;4.答辩;
5.书写实习报告。
四、课程设计所用设备:每人一台计算机。
五、课程设计系统组成及模块功能:
(1)主函数模块
(2)设置系统进入图形模块
(3)初始化图形系统模块
(4)计算器计算函数模块
(5)窗口函数模块
(6)设计鼠标图形函数模块
(7)获取特殊键函数模块
六、软件环境:Visual c++6.0
七、课程设计要求:在计算机上操作,通过Visual c++6.0,设计出“计算器”
程序。
八、应提交的材料:实习报告一份,内容包含“计算器”程序代码。
设计报告:
程序代码:#include <dos.h>
#include <math.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <graphics.h>
#include <string.h>
#include <ctype.h>
#define UP 0x48
#define DOWN 0x50
#define LEFT 0x4b
#define RIGHT 0x4d
#define ENTER 0x0d
void *rar;
struct palettetype palette;
int GraphDriver;
int GraphMode;
int ErrorCode;
int MaxColors;
int MaxX, MaxY;
double AspectRatio;
void drawboder(void);
void initialize(void);
void computer(void);
void changetextstyle(int font, int direction, int charsize);
void mwindow(char *header);
int specialkey(void) ;
int arrow();
int main()
{
initialize();
computer();
closegraph();
return(0);
}
void initialize(void)
{
int xasp, yasp;
GraphDriver = DETECT;
initgraph( &GraphDriver, &GraphMode, "" ); ErrorCode = graphresult();
if( ErrorCode != grOk )
{
printf("Graphics System Error: %s\n",
grapherrormsg( ErrorCode ) );
exit( 1 );
}
getpalette( &palette );
MaxColors = getmaxcolor() + 1;
MaxX = getmaxx();
MaxY = getmaxy();
getaspectratio( &xasp, &yasp );
AspectRatio = (double)xasp/(double)yasp; }
void computer(void)
{
struct viewporttype vp;
int color, height, width;
int x, y,x0,y0, i, j,v,m,n,act,flag=1;
float num1=0,num2=0,result;
char cnum[5],str2[20]={""},c,temp[20]={""}; char str1[]="1230.456+-789*/Qc=^%";
mwindow( "Calculator" );
color = 7;
getviewsettings( &vp );
width=(vp.right+1)/10;
height=(vp.bottom-10)/10 ;
x = width /2;
y = height/2;
setfillstyle(SOLID_FILL, color+3);
bar( x+width*2, y, x+7*width, y+height );
setcolor( color+3 );
rectangle( x+width*2, y, x+7*width, y+height );
setcolor(RED);
outtextxy(x+3*width,y+height/2,"0.");
x =2*width-width/2;
y =2*height+height/2;
for( j=0 ; j<4 ; ++j )
{
for( i=0 ; i<5 ; ++i )
{
setfillstyle(SOLID_FILL, color);
setcolor(RED);
bar( x, y, x+width, y+height );
rectangle( x, y, x+width, y+height );
sprintf(str2,"%c",str1[j*5+i]);
outtextxy( x+(width/2), y+height/2, str2); x =x+width+ (width / 2) ;
}
y +=(height/2)*3;
x =2*width-width/2;
}
x0=2*width;
y0=3*height;
x=x0;
y=y0;
gotoxy(x,y);
arrow();
putimage(x,y,rar,XOR_PUT);
m=0;
n=0;
strcpy(str2,"");
while((v=specialkey())!=45)
{
while((v=specialkey())!=ENTER)
{
putimage(x,y,rar,XOR_PUT);
if(v==RIGHT)
if(x>=x0+6*width)
{
x=x0;
m=0;
}
else
{
x=x+width+width/2;
m++;
}
if(v==LEFT)
if(x<=x0)
{
x=x0+6*width;
m=4;
}
else
{
x=x-width-width/2;
m--;
}
if(v==UP)
if(y<=y0)
{
y=y0+4*height+height/2;
n=3;
}
else
{
y=y-height-height/2;
n--;
}
if(v==DOWN)
if(y>=7*height)
{
y=y0;
n=0;
}
else
{
y=y+height+height/2;
n++;
}
putimage(x,y,rar,XOR_PUT);
}
c=str1[n*5+m];
if(isdigit(c)||c=='.')
{
if(flag==-1)
{
strcpy(str2,"-");
flag=1;
}
sprintf(temp,"%c",c);
strcat(str2,temp);
setfillstyle(SOLID_FILL,color+3);
bar(2*width+width/2,height/2,15*width/2,3*height/2); outtextxy(5*width,height,str2);
}
if(c=='+')
{
num1=atof(str2);
strcpy(str2,"");
act=1;
setfillstyle(SOLID_FILL,color+3);
bar(2*width+width/2,height/2,15*width/2,3*height/2);
outtextxy(5*width,height,"0.");
{
if(c=='-')
{
if(strcmp(str2,"")==0)
flag=-1;
else
{
num1=atof(str2);
strcpy(str2,"");
act=2;
setfillstyle(SOLID_FILL,color+3);
bar(2*width+width/2,height/2,15*width/2,3*height/2);
outtextxy(5*width,height,"0.");
}
}
if(c=='*')
{
num1=atof(str2);
strcpy(str2,"");
act=3;
setfillstyle(SOLID_FILL,color+3);
bar(2*width+width/2,height/2,15*width/2,3*height/2);
outtextxy(5*width,height,"0.");
}
if(c=='/')
{
num1=atof(str2);
strcpy(str2,"");
act=4;
setfillstyle(SOLID_FILL,color+3);
bar(2*width+width/2,height/2,15*width/2,3*height/2); outtextxy(5*width,height,"0.");
}
if(c=='^')
{
num1=atof(str2);
strcpy(str2,"");
act=5;
setfillstyle(SOLID_FILL,color+3);
bar(2*width+width/2,height/2,15*width/2,3*height/2); outtextxy(5*width,height,"0.");
}
if(c=='%')
{
num1=atof(str2);
strcpy(str2,"");
act=6;
setfillstyle(SOLID_FILL,color+3);
bar(2*width+width/2,height/2,15*width/2,3*height/2); outtextxy(5*width,height,"0.");
}
if(c=='=')
{
num2=atof(str2);
switch(act)
{
case 1:result=num1+num2;break;
case 2:result=num1-num2;break;
case 3:result=num1*num2;break;
case 4:result=num1/num2;break;
case 5:result=pow(num1,num2);break;
case 6:result=fmod(num1,num2);break;
}
setfillstyle(SOLID_FILL,color+3);
bar(2*width+width/2,height/2,15*width/2,3*height/2); sprintf(temp,"%f",result);
outtextxy(5*width,height,temp);
}
if(c=='c')
{
num1=0;
num2=0;
flag=1;
strcpy(str2,"");
setfillstyle(SOLID_FILL,color+3);
bar(2*width+width/2,height/2,15*width/2,3*height/2); outtextxy(5*width,height,"0.");
}
if(c=='Q')exit(0);
}
putimage(x,y,rar,XOR_PUT);
return;
}
void mwindow( char *header )
{
int height;
cleardevice();
setcolor( MaxColors - 1 );
setviewport( 20, 20, MaxX/2, MaxY/2, 1 );
height = textheight( "H" );
settextstyle( DEFAULT_FONT, HORIZ_DIR, 1 );
settextjustify( CENTER_TEXT, TOP_TEXT );
outtextxy( MaxX/4, 2, header );
setviewport( 20,20+height+4, MaxX/2+4, MaxY/2+20, 1 ); drawboder();
}
void drawboder(void)
{
struct viewporttype vp;
setcolor( MaxColors - 1 );
setlinestyle( SOLID_LINE, 0, NORM_WIDTH );
getviewsettings( &vp );
rectangle( 0, 0, vp.right-vp.left, vp.bottom-vp.top );
}
int arrow()
{
int size;
int raw[]={4,4,4,8,6,8,14,16,16,16,8,6,8,4,4,4};
setfillstyle(SOLID_FILL,2);
fillpoly(8,raw);
size=imagesize(4,4,16,16);
rar=malloc(size);
getimage(4,4,16,16,rar);
putimage(4,4,rar,XOR_PUT);
return 0;
}
/
int specialkey(void)
{
int key;
while(bioskey(1)==0);
key=bioskey(0);
key=key&0xff? key&0xff:key>>8;
return(key);
}
总结:
1)实际操作过程中遇到的问题及解决方法:
1.忘记加分号。
分号是C语句中不可缺少的一部分,语句末尾必须有分号。
a=1 b=2编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。
改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。
{ z=x+y;t=z/100;printf("%f",t);}对于复合语句来说,最后一个语句中最后的分号不能忽略不写(这是和PASCAL 不同的)。
2.输入输出的数据的类型与所用格式说明符不一致int a=3;float
b=4.5;printf(“%f%d\n”,a,b);它们并不是按照赋值的规则进行转换(如把4.5转换为4),而是将数据在存储单元中的形式按格式符的要求组织输出(如b占4个字节,只把最后两个字节的数据按%d,作为整数输出)
2)设计总结及心得体会。
通过C语言编程的学习,培养了我独立思考和综合运用平时知识的能力,巩固了课程学习的内容,掌握了工程软件设计的基本方法,强化了上机动手编程能力。
更加了解了C语言的便利性和可用性。
同时了解到了程序设计需要团队合作,通过这次实习活动增进了同学之间的默契,体会到了毕业后工作中团队合作的重要性和必要性。
当一个程序从自己的手中诞生的时候,心中充满了自豪感和成就感,让我对动手操作实践更有兴趣了。
八、时间:实验心得
通过本次C语言上机实验,我对这个介于人类与非人类之间的计算机编程语言有了一定的体验。
其间开心过、郁闷过、无奈过、彷徨过……随着实验的胜利成功与实验报告的胜利完成,有点微微的自豪感使人难忘。
感谢高克宁老师的高标准、严要求,感谢实验课上小老师们的耐心指点,也感谢我在实验中经历过的点点滴滴……伴随着学习的深入,我发现高深的东西还有很多很多,等待着我自己去挖掘。
对C语言,我会更加努力一周课时:12学时。