收藏 分享(赏)

第一讲 Pascal语言基础知识.ppt

上传人:eukav 文档编号:6550675 上传时间:2019-04-17 格式:PPT 页数:81 大小:471KB
下载 相关 举报
第一讲 Pascal语言基础知识.ppt_第1页
第1页 / 共81页
第一讲 Pascal语言基础知识.ppt_第2页
第2页 / 共81页
第一讲 Pascal语言基础知识.ppt_第3页
第3页 / 共81页
第一讲 Pascal语言基础知识.ppt_第4页
第4页 / 共81页
第一讲 Pascal语言基础知识.ppt_第5页
第5页 / 共81页
点击查看更多>>
资源描述

1、第一讲 Pascal语言基础,信息学奥赛的内容:程序=计算机语言+数据结构+算法,Free Pascal或delphi C+等,信息学奥林匹克竞赛属于智力与应用计算机解题能力的比赛,题目有相当的难度,解好这类题目,需要具备很强的综合能力 1、观察和分析问题的能力; 2、将实际问题转化为数学模型的能力; 3、灵活地运用各种算法的能力; 4、熟练编写程序并将其调试通过的能力; 5、根据题目的要求,自己设计测试数据,检查自己的解法是否正确、是否完备的能力能够参加信息学竞赛的选手应该具有很强的自学能力,需要学习有关组合数学、图论、基本算法、数据结构、人工智能搜索算法及数学建模等知识,还要学会高级语言和

2、编程技巧,要具备很强的上机操作能力,考察的能力:,选手应具备的条件: 前提:综合成绩突出 1、扎实的数学基础。 2、很强的自学能力。 3、与同学之间的密切友好的合作与交流。 4、持之以恒,坚持不懈的学习。 5、耐得住枯燥与寂寞。 6、不能以参加竞赛为理由而耽误了其他文化课的学习。,程序的基本结构,程序的上机调试和运行,语言基础一,例1:要将一张100元的大钞票,换成等值的10元、5元、2元、1元一张的小钞票,每次换成40张小钞票,每种至少1张。 如,有一种换法: 10元: 9 张 5元: 1 张 2元: 2 张 1元: 1 张 问:一共有多少种换法。,程序的上机调试和运行,program ex

3、1; varx1,x2,x3,x4,n:integer; beginn:=0;for x1:=1 to 10 dofor x2:=1 to 20 dofor x3:=1 to 50 dofor x4:=1 to 100 doif (10*x1+5*x2+2*x3+x4=100)and(x1+x2+x3+x4=40) then n:=n+1;writeln(n); end.,例2 、 已知:s=1+1/2+1/3+1/n 求:使s的值大于10时最小的n。,vars : real;n : integer; begins:=0;n:=0;while s=10 dobeginn:=n+1;s:=s+1

4、/n;end;writeln(n); end.,例3、编一个程序,从键盘输入一个真分数的分子和分母,输出它的小数形式,精确到小数点后1000位。,var n,m,r,q,i:integer; beginread(n,m);r:=n;write(0.);i:=1;while i=1000 dobeginq:=10*r div m;r:=10*r mod m;write(q);i:=i+1;end;end.,上机调试运行步骤:,1、运行: Free Pascal 2、filenew :新建文件 3、compilemake :编译,找错误。 4、run run:运行 5、debugoutput:察看

5、结果,program 程序名;可以省略 var 变量说明; begin 语句; 语句; 语句; end.,Pascal程序的基本结构,程序的基本结构,从这个简单的程序可以看到:一个PASCAL程序分为两个部分:程序首部和程序体。 程序首部程序首部是程序的开头部分,有保留字program后接程序名及程序参数表组成,由分号结束。程序名是用户自己定义的标识符,参数表一般是文件变量名,用于该程序与外界的数据交流。最常用的参数为input和output。在turbo pascal语言中,首部中的参数表可以省略,首部也可省略。 程序体程序体是程序的主体部分,由说明部分和执行部分两部分组成。说明部分:用来描

