信息学编程基础培训第一篇.docx
- 文档编号:30652822
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:33
- 大小:118.21KB
信息学编程基础培训第一篇.docx
《信息学编程基础培训第一篇.docx》由会员分享,可在线阅读,更多相关《信息学编程基础培训第一篇.docx(33页珍藏版)》请在冰豆网上搜索。
信息学编程基础培训第一篇
信息学编程基础培训
第一篇程序的体验与入门
一、体验感知计算机程序的功能和奥妙
【例1】百元买百鸡问题:
公鸡3元/只,母鸡5元/只,小鸡1元/3只,请问如果用100元钱刚好买100只鸡,应该如何买(简单计算问题)
【例2】计算从三角形中能切割出多少个正方形?
(推理计算问题)
一等腰直角三角形,腰长为a,从三角形中依次分离出面积为(a/2)2、(a/4)2、(a/8)2,……的正方形,直到剩余的面积等于或小于原面积的10%为止,问至少可以分离出多少个正方形?
(答案15个)
【例3】求豆子下落到各档内的概率问题?
(随机计算问题)
有一个容器,入口处为一个通道,经过一个菱形隔板后变成两个通道,再经过两个菱形隔板后又变成三个通道。
依此类推,最底层为七个格子,将豆子从容器中的入口处一粒一粒落下,豆子每经过一个隔板,向左向右下落的机会均等,试分析豆子落入最底层每格的概率是多少?
(正态分布)
【例4】计算通讯员所跑路程问题(计算问题)
一次演习,A、B两队约好同一时间从相距100公里的各自驻地出发相向运动,A队速度为5-10公里/小时,B队为4-8公里/小时,通讯员骑车从A队驻地也在同一时间为行进中的两队传递消息,骑车速度为30-60公里/小时,往返于两队之间,当两队相距0.5公里时,通讯员停下,请计算他共跑了多少趟?
分析:
输入s,va,vb,vm,输出通讯员跑了多少趟(从一队驶向另一队叫一趟),s——A.B两队之间的距离,初值为两地的距离;va,vb,vm——A队,B队和摩托车的行进速度;j——通讯员所跑的趟数;t—当前一趟摩托车的费时;i——通讯员往返于两队的标志。
通讯员从A队折回驶向B队相遇时,满足s-vb*t=vm*t.即t=vmvbs+;i=-1,通讯员从B队折回驶向A队相遇时,满足s-va*t=vm*t.即t=vmvas+;由上式可以看出,由于t为除法运算的结果,而s的计算过程中有t参与,因此s和t为实数类型。
programtxy;
varva:
5..10;
vb:
4..8;
vm:
30..60;
i,j:
integer;
s,t:
real;
begin
write('s,va,vb,vm=');
readln(s,va,vb,vm);
i:
=1;j:
=0;
repeat
ifi=1thent:
=s/(vb+vm)elset:
=s/(va+vm);
s:
=s-(va+vb)*t;
j:
=j+1;i:
=-i;
untils<=0.5;
writeln('j=',j);
end.
【例5】最优分配问题:
有两个化工厂A、B,A每月生产100吨化肥,B每月生产50吨化肥,它们向C、D两地供应化肥,每地每月需75吨,四个地点之间的距离及吨公里运费见图,如何分配产品才能使运费最少?
【例6】判断开灯关灯问题(推理计算问题)
programkdgd;
var
d:
array[1..100]ofinteger;
i,j,k:
integer;
begin
fori:
=1to100dod[i]:
=0;
fori:
=1to100do
forj:
=ito100do
ifjmodi=0thend[j]:
=1-d[j];
fork:
=1to100do
ifd[k]=1thenwrite(k:
4);
writeln;
end.
有100个人,100盏灯,分别编号从1到100,开始所有灯是灭的,每个人顺序将是自己编号倍数的灯作相反处理,问最后哪些灯还亮着?
【例6】寻找出八皇后问题的所有布局方案(搜索问题)
【例7】算出中国象棋马从棋盘左下角跳到棋盘右上角的各种跳行路线(搜索问题)
二体验Pascal编程
Pascal语言是一种结构化的计算机程序设计语言,易懂易学,非常规范,一般是计算机专业必学语言。
有P语言的基础,学习其它语言非常快,
1认识起动方法及操作界面:
Program程序名;
var变量申明;
begin
程序体;
end。
2Pascal程序的一般形式
从本程序中应体会:
1P程序一般框架
2变量要先说明后使用
3如何给一个变量赋值
4如何设计一个循环
5如何输出一个变量值
6如何累加
【例1】
ProgramLYY1;
varA,s:
integer;
begin
s:
=0;
forA:
=1to100do
s:
=s+A;
writeln(‘s=’,s);
end.
:
求1+2+3+……+100=?
思考:
如果要求1+3+5+……+99=?
,你能编吗?
求1-2+3-4+5+……+99-100=?
呢
【例2】找出100以内能所有能被2、3、5同时整除的数
programxs1;
vara:
integer;
begin
fora:
=1to100do
if(amod2=0)and(amod3=0)and(amod5=0)thenwrite(a:
5);
end.
从本程序应体会:
1判断语句的一般格式:
IF条件THEN命令
2逻辑运算符ANDORNOT的用法
3如何表示一个数能被另一个数整除:
AMODB=0,表示A能被B整除
进一步思考:
如果将本程序中的and换成or,程序的意思会变成什么?
仿照本程序,找出所有能被3整除,但不能被5整除的数
【例3】输入一个两位数,然后让计算机逆序输出这个两位数
programxs2;
vara,b,c,x,y:
integer;
begin
write('Inputx=');read(x);
b:
=xmod10;
a:
=xdiv10;
c:
=a;a:
=b;b:
=c;
y:
=a*10+b;
writeln('y=',y);
end.
从本程序应体会:
1如何说明多个同类型的变量
2如何输入数据
3如何分离一个整数的各位数字
4如何交换两个变量的值
5如何将两个数字合成一个两位的整数
思考1:
如果输入两个以上数据,如何输入?
思考2:
如果要求输入的是三位数,你能修改此程序吗?
从本程序应体会:
1如何产生一个随机数
2如何利用MOD及DIV运算分离整位各位
3如何输出多个变量的值
programp4_11(input,output);
varn,gw,sw,bw:
integer;
begin
randomize;初始化随机数发生器
n:
=100+random(900);产生一个三个的随机整数
gw:
=nmod10;个位
bw:
=ndiv100;百位
sw:
=(n-bw*100)div10;十位
writeln('n=',n,'bw=':
6,bw,'sw=':
6,sw,'gw=':
6,gw);
end.
【例4】随机产生一个三位自然数,分离出它的百位、十位与个位上的数字。
【例5】开灯关灯问题:
100个人,100盏灯,分别编号从1到100,开始所有灯是灭的,每个人顺序将是自己编号倍数的灯作相反处理,问最后哪些灯还亮着?
programkdgd;
var
d:
array[1..100]ofinteger;
i,j,k:
integer;
begin
fori:
=1to100dod[i]:
=0;
fori:
=1to100do
forj:
=ito100do
ifjmodi=0thend[j]:
=1-d[j];
fork:
=1to100do
ifd[k]=1thenwrite(k:
4);
writeln;
end.
从本程序应体会:
1如何定义和使用下标变量(数组)
2如何便用二重循环
3如何表示灯的状态
4如何将灯的状态作相反处理
【例7】某班选班长,设计一个统计选票的程序。
设候选人有三位:
liu,zhang,wang
多路判断
case变量of
值1:
语句1;
值2:
语句2;
……
end;
当型循环
while条件do
……
end;
直到型循环
Repeat
……
until条件
programjp;
varxm:
char;
xp:
string;
lp,zp,wp,i:
integer;
begin
write('Inputxp=');readln(xp);
lp:
=0;zp:
=0;wp:
=0;
i:
=1;
repeat
xm:
=xp[i];
casexmof
'l':
lp:
=lp+1;
'z':
zp:
=zp+1;
'w':
wp:
=wp+1;
end;
i:
=i+1;
untilxm='#';
writeln('total=',i-2);
writeln('liu=',lp);
writeln('zhang=',zp);
writeln('wang=',wp);
end.
从本程序中应学会:
1如何定义字符串及字符型变量
2如何输入字符串
3如何从字符串中分离每个字符
4如何使用多路分支实现多路判断
5如何使用repeat……until循环
6如何统计每人的得票数
思考:
1如果本题条件循环换成当型循环,程序如何改?
2如果
programzzz;
vara:
array[1..10]ofinteger;
max,min,i,t:
integer;
begin
randomize;
fori:
=1to10do
begina[i]:
=trunc(random*900)+100;
write(a[i]:
6);
end;
writeln;
max:
=0;min:
=1000;
fori:
=1to10do
begin
ifa[i]>maxthenmax:
=a[i];
ifa[i] =a[i]; end; writeln('max=',max); writeln('min=',min); end. 从本程序应学会: 1如何产生随机整数 2如何设定最大及最小初值 3如何用循环找出最大及最小 思考: 1如果要产生2位的整数怎么改? 2去掉randomize对程序有何影响? 【例8】随机生成10个三位整数,找出其中最大和最小值。 从本程序应体会: 1如何实现展转相除 2如何保证拿大数被小数除 programgys; varx,r,m,n,a,b: integer; begin write('m=');readln(m); write('n=');readln(n); a: =m;b: =n; ifn>mthen begin x: =m;m: =n;n: =x; end; repeat r: =mmodn; m: =n; n: =r; untilr=0; writeln('GYS=',m); writeln('GBS=',trunc(a*b/m)); end. 【例9】求两个整数的最大公约数和最小公倍数 三Pascal基本程序语句及设计方法小结: 1输入语句: Read(a,b): 读入a,b两个变量的值,注意变量类型与输入数据类型要一致 Readln(xp): 读入一行数据 2计算或赋值语句: A: =100*C+d: 直接计算赋值语句,注意“: =”的写法,等号前不能丢冒号 3输出语句: Write(a,b: 5);: 输出a,b两个变量的值,其中规定b变量的值占5个字符宽度 Writeln(a);: 输出a变量的值,并自动将光标换到下一行 Write(‘a=’,a);: 输出a变量的值,并在值的前面增加提示,显示为a=**** 4判断语句: 简单判断语句: (1)If条件then一个语句; 如: IFcj>60thenwrite(‘考试及格了’); (2)if条件then Begin 多个语句(复合语句); ………… End; 如: ifcj>60then Begin n: =n+1; write(‘考试及格了’); end; 两路分支语句: If条件then语句1else语句2;语句可以是复合语句; 如ifcj>60thenwrite(‘及格了’) Else Write(‘不及格’); 多路分支语句: Case表达式of 值1: 语句1; 值2: 语句2; 值3: 语句3; …… End; 如: Casexmof 'l': lp: =lp+1; 'z': zp: =zp+1; 'w': wp: =wp+1; End; 5循环语句: 三种 (1)计数循环: 按照设定的次数循环 For变量: =循环初值TO循环终值DO 循环体语句; 如: fori: =1to10do begin a[i]: =trunc(random*900)+100; write(a[i]: 6); end; (2)直到型循环: 一直循环,直到给定条件成立时,退出循环 Repeat 循环体语句 until条件 如: repeat r: =mmodn; m: =n; n: =r; untilr=0; (3)当型循环: 当条件成立时,就循环,否则不循环 while条件do 循环体语句; 如: Whilei<=100do begin S: =s+I; I: =I+1; End; =========================================== 6定义变量时常用的数据类型: (1)整数型娈量: integer;这种变量只能用于存放整数-32768~+32768 (2)实数型变量: real;这种变量可用于存放整数或小数-10-38~+10+38 (3)字符型变量: char;这种变量只能用于存放一个字符 (4)字符串变量: string;这种变量可用于存放一串多个字符 (5)布尔型变量: boolean;这种变量只能存放逻辑值fals或true 7基本运算方法: (1)整数累加: s: =s+n; (2)计数: n: =n+1; (3)求余运算: C: =AmodB;要会判断两数能否整除 (4)取整数商: C: =AdivB; (5)交换A和B两变量的值: C: =A;A: =B;B: =C; 8重要的基本运算函数 (1)随机函数: Random(N): 产生一个[0,N)之间的随机整数,使用前必须先用randomize激活随机数发生器 例如begin Randomize …… A: =100+Random(900)产生一个三位的随机整数 (2)取整函数TRUNC(实数变量或表达式): 只截取整数部分 例如: B: =123.56 A: =TRUNC(B); 结果A的值为123 (3)四舍五入取整函数: ROUND(表达式) 例如: A: =ROUND(123.56) 结果A的值为123 (4)平方根函数: SQRT(X): 取X的平方根 (5)正弦和余弦函数: SIN(X)COS(X) 9关于数组的使用 数组就是一组带下标的变量,它与简单变量的区别就是在变量名称后面带有下标,这种下标变量规定必须先定义后使用,下标必须是正整数,且下标值不能超过设定的范围,下标变量的类型与简单变量的类型规定一致。 (1)一维数组: 用于存放一行或一列的线性数据 定义: 数组名array[最小下标,最大下标]of类型; 如: Var Aarray[1..100]ofinteger;定义了A[1],A[2]……A[100] (2)二维数组: 用于存放二维表格形式的数据 定义: 数组名array[行下标范围,列下标范围]of类型; 如: Var Aarray[1..4,1..5]ofinteger;定义了4行5列的二维数组 四第一单元综合练习 【例8】随机产生一个三位自然数,分离出它的百位、十位与个位上的数字。 programp4_11(input,output); varn,gw,sw,bw: integer; begin randomize;初始化随机数发生器 n: =100+random(900);产生一个三个的随机整数 gw: =nmod10;个位 bw: =ndiv100;百位 sw: =(n-bw*100)div10;十位 writeln('n=',n,'bw=': 6,bw,'sw=': 6,sw,'gw=': 6,gw); end. 继续思考: 三位整数abc中,满足条件a3+b3+c3=a*100+b*10+c的数我们称之为水仙花数,如果要找出所有符合这种特性的三位数,你能改进上面这个程序吗? 请改进. programp4_t(input,output); vari,a,b,c: integer; s: longint;长整型,超过整数范围的大整数最好定义为这种类型 begin fori: =100to999do begin a: =idiv100; c: =imod10; b: =(i-a*100)div10; if(a*a*a+b*b*b+c*c*c)=ithenwriteln(i); end; end. 如果进一步换成四位数的情况,你还能继续改进吗? 以下各题请独立设计并验证计算结果 【例9】设计一个邮件计价程序, x= 【例10】任意输入两个数,自动将大者放在max,小者放在min中。 注意: 用if语句编程时,最好用缩进格式。 【例11】任意输入一个数,为正时输出1,为负时输出-1,为0时输出0. 【例12】输入三个数代表三角形的三边,问能否构成直角三角形。 分析提示: 构成三角形的条件: 三边长均>0而且任意两边之和>第三边(and) 构成直角三角形条件: 某两边的平方和等于第三边的平方(or) if能构成三角形then if能构成直角三角形thenwriteln(能构成直角三角形) elsewriteln(能构成三角形,但不是直角三角形) elsewriteln(不能构成三角形); programL12(input,output); vara,b,c: integer; begin write('a,b,c=');read(a,b,c); if(a>0)and(b>0)and(c>0)and(a+b>c)and(b+c>a)and(a+c>b)then if(a*a+b*b=C*c)or(a*a+c*c=b*b)or(b*b+c*c=a*a)then writeln('a=',a: 5,'b=',b: 5,'c=',c: 5,'isRTtriangle') else writeln('a=',a: 5,'b=',b: 5,'c=',c: 5,'isnotRTtriangle') else writeln('a=',a: 5,'b=',b: 5,'c=',c: 5,'isnottriangle'); end. 【例13】现有9个形状质量一样的球,其中只有一个较轻,能否模拟用天平只秤两次就找出这个轻球? 请用判断程序来进行模拟 提示: 分成三堆来秤,每堆三个,利用天平是否平衡来判断轻球在哪边 programL13(input,output); vara: array[1..9]ofinteger; i: integer; begin write('Inputa1a2a3...a9='); fori: =1to9doread(a[i]); if(a[1]+a[2]+a[3]=a[4]+a[5]+a[6])then if(a[7]=a[8])thenwriteln('Itis9') else if(a[8] elsewriteln('Itis7') else if(a[1]+a[2]+a[3] if(a[1]=a[2])thenwriteln('Itis3') else if(a[1] elsewriteln('Itis2') else if(a[4]=a[5])thenwriteln('Itis6') else
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息学 编程 基础 培训 一篇