程序设计初步 一、 顺序结构程序设计 1.输入语句read和readln 功能:从键盘或文件读入数据项,并把它存到变量中去,使该数据能在以后的计算中使用。 输入语句的一般形式为: read(v1,v2,…,vn); readln(v1,v2,…,vn);从键盘逐次读入数据,分别赋给变量v1,v2,…,vn,一次输入多个变量值时,要求数据之间用空格分隔,readln语句要求输入数据后必须回车,使得后继操作从下一行的头上开始。
Slide 2read语句与readln语句区别是: (1) read语句是一个接一个地读数据,在执行完本Read语句( 读完本语句中变量所需的数据)后,下一个读语句接着从该数据输入行中继续读数据,也就是说,不换行。如: Read(a,b); Read(c,d); Read(e); 如果输入数据行如下: 1□2□3□4□5□6□←┘ 则a,b,c,d,e的值分别为1,2,3,4,5,如果后面无读语句则数据6是多余的,这是允许的。
Slide 3Readln则不同,在读完本Readln语句中变量所需的数据后, 该数据行中剩余的数据多余无用,或者说,在读完本Readln语句中变量所需数据后,一定要读到一个回车,否则多余的数据无用。设有下列语句: read(a,b,c); readln(d,e); readln; readln(f); 其中,所有变量均为整型。再设输入的数据如下: 1□2←┘ 3□4□5□6□7□8←┘ 9□10←┘ 11←┘ 结果为:1 2 3 4 5 11
Slide 4(2)readln语句与read语句的第二个区别是: read 后一定要有参数表, readln可以不带参数表,即可以没有任何输入 项, 只是等待读入一个换行符(回车)。 经常用于暂停程序的运行,直到输入 一个回车
Slide 52、输出语句write和writeln 功能:把程序计算的结果,按适当的形式输出到屏幕或文件。 1)、write语句格式Write(表达式1,表达式2,……);如: write(x,5,a+b); write(‘My name is Liping’); 2)、writeln语句格式: Writeln(表达式1,表达式2,……) 或writeln
Slide 6Write语句与writeln语句格式上都相似,但它们在功能上有所不同,两个语句的区别在于: write语句将其后括号中的表达式一个接一个输出后,没有换行。 而writeln语句则在输出各个表达式的值后换行。例如以下两个程序段的输出分别为: write(1,2,3,4); write(5,6); 输出为: 123456 writeln(1,2,3,4); write(5,6); 输出为: 1234 56
Slide 74)实数的输出格式实数(real)以浮点型格式输出。例如805.67对应的浮点数为8.056700000000E+02。这种实数表达方式很不方便。我们可以通过下述形式强迫实数以定点型格式输出: 实数表达式:域宽:小数位数例如,t的值设为63.123。下面三条输出语句分别有它们右边所示的输出格式: write(t); 6.312300000000E+01 write(t:6:2); 63.12 write(t:10:5); 63.12300 输出语句的输出格式: 场宽的分类:标准场宽和自定义场宽。 自定义场宽又分为单场宽和双场宽。 单场宽的形式: x:n; 可以输出的项目有整型、字符型、布尔型,不允许实型。 双场宽的形式: x:n1:n2; 控制实型数据的输出。
Slide 83:复合语句:定义:复合语句是由若干条语句组成的语句序列。形式: begin 语句1; 语句2; ···· 语句n end;用保留字begin和end括起来,构成一条逻辑上的语句,语法上充当一条语句。
Slide 9二、 选择结构程序设计 一:什么是选择结构?选择结构的特点? 二:选择结构的几种语句: 1.if 语句:格式:if 条件 then 语句1; if 条件 then 语句1 else 语句2;功能:执行过程说明:1)该语句为一个语句; 2)条件是一个布尔表达式或一个布尔变量,then 和else后的语句可以是单个语句,当需要多条语句时,用begin和end括起来构成复合语句。 3)灵活运用该语句,条件是关键。
Slide 10补充:逻辑运算及布尔表达式 1、布尔常量: true false const t=true;f=false; 2、 布尔变量: var t,f:Boolean; 顺序型数据false(0),true(1),有ord,succ,pred等函数运算 3、关系表达式:定义;运算符;运算结果 对于数值型数据的比较,直接比较数值的大小如:13>6 的结果为true 对于其它类型数据的比较,则按其序号进行比较如:’a’>=’b’的结果为false 逻辑运算:三个运算符(优先级):not(单目) and(双目) or(双目) 运算结果为布尔型数据:true,false 布尔表达式:由逻辑运算符将几个类型相容且有序的表达式联结起来的式子。 逻辑、算术、关系运算符的运算次序:括号——函数、not——*、/、div、mod、and——+、-、or——>、>=、<、<=、=、<> 例:若a=true,b=false,x=7,y=12,m=3,n=35,求下列布尔表达式的值。 a and not (m>n) and (x
Slide 12【例】:计算下列函数 分析:根据输入的x值,先分成x>0与x≤0两种情况,然后对于情况x≤0,再区分x是小于0,还是等于0。
Slide 13程序代码: program ex; var x:real; y:integer; begin write('input x:');readln(x); if x>0 then y:=1 else if x=0 then y:=0 else y:=-1; writeln('x=',x:6:2,'y=',y); end.
Slide 143.case 语句:分情况语句(多分支语句)格式:case 表达式 of 常数表1:语句1; 常数表2:语句2; ···· 常数表n:语句n; else 语句n+1 end; 功能:执行过程说明:1)end 与case 对应 2)表达式的类型通常是整型、字符型 3)常量表是常量,其类型与表达式的类型要一致。常量表中的常量不能重复。
Slide 15【例】:输入两个数(均不为零)及一个算术运算符,输出其运算的结果程序代码: program ex3(input,output); var x,y,s:real; ch:char; begin writeln(‘input x & y & ch:’); readln(x,y); readln(ch); case ch of ‘+’:s:=x+y; ‘-‘:s:=x-y; ‘*’:s:=x*y; ‘/’:s:=x/y end; writeln(x,ch,y,’=’,s) end.
Slide 16上机练习题 1.求一元二次方程ax2+bx+c=0的根。 算法分析:方程的系数a,b,c决定了方程有无根,是几个根,是实数根还是复根。 2.打印某年某月有几天。 算法分析:可分为以下3种情况: 每年的1,3,5,7,8,10,12这七个月每月为31天; 每年的4,6,9,11这四个月为30天; 2月又分为两种情况:闰年为29天,否则为28天。 判断闰年的条件:年数能被4整除,并且不能被100整除,或者年数能被400整除; (year mod 4=0)and (year mod 100<>0) or (year mod 400=0)
Slide 17第三节 循环结构程序设计 一、什么是循环结构?其特点是什么?二、循环结构的三种形式: 1.for语句:(“计数循环”):就是将规定循环体重复执行的次数。格式:for 控制变量:=初值 to 终值 do 循环体语句; for 控制变量:=初值 downto 终值 do 循环体语句;功能:执行过程说明:1) 初值和终值可以是表达式,控制变量和初值、终值的类型相同,且必须是整型、布尔型和字符型等顺序类型,不能为实型。 2)递增按succ函数规律变化,递减按pred函数规律变化,整型按数值大小变化,如果为字符型量,按ASCII码表的顺序计算。 3)初值和终值在循环之前计算,重复过程中,其值不受影响;不得在循环语句中对控制变量进行赋值。 4)当初值超过终值,不执行循环,循环次数为零。
Slide 18【例1】:计算1+2+3+4+···+100之和。算法分析:对于求和,我们使用的是累加的办法。程序代码: program ex1(input,output); var i,sum:integer; begin sum:=0; for i:=1 to 100 do sum:=sum+I; writeln(‘sum=’,sum) end. 补充说明:类似sum迭加变量这样的功能称为“累加器”;类似i这样的变量称为“计数器”;“计数器”和“累加器”是在程序中经常使用的基本操作语句。
Slide 192.while语句:(“当型循环”):当条件满足时反复执行循环体。格式:while 布尔表达式 do 语句;功能:执行过程:先求布尔表达式的值,值为真时,执行语句;值为假时,退出循环。说明:1)为了while循环能正常终止,布尔表达式中的变量必须在循环体中的某语句中有所改变,即有可能是布尔表达式的值为假,使循环结束,否则将出现死循环。 2)循环体中的语句一般是多条语句,用begin和end使其成为一条复合语句。
Slide 20【例】:输出1~100之间的奇数。程序代码: program ex5(input,output); var x:integer; begin x:=1; while x<100 do begin write(x:5); x:=x+2 end end.
Slide 213.until语句:(“直到型循环”):反复执行循环体直到条件满足为止。格式:repeat 语句1; 语句2; 语句3; ··· 语句n until 布尔表达式;功能:执行过程:先执行指定的语句序列,然后判别表达式。
Slide 22说明:while语句和repeat语句都可以实现循环结构,但它们有四点不同:
Slide 23【例】:输出1~100之间的奇数。(用repeat则应该是)程序代码: program ex5(input,output); var x:integer; begin x:=1; repeat write(x:5); x:=x+2 Until x>=100 end.
Slide 24三、多重循环: 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 4*3=12 4*4=16 ………………………………………….. 9*1=9 9*2=18 9*3=27 ………….. …... 9*9=81 打印出如下的九九表:
Slide 25program jjb(input,output); var i,j:integer; begin for i:=1 to 9 do begin for j:=1 to i do write(i,'*',j,'=',i*j,‘ ':3); writeln; end end.
Slide 26四、转向语句:goto Goto语句并不是循环语句,而是一个无条件的强制跳转语句。格式: goto 语句标号; 1、标号说明通常放在程序说明部分第一个出现,格式如下: label 标号1,标号2……… 标号只起到一个表明位置的作用,它并不改变原语句的功能 标号并不代表实际的行数,标号之间也可不按大小顺序 2、只能从一个语句结构中转出来,不允许从外部转进去例如:求100以内的所有质数
Slide 27program js(input,output); Var n,i,j:integer; begin write('2,'); for i:=3 to 100 do begin n:=2; while i mod n<>0 do n:=n+1; if i=n then write(i,','); end; end.
Slide 28上机练习题 1.编程求出1!+2!+3!+……….+n!的值 2.编程找出四位整数abcd中满足下述关系的数。 (ab+cd)(ab+cd)=abcd 3.已知:faibonacci(费波那契)数列的前几个数分别为0,1,1,2,3,5,···,编程求出此数列的前n项。 4.试编写能打印如下输出图形的程序。########### ######### ####### ##### ### #思考:如果把图形上下颠倒的话,程序应如何修改
Slide 295. (1)求出两个自然数a和b的最大公约数。 (2)求出两个自然数a和b的最小公倍数。 6. 用5元钱买100只纽扣,其中金属纽扣每只5角,有机玻璃纽扣每只一角,小按扣1分钱3个,编程求出各种纽扣各买了多少只? 7.(1)随机产生一个三位自然数,判断这个数是否为水仙花数。 (2)求100~999中的水仙花数。(若三位数abc,abc=a3+b3+c3,则称为水仙花数。如:153,13+53+33=1+125+27=153)
Slide 30program jjb(input,output); var i,n,s,m:integer; begin read(n); s:=0; m:=1; for i:=1 to n do begin m:=m*i; s:=s+m; end; writeln('s=',s); end. 1.编程求出1!+2!+3!+……….+n!的值
Slide 312、【算法分析:这道题属于搜索问题,因为是四位整数,其范围从1000——9999,所求的数究竟在哪里,无法确定,只有在这个范围内从小到大一个一个进行搜索,对每一个数,看它的高两位数与低两位数和的平方是否为该数。高两位数:abcd div 100=ab 低两位数:abcd mod 100=cd 程序代码: program ex4(input,output); var i,m,n,k:integer; begin for i:=1000 to 9999 do begin m:=i div 100; n:=i mod 100; k:=(m+n)*(m+N); If k=i then write(I:8) end end. 补充说明:以上用的方法也叫“枚举法”,又称“穷举法”。它是用计算机解题的一种常用的办法。它的基本思路是:一一枚举各种可能的情况,并判断哪一种可能是符合要求的解。方法虽然很笨,然而与计算机高速的处理能力相结合,也不失为一种较有用的方法
Slide 323.已知:faibonacci(费波那契)数列的前几个数分别为0,1,1,2,3,5,···,编程求出此数列的前n项。 program fbnqsl(input,output); var f1,f2,fn,i,n:integer; begin writeln('input n:'); readln(n); f1:=0; f2:=1; write(f1:6,f2:6); for i:=3 to n do begin fn:=f1+f2; write(fn:6); f1:=f2; f2:=fn; end; end.
Slide 334、########### ######### ####### ##### ### # program ex10(input,output); var i,j,k:integer; begin for i:=6 downto 1 do begin for j:=1 to 6-i do write(‘ ‘); for k:=2*i-1 downto 1 do write(‘#’); writeln end end. # ### ##### ####### #################### program ex10(input,output); var i,j,k:integer; begin for i:=1 to 6 do begin for j:=6-i downto 1 do write(' '); for k:=2*i-1 downto 1 do write('#'); writeln end end.
Slide 345、program fbnqsl(input,output); var m,n,t,r:integer; begin writeln('input m and n:'); readln(m,n); if m
Slide 356、用5元钱买100只纽扣,其中金属纽扣每只5角,有机玻璃纽扣每只一角,小按扣1分钱3个,编程求出各种纽扣各买了多少只? var x,y,z:integer; begin for x:=1 to 10 do for z:=1 to 100 do begin y:=100-x-z; if 50*x+10*y+z/3=500 then writeln(x:4,y:4,z:4); end; end.
Slide 367、program ex9(input,output); var a,b,c:integer; begin for a:=1 to 9 do for b:=0 to 9 do for c:=0 to 9 do if a*a*a+b*b*b+c*c*c=a*100+b*10+c then write(a*100+b*10+c:6); writeln end.
循环结构
by guest102525 | Added: 1 month ago
Language: Chinese | Topic: Nature
4 Views 1 Embeds
Share via email
URL:
Embed: HTML XHTML
For WordPress: Get SlideBoom plugin for WordPress
More by this UserMost ViewedRelated presentations
This user doesn't uploaded any other presenations.
Share via email
(comma-separated)Emails*:
Your name*:
Message:
Refresh
Please enter the characters you see.
Characters are not case sensitive.
Send
* indicates a required field
Share presentation with a group
Group:
Select group
Message:
Post
第一题:
void main()
{
int n,sum;
n=20;
sum=0;
sum=fun(n);
printf("%ld\n",sum);
return;
}
long fun(int n)
{
int i;
long tmp;
i=1;
while(i<=n){
tmp+=i*i;
i++;
}
return tmp;
}
第二题:
void main()
{
int n;
n=1000;
fun(n);
return;
}
void fun(int n)
{
int i,sum,tmp;
for(int i=1;i
sum=0;
while(tmp>0){
sum = sum + (tmp%10)*(tmp%10);
tmp=tmp/10;
}
if(sum==i){
printf("%d\n",i)
}
}
}
long fun1()
{
long sum;
int i;
sum = 0;
for(i=1;i<=20;i++){
sum = sum + i*i;
}
return sum
}
void fun2()
{
int i;
int tmp;
int sum;
for(i=100;i<1000;i++){
tmp=i;
sum=0;
while(tmp>0){
sum = sum + (tmp%10)*(tmp%10);
tmp=tmp/10;
}
if(sum==i){
printf("%d\n",i)
}
}
}
孩子,作业要自己做!