6、述程序中用到的变量、常量、类型、过程与函数等。本程序中第二行是“变量说明“,用来定义变量的名称、类型。PASCAL规定,凡程序中用到所有变量、符号常量、数组、标号、过程与函数、记录、文件等数据都必须在说明部分进行定义(或称“说明“)。也就是说,不允许未说明先使用。执行部分:以“begin“开始,以“end“结束,其间有若干个语句,语句之间以分号隔开。一条语句执行一定的功能,所有语句完成程序设计的任务。允许一行写多个语句,也允许一个语句写几行,最后一行的end后加一.号表示结束。,2、完整的pascal程序框架:,program 程序名(程序参数表);label标号说明;const 常量说明;t

7、ype类型说明;var变量说明;function函数说明;procedure 过程说明; begin程序语句1;程序语句n; end.,程序首部,程 序 体,说 明 部 分,执 行 部 分,知识预备 基本符号、保留字、标识符 一、变量的定义说明: 二、Pascal数据类型(整型、实型) 三、基本语句(赋值语句、输入语句read、输出语句write) 四、算术运算符和算术表达式 五、标准函数(数值型函数),语言基础一,基本符号、保留字、标识符,1基本符号: 是ASCII字符集,主要有: 26个英文字母(不分大小写,字符串中的字母例外。 十个数字符号。 特殊符号 + - * / = = ( ) :

8、= . , ; : ,2保留字: 保留字是指pascal语言中一些有特殊含义的英文单词,它们已被pascal语言自己使用,都有专门的用途。 Pascal 语言中保留字有36个,可分为以下六种类型: 程序、函数、过程的符号: program,function,procedure 说明部分的专用定义符号: array,const,file,label,packed,var,record,set,type,of 语句专用符号: case,do,downto,else,for,goto,if,repeat,then,to,until,while,with,forward 运算符号: and,div,i

9、n,mod,not,or 分隔符号: begin,end 空指针常量: Nil 7. PROTECTED, PUBLIC, PUBLISHED, TRY, FINALLY, EXCEPT, RAISE (fp新增保留字),3. 标识符:标识符是以字母开头的字母数字序列(大小写等效,可跟下划线_),用来标识常量、变量、程序、函数等。Pascal中允许的标识符的有效长度为63。 标识符分为两大类: 标准标识符:标准常量:false,true,maxint(32767)标准类型:integer,real,char,boolean,text标准文件:input,output标准函数:abs,arcta

10、n,chr,cos,eof,eoln,exp,ln,odd, ord,pred,round,sin,sqr,sqrt,succ,trunc标准过程:get,new,pack,page,put,read,readln,reset,rewrite,unpack,write,writeln 自定义标识符由用户自己在程序首部或说明部分进行定义,但要注意以下几点:不能与保留字同名;避免与标准标识符同名;最好有一定的含义,增加程序的可读性。例如:在程序中如用到数学中的,则在定义该常量时可用PI表示。,一、变量的定义说明: 在程序中用到的所有变量必须事先定义。 格式: Var : ;: ;,如:输入3个整数

11、,求这3个数的平均值。 Var a,b,c:integer;aver:real;,说明: 1)、同一类型的变量可以放在一起,也可分开写,不同类型的不能放在一起。 2)、变量名:可以是一个字母,也可以是多个字母和数字的组合,但字母开头。 3)、不能重复定义变量。,二、Pascal数据类型,整型、实型、(字符型和布尔型),1、整型,类型 数值范围 占字节数Byte 0 255 1Word 065535 2Shortint -128 127 1Integer -3276832767; 2Longint -2147483648 2147483647 4Longword 04294967295 4Int

12、64 -9223372036854775808 9223372036854775807 8QWord 0 18446744073709551615 8,2、实数 类型 范围 有效位数 占用字节Real 2.9e-391.7e38 1112 6 Single 1.5E-45 3.4E38 7-8 4Double 5.0E-324 1.7E308 15-16 8Extended 1.9E-4951 1.1E4932 19-20 10Comp -2E64+1 2E63-1 19-20 8,Varbeginread(a,b);c:=a*b;d:=a/b;writeln(c);writeln(d); E

