Mod
This presentation is the property of its rightful owner.
Sponsored Links
1 / 24

Mod 运算 符号与被除数同 Div 运算 符号 与分子分母同时有关系 PowerPoint PPT Presentation


  • 71 Views
  • Uploaded on
  • Presentation posted in: General

Mod 运算 符号与被除数同 Div 运算 符号 与分子分母同时有关系. -9 mod 2=-1 mod -1=1 -9 div 2 =-4 9 div -1 =-4. 6. 7. Maxsize-1. 5. 0. 4. 1. rear. front. 3. 2. program dw; var a:array[0..7] of integer; f,r,i,x,t,j:integer; begin f:=0;r:=0; for i:=1 to 15 do begin

Download Presentation

Mod 运算 符号与被除数同 Div 运算 符号 与分子分母同时有关系

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Mod div

Mod 运算 符号与被除数同

Div 运算 符号 与分子分母同时有关系

  • -9 mod 2=-1

  • mod -1=1

  • -9 div 2 =-4

  • 9 div -1 =-4


Mod div

6

7

Maxsize-1

5

0

4

1

rear

front

3

2

program dw;

var a:array[0..7] of integer;

f,r,i,x,t,j:integer;

begin

f:=0;r:=0;

for i:=1 to 15 do

begin

read(x);

if x<>-1 then begin inc(r);a[r mod 8]:=x end

else inc(f);

end;

for i:=f+1 to r do

begin

j:=i mod 8;

write(a[j]);

inc(t);

end;

writeln;

writeln(t);

writeln(r);

writeln(f);

end.

演示


Mod div

表达式

算术表达式

关系表达式

逻辑表达式

值为布尔型,true false

1>3

(1>3) or (5=5)


Mod div

三、栈的主要运算

(1)栈的初始化操作(栈置空)

top:=0

(2)判断栈空函数

function sempty(stack:arraytype):boolean;

begin

sempty:=(top=0);

end;

(3)判断栈满函数

function sfull(stack:arraytype):boolean;

begin

sfull:=(top=n);

end;


Mod div

三、栈的主要运算

sfull(stack)=true

(4)进栈的操作过程(压栈push)

procedure push(x:integer);

begin

if sfull(stack)

then writeln(‘Stack full!’)

else

begin

top:=top+1; stack[top]:= x;

end;

end;


Mod div

表达式变换

栈的应用之一


Mod div

历届初赛题(选)

(9tg)表达式(1+34)*5-56/7的后缀表达式为( )

A. 1+34*5-56/7 B . -*+1 34 5/56 7

C. 1 34+5*56 7/-D. 1 34 5*+56 7/-

E. 1 34+5 567-*/


Mod div

表达式

中缀表达式(Infix Notation)就是常用的将操作符放在操作数中间的算术表达式。比如1-(2+3)

前缀表达式(Prefix Notation)是指将运算符写在前面,操作数写在后面的不包含括号的表达式,而且为了纪念其发明者波兰数学家Jan Lukasiewicz所以前缀表达式也叫做“波兰表达式”。比如- 1 + 2 3

后缀表达式(Postfix Notation)与之相反,是指运算符写在操作数后面的不含括号的算术表达式,也叫做逆波兰表达式。比如1 2 3 + -


Mod div

中缀式到其他式子的转换方法

a+b*c-(d+e)

第一步:按照运算符的优先级对所有的运算单位加括号~

式子变成拉:((a+(b*c))-(d+e))

第二步:转换前缀与后缀表达式

前缀:把运算符号移动到对应的括号前面

则变成拉:-( +(a *(bc)) +(de))

把括号去掉:-+a*bc+de 前缀式子出现

后缀:把运算符号移动到对应的括号后面

则变成拉:((a(bc)* )- (de)+ )-

把括号去掉:abc*-de+- 后缀式子出现

发现没有,前缀式,后缀式是不需要用括号来进行优先级的确定的。


Mod div

请你试一试

  • 将下列中缀表达式转换成后缀表达式:

16-9*(4+3)

2*(x+y)/(1-x)

(25+8)*(4*(4+7)+7)

16□9□4□3□+*-

2□x□y□+*1□x□-/

25□8□+4□4□7□+*7□+*


Mod div

历届初赛题(选)

(9tg)表达式(1+34)*5-56/7的后缀表达式为( )

A. 1+34*5-56/7 B . -*+1 34 5/56 7

C. 1 34+5*56 7/-D. 1 34 5*+56 7/-

E. 1 34+5 567-*/


Mod div

top

top

top

(25+8)*(4*(4+7)+7)

25 8 + 4 4 7 + * 7 + *

33

8

