Vi Điều Khiển

Chào mừng các bạn đến với thế giới của Vi điều khiển!

--welcome to the world of microcontrollers^^ --

Điện Tử Cơ Bản

nơi khởi đầu

Lập Trình

linh hồn của phần cứng

Thứ Ba, 19 tháng 6, 2012

[Tự học Lập trình C] Bài 7: Điều Kiện [Lý Thuyết]


Bài 7: Điều kiện [Lý Thuyết]


Mục tiêu:

Kết thúc bài  học này, bạn có thể:

Ø  Giải thích về Cấu trúc lựa chọn
§  Câu lệnh if
§  Câu lệnh if – else
§  Câu lệnh với nhiều lệnh if
§  Câu lệnh if lồng nhau
§  Câu lệnh switch.

Giới thiệu

Các vấn đề được đề cập từ đầu đến nay cho phép chúng ta viết nhiều chương trình. Tuy nhiên các chương trình đó có nhược điểm là bất cứ khi nào được chạy, chúng luôn thực hiện một chuỗi các thao tác giống nhau, theo cách thức giống nhau. Trong khi đó, chúng ta thường xuyên chỉ cho phép thực hiện các thao tác nhất định nếu nó thỏa mãn điều kiện đặt ra.

7.1. Câu lệnh điều kiện là gì ?

Các câu lệnh điều kiện cho phép chúng ta thay đổI luồng chương trình. Dựa trên một điều kiện nào đó, một câu lệnh hay một chuỗI các câu lệnh có thể được thực hiện hoặc không.
Hầu hết các ngôn ngữ lập trình đều sử dụng lệnh if để đưa ra điều kiện. Nguyên tắc thực hiện như sau nếu điều kiện đưa ra là đúng (true), chương trình sẽ thực hiện một công việc nào đó, nếu điều kiện đưa ra là sai (false), chương trình sẽ thực hiện một công việc khác.

Ví dụ 7.1:
Để xác định một số là số chẳn hay số lẻ, ta thực hiện như sau:

1.      Nhập vào một số.
2.      Chia số đó cho 2 để xác định số dư.
3.      Nếu số dư của phép chia là 0, đó là số “Chẵn”.
HOẶC
Nếu số dư của phép chia khác 0, đó là số “Lẻ”.

Bước 2 trong giải thuật trên kiểm tra phần dư của số đó khi chia cho 2 có bằng 0 không? Nếu đúng, ta thực hiện việc hiển thị thông báo đó là số chẵn. Nếu số dư đó khác 0, ta thực hiện việc hiển thị thông báo đó là số lẻ.

Trong C một điều kiện được coi là đúng (true) khi nó có giá trị khác 0, là sai (false) khi nó có giá trị bằng 0.


7.2. Các câu lệnh lựa chọn:

C cung cấp hai dạng câu lệnh lựa chọn:

Ø  Câu lệnh if

Ø  Câu lệnh switch


Chúng ta hãy tìm hiểu hai câu lệnh lựa chọn này.

7.2.1 Câu lệnh ‘if’:

Câu lệnh if cho phép ta đưa ra các quyết định dựa trên việc kiểm tra một điều kiện nào đó là đúng (true) hay sai (false).
Các điều kiện gồm các toán tử so sánh và logic mà chúng ta đã thảo luận ở bài 4.
Dạng tổng quát của câu lệnh if:

if  (biểu thức)
Các câu lệnh;

Biểu thức phải luôn được đặt trong cặp dấu ngoặc (). Mệnh đề theo sau từ khoá if là một điều kiện (hoặc một biểu thức điều kiện) cần được kiểm tra. Tiếp đến là một lệnh hay một tập các lệnh sẽ được thực thi khi điều kiện (hoặc biểu thức điều kiện) có kết quả true.

Ví dụ 7.2:
     #include <stdio.h>
     #include <conio.h>
     main()
     {
           int x, y;
           char a = 'y';
           x = y = 0;
           if (a == 'y')
           {
                x += 5;
                printf("The numbers are %d and \t%d", x, y);
           }
           getch();
     }

