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

24
Mod 运运 运运运运运运运 Div 运运 运运 运运运运运运运运运运 -9 mod 2=-1 9 mod -1=1 -9 div 2 =-4 9 div -1 =-4

Upload: ramiro

Post on 18-Mar-2016

192 views

Category:

Documents


4 download

DESCRIPTION

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 - PowerPoint PPT Presentation

TRANSCRIPT

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

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

-9 mod 2=-19 mod -1=1-9 div 2 =-49 div -1 =-4

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

Maxsize-1program 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.

0

1

23

4

5

6 7

frontrear

演示

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

表达式

算术表达式 关系表达式逻辑表达式 值为布尔型, true false

1>3

(1>3) or (5=5)

Page 4: 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;

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

三、栈的主要运算( 4 )进栈的操作过程(压栈 push )procedure push(x:integer); begin if sfull(stack) then writeln(‘Stack full!’) else begin top:=top+1; stack[top]:= x ; end ; end;

sfull(stack)=true

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

表达式变换

栈的应用之一

Page 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-* /

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

中缀表达式 (Infix Notation) 就是常用的将操作符放在操作数中间的算术表达式。比如 1- ( 2+3 )前缀表达式 (Prefix Notation) 是指将运算符写在前面,操作数写在后面的不包含括号的表达式,而且为了纪念其发明者波兰数学家 Jan

Lukasiewicz 所以前缀表达式也叫做“波兰表达式”。比如 - 1 + 2 3

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

表达式

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

中缀式到其他式子的转换方法a+b*c-(d+e)第一步:按照运算符的优先级对所有的运算单位加括号 ~ 式子变成拉: ((a+(b*c))-(d+e))第二步:转换前缀与后缀表达式 前缀:把运算符号移动到对应的括号前面 则变成拉: -( +(a *(bc)) +(de)) 把括号去掉: -+a*bc+de 前缀式子出现 后缀:把运算符号移动到对应的括号后面 则变成拉: ((a(bc)* )- (de)+ )- 把括号去掉: abc*-de+- 后缀式子出现发现没有,前缀式,后缀式是不需要用括号来进行优先级的确定的。

Page 10: 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□+*

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

历届初赛题(选)(9tg) 表达式 (1+34)*5-56 / 7 的后缀表达式为 ( ) A. 1+34*5-56 / 7 B . -*+1 34 5 / 56 7C. 1 34+5*56 7 / -   D. 1 34 5*+56 7 / - E. 1 34+5 567-* /

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

25 8 + 4 4 7 + * 7 + *

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

25 8

top

33

toptop

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

用 pascal 求后缀表达式的值。【问题描述】根据后缀算术表达式计算其值,注意相邻的数值型数据间用空格隔开,数据与运算符间也用空格隔开,表达式以 @ 结束。计算的值保留两位小数,并对第三位四舍五入。如 35 6 +@ 其值输出为 41 。【输入 】 输入一行以 @ 结束的表达式【输出】结果【样例】 输入 36 57 /@ 输出 0.63

① 建立一个栈,放操作数② 从左到右读入表达式,若为数,则将它转换为数值后入栈;若为运算符,则从栈中弹出两个数计算,并将结果入栈。③ 若表达式未读完,就重复②。④ 最后栈顶的数值(栈中应只剩栈顶元素)则为结果。

Page 14: 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 + *@

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

栈的应用二程序员输入问题 : 程序员输入程序,出现差错时可以采取以下的补救措施:敲错了一个键时,可以补敲一个退格符“#”,以表示前一个字符无效;发现当前一行有错,可以敲入一个退行符“@”,以表示“@”与前一个换行符之间的字符全部无效。如:在终端上输入了这样两行字符 PRKJ ## OGRAN # M LX ; VAR @ CONST N :#= 10 ;则实际有效的是: PROGRAM LX ; CONST N = 10 ;

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

【分析】通过栈操作模拟程序员的输入过程;逐行处理,处理完一行以后输出结果,栈置空;某行内逐字读入数据,对每个读入的字符进行如下操作:

既不是退格符#也不是退行符@,则将该字符插入栈顶;是退格符#,则从栈顶删去一个字符;是退行符@ ,就把字符栈清为空栈。

PRKJ ## OGRAN # M LX ;VAR @ CONST N :#= 10 ; PROGRAM LX ;

CONST N = 10 ;

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

【数据结构】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 ;

PRKJ ## OGRAN # M LX ;VAR @ CONST N :#= 10 ;

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

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);    ‘@’: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.

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

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

{ 出栈 }{ 置栈为空 }

{ 入栈 }

{ 输出 }

PROGRAM LX ;CONST N = 10 ;

PRKJ ## OGRAN # M LX ;VAR @ CONST N :#= 10 ;

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

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

2. 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

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

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

(9tg_(9tg_ 多项多项 )) 已知元素已知元素 (8(8 ,, 2525 ,, 1414 ,, 8787 ,, 5l5l ,, 9090 ,, 66 ,, 1919 ,, 20)20) ,问这些元素以怎样,问这些元素以怎样的顺序进入栈,才能使出栈的顺序满足:的顺序进入栈,才能使出栈的顺序满足: 88 在在 5l5l 前面;前面; 9090 在在 8787 后面;后面; 2020 在在 1414 后后面;面; 2525 在在 66 前面;前面; 1919 在在 9090 后面。 后面。 ( ) ( )

         A)20A)20 ,, 66 ,, 88 ,, 5151 ,, 9090 ,, 2525 ,, 1414 ,, 1919 ,, 8787

         B)51B)51 ,, 66 ,, 1919 ,, 2020 ,, 1414 ,, 88 ,, 8787 ,, 9090 ,, 2525

         C)19C)19 ,, 2020 ,, 9090 ,, 77 ,, 66 ,, 2525 ,, 5l5l ,, 1414 ,, 8787

         D)6D)6 ,, 2525 ,, 5151 ,, 88 ,, 2020 ,, 1919 ,, 9090 ,, 8787 ,, 1414

         E)25E)25 ,, 66 ,, 88 ,, 5151 ,, 8787 ,, 9090 ,, 1919 ,, 1414 ,, 20 20

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

AA .. 2 4 3 6 5 7 B2 4 3 6 5 7 B .. 2 4 1 2 5 7 C2 4 1 2 5 7 C .. 2 4 3 1 7 6 D2 4 3 1 7 6 D .. 2 4 3 6 7 52 4 3 6 7 5

历届初比赛题 (选 )

B

D

D

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

(11tg_(11tg_ 多项多项 )) 设栈设栈 SS 的初始状态为空,元素的初始状态为空,元素 a, b, c, d, e, f, ga, 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, gA. 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, aD. d, c, f, e, b, a, g E. g, e, f, d, c, b, a

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

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

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

C

C

C E

有一定规律,分段有序

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

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

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

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

将中缀表达式转化为后缀表达式的算法:  要将中缀表达式转化为等价的后缀表达式,须从左至右扫描中缀表达式,并用一个栈存放中缀表达式的“(”和暂时不能参与计算的运算符。 1 、当读到数字直接送至后缀表达式中

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

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

# -1

6

- 1

9

* 2( 0

4

+ 1

3 + * -

+ 1

5 +

+ 1

6 9 4 3 +*-5 +

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

#

输出队列

运算符 优先级# -1

( 0 (直接入栈)+ - 1

* / 2

) 单独处理

中缀转后缀过程

如果运算优先级大于栈顶元素直接进栈如果运算优先级小于或等于栈顶元素,则先弹出栈顶元素,再进栈左括号直接进栈右括号则依次弹出栈中的元素,直到遇到第一个左括号为止。