测测你自己

当我要去宾州开始我的第一年大学生活时,我认为自己已经是非常好的程式设计师。靠完全自学,我用的Turbo 帕斯卡尔写了两套系统……一个是小型工厂的存货系统,另一个是能对以色列一个最大的面包工厂的生产线做排程。

直到期中考我才了解我并不是如自己想的一样聪明。某些考题我完全搞砸了,因为我还是不了解指标(指针)跟递回(递归)。

不是对某人怀恨在心,我将这些期中考题与你分享……看看你是否能做的比我大一还好。

1A。(MIT-Scheme)使用以下函数

(define(累积组合器null-value l)
   (if(null?l)
       空值
       (组合器(车l)
                 (累积组合器
                             空值
                             (cdr l)))))

实作平方和,就是计算一串数字平方的加总,例如

(平方和'(1 2 3 4 5))

应为55。

(解答请反白全选下列的文字栏:)

(定义(平方和l)
   (累积(lambda(xy)(+(* xx)y))
               0
               1))

1B。(JavaScript)好吧,也许Scheme不是你擅长的,这个问题跟1a一样,只是是用JavaScript。

使用以下函数

函数累加(combiner,nullValue,l)
{
	if(l.length == 0)
		return nullValue;
	var first = l.shift();
	return combiner(first,accumulate(combiner,nullValue,l));
}

实作平方和,就是计算一串数字平方的加总,例如

sumOfSquares([1,2,3,4,5])

应为55。

(解答请反白全选下列的文字栏:)

函数sumOfSquares(lst)
{
	return accumulate(function(x,y){return x * x + y},0,lst);
}

2 \。(ANSI C)以下列格式写一个C的程式:

#include <stdio.h>
int main(int argc,char ** argv)
{
   ???
}

使得它在编译之后,可以如下执行

%。/ a.out可能会吃八只萨拉米大象

而它会印出每个参数的第一个字母(在这个例子,是 “奶酪”)。

(解答请反白全选下列的文字栏:)

#include <stdio.h>
int main(int argc,char ** argv)
{
  int i;
  for(i = 1; i <argc; i ++)
  {
    的putchar(argv的[I] [0]);
  }
  的putchar( '\ n');
  返回0;
}

3 \。(ANSI C)底下的C程式输出是什么?

#include <stdio.h>

char * fn(int i,char * s)
{
  当我)
  {
    小号++;
    一世 - ;
  }

  回归;
}

int main(int argc,char ** argv)
{
  int a = 2;
  static char c [] =“test”;

  printf(“%s \ n”,fn(a,c));

  返回0;
}

(解答请反白全选下列的文字栏:)

st(后跟换行符)

想要更多的程式设计挑战,请见[TopCoder的](http://www.topcoder.com/)。

这些网页的内容为表达个人意见。
所有内容版权所有©1999-2006,作者Joel Spolsky。版权所有。