Lập Trình C trong Linux

Nội dung

1. Giới thiệu

2. Hello world program

3. Ngôn ngữ C

4. Trình biên dịch make

Giới thiệu

 Ngôn ngữ lập trình C là lựa chọn tốt cho những

người mới học lập trình

 Đơn giản, mạnh và được sử dụng rộng  Linux là môi trường thích hợp để viết các

trợ lập trình đắt tiền

chương trình  Không cần mất chi phí mua các phầm mềm hỗ

 Trình soạn thảo văn bản(vi,gedit,emacs)  Trình biên dịch  Thư viện chuẩn

 Để viết chương trình C

Biên dịch với gcc

 Trình biên dịch(compiler): chuyển từ “human-

readable source code” sang ”machine- readable object code”

 GCC: bao gồm các trình biên dịch C, C++,

Java...

 [CODE]% gcc [ tùy chọn | tên file ] ...

 Cách sử dựng

 Giả sử bạn có 1 file myfile.c khi bạn đánh :

% gcc myfile.c

 Trong thư mục của bạn sẽ có thêm file a.out đó là file output mặc định của gcc. Lúc này bạn đã có thể run chương trình bằng :

% ./a.out

(tt)

 Nhưng nếu bạn compile file tiếp theo cũng như trên thì file a.out của bạn sẽ bị ghi đè bằng file thứ 2.

 Để khắc phục bạn có thể sử dụng tùy chọn -o

để đặt tên file out put % gcc -o myout myfile.c

 Khi bạn compile 1 program, bạn sẽ có những errors nhỏ nhưng gcc sẽ thay bạn sửa chửa những lỗi này (trừ khi đó là lỗi lớn). Nhưng trên thực tế' mình phải tự sửa các lỗi này để chương trình sau khi compile là bug-free Bạn sẽ thêm 1 tùy chọn là -Wall (viết tắt của Warning All - Thông báo tất cả lỗi)  % gcc -Wall -o myout myfile.c

Chương trình Hello

 Biên dịch

 gcc -o hello hello.c

(hello.c)

 #include : thêm tệp tên là stdio.h để cho phép chúng ta sử dụng một số lệnh(Standard Input/Ouput)

#include

int main() {

 Int main(): Int chỉ giá trị trả về của hàm main(), main là tên của điểm bắt đầu của chương trình

printf("Hello, world!\n"); return 0;

 {}: nhóm các lệnh lại  printf("Hello World\n"):

}

hiển thị văn bản lên màn hình

 return 0: trả về 0 cho hàm

main

Thụt đầu dòng và chú thích

 printf và return được thụt vào đầu dòng so với

bên trái để làm cho đoạn mã dễ đọc hơn.

 Chú thích

/* Author: Your name    Date: yyyy/mm/dd    Description:    Writes the words "Hello World" on the screen */   #include   int main() {     printf("Hello World\n"); //prints "Hello World"     return 0; }

Biến và hằng

 Biến: biến trong C là vị trí bộ nhớ được đặt tên  Giá trị số: nguyên hay thực  Biến ký tự  Hằng: không thể thay đổi giá trị  Khai báo biến

Biến và hằng

 Khai báo biến hằng  Biến dạng Signed và

unsigned

int main() {    int a,b,c;    return 0; }

int main() {     int a;     char b;     return 0; }

int main() {     const float pi = 3.14;    return 0; }

int main() {     unsigned int a;     signed int b;     return 0; }

Đọc và hiển thị biến

 scanf: đọc giá trị nhập từ

bàn phím

#include   int main() {    int a;    scanf("%d",&a);    a = a * 2;    printf("The answer is %d",a);    return 0; }

Câu lệnh điều kiện

 Câu lệnh if #include   int main() {    int mark;    char pass;    scanf("%d",&mark);    if (mark > 40)       pass = 'y';    return 0; }

#include   int main() {    int mark;    char pass;    scanf("%d",&mark);    if (mark > 40)    {       pass = 'y';       printf("You passed");    }    else    {       pass = 'n';       printf("You failed");    }    return 0; }

Toán tử ?

 expression1 ? expression2: expression3 <=>

if expression1 then expression2 else expression3

 z = (a>b) ? a : b; <=> if (a>b) z = a; else z=b;

Câu lệnh switch

 Giống if nhưng

