一、复习
1、找出下面函数的错误,再考虑这个函数实现了什么功能
Function f(k:integer):real;
Var
N:integer;
Sum:real;
Begin
Sum:=0;
For n:=1 to k do
Sum:=sum+n*n;
End;
二、导入:
提问:现在要实现交换2个变量的值的功能swap(a,b)
指名叙述代码
三、新课
1、函数的功能:返回一个简单值。
2、解释为什么没有交换成功:实参与形参概念的讲解。
3、解决方案:
方案一:引入全局变量——讲解全局变量与局部变量。
方案二:引入“过程”中的变参
——“过程”的定义方法procedure。“过程”没有返回值。
——讲解“值参”与“变参”的概念
4、指出:“过程”也可以使用全局变量,但“函数”不可以使用变参。看下面表格。
| 值参 | 变参 | 全局变量 | 返回值 | |
| 函数 | 可以 | 不可以 | 可以 | 一个 |
| 过程 | 可以 | 可以 | 可以 | 无 |
四、巩固练习(用过程或函数来实现)
1、交换两个变量的值。
2、将数组排序(从小到大、从大到小)
3、求阶乘n! fac
4、求三角形面积
P=(a+b+c)/2
S=sqrt(p*(p-a)*(p-b)*(p-c))
5、将实数X拆分为整数部分n和小数部分p
6、对6~1000内的偶数验证哥德巴赫猜想:任何一个大于6的偶数总可以分解为两个素数之和。
四、快速学习训练:
7、根据公式arctanx(x)=x-x3/3+x5/5-x7/7+···定义函数arctanx(x)
8、根据π=6arctanx(
),求当最后一项小于10-6时π的值。
五、数组练习题
+++++++++++
1、有一组数(设有n个),其排列顺序如下:3,6,11,45,23,70,67,34,26,89,90,15,56,50,20,10。编一程序交换这组数中任意指定的两段不重合数据。
伪代码如下:
Program p7_1_02;
定义常量n=100;
定义数组 sz[1..n];和sz2;
定义变量 a,b,c,d和m;
Begin
给数组长度变量m赋值;
将数组初始化赋值;
读入欲交换的位置a,b,c,d;
将SZ中1到a-1位置上的数写入SZ2;
在数组Sz中c至d的位置上写入数组SZ2;
在数组sz中b+1到c-1位置上写入与SZ相应位置;
在数组SZ中a到b的数中写入SZ2中;
将数组SZ2中d+1到n位置写入一SZ一样的数。
输出 i,SZ,SZ2
End.
2、给定一串整数数列,求出所有的递增和递减子序列的数目。如数列7,2,6,9,8,3,5,2可分为(7,2),(2,6,9),(9,8,3),(3,5),(5,2,1)5个子序列,答案就是5。我们称2,9,3,5为转折元素。
伪代码如下:
Program p7_1_03;
定义一个长度为100的数组;
定义变量i,count,m;
Begin
读入数组长度值m;
将长度为m的数组初始化;
计数变量count初始化为0;
i从2到m-1循环
Begin
假如 当前数为转折元素,则计数变量count加1
End;
输出计数变量count的值
End.
3、将1~9这9个数字分成三组(每个数字只能使用一次),分别组成三个三位数,且这三个三位数的值构成1:2:3的比例,试求出所有满足条件的三个三位数。
伪代码如下:
Program p7_1_04;
定义一个10个数的数组SZ;
定义变量k;
定义循环变量i及表示位置的变量b,s,g
Begin
I从100到333循环
Begin
数组SZ初始化为0;
K为i的1倍数,算出B、S、G,并将数组的相应位置上的数变为1;
K为i的2倍数,算出B、S、G,并将数组的相应位置上的数变为1;
K为i的3倍数,算出B、S、G,并将数组的相应位置上的数变为1;
将数组SZ第1-9位上的数累加,判断是否为9,是则输出i,i*2,i*3;
End;
End.
4、设数组a是一个有n个元素的整数数组,从中找出最大和的子序列。
5、己知数组a中含n个整型元素,求a中有多少个最大数?多少个次大数?······,多少个互不相同的数?编程实现之。