#include "stdio.h"
main()
{int i,j,k,m,n
long int count=0
for(i=1i<=15i++)
for(j=i+1j<=15j++)
for(k=j+1k<=15k++)
for(m=k+1m<=15m++)
for(n=m+1n<=15n++)
{if(iden(i,j,k,m,n))
printf("No %ld : %5d%5d%5d%5d%5d\n",++count,i,j,k,m,n)
if(count%45==0) getchar()
}
}
iden(int i,int j,int k,int m,int n)
{if(i==j||i==k||i==m||i==n||j==k||j==m||j==n||k==m||k==n||m==n)
return 0
else
return 1
}
再增加两个变量,修改下程序可以35选5,我机子是P4 cpu1.8G 内存是512M,跑了好久,估计要两个小时左右!!!没耐心等下去,有朋友想试下的我把程序弄下面来了!!
#include "stdio.h"
main()
{int i,j,k,m,n,q,w
long int count=0
for(i=1i<=35i++)
for(j=i+1j<=35j++)
for(k=j+1k<=35k++)
for(m=k+1m<=35m++)
for(n=m+1n<=35n++)
for(q=n+1q<=35q++)
for(w=q+1w<=35w++)
{if(iden(i,j,k,m,n,q,w))
printf("No %ld : %5d%5d%5d%5d%5d%5d%5d\n",++count,i,j,k,m,n,q,w)
if(count%45==0) getchar()
}
}
iden(int i,int j,int k,int m,int n,int q,int w)
{if(i==j||i==k||i==m||i==n||i==q||i==w||j==k||j==m||j==n||j==q||j==w||k==m||k==n||k==q||k==w||m==n||m==q||m==w||n==q||n==w||q==w)
return 0
else
return 1
}
闪退,多指在移动设备(如iOS、Android设备)中,在打开应用程序时出现的突然退出中断的情况(类似于Windows的应用程序崩溃)。多表现为:应用程序画面一闪而过,随即退回到桌面。闪退的原因和处理方法
1、缓存垃圾过多
平时在使用软件的过程中,会产生一些垃圾文件,如果长时间不清理会导致手机越来越卡,也会出现闪退状况。
进入设置–应用程序——全部——找到有问题的应用程序,清除数据或者缓存。(注:清除数据,会清除掉应用的个人设置、账户信息等。)
2、运行程序过多
如果不进行设置,很多软件都会自己运行,而手机后台程序过多会造成内存不足,从而造成应用闪退。如出现软件闪退,可先清理内存后再试试。
3、手机杀毒软件
部分手机软件存在着恶意代码,会被杀毒软件拦截因而不能正常进入,应该通过绿色下载平台或者使用软件商店来下载安全系数较高的游戏。
(注:以上三个原因都现在都可以通过安全软件清理,轻松解决。但需要注意在删除一些大型文件时请谨慎。)
4、应用版本问题
如果应用的版本较低,会导致应用软件不兼容,造成闪退。如果是版本太旧,更新为新版本即可。
如新版本如果出现闪退,是应用改版本还在调试中,无需担心,会很快修复。
5、网速问题
部分软件需要一个稳定的网络,使用的是2G/3G网络,造成闪退的可能性比较大,建议在有WiFi的情况下玩比较好。
6、缺少数据包
一些大型游戏需要数据包才能运行。所以要先安装好数据包才能使用。
7、系统不兼容
部分软件对版本有一定的要求,如果系统版本过低,软件是不能支持的,所以会闪退。
8、分辨率不兼容
一些软件对手机分辨率有一定的要求,如果手机分辨率不兼容,有部分软件就容易出现闪退或其它错误。
VC++6.0上机 *** 作指南贵州大学计算机科学与技术学院
张志明
2006年9月
目录
1. Visual C++ 控制台应用程序上机实现步骤
2. MFC对话框应用程序实现举例
3. MFC单文档应用程序实现举例
4. 用32位调试程序了解类和对象的内存映象
1. Visual C++控制台应用程序(Win32 Console Application Project)
上机实现步骤
一. 单文件程序的实现
本教材中的程序在Visual C++环境下都是以Win32 Console Application 项目实现,而且都是单文件程序,即只含有一个源程序(.cpp)文件的C++程序。
一个单文件程序在Visual C++ IDE中的实现主要步骤是:(1)建立新项目(2)建立新文件(3)输入源代码(4)编译、连接,生成可执行程序文件。以上步骤均可在Visual C++的Wizard指导下通过对话框交互输入完成。
1. 建立新项目:
每个C++程序的实现都要建立一个项目。所谓项目是一个文件生成过程的管理单位,项目名称就是最后实现的可执行文件的名称,一个项目就是与生成这个可执行程序文件相关的所有源文件和中间文件的集合,存放在以项目名称命名的文件夹中。
图1 Microsoft Visual C++ 6.0系统初始界面
执行菜单命令File>New,打开New对话框:
图2 打开New对话框
在New对话框的Project选项卡中选择Win32 Console Application选项,然后输入项目存放位置项目名称后确定。
图3 输入项目位置和名称
在Win32 ConsoleApplication-Step 1 of 1对话框中选择An empty project,完成后返回。系统d出新建项目信息报告对话框。
图4 Win32 ConsoleApplication-Step 1 of 1对话框
图5 新建项目信息报告
2. 建立新文件:
再一次执行菜单命令File>New,打开New对话框,在File选项卡中选择C++ Sourse File选项,然后输入源程序文件名。完成后系统打开源程序(.cpp)文件编辑窗口。
图6 在New对话框输入源程序文件名
3. 输入源代码:
此时即可在源程序(.cpp)文件编辑窗口输入源程序代码。
图7 源程序(.cpp)文件编辑窗口
4. 生成和运行可执行程序文件:
11从源程序文件生成可执行文件,需要经历编译,连接两步,在VC++6.0编程环境中可以有以下几种 *** 作方式:
(1)打开Build (编译)菜单,先执行Compile命令,接着再执行Build命令。
(2)打开Build (编译)菜单,执行Rebuilde All命令。
(3)打开Build (编译)菜单,直接发出Execute 执行命令,一次性完成编译、连接和启动程序执行的任务。
(4)直接单击“!”(BuildExecute)命令按钮,一次性完成编译、连接和启动程序执行的任务。
图8 Build (编译)菜单
图9 程序运行结果
打开工程文件夹可以找到该工程的所有工作文件。
打开工程文件夹中的Debug子文件夹,可以找到生成的可执行(.exe)文件。
二. 多文件程序的实现
一个较大型C++程序,有时需要包含多个源程序文件。一种常见的情况是将类的定义放在头(.h)文件中,将类的实现或对类的访问放在源(.cpp)文件中。
多文件程序的实现与单文件程序的实现方式需要经历同样的步骤,不同的是,在编译之前需要利用新建文件对话框逐一将所有需要的文件追加到项目中。
1. 建立新项目:
2. 建立新文件:
(1)加入和编辑头文件:
在New对话框,在File选项卡中选择C/C++ Header File选项,然后输入头文件名。完成后系统将打开源程序(.h)文件编辑窗口。
(2)加入和编辑源程序文件
打开New对话框,在File选项卡中选择C++ Sourse File选项,然后输入源程序文件名。完成后系统打开源程序(.cpp)文件编辑窗口。
注意:在源程序文件中应该用文件包含命令将头文件包含进来。如下例源程序文件s719.cpp的第一行:#include"h719.h"
3. 生成和运行可执行程序文件:
步骤同单文件程序的生成和执行。
#
2.MFC对话框应用程序实现举例
本指导书给出3个MFC对话框应用程序的实现实例,例1为求三科平均成绩的简单程序,例2为实现一个具有四则运算功能的简单计算器,例3为一个彩票机程序(提供手动摇号和自动摇号两个彩票机程序版本)。
通过这些程序可以达到以下目的:
掌握AppWizard的使用方法。
掌握Workshop中各种视图的使用和在不同视图之间切换的方法。
学会利用控件工具箱中的控件定制对话框界面。
学会控件变量及其他类成员变量的设置。
学会消息映射的概念和 *** 作方法。
学会查看和编辑代码。
学习编译、运行和调试对话框应用程序。
例1.实现一个求三科平均成绩的MFC对话框应用程序。假设运行时的界面如下:
实现步骤:
1. 在Visual C++ 6.0工作开发环境中,New对话框中选择MFC AppWizard [exe]项目,输入项目名称并指定存放位置。
2. 在MFC Wizard Step1选择Dialog(基本对话)程序类型,在MFC Wizard Step2中输入对话框标题“求平均成绩”。
AppWizard对话结束后打开对话框编辑窗口如下:
3. 定制界面:添加控件、设置属性
删除对话框模板中原有的“确定”按钮和内容为“TODO: 在这里设置对话控制。”的Static Text控件。
在控件工具箱中取一个Group Box控件,调整适当大小,鼠标右键单击该控件边框,在d出的下拉菜单中打开属性对话框。将Group Box控件标题由“Static”改为“求平均分”。
在Group Box中添加4个Static Text控件,按同样方法修改它们的标题属性为“成绩1”、“成绩2”、“成绩3”和“平均分”。
在Group Box中添加4个Edit Box控件,打开属性对话框的Extended Styles选项卡中将它们设置为文本右对齐(Right Aligend Text)方式。其中第4 个Edit Box控件的Styles属性设置为Read-only。
在Group Box中添加一个按钮Button1,打开属性对话框将按钮的标题属性改为 “计算平均分”。
鼠标右键单击“取消”按钮边框,在d出的下拉菜单中打开属性对话框。将按钮标题改为“退出”。
设计完成的界面如图,其中控件属性列表如下:
控件
ID号
标题
属性
Group Box
IDC_STATIC
求平均分
Static Text
IDC_STATIC
成绩1
Static Text
IDC_STATIC
成绩2
Static Text
IDC_STATIC
成绩3
Static Text
IDC_STATIC
平均分
Edit Box
IDC_EDIT1
Align text:Right
Edit Box
IDC_EDIT2
Align text:Right
Edit Box
IDC_EDIT3
Align text:Right
Edit Box
IDC_EDIT4
Align text:RightRead-only
Button
IDC_BUTTON1
计算平均分
Button
IDCANCEL
退出
4. 添加成员变量
单击View(查看)>ClassWizard(建立类向导)菜单进入ClassWizard,打开Member Variables选项卡:为4 个Edit Box控件设置对应的变量:
同样的方法为其它3个Edit Box控件设置变量:
控件ID
变量名
变量类型
数值范围
IDC_EDIT1
m_S1
int
0~100
IDC_EDIT2
m_S2
int
0~100
IDC_EDIT3
m_S3
int
0~100
IDC_EDIT4
m_Sav
CString
5. 添加消息映射(两条消息)
进入ClassWizard,打开Messages Maps选项卡,在Object Ids中选择CAverageDlg,在Messages中鼠标单击WM_INIDIALOG,在Member functions中出现生成的消息映射成员函数OnInitDialog提示:
在Object Ids中选择IDC_BUTTON1,在Messages中鼠标单击BN_CLIKED,在d出对话框中单击OK按钮:在Member functions中出现第二个生成的消息映射成员函数OnButton1。
6. 添加代码
在ClassWizard中双击OnInitDialog函数,打开代码编辑器中的OnInitDialog()函数代码,找到其中的 // TODO: Add extra initialization here,加入下面的黑体字给出的3行代码:
BOOL CDlgDlg::OnInitDialog()
{
CDialog::OnInitDialog()
…
// TODO: Add extra initialization here
m_Sav="0.00"
m_S1=m_S2=m_S3
UpdateData(FALSE)
return TRUE // return TRUE unless you set the focus to a control
}
在ClassWizard中双击OnButton1()函数,打开代码编辑器中的OnButton1()函数代码,找到其中的 // TODO: Add extra initialization here,加入下面的黑体字给出的4行代码:
void CDlgDlg::OnButton1()
{
// TODO: Add extra initialization here
UpdateData()
double ave=(double)(m_S1+m_S2+m_S3)/3.0
m_Sav.Format("%6.2f",ave)
UpdateData(FALSE)
}
7. 编译运行程序:
注释:
UpdateData()函数的作用是允许更新控件变量,
UpdateData(FALSE) 禁止更新控件变量的值。
例2.设计MFC对话框应用程序,实现一个具有四则运算功能的简单计算器。
1. 新建项目:
2. 定制界面:
(1) 修改MFC AppWizard自动创建的对话框项目模板。删除模板上自动创建的三个控件。
(2) 加入“简单计算器”、“请输入数据:”、“结果”三个静态文本框和相应的3个编辑框。
(3) 加入一个Group Box,标题修改为“请选择运算符:”,并在其中放入4个Radio Button将标题分别改为“+”、“-”、“*”、“/”。
(4) 继续用鼠标从工具箱中向对话框添加和3个按钮控件,更改按钮的标题为“计算”、“清除”、“关闭”。
3. 添加变量
本例中用到以下4个CSimpleCalcDlg类的成员变量:
变量类型
名称
float
m_N1
float
m_N2
float
m_ Result
char
Operator
用ClassWizard为编辑框添加变量:m_N1, m_N2, m_Result
变量char Operator的添加方法:
在WorkSpace中进入ClassView视图, 鼠标右键单击CSimpleCalcDlg, 在菜单中选择“Add Member Variable…”
然后在d出的对话框的输入变量类型和名称:
4. 添加消息映射
用ClassWizard为按钮控件添加消息映射:
继续用ClassWizard为Radio Button控件添加消息映射:
5. 加入单击按钮时的事件响应代码
在实现文件(cpp文件)中加入单击按钮时的事件响应代码。(双击一个按钮可直接进入函数编辑)
//选择运算符
void CSimpleCalcDlg::OnRadio1()
void CSimpleCalcDlg::OnRadio2()
void CSimpleCalcDlg::OnRadio3()
void CSimpleCalcDlg::OnRadio4()
//计算
void CSimpleCalcDlg::OnButton1()
{
UpdateData()
switch(Operator)
{
case '+':
m_Result=m_N1+m_N2
break
case '-':
m_Result=m_N1-m_N2
break
case '*':
m_Result=m_N1*m_N2
break
case '/':
if(m_N2 == 0 )
MessageBox("除数不能为零!")
else
{
m_Result = m_N1/m_N2
break
}
default:
m_Result=m_N1+m_N2
}
UpdateData(FALSE)
}
//清除
void CSimpleCalcDlg::OnButton2()
{
UpdateData()
m_N1=0
m_N2=0
m_Result=0
UpdateData(FALSE)
}
//关闭
void CSimpleCalcDlg::OnButton3()
6. 编译运行程序
例3. 彩票机程序:
本例给出手动摇号和自动摇号两个彩票机程序版本。
1. 彩票机界面:
定制含有7个Edit Box 、1个Progress(进度条)和3侦探按钮控件的对话框界面如下:
2. 设置变量:
(1) 设置进度条变量:
(2) 设置7个编辑框变量:
(3)添加类成员变量m_x:
3. 消息映射:
在ClassWizard中产生OnInitDialog、OnButton1、OnButton2、OnOK四个消息映射函数:
4. 添加代码:
//初始化
BOOL CLotusDlg::OnInitDialog()
{
CDialog::OnInitDialog()
……
// TODO: Add extra initialization here
m_x=0
m_pProg.SetRange(0,70)
srand((unsigned)time(NULL))
return TRUE // return TRUE unless you set the focus to a control
}
(一)手动摇号
//手动摇号,每按一次摇号按钮出一个号
void CLotusDlg::OnButton1()
{
// TODO: Add your control notification handler code here
switch(m_x/10)
{
case 0:
m_N1=rand()%36+1
m_pProg.SetPos(m_x+=10)
break
case 1:
m_N2=rand()%36+1
m_pProg.SetPos(m_x+=10)
break
case 2:
m_N3=rand()%36+1
m_pProg.SetPos(m_x+=10)
break
case 3:
m_N4=rand()%36+1
m_pProg.SetPos(m_x+=10)
break
case 4:
m_N5=rand()%36+1
m_pProg.SetPos(m_x+=10)
break
case 5:
m_N6=rand()%36+1
m_pProg.SetPos(m_x+=10)
break
case 6:
m_N7=rand()%36+1
m_pProg.SetPos(m_x+=10)
break
}
UpdateData(FALSE)
}
void CLotusDlg::OnButton2()
{
// TODO: Add your control notification handler code here
m_x=0
m_N1=0
m_N2=0
m_N3=0
m_N4=0
m_N5=0
m_N6=0
m_N7=0
UpdateData(FALSE)
m_pProg.SetPos(1)
}
void CLotusDlg::OnOK()
{
CDialog::OnOK()
}
(二)自动摇号
将前面实现的手动摇号程序修改为自动定时摇号。
添加OnTimer消息映射函数:
//按摇号按钮启动摇号
void CLotusDlg::OnButton1()
{
SetTimer(1,2000,NULL)
}
void CLotusDlg::OnButton2()
{
m_x=0
m_N1=0
m_N2=0
m_N3=0
m_N4=0
m_N5=0
m_N6=0
m_N7=0
UpdateData(FALSE)
m_pProg.SetPos(0)
KillTimer(1)
}
void CLotusDlg::OnTimer(UINT nIDEvent)
{
switch(m_x/10)
{
case 0:
m_N1=rand()%36+1
m_pProg.SetPos(m_x+=10)
break
case 1:
m_N2=rand()%36+1
m_pProg.SetPos(m_x+=10)
break
case 2:
m_N3=rand()%36+1
m_pProg.SetPos(m_x+=10)
break
case 3:
m_N4=rand()%36+1
m_pProg.SetPos(m_x+=10)
break
case 4:
m_N5=rand()%36+1
m_pProg.SetPos(m_x+=10)
break
case 5:
m_N6=rand()%36+1
m_pProg.SetPos(m_x+=10)
break
case 6:
m_N7=rand()%36+1
m_pProg.SetPos(m_x+=10)
break
}
UpdateData(FALSE)
CDialog::OnTimer(nIDEvent)
}
void CLotusDlg::OnOK()
{
KillTimer(1)
CDialog::OnOK()
}
5. 注释:
(1)产生随机数的方法
函数unsigned int rand() 产生随机数。
函数void srand(unsigned int seed) 设定随机数产生器的种子,其中seed为随机数产生器的种子,本例中用系统时钟当前值作随机数种子:
srand((unsigned)time(NULL))函数的
表达式rand()%36+1产生1-36之间的随机数
(3) 定时器的使用方法
定时器的使用涉及OnTimer、SetTimer、KillTimer三个函数。
SetTimer用于设定定时时间和启动定时器,其中第一个参数是定时编号,第二个参数是定时的毫秒数。本例中将1号定时器定时时间设定为2秒:
SetTimer(1,2000,NULL)
定时器启动以后将持续工作,每到达一次定时时间即启动一次OnTimer消息函数的执行。KillTimer的作用是停止指定定时器的工作。
3.
MFC单文档应用程序实现举例
创建单文档应用程序的一般步骤:
利用AppWizard创建单文档应用程序框架。
在文档类中声明保存文档数据所需要数据对象。
完成文档类的OnNewDocument函数,初始化新文档。
完成文档类的Serialize函数,保持和加载文档数据。
完成视类的OnInitialUpdate函数,初始化显示。
完成视类的OnDraw函数,显示当前文档内容。
在视类中加入可以使用户编辑文档数据所需的代码。
本实验指导通过以下4 个实验循序渐进演示创建单文档应用程序的基本 *** 作,在前一个例子中演练过的 *** 作,在后面的中出现时不再重复描述。
例1 一个简单的单文档应用程序——记事本程序
例2 简单文本和图形输出
例3 利用定时器输出滚动字幕
例4 文档串行化编程
例1.
一个简单的单文档应用程序——记事本程序
1. 只要在AppWizard的Step 6将Base Class设置为EditView,AppWizard就自动完成了一个记事本程序的设计:
2. 运行程序,即可测试记事本的各种功能:
3.说明:
(1)打开Workshop中的Class视图,可以看到,一个简单的单文档应用程序向导自动建立五个类:
向导自动建立的类
相应源文件
其他源文件
相应头文件
其他头文
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)