Kết quả của chương trình như sau:

Thứ Hai, 18 tháng 6, 2012

[Tự học Lập trình C] Bài 6: Nhập và Xuất trong C [Lý Thuyết]


Bài 6:Nhập và Xuất trong C [Lý Thuyết]

Mục tiêu:

Kết thúc bài học này, bạn có thể:

Ø  Hiểu các hàm nhập xuất có định dạng scanf() và printf()
Ø  Sử dụng các hàm nhập xuất ký tự getchar() và putchar().

Giới thiệu

Trong bất kỳ ngôn ngữ lập trình nào, việc nhập giá trị cho các biến và in chúng ra sau khi xử lý có thể đư­ợc làm theo hai cách:

1.   Thông qua phương tiện nhập/xuất chuẩn (I / O).
2.   Thông qua những tập tin.

Trong phần này ta sẽ nói về chức năng nhập và xuất cơ bản. Nhập và xuất (I/O) luôn là các thành phần quan trọng của bất kỳ chương trình nào. Ðể tạo tính hữu ích, chương trình của bạn cần có khả năng nhập dữ liệu vào và hiển thị lại những kết quả của nó.

Trong C, th­ư viện chuẩn cung cấp những thủ tục cho việc nhập và xuất. Th­ư viện chuẩn có những hàm quản lý các thao tác nhập/xuất cũng như các thao tác trên ký tự và chuỗi. Trong bài học này, tất cả những hàm nhập dùng để đọc dữ liệu vào từ thiết bị nhập chuẩn và tất cả những hàm xuất dùng để viết kết quả ra thiết bị xuất chuẩn. Thiết bị nhập chuẩn thông thường là bàn phím. Thiết bị xuất chuẩn thông thư­ờng là màn hình (console). Nhập và xuất ra có thể được định hướng đến tập tin hay từ tập tin thay vì thiết bị chuẩn. Những tập tin có thể được lưu trên đĩa hay trên bất cứ thiết bị lưu trữ nào khác. Dữ liệu đầu ra cũng có thể đư­ợc gửi đến máy in.

6.1    Tập tin tiêu đề <stdio.h>

Trong các ví dụ trước, ta đã từng viết dòng mã sau:

    #include <stdio.h>

Ðây là lệnh tiền xử lý (preprocessor command). Trong C chuẩn, ký hiệu #  nên đặt tại cột đầu tiên. stdio.h là một tập tin và được gọi là tập tin tiêu đề (header).  Nó chứa các macro cho nhiều hàm nhập và xuất được dùng trong C. Hàm printf(), scanf(), putchar() và getchar() được thiết kế theo cách gọi các macro trong tập tin stdio.h để thực thi các công việc tương ứng.

6.2    Nhập và xuất trong C (Input and Output)

Thư viện chuẩn trong C cung cấp hai hàm để thực hiện các yêu cầu nhập và xuất có định dạng. Chúng là:
·        printf() – Hàm xuất có định dạng.
·        scanf() – Hàm nhập có định dạng.

Những hàm này gọi là những hàm được định dạng vì chúng có thể đọc và in dữ liệu ra theo các định dạng khác nhau được điều khiển bởi người dùng. Bộ định dạng qui định dạng thức mà theo đó giá trị của biến sẽ được nhập vào và in ra.

6.2.1 printf()

Chúng ta đã quen thuộc với hàm này qua các phần trước. Ở đây, chúng ta sẽ xem chúng chi tiết hơn. Hàm 
printf() được dùng để hiển thị dữ liệu trên thiết bị xuất chuẩn – console (màn hình). Dạng mẫu chung của hàm này như sau:

         printf("control string", argument list);

Danh sách tham số (argument list) bao gồm các hằng, biến, biểu thức hay hàm và được phân cách bởi  dấu phẩy. Cần phải có một lệnh định dạng nằm trong chuỗi điều khiển (control string) cho mỗi tham số trong danh sách. Những lệnh định dạng phải tương ứng với danh sách các tham số về số lượng, kiểu dữ liệu và thứ tự. Chuỗi điều khiển phải luôn được đặt  bên trong cặp dấu nháy kép“”, đây là dấu phân cách (delimiters). Chuỗi điều khiển chứa một hay nhiều hơn ba thành phần dưới đây :

