算法和程序的区别:
程序是指使用某种计算机语言对一个算法的具体实现,
即具体要怎么做,而算法侧重于对解决问题的方法的描述,即要怎么做。
算法必须满足有限性,而程序不一定满足有限性,
例如Windows操作系统在用户没有退出、硬件不出现故障,
以及不断电的条件下理论上可以无限时运行,所以严格上讲算法和程序是两个不同的概念。
算法可以直接用计算机程序描述。
例题1.2
#include <iostream>
#include <stdio.h>
void exam1()
{ int n;
n=2;
while(n%2==0) //无限循环不满足有限性
n=n+2;
printf("%d\n",n);
}
void exam2()
{ int x,y;
y=0;
x=5/y;
printf("%d.%d\n",x,y);//0不能作为除数,可行性不满足。
}
算法如何描述?
描述算法的方式很多,有的采用Pascal语言,有的采用自然语言伪码。
此处我们采用C/C++语言来描述算法的实现过程。
例如设计一个:求1+2+3……+n的值的算法
bool fun(int n,int s)//算法的返回值:正确执行时返回真,否则返回假。
{ int i;
if(n<=0)
return false;
s=0;
for(i=1;i<=n;i++)
s+=i;
return true;
}
void mian()
{ int a=10,b=0;
if(fun(a,b))
printf("%d\n",b);
else
printf("参数错误\n");
}
注意:在执行事返现输出结果为0,因为b对应的形参为s,fun执行后s=55,
但S并没有回传给实参b。在C语言中可以用传指针的形式来实现形参的回传,
但增加和函数的复杂性。
为此在C++语言中增加了引用型参数的概念,引用型参数名前需要加上“&”,
表示执行将会回传给对应的实参。
当将形式参数,改为引用类型的参数后,在执行时main函数的输出结果就正确了。
,即输出55,由于C语言不支持引用类型,C++语言支持引用类型。
当引用数组的时候不用加入&,因为在C/C++语言中数组本身就是一种引用类型,
它会自动将形参数组的值回传给实参数组。
算法中引用型参数的用如图所示,在设计算法时,如果某个形参需要将执行结果
回传给实参,则将该实参设计为引用型参数。在带有Trubo C中运行,
可以在BC++、Visual、Dev C++等编译环境中运行,通常程序文件扩展为.cpp
而不是.c。
C语言中没有提供实参和形参的双向传递,可以说这是C的缺陷,在很多计算机语言中都
改进了这一点,例如在Visual Basic语言中函数形参需要制定时ByVal(传值,即单值传递)
还是ByRef(传引用,即双向传递)。在C++语言中提供了引用类型,通常将函数形参定义
为引用类型,以实现形参和实参的双向传递。