查看全部128種考試
軟件水平考試
 考試動態(tài) 報考指南 歷年真題 模擬試題 復習資料 心得技巧 專業(yè)英語 技術文章 軟考論壇 考試用書
 程序員 軟件設計師 網絡管理員 網絡工程師 系統(tǒng)分析師 數(shù)據(jù)庫系統(tǒng)工程師
1
2
3
4
5
6
7
8
9
10
Exam8.com  
【字體: 程序員考試補課筆記-第六天
程序員考試補課筆記-第六天
spks.exam8.com 來源:考試吧(Exam8.com) 更新:2004-12-27 13:27:00 軟件水平考試 考試論壇
  今天的整個課程只有這么的一道題,但是學到的東西確很多。下面給出這條題目:

   字符數(shù)字轉為整數(shù)數(shù)值(字符可以任意:比如"342A")遇到其它否數(shù)字取前數(shù)。

我所寫的程序如下,自認為寫得不錯:

#define N 10;

int catio(const char *str) /*const 的作用是常數(shù),所以這里的地址不會返回到實參里*/

{

  int num[N];

  int i=0;j=1,n=0;

  for(;*str++;i++)

  {

    if(*str<48 || *str>57)

    break; /*判斷是否數(shù)字數(shù)值*/

    num[i]=*str-48;

  } 

  for(i-=1;i>=0;i--)

  {

    n+=num[i]*j;

    j*=10; 

  }

return n;

}

你們說是不是比較簡單呢?現(xiàn)在看不出等看完以下的另一個程序先斷定吧。如下:

long catio(char c[]);

{

  int n,d;

  char *q,*p;

  long e=1,s=0;

  for(q=p=c,n=0;*p!='\0' && *p>='0' && *p<='9';p++,n++,e*=10);

  while(n>0)

  {

  d=*q++;

  switch(d)

  {

  case 48: d=0;break; /*太長了,略*/

     :

     :

  case 57: d=9;break;

  }

  s+=d*(e/=10);

  n--;

}

return (s);

}

  現(xiàn)在比較來看看,不過雖然這條程序是比我那個復雜,但是也有他的思路和可取之處。像在那個for循環(huán)了,一條命令帶過很方便也很簡潔。其實我們可以繼續(xù)改造這個程序,我們跟著老師的思路一步一步的把它進化,現(xiàn)在看看如下:

long catio(char c[]);

{

  int n,d;

  char *q,*p;

  long e=1,s=0;

  for(q=p=c,n=0;*p && *p>='0' && *p<='9';p++,n++,e*=10);

  while(n>0)

  {

    d=*q++-'0';

    s+=d*(e/=10);

    n--;

  }

  return (s);

}

  這樣是不是更簡化了,那么還可以再簡化下去嗎?前面的我們是可以做出來啊,當是老師說還可以更簡單,我們都只好懷著期待的心情去聽了。他一步一步的說出來,第一就是在s+d*(e/10)這里可以變?yōu)榱硪环N形式,s=s*10+d,如果按照這樣又可以去掉一個多余的變量了,變量e就沒有了。接下來的更不可意議了,我不知道怎么說,看看程序先吧。

long catio(char *c);

{

  long s=0;

  for(;*p && *c>='0' && *c<='9';s=s*10+*c++-'0');

  return (s);

}

  大家看到了嗎?原來這么長的程序可以一再簡化到這個地步,這就是C語言的靈活了(我好像已經說了好幾遍了,真的沒有辦法,不得不贊嘆)。

  今天就是這么一題,可真的有意外驚喜呢!好了,現(xiàn)在不寫了,還有十道練習題等著我去做呢,大家也要努力喔!

轉帖于:軟件水平考試_考試吧
文章搜索  
看了本文的網友還看了:
·程序員考試補課筆記-第九天  (2004-12-29 23:59:00)
·程序員考試補課筆記-第八天  (2004-12-27 13:29:00)
·程序員考試補課筆記-第七天  (2004-12-27 13:28:00)
·程序員考試補課筆記-第四天  (2004-12-27 13:26:00)
·程序員考試補課筆記-第三天  (2004-12-26 13:21:00)
·程序員考試補課筆記-第二天  (2004-12-26 13:20:00)
軟件水平考試權威輔導教材: 訂書電話:010-62168566  更多>>>
網友評論
昵 稱: *  評 分: 1分 2分 3分 4分 5分
標題:   匿名發(fā)表    (共有條評論)查看全部評論>>
版權聲明 -------------------------------------------------------------------------------------
  如果軟件水平考試網所轉載內容不慎侵犯了您的權益,請與我們聯(lián)系,我們將會及時處理。如轉載本軟件水平考試網內容,請注明出處。
關于本站  網站聲明  廣告服務  聯(lián)系方式  付款方式  站內導航  客服中心  友情鏈接  考試論壇  網站地圖
Copyright © 2004-2008 考試吧軟件水平考試網 All Rights Reserved    
中國科學院研究生院權威支持(北京) 電 話:010-62168566 傳 真:010-62192699
百度大聯(lián)盟黃金認證  十佳網絡教育機構  經營許可證號:京ICP060677