Nhận làm đồ án VĐK các loại ( 8051, AVR, PIC) Tư vấn - Hướng dẫn - lập trình
Hiển thị các bài đăng có nhãn Lập trình C. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Lập trình C. Hiển thị tất cả bài đăng

Thứ Ba, 31 tháng 3, 2015

Cấu trúc hàm Ngôn ngữ C

GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH C

Chào các bạn, chúng ta lại quay trở lại với loạt bài hướng dẫn cơ bản ngôn ngữ lập trình C. Trong bài cuối này tôi sẽ giới thiệu đến các bạn các vấn đề còn lại của ngôn ngữ lập trình C : Hàm, cấu trúc chương trình cơ bản trong C và việc chuyển đổi các hệ thống sốtrong C (thập phân, nhị phân, thập lục phân …v…v..).
VII. Hàm trong C
v Định nghĩa :
·        Là một đơn vị độc lập của chương trình, có tên, đầu vào và đầu ra.
·        Có chức năng giải quyết một số vấn đề chuyên biệt cho chương trình chính.
·        Được gọi nhiều lần với các tham số khác nhau.
·        Được sử dụng khi có nhu cầu
·        Các hàm có vai trò ngang nhau, do đó không cho phép xây dựng hàm bên trong hàm khác.
·      Cấu trúc hàm chia làm 2 phần chính :
·        Tiêu đề hàm
·        Thân hàm
·      Cú pháp khai báo hàm :


Trong đó :
·        <kiểu trả về> : Kiểu bất kì của C (Char, int, long, float, …). Nếu không trả về thì là kiểu void.
·        <tên hàm>: Theo quy tắc đặt tên trong C. Chú ý cần đặt tên hàm mang tính gợi nhớ vơi chức năng mà hàm thực hiện.
·        <danh sách tham số> : Tham số hình thức đầu vào. Nếu có nhiều tham số đầu vào ta có thể phân cách bằng dấu “ ,
·        Trong trường hợp hàm có giá trị trả về ta có câu lệnh [return  <giá trị>;]. Chú ý với lệnh return có thể trả giá trị tùy ý có thể là 0, 1, …v..v… hoặc giá trị tính toán trong hàm. Việc lựa chọn cho giá trị trả về do ta lựa chọn.
7.1. Tham số của hàm
·      Tham số hình thức
Là tham số mà ta ghi trong nguyên mẫu hay khai báo hàm và không phải là một biểu thức. tham số hình thức có thể là biến thường, con trỏ hoặc với lập trình C ta còn có thể khai báo dưới dạng tham biến.

VD:     void tinh (int KQ)void tinh (int *KQ)
{}{}
·      Tham số thực
Là giá trịta ghi sau khi gọi hàm và đó có thể là một biểu thức. Tham số thực được chia 2 loại.
·        Tham chiếu :tham số thực ta truyền dạng con trỏ hay địa chỉ, tham chiếu có thể ghi nhận lại những kết quả vừa tính toán trong khi hàm kết thúc.
·        Tham trị :tham số thựcmà ta truyền vào cho hàm dạng biến, tham trị không bảo lưu lại những thay đổi giá trị của nó được tính toán trong hàm. Sau khi hàm kết thúc
7.2. Phạm vi biến, mảng
v Biến :
·        Biến toàn cục:
Là biến được khai báo bên ngoài hàm, là biến được sử dụng mọi nơi trong chương trình. Biến toàn cục khá đặc biệt vì nó cos theer nhận các giá trị thay đổi trên hàm, có thể tác dụng với các chương trình theo sau nó.

·        Biến cục bộ :
Là biến được khai báo bên trong thân hàm hay tại tham số của hàm và nó chỉ tồn tại khi hàm hoạt động, khi hàm kết thuc biến sẽ được giải phóng và không tồn tại nữa.
Các biến cục bộ của các hàm riêng biệt có thể đặt tên giống nhau tùy ý, nhưng các biến cục bộ của các hàmkhông được trùng tên với biến toàn cục.
v Mảng :
Ta có các đặc điểm của mảng cục bộmảng toàn cục tương tự với biến.
7.3. Lời gọi hàm
Thường việc gọi hàm bao gồm : Gọi tên của hàm đồng thời truyền các đối số (hằng, biến, biểu thức) cho các tham số theo đúng thứ tự đã được khai báo trong hàm.
Do có 2 dạng hàm: đó là hàm có giá trị trả vềhàm không có giá trị trả về nên ta có lời gọi hàm cho 2 loại hàm này cũng có khác nhau chút xíu.
v Hàm có giá trị trả về: int tinh (unsigned char x) {}

