文档库 最新最全的文档下载
当前位置:文档库 › Visual C++程序的建立~~4

Visual C++程序的建立~~4

Visual C++程序的建立~~4
Visual C++程序的建立~~4

3、消息映射代码

我们查看例5的程序代码,发现:ClassWizard为WM_LBUTTOMDOWN(鼠标左键按下)的消息映射做了以下3个方面的工作:

(1)在视图类的头文件“显示对话框View.h”中声明了鼠标左键按下的消息处理函数OnLButtonDown:

protected:

//{{AFX_MSG(CMyView)

afx_msg void OnLButtonDown(UINT nFlags, CPoint point);

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

代码中的//{{AFX_MSG(CMyView)和//}}AFX_MSG 之间的部分是ClassWizard 定义的专门用做消息映射函数声明的标记。表示该程序块中的消息映射声明是由ClassWizard来自动管理的,用户一般不需要去更改。需要说明的是,凡//{{和//}}之间的程序代码块均由ClassWizard自动管理。

(2)在视图类的“显示对话框View.cpp”实现文件前面的消息入口处,添加了相应的映射宏:

ON_WM_LBUTTONDOWN()

BEGIN_MESSAGE_MAP(CMyView, CView)

//{{AFX_MSG_MAP(CMyView)

ON_WM_LBUTTONDOWN()

//}}AFX_MSG_MAP

(3)在视图类的“显示对话框View.cpp”实现文件中写入一个空的消息处理函数的模板,以便用户填入具体代码:

void CMyView::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

CView::OnLButtonDown(nFlags, point);

}

注意:

如果要删除消息映射函数,需进行如下3步:

1、在“MFC ClassWizard”对话框的Massages列表中选中要删除的消息映射函数,然后单击“Delite

Function“按钮,最后关闭”ClassWizard“对话框。

2、在所在的类头文件(。h)的消息声明标记中删除该消息映射函数,在所在的类实现文件(。cpp)的消息声明入口处删除该消息映射宏。

3、在所在的类实现文件(。cpp)中删除该消息映射函数体。

1、4、3 消息映射方法实例

1、鼠标映射消息

鼠标是Windows操作系统中最重要的输入工具之一,在MFC中,鼠标输入,Windows 将会产生相应的消息。例如:按下鼠标左键时,Windows就会产生WM_LBUTTONDOWN 消息,释放鼠标左键时就会产生WM_LBUTTONUP消息。如果需要,用户只要对这些消息编写相应的响应函数就能完成相应的功能,否则大部分的消息,Windows系统均有默认的处理。

例6在屏幕x,y坐标各为100处,显示“鼠标位于点[]”,当鼠标移动时,显示出鼠标不断变化的位置和鼠标按下、鼠标释放的位置变化。

(1)建一个单文档应用程序,名为:处理鼠标

(2)声明视图类的数据成员

为了记录用户操作鼠标的方式和位置,需定义一个变量存储,因此,在视图类的CMyView.h里的public下添加一个数据成员

CString m_MousePoint;//存储鼠标的方式和位置

在视图类CMyView.cpp的构造函数中初始化该数据成员:

m_MousePoint = “”;//将存储鼠标的方式和位置初始置为空

(3)在屏幕重画函数OnDraw()中加输出代码

void CMyView::OnDraw(CDC* pDC)

{ CMyDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

pDC->TextOut(100,100,m_MousePoint);

}

(4)添加鼠标消息WM_LBUTTONDOWN(鼠标左键被按下时发送该消息)。ViewClassWizardMessage MapsClass Name:CMyViewObject IDs:CMyView Messages:WM_LBUTTONDOWN单击Add Function就在CMyView类添加了该鼠标消息的响应函数。

(5)用同样的方法,在CMyView类中,添加鼠标消息WM_LBUTTONUP(鼠标左键被释放时发送该消息)和WM_MOUSEMOVE(鼠标移动时发送该消息)。

(6)编写消息响应函数代码:

void CMyView::OnLButtonDown(UINT nFlags, CPoint point)//鼠标左键按下

{ //下面一条语句是在屏幕上显示鼠标所在位置的坐标

m_MousePoint.Format(”鼠标左键在点(%d,%d)按下”,point.x,point.y);

Invalidate();//强制执行OnDraw()函数,显示出x,y坐标的值

CView::OnLButtonDown(nFlags, point);

}

void CMyView::OnLButtonUp(UINT nFlags, CPoint point) //鼠标左键释放{ m_MousePoint = “鼠标左键被释放”;

Invalidate();

CView::OnLButtonUp(nFlags, point);

}

void CMyView::OnMouseMove(UINT nFlags, CPoint point) //鼠标移动{ m_MousePoint.Format(”鼠标位于点(%d,%d)”,point.x,point.y); Invalidate();

CView::OnMouseMove(nFlags, point);

}

(7)编译运行,结果见1.4.7所示

说明:

1、代码:CString类里定义了Format函数。Format是格式打印函数,和C语言中的printf语句相似。

其参数:“鼠标位于点(%d,%d)”在屏幕上显示其中的实际内容,并按%d%d整型输出第2和第3个参数的数字,这里就是x,y的坐标。m_MousePoint是CMyView.h中定义的存储鼠标的方式和位置的CString类对象。

2、Invalidate()函数的作用是使系统让用户区无效,从而调用重画函数OnDraw(),所以用户只要在OnDraw()中编写显示m_MousePoint的语句即可。

3、对于所有的鼠标消息来说,ClassWizard都会将映射成类似afx_msg void OnXXXX 的消息处理函数,如上面的鼠标左键按下映射消息函数OnLButtonDown,它具有如下函数原型:

afx_msg void OnLButtonDown(UINT nFlags,CPoint point)

参数:

point表示鼠标光标在屏幕的(x,y)坐标;

nFlags 表示鼠标按钮和键盘组合情况,它可以是下列值的组合(MK前缀表示“鼠标键”):

MK_CONTROL键盘上的Ctrl键被按下时,nFlags设置为MK_CONTROL

MK_LBUTTON鼠标左按钮被按下时,nFlags设置为MK_LBUTTON

