任何语义正确且语法正确的C程序是算法吗?

时间:2013-02-21 06:12:06

标签: c algorithm data-structures

“算法被定义为一个有限的操作序列,其执行将完成具有此定义的特定任务”。我们可以说任何语法和语义上正确的C程序也是一种算法吗?

我的回答是正确的,但我的教授说答案是假的,我的封锁也是如此。 他们使用的反例是

while(1) {

}

printf("%s","blahblah");

无限循环在语义上不正确,而printf()完成任务,因此它是一种算法。因为你可以使用循环和putchar()而不是printf();

那么你们认为谁是对的?

1 个答案:

答案 0 :(得分:5)

你告诉你的教授,如果他甚至不知道正确的术语,他最好停止分裂头发(所以从这一点来看,他的问题没有意义,但无论如何......)。

“算法”在概念上与程序不同。 <答案

  

任何语义正确且语法正确的C程序是算法吗?

不,,因为程序与算法不同 - 程序是......程序。 算法语言无关的问题解决方案的特定表现形式(即,它可以以非常通用的方式表述)。程序是一种依赖于语言的具体实现算法(在C语言中,由于“as-if”规则和编译器优化,实际上不需要与算法相同,它是只需要模仿它。)

还有一条评论:

  

无限循环在语义上不正确

嗯,确实如此。当然,人们并不是简单地解决暂停问题,但这并不意味着无限循环会“语义错误”。当程序执行除您期望之外的其他操作时,语义上是不正确的。除非您希望自己的程序在写while (1) { }时执行其他操作而不是挂起,否则没有问题。

无限循环的概念是否被视为算法是另一个问题。通常,永远不会终止的指令序列被认为是算法,而这可能就是您的教授所说的。根据{{​​3}}:

  

更准确地说,算法是一种有效的方法,表示为用于计算函数的定义良好的指令的有限列表

(强调我的)

相关问题