§  Ký tự văn bản (Text characters) – Bao gồm các ký tự có thể in ra được và sẽ được in giống như ta nhìn thấy. Các khoảng trắng thường được dùng trong việc phân chia các trường (field) được xuất ra.
§  Lệnh định dạng - Định nghĩa cách thức các mục dữ liệu trong danh sách tham số sẽ được hiển thị. Một lệnh định dạng bắt đầu với một ký hiệu % và theo sau là một mã định dạng tương ứng cho mục dữ liệu. Dấu % được dùng trong hàm printf() để chỉ ra các đặc tả chuyển đổi. Các lệnh định dạng và các mục dữ liệu tương thích nhau theo thứ tự và kiểu từ trái sang phải. Một mã định dạng thì cần thiết cho mọi mục dữ liệu cần in ra.
§  Các ký tự không in được – Bao gồm phím tab, dấu khoảng trắng và dấu xuống dòng.

Mỗi lệnh định dạng gồm một hay nhiều mã định dạng. Một mã  định dạng bao gồm ký hiệu % và một bộ định kiểu. Bảng 6.1 liệt kê các mã  định dạng khác nhau được hỗ trợ bởi câu lệnh printf():

Ðịnh dạng
printf()
scanf()
Ký tự đơn (Single Character)
%c
%c
Chuỗi (String)
%s
%s
Số nguyên có dấu (Signed decimal integer)
%d
%d
Số thập phân có dấu chấm động (Floating point)
%f
%f  hoặc %e
Số thập phân có dấu chấm động - Biểu diễn phần thập phân
%lf
%lf
Số thập phân có dấu chấm động - Biểu diễn dạng số mũ
%e
%f  hoặc %e
Số thập phân có dấu chấm động (%f  hoặc %e, con số nào ít hơn)
%g
Số nguyên không dấu (Unsigned decimal integer)
%u
%u
Số thập lục phân không dấu (Dùng “ABCDEF”)
(Unsigned hexadecimal integer)
%x
%x
Số bát phân không dấu (Unsigned octal integer)
%o
%o
Bảng 6.1: Mã định dạng trong printf ()

Trong bảng trên, c, d, f, lf, e, g, u, s, o và x là bộ định kiểu.

Các quy ước in cho các mã định dạng khác nhau được tổng kết trong Bảng 6.2:

Mã định dạng
Quy ước in ấn
%d
Các con số trong số nguyên.
%f
Phần số nguyên của số sẽ được in nguyên dạng. Phần thập phân sẽ chứa 6 con số. Nếu phần thập phân của con số ít hơn 6 số, nó sẽ được thêm các số không (0) bên phải hay gọi là làm tròn phía bên phải.
%e
Một con số bên trái dấu chấm thập phân và 6 con số bên phải giống như %f.
Bảng 6.2: Quy ước in

Bởi vì các ký hiệu %,\ và  được dùng đặc biệt trong chuỗi điều khiển, nếu chúng ta cần in các ký hiệu này lên màn hình, chúng phải được dùng như trong Bảng 6.3:

\\
In ký tự  \
\ “
In ký tự 
%%
In ký tự %
Bảng 6.3: Các ký tự đặc biệt trong chuỗi điều khiển

Bảng dưới đây đưa ra vài ví dụ sử dụng chuỗi  điều khiển và mã định dạng khác nhau.

