1 / 24

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

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

ramiro
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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Mod 运算 符号与被除数同 Div 运算 符号 与分子分母同时有关系 • -9 mod 2=-1 • mod -1=1 • -9 div 2 =-4 • 9 div -1 =-4

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

  3. 表达式 算术表达式 关系表达式 逻辑表达式 值为布尔型,true false 1>3 (1>3) or (5=5)

  4. 三、栈的主要运算 (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;

  5. 三、栈的主要运算 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;

  6. 表达式变换 栈的应用之一

  7. 历届初赛题(选) (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-*/

  8. 表达式 中缀表达式(Infix Notation)就是常用的将操作符放在操作数中间的算术表达式。比如1-(2+3) 前缀表达式(Prefix Notation)是指将运算符写在前面,操作数写在后面的不包含括号的表达式,而且为了纪念其发明者波兰数学家Jan Lukasiewicz所以前缀表达式也叫做“波兰表达式”。比如- 1 + 2 3 后缀表达式(Postfix Notation)与之相反,是指运算符写在操作数后面的不含括号的算术表达式,也叫做逆波兰表达式。比如1 2 3 + -

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

  10. 请你试一试 • 将下列中缀表达式转换成后缀表达式: 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□+*

  11. 历届初赛题(选) (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-*/

  12. top top top (25+8)*(4*(4+7)+7) 25 8 + 4 4 7 + * 7 + * 33 8 25

  13. 用pascal求后缀表达式的值。 【问题描述】根据后缀算术表达式计算其值,注意相邻的数值型数据间用空格隔开,数据与运算符间也用空格隔开,表达式以@结束。计算的值保留两位小数,并对第三位四舍五入。 如35 6 +@其值输出为41。 【输入】 输入一行以@结束的表达式 【输出】结果 【样例】 输入36 57 /@ 输出0.63 ①建立一个栈,放操作数 ②从左到右读入表达式,若为数,则将它转换为数值后入栈;若为运算符,则从栈中弹出两个数计算,并将结果入栈。 ③若表达式未读完,就重复②。 ④最后栈顶的数值(栈中应只剩栈顶元素)则为结果。

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

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

  16. 【分析】通过栈操作模拟程序员的输入过程; 逐行处理,处理完一行以后输出结果,栈置空; 某行内逐字读入数据,对每个读入的字符进行如下操作: 既不是退格符#也不是退行符@,则将该字符插入栈顶; 是退格符#,则从栈顶删去一个字符; 是退行符@ ,就把字符栈清为空栈。 PRKJ##OGRAN#MLX; VAR@CONSTN:#=10; PROGRAMLX; CONSTN=10;

  17. {栈} 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;

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

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

  20. (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

  21. (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 有一定规律,分段有序

  22. 如下图,有一个无穷大的的栈S,在栈的右边排列着1,2,3,4,5共五个车厢。其中每个车厢可以向左行走,也可以进入栈S让后面的车厢通过。现已知第一个到达出口的是3号车厢,请写出所有可能的到达出口的车厢排列总数(不必给出每种排列)。如下图,有一个无穷大的的栈S,在栈的右边排列着1,2,3,4,5共五个车厢。其中每个车厢可以向左行走,也可以进入栈S让后面的车厢通过。现已知第一个到达出口的是3号车厢,请写出所有可能的到达出口的车厢排列总数(不必给出每种排列)。 解答:9 分别为:32145、32154、32415、32451、32541、34215、34251、34521、35421;

  23. 将中缀表达式转化为后缀表达式的算法:   要将中缀表达式转化为等价的后缀表达式,须从左至右扫描中缀表达式,并用一个栈存放中缀表达式的“(”和暂时不能参与计算的运算符。 1、当读到数字直接送至后缀表达式中2、当读到运算符t时,a.将栈中所有优先级高于或等于t的运算符弹出,送到后缀表达式中; b.t进栈3、读到左括号时总是将它压入栈中4、读到右括号时,将靠近栈顶的第一个左括号上面的运算符全部依次弹出,送至后缀表达式后,再丢弃左括号。 5、中缀表达式读完后,若栈中还有运算符,则将栈中运算符全部依次弹出,送至后缀表达式。

  24. 输出队列 中缀转后缀过程 6 9 4 3 + * - 5 + # 6 9 4 3 +*-5 + 6-9*(4+3)+5# 如果运算优先级大于栈顶元素直接进栈 如果运算优先级小于或等于栈顶元素,则先弹出栈顶元素,再进栈 左括号直接进栈 右括号则依次弹出栈中的元素,直到遇到第一个左括号为止。 + 1 ( 0 * 2 - 1 + 1 + 1 # -1

More Related