C语言入门——C语言学习日志5

来源:互联网 发布:ie8 js serialize 编辑:程序博客网 时间:2024/06/05 09:56

新人初学C语言,有什么不对或者不合适的地方欢迎批评指正,不胜感激。

本文主要简单介绍C语言的一些算法。

一个程序应包括:
对数据的描述:在程序中要指定数据的类型和数据的组织形式,即数据结构(data structure)。
对操作的描述:即操作步骤,也就是算法(algorithm)。

Nikiklaus Wirth提出的公式:程序=数据结构+算法

做任何事情都有一定的步骤。为解决一个问题而采取的方法和步骤,就称为算法。


下面看几个例子

【例 1 】求1×2×3×4×5。

最原始方法:
步骤1:先求1×2,得到结果2。
步骤2:将步骤1得到的乘积2乘以3,得到结果6。
步骤3:将6再乘以4,得24。
步骤4:将24再乘以5,得120。

这样的算法虽然正确,但太繁。

改进的算法:
S1:使t=1
S2:使i=2
S3:使 t×i,乘积仍然放在在变量t中,可表示为 t×i -> t
S4:使i的值+1,即 i+1 -> i
S5:如果i≤5,返回重新执行步骤S3以及其后的S4和S5;否则,算法结束。

如果计算100!只需将“S5:若i≤5”改成“i≤100”即可。

如果改成求1×3×5×7×9×11,算法也只需做很少的改动:
S1:1 -> t
S2:3 -> i
S3:t×i -> t
S4:i+2 -> i
S5:若i≤11,返回S3;否则,结束。

该算法不仅正确,而且是计算机较好的算法,因为计算机是高速运算的自动机器,实现循环轻而易举。

思考:若将S5写成:“若i<11,返回S3;否则,结束”会怎样。

【例 2 】有50个学生,要求将他们之中成绩在80分以上者打印出来。如果,n表示学生学号,ni表示第个学生学号;g表示学生成绩,gi表示第个学生成绩;则算法可表示如下:
S1:1 -> i
S2:如果gi≥80,则打印ni和gi,否则不打印
S3:i+1 -> i
S4:若i≤50,返回S2,否则,结束。

【例 3 】判定2000 ~ 2500年中的每一年是否闰年,将结果输出。润年的条件:
能被4整除,但不能被100整除的年份;
能被100整除,又能被400整除的年份。

设y为被检测的年份,则算法可表示如下:
S1:2000 -> y
S2:若y不能被4整除,则输出y“不是闰年”,然后转到S6
S3:若y能被4整除,不能被100整除,则输出y“是闰年”,然后转到S6
S4:若y能被100整除,又能被400整除,输出y“是闰年” 否则输出y“不是闰年”,然后转到S6
S5:输出y“不是闰年”。
S6:y+1 -> y
S7:当y≤2500时,返回S2继续执行,否则,结束。



C语言算法有如下特性:
有穷性:一个算法应包含有限的操作步骤而不能是无限的。
确定性:算法中每一个步骤应当是确定的,而不能应当是含糊的、模棱两可的。
有零个或多个输入。
有一个或多个输出。
有效性:算法中每一个步骤应当能有效地执行,并得到确定的结果。


对于程序设计人员,必须会设计算法,并根据算法写出程序。




0 0
原创粉丝点击