MK_MBUTTON鼠标中按钮被按下时,nFlags设置为MK_MBUTTON

MK_RBUTTON鼠标右按钮被按下时,nFlags设置为MK_RBUTTON

MK_SHIFT键盘上的Shift键被按下时,nFlags设置为MK_SHIFT

若想知道某个键被按下,可由对应的标识与nFlags进行逻辑“与”(&)运算,所得结果若为TRUE(非0)时,则表示该键被按下。例如,如果收到了WM_LBUTTONDOWN

消息,且值nFlags&MK_CONTROL是TRUE时,则表明按下鼠标左键按钮的同时也按下了Ctrl键。

4、afx_msg是MFC用于定义消息函数的标志。

2、键盘映射消息

除鼠标外,键盘也是Windows操作系统中最重要的输入工具之一。在Windows的编程环境中,键盘输入,将产生键盘消息。例如:用户按下一个键盘键时,就产生WM_KEYDOWN消息,释放一个键盘键时,就产生WM_KEYUP消息,而Windows将此键翻译成ASCII码后又将产生WM_CHAR消息,用户只要对这些消息中的一部分编写相应的响应函数即可,对其中大部分的消息,Windows系统均有默认的处理方法。

例7键盘输入

(1)建一个单文档应用程序,名为:读取键盘的键击

(2)声明视图类的数据成员:在CMyView.h的protected:下写:

int m_nLine;//记录用户输入的回车次数

CString m_strDisplay;//存储在当前行输入的字符

(3)在CMyView.cpp的构造函数里对如上变量进行初始化:

m_nLine = 0;

m_strDisplay = “”;

(4)向视图类添加键盘消息WM_CHAR响应函数

ViewClassWizardMessage MapClassname:CMyViewObjiect IDs:CMyView

Messages:WM_CHARAdd FunctionEdit Code便见到在视图类View.cpp文件中加上了OnChar()键盘响应函数。

(5)在刚加进去的OnChar消息响应函数中加代码:

void CMyView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)

{ if(nChar==VK_RETURN)//如按下回车键

{ m_strDisplay.Empty();//m_strDisplay是上面定义的CString类对象,存储当前行输入的字符,

//CString类中定义了Empty()函数,这里它是用来清空m_strDisplay变量的。

m_nLine++;//行数加1,即回车次数加1

}

else

{

m_strDisplay +=nChar;//将输入的字符添加到变量m_strDisplay的尾端

}

CClientDC dc(this);//窗口客户区的设备文本

dc.TextOut(0,m_nLine*20,m_strDisplay);// 利用dc输出文本

CView::OnChar(nChar, nRepCnt, nFlags);

}

(6)编译运行,见图1.4.8所示。

说明:

1、CClientDC是CDC类的派生类,在构造时调用了Windows函数GetDC,在析构时调用了ReleaseDC.这意味着和CClientDC对象相关的设备上下文是窗口的客户区,dc (this)一般指向本窗口或当前活动视图。

CClientDC一般都在OnDraw()中使用,是专门用来绘制客户区的,所以定义的时候要用参数this,该参数是指向要用CClientDC绘图的CView类对象的指针,我们常用CClientDC dc(this),是因为我们常在CView类的成员函数中使用CClientDC dc (this),所以this就是指向CView类的。因此你一定要明白你用的this到底是不是指向CView的。

2、dc.TextOut(0,m_nLine*20,m_strDisplay);是利用dc输出文本,第1个参数是x坐标,x从0开始。第2个参数是y坐标,如果是第1行,y就从20开始,该点坐标就是(0,20),如果是第2行(m_nLine=2),也就是m_nLine*20=40,该点坐标就是(0,40),如果是第3行(m_nLine=3),那么该点坐标就是(0,60)。这里x总是0,每换一行y就下移20,输出下一行字符。

3、if(nChar==VK_RETURN)

参数:nChar表示虚拟键代码,VK_RETURN表示回车键。

从例中可以看出,ClassWizard能自动添加当前类的WM_KEYDOWN(某键按下)和WM_KEYUP(某键抬起)击键消息处理函数的调用,它们具有下列函数原型:afx_msg void OnKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags);

afx_msg void OnKeyUp(UINT nChar,UINT nRepCnt,UINT nFlags);

参数:

nChar表示虚拟键代码。

nRepCnt按键的重复重复次数,若按下某个键不放,该参数将会持续增加。

nFlags表示击键消息标志。

所谓虚拟键代码,是指与设备无关的键盘编码。在Visual C++中,最常用的虚拟键代码定义在Winuser.h中,例如:

虚拟键名称对应的虚拟键

VK_UP光标上移键

VK_DOWN光标下移键

VK_LEFT光标左移键

VK_RIGHT光标右移键

VK_HOME Home键

VK_END End键

VK_PRIOR PageUp页向上键

VK_NEXT PageDown页向下键

VK_RETURN回车键

VK_SHIFT SHIFT键

VK_F1表示功能键F1

和键击消息一样,MFC中的ClassWizard也提供相应的字符消息处理框架并自动添加当前类的WM_CHAR消息处理函数调用,它具有下列函数原型:

afx_msg void OnChar(UINT nChar,UINT nRepCnt,UINT nFlags);

参数:

nChar表示键的ASCII码。

nRepCnt表示当用户按住一个键时的重复计数。

nFlags表示字符消息标志。

值得说明的是:如果我们建一个单文档应用程序,而在第六步将基类置成CEditView (具有文本编辑、查找、替换和滚动功能的视图),则什么也不用做,运行后,就能在文档窗口中随意写内容了,还能回车和出现滚动条。

3、计时器消息

计时器能够以固定的时间间隔产生WM_TIMER消息,它不同于硬件时钟中断,它是用软件实现的。在程序中使用计时器要设置一个WM_TIMER消息发生的频率,例如,如果把定时器的时间间隔设置为500ms(0.5s),那么每隔500ms就会产生一个WM_TIMER事件。如果要使程序运行中每隔一定的时间间隔发出“滴答”声音,这可通过定时器来实现,该功能的实现可分为2步:

(1)创建一个定时器,使之在规定的时间间隔发出特定的消息。

(2)在消息响应函数中,编写发“滴答”声音的代码。

例8使程序运行中,每隔一定的时间间隔发出“滴答”的声音

(1)建一个单文档应用程序,名为:计时器

(2)安装计时器:ViewClassWizardMessage MapsClass name:CMyViewObject IDs:CMyViewMessages:OnInitalUpdateAdd Function.这样就将OnInitalUpdate函数加到CMyView.cpp中。再加如下计时器代码:

void CMyView::OnInitialUpdate()

{ CView::OnInitialUpdate();

SetTimer(1,500,NULL);//设置并启动计时器,SetTimer是CWnd的成员函数。

}

(3)清除计时器

计时器安装成功后,可以通过调用KillTimer()函数清除它,例如:可以在程序退出时清除计时器。按如上安装计时器的步骤将WM_DESTROY消息(即删除函数)加到CMyView.cpp中,并加清除代码:

void CMyView::OnDestroy()

{ CView::OnDestroy();

KillTimer(1);//清除计时器

}

(4)添加计时器消息WM_TIMER响应函数

按如上安装计时器的步骤将WM_TIMER消息,加到CMyView.cpp中,并加代码:void CMyView::OnTimer(UINT nIDEvent)

{ MessageBeep(-1);

CView::OnTimer(nIDEvent);

}

(5)编译运行,每隔一定的时间间隔发出“滴答”声音。

说明:

1、OnInitialUpDate函数,一般是对视图的显示做初始化,主要初始化视图中控件及对各个变量进行初始化操作。

注意:在OnCreate产生VIEW的基本结构和变量后,然后才执行OnInitialUpDate函数

2、SetTimer()函数:设置并启动计时器,其原型为:

UINT SetTimer(UINT nIDEvent,UINT nElapse,void(CALLBACK EXPORT*lpfnTimer)

(HWND,UINT,UINT,DWORD));

参数:

nIDEvent:用于指定该计时器的标识值(不能为0)。

nElapse:指定WM_TIMER消息发生的时间间隔,以毫秒为单位。

lpfnTimer:指定一个用于响应WM_TIMER消息的处理函数地址,如果设置为NULL,则WM_TIMER消息放在消息队列中,由窗口对象处理,如果安装成功,则返回非零。

3、KillTimer()函数:当应用程序不再使用计时器,可调用该函数CMnd::KillTimer ()来停止WM_TIMER消息的传递,其原型为:BOOL KillTimer(int nIDEvent);

参数:nIDEvent 是安装计时器时所指定的计时器的标识值,和SetTimer函数设

置的计时器标识值是一致的,例中都是1 。

4、WM_TIMER消息,ClassWizard会将其映射成具有下列原型的消息处理函数:

afx_msg void OnTimer(UINT nIDEvent);

参数:nIDEvent可判断出WM_TIMER是哪个计时器传送的。这里放任意数都可以。

5、MessageBeep(-1):播放一个系统报警声音,系统声音的分配方案是在控制面板里决定的,返回值Long,非零表示成功,零表示失败,参数-1表示从机器扬声器中发出蜂鸣声。其它描述见第7章。

例9:文字滚动程序

计时器是一种常用的输入设备,前面已经介绍过,它周期性地按一定的时间间隔向应用程序发送WM_TIMER消息,它能实现“实时更新”以及“后台运行”等功能。应用程序是通过CWnd类的SetTimer函数来设置并启动计时器的。

(1)建一个SDI应用程序,名为:文字滚动

(2)程序设计:

1)在视图的头文件CMyView.h里加:

private:

int x;//x坐标向前步进

//如果要加颜色,在public里写:

COLORREF m_pColor1;//第一种颜色

COLORREF m_pColor2;//第二种颜色

COLORREF m_pColor3;//第三种颜色

2)在视图的执行文件CMyView.cpp的构造函数里加:

x=0;

//如果要加颜色,接着写:

m_pColor1=RGB(255,0,0); // 红

m_pColor2=RGB(0,255,0); // 绿

m_pColor3=RGB(0,0,255); // 蓝

3)在CMyView.cpp里找到OnDraw函数并加如下代码:

View::OnDraw(CDC *pDC)

{—

pDC->SetTextColor(m_pColor1); // SetTextColor设置当前文本颜色,这里是红色

pDC->TextOut(x,80,”中国改革开放的28年颂歌!”);

pDC->SetTextColor(m_pColor2); //绿

pDC->TextOut(x,100,”我们一定完成祖国的统一大业!”);

pDC->SetTextColor(m_pColor3); // 蓝

pDC->TextOut(x,120,”攀登计算机科学高峰,培养现代化创新人才!”);

x=x+20;// 步进长度

RECT re;//矩形结构体对象,也就是窗口矩形。

GetClientRect(&re);//获得矩形窗口的大小

if(x>re.right-re.left)//字走到最右边,就从头(x=0)开始,否则继续

x=0;

}

4)添加一个菜单项名为“启动(&B)”,ID标识为ID_TEST,将ID_TEST映射消息连接到视图类CMyView中并加代码:

void CMyView::OnText()

{

SetTimer(1,200,NULL); //设置并启动计时器

}

5)将计时器消息WM_TIMER映射到视图CMyView中并加代码:

void CMyView::OnTimer()

{

Invalidate();//强制重新绘制视图

}

(3)编译运行,点击新建的菜单“启动”

即可使文字滚动,见图1.4.9

说明:

1、RECT结构:

typedef struct tayRECT

{LONG left;//左上角x坐标LONG top;//左上角y坐标

LONG right;//右下角x坐标

LONG bottom;//右下角y坐标

}RECT;

例中:RECT CRect;是定义RECT结构体对象。

2、CRect类与如上结构相似,且包括操作CRect对象和WindowsRECT结构的成员函数。

C语言程序设计第四版第六章答案_谭浩强

1、用筛选法求100之内的素数。解: #include #include int main() {int i,j,n,a[101]; for (i=1;i<=100;i++) a[i]=i; a[1]=0; for (i=2;i int main() {int i,j,min,temp,a[11]; printf("enter data:\n"); for (i=1;i<=10;i++)