Cần có một biến tạo trước để nhận giá trị trả về từ hàm.
Cú pháp gọi hàm:        intx;    x= <tên hàm>(<đối số>);=>  x=tinh (10);

v Hàm không có giá trị trả về: void tinh (unsigned char x) {}

Cú pháp gọi hàm:      <tên hàm>(<đối số>);=>tinh (10);
7.4. Cấu trúc chương trình trong C
7.4.1. Cách khai báo thư viện, lệnh dịch trong  C
v Để chèn tệp, các thư viện vào chương trình nguồn ta sử dụng cú pháp :
·        #include<tên thư viện.h>    // ý nghĩa: Tìm tới thư viện nguồn trong CS1/INC ổ cài đặt.
·        #include“tên thư viện.h”     // ý nghĩa: Tìm thư viện ngay tại forder khởi tạo trước, sau đó mới tìm đến nguồn.

v Định nghĩa Macro, xóa bỏ định nghĩa macro
Cú pháp định nghĩa: #define
VD :                      #defineMAX    100

Cú pháp hủy định nghĩa:#undef
VD:                                   #defineSIX6
                                           #undefSIX     6
#defineSIX     6

v Các lệnh chỉ thị biên dịch trong các thư viên.
·           Lệnh IF , endif :
o   #ifbiểu thức hằng
đoạn chương trình
#endif
o   #ifbiểu thức hằng
đoạn chương trình 1
#else
đoạn chương trình 2
#endif
o   #ifbiểu thức hằng 1
   đoạn chương trình 1
#elifbiểu thức hằng 2
   đoạn chương trình 2
#elifbiểu thức hằng n
   đoạn chương trình n
[
 #else
  Đoạn chương trình n+1
] => Nếu có
#endif
·           Lệnh :
#ifdef - #endif=> Biên dịch nếu đã được định nghĩa
#ifndef#endif=> Biên dịch nếu chưa được định nghĩa
VD:
#ifdeften_macro
    đoạn chương trình
#endif

Nếu ten_macrođã được định nghĩa bởi  #define thì trình biên dịch C sẽ dịch đoạn chương trình nằm giữa  #ifdefvà  #endif.  Ngược lại bỏ qua. Các trường hợp của if cũng tương tự.
v Cấu trúc 1 chương trình trong C
1.      Khai báo thư viện
2.      Định nghĩa biến, hằng (nếu có)
3.      Có hai cách viết chương trình đến bước 3 này :
v   Cách 1 :
·      Khai báo nguyên mẫu hàm con
·      Khai báo hàm chính
·      Khai báo hàm con đầy đủ
v   Cách 2 :
·      Khai báo hàm con đầy đủ
·      Khai báo hàm chính
VIII. Các hệ đếm trong C.
Tôi sẽ giới thiệu khái quát qua về một số các hệ thống số dùng phổ biến trong C:
8.1. Hệ thập phân :
Là hệ cơ số 10 gồm 10 chữ số :
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Hệ thập phân là 1 hệ thống theo vị trí vì giá trị 1 chữ số phụ thuộc vị trí của nó
VD:   345
3 : Biểu thị hằng trăm mang giá trị lớn nhất (MSD)
4 : Biểu thị hàng chục
5 : Biểu thị hàng đơn vị, mang giá trị nhỏ nhất (LSD)
Với 1 số thập phân lẻ, ta dùng dấu chấm thập phân để chia phần nguyênphần phân số.
VD :  435.35
= 4.102 + 3.101 + 5.100 + 3.10-1 + 5.10-2
= > 1 số thập phân tổng của các tíchgiữa các giá trị của chữ sốvới giá trị vị trí tương ứng số đó.
8.2. Hệ nhị phân
Trong hệ thống số, hệ nhị phân chỉ có 2 giá trị số 01. Nhưng có thể biểu diễn bất kì đại lượng nào mà hệ thập phânvà các hệ thống số khác có thể biểu diễn được. Tuy nhiên nhiên có nhược điểm đó là hệ nhị phânlà ngôn ngữ máy nên để hiểu được ý nghĩa của nó cần có những quy tắc nhất định, việc biểu diễn một đại lượng nhất định cũng cồng kềnh gây khó khăn cho người sử dụng.
Hệ nhị phân cũng là hệ thống sô theo vị trí. Mỗi nhị phânđều có giá trị riêng, tức dạng số, là lũy thừa của 2. Với số nhị phân lẻ ta cũng dùng dấu chấm thập phân để cách phần nguyên phần lẻ.
1 con số trong số nhị phân được gọi là 1 bit, bít đầu hàng tận cùng bên tráigiá trị cao nhất, bít cuối hàng tận cùng bên phảigiá trị nhỏ nhất
VD:
1100 = 1.23 + 1.22 + 0.21 + 0.20
11.01= 1.21 + 1.20 + 0.2-1 + 1.2-2
8.3. Hệ thập lục phân
Là hệ sử dụng cơ số 16, nghĩa là có 16 chữ, số tổng hợp:  Gồm: 0->96 chữ cái :A, B, C, D, E, F.
Một số trong hệ cơ số 16 biểu diễn 1 nhóm 4 số nhị phân.






