存档在 ‘在线课堂’ 分类

第7章讲课稿第2课修改稿

2010年5月29日

一、复习

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中有多少个最大数?多少个次大数?······,多少个互不相同的数?编程实现之。

数据库的表名不能用user

2010年3月11日

最近一段时间忙着改写“烛影社区”的代码,添加后台功能,使之能产生静态页面,提高访问速度。昨天,加了一个可以添加用户的功能,可是不管怎么调试,数据库里总是空的,真郁闷。为什么会这样呢?

在调试了两个多小时,所有的情况都仔细考虑了,还是没找到问题。因为不知道问题出在哪里,只能在网上漫无边际的浏览。突然,一篇文章的标题引起了我的注意:“ACCESS数据库不能用user作为表名”。我的数据库也是用user作为表名的呀,这是习惯,难道问题就在这里?于是,我将表名改了一下,加一个英文单词,再来调试,一切正常。忙了这么长时间,原来问题源于这些细节。

经验反思:ACCESS数据库有自己的关键词,建表时应努力避开。给数据库的表命名时,应尽量避开一些常用的词,或者将这些词加个前辍、后辍,这样就不会出现上面的错误。

GET与POST方法的区别

2010年3月11日

今天在自己的网站上添加文章,出现了:“错误 ‘80020009′发生意外。 ”。可我的网站之前是完全正常的呀?上网一查,发现有不少人遇到这样的问题,找到一篇文章,贴在下面。这是原贴地址http://blog.csdn.net/somat/archive/2004/10/29/158707.aspx
上篇:get,post数据长度的限制

1. get是从服务器上获取数据,post是向服务器传送数据。
  2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
  3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
  4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
  5. get安全性非常低,post安全性较高。


 
 
HTTP请求:GET与POST方法的区别

HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST。事实上 GET 适用于多数请求,而保留 POST 仅用于更新站点。根据 HTTP 规范,GET 用于信息获取,而且应该是 安全的和幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。幂等的意味着对同一 URL 的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。反之亦然。POST 请求就不那么轻松了。POST 表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该通过 POST 请求实现,因为在注解提交之后站点已经不同了(比方说文章下面出现一条注解);
在FORM提交的时候,如果不指定Method,则默认为GET请求,Form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原样发送,但空格转换为“+“号,其它符号转换为%XX,其中XX为该符号以16进制表示的ASCII(或ISO Latin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;
GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
 
 
 
 
在表单里使用”post”和”get”有什么区别
 
在Form里面,可以使用post也可以使用get。它们都是method的合法取值。但是,post和get方法在使用上至少有两点不同:
1、Get方法通过URL请求来传递用户的输入。Post方法通过另外的形式。
2、Get方式的提交你需要用Request.QueryString来取得变量的值,而Post方式提交时,你必须通过Request.Form来访问提交的内容。

仔细研究下面的代码。你可以运行之来感受一下:

代码
<!–两个Form只有Method属性不同–>
<FORM ACTION=“getpost.asp” METHOD=“get”>
<INPUT TYPE=“text” NAME=“Text” VALUE=“Hello World”></INPUT>
<INPUT TYPE=“submit” VALUE=“Method=Get”></INPUT>
</FORM>
<BR>
<FORM ACTION=“getpost.asp” METHOD=“post”>
<INPUT TYPE=“text” NAME=“Text” VALUE=“Hello World”></INPUT>
<INPUT TYPE=“submit” VALUE=“Method=Post”></INPUT>
</FORM>

<BR>
<BR>

<% If Request.QueryString(“Text”) <> ““ Then %>
通过get方法传递来的字符串是: “<B><%= Request.QueryString(“Text”) %></B>“<BR>
<% End If %>

<% If Request.Form(“Text”) <> ““ Then %>
通过Post方法传递来的字符串是: “<B><%= Request.Form(“Text”) %></B>“<BR>
<% End If %>

说明
把上面的代码保存为getpost.asp,然后运行,首先测试post方法,这时候,浏览器的url并没有什么变化,返回的结果是:
通过Post方法传递来的字符串是: “Hello World”
然后测试用get方法提交,请注意,浏览器的url变成了:

http://localhost/general/form/getpost.asp?Text=Hello+World

而返回的结果是:
通过get方法传递来的字符串是: “Hello World”
最后再通过post方法提交,浏览器的url还是:

http://localhost/general/form/getpost.asp?Text=Hello+World

而返回的结果变成:
通过get方法传递来的字符串是: “Hello World”
通过Post方法传递来的字符串是: “Hello World”

提示
通过get方法提交数据,可能会带来安全性的问题。比如一个登陆页面。当通过get方法提交数据时,用户名和密码将出现在URL上。如果:
1、 登陆页面可以被浏览器缓存;
2、 其他人可以访问客户的这台机器。
那么,别人即可以从浏览器的历史记录中,读取到此客户的账号和密码。所以,在某些情况下,get方法会带来严重的安全性问题。
建议
在Form中,建议使用post方法。

get,post数据长度的限制

2010年3月11日

今天在自己的网站上添加文章,出现了:“错误 ’80020009′发生意外。 ”。可我的网站之前是完全正常的呀?上网一查,发现有不少人遇到这样的问题,找到一篇文章,贴在下面。这是原贴地址http://blog.csdn.net/somat/archive/2004/10/29/158707.aspx
两个长度限制问题的分析(来源于项目)
一、问题起因
在某项目释放后Bug统计的附件《释放后问题》里有:
问题 原因 分析 备注
CSV处理时,如果处理的主题数过多,发生URL参数上限的错误; 可变长度的参数通过URL方式传递,会造成这种潜在的错误发生。 1、属于2次发生问题,开发方面没有及时通过checklist等方式向组员传达相关注意事项;
2、测试时没有作大批量数据的测试; 1、作为经验添加至CheckList中,加强组内共享、检查的效果;
2、加强测试点是否完备的检查,重点关注对开发方面共性问题的测试;
通过对模块原有GUI状况确认,进行CSV输出时,输出结果很大的场合,CSV文件的内容不能输出。 没有考虑到POST数据量存在128K的大小限制。 这属于新问题,以前从未遇见过,也没有进行过大规模的数据量测试 已将此类检查列出CheckList中

做为一种经验积累,这些问题、原因及解决办法将被列入Checklist,那么:
第一个问题:URL参数上限的提法准确吗?上限是多少?
第二个问题:为什么POST时数据有限制?限制是128K吗?
二、问题分析
1、第一个:
1)URL不存在参数上限的说法。该问题实际是IE对URL有长度限制的问题。
2)HTTP协议规范也没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。[参1]
3)“可变长度的参数通过URL方式传递”实际是说提交表单时使用了GET方法,而不是POST方法。造成这种潜在错误的是使用GET方法提交表单数据。因为GET方法将数据放在URL里传递给服务器处理。
4)注意这个限制是整个URL长度,而不仅仅是你的参数值数据长度。
5)既然是IE对URL长度的限制,那么不管是GET方法还是POST方法都存在这个限制。
(关于FORM的GET和POST方法具体内容请参考相关资料[参2])
建议:
1)了解应用程序所在的环境,如Web应用的浏览器、服务器环境,了解其特定的参数限制情况。
2)提交复杂数据尽量使用POST方法。注意FORM不写method属性时默认是使用GET方法。
结论(写入Checklist):
对使用GET方法提交数据时,在IE环境下,需要考虑URL长度2083字节的限制。
2、第二个:
1)理论上讲,POST是没有大小限制的。HTTP协议规范也没有进行大小限制。
2)“POST数据量存在128K的大小限制”不够准确,POST数据是没有限制的,起限制作用的是服务器的处理程序的处理能力。
3)对于ASP程序,Request对象处理每个表单域时存在100K的数据长度限制。但如果使用Request.BinaryRead则没有这个限制。对于需要处理超过100K表单域数据的解决办法,请参考后面的[参3]。
4)由这个延伸出去,对于IIS 6.0,微软出于安全考虑,加大了限制[参4]。我们还需要注意:
IIS 6.0默认ASP POST数据量最大为200KB,每个表单域限制是100KB。
IIS 6.0默认上传文件的最大大小是4MB。
IIS 6.0默认最大请求头是16KB。
IIS 6.0之前没有这些限制。
建议:
1)弄清楚运行环境的默认设定值有助于你的设计及对出现的问题做快速的解决。
2)应该考虑服务器版本。各个版本的IIS对这些参数的默认设定都不一样,有必要的话,找资料整理出一份对照表。这样开发与测试时都有个参考。
3)IIS 6.0的这些限制实际只是它的默认设定值而已,实际应用环境你可以修改它们。
在WINNT\system32\inetsrv\MetaBase.xml里默认定义了:
AspBufferingLimit=”4194304″ 对应于上传文件最大大小
AspMaxRequestEntityAllowed=”204800″ 对应于POST最大数据量
结论(写入Checklist):
使用ASP时,需要考虑POST表单每个域一般读取处理时有100KB的限制。充分考虑是否使用Request.Binary

下篇:GET与POST方法的区别

备案/许可证编号为: 苏ICP备09007150号