13、nd.,?,例: 输入:两个整数a、b(=3000),输出它们的乘积c,商d。,实数的定点型格式输出: 实数表达式:域宽:小数位数 T=63.123 write(t); 6.312300000000E+01 write(t:6:2); 63.12 write(t:6:5); 63.12300 如果要求小数点后精确2位小数. Writeln(x:0:2);,a,b:integer; c:longint; d:real;,1、赋值语句 赋值语句是最简单的语句. 1)、赋值语句的格式 变量名:=表达式; 其中“:=”称为赋值号。 2)、执行过程 计算机先计算赋值号右边表达式的值,然后将表达式的值赋给

14、变量名代表的变量。 如:A:=(9*8)-(2-1); A:=A+1,三、基本语句,、输入语句read和readln 功能: 从键盘读入数据项,并把它存到变量中去,使该数据能在以后的计算中使用。 输入语句的一般形式为:read(v1,v2,vn);readln(v1,v2,vn); 从键盘逐次读入数据,分别赋给变量v1,v2,vn,一行输入多个变量值时,要求数据之间用空格分隔,readln语句要求输入数据后必须回车,使得后继操作从下一行的头上开始。,read语句与readln语句区别是:1) read语句是一个接一个地读数据,在执行完本Read语句( 读完本语句中变量所需的数据)后,下一个读语

15、句接着从该数据输入行中继续读数据,也就是说,不换行。如:Read(a,b);Read(c,d);Read(e);如果输入数据行如下:123456 则a,b,c,d,e的值分别为1,2,3,4,5,如果后面无读语句则数据6是多余的,这是允许的。,Readln则不同,在读完本Readln语句中变量所需的数据后, 该数据行中剩余的数据多余无用,或者说,在读完本Readln语句中变量所需数据后,一定要读到一个回车,否则多余的数据无用。 设有下列语句:read(a,b,c);readln(d,e);readln;readln(f,g); 其中,所有变量均为整型。设输入的数据如下:123456789101

16、1 12 13,Var a,b,c,d,e,f,g:integer; beginread(a,b,c);readln(d,e);readln;readln(f,g);writeln(a, ,b, ,c, ,d, ,e, ,f, ,g); end.,2)readln语句与read语句的第二个区别是: read 后一定要有参数表, readln可以不带参数表,即可以没有任何输入项, 只是等待读入一个换行符(回车)。经常用于暂停程序的运行,直到输入一个回车,输出语句write和writeln 功能: 把程序计算的结果,按适当的形式输出到屏幕。 1)、write语句 格式Write(表达式1,表达式2

17、,); 如: write(x,5,a+b); write(My name is Liping); 2)、writeln语句 格式: Write(表达式1,表达式2,) 或writeln,Write语句与writeln语句格式上都相似,但它们在功能上有所不同,两个语句的区别在于:write语句将其后括号中的表达式一个接一个输出后,没有换行。而writeln语句则在输出各个表达式的值后换行。 例如以下两个程序段的输出分别为:write(1,2,3,4);write(5,6);输出为:123456writeln(1,2,3,4);write(5,6);输出为:123456,实数的输出格式 实数(re

18、al)以浮点型格式输出。例如805.67对应的浮点数为8.056700000000E+02。这种实数表达方式很不方便。我们可以通过下述形式强迫实数以定点型格式输出:实数表达式:域宽:小数位数 例如,t的值设为63.123。下面三条输出语句分别有它们右边所示的输出格式:write(t); 6.312300000000E+01write(t:6:2); 63.12write(t:6:5); 63.12300write(t:0:0);,var a,b,t:integer; begin read(a,b); t:=a; a:=b; b:=t; writeln(a=,a,b=,b) end.,例:输入两

