软件作业Word格式文档下载.docx

上传人:b****3 文档编号:18335780 上传时间:2022-12-15 格式:DOCX 页数:12 大小:112.64KB
下载 相关 举报
软件作业Word格式文档下载.docx_第1页
第1页 / 共12页
软件作业Word格式文档下载.docx_第2页
第2页 / 共12页
软件作业Word格式文档下载.docx_第3页
第3页 / 共12页
软件作业Word格式文档下载.docx_第4页
第4页 / 共12页
软件作业Word格式文档下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

软件作业Word格式文档下载.docx

《软件作业Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《软件作业Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。

软件作业Word格式文档下载.docx

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请再输入一个表达式:

运算结果:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 哲学历史

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1