Số
Câu lệnh
Chuỗi điều khiển
Nội dung mà chuỗi điều khiển chứa đựng
Danh sách tham số
Giải thích danh sách tham số
Hiển thị trên màn hình
1.
printf("%d", 300);
%d
Chỉ chứa lệnh định dạng
300
Hằng số
300
2.
printf("%d", 10+5);
%d
Chỉ chứa lệnh định dạng
10 + 5
Biểu thức
15
3.
printf("Good Morning Mr. Lee.");
Good Morning Mr. Lee.
Chỉ là các ký tự văn bản
Không có (Nil)
Không có
Good Morning Mr. Lee.
4.
int  count = 100;
printf("%d", count);
%d
Chỉ chứa lệnh định dạng
Count
Biến
100
5.
printf("\nhello");
\nhello
Chỉ là các ký tự văn bản và ký tự không in được.
Không có
Không có
Hello
(Trên dòng mới)
6.
#define str "Good Apple"
……..
printf("%s", str);
%s
Chỉ chứa lệnh định dạng
Str
Hằng chuỗi
Good Apple
7.
……..
int count,stud_num;
count = 0;
stud_num = 100;
printf("%d %d\n", count, stud_num);
%d %d
Chỉ chứa lệnh định dạng và trình tự thoát ra
count, stud_num
Hai biến
0, 100
Bảng 6.4 : Chuỗi điều khiển và mã định dạng

Ví dụ 6.1 :
Ðây là một chương trình đơn giản dùng minh họa cho một chuỗi có thể được in theo lệnh định dạng. Chương trình này cũng hiển thị một ký tự đơn, số nguyên và số thực (a single character, integer, và float).

   #include <stdio.h>
   #include <conio.h>
   main()
    {
           int a = 10;
           float b = 24.67892345;
           char ch = 'A';
    
           printf("\nInteger data = %d", a);
           printf("\nFloat Data = %f", b);
           printf("\nCharacter = %c", ch);
           printf("\nThis prints the string");
           printf("%s", "\nThis also prints a string");
            getch();
    }

Kết quả chương trình như sau:

[Tự học Lập trình C] Bài 5: Toán Tử và Biểu Thức [Thực Hành]


Bài 5: Toán Tử và Biểu Thức [Thực Hành]

Mục tiêu:

Kết thúc bài học này, bạn có thể:

Ø  Sử dụng được các toán tử số học, so sánh và luận lý
Ø  Chuyển đổi các kiểu dữ liệu
Ø  Nắm được thứ tự ưu tiên giữa các toán tử.

Các bước trong chương này đã được nghiên cứu kỹ và giải thích chi tiết để chúng ta có thể hiểu rõ và áp dụng chúng một cách hoàn chỉnh.Ta hãy theo các bước cẩn thận.

Phần I - Trong thời gian 1 giờ 30 phút đầu:

Ví dụ 1:
Trong chương này, ta sẽ viết một chương trình tính toán tiền lãi đơn giản (lãi thuần chưa tính tiền vốn vào) khi ta vay tiền.

Công thức để tính toán là p * n * r /100. Ở đây ‘p’ có nghĩa là tiền vốn, ‘n’ là số năm và ‘r’ có nghĩa là tỉ lệ lãi suất.

Chương trình khai báo ba biến số thực ‘float’ có tên là p, n và r. Chú ý rằng, các biến được khai báo trên cùng một dòng mã thì ta dùng dấu phẩy (,) để phân chia chúng với nhau. Mỗi biến trên được gán một giá trị.

Xét dòng mã sau:

printf("\nAmount is: %f", p*n*r/100);


Trong printf() ở trên, chúng ta đã dùng ‘%f’ để hiển thị giá trị của biến kiểu float (số thực), giá trị biến này là p*n*r/100, công thức dùng tính lãi đơn giản được đưa vào trong printf(). Đó là p, nr được nhân với nhau và kết quả được chia cho 100. Như vậy printf() sẽ hiển thị lãi đơn.
Gọi Dev-C++.

5.1 Tính lãi đơn

1. Tạo ra một tập tin mới.
2. Gõ đoạn mã sau:

#include <stdio.h>
#include <conio.h>
void main()
{
     float p, n, r;
     p = 1000;
     n = 2.5;
     r = 10.5;
     printf("\n Amount is: %f", p*n*r/100);
     getch();
}

3. Biên dịch và thực thi chương trình.

Kết quả: