C語言復習

C語言的Hello world程式

/* hello.c
     the Hello world program
*/
#include <stdio.h>
int main()
{
    printf("Hello world!\n");
    return 0;
}

說明

  1. include 表示程式程式包含stdio.h這個檔案。

    stdio.h包括許多標準的輸出入及檔案處理函數的宣告(declaration)。因為範例要引用printf()函數,所以加上這一行。
  2. 基本的C程式是由main()函數所開始執行。因此程式要有一個main()函數。
  3. C語言的函數的定義(definition)是由左右大括號包起來的一些程式。
  4. printf()是一個在螢幕(在Windows中是一個DOS視窗)上輸出文字的函數。由雙引號包起來的是一個字串。在這裡,表示由priintf()輸出 "Hello world!\n" 這個字串。“\n”表示換行的意思。

C程式的組成

寫程式基本上就是由輸入資料經過運算然後得到輸出。這樣的過程可以簡化成五個部份:一、宣告變數。二、進行運算。三、控制流程。四、判斷資料的值。五、輸入及輸出。舉例說:阿姆斯壯數字(Armstrong Numbers)是三位數的數字。數字的每一個位元的3次方的值加起來等於其本身的數值。如153=13+53+33,所以153是一個阿姆斯壯數字。那有哪些三位數是阿姆斯壯數字呢?可以寫成一個C程式如下:

/* AmNum.c
          Print all of Armstrong Numbers
*/
#include <stdio.h>

void main()
{
    int i,j,k, num1, num2;
    for (i=0; i<10; i++)
        for (j=0; j<10; j++)
            for (k=0; k<10; k++)
            {
                num1=i*100+j*10+k;
                num2=i*i*i+j*j*j+k*k*k;
                if (num1==num2)
                    printf("%d ", num1);
            }
}

說明

  1. C的程式任何地方中可以加上由 “/” 及 “/” 所圈起來的文字,稱為註解(Comment)。“/” 及 “/” 所圈起來的區塊註解 (block comment), “//”開頭的行註解 (line comment)。只要是程式中遇到 “//”之後的那一行剩下的文字都會被視為註解。
  2. int i,j,k, num1, num2; 表示宣告了5個整數變數,其名稱為i,j,k, num1, num2。 int是C語言的關鍵字,表示寫在其後面的變數為整數型別。
  3. for (i=0; i<10; i++) 表示一個迴圈(loop)的表示式,用來控制程式的進行的次數。for-loop 是由左右括號包起來的一個表示式,裡頭有二個分號將表示式分成三個部份。第一個部份是啟始狀態;第二個部份是執行條件;第三個部份是每一次狀態改變的方式。在這裡for (i=0; i<10; i++)表示i這個變數從0開始,每次的值加一(i++),如果i的值小於1(i<10)不成立則結束此一迴圈。所以其後面的敘述會執行10次。在範例中有三層的迴圈,其執行是k變數所在的迴圈執行10次時,j變數的所在的迴圈執行1次;同樣地,j變數所在的迴圈執行10次時,i變數的所在的迴圈執行1次。
  4. 迴圈(loop)中的敘述如果只有一行,則只要直接將此一敘述寫在for-loop的後面。如果有很多行的敘述。則用左右括符把它們包起來。每一個敘述和數學的等式很像,不同的是每一個敘述的最後面要加上分號 “;”。
  5. if (num1==num2)表示一個條件式(condition)。表示如果括符中的條件成立的時候,進行下面的敘述。二個等號 “==” 表示相等關係。如果num1和num2的值相等則num1==num2這個表示式的值是1;否則這個表示式的值為0。如果這二個數值相同的話,下一行的printf()函數就把它印出來。

C程式的main() function

/* gcd.c
    calculate the greatest common divisor of two numbers
*/
#include <stdio.h>
#include <stdlib.h>
void main(int argc, char *argv[])
{
    int num1, num2, a, b, c;
    if (argc<3)
    {
        printf("There must be 2 numbers at least.\n");
        return;
    }
    num1=atoi(argv[1]);
    num2=atoi(argv[2]);
    if (num1<0) num1=-num1;
    if (num2<0) num2=-num2;
    if (num1>num2)
    {
        a=num1;
        b=num2;
    }
    else
    {
        a=num2;
        b=num1;
    }
    c=a%b;
    while (c!=0)
    {
        a=b;
        b=c;
        c=a%b;
    }
    printf("The GCD of %d and %d is %d", num1, num2, b);
}

說明

  1. C的程式處理輸入參數,則可以寫成以下的形式:main( int argc, char *argv[])。
  2. 例如: 執行 pkzip –d file.zip。 則系統會傳給pkzip的參數字串為 “pkzip”, “–d”, “file.zip”;而argc=3。
  3. 寫或小寫的字在C程式語言中視為不同的字。所以 main()函數不可以寫成 MAIN()或 Main()。
  4. atoi()是另一個標準函數。其作用是將一個字串轉成一個數字。atoi()是由標頭檔所宣告的,所以,在程式的開頭加上 #include
  5. if (num1==num2)表示一個條件式(condition)。表示如果括符中的條件成立的時候,進行下面的敘述。二個等號 “==” 表示相等關係。如果num1和num2的值相等則num1==num2這個表示式的值是1;否則這個表示式的值為0。如果這二個數值相同的話,下一行的printf()函數就把它印出來。

C程式的函數function定義及宣告

/* pc.c
    ParityCheck of a byte
*/
#include <stdio.h>
int ParityCheck(char x);
void main(){
char ch1=53;    
char ch2=124;
    printf("the byte %x parity= %d \n", ch1, ParityCheck(ch1));    printf("the byte %x parity= %d \n", ch2, ParityCheck(ch2));
}
int ParityCheck(char x){
    int i, bitcheck,parity=0;
    for (i=0, bitcheck=1; i<8; i++, bitcheck<<=1) 
if (x&bitcheck) 
parity++;
return parity%2;
}

說明

  1. 函數的設計及使用包括三件事。一、是函數原型(prototype)的宣告、函數的呼叫(call)以及函數的定義(definition)。函數原型(prototype)的宣告必須在函數的呼叫(call),其目的在於讓編譯器知道有這個函數存在,以及其輸入及輸出參數為何種型別。
  2. int ParityCheck(char x);表示ParityCheck這個函數輸入一個字元,輸出一個整數值。

表示式及指定式

運算子的種類 優先順序
( ) 8
-- ++ ! & 7
* / % 6
+ - 5
> < >= <= 4
== != 3
&& 2
|| 1

#

從命令列輸入值

double d1, d2;
int a1, a2;

d1 = Double.parseDouble(args[0]);
d2 = Double.parseDouble(args[1]);
a1 = Integer.parseInt(args[0]);
a2 = Integer.parseInt(args[1]);

從檔案輸入

try
{
//In
FileReader reader = new FileReader("math.txt");
BufferedReader sr = new BufferedReader(reader);

String line = sr.readLine();
while (line != null && line.length() > 0)
{
int score = Integer.parseInt(line);
line = sr.readLine();
}
sr.close();

}
catch(FileNotFoundException fe)
{
System.out.printf(fe.getMessage());
}
catch(IOException ie)
{
System.out.printf(ie.getMessage());
}

從檔案輸出

try
{
//Out
FileWriter writer = new FileWriter(result.txt);
PrintWriter pw = new PrintWriter(writer);
System.out.printf("%2d => %5.2f\n", score, modified);
pw.printf("%5.2f", modified);pw.println();
pw.close();
}
catch(FileNotFoundException fe)
{
System.out.printf(fe.getMessage());
}
catch(IOException ie)
{
System.out.printf(ie.getMessage());
}

產生亂數

Random rnd = new Random();
int[] ball = new int[49];//int ball[49];
for (int k = 0; k < 49; k++)
{
ball[k] = rnd.nextInt();;
}

把字串切開

String[] numStr = line.split(" ");

從檔案輸入



results matching ""

    No results matching ""