程序员考试补课笔记-第五天

发表于:2007-05-26来源:作者:点击数: 标签:
今天是离散学礼的最后一天了,我的成绩嘛,当然也不会高得去那里了,还很有可能第一呢(倒数啊)。都怪自己不好,不过也不能全怪。因为学校本来的电脑课程也不少了,可就是全部都在教图形方面呢,什么PS 、CW都要我们编程班的去学,真有点不爽。 好了,也不

今天是离散学礼的最后一天了,我的成绩嘛,当然也不会高得去那里了,还很有可能第一呢(倒数啊)。都怪自己不好,不过也不能全怪。因为学校本来的电脑课程也不少了,可就是全部都在教图形方面呢,什么PS 、CW都要我们编程班的去学,真有点不爽。
  好了,也不说太多自己学校的羞事了。那么下面我们就开始来学习今天的知识吧,很多朋友都是我整天在打字,可我自己觉得打一篇这些也不是浪费很多时间,而且收益的更多(早上听完,晚上复习)。故语有云"温故知新",我觉得这句特别有道理的,因为通常我在看书里也看不到老师在课堂里向我们提出的问题。好了好了,我还是赶紧说说今天的学习吧。昨天老师布置的我们一道答,我昨天都给忙了做,而是今天突然想起才冲冲的赶着做,是这样的一道题:
给一个不多于5位的正整数,要求:1,这个数有几位2,打印每一位的数,3逆序打印,比如321 输出 123。
好在这答也不难,用了一会儿时间就做完了。
main()
{
  int n; int num;
  int i=0,a[5];
  printf("请输入不大于5位的正整数");
  scanf("%d",&num);
  do
  {
    do[i] =num % 10;
    num /=10;
    i++;
  }while(num!=0);
  n=i;
  printf("LEN%d",n);
  for(i=n-1;i>=0;i--)
    printf("%d",a[ i ]);
  for(i=0;i<n;i++)
    printf("%d",a[ i ]);

}
  做这题时我也用到了昨天老师教的画图方法作了验算,不过还是要上机求正否,这样一来可以锻练一下编写程序。我们大家都各有各的方法,有些是很长(用Switch语句呢),我也不知道他怎么想的了,不过不同人有不同思想是正确的,编程这玩意没有完全统一的答案的。那么你们想想你们有什么方法做呢,好吧,就给五分钟你们做做吧。……好了,时间到了,下面我再说说我的另一位同学做的方法吧,他是用字符数组的,也很简单方便可以实现。你们做的怎么了?如果有好的方法也可以大家交流啊,因为我写这些都是为了大家(也为了自己)。大家应该都看得明白我的程序吧,因为我的思想就是这么单纯。
老师说完了昨天的作业后就开始说今天要讲的课程了。今天的主题是循环语句,其实C语言里也只是这么几条循环语句吗?相比QB来说真的可以算是见大场面了,因为QB里单是循环语句已经有七八种之种,至于有那些我也记不太清了。那么下面讲讲C语言的好了。C语言的循环语句一共有三种,先说说比较简单的前两种吧!
While ( 条件 ) { 语句;} 和 do { 语句;}
               while ( 条件 );

  这里我想重复一下老师给我们说的一个笑话,就是有一个小女孩问妈妈拿糖的小故事。有一个很乖的小女孩总是先问妈妈可不可以吃糖,如果得么批准了就拿一粒来吃。可是有一次她就很拿着一粒吃着了,跟着才问妈妈我可不可吃糖啊,如果可以当然就是继续可以吃了,否则就不准了,不过已经有一粒在口了。这个刚好可以比喻这两个循环语句,第一个循环语句是先当条件真才可以继续下去,否则退出。而第二个呢,就是直运行里面的程序先,跟着才到条件里看是否可以再继续运行多一次。好了这两个比较简单的就看看C语言里特有的一个for循环语句,这个循环比较特别,如第五天图一
它的结构也比较特别,而且里面三个表达式是非常灵活的。这里随便给出一个程序让大家看看:
int i=0;
for(;;) if(i++>10) break;
printf("%d",i);
  这说这里i是多少呢?这里就关系到这个运算符了++递增运算符,可以有两种方式,一种是i++就像上面的那样,至于另一种就是++i,这里的答案是前者等于12,而后者就等于11。这里全是因为++递增的两个方式所至,那么我们要好好掌握一下这个,你自己试试动手上机编一下。另一个程序好让看出这个递增运算符的:
int i=0;
if (i++) printf("a"); /* 如果这里为真的就输出a */
else printf("b"); /*否则就是输出b */
  自己试试看,是不是很明显可以知道这个递增符的原理呢,这里说一下吧,其实i++这个呢就是先那i比较后才运算++的,所以很自然就是0那么结果当然就是输出b了,则那个++i就是先把i加1才比较,那么真就输出a了,好了,那么++递增和- -递减都是同一性质的。不过要注意的是这两个递增递减运算符都是要变量才行的,不可以和常量运算。
  好了,说完了循环语句当然就是要懂得去运用在编程里了啊!所以老师马上出了一道题让我们想想,不过相信有些人都是研究过的了,就是"魔方阵",可是老师说虽然这个魔方阵虽然有直接的算法可以运算出来,但是要让我们思考用循环做这题,利用计算机的能力来完成,但看到要排列这么多的数,循环也更不要说要很多了,所以我根本没法想下去了(开始头晕起来)。最后还是没有一个能做出,只好听老师说了,不过老师也没有完全说完,只是给了我们一个结构,如第五天图二让我们自己有兴趣就去完成它吧,我对数学这东西最没有FEEL的了。
  好了,接着继续第二题,也是一个排列组合的问题,你们手头上应该都有老潭的《C程序语言第二版》了,那么请大家翻翻书到第121页,6.15题,这题就是排列组合的题目了。这其实也是有一个规律可以找到的,不过不是我们找到的而是老师给我们说,今天这堂课真的有太多的难题了,至少对于我来说。下面我也没有什么好插嘴的了,只好示出老师的方法吧,如第五天图三
程序也在下。
char xyz[]=['X','Y',"Z'};
int i,j,k;

for(i=0;i<3;i++)
  for(j=0;j<3;j++)
    if(j==i0 continue;
    for(k=0;k<3;k++)
      if(k==i || k==j) continue;
      printf("A-%c\n",xyz[i]);
      prihtf("B-%c\n",xyz[j]);
      prihtf("C-%c\n",xyz[k]);

让大家自己看明白了。好了,今天我的头也特别的晕,肩膀也特别的酸。不过我还是要努力的!

原文转自:http://www.ltesting.net