Tải bản đầy đủ (.pdf) (33 trang)

Bài giảng Hệ điều hành linux: Chương 8 - Ngô Văn Công

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (449.14 KB, 33 trang )

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
chương trình
 Không cần mất chi phí mua các phầm mềm hỗ
trợ lập trình đắt tiền

 Để viết chương trình C
 Trình soạn thảo văn bản(vi,gedit,emacs)
 Trình biên dịch
 Thư viện chuẩn


Biên dịch với gcc
 Trình biên dịch(compiler): chuyển từ “humanreadable source code” sang ”machinereadable object code”
 GCC: bao gồm các trình biên dịch C, C++,
Java...
 Cách sử dựng


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

 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 <stdio.h>
int main()
{
printf("Hello, world!\n");
return 0;
}

 #include <stdio.h>: 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)
 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
 {}: 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<stdio.h>
 
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;
    char b;
    return 0;

}

int main()
{
   int a,b,c;
   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<stdio.h>
 
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<stdio.h>
 
int main()
{
   int mark;
   char pass;
   scanf("%d",&mark);
   if (mark > 40)
      pass = 'y';
   return 0;
}

#include<stdio.h>
 
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<stdio.h>
 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<stdio.h> 
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<stdio.h>
 
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ụ
int x = 1;
int y = 2;

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

 Ví dụ x tại địa chỉ 100, y
tại địa chỉ 200 và ip tại địa
chỉ 1000 trong bộ nhớ.


Chú ý
 int *ip;   *ip = 100;
 Báo lỗi (program crash!!).

 Đ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<stdio.h>
 
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


×