Mọi thắc mắc vui lòng liên hệ qua:
Facebook: Rid HaUI
Gmail: dienturid@gmail.com 

Thứ Sáu, 27 tháng 3, 2015

Con trỏ Ngôn Ngữ C

GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH C

Chào các bạn, chúng ta lại cùng nhau tiếp tục loạt bài 3 với ngôn ngữ lập trình C. Trong bài 3 này như đã nói ở bài trước tôi sẽ giới thiệu tới các bạn 2 vấn đề đó là con Trỏmảng trong C.
V. Con trỏ
5.1.  Giới thiệu qua về kiến trúc máy tính
Bộ nhớ RAM chứa rất  nhiều ô nhớ, mỗi ô nhớ có kích thước 1 byte.
RAM dùng để chứa một phần hệ điều hành, các lệnh chương trình, các dữ liệu …
Mỗi ô nhớ có địa chỉ duy nhất và địa chỉ này được đánh số từ 0 trở đi.
Ví dụ :
·        RAM 512 MB được đánh địa chỉ từ 0 đến 229-1
·        RAM 2G được đánh địa chỉ từ 0 đến 231-1
Quá trình xử lí của trình biên dịch:
·        Dành riêng một vùng nhớ với địa chỉ duy nhất để lưu biến đó.
·        Liên kết địa chỉ ô nhớ đó với tên biến.

·        Khi gọi tên biến, nó sẽ truy xuất tự động đến ô nhớ đã liên kết với tên biến

5.2. Con trỏ

Là một biến dùng để chứa địa chỉ vì địa chỉ có nhiều loại nên con trỏ cũng có nhiều kiểu giá trị tương ứng.
v Cách khai báo :
·        C1 :  <kiểu dữ liệu>*<tên biến con trỏ>;

Ví dụ:



·        C2 : Sử dụng từ khóa typedef
Typedef  <kiểu dữ liệu>    *<tên kiểu con trỏ>;
<tên kiểu con trỏ><tên biến con trỏ>;

Ví dụ:


Khi mới khai báo, biến con trỏ được đặt ở địa chỉ nào đó (không biết trước). Nó chứa giá trị không xác định và trỏ đến vùng nhớ không biết trước.
v Đặt địa chỉ của biến vào con trỏ (toán tử &)
<tên biến con trỏ>= &<tên biến>;
Ví dụ:

v Truy xuất đến ô nhớ mà con trỏ, trỏ đến
Con trỏ chứa một số nguyên địa chỉ, vùng nhớ mà nó trỏ đến sử dụng toán tử *
Ví dụ :


