软件作业Word格式文档下载.docx
- 文档编号:18335780
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:12
- 大小:112.64KB
软件作业Word格式文档下载.docx
《软件作业Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《软件作业Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
scanf("
%d"
&
a[i][j]);
printf("
矩阵元素如下:
\n"
{
printf("
%d"
a[i][j]);
}
for(i=0;
row[i]=a[i][0];
for(j=1;
j++)
if(a[i][j]<
row[i])
{
row[i]=a[i][j];
min_col[i]=j;
}
j++)
col[j]=a[0][j];
for(i=1;
if(a[i][j]>
col[j])
col[j]=a[i][j];
}
{
if(row[i]==col[min_col[i]])
printf("
a[%d][%d]=%d\n"
i,min_col[i],row[i]);
else
没有马鞍点!
}
运行结果如图:
二、大作业
简易计算器:
设计编写一个计算器,要求根据算符优先算法原则可以计算由“+-,*,/,(,)”组成的任意算术表达式的值。
使用两个工作栈,一个是OPTR,用以寄存运算符;
另一个是OPND,用以寄存数据。
首先置数栈为空栈,表达式的起始符号为‘#’算符栈的栈底元素;
然后依次读入表达式中的每一个字符,若为数则进OPND数栈,若为运算符则和OPTR算符栈的栈顶运算符比较优先级后,如果栈顶算符优先级低,则此算符进栈并返回新的栈顶算符;
如果栈顶算符优先级高,则取算符栈栈顶算符theta并删除此算符,同时去数栈的最上面的两个数a和b并删除这两个数,作athetab运算并将结果进数栈;
如果两个算符优先级相同,则删除算符栈顶算符并返回新的栈顶算符。
直到整个表达式求值完、
#include<
string.h>
stdlib.h>
//算符优先级表
charFirst[7][7]=
//'
+'
'
-'
*'
/'
('
)'
#'
/*'
*/'
>
'
<
='
'
};
//运算符数组
charOP[7]={'
//数据结构体
typedefstruct
doubledata[50];
inttop;
}OPND_Stack;
//运算符结构体
chardata[50];
}OPTR_Stack;
//初始化运算符栈函数
voidInitStack_R(OPTR_Stack*a)
a->
top=-1;
//初始化数据站函数
voidInitStack_D(OPND_Stack*a)
//运算符进栈函数
voidPush_R(OPTR_Stack*a,charb)
top++;
data[a->
top]=b;
//数据进栈函数
voidPush_D(OPND_Stack*a,doubleb)
//取运算符栈顶符函数
voidGetTop_R(OPTR_Stack*a,char*b)
*b=a->
top];
//取数据栈顶数函数
voidGetTop_D(OPND_Stack*a,double*b)
//判断数据是否为运算符函数
intIn(chara,char*s)
for(inti=0;
7;
if(a==s[i])
return1;
return0;
//算符优先级判断函数
charPrecede(chara,charb)
intm,n;
{
if(a==OP[i])
m=i;
if(b==OP[i])
n=i;
}
returnFirst[m][n];
//删除运算符栈顶元素,并取新栈的栈顶元素
voidPop_R(OPTR_Stack*a,char*b)
top--;
//取数据站的栈顶元素,并从栈中删除此元素
voidPop_D(OPND_Stack*a,double*b)
//二元运算函数
doubleOperate(doublea,chartheta,doubleb)
switch(theta)
case'
:
returna+b;
returna-b;
returna*b;
returna/b;
default:
return0;
//将字符串转换成浮点型数据
doubleGetdouble(char*a,int*b)
doublex;
chars[50];
intm=0,n;
n=strlen(a);
for(inti=*b;
n;
if(In(a[i],OP)==1)
break;
for(i=*b;
m;
s[i-*b]=a[i];
strcat(s,"
\0"
x=atof(s);
*b=m;
returnx;
//算符优先算法求值核心函数
doubleEvaluateExpression(char*s)
OPND_StackOPND;
OPTR_StackOPTR;
charch,theta;
doublex,a,b;
intk=0;
#"
InitStack_R(&
OPTR);
Push_R(&
OPTR,'
InitStack_D(&
OPND);
GetTop_R(&
OPTR,&
ch);
while(s[k]!
||ch!
)
if(In(s[k],OP)==0)
x=Getdouble(s,&
k);
Push_D(&
OPND,x);
else
switch(Precede(ch,s[k]))
{
case'
OPTR,s[k]);
k++;
break;
Pop_R(&
break;
GetTop_R(&
theta);
Pop_D(&
OPND,&
b);
Pop_D(&
a);
Push_D(&
OPND,Operate(a,theta,b));
}
GetTop_R(&
GetTop_D(&
x);
//判断表达式是否输入正确.
intCan(chara[],intn)
intp=0,s=0,t=0;
if(a[i]=='
||a[i]=='
p++;
if((a[i]=='
)&
&
((a[i+1]<
0'
a[i+1]!
)||a[i+1]>
9'
))
s++;
a[i+1]=='
(a[i]=='
))||(a[i]=='
\0'
(a[i+1]!
.'
if(p%2==0&
s==0)
return0;
return1;
//负数转换函数
voidTranslate(char*s)
charb[80];
intk,t;
if(s[0]=='
b[0]='
;
b[1]='
strcat(b,s);
strcpy(s,b);
t=strlen(s);
k=t;
t;
if(s[i]=='
s[i+1]=='
k=i+1;
for(intj=t;
j>
=k;
j--)
s[j]=s[j-1];
s[k]='
s[t+1]='
//主函数
{
chara[80];
intm;
charb[80];
============简易计算器============\n"
[四则运算.如:
-1+(2+3)*9/(-2)-6].\n请输入一个表达式:
while
(1)
gets(a);
strcpy(b,a);
Translate(a);
while
(1)
intp;
m=strlen(a);
p=Can(a,m);
if(p==0)break;
输入错误.请从新输入表达式:
gets(a);
strcpy(b,a);
Translate(a);
=*=*=*=*=*=*表达式结果=*=*=*=*=*=*\n"
该表达式的结果为:
\n%s=%-10.3lf\n"
b,EvaluateExpression(a));
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n"
继续使用[四则运算.如:
-1+(2+3)*9/(-2)-6].<
关闭退出>
.\n请再输入一个表达式:
运算结果:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 作业