25


Mod div

用pascal求后缀表达式的值。

【问题描述】根据后缀算术表达式计算其值,注意相邻的数值型数据间用空格隔开,数据与运算符间也用空格隔开,[email protected],并对第三位四舍五入。

如35 6 [email protected]

【输入】 [email protected]

【输出】结果

【样例】

输入36 57 /@

输出0.63

①建立一个栈,放操作数

②从左到右读入表达式,若为数,则将它转换为数值后入栈;若为运算符,则从栈中弹出两个数计算,并将结果入栈。

③若表达式未读完,就重复②。

④最后栈顶的数值(栈中应只剩栈顶元素)则为结果。


Mod div

program track;

var t1:array[1..10000] of real;

top:integer; ch:char; st:string; f:boolean;

x:real;

begin

ch:=''; top:=0; f:=false;

while ch<>'@' do

begin

st:=''; read(ch);

while (ch in ['0'..'9','.']) do

begin f:=true; st:=st+ch; read(ch);

end;

if f then

begin inc(top); val(st,x); t1[top]:=x; f:=false; end;

if ch in ['+','-','*','/'] then

begin

case ch of

'+':t1[top-1]:=t1[top-1]+t1[top];

'-':t1[top-1]:=t1[top-1]-t1[top];

'*':t1[top-1]:=t1[top-1]*t1[top];

'/':t1[top-1]:=t1[top-1] / t1[top];

end;

dec(top);

end;

end;

write(round(t1[1]*100)/100:0:2);

end.

16 4.5 + 5 /@

25 8 + 4 4 7 + * 7 + *@


Mod div

栈的应用二

程序员输入问题:程序员输入程序,出现差错时可以采取以下的补救措施:敲错了一个键时,可以补敲一个退格符“#”,以表示前一个字符无效;发现当前一行有错,可以敲入一个退行符“@”,以表示“@”与前一个换行符之间的字符全部无效。

如:在终端上输入了这样两行字符

PRKJ##OGRAN#MLX;

VAR@CONSTN:#=10;

则实际有效的是:

PROGRAMLX;

CONSTN=10;


Mod div

【分析】通过栈操作模拟程序员的输入过程;

逐行处理,处理完一行以后输出结果,栈置空;

某行内逐字读入数据,对每个读入的字符进行如下操作:

既不是退格符#也不是退行符@,则将该字符插入栈顶;

是退格符#,则从栈顶删去一个字符;

是退行符@ ,就把字符栈清为空栈。

PRKJ##OGRAN#MLX;

VAR@CONSTN:#=10;

PROGRAMLX;

CONSTN=10;


Mod div

{栈}

PRKJ##OGRAN#MLX;

VAR@CONSTN:#=10;

{栈指针}

【数据结构】

type stack=array[1..100] of char;

Var s:stack;

top:0..100;

ch:char; i:integer;

procedure setnull(var s:stack); {置栈为空}

begin

top:=0

end;

procedure pop(var s:stack); {出栈}

begin

if top=0 then writeln(‘underflow’)

else top:=top -1;

end;

procedure push(var s:stack;x:char); {入栈}

begin

if top=100 then writeln(‘overflow’)

else begin top:=top+1;s[top]:=x; end;

end;


Mod div

{eof函数,判断文件是否结束}

begin{主程序}

assign(input,’program.in’);reset(input);

assign(output,’program.out’);rewrite(output);

while not eof do

begin

setnull(s);

while not eoln do

begin

read(ch);

case ch of

‘#’:pop(s);

[email protected]:setnull(s)

else push(s,ch)

end;

end;

for i:=1 to top do write(s[i]);

writeln;

read(ch);

end ;

close(input);close(output);

end.

{eoln函数,判断一行是否结束}

{出栈}

{置栈为空}

PRKJ##OGRAN#MLX;

VAR@CONSTN:#=10;

{入栈}

{输出}

PROGRAMLX;

CONSTN=10;


Mod div

  • 2010tgdx1.元素R1、R2、R3、R4、R5入栈的顺序为R1、R2、R3、R4、R5。如果第1个出栈的是R3,那么第5个出栈的可能是(ACD )。A.R1         B.R2         C.R4         D.R5

  • 2008tg6.设栈S的初始状态为空,元素a,b,c,d,e,f依次入栈,出栈顺序为b,d,c,f,e,a那么栈容量至少应该是(D)。A.6 B.5 C.4 D.3 E.2

  • 3. 2007tg 7. 地面上有标号为A、B、C的3根细柱, 在A柱上放有10个直径相同中间有孔的圆盘, 从上到下次依次编号为1, 2, 3, ……,将A柱上的部分盘子经过B柱移入C柱, 也可以在B柱上暂存。如果B柱上的操作记录为:“进,进,出,进,进,出,出,进,进,出,进,出,出”。那么, 在C柱上, 从下到上的盘子的编号为( D )。A. 2 4 3 6 5 7 B. 2 4 1 2 5 7 C. 2 4 3 1 7 6

  • D. 2 4 3 6 7 5 E. 2 1 4 3 7 5


