软件作业.docx

上传人:b****5 文档编号:7458986 上传时间:2023-05-11 格式:DOCX 页数:12 大小:112.64KB
下载 相关 举报
软件作业.docx_第1页
第1页 / 共12页
软件作业.docx_第2页
第2页 / 共12页
软件作业.docx_第3页
第3页 / 共12页
软件作业.docx_第4页
第4页 / 共12页
软件作业.docx_第5页
第5页 / 共12页
软件作业.docx_第6页
第6页 / 共12页
软件作业.docx_第7页
第7页 / 共12页
软件作业.docx_第8页
第8页 / 共12页
软件作业.docx_第9页
第9页 / 共12页
软件作业.docx_第10页
第10页 / 共12页
软件作业.docx_第11页
第11页 / 共12页
软件作业.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

软件作业.docx

《软件作业.docx》由会员分享,可在线阅读,更多相关《软件作业.docx(12页珍藏版)》请在冰点文库上搜索。

软件作业.docx

软件作业

一、上机作业

寻找马鞍点:

若矩形Am*n中的某个元素Aij是第i行的最小值,同时又是第j列的最大值,则称此元素是该矩阵的一个马鞍点。

试编写程序求出矩阵的所有马鞍点。

解题思路:

充分利用数组和循环结构,录入一个3*3的矩阵,得到矩阵后依次找出每一行中的最小值,再验证该值是否是所在列的最大值,若是则作为马鞍点输出,若都不是则该矩阵没有马鞍点。

程序:

#include

#defineM3

#defineN3

voidmain()