19、个整数a,b,交换他们的值,并输出. 如:输入:30 34输出:34 30,四、算术运算符和算术表达式,1.算术运算符 运算符 运算 运算对象 结果类型 + 加 整型、实型 只要有一个运算对象是实型,结果就 - 减 整型、实型 是实型,如果全部的运算对象都是整 * 乘 整型、实型 型并且运算不是除法,则结果为整型 / 除 整型、实型 若运算是除法,则结果是实型。 div 整除 整型 整型 mod 取余 整型 整型,2、表达式 是通过运算符把常量、变量、函数调用结合起来组成的。3+x1+b,上机练习题目: 输入一个3位的正整数,输出他们的各位数字之和与乘积。 如: 输入: 436 输出: 13

20、72,五、标准函数,+ a-b ,算术函数 函数标识符 自变量类型 意 义 结果类型 abs 整型、实型 绝对值 同自变量 sqrt 整型、实型 平方根 实型 int 整型、实型 整数部分 实型exp 整型、实型 指数 实型 ln 整型、实型 自然对数 实型sqr 整型、实型 平方 同自变量cos 整型、实型 余弦 实型 sin 整型、实型 正弦 实型 arctan 整型、实型 反正切 实型 frac 整型、实型 小数部分 实型,abs(-4)=4 abs(-7.49)=7.49 int(-3.71)=-3.0 sqrt(4)=2 Sqr(2)=4,正确的书写表达式:1)、,2)、xy3)、,

21、2,上机练习 1、输入三角形的三条边a,b,c,输出三角形的面积。(a,b,c是正整数100,满足三角形条件),上机练习2,var a,b,t:integer; begin read(a,b); t:=a; a:=b; b:=t; writeln(a=,a,b=,b) end.,例:输入两个整数a,b,交换他们的值,并输出. 如:输入:30 34输出:34 30,上机练习3,输入一个3位的正整数,输出他们的各位数字之和与乘积。 如: 输入: 436 输出: 13 72,程序的三种基本结构,一、顺序结构,二、选择结构 (if 、case),三、循环结构(for、while、repeat),例:输

22、入三角形的三条边a,b,c,输出三角形的面积。(a,b,c是正整数100,满足三角形条件),一、顺序结构,vara,b,c:integer;p,s:real; beginreadln(a,b,c);p:=(a+b+c)/2;s:=sqrt(p*(p-a)*(p-b)*(p-c);writeln(s:0:2); end.,程序从第一句开始,依次顺序执行语句直到结束,中间无分支和循环,这种程序结构称为顺序结构,Readln(a,b,c) 读入边长,求p,求s,输出面积s,流程图,改进:输入三角形的三条边a,b,c, 如果能构成三角形则输出三角形的面积; 如果不能构成三角形则输出”No answer

23、”.,readln(a,b,c) 读入边长,a,b,c能否 构成三角形?,求p,s, 输出面积,输出: No answer,YES,NO,vara,b,c:integer;p,s:real; beginreadln(a,b,c);if (a+bc)and(a+cb)and(b+ca)thenbeginp:=(a+b+c)/2;s:=sqrt(p*(p-a)*(p-b)*(p-c);writeln(s:0:2);endelse writeln(No answer); end.,无“;”,二、 选择结构 1if 语句:功能:执行过程 说明:1)该语句为一个语句;2)条件是一个布尔表达式或一个布尔变

24、量,then 和else后的语句可以是单个语句,当需要多条语句时,用begin和end括起来构成复合语句。3)当布尔表达式的值为真,则执行then后面的语句,值为假时有两种情况:要么什么也不做,要么执行else后面的语句。注意:else前面没有分号.,格式一: if then ;,格式二: if then else ;,逻辑、算术、关系运算符的运算次序: 函数、not 括号 *、/、div、mod、and +、-、or 、=、,补充,例1:输入一个整数,判断他的奇偶性。 (是偶数输出“”,奇数输出“”)。,方法一: Var a:integer; Begin readln(a); If a mo

25、d 2 =0 then writeln(yes) ;if a mod 2 0 then writeln(no); End.,方法二: Var a:integer; Begin readln(a); If a mod 2 =0 then writeln(yes) else writeln(no); End.,无“;”,例2:已知方程: ax2+bx+c=0 输入系数a,b,c,a0,输出方程的解(考虑各种情况)。 保留两位小数。 (1):如果无实数解输出:no answer; (2):相同的实数解:输出一个即可。 (3):两个不同的实数解:分别输出。 如:,输入: 1 3 2 输出: X1=-1