{printf("a[%d]=",i); scanf("%d",&a[i]); } printf("\n"); printf("The orginal numbers:\n"); for (i=1;i<=10;i++) printf("%5d",a[i]); printf("\n"); for (i=1;i<=9;i++) {min=i; for (j=i+1;j<=10;j++) if (a[min]>a[j]) min=j; temp=a[i]; a[i]=a[min]; a[min]=temp; } printf("\nThe sorted numbers:\n"); for (i=1;i<=10;i++) printf("%5d",a[i]); printf("\n"); return 0; } 3、求一个3×3的整型矩阵对角线元素之和。解: #include int main() { int a[3][3],sum=0; int i,j; printf("enter data:\n"); for (i=0;i<3;i++) for (j=0;j<3;j++) scanf("%3d",&a[i][j]); for (i=0;i<3;i++) sum=sum+a[i][i]; printf("sum=%6d\n",sum);

C语言程序设计(谭浩强)第四版-课后答案

第一章程序设计和C语言【第15页】 1-5 #include int main ( ) { printf ("**************************\n\n"); printf(" Very Good!\n\n"); printf ("**************************\n"); return 0; } 1-6 #include int main() {int a,b,c,max; printf("please input a,b,c:\n"); scanf("%d,%d,%d",&a,&b,&c); max=a; if (max #include int main() {float p,r,n; r=0.1; n=10; p=pow(1+r,n); printf("p=%f\n",p); return 0; }

3-2-1 #include #include int main() {float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5; p=1000; r5=0.0585; r3=0.054; r2=0.0468; r1=0.0414; r0=0.0072; p1=p*((1+r5)*5); // 一次存5年期 p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期 p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期 p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次 p5=p*pow(1+r0/4,4*5); // 存活期存款。活期利息每一季度结算一次 printf("p1=%f\n",p1); // 输出按第1方案得到的本息和 printf("p2=%f\n",p2); // 输出按第2方案得到的本息和 printf("p3=%f\n",p3); // 输出按第3方案得到的本息和 printf("p4=%f\n",p4); // 输出按第4方案得到的本息和 printf("p5=%f\n",p5); // 输出按第5方案得到的本息和 return 0; } 3-2-2 #include #include int main() {double r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5; p=1000; r5=0.0585; r3=0.054; r2=0.0468; r1=0.0414; r0=0.0072; p1=p*((1+r5)*5); // 一次存5年期 p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期 p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期 p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次

简单的四则运算计算器程序

简单的四则运算计算器程序

注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。 2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。

附件:程序源代码 // sizheyunsuan.cpp : Defines the entry point for the console application. #include #include const int MAX=100; class Operand{ private: double operS; public: Operand(){} Operand(double opers){ operS=opers; } void set(double opers){ operS=opers; } double get() { return operS;} }; class Operator{ private: char operF; int priority; public: Operator(){} Operator(char operf) { operF=operf; switch(operf) { case'(':priority=-1;break; case'+':priority=0;break; case'-':priority=0;break; case'*':priority=1;break; case'/':priority=1;break; case')':priority=2;break; } } void set(char operf){ operF=operf; } char get(){ return operF;} int getpriority(){ return priority; } };

《C语言程序设计》课后习题答案(第四版)谭浩强

第1章程序设计和C语言1 1.1什么是计算机程序1 1.2什么是计算机语言1 1.3C语言的发展及其特点3 1.4最简单的C语言程序5 1.4.1最简单的C语言程序举例6 1.4.2C语言程序的结构10 1.5运行C程序的步骤与方法12 1.6程序设计的任务14 1-5 #include int main ( ) { printf ("**************************\n\n"); printf(" Very Good!\n\n"); printf ("**************************\n"); return 0; } 1-6#include int main() {int a,b,c,max; printf("please input a,b,c:\n"); scanf("%d,%d,%d",&a,&b,&c); max=a; if (max

2.5结构化程序设计方法34 习题36 第章最简单的C程序设计——顺序程序设计37 3.1顺序程序设计举例37 3.2数据的表现形式及其运算39 3.2.1常量和变量39 3.2.2数据类型42 3.2.3整型数据44 3.2.4字符型数据47 3.2.5浮点型数据49 3.2.6怎样确定常量的类型51 3.2.7运算符和表达式52 3.3C语句57 3.3.1C语句的作用和分类57 3.3.2最基本的语句——赋值语句59 3.4数据的输入输出65 3.4.1输入输出举例65 3.4.2有关数据输入输出的概念67 3.4.3用printf函数输出数据68 3.4.4用scanf函数输入数据75 3.4.5字符数据的输入输出78 习题82 3-1 #include #include int main() {float p,r,n; r=0.1; n=10; p=pow(1+r,n); printf("p=%f\n",p); return 0; } 3-2-1 #include #include int main() {float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5; p=1000;

C语言程序设计第四版第七章答案-谭浩强

第七章函数 7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。 maxyueshu(m,n) int m,n; { int i=1,t; for(;i<=m&&i<=n;i++) {if(m%i==0&&n%i==0) t=i; } return(t); } minbeishu(m,n) int m,n; {int j; if(m>=n) j=m; else j=n; for(;!(j%m==0&&j%n==0);j++); return j; } main() {int a,b,max,min; printf("enter two number is: "); scanf("%d,%d",&a,&b); max=maxyueshu(a,b); min=minbeishu(a,b); printf("max=%d,min=%d\n",max,min); } 7.2求方程的根,用三个函数分别求当b2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。 #include"math.h" float yishigen(m,n,k) float m,n,k; {float x1,x2; x1=(-n+sqrt(k))/(2*m); x2=(-n-sqrt(k))/(2*m); printf("two shigen is x1=%.3f and x2=%.3f\n",x1,x2); } float denggen(m,n) float m,n; {float x; x=-n/(2*m); printf("denggen is x=%.3f\n",x); }

大学生C语言程序设计(第四版 谭洪强)实验5答案