{

introw[100]={0};

intcol[100]={0};

intmin_col[100]={0};

inta[M][N];

inti,j;

printf("请输入矩阵元素\n");

for(i=0;i

for(j=0;j

scanf("%d",&a[i][j]);

printf("矩阵元素如下:

\n");

for(i=0;i

{

for(j=0;j

printf("%d",a[i][j]);

printf("\n");

}

for(i=0;i

{

row[i]=a[i][0];

for(j=1;j

if(a[i][j]

{

row[i]=a[i][j];

min_col[i]=j;

}

}

for(j=0;j

{

col[j]=a[0][j];

for(i=1;i

if(a[i][j]>col[j])

{

col[j]=a[i][j];

}

}

for(i=0;i

{

if(row[i]==col[min_col[i]])

printf("a[%d][%d]=%d\n",i,min_col[i],row[i]);

else

printf("没有马鞍点!

\n");

}

}

运行结果如图:

二、大作业

简易计算器:

设计编写一个计算器,要求根据算符优先算法原则可以计算由“+-,*,/,(,)”组成的任意算术表达式的值。

解题思路:

使用两个工作栈,一个是OPTR,用以寄存运算符;另一个是OPND,用以寄存数据。

首先置数栈为空栈,表达式的起始符号为‘#’算符栈的栈底元素;然后依次读入表达式中的每一个字符,若为数则进OPND数栈,若为运算符则和OPTR算符栈的栈顶运算符比较优先级后,如果栈顶算符优先级低,则此算符进栈并返回新的栈顶算符;如果栈顶算符优先级高,则取算符栈栈顶算符theta并删除此算符,同时去数栈的最上面的两个数a和b并删除这两个数,作athetab运算并将结果进数栈;如果两个算符优先级相同,则删除算符栈顶算符并返回新的栈顶算符。

直到整个表达式求值完、

程序:

#include

#include

#include

//算符优先级表

charFirst[7][7]=

{

//'+','-','*','/','(',')','#'

/*'+'*/'>','>','<','<','<','>','>',

/*'-'*/'>','>','<','<','<','>','>',

/*'*'*/'>','>','>','>','<','>','>',

/*'/'*/'>','>','>','>','<','>','>',

/*'('*/'<','<','<','<','<','=','',

/*')'*/'>','>','>','>','','>','>',

/*'#'*/'<','<','<','<','<','','='

};

//运算符数组

charOP[7]={'+','-','*','/','(',')','#'};

//数据结构体

typedefstruct

{

doubledata[50];

inttop;

}OPND_Stack;

//运算符结构体

typedefstruct

{

chardata[50];

inttop;

}OPTR_Stack;

//初始化运算符栈函数

voidInitStack_R(OPTR_Stack*a)

{

a->top=-1;

}

//初始化数据站函数

voidInitStack_D(OPND_Stack*a)

{

a->top=-1;

}

//运算符进栈函数

voidPush_R(OPTR_Stack*a,charb)

{

a->top++;

a->data[a->top]=b;

}

//数据进栈函数

voidPush_D(OPND_Stack*a,doubleb)

{

a->top++;

a->data[a->top]=b;

}

//取运算符栈顶符函数

voidGetTop_R(OPTR_Stack*a,char*b)

{

*b=a->data[a->top];

}

//取数据栈顶数函数

voidGetTop_D(OPND_Stack*a,double*b)

{

*b=a->data[a->top];

}

//判断数据是否为运算符函数

intIn(chara,char*s)

{

for(inti=0;i<7;i++)

if(a==s[i])

return1;

return0;

}

//算符优先级判断函数

charPrecede(chara,charb)

{

intm,n;

for(inti=0;i<7;i++)

{

if(a==OP[i])

m=i;

if(b==OP[i])

n=i;

}

returnFirst[m][n];

}

//删除运算符栈顶元素,并取新栈的栈顶元素

voidPop_R(OPTR_Stack*a,char*b)

{

a->top--;

*b=a->data[a->top];

}

//取数据站的栈顶元素,并从栈中删除此元素

voidPop_D(OPND_Stack*a,double*b)

{

*b=a->data[a->top];

a->top--;

}

//二元运算函数

doubleOperate(doublea,chartheta,doubleb)

{

switch(theta)

{

case'+':

returna+b;

case'-':

returna-b;

case'*':

returna*b;

case'/':

returna/b;

default:

return0;

}

}

//将字符串转换成浮点型数据

doubleGetdouble(char*a,int*b)

{

doublex;chars[50];

intm=0,n;

n=strlen(a);

for(inti=*b;i

if(In(a[i],OP)==1)

{

m=i;break;

}

for(i=*b;i

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;

strcat(s,"#");

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'<':

Push_R(&OPTR,s[k]);

k++;

break;

case'=':

Pop_R(&OPTR,&ch);

k++;

break;

case'>':

GetTop_R(&OPTR,&theta);Pop_R(&OPTR,&ch);

Pop_D(&OPND,&b);Pop_D(&OPND,&a);

Push_D(&OPND,Operate(a,theta,b));

break;

}

}

GetTop_R(&OPTR,&ch);

}

GetTop_D(&OPND,&x);

returnx;

InitStack_R(&OPTR);Push_R(&OPTR,'#');

InitStack_D(&OPND);

}

//判断表达式是否输入正确.

intCan(chara[],intn)

{

intp=0,s=0,t=0;

for(inti=0;i

{

if(a[i]=='('||a[i]==')')

p++;

if((a[i]=='+'||a[i]=='-'||a[i]=='*'||a[i]=='/')&&((a[i+1]<'0'&&a[i+1]!

='(')||a[i+1]>'9'))

s++;

if(a[i]=='/'&&a[i+1]=='0')

s++;

if((a[i]=='('&&(a[i]=='+'||a[i]=='-'||a[i]=='*'||a[i]=='/'))||(a[i]==')'&&a[i+1]=='('))

s++;

if(a[i]==')'&&a[i+1]!

='\0'&&(a[i+1]!

='+'&&a[i+1]!

='-'&&a[i+1]!

='*'&&a[i+1]!

='/'))

s++;

if(a[i]=='.'&&a[i+1]=='.')

s++;

}

if(p%2==0&&s==0)

return0;

return1;

}

//负数转换函数

voidTranslate(char*s)

{

charb[80];intk,t;

if(s[0]=='-')

{

b[0]='0';

b[1]='\0';

strcat(b,s);

strcpy(s,b);

}

t=strlen(s);

k=t;

for(inti=0;i

{

if(s[i]=='('&&s[i+1]=='-')

{

k=i+1;

for(intj=t;j>=k;j--)

s[j]=s[j-1];

s[k]='0';

s[t+1]='\0';

}

t=strlen(s);

k=t;

}

}

//主函数

voidmain()

{

chara[80];intm;charb[80];

printf("============简易计算器============\n");

printf("[四则运算.如:

-1+(2+3)*9/(-2)-6].\n请输入一个表达式:

\n");

while

(1)

{

gets(a);

strcpy(b,a);

Translate(a);

while

(1)

{

intp;

m=strlen(a);

p=Can(a,m);

if(p==0)break;

printf("输入错误.请从新输入表达式:

\n");

gets(a);

strcpy(b,a);

Translate(a);

}

printf("=*=*=*=*=*=*表达式结果=*=*=*=*=*=*\n");

printf("该表达式的结果为:

\n%s=%-10.3lf\n",b,EvaluateExpression(a));

printf("=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");

printf("继续使用[四则运算.如:

-1+(2+3)*9/(-2)-6].<关闭退出>.\n请再输入一个表达式:

\n");

}

}

运算结果:

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

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2