26、.00 X2=-2.00,输入: 2 1 输出: X=-1.00,vara,b,c:integer;d,x1,x2:real; beginreadln(a,b,c);d:=b*b-4*a*c;if d0 then beginx1:=(-b+sqrt(d)/(2*a);x2:=(-b-sqrt(d)/(2*a);writeln(x1=,x1:0:2);writeln(x2=,x2:0:2);end;end.,程序代码: program ex2(input,output):var a,b,c:integer;beginwrite(a,b,c(0):);readln(a,b,c);if (a+bc)

27、 and (a+cb) and (b+ca)thenif (a*a+b*b=c*c) or (a*a+c*c=b*b) or (b*b+c*c=a*a)thenwriteln(a=,a,b=:5,b,c= :5,c, is rt triangle.)elsewriteln(a=,a,b=:5,b,c= :5,c, is not rt triangle.)elsewriteln(a=,a,b= :5,b,c= :5,c, is not triangle.)end.,【例3】:输入三角形的三边,判断它是否是直角三角形。,3case 语句:分情况语句(多分支语句) 格式:case 表达式 of常数表

28、1:语句1;常数表2:语句2;常数表n:语句n;else 语句n+1end; 功能:执行过程 说明:1)end 与case 对应2)表达式的类型通常是整型、字符型3)常量表是常量,其类型与表达式的类型要一致。常量表中的常量不能重复。,【例4】:输入两个数(均不为零)及一个算术运算符,输出其运算的结果 程序代码: program ex3(input,output);var x,y,s:real;ch:char; beginwriteln(input x writeln(x,ch,y,=,s)end.,三、 循环结构,循环结构的三种形式:循环结构程序通常由三种的循环语句来实现。它们分别为FOR循环

29、、当循环while、直到repeat循环。通常将一组重复执行的语句称为循环体,而控制重复执行或终止执行由重复终止条件决定。因此,重复语句是由循环体及重复终止条件两部分组成。,1for语句,1for语句:(“计数循环”):就是将规定循环体重复执行的次数。 格式:for 控制变量:=初值 to 终值 do循环体语句;for 控制变量:=初值 downto 终值 do循环体语句; 2、for语句执行过程先将初值赋给左边的变量(称为循环控制变量);判断循环控制变量的值是否已“超过”终值,如已超过,则跳到步骤;如果末超过终值,则执行do后面的那个语句(称为循环体);循环变量递增(对to)或递减(对dow

30、nt o);返回步骤;循环结束,执行for循环下面的一个语句。 3、说明:1) 初值和终值可以是表达式,控制变量和初值、终值的类型相同,且必须是整型、布尔型和字符型等顺序类型,不能为实型。2)递增按succ函数规律变化,递减按pred函数规律变化,整型按数值大小变化,如果为字符型量,按ASCII码表的顺序计算。3)初值和终值在循环之前计算,重复过程中,其值不受影响;不得在循环语句中对控制变量进行赋值。4)当初值超过终值,不执行循环,循环次数为零。,【例1】:计算1+2+3+4+100之和。 算法分析: 对于求和,我们使用的是累加的办法。 程序代码: program ex1(input,outp

31、ut);vari,sum:integer;beginsum:=0;for i:=1 to 100 dosum:=sum+I;writeln(sum=,sum)end. 补充说明:类似sum迭加变量这样的功能称为“累加器”;类似i这样的变量称为“计数器”;“计数器”和“累加器”是在程序中经常使用的基本操作语句。,【例3】:键入一个自然数,输出其所有约数,计算出这些约数之和并输出。 算法分析:解决这一问题的关键是找出约数,也就是判定一数能否被另一数整除。可以用x mod y=0,来找出所有约数。 程序代码: program ex3(input,output);vari,x,y,sum:intege