5.3. Sử dụng con trỏ
Trong biểu thức ta có thể sử dụng tên con trỏ hoặc dạng khai báocủa nó.
v Sử dụng tên con trỏ :
Con trỏ là một biến nên trong biểu thức nếu nó xuất hiện thì giá trị của nó sẽ được sử dụng trong biểu thức này. Trong trường hợp sử dụng tên thì giá trị con trỏ là giá trị của địa chỉ biến nào đó mà con trỏ, trỏ tới.

Vi dụ :
int a , *P;
P = &a;
b = a + P;    với P tương đương &a

Cũng giống như các biến khác, nội dung của con trỏ có thể thay đổi do đó ta có thể thay đổi được địa chỉ biến mà con trỏ , trỏ tới.

VD : Con trỏ P chứa địa chỉ phần tử mảng A[i] sau khi thực hiện ++P nó sẽ chứa địa chỉ phần tử mảng A[i+1]

v Sử dụng khai báo của con trỏ :
Con trỏ ngoài việc thay đổi địa chỉ biến dựa vàotên. Nó còn thay đổi được giá trị của biến đó nhờ sử dụng khai báo.

Ví dụ :
int x,y;
int *Px, *Py;
int b;

Px=&x;
Py=&y;

Ta sẽ có cách viết x hay *Pxlà tương đương, hay y*Py cũng như vậy
y=3*x + b;
y=3*(*Px) + b;
*Py=3*(*Px) + b;

VI. Mảng
Là một kiểu dữ liệu có cấu trúc do người lập trình định nghĩa.
Biểu diễn 1 tập hợp gồm nhiều biến có cùng kiểu dữ liệu và cùng tên. Khi đó mỗi phần tử của mảng sẽ được truy xuất thông qua chỉ số.
A[i] :Trong đó A tên mảng, ichỉ số mảng (có giá trị kiểu nguyên int)
6.1. Cách khai báo
Có 2 cách khai báo mảng :
v Cách 1: Tường minh

<kiểu dữ liệu><tên biến mảng>[<số phần tử>];
<kiểu dữ liệu><tên biến mảng>[<N1>][<N2>]…[<Nn>];

Với <N1>, …, <Nn> : Là số lượng phần tử mỗi chiều.
Ví dụ:


v Cách 2: Không tường minh

Typedef<kiểu dữ liệu><tên kiểu mảng>[<số phần tử>];
Typedef<kiểu dữ liệu><tên kiểu mảng>[<N1>] … [<Nn>];

<tên kiểu mảng><tên biến  mảng>;

Ví dụ:

6.2. Địa chỉ mảng
Chỉ cho phép lấy địa chỉ mảng một chiều chứ không cho phép lấy địa chỉ mảng nhiều chiều.
Cú pháp :      & tên biến[i];
Ví dụ :     &a[6];
v Chú ý: Tên mảng biểu thị địa chỉ đầu mảng.
Ví dụ :
a=&a[0];
= > a + i <=>&a[i];

Do đó có thể kết luận tên mảng là một hằng địa chỉ
Như vậy chúng ta đã đi xong khái quát cơ bản về con trỏ và mảng trong C. Ở đây tôi đã giản hóa tối đa tính phức tạp. Chỉ giới thiệu cơ bản nhất đến để các bạn tham khảo. Con trỏ và mảng trong lập trình C khá quan trọng và đánh giá là phức tạp nhất. Tuy nhiên trong lập trình C nhúng cho VĐK chúng ta cũng không quá lo lắng về điều này. Trong bài cuối cùng tôi sẽ giới thiệu đến các bạn về hàm, cấu trúc chương trình cơ bản trong C và các hệ thống số trong C (thập phân, nhị phân, thập lục phân …v…v..)
Cám ơn các bạn đã đón xem!
Mọi ý kiến thắc mắc các bạn có thể gửi qua địa chỉ gmail, hoặc số điện thoại cung cấp từ trang chủ của Blog hoặc comment trực tiếp phía dưới.

Nếu copy bài mong bạn đọc để lại nguồn, xin cảm ơn !





Mọi thắc mắc vui lòng liên hệ qua:
Facebook: Rid HaUI
Gmail: dienturid@gmail.com

previous home