算法—程序的灵魂
今天,笔者和大家分享一篇关于C语言算法的文章。其实说句实话,在程序的学习中算法的熟练掌握是比咱们想象中的还要重要。今天是除夕,希望大家新年快乐,万事如意。虽然是猪年,但被吃太多。哈哈。
什么是算法
程序编程中语言(无论是C语言还是JAVA语言等)只是一种工具。而算法是核心、是程序的灵魂。打一个比方,厨师制作菜肴,需要食材和制作方法。没有食材是不可能制作成美味的菜肴,同样对同一种食材运用不同的制作方法可以加工成不同风味的菜肴。算法就好像菜肴的制作方法一样。
另外,程序编程的初学者常常狭义的认为只有“计算”的问题才有算法。广义地说,为解决一个问题而采取的方法和步骤,就称作“算法”。对于同一个问题,可以有不同的算法。当然,算法有优劣之分。有的算法只需进行很少的步骤,而有些方法则需要较多的步骤,这也就是大神和菜鸟的区别。咱们所关心的当然只限于计算机算法,即计算机能执行的算法。例如,让计算机算1×2×3×4×5×6×7×8×9×10.或将100个学生的成绩按高低分数的次序排序,是可以做到的。而让计算机去执行“替我理发”或“煎一份牛排”,是做不到的(至少目前如此)。计算机算法可分为两大类别。数值运算算法和非数值运算算法。
数值运算算法
数值运算的目的是求数值解,例如求方程的根、求一个函数的定积分等,都属于数值运算范围。由于数值运算往往有现成的模型,可以运行数值分析方法,因此对数值运算的算法的研究,比较深入,算法比较成熟,对各种数值运算都有比较成熟的算法可供使用,人们常常把这些算法汇编成册(写成程序形式),有的计算机系统提供“数学程序库”,用起来十分方便。
非数值运算算法
非数值运算,包括面十分广泛,最常见的是用于事务管理领域,例如对一批职工按姓名排序,图书检索人事管理和行车调度管理等,目前计算机在非数值运算方面的应用,远远超过了在数值运算方面的应用。非数值运算的种类繁多,要求各异,难以做到全部都有现成的答案,因此只有一些典型的非数值运算算法。例如:排序算法,查找搜索算法等。没有现成的,成熟的算法可供使用,许多问题往往需要使用者参考,已有的类似算法的思路,重新设计解决特定问题的专门算法本。我不可能罗列所有的算法,只是通过一些典型的算法介绍,帮助读者了解什么是算法,怎样设计一个算法,帮助读者举一反三。
废话不多说,直接上算法:
问题:判定2000-2500年中的每一年是否是闰年,并将结果输出。
第一步算法分析:
先分析闰年成立的条件、(1)能被4整除,但不能被100整除的年份是闰年,例如1996、2008、2012是闰年。(2)能直接被400整除的年份是闰年,如1600、2000是闰年。(3)不符合这两个条件的不是闰年。例如2009、2100。
第二步算法表示:
S1:把year赋值2000
S2:若不能被4整除,则输出的值和“不是闰年”。然后转到S6,检查下一个年份。
S3:若能被4整除,且不能被100整除,则输出year的值和“是闰年”。然后转到S6
S4:若直接能被400整除。则输出year的值和“是闰年”。然后转到S6
S5:输出year的值和“不是闰年”
S6:把year+1赋值给year
S7:当year<=2500时,转S2继续执行,否则算法停止。
代码上是这样的:
#include<stdio.h>
int main()
{
int year;
printf("2000-2500的闰年是:");
for(year=2000;year<=2500;year++)
{
if((year%4==0)&&(year%100==!0))
{
printf("%d\t",year);continue;
}
else
{
if(year%400==0)
{
printf("%d\t",year);
}
}
}
return 0;
}