32、r;beginwrite(x=);read(x);sum:=0;i:=0;for y:=1 to x doif x mod y=0 then beginwrite(y:8);i:=i+1;if i mod 5=0 then writeln;sum:=sum+yend;writeln(sum=,sum)end.,If 语 句,For语句,If语句作为For语句的循环体,【例4】:编程找出四位整数abcd中满足下述关系的数。(ab+cd)(ab+cd)=abcd 算法分析:这道题属于搜索问题,因为是四位整数,其范围从10009999,所求的数究竟在哪里,无法确定,只有在这个范围内从小到大一个一个进

33、行搜索,对每一个数,看它的高两位数与低两位数和的平方是否为该数。 高两位数:abcd div 100=ab 低两位数:abcd mod 100=cd 程序代码: program ex4(input,output);vari,m,n,k:integer;beginfor i:=1000 to 9999 dobeginm:=i div 100;n:=i mod 100;k:=(m+n)*(m+N);If k=i then write(I:8)endend. 补充说明: 以上用的方法也叫“枚举法”,又称“穷举法”。它是用计算机解题的一种常用的办法。它的基本思路是:一一枚举各种可能的情况,并判断哪一种

34、可能是符合要求的解。方法虽然很笨,然而与计算机高速的处理能力相结合,也不失为一种较有用的方法,2while语句:对于for循环有时也称为计数循环。适合用于事先知道循环次数.当循环次数未知,只能根据某一条件来决定是否进行循环时,用while 语句实现循环要更方便。 (“当型循环”):当条件满足时反复执行循环体。 格式:while 布尔表达式 do 语句; 执行过程:while语句的执行过程为:判断布尔表达式的值,如果其值为真,执行步骤2,否则执行步骤4;执行循环体语句(do后面的语句);返回步骤1;结束循环,执行while的下一个语句。 说明:1)为了是while循环能正常终止,布尔表达式中的变

35、量必须在循环体中的某语句中有所改变,即有可能是布尔表达式的值为假,使循环结束,否则将出现死循环。2)循环体中的语句一般是多条语句,用begin和end使其成为一条复合语句。,【例5】:输出1100之间的奇数。 程序代码: program ex5(input,output); varx:integer; beginx:=1;while x100 dobeginwrite(x:5);x:=x+2end end.,【例6】:输入若干个字符,它的终止符是#,计算输入的字符中a(A)出现的次数。 算法分析: 设计数器i,置初值为0; 出入字符; 当字符不为#时循环:如果字符为a或A,则计数器加1;读入下

36、一个字符; 输出计数器的值,程序结束。 程序代码: program ex6(input,output);varch:char;i:integer; begini:=0;read(ch);while ch# dobeginif (ch=a) or (ch=A)then i:=i+1;read(ch)end;writeln(i=,i) end.,repeat语句:(“直到型循环”):反复执行循环体直到条件满足为止。 格式:repeat语句1;语句2;语句3;语句nuntil 布尔表达式; 功能:执行过程:先执行指定的语句序列,然后判别表达式。,3 repeat语句:(“直到型循环”),说明:whi

37、le语句和repeat语句都可以实现循环结构,但它们有四点不同:,【例7】:将例题6的程序用repeat语句改写。 program ex7(input,output);varch:char;i:integer; begini:=0;repeatread(ch);if (ch=a) or (ch=A)then i:=i+1;until ch=#;writeln(i=,i) end.,【例8】:从n个数中挑出最大的数。 算法分析: 读入n值; 读入第1个数,赋值给变量max; 依次读入后n-1个数,与max比较,若数值大于max,则将此数值赋给max; 输出最大数。 程序代码: program e

38、x8(input,output);varn,m,max,x:integer; beginwriteln(input n:);read(n);writeln(input n nums:);read(max);m:=0;repeatread(x);if xmax then max:=x;m:=m+1until m=n-1;writeln(the max num is:,max) end.,三、多重循环 【例9】:求100999中的水仙花数。(若三位数abc,abc=a3+b3+c3,则称为水仙花数。如:153,13+53+33=1+125+27=153) 算法设计:采用三重循环求解,用for循环。

