电子工程学院计算机实习.docx
- 文档编号:11108182
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:57
- 大小:770.29KB
电子工程学院计算机实习.docx
《电子工程学院计算机实习.docx》由会员分享,可在线阅读,更多相关《电子工程学院计算机实习.docx(57页珍藏版)》请在冰豆网上搜索。
电子工程学院计算机实习
计算机实习报告
专业:
电子科学与技术
班级:
XXXXXXXX
学号:
XXXXXXXX
姓名:
XXXXXXXX
1、魔方阵
1、任务要求:
n为初始输入的数字(为了显示效果,使n≤15),把整数1到n2排成一个n×n方阵,使方阵中的每一行,每一列以及对角线上的数之和都相同。
输出这个方阵。
达到以下要求:
①、可以通过界面设定n的值
②、正确输出方阵
③、其他(界面美观、操作简便)
2、算法设计:
A、奇数阶幻方n为奇数(n=3,5,7,9,11……)(n=2*k+1,k=1,2,3,4,5……)
奇数阶幻方最经典的填法是罗伯特法(也有人称之为楼梯方)。
填写方法是这样:
把1(或最小的数)放在第一行正中;按以下规律排列剩下的n*n-1个数:
(1)、每一个数放在前一个数的右上一格;
(2)、如果这个数所要放的格已经超出了顶行那么就把它放在底行,仍然要放在右一列;
(3)、如果这个数所要放的格已经超出了最右列那么就把它放在最左列,仍然要放在上一行;
(4)、如果这个数所要放的格已经超出了顶行且超出了最右列,那么就把它放在前一个数的
下一行同一列的格内;
(5)、如果这个数所要放的格已经有数填入,处理方法同(4)。
这种写法总是先向“右上”的方向,象是在爬楼梯。
B.当N为双偶数时,算法如下:
(1)先将整个方阵划分成k*k个4阶方阵,然后在每个4阶方阵的对角线上做记号
(2)由左而右、由上而下,遇到没有记号的位置才填数字,但不管是否填入数字,每移动一格数字都要加1
(3)自右下角开始,由右而左、由下而上,遇到没有数字的位置就填入数字,但每移动一格数字都要加1
C.当N为奇偶数时,算法如下:
(1)先将整个方阵划成田字型的四个2k+1阶的奇数阶小方阵,并以下法做注记:
a、右半两个小方阵中大于k+2的列。
b、左半两个小方阵中(k+1,k+1)的格位。
c、左半两个小方阵中除了(1,k+1)的格位之外,
小于k+1的列。
(2)以奇数阶魔方阵的方法连续填制法依左上、右下、右
上、左下的顺序分别填制这四个小方阵。
(3)将上半及下半方阵中有注记的数字对调,魔方阵完成。
3、程序运行情况截图:
魔方阵界面上边可以输入魔方阵阶数,可以调节控制魔方阵输出的阶数,当输入3-15的数字并点击确定时便会在下方输出该阶数的魔方阵,如果输入其他数字或者字符便会报错并提示重新输入。
4、部分代码及注释:
#include"stdafx.h"
#include"魔方阵.h"
#include"魔方阵Dlg.h"
#include"afxdialogex.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#endif
//用于应用程序“关于”菜单项的CAboutDlg对话框
classCAboutDlg:
publicCDialogEx
{public:
CAboutDlg();
//对话框数据
enum{IDD=IDD_ABOUTBOX};
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDV支持
//实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg:
:
CAboutDlg():
CDialogEx(CAboutDlg:
:
IDD)
{
}
voidCAboutDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialogEx:
:
DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg,CDialogEx)
END_MESSAGE_MAP()
//C魔方阵Dlg对话框
C魔方阵Dlg:
:
C魔方阵Dlg(CWnd*pParent/*=NULL*/)
:
CDialogEx(C魔方阵Dlg:
:
IDD,pParent)
mofang(0)
C_num(0)
C_mofang(_T(""))
{
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
voidC魔方阵Dlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialogEx:
:
DoDataExchange(pDX);
DDX_Text(pDX,IDC_EDIT3,C_num);
DDX_Text(pDX,IDC_EDIT4,C_mofang);
}
BEGIN_MESSAGE_MAP(C魔方阵Dlg,CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1,&C魔方阵Dlg:
:
OnBnClickedButton1)
//ON_EN_CHANGE(IDC_EDIT2,&C魔方阵Dlg:
:
OnEnChangeEdit2)
END_MESSAGE_MAP()
//C魔方阵Dlg消息处理程序
BOOLC魔方阵Dlg:
:
OnInitDialog()
{
CDialogEx:
:
OnInitDialog();
//将“关于...”菜单项添加到系统菜单中。
//IDM_ABOUTBOX必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
BOOLbNameValid;
CStringstrAboutMenu;
bNameValid=strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
//设置此对话框的图标。
当应用程序主窗口不是对话框时,框架将自动
//执行此操作
SetIcon(m_hIcon,TRUE);//设置大图标
SetIcon(m_hIcon,FALSE);//设置小图标
//TODO:
在此添加额外的初始化代码
returnTRUE;//除非将焦点设置到控件,否则返回TRUE
}
voidC魔方阵Dlg:
:
OnSysCommand(UINTnID,LPARAMlParam)
{
if((nID&0xFFF0)==IDM_ABOUTBOX)
{
CAboutDlgdlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx:
:
OnSysCommand(nID,lParam);
}
}
//如果向对话框添加最小化按钮,则需要下面的代码
//来绘制该图标。
对于使用文档/视图模型的MFC应用程序,
//这将由框架自动完成。
voidC魔方阵Dlg:
:
OnPaint()
{
if(IsIconic())
{
CPaintDCdc(this);//用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND,reinterpret_cast
//使图标在工作区矩形中居中
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&rect);
intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
//绘制图标
dc.DrawIcon(x,y,m_hIcon);
}
else
{
CDialogEx:
:
OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSORC魔方阵Dlg:
:
OnQueryDragIcon()
{
returnstatic_cast
}
//点击“输出”
voidC魔方阵Dlg:
:
OnBnClickedButton1()
{
//TODO:
在此添加控件通知处理程序代码
UpdateData(TRUE);
if(C_num<=2||C_num>15)//定义变量C_num为输入的n
{
MessageBox(_T("您输入的n不在范围内,请重新输入"));
}
else
{
inti,l;
intarray[16][16]={0};
//////////////////////////////////////////////////
//当输入的n是奇数时算法为将1填入第一行中间,之后想右上方继续排列,若右上方有数则放在它下面
if(C_num%2==1)
{
inti,j,row,col,pre_row,pre_col;
intsqrN=C_num*C_num;
intvalue;//计数1-n*n
for(row=0;row for(col=0;col array[row][col]=0; for(row=0,value=1,col=(C_num-1)/2;value<=sqrN;value++) { array[row][col]=value; pre_row=row; pre_col=col; row--; col++; //溢出的处理 if(row<0) row+=C_num; if(col==C_num) col-=C_num; //当array[row][col]已经有数时的处理 if(array[row][col]) { col=pre_col; row=pre_row+1; } } } ////////////////////////////////////////////////////////////////////////// //双偶数魔方阵的构造方法: 将数字按顺序放入数组,然后对调指定的行和列 elseif(C_num%4==0) { inti,j,row,col,count=1,temp; for(row=0;row //将1-n*n放入二维数组 for(col=0;col { array[row][col]=count; count++; } //对调 for(row=C_num/4;row<=C_num*3/4-1;row++) { for(col=0;col { temp=array[row][col]; array[row][col]=array[row][C_num-1-col]; array[row][C_num-1-col]=temp; } } for(col=C_num/4;col { for(row=0;row { temp=array[row][col]; array[row][col]=array[C_num-1-row][col]; array[C_num-1-row][col]=temp; } } } //////////////////////////////////////////////////////////// //构造单偶数: 将二维数组分成4个小魔方阵,分别按照奇数魔方阵算法填入数字,然后对调指定方格 elseif(C_num%4==2) { introw,col,pre_row,pre_col,value,sqrN; inti,j,m,M,int_temp; //C_num=4m+2,将C_num*C_num分割成四个M*M m=(C_num-2)/4; M=2*m+1; sqrN=M*M; for(row=0;row for(col=0;col array[row][col]=0; //1: 在左上角写出M=2m+1的奇数魔方 //利用方法构造 for(row=0,value=1,col=(M-1)/2;value<=sqrN;value++) { array[row][col]=value; pre_row=row; pre_col=col; row--; col++; if(row<0) row+=M; if(col==M) col-=M; if(array[row][col]) { col=pre_col; row=pre_row+1; } } //2、在右下角构造魔方阵 for(row=M;row for(col=M;col array[row][col]=array[row-M][col-M]+M*M; //3: 在右上角构造魔方阵 for(row=0;row for(col=M;col array[row][col]=array[row+M][col]+M*M; //4: 在左下角构造魔方阵 for(row=M;row for(col=0;col array[row][col]=array[row-M][col+M]+M*M; //5: 交换组标记了的数 for(col=0;col for(row=0;row { if(row==m)continue; int_temp=array[row][col]; array[row][col]=array[M+row][col]; array[M+row][col]=int_temp; } //交换(k+1,k+1) int_temp=array[m][m]; array[m][m]=array[m+M][m]; array[m+M][m]=int_temp; //交换右边的大于k+2的列 for(col=3+m+2;col<2*M;col++) for(row=0;row { int_temp=array[row][col]; array[row][col]=array[M+row][col]; array[M+row][col]=int_temp; } } ////////////////////////////////////////////////////////////////////////////// //输出魔方阵 CStringtemp,out; for(inti=0;i { for(intl=0;l { temp.Format(_T("%5d"),array[i][l]); out+=temp; } //out+="\n"; out+="\r\n"; } C_mofang=out; UpdateData(FALSE); } } 2、动画制作 1、任务要求: 设计一组星际穿越的动画,界面美观流畅,最好有配乐,展现想象力。 2、设计思路: 5辆飞船一起出发,途中遇到陨石群,遇到黑洞,有过退缩,最终到达目的地 3、剧情截图: 出发: 途经陨石群: 途经黑洞: 到达目的地: 3、健康计算器 1、任务要求: 设计一个测量身体BMI指数和体脂率的健康计算器,要求 ①、给出数据可正确计算 ②、能进行健康提示 ③、界面、易用度及其它创意功能 2、算法设计: 健康计算器的算法并不复杂,按照以下公式便可计算出来,并给出相应的健康提示: ①、BMI指数公式: 体重(kg)除以身高(m)的平方(BMI=公斤/m2) 体重过低<18.5 体重正常18.5~23.9 超重24.0~27.9 ②、体脂率公式: 女性的身体脂肪公式: 参数a=腰围×0.74 参数b=体重×0.082+34.89 身体脂肪总重量=a-b 体脂率(身体脂肪百分比)=(身体脂肪总重量÷体重)×100% 男性的身体脂肪公式: 参数a=腰围×0.74 参数b=体重×0.082+44.74 身体脂肪总重量=a-b 体脂率(身体脂肪百分比)=(身体脂肪总重量÷体重)×100% 3、程序运行情况及截图: 左图是输入界面,要求选择性别,输入身高体重以及腰围,程序会根据选择的性别来选择相应的公式,并在弹窗中显示BMI指、体脂率以及相应的健康提示。 如果输入界面没有选择性别后者是输入字符,将会报错并提示重新输入。 4、部分代码及注释: #include"stdafx.h" #include"身体健康指数.h" #include"身体健康指数Dlg.h" #include"afxdialogex.h" #ifdef_DEBUG #definenewDEBUG_NEW #endif //用于应用程序“关于”菜单项的CAboutDlg对话框 classCAboutDlg: publicCDialogEx { public: CAboutDlg(); //对话框数据 enum{IDD=IDD_ABOUTBOX}; protected: virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDV支持 //实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg: : CAboutDlg(): CDialogEx(CAboutDlg: : IDD) { } voidCAboutDlg: : DoDataExchange(CDataExchange*pDX) { CDialogEx: : DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg,CDialogEx) END_MESSAGE_MAP() //C身体健康指数Dlg对话框 C身体健康指数Dlg: : C身体健康指数Dlg(CWnd*pParent/*=NULL*/) : CDialogEx(C身体健康指数Dlg: : IDD,pParent) height(0) weight(0) yaowei(0) { m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME); } voidC身体健康指数Dlg: : DoDataExchange(CDataExchange*pDX) { CDialogEx: : DoDataExchange(pDX); DDX_Text(pDX,IDC_EDIT1,height); DDX_Text(pDX,IDC_EDIT2,weight); DDX_Text(pDX,IDC_EDIT3,yaowei); } BEGIN_MESSAGE_MAP(C身体健康指数Dlg,CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_RADIO1,&C身体健康指数Dlg: : OnBnClickedRadio1) ON_BN_CLICKED(IDC_RADIO2,&C身体健康指数Dlg: : OnBnClickedRadio2) ON_BN_CLICKED(IDC_BUTTON2,&C身体健康指数Dlg: : OnBnClickedButton2) ON_BN_CLICKED(IDC_BUTTON1,&C身体健康指数Dlg: : OnBnClickedButton1) END_MESSAGE_MAP() //C身体健康指数Dlg消息处理程序 BOOLC身体健康指数Dlg: : OnInitDialog() { CDialogEx: : OnInitDialog(); //将“关于...”菜单项添加到系统菜单中。 //IDM_ABOUTBOX必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX&
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 工程学院 计算机 实习
![提示](https://static.bdocx.com/images/bang_tan.gif)