2008年12月5日 星期五

C/C++:scanf 格式控制介紹

scanf格式控制的完整格式:
%  *  m  l或h  格式字符
① 格式字符與printf函數中的使用方式相同,以%d、%o、%x、%c、%s、%f、%e,無%u格式、%g格式。

② 可以指定輸入數據所佔列寬,系統自動按它截取所需數據。如:
scanf(「%3d%3d」,&a,&b);
輸入:123456
系統自動將123賦給a,456賦給b。

③ %後的「*」附加說明符,用來表示跳過它相應的數據。例如:
scanf(「%2d%*3d%2d」,&a,&b);
如果輸入如下信息:1234567。將12賦給a,67賦給b。第二個數據」345」被跳過不賦給任何變量。

C/C++:printf 格式控制介紹

printf的格式控制:
% - 0 m.n lh 格式字符
下面對組成格式說明的各項加以說明:
%:表示格式說明的起始符號,不可缺少。
-:有-表示左對齊輸出,如省略表示右對齊輸出。
0:有0表示指定空位填0,如省略表示指定空位不填。
m.n:m指域寬,即對應的輸出項在輸出設備上所佔的字符數。N指精度。用於說明輸出的實型數的小數位數。為指定n時,隱含的精度為n=6位。
lh:l對整型指long型,對實型指double型。h用於將整型的格式字符修正為short型。

格式字符

C/C++:string.h 常用函數介紹

*****取得陣列長度*****
int strlen(const char *str);

範例:
int length;
char array[10];
length strlen(array); //lenght = 10;


*****複製字串*****
char *strcpy(char *Dest, char *Source);

範例:
char dest[5];  //註:char sour[5] = char *sour
char sour[5]="abc";

strcpy(dest,sour);  //將sour複製到dest
                    //dest內容為abc    

C/C++:動態產生陣列

以下為C語言動態產生陣列:

動態產生大小為m的一維陣列:
int n;
int *Array;
  Array = (int *)malloc(n*sizeof(int));

動態產生一個[m][n]陣列 Array 的方法:
int i;
int **Array;
Array= (int **)malloc(m*sizeof(void *));
for (i=0; i<m; i++)
    Array=(int *)malloc(n*sizeof(int *));


但這不夠好,若你要的是一個較大的m*n陣列,那麼太多的malloc
會使記憶體碎片化(memory fragment)!窮則變,變則通
問題既出在for loop不斷的 memory allocation,那就從這下手:

C/C++:計算檔案大小

/*
說明:
將檔案指標fp移動到檔案最尾巴
使用ftell回傳從檔案開頭到目前檔案指標所經過的byte數
*/

#include <stdio.h>

int main(int argc, char *argv[])
{
  FILE *fp;
  long size;

  if(argc!=2)
  {
    printf("直接把檔案拖曳到此程式。\n指令用法:此程式檔名稱 要複製的檔案名稱\n");
    system("pause");
  }
  else
  {
    fp = fopen(argc[argv-1],"rb"); /*使用二進位開檔才會正確*/
    fseek(fp, 0, SEEK_END); /*移到檔案最尾端 */
    size = ftell(fp); /*因為讀取指標已經移到最後面了,所以值就是檔案大小*/
    printf("File Size is %d bytes.",size);
    fclose(fp);
  }

  return 0;
}


輸出結果:
File Size is 9065 bytes.

C/C++:Quick Sort

以下文章取自:這裡

先說明這個快速排序法的概念,它以最右邊的值s作比較的標準,將整個數列分為三個部份,一個是小於s的部份,一個是大於s的部份,一個是未處理的部份,如下所示 :


在排序的過程中,i 與 j 都會不斷的往右進行比較與交換,最後數列會變為以下的狀態:


然後將s的值置於中間,接下來就以相同的步驟會左右兩邊的數列進行排序的動作,如下所示:


一個實際例子的演算如下所示:

2008年12月4日 星期四

C/C++:產生亂數並檢查重複

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
  srand(time(NULL));
  int number[7];
  int i,j;
  for(i=0;i<=5;i++)
  {
    number[i]=rand()%50+1; //產生6個1~50的數字
    for(j=0;j<i;j++)
    {
      if(number[i]==number[j])
      {
        i--;
        break;
      }
    }
  }

  for(i=0;i<=5;i++)
    printf("%d  ",number[i]);

  return 0;
}


輸出結果:
20  15  42  8  14  33

CCleaner - 清理系統好工具

【軟體名稱】:CCleaner
【軟體類型】:系統清理
【軟體性質】:免費
【軟體語言】:多國語言(含繁中)



官方網站:http://www.ccleaner.com
下載點:http://www.filehippo.com/download_ccleaner/

C/C++:時間相關函數及用法

常用到的時間相關函數有:
  • time_t time(time_t *t);
  • struct tm *gmtime(const time_t *timep);
  • struct tm *localtime(const time_t *timep);
  • char *asctime(const struct tm *tm);
  • char* ctime(const time_t* timer);
  • clock_t clock(void);
  • double difftime(time_t timer2, time_t timer1);
  • time_t mktime ( struct tm * timeptr );

說明:

time_t time(time_t *t);
time(). 它會傳回自 00:00:00 01/01/1970 到現在所經過的秒數。在 x86 上 time_t 是一個 32bit 的整數 (signed long int). time() 若傳回 -1 表示錯誤。

2008年12月1日 星期一

第一篇文章...(這是標題嗎XDDDD)Test

原本舊網誌:http://www.wretch.cc/blog/neilchennc

想跳槽是因為無名很多功能都很不好用
都沒啥彈性...尤其是無名不支援iframe....
Blogger可以用ScribeFire來編輯、發佈
很多東西都能自己更改,方便多了~
所以就跳到Blogger啦~

以下是測試,請勿理我...

012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789


this is a test
aaaaaaaa
bbbbbbbbb
cccc