39、 程序代码: program ex9(input,output);vara,b,c:integer; beginfor a:=1 to 9 dofor b:=0 to 9 dofor c:=0 to 9 doif a*a*a+b*b*b+c*c*c=a*100+b*10+cthen write(a*100+b*10+c:6);writeln end.,【例10】:试编写能打印如下输出图形的程序。 程序代码: program ex10(input,output);vari,j,k:integer; beginfor i:=6 downto 1 dobeginfor j:=1 to 6-i dow

40、rite( );for k:=2*i-1 downto 1 dowrite(#);writelnend end.,本讲要点,Pascal的程序结构 基本符号、保留字、标识符 数据类型、常量、变量及说明方法 函数与表达式 三种基本的程序结构顺序结构分支结构循环结构,请讲例题上机练习,二、循环结构的综合练习,1、陶陶摘苹果(NOIP2009p) (apple.pas/c/cpp) 【问题描述】陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。现在已知10个苹果到地面的高度,

41、以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。,【输入】 第1行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。 第2行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。 【输出】 输出包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。 【样例输入】 110 100 200 150 140 129 134 167 198 200 111 【样例输出】 5,varh

42、,x,sum,i:integer; beginsum:=0;readln(h);h:=h+30;for i:=1 to 10 dobeginread(x);if x=h then inc(sum);end;writeln(sum); end.,2、灯的开关状态有N个灯放成一排,从1到N依次顺序编号,开始时全部打开。有N个人也从1到N依次编号。1号人将灯全部关闭,2号人将凡是编号为2的倍数的灯打开;3号人将凡是编号为3的倍数的灯作相反处理(该灯如为打开的, 则将它关闭;如关闭的,则将它打开)。以后的人都和3号人一样,将凡是自己编号倍数的灯作相反处理。 编程实现:第N个人操作后,按顺序输出灯的状态

43、。(1-表示灯打开,0-表示灯关闭) 输入:n(n=100),灯的个数, 输出:灯的状态,01序列,中间无空格。 样例: 输入:2 输出:01,varn,m,i:integer; beginreadln(n);for i:=1 to n dobeginm:=trunc(sqrt(i);if m*m=i then write(0) else write(1);end; end.,编号i的灯的操作次数等于因数个数,只有完全平方数的因数个数为奇数.所以判断第i个灯的状态:如果i是完全平方数则状态为0,否则为1.,算法分析:,有多少盏灯关闭?,结论:编号为i的灯经过偶数次操作为1,奇数次操作为0.,先

44、分析:编号为4、5、8、15、25、32、36灯最后的状态,3、津津的储蓄计划(NOIP2004T) (save.pas/dpr/c/cpp) 【问题描述】津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。例如11月初津津手中还有83元,妈妈给了津

45、津300元。津津预计11月的花销是180元,那么她就会在妈妈那里存200元,自己留下183元。到了11月月末,津津手中会剩下3元钱。,津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的前,不够这个月的原定预算。如果出现这种情况,津津不得不在这个月省吃俭用,压缩预算。现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到2004年年末,妈妈将津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。 【输入文件】 输入包括12行数据,每行包含一个小于350的非负整数,分别表示1月到12月

46、津津的预算。 【输出文件】 输出一行,这一行只包含一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出-X,X 表示出现这种情况的第一个月;否则输出到2004年年末津津手中会有多少钱。,【样例输入 1】 290 230 280 200 300 170 340 50 90 80 200 60 【样例输出 1】 -7,【样例输入 2】 290 230 280 200 300 170 330 50 90 80 200 60 【样例输出 2】 1580,Const m=300; Var save,left,x,i:integer; beginleft:=0;save:=0;for i:=1 to 12 dobeginread(x);if xm+left thenbegin writeln(-i); exit; end;,if m+left-x=100 thenbeginsave:=save+100*(m+left-x) div 100);left:=(m+left-x) mod 100;endelse left:=m+left-x;end;writeln(1.2*save+left:0:2); end.,

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

当前位置:首页 > 网络科技 > C/C++资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报