计算概论……

1 view
Skip to first unread message

ft y

unread,
Jan 12, 2010, 3:08:49 AM1/12/10
to 09introductiont...@googlegroups.com
今天早上听说计算概论考试是半开卷的(可以带教材,但不能带其他的东西),如果真的是这样大家的应急水平应该要低一点吧。

这里建议一下,大家看看书什么的,全当做降低应激水平好了,其实也不见得能看进去什么东西,另外,适当写一下程序是必要的,因为最近大家应该都没有写过程序了。建议写模拟测试的程序好了,因为这些题目应该比较接近考试。重新写一遍之类的,嗯,起码也算有些事情做,不是毫无头绪。

A、关于程序语言
     1、顺序部分:
          a. 读入时要有&,变量对应要搞清:%d - int,%lf - double,%c - char, %s - string(这个不要%). 
          b. 读入顺序要注意,前后为一一对应: %d %d就要依次输入两个int, %d %lf,就要依次输入 int,double
          c. 语句逻辑要了解,每一段语句干什么要清楚:写程序就像写文章,千万别越写越搞不清楚自己在写什么。

     2、分支部分:
          a. 逻辑操作要注意,不要写错操作符: 尤其是"=="不要写成"=",这里有一种方法是把判断语句 “if (x == 0)” 写成 “ if (0 == x)” 这样写意义上没有差别,只是如果把"=="写成"="的话,程序就会编译不通过,从而提醒你要注意这里的符号。
          b. 符合语句要用大括号{}:由于有时候一个判断语句后面要做很多(比如,如果x=1,那么y=1,并且输出x, y,这样就是一个判断语句的条件下面有两个语句(y=1 和 输出)),一定要记得用{}把这些在一个条件下的所有语句括起来, 也要记得不要把不是这个条件下的语句括进来。
          

     3、循环语句:
          a. 多重循环要搞清楚循环变量是什么,不要在需要内层循环变量的时候用外层循环变量,比如:
               for (i=0;i<n;i++)
                 for (j=0;j<i;j++)
                  {
                         sum = sum + j; // 这里是求 1 + (1 + 2)+(1+2+3)……,不要把应该使用内层循环变量 j ,错误地写成 i 了
 
                  }
          b.循环控制条件要注意,搞清楚开始和结束:记得在第一次模拟考试之后助教反馈有人用 for (i=0;i<100;i++)这样来处理字符串长度,而不管字符串实际长度这个问题。在此提醒各位要注意每一个循环的开始和结束。
    
    
      4、子函数:有些人觉得这个没什么用,其实这个的出现主要是结构化程序设计里面,有利于你整理整个主程序的逻辑。一个子函数其实就是一个程序段,只不过是把这个程序段先整合在函数部分,然后在主程序的时候用紧凑的格式调用,增强程序的意思。
            比如在主程序里面  ans = max(a,b); 
            然后再定义 
           int max( int a, int b)
           {
              if (a>b) return a;
              else return b;
           }
           这样,一方面主程序中就不会那么零散(只有一句话),另一方面将这个独立出来之后,你可以只调试这个子函数,来确定其正确性,而不用在整个程序中找到底哪里错了。
 
           *另外一个就是子函数可以用来做递归。
 
      5、数组:一定要注意数组下标从0开始,所以在定义数组大小的时候,要定得大一点——以免你不记得下标从0开始的。
 
      6、字符串:这是一个非常麻烦的东西,所以建议如果找不到事情做的同学抓紧时间复习一下字符串:
          a. 字符串以'/0'结尾,所以相关函数可以用这个符号来识别一个数组到底是字符串还是字符数组(这段话听不懂的可以看助教gg在第一次模拟考试后发布的那个字符串的标准程序)
          b. 字符串有很多固有的函数:strlen(s):测量字符串实际长度, strcmp(s1, s2):比较两个字符串,如果答案为0,则两个相等。
          c. gets(s) & scanf("%s", s),前一个是把一行全部读入,后一个是读入到分隔符(比如空格)为止,按照要求选用。
          d. 字符串下标从0开始

B、关于程序思路
     这个东西其实不是很好说,因为我现在也无法告诉各位很多的解题思路,不过一些简单的排序啊,之类的大家还是好好复习吧。第二次模拟考试就比较简单了,大家做起来应该感觉也会好一点。编程的思路,“先想想不用程序你怎么解题,然后再想怎么用程序实现”是一种可以考虑采取的策略。

C、关于考试过程
     1、要记得赋初值:
          a. 数组赋值不要只用 int a[10]={0},这样好像是只给第0号元素赋值了,你要给数组赋值,要不就 int a[10] = {0,0,0,0,0,0,0,0,0,0},要不就写一个循环语句赋值。至于memset(好像是这样的)之类的函数,我也搞不清楚,而且没必要。
          b.循环语句,尤其是嵌套循环,一定要注意赋初值,比如有可能需要
            for (i=0;i<n;i++)
            {
               给一个变量赋初值;
               for (j=0;j<n;j++)
               {
               }
            }
           这样的模式,但是这个要具体的题目才好说,这里就不展开了
        c.子函数里面最好赋初值
  
    2、编程要遵守ASAP原则,就是As simple as possible,当然大家可能对这个还没有很明确的感觉,大概觉得想不出思路为主,而想出很多思路选择哪个这种问题比较少一点,反正,尽量写你能把握的语句,和尽量用你熟练的方法解题。有很多困难的题目都可以用简单的方法解,关键是你要愿意去写。
 
D、剩下的话
     短时间内也不知道要给哪些tips,想到一点就随便说说了, 主要是希望大家在写程序的时候不要细节出错太多——这是因为(1)调试起来很复杂(2)很影响心情。
     如果想训练一下编程思维和字符串,推荐challenge里面的“字串”和“称硬币”,前者主要训练字符串处理,后者更多能训练思维,
     差不多就是这些吧,大家加油复习。
     计算概论其实复习起来挺无聊的,但是如果真的做题的话,有很花时间,大家权衡一下吧。
 
     最后,我猜想考试应该不会很难吧,都能带书进去……


    
--
杨斐曈

北京大学心理学系d
地址:北京市海淀区颐和园路5号北京大学38楼440
手机:(+86)15120090340

Yang Feitong
Department of Psychology
Peking University
Postcode:100871
Cell:(+86)15120090340

Email: willi...@gmail.com

Qingleng Tan

unread,
Jan 12, 2010, 3:36:30 AM1/12/10
to 09introductiont...@googlegroups.com
FTgg辛苦啦~~~
 
有个小错
  a. 读入时要有&,变量对应要搞清:%d - int,%lf - double,%c - char, %s - string(这个不要&).
大家明天加油~~
2010/1/12 ft y <willi...@gmail.com>
Reply all
Reply to author
Forward
0 new messages