实验四参考答案(参考答案) (1) 设计程序sy5-1.c,从键盘上输入一个3行3列矩阵各个元素的值,输出其主对角线元素和反向对角线元素之和。 算法分析: 对角线上的元素,1维和2维下标相同,反对角线元素,如果行下标为i,列下标就为2-i; 参考答案: #include int main() { int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int i,j,sum=0; for(i=0;i<3;i++) sum=sum+a[i][i]+a[i][2-i]; //a[i][i]当前行的主对角线元素 //a[i][2-i]当前行的反对角线元素printf("矩阵的正、反对角线元素之和为:%d\n",sum); return 0; } 运行结果: (2) 设计程序sy5-2.c,找出一个3×4的矩阵中的最小值及其位置。 算法分析: 首先把二维数组中的第一个数即a[0][0]看成最小值,然后逐行逐列的去遍历每个元素,逐一判断每一个元素是否比最小值还好小,如果是,就改写最小值,并记录他的下标。 参考答案: #include #include int main() { int a[3][4]={{10,21,41,5},{12,15,46,35},{40,21,26,30}}; int i,j,row,colum,min; printf("数组a:\n"); for(i=0;i<3;i++) { for(j=0;j<4;j++) printf("%5d",a[i][j]);

printf("\n"); } min=a[0][0];row=0;colum=0; //首先把第一个数a[0][0]看成最小数 for(i=0;i<3;i++) //双重循环逐一遍历每个元素a[i][j] for(j=0;j<4;j++) if(min>a[i][j]) //如果当前值a[i][j]比最小值还要小 {min=a[i][j];row=i;colum=j;} //用a[i][j]改写最小值,并记下他们的下标printf("矩阵中最小元素是:%d,行下标是:%d,列下标是%d\n",min,row,colum); return 0; } 运行结果: (3) 设计程序sy5-3.c,定义一个3×3的二维数组,通过随机函数自动赋值。然后输入一个整数n,使数组左下三角(含对角线元素)元素中的值乘以n 。例如:若n的值为3,a 数组中的值为 | 1 9 7 |则程序运行后a数组中的值应为| 3 9 7 | | 2 3 8 | | 6 9 8 | | 4 5 6 | | 12 15 18 | 算法分析: 主要理解到对角线即以下元素包含哪些元素,即他们的下标变化。对每一行i来说,对角线以下的元素,他们的列下标是0,1,2,---,i;所以用外循环i遍历行,内循环j(从0到i),逐一遍历每一个a[i][j],并给a[i][j]赋值为他的n倍。最后输出矩阵。 参考答案: #include #include int main() { int a[3][3]; int i,j,n; printf("原来a的值:"); for(i=0;i<3;i++) //生成数组元素,并按矩阵形式输出 { for(j=0;j<3;j++) {a[i][j]=rand()%20; //rand()参看教材385页 //rand()%20 产生一个20以内的整数

大整数的四则运算高质量C语言程序

设计题目: 大整数的四则运算 1. 功能简介:编写出实现大整数之间相加,相减,相乘,相除的程序,并输出计算结构。 课程设计要求:采用模块化程序设计 源程序中应有足够的注释 必须上机调试通过 注重算法运用,优化存储效率与运算效率 需提交源程序(含有注释)及相关文件(数据或数据库文件); 提交设计报告书。 2. 总体结构:

加法 数据初 判断运算符 减法乘法除法退出 正整数非正整转变为转变为 转变为 流程图:

3 ?概要设计:

1) 加法运算 利用两个整形数组分别存放两个数a 和b 的每一位的数值,最低位存放符号。如果a 和b 同号,从最低为开始计算,如果有进位则保存在高一位,本为则减10 ,然后反序将计 算后的各个位的数值保存在一个数组C并输出,如果a和b都是负数则在前面要输出负号, 函数的返回值为C的位数。如果a和b异号,也即两个正整数相减,从最低位开始相减,如果要借位则本位加10 再相减,高一位要减1,然后反序将计算后的各个位的数值保存在一个数组C 并输出,在前面要输出相应的符号位。 2) 减法运算 可将减法运算转化为加法运算,只要将被减数的符号改变即可。 3) 乘法运算 符号存放在最低位,将其中一个数a 的每一位分别乘以另一个数b 的每一位,并将结果保存在数组C 中,然后重复计算a的下一位跟b的每一位的乘积,把上一次计算保存在C 的值加上本次计算后的值,并保存在C自身中,直到a的最高位,最后输出符号和相应的计 算结果。 4) 除法运算 利用乘法和减法,将除数分别乘以1到9,直到其值大于等于被除数的对应的数,然后被除数对应的数减去其乘积,保存在一个数组中,下一次循环把它归到被除数中继续做除法运算,最后得到余数并输出。 4. 函数功能: 1. void init(int a[],int b[],int *p1,int *p2) 2. 功能说明:读入所要计算的数值,数据初始化 3. int plus(int a[],int b[],int C[],int m,int n) 4. 功能说明:两个正整数相加 3. void Change(int a[],int b[],int m,int n) 功能说明:当两异号数相加时,改变其符号以符合加法运算 5. int minus(int a[],int b[],int d[],int m,int n) 6. 功能说明:两个正整数相减 5. void minusfun(int a[],int b[],int d[],int m,int n) 功能说明:判断两个异号数的相加方式 7. int multi(int a[],int b[],int C[],int m,int n) 8. 功能说明:两个正整数相乘 7. void print(long C[],int flag) 功能说明:打印带符号flag ( 1为负)的Iong c[]数组 8. int write(long a[],int flag) 功能说明:将键盘敲入的数字按4位一组放入Iong a[],且将符号放入flag 9. void mul(long a[],int first,int last,long b[],long C[]) 功能说明:乘法,a的第last到first位乘以b,答案放到C

四则运算程序-Java程序设计

《程序设计实践》题目:小学生四则运算练习程序 学校: 学院: 班级: 学号: 姓名:_ 2014 年11月24 日