Có nhiều tùy chọn hơn

#include  int main() {    char fruit;    printf("Which one is your favourite fruit:\n");    printf("a) Apples\n");    printf("b) Bananas\n");    printf("c) Cherries\n");    scanf("%c",&fruit);    switch (fruit)    {       case 'a':          printf("You like apples\n");          break;       case 'b':          printf("You like bananas\n");          break;       case 'c':          printf("You like cherries\n");          break;       default:          printf("You entered an invalid choice\n");    }    return 0; }

Vòng lặp

 Vòng lặp for

for (starting number;loop condition;increase variable)    command;

#include  int main() {    int i;    for (i = 1;i <= 24;i++)       printf("H\n");    return 0; }

Vòng lặp while

 while (expression) statement

int x=3;   main() {

while (x>0) {

printf("x=%d \n",x); x--;

}

}

Vòng lặp

 Vòng lặp Do while

#include   int main() {    int i,times;    scanf("%d",×);    i = 0;    do    {       i++;       printf("%d\n",i);    }    while (i <= times);    return 0; }

Con trỏ

 Là biến chứa địa chỉ bộ nhớ  Do đó được gọi là con trỏ, trỏ tới giá trị nằm tại

vùng nhớ đó

 Khai báo con trỏ: đặt * phía trước tên của nó

int main() {    int *p;    void *up;    return 0; }

int main() {    int i;    int *p;    i = 5;    p = &i;    return 0; }

Ví dụ

 Ví dụ x tại địa chỉ 100, y

tại địa chỉ 200 và ip tại địa chỉ 1000 trong bộ nhớ.

int x = 1; int y = 2; int *ip;   ip = &x;   y = *ip; x = ip; *ip = 3;

Chú ý

 Báo lỗi (program crash!!).

 int *ip;   *ip = 100;

 Đoạn code đúng là:  int *ip; int x;  ip = &x; *ip = 100;

Khai báo mảng

int a[5]; a[0] = 12; a[1] = 23; a[2] = 34; a[3] = 45; a[4] = 56; printf("%d",a[0]);

Hàm(Function)

 Hàm là chương trình con  Khai báo hàm trước khi sử dụng

#include   int Add(int a,int b) {    return a + b; }   int main() {    int answer;    answer = Add(5,7);

printf(“ket qua=%d”,answer);    return 0; }

Câu lệnh make

 Cho phép bạn quản lý các chương trình lớn  Dịch lại chương trình lớn thì lâu hơn rất nhiều

so với khi dịch các chương trình nhỏ

 Make giúp bạn phát triển các chương trình lớn mà vẫn theo vết các thay đổi so với lần biên dịch trước đó

Quá trình biên dịch đơn giản

Biên dịch với nhiều tệp

Biên dịch với nhiều tệp

Compile green.o: gcc -c green.c Compile blue.o: gcc -c blue.c Link the parts together: gcc green.o blue.o

Chú ý khi chia chương trình C thành nhiều tệp

 Không có 2 hàm nào cùng tên  Nếu dùng biến toàn cục, chú ý là không cò 2 tệp

nào cùng định nghĩa một biến

 Khai báo biến toàn cục trong một tệp:extern int

globalvar;

 Khi dùng hàm định nghĩa trong tệp khác, tạo tệp

.h với prototype của hàm và dùng từ khóa #include để thêm tệp .h vào trong tệp .c của bạn

 Khi bạn định nghĩa một biến:int globalvar;  Khi bạn khai báo một biến:extern int globalvar;

Biểu đồ phụ thuộc(Dependency graphs)

Cách hoạt động make

Makefile

target : source file(s)

command (must be preceded by a tab)

Sử dụng makefile với make

 head.h

Int add(int a, int b);

#include “head.h”

 Add.c  gcc –c add.c

Int add(int a, int b) {

return a+b;

}

#include #include “head.h”

 Main.c  gcc –c main.c  gcc add.o main.o –o main

Int main() {

printf(“%d”,add(2,3));

}

Biên dịch

1. gcc –c add.c 2. gcc –c main.c 3. gcc add.o main.o –o vidu1

Makefile

program1: add.o main.o

gcc add.o main.o –o vidu1

add.o: add.c head.h gcc –c add.c

main.c: head.h main.c

gcc –c main.c