Mod div

(8tg)设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5,e6依次通过钱S,一个元素出栈后即进入队列Q,若出队的顺序为e2,e4,e3,e6,e5,e1,则钱S的容量至少应该为( ) 。A) 2 B) 3 C) 4 D) 5

(9tg_多项)已知元素(8,25,14,87,5l,90,6,19,20),问这些元素以怎样的顺序进入栈,才能使出栈的顺序满足:8在5l前面;90在87后面;20在14后面;25在6前面;19在90后面。 ( )

A)20,6,8,51,90,25,14,19,87

B)51,6,19,20,14,8,87,90,25

C)19,20,90,7,6,25,5l,14,87

D)6,25,51,8,20,19,90,87,14

E)25,6,8,51,87,90,19,14,20

(13tg)地面上有标号为A、B、C的三根柱,在A柱上放有10个直径相同中间有孔的圆盘,从上到下依次编号为1,2,3……,将A柱上的部分盘子经过B柱移入C柱,也可以在B柱上暂存。如果B柱上的操作记录为“进、进、出、进、进、出、出、进、进、出、进、出、出”。那么,在C柱上,从下到上的编号为( )。

A.2 4 3 6 5 7 B.2 4 1 2 5 7 C.2 4 3 1 7 6 D.2 4 3 6 7 5

历届初比赛题(选)

B

D

D


Mod div

(11tg_多项)设栈S的初始状态为空,元素a, b, c, d, e, f, g依次入栈,以下出栈序列不可能出现的有( )。

A. a, b, c, e, d, f, g B. b, c, a, f, e, g, d C. a, e, c, b, d, f, g

D. d, c, f, e, b, a, g E. g, e, f, d, c, b, a

(12tg_多项)设栈S的初始状态为空,元素a, b, c, d, e 依次入栈,以下出栈序列不可能出现的有( )。

A. a, b, c, e, d B. b, c, a, e, d

C. a, e, c, b, d D. d, c, e, b, a

(12tg ) 某个车站呈狭长形,宽度只能容下一台车,并且只有一个出入口。已知某时刻该车站状态为空,从这一时刻开始的出入记录为:“进,出,进,进,进,出,出,进,进,进,出,出”。假设车辆入站的顺序为1,2,3,……,则车辆出站的顺序为( )。 A. 1, 2, 3, 4, 5 B. 1, 2, 4, 5, 7 C. 1, 4, 3, 7, 6 D. 1, 4, 3, 7, 2 E. 1, 4, 3, 7, 5

C E

C

C

有一定规律,分段有序


Mod div

如下图,有一个无穷大的的栈S,在栈的右边排列着1,2,3,4,5共五个车厢。其中每个车厢可以向左行走,也可以进入栈S让后面的车厢通过。现已知第一个到达出口的是3号车厢,请写出所有可能的到达出口的车厢排列总数(不必给出每种排列)。

解答:9

分别为:32145、32154、32415、32451、32541、34215、34251、34521、35421;


Mod div

将中缀表达式转化为后缀表达式的算法:

  要将中缀表达式转化为等价的后缀表达式,须从左至右扫描中缀表达式,并用一个栈存放中缀表达式的“(”和暂时不能参与计算的运算符。

1、当读到数字直接送至后缀表达式中2、当读到运算符t时,a.将栈中所有优先级高于或等于t的运算符弹出,送到后缀表达式中; b.t进栈3、读到左括号时总是将它压入栈中4、读到右括号时,将靠近栈顶的第一个左括号上面的运算符全部依次弹出,送至后缀表达式后,再丢弃左括号。

5、中缀表达式读完后,若栈中还有运算符,则将栈中运算符全部依次弹出,送至后缀表达式。


Mod div

输出队列

中缀转后缀过程

6

9

4

3

+

*

-

5

+

#

6 9 4 3 +*-5 +

6-9*(4+3)+5#

如果运算优先级大于栈顶元素直接进栈

如果运算优先级小于或等于栈顶元素,则先弹出栈顶元素,再进栈

左括号直接进栈

右括号则依次弹出栈中的元素,直到遇到第一个左括号为止。

+ 1

( 0

* 2

- 1

+ 1

+ 1

# -1


  • Login