实习报告Word下载.docx
- 文档编号:8093394
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:57
- 大小:292.84KB
实习报告Word下载.docx
《实习报告Word下载.docx》由会员分享,可在线阅读,更多相关《实习报告Word下载.docx(57页珍藏版)》请在冰点文库上搜索。
{
intdata;
linknode<
*link;
linknode(linknode<
*ptr=NULL){link=ptr;
data=0;
data1=0;
}
//~linknode(){deletelink;
}
intdata1;
};
classlist
public:
list();
//current=newlinknode<
;
current=first;
}//调用linknode的构造函数,first的值为NULL!
current的值为NULL!
~list(){deletefirst;
}//deletecurrent;
boolinsert(linknode<
*recurrent);
//将节点的总数传出去;
voidstart(inta);
//开始执行大数阶乘!
执行m!
voidoutput();
//输出大数阶乘。
voidjinwei(linknode<
//取进位
intsum;
private:
*first;
//头结点,只是一个指针!
*current;
//当前指针
//总节点的个数!
//linknode<
*current;
//intlist<
:
sum=0;
//作为初次插入节点的表示
//类的实现
////////////////////////////////////////////////////////////////////////////////////////////
template<
list<
list()
first=newlinknode<
sum=1;
boollist<
insert(linknode<
*recurrent)//直接在最后面一个节点上添加节点!
linknode<
*nextnode=newlinknode<
//动态创建一个对象,同时也动态创建一个指针。
对象无法表示,必须通过指针来访问!
sum++;
if(nextnode==NULL)
{
cerr<
<
"
储存分配错误!
endl;
exit
(1);
}
recurrent->
link=nextnode;
returntrue;
//sum++;
voidlist<
start(inta)//传进来N的值
*nodeone=newlinknode<
//创建第一个节点,
//sum++;
first->
data=1;
if(a>
1)
{
for(intb=1;
b<
a||b==a;
b++)
while(current!
=NULL)
{
intresult;
result=(current->
data)*b+current->
data1;
current->
data=result;
if(result<
999)//不进位
{
//current->
current=current->
link;
}
if(result>
999)//进位
if(current->
link==NULL)
{
jinwei(current);
gotoERR;
}
link!
current=current->
link;
}
current=first;
=NULL)
current=current->
ERR:
jinwei(linknode<
*recurrent)//当前节点的值要改变,
inttemp1=recurrent->
data;
//+recurrent->
//取这一次的总值;
inttemp2=temp1%1000;
//这次节点的值;
recurrent->
data=temp2;
data1=0;
if((recurrent->
link==NULL)&
&
temp1>
999)
insert(recurrent);
inttemp3=(temp1/1000)%1000;
//取得下一节点的data;
recurrent=recurrent->
recurrent->
data=temp3;
if(temp1>
999999)
insert(recurrent);
inttemp3=(temp1/1000000)%1000;
recurrent=recurrent->
recurrent->
link!
=NULL)&
999)//只是进一位!
!
inttemp3=temp1/1000;
//取得下一节点的data1;
//inti=recurrent->
data1=temp3;
//+i;
output()
int*p=newint[sum];
for(intn=sum-1;
n>
-1;
n--)
p[n]=current->
data;
current=current->
for(intm=0;
m<
sum;
m++)
if(m==0)
cout<
p[0];
if(m>
0)
if(p[m]<
10)
cout<
0<
p[m];
if(p[m]>
9&
p[m]<
100)
99)
//问题,因为m!
无法表示,因此必须使用所谓的m*(m-1)!
#endif
2.Cpp
#include"
stdafx.h"
#include<
iostream.h>
factor.h"
stdlib.h>
intmain(intargc,char*argv[])
int>
list1;
intn;
cout<
求N的阶乘,请输入N的值:
cin>
>
n;
list1.start(n);
list1.output();
//printf("
HelloWorld!
\n"
);
return0;
以下是1000的阶乘:
实习二栈及队列的应用
【实习题目】
表达式求值
【实现关键】
栈的使用
两位数以上、负数、小数点?
对于表达式求值,我们应该注意其中涉及到的栈的概念,使用栈可以很方便的实现表达式求值的过程,对于表达式表示,有三种,前缀表示,中缀表示,后缀表示,但是我们一般会用中缀表示,中缀表示法一般只使用一个栈,可以很有效的实现表达式求值运算。
在本程序中,我是采用MFC来实现的,有一些功能可能实现的不太好。
使用栈的话,我没有采用书上的那种方法,而是采用其他的方法来实现的,感觉效果上还是不太好。
1.调试过程中,首先遇到的问题就是数据类型的转换,我们输进去的是string类型,但是必须将表达式中的数字段和运算符段分离开来,以完成表达式求值,首先将string类型转化成float类型,这样就可以实现运算,其次,在输出的时候,我们还要再转换成string类型,以此来实现输出。
2.在写代码的主程序段,采用了栈的能力,将运算符压入栈。
我在程序中是用来两个栈,一个存储运算符,另一个栈存储float类型,其中在第一个栈中我一般只存储“*”和“/”两种运算符,在这之前将前面表达式中所拥有的加法与减法运算都消掉,只保留乘法与除法运算,这种实现还是有问题的,在后期的表达式求值过程中,有时候会出现问题,而且对括号,负号的实现都不能,感觉这个程序写的不好。
1.Stack.h
classstack
//stack();
stack(intsum);
//virtual~stack();
~stack();
//voidrun(floata1,floata2,chara3);
voidpush(floata);
voidpush(charb);
voidpopfloat();
voidpopchar();
inttop;
float*f;
char*c;
2.Stack.cpp
stack:
~stack()
delete[]f;
delete[]c;
//template<
stack(intsum)
f=newfloat[sum];
c=newchar[sum+1];
//deep=0;
top=-1;
voidstack:
push(floata)
top++;
f[top]=a;
push(charb)
c[top]=b;
popfloat()
//f[top]=0;
top--;
popchar()
//c[top]='
#'
top--;
3.Dlg.cpp
以下是主要的实现函数:
voidCMyDlg:
Onshurudeng()
//TODO:
Addyourcontrolnotificationhandlercodehere
m_expression+='
='
UpdateData(false);
UpdateData();
intsum=0;
intpanduan=0;
intj=0;
inttemp=0;
intlength=m_expression.GetLength();
for(inti=0;
i<
length;
i++)
switch(m_expression.GetAt(i))
{
case'
+'
ch[sum]='
sum++;
if(panduan==0)
str[j]=m_expression.Mid(0,i);
panduan=1;
temp=i;
//m_result=str[j];
//UpdateData(false);
//UpdateData();
fl[j]=(float)atof((char*)(LPTSTR)(LPCTSTR)str[j]);
else
str[j]=m_expression.Mid(temp+1,i-temp-1);
//m_result=str[j];
//UpdateData(false);
//UpdateData();
j++;
break;
-'
*'
/'
case'
//sum++;
//表示有多少个值!
default:
//开始执行运算!
stacks1(sum+2);
//用来装浮点数的;
stacks2(sum+2);
//0sum数组;
intm=0;
//得到后来的栈中的总数!
charcr='
s2.push(cr);
s1.push(fl[0]);
for(m=0;
sum+1;
s2.push(ch[m]);
if(ch[m]=='
)
//m--;
break;
s1.push(fl[m+1]);
if(ch[m]=='
s1.f[m]=fl[m]*fl[m+1];
s1.popfloat();
s2.popchar();
s1.f[m]=fl[m]/fl[m+1];
intp=0;
while(s2.c[p]=='
||s2.c[p]=='
||s2.c[p]=='
p++;
/*for(intk=p-1;
k>
0;
k--)
if(s2.c[k-1]=='
s1.f[k-2]=s1.f[k-2]-s1.f[k-1];
s1.popfloat();
s2.popchar();
s1.f[k-2]=s1.f[k-2]+s1.f[k-1];
for(intk=0;
k<
p-1;
k++)
if(s2.c[k]=='
else
if(s2.c[k+1]=='
s1.f[0]=s1.f[0]-s1.f[k+1];
s1.f[0]=s1.f[k+1]+s1.f[0];
m_result.Format("
%f"
s1.f[0]);
UpdateData(fa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实习 报告