1 / 38

拆数深入

拆数深入. Pascal 程序形式. Program 程序名(程序参数表); Label 标号说明; Const 常量说明; Type 类型说明; Var 变量说明; Function 函数说明; Procedure 过程说明; Begin 程序语句; …… ; 程序语句; End. 1 、每一个完整语句由分号结束。 2 、 具体程序不一定包括全部说明,但如果出现,必须按这里所指定的前后次序编写 。 3 、程序体不可少,程序体以 END. 结束,且最后一个句号不能漏掉。 4 、 END 前一句语句的分号可有可无,有则编译时多一个空行。.

benjy
Download Presentation

拆数深入

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. 拆数深入

  2. Pascal 程序形式 Program 程序名(程序参数表); Label 标号说明; Const 常量说明; Type 类型说明; Var 变量说明; Function 函数说明; Procedure 过程说明; Begin 程序语句; ……; 程序语句; End. 1、每一个完整语句由分号结束。 2、具体程序不一定包括全部说明,但如果出现,必须按这里所指定的前后次序编写。 3、程序体不可少,程序体以END.结束,且最后一个句号不能漏掉。 4、END前一句语句的分号可有可无,有则编译时多一个空行。 说明部分 程序体

  3. 3^4 试一试 program ls; uses math; begin write(power(3,4):0:0); end. program ls; begin write(exp(4*ln(3))); end. {打开数学库}

  4. 补充 (1) inc(x) 等同 x:=x+1; (2) inc(x, n) 等同 x:=x+n; (3) dec(x) 等同 x:=x-1; (4) dec(x,n) 等同 x:=x-n;

  5. 回顾 位数对调:输入一个三位自然数,把这个数的百位与个位数对调,输出对调后的数。 program exam1; var n,g,s,b:integer; begin read(n); g:=n mod 10; b:=n div 100; s:=n div 10 mod 10; write(g,s,b); end. 参考程序 随机产生三位数,此程序如何调?

  6. Pascal的System单元提供了两个与随机数有关的子程序:Randomize和Random。Pascal的System单元提供了两个与随机数有关的子程序:Randomize和Random。 Randomize过程用于初始化随机种子,其初始值取决于当前的系统时钟。 Random函数用于获取随机数. 它有两种调用形式: Random,返回一个0到1之间(不包括1)的随机实数; Random(N),返回0至N之间(不包括N)的随机整数,N为Word类型整数。 例如:Random(100) 返回[0 100)之间的整数

  7. 随机产生一个三位自然数,分离出百位、十位与个位上的数字随机产生一个三位自然数,分离出百位、十位与个位上的数字 program w_sj; var g,s,b,x:integer; beginrandomize;x:=trunc(random*900)+100;g:=x mod 10;b:=x div 100;s:=(x div 10) mod 10;writeln('x=',x );writeln('b=',b);writeln('s=',s);writeln('g=',g); end. Random(900)+100 [0 900)

  8. 如果输入时是作为字符或字符串,程序如何改?如果输入时是作为字符或字符串,程序如何改?

  9. 三位数翻转 字符串输入 字符输入 program ls; var a,b,c:char; begin read(a,b,c); write(c,b,a); end. program ls; var n,a,b,c:string; begin read(n); a:=copy(n,1,1); b:=copy(n,2,1); c:=copy(n,3,1); write(c,b,a); end.

  10. 思考: • 如果数字不止3位,但知道位数,也就是输入时除了数字信息还有位数信息,程序应当如何改? • 如果不知道数字的位数,用回车或“#”结束,本程序如何改?

  11. program aa; var a,b:longint; begin read(a); writeln('a=',a); repeat b:=a mod 10; a:=a div 10; write(b) until a=0; readln; end. 输入最多几位

  12. 翻转数程序深入-学生程序一 program ls; var n:string;x,i:integer; a:array[1..100] of char; begin read(x); if x<100 then for i:=1 to x do read(a[i]); for i:=x downto 1 do write(a[i]); end. 特别有意思的是看起来正确的程序结果有误,你能知道哪个细节有问题么? read(x);改成readln(x);试试,结果对了没? 为什么呢?

  13. 原来,由于度入的数据类型是字符,回车 、换行都是字符。读完了位数x后光标依然在第一行,然后继续读回车、换行,第3个才读到我们输入的下一行的数字 5 12345 1111111111111111111111111111111111111

  14. 那里错了 program zzw; var x:string; a,w,q:integer; begin read(x); a:=length(x); q:=a; repeat w:=copy(x,q,1); write(w); q:=dec(q); until q=0; end. program zzw; var w,x:string; a, q:integer; begin read(x); a:=length(x); q:=a; repeat w:=copy(x,q,1); write(w); dec(q); until q=0; end.

  15. program asd5; • var x:array[1..100] of char; • a,n:integer; • begin • read(x); • n:=length(x); • for a:=n downto 1 do • write(x[a]); • end.

  16. 一个整型数据用来存放整数。Pascal支持五种预定义整型,它们是shortint(短整型)、 integer(整型)、 longint(长整型)、 byte(字节型)和 word(字类型), Pascal分别用相同的名字作为他们的表识符。每一种类型规定了相应的整数取值范围以及所占用的内存字节数。

  17. 一个实型数据用类存放实数。 Pascal支持五种预定义实型,它们是real(基本实型)、 single(但精度实型)、double(双精度实型)、extended(扩展实型)、comp(装配实型), Pascal分别用相同的名字作为他们的表识符。每一种类型规定了相应的实数取值范围、所占用的内存字节数以及它们所能达到的精度。

  18. 布尔表达式 布尔表达式 then 语句一 语句二 语句 简单的IF语句 一、格式IF <布尔表达式>THEN 语句;IF <布尔表达式>THEN 语句1 ELSE 语句2;    then else

  19. 分支  program ex; var x:real;y:integer; begin wrtie('Input x:');readln(x); if x>0then y:=1{x>0时,y的值为1} else {x≤0时} if x=0then y:=0 else y:=-1; writeln('x=',x:6:2,'y=',y); end.

  20. 此处无符号 IF语句中复合语句用法 IF <布尔表达式>THEN begin 一个语句以上 end; IF <布尔表达式>THEN begin 一个语句以上 end ELSE begin 一个语句以上 end;

  21. case <表达式> of <情况标号表1>:语句1; <情况标号表2>:语句2; : <情况标号表n>:语句n else 语句; end;

  22. var x,y:real; begin write('Input x:');readln(x); case trunc(x/100) of 0:y:=x+1; 1:y:=x-1; else y:=0; end;{end of case} writeln('x=',x:8:2),'y=',y:8:2); end.

  23. 输入两个实数,再输入+、-、* 或 / 号,根据运算符输出这两个数的和、差、积或商。 Program xx; var a,b,s:real; operator:char; begin readln(a,b); read (operator); case operator of '+’: s:=a+b; '-’:s:=a-b; '*’:s:=a*b; '/’:s:=a/b; end; writeln(a,operator,b, '=’,s:5:4) end.

  24. program ex1; var a,b:string; x,y,s:real; begin read(x,a,b,y); case b of '+':s:=x+y; '-':s:=x-y; '*':s:=x*y; '/':s:=x/y; end; write(s:0:2); end.

  25. program ex1; var n,k:integer; l,m,j,a:string; x,y,s:real; begin read(a); n:=length(a); k:=pos('+',a); if k=0 then k:=pos('-',a); if k=0 then k:=pos('*',a); if k=0 then k:=pos('/',a); l:=copy(a,1,k-1); val(l,x); m:=copy(a,k+1,n-k); val(m,y); j:=copy(a,k,1); case j[1] of '+':s:=x+y; '-':s:=x-y; '*':s:=x*y; '/':s:=x/y; end; write(s:0:2); end.

  26. 循环结构 • 循环结构是程序设计的三种基本结构之一 • 对一条或一组语句重复执行多次,以最终完成某项任务。 • 重复循环对象是一条或多条语句,称为循环体。 • pascal有三种循环结构形式: • 计数循环:按己定次数执行循环体 • 当型循环:当条件满足时重复执行循环体 • 直到型循环:反复执行循环体直到条件满足为止

  27. for语句的一般格式 for <控制变量>:=<表达式1> to <表达式2> do <语句>; 递增 for <控制变量>:=<表达式1> downto <表达式2> do <语句>; 递减

  28. for语句(复合) for <控制变量>:=<表达式1> to <表达式2> do begin 一个以上语句; end; for <控制变量>:=<表达式1> downto <表达式2> do begin 一个以上语句; end;

  29. 求100(包括)以内所有数之和 while i<=100 do begin num:=num+i; i:=i+1; end; repeat num:=num+i; i:=i+1; until i>100; for i:=1 to 100 do num:=num+i; 思考:从键盘输入若干数字,对它们求和,直到从键盘读入的数是#时结束 While a<>‘#’ do until a=‘#’

  30. 1、输出1-100之间的所有偶数 2、求s=1+4+7+…+298的值

  31. 题一 编写程序,求100~1000之间能被7整除的数,每行输出10个。

  32. 题二 有个两位数x,将它的个位数字与十位数字对调后得到一个新数y,此时y恰好比x大36,请编程求出所有这样的两位数。 Program ex34; Var x,a,b,y:integer; Begin For x := 10 to 99 do Begin a := x div 10; b := x mod 10; y := b*10+a; if y-x=36 then writeln(x); End; End. 解: ① 用for循环列举出所有的两位数,x为循环变量; ② 用公式a:= x div 10分离出x的十位数字; ③ 用公式b:= x mod 10分离出x的个位数字; ④ 用公式y:= b*10+a合成新数y; ⑤ 用式子y-x=36筛选出符合条件的数x并输出。

  33. 题三(选) 把整数3025从中剪开分为30和25两个数,此时再将这两数之和平方,(30+25)2=3025计算结果又等于原数。求所有符合这样条件的四位数。 解:设符合条件的四位数为N,它应当是一个完全平方数,用(a*a)表示。 ① 为了确保N=(a*a)在四位数(1000~9999)范围内,可确定a在32~99循环; ② 计算N=a*a;将四位数N拆分为两个数n1和n2; ③ 若满足条件(n1+n2)*(n1+n2)=N 就输出 N

  34. program exam35; var n,a, x,n1,n2: integer; begin for a:=32 to 99 do begin n:=a*a; n1:= n div 100; {拆取四位数的前两位数} n2:= n-n1*100; {拆取四位数的后两位数} x:=n1+n2; if x*x=n then writeln (n); end; readln end.

  35. WHILE循环 格式: while <布尔表达式> do <语句>;其意义为:当布尔表达式的值为true时,执行do后面的语句。 While i<=100 do begin num:=num+i; i:=i+1; End;

  36. 应用一 • 输入若干个字符,以“#”为终止字符,统计输入字符中字母“a”出现的次数(包括大写A)。 • 参考程序 program tmp; var ch:char; i:integer; begin i:=0; read(ch); while ch<>'#' do begin if (ch='a') or (ch='A') then i:=i+1; read(ch); end; writeln('i=',i); readln; end.

  37. 应用二 • 求输入一个整数的各位数字之和。 • 分析,求328各位之和可以按下面方法进行 • 首先 328 mod 10得8,328 div 10得32 • 继续32 mod 10得2,32 div 10得3 • 3 mod 10得3,3 div 10为0 • 为了达到循环执行,可以令X=328,然后X逐步赋值缩小为32、3、0 • 参考程序 program tmp; var s,x,t:integer; begin s:=0; readln(x); while x<>0 do begin t:=x mod 10; s:=s+t; x:=x div 10; end; writeln('s=',s); readln; end.

  38. 应用一 • 输入若干个字符,以“#”为终止字符,统计输入字符中字母“a”出现的次数(包括大写A)。 • 参考程序 program tmp; var ch:char; i:integer; begin i:=0; read(ch); while ch<>'#' do begin if (ch='a') or (ch='A') then i:=i+1; read(ch); end; writeln('i=',i); readln; end.

More Related