实践基础程序设计实践 一、实践目的 1、掌握基本输入输出。 2、掌握方法定义与调用,理解参数传递方式。 二、实践要求 利用方法、数组、基本输入输出等Java基础知识,给出所选项目的基本设计与实现。 三、项目需求 所选项目名称:小学生四则运算练习程序 实现对小学生简单加法、减法、乘法、除法的四则运算练习。要求通过键盘输入两个运算数,并回显输入数,将运算结果输出。 四、项目设计方案 Test类: 数据域:sum,总分数。 方法:core()负责随机生成题目,并对其打上分数。 main(String[] args)是程序的入口,负责程序的开始。 五、核心算法详细设计 1.public static void main(String[] args) { Test t = new Test(); // 提示用户考试信息 System.out.println("本次测试共十道题,每题十分,满分一百分"); // 将分数sum初始化为0; t.sum = 0; // 创建一个随机类 Random r = new Random();

// 进行10个循环,对应着10道题 for (int i = 0; i < 10; i++) { t.core(); } //打印出考试成绩 System.out.println(" 考试结束"); System.out.println(" 您的总分为" + t.sum); } 2.//考试的题目。 private void core() { //产生一个随即生成器 Random r = new Random(); //产生一个在0,1,-1之中的数 int m, n; m = r.nextInt() % 10; n = m % 2; 六、完整源码 package test; import java.util.Random; import java.util.Scanner;

《C语言程序设计》_谭浩强版教案

《C 语言程序设计》教案 职称: 助教 ____________ 单 位:湖南理工职业技术学院 学院(教研室):风能工程学院 工业机器人专业 授课教师: 周常欣

教 学 重 占 八、、 和 难 占 八、、 一、 程序设计和 C 语言 重点:计算机程序、计算机语言、 C 语言编译软件的安装、最简单的 C 语言程序 二、 算法:程序的灵魂 重点:简单的算法举例、算法的特性、用流程图表示算法。 三、 顺序结构程序设计 重点:C 语言的数据类型、C 语句的种类、赋值语句、数据的输入输出及输入输出 中最常用的 控制格式。 四、 选择结构程序设计 重点:关系运算符与逻辑运算符及其组成的具有逻辑值的表达式、 二条分支语句的格 式及基本应用、多分支的选择语句。 五、 循环结构程序设计 重点:C 构成循环的四种方法,尤其是后三种方法、 break 与continue 语句的基本作 用。 难点:while 语句;do-while 语句;for 语句;循环的嵌套; break 与continue 语句。 六、 数组 重点:一维数组、二维数组的定义与引用;字符数组的定义与引用、常用字符串处 理函数及字符处理函数;数组的应用 难点:二维数组的定义与引用;字符数组;数组的应用 七、 函数 重点:函数的定义;函数的参数和函数的值;函数的调用;函数的嵌套调用;函数的 递归调 用;数组作为函数参数;变量作用域;量存储类别; 难点:函数定义、函数调用、函数声明等基本基本概念;函数的嵌套调用与递归调 用;数组作 为函数的参数、变量的存储类别与作用域。 八、 指针 重点和难点:指针与地址的基本概念、指针与变量的关系;指针与数组;指针与字 符串、指针 数组与二级指针;指针的应用 九、 建立自己的数据类型 重点和难点:定义和使用结构体变量、用指针处理链表、共用体类型 十、文件 重点:文件的基本知识、 fopen 、fclose 函数打开与关闭文件、顺序读与数据文件、 随机读写数据文件 难点:用二进制方式向文件读写一组数据。 十一、常见错误分析 重点和难点:文件的基本概念;文件的打开、关闭、常用读写方法。 十二、数组高级应用 重点:不定长数组与二维数组的应用 难点:不定长数组与二维数组的应用 十三、综合应用 重点:数组、if 语句、循环语句、函数知识的综合应用 难点:二维数组、指针 教材、 参 考书 教材:《C 程序设计》(第四版) 谭浩强著 清华大学出版社2010年6月 参考书:《C 程序设计语言》 Kernighan&Ritchie 机械工业出版社 《C 语言程序设计》教案 第1-2课时

四则运算程序报告

四则运算 程序功能简介: 该程序用字符串的形式接收一个带括号的四则运算的表达式,然后按照四则运算优先级的算法先括号,后乘方、乘除、加减这样的顺序将这个算式解出。 该程序的设计比较巧妙,是在主程序中反复查找最后一对括号,将其中的结果计算出来,去掉括号,这样的过程持续下去,最后导致所有的括号都去除,解出算式。 课程设计要求: (1)用类的形式改写程序,将数据和函数封装到类中。 (2)修改主程序结构,使程序可以反复运算,直到选择退出为止。 (3)扩充程序功能,使程序适合浮点运算。 (4)增加程序的判断功能,当有非法输入(如字母等),给出提示信息并退出运算,当输入带有空格使,能将空格滤除。 评定难易等级:A级。 程序设计思想: 类的封装: class CStr // 定义一个字符串类 { private: int nLen; //字符串长度 char *pStr; //字符串首地址 public: CStr(){nLen=0;pStr=NULL;} //构造函数 CStr(CStr &str); //拷贝的构造函数 ~CStr(){if(pStr) delete[]pStr;} //析构函数 int GetLen(){return nLen;} //返回字符串长度 CStr & Midstr(CStr &str,int nStart,int nLength); /*返回字符串类中从nStart序号开始nLength长度的字符串*/ CStr & Left(CStr &str,int nLength); //返回制定字符串类中从左边开始nLength 个字符 CStr & Right(CStr &str,int nLength); //返回制定字符串类中从右边开始nLength个字符 CStr & Calculate(); //计算该字符串所代表的四则运算的值(内无括号) int CharInStr(char chChar); //判断字符chChar是否在字符串中 double V al(); //求字符串代表的数字字符的数值 char GetChar(int i){return *(pStr+i);} //返回字符串中第i个字符 CStr & Str(double val); //将数值表示成字符串的形式 CStr & operator=(CStr &); //重载赋值运算符 friend CStr operator+(CStr &,CStr &); //友元,实现字符串类的加法 operator char *(){return(char *)pStr;} //将字符串类转换成字符数组 friend istream &operator>>(istream &,CStr &); //重载输入运算符 int Judge(); //判断输入法是否合法,滤除空格

小学数学四则运算C++程序开发

#include #include #include #include static int i=0,j=0; char bkuang() //定义界面函数 { for(int l=0;l<30;l++) cout<>m;cout<>m;cout<

int a,b,t; srand(time(0)); a=rand()%10; //随机产生一个0--99的数 b=rand()%10; //随机产生一个1--99的数 if(a>m;cout<>m;cout<>m;cout<

《C语言程序设计》课后习题答案(第四版)谭浩强

第1章程序设计和C语言1 什么是计算机程序1 什么是计算机语言1 语言的发展及其特点3 最简单的C语言程序5 最简单的C语言程序举例6 语言程序的结构10 运行C程序的步骤与方法12 程序设计的任务14 1-5 #include <> int main ( ) { printf ("**************************\n\n"); printf(" Very Good!\n\n"); printf ("**************************\n"); return 0; } 1-6#include <> int main() {int a,b,c,max; printf("please input a,b,c:\n");

scanf("%d,%d,%d",&a,&b,&c); max=a; if (max

数据类型42 整型数据44 字符型数据47 浮点型数据49 怎样确定常量的类型51 运算符和表达式52 语句57 语句的作用和分类57 最基本的语句——赋值语句59 数据的输入输出65 输入输出举例65 有关数据输入输出的概念67 用printf函数输出数据68 用scanf函数输入数据75 字符数据的输入输出78 习题82 3-1 #include <> #include <> int main() {float p,r,n; r=; n=10; p=pow(1+r,n); printf("p=%f\n",p); return 0;

C语言四则运算测试程序设计报告

昆明理工大学 《计算机程序设计基础》课程 综合实践型教学课题报告 课题名称:100以内的整数四则运算测试程序设计 组长:学号 040401067 姓名周绍平 组员:学号 040401070 姓名邓磊 学号 040401106 姓名刘云路 学号姓名 学号姓名 学号姓名 学号姓名 学院:信自学院专业班级:自动化0421 指导教师:耿植林 昆明理工大学计算中心 2005 年 6月18日

昆明理工大学计算中心 《计算机程序设计基础》课程综合实践型教学课题报告课程名称:100以内的整数四则运算测试程序设计

正文内容: 一、问题描述 这是一个进行数学计算的程序,且要求拥有多种功能,包括(1)选项菜单集成各功能函数模块(2)出题(每次出10道题目)(3)答题并评分(4)答错的题给出正确答案(5)显示答卷。总体看来,大多数功能要求调用错题,所以面临的两个难题便是出题和保存答题者做错的题以便其它函数调用。另外,由于除法的特殊性——其除数不能为0。又因为这是一个用于100以内整数的四则运算的程序,又对除法这个特殊成员提出了新的要求——要使得到的结果为整数。所以有必要把除法单独拿出来作为一个函数处理。 二、问题分析 这是一个任务很明确的程序设计—用于100以内的整数的四则运算。这个程序要求拥有选项菜单、出题、答题评分、显示答卷、错题再解、重复练习的功能。既然是一个用于计算的程序那它的主要作用就是给练习者答题,并验证答题的正确与否。当然,还要有一些附加功能,比如:把答卷显示出来,错题给出正解,错题再抽出来再做。 这个程序只要求100以内的四则运算,所以随机出现的数字只能是100以内的,并且要求其为整数。不论是数据的输入与输出,都要求其为整数。 鉴于这个程序所要求达到的功能,我们小组决定把它分为计算、菜单、答卷、重做、正解、评价、除法七个函数模块。 对各成员的分工如下: 计算、正解和菜单(周绍平) 评价和除法(邓磊) 答卷和重做(刘云路) 主函数及各函数的连接则由小组成员共同完成。 三、程序设计思路功能模块说明 各函数流程图: 1、除法(chufa) 2、计算(jisuan)

用VB制作四则运算器步骤及代码

用V B制作四则运算器 步骤及代码 Company Document number:WUUT-WUUY-WBBGB-BWYTT-1982GT

一、实验目的、目标 综合运用本课程的相关知识,完成两位数四则运算器的设计、编写与测试,培养学生的实践动手能力,并检测本课程的学习效果。 二、实验内容 基本要求: ?两位数(指10-99的自然数)的加减乘除(除法指的是整除)运算,其中减法和除法必须满足“被操作数不小于操作数”(即可以不考虑20- 56、4\20等情况) ?两个操作数、运算符均随机产生 ?完成一题后自动判断对错,并显示出来 ?可以随时查看已经完成的题目情况 ?完成一题自动计算题目总数、正确数、错误数和正确率,并实时显示出来 扩展要求(不硬性规定): ?在答错的题目后面给出正确答案 ?可增加时钟控件,10秒(或15秒)内必须完成一题 ?限制题目数目为固定值(如20题、50题) ?把程序扩展成为多位数甚至任意位数的运算器 三、实验过程与步骤 1、在Visual Basic 系统环境下,打开“工程设计”窗口。 2、新建两个窗口Form1和Form2,添加控件并进行控件的设置, Form1作用是进行题目数量和答题时间的选择并将数据进行保存以供Form2调

用,Form2的作用是进行随机两位数(指10-99的自然数)的加减乘除 (除法指的是整除)运算,完成一题后自动判断对错,给出错误题目的正确答案,并显示出来,添加时间钟控,显示计算题目总数、正确数、错误数和正确率。 3、在Form1窗口,双击控件打开代码窗口,设计窗体及控件的事件代码。采用单选的形式选择题目数量和答题时间,当点击确定按钮时,调用 Form2,当点击退出时,退出整个程序。 Public tishu As Integer, shijian As Integer Private Sub Form_Load() = False = False = = MsgBox "请选择题量和答题时间!", 48, "提示" Unload Form2 End Sub Private Sub Option1_Click(Index As Integer) tishu = Val(Option1(Index).Caption) = tishu End Sub Private Sub Option2_Click(Index As Integer) shijian = Val(Option2(Index).Caption) = shijian End Sub Private Sub Command1_Click() MsgBox "请直接在文本框中输入数字作答(其中除法为整除)," & vbLf & "回车完成一题,系统自动生成下一题", , "提示" End Sub Private Sub Command2_Click()

C语言四则运算

机电学部课程设计 题目:小学生算术四则运算测试程序姓名:黄超 学号:200912110118 班级:计算机科学与技术 课程:程序设计方法学 任课教师:顾保磊 2014年6月28日 课程设计任务书及成绩评定

目录 背景 (1) 摘要 (1)

功能要求................................................... . (2) 设计流程 (3) 程序执行 (4) 程序 (5) 程序 (6) 程序 (7) 程序 (8) 实验结果 (9) 实验结果 (10) 实验心得…………………………………………....….. .11 背景 伴随着人类社会的进步,人们的计算工具也在不断的变化,从远古时期的结绳计数,到算筹,算盘,以及近代的机械计算机、计算尺,直至今天我们广泛运用的电子计算机。计算工具的每一次进步,都导致科学技术发生深刻的革命。 人类最初是用手指来作为记数和计算工具的。在古代,人们还广泛地使用过筹码和结绳来作为记数和计算的工具,其中筹码可能采用石子、木棍、滑片等,每一个可以单独使用也可用工具在其刻上道使用。我们中华民族的祖先,在公元前5世纪以前开始使用算筹。利用算筹记数,用笔写下来就是筹算数字,当时这在世界上是十分先进的。而作为我们的祖先对世界文明的重大贡献——四大发明之一的珠算盘,则是人类经过设计加工,制造出来的第一种计算工具。十六世纪以来,随着机械设计和制造水平的提高,同时也为了满足日益复杂的计算要求,

许多科学家设计制造了以齿轮为主要构件的机械式计算机。自从上个世纪四十年代电子计算机的发明,人类计算工具的发展进入了一个新纪元。计算机以人类技术史上前所未有的高速度发展着,其主要构件由电子管、晶体管、集成电路,一直发展到运用超大规模集成电路。计算机的计算速度也从每秒几千次算术计算,提高到每秒上万亿次算术计算。 摘要 小学生四则运算,是利用VC++软件编写的一程序,电脑可随机的出10道四则运算题,每题十分。答题者输入需要运算的数,其中要求算式面向小学 1~2年纪,数的大小不超过50且运算的结果必须在0~50之间,答题者有三次答题机会,在这三次机会之内答出,系统会自动根据答案的正确与否,得出分数,按照相应的分数给出级别,80-90显示“GOOD”,70-80显示“OK”,60-70显示“PASS”,60以下“TRY AGAIN” 功能要求 题目:小学生算术四则运算测试程序 面向小学1~2年级学生,随机选择两个整数和加减法形成算式要求学生解答。 功能要求: (1)电脑随机出10道题,每题10分,程序结束时显示学生得分; (2)确保算式没有超出1~2年级的水平,只允许进行50以内的加减法,不允许两数之和或之差超出0~50的范围,负数更是不允许的; (3)每道题学生有三次机会输入答案,当学生输入错误答案时,提醒学生重新输入,如果三次机会结束则输出正确答案; (4)对于每道题,学生第一次输入正确答案得10分,第二次输入正确答案得7分,第三次输入正确答案得5分,否则不得分; (5)总成绩90以上显示“SMART”80-90显示“GOOD”,70-80显示“OK”,60-70显示“PASS”,60以下“TRY AGAIN”

C语言程序设计第四版 谭浩强 课后习题答案完整版

第三章 3.6写出以下程序运行的结果。 main() {char c1=’a’,c2=’b’,c3=’c’,c4=’\101’,c5=’\116’; printf(“a%cb%c\tc%c\tabc\n”,c1,c2,c3); printf(“\t\b%c %c”,c4,c5); } 解: aaㄩbbㄩㄩㄩccㄩㄩㄩㄩㄩㄩabc AㄩN 3.6 要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母.例如,字母"A"后面第4个字母是"E"."E"代替"A"。因此,"China"应译为"Glmre"。请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。 解: #include main() { char c1=’C’,c2=’h’,c3=’i’,c4=’n’,c5=’a’; c1+=4; c2+=4; c3+=4; c4+=4; c5+=4; printf("密码是%c%c%c%c%c\n",c1,c2,c3,c4,c5); } 运行结果: 密码是Glmre 3.9求下面算术表达式的值。 (1)x+a%3*(int)(x+y)%2/4 设x=2.5,a=7,y=4.7 (2)(float)(a+b)/2+(int)x%(int)y 设a=2,b=3,x=3.5,y=2.5 (1)2.5 (2)3.5 3.10写出程序运行的结果。 main() {int i,j,m,n; i=8; j=10; m=++i; n=j++; printf(“%d,%d,%d,%d”,i,j,m,n);

《C语言程序设计》课后习题答案(第四版)谭浩强

1-5 #include int main ( ) { printf ("**************************\n\n"); printf(" Very Good!\n\n"); printf ("**************************\n"); return 0; } 1-6#include int main() {int a,b,c,max; printf("please input a,b,c:\n"); scanf("%d,%d,%d",&a,&b,&c); max=a; if (max int main() { int a,b,c; printf("请输入三个整数:"); scanf("%d,%d,%d",&a,&b,&c); if (a int main() { int x,y; printf("输入x:"); scanf("%d",&x);

if(x<1) /* x<1 */ { y=x; printf("x=%3d, y=x=%d\n" ,x,y); } else if(x<10) /* 1==10 */ { y=3*x-11; printf("x=%d, y=3*x-11=%d\n",x,y); } return 0; } 4-7-1 #include int main() { int x,y; printf("enter x:"); scanf("%d",&x); y=-1; if(x!=0) if(x>0) y=1; else y=0; printf("x=%d,y=%d\n",x,y); return 0; } 4-7-2 #include int main() { int x,y; printf("please enter x:"); scanf("%d",&x); y=0; if(x>=0) if(x>0) y=1; else y=-1; printf("x=%d,y=%d\n",x,y);

相关文档
相关文档 最新文档