Ví dụ: "Turbo C", "Ngôn ngữ C++ \n\r" Một hằng chuỗi được lưu trữ tận cùng bằng một ký tự Nul \0, ví dụ chuỗi "Turbo C" được lưu trữ trong bộ nhớ như sau: Cách định nghĩa hằng sử dụn
Trang 12 Ngôn ngữ lập trình C
Bài 1: Tổng quan về ngôn ngữ lập trình C
I Sử dụng phần mềm lập trình
1 Borland C
2 Dev-C++
3 Visual studio: C#
Trang 24 Ngôn ngữ lập trình C
II Giới thiệu ngôn ngữ lập trình C
Là những từ có một ý nghĩa hoàn toàn xác định
Asm, char, do, int, float, for, do, While,…
Tên
Dùng để xác định các đại lượng khác nhau trong một chương trình
Bắt đầu bằng chữ cái hoặc gạch nối
Độ dài cực đại mặc định là 32
2 Các kiểu dữ liệu cơ sở trong C
Kiểu số ký tự (char)
Kiểu số nguyên (int)
Kiểu dấu phẩy động (chính xác đơn (float),
chính xác kép (double))
Kiểu void
Trang 36 Ngôn ngữ lập trình C
2.1 Kiểu ký tự (char)
Một giá trị kiểu ký tự (char) chiếm 1 byte trong bộ
nhớ và biểu diễn một ký tự thông qua bảng mã ASCII
Trong ngôn ngữ C cung cấp hai kiểu ký tự (char) là
signed char và unsigned char
Phạm vi Số ký tự Kích thước
signed char -128 127 1 byte
unsigned char 0 255 1 byte
Ví dụ : char ch, ch1;
ch= ‘a’ ; ch1= 97;
Trang 48 Ngôn ngữ lập trình C
2.2 Kiểu số nguyên (int)
Kiểu số nguyên trong C gồm các kiểu sau:
Kiểu Phạm vi biểu diễn Kích thước
int -32768 -> 32767 2 byte
Unsigned int 0 -> 65535 2 byte
2.3 Kiểu số thực hay còn gọi là kiểu dấu phẩy động
Kiểu Phạm vi biểu diễn Số chữ số
có nghĩa Kích thướcfloat 3.4-38E -> 3.4E+38 7-8 4 byte
double 1.7E-308 -> 1.7E+308 15-16 8 byte
long
double 3.4E-4932 -> 1.1E+4932 17-18 10 byte
Trang 510 Ngôn ngữ lập trình C
3 Hằng và biến
3.1 Hằng:
Khái niệm: hằng là giá trị bất biến trong chương
trình không thay đổi, không biến đổi về mặt giá trị
Các loại hằng được sử dụng trong C tương ứng với
nguyên hay kiểu thực
Hằng nguyên: Giá trị chỉ bao gồm các chữ số, dấu +,
- được lưu trữ theo kiểu int Ví dụ: 12,-12
Nếu giá trị vượt quá miền giá trị của int hoặc có ký
tự l (hay L ) theo sau giá trị thì lưu theo kiểu long int
Ví dụ: 43L hoặc 43l là hằng nguyên lưu theo kiểu
long int
Hằng thực: Trong giá trị có dấu chấm thập phân,
hoặc ghi dưới dạng số có mũ, và được lưu theo kiểu
Trang 612 Ngôn ngữ lập trình C
Hằng ký tự
Một hằng kiểu ký tự được viết trong dấu ngoặc đơn (' )
như 'A' hoặc 'z'
Hằng ký tự 'A' thực sự đồng nghĩa với giá trị nguyên
65, là giá trị trong bảng mã ASCII của chữ hoa 'A' (Như
vậy giá trị của hằng chính là mã ASCII của nó) Ðối với
một vài hằng ký tự đặc biệt, ta cần sử dụng cách viết
thêm dấu \ , như '\t' tương ứng với phím tab:
Hằng ký tự có thể tham gia vào phép toán như mọi số
Trang 714 Ngôn ngữ lập trình C
Hằng chuỗi
Là chuỗi ký tự nằm trong cặp dấu nháy kép " " Các ký
tự này cũng có thể là các ký tự được biểu diễn bằng
chuỗi thoát
Ví dụ: "Turbo C", "Ngôn ngữ C++ \n\r"
Một hằng chuỗi được lưu trữ tận cùng bằng một ký tự
Nul (\0), ví dụ chuỗi "Turbo C" được lưu trữ trong bộ
nhớ như sau:
Cách định nghĩa hằng sử dụng trong chương trình
Với các giá trị hằng thường được dùng trong một
chương trình ta nên định nghĩa ở đầu chương trình
(sau các dòng khai báo những thư viện chuẩn) theo cú
pháp:
#define <tên hằng> <giá trị>
Ví dụ: #define PI 3.1415
Trang 816 Ngôn ngữ lập trình C
3.2 Biến
- Cách khai báo: Mỗi biến trong chương trình đều phải
được khai báo trước khi sử dụng với cú pháp khai:
Kiểu dữ liệu <danh_sách_tên_biến>;
Lưu ý: nếu có nhiều tên biến thì giữa các tên biến
phải có dấu , để ngăn cách
Ví dụ: int a,b; float x;
- Khởi đầu cho các biến
Ngay trên dòng khai báo ta có thể gán cho biến
một giá trị Việc làm này gọi là khởi đầu cho biến
Ví dụ: int a,b=6,d=1;
Cách truy xuất đến địa chỉ của biến
Một số hàm của C dùng đến địa chỉ của biến ví dụ
như hàm scanf Ðể nhận địa chỉ của biến dùng
toán tử: &
Ví dụ: &tên_biến -&a : địa chỉ của biến a
Trang 918 Ngôn ngữ lập trình C
3.3 Cấu trúc tổng quát của chương trình C
Một chương trình C chuẩn gồm có các thành
phần sau:
1. Các chỉ thị tiền biên dịch
2. Khai báo các kiểu dữ liệu mới
3. Khai báo hằng, khai báo biến
4. Khai báo hàm
5. Chương trình chính
1 Chỉ thị tiền biên dịch (xử lý): giúp trình biên dịch thực
hiện một số công việc trước khi thực hiện một số công
việc trước khi thực hiện biên dịch chính thức
VD: #include <stdio.h>;
#include <conio.h>;
2 Khai báo kiểu dữ liệu mới: dung từ khoá typedef
VD: typedef int songuyen;
typedef float mang[10];
3 Khai báo hằng và biến: khai báo các hằng số và biến
dùng trong chương trình
4 Khai báo hàm: khai báo các hàm tự viết
Trang 1020 Ngôn ngữ lập trình C
/* Chương trình in ra dòng chữ ngôn ngữ lập trình trên
màn hình */
# include <stdio.h>
main () /* Ham chinh */
{
printf(" \n ngon ngu lap trinh");
/*xuong dong in chu ngon ngu lap trinh*/
}
/* Chương trình tính chu vi và diện tích hình tròn, biết bán kính r
là một hằng số có giá trị =3.1 */
# include <stdio.h> /* khai báo thư viện hàm nhập xuất chuẩn */
# include <math.h> /* khai báo thư viện hàm toán học */
#include <conio.h>
#define r 3.1
main ()
{
float cv,dt; /* khai bao bien chu vi va dien tich kieu so thuc */
cv=2*r*M_PI; /* tinh chu vi */
dt=M_PI*r*r; /* Tinh dien tich */
printf("\nChu vi = %10.2f\nDien tich = %10.2f",cv,dt);
/* In ket qua len man hinh */
getch(); /* Tam dung chuong trinh */
Trang 1122 Ngôn ngữ lập trình C
*Chương trình này minh họa cách vừa khai báo, vừa khởi
đầu một biến trong C */
#include <stdio.h>
main()
{
char ki_tu = 'a'; /* Khai báo/khởi đầu kí tự */
int so_nguyen = 15; /* Khai báo khởi đầu số nguyên */
float so_thuc = 27.62; /* Khai báo/khởi đầu số thực*/
printf("%c la mot ki tu.\n",ki_tu);
printf("%d la mot so nguyen.\n",so_nguyen);
printf("%f la mot so thuc.\n",so_thuc);
đối số 1, đối số 2 : là biểu thức cần in kết quả ra màn hình
<dòng điểu khiển> là một hằng xâu ký tự bao gồm 3 loại:
- Ký tự diều khiển việc xuống dòng tiếp theo ‘\n’
Bài 2 Các hàm vào ra dữ liệu
Trang 1224 Ngôn ngữ lập trình C
Đặc tả kiểu nguyên đối với biểu thức có giá trị kiểu số
nguyên %[n]d
Trong đó n là số nguyên xác định độ rộng tối thiểu dành
cho giá trị biểu thức in ra màn hình
Đặc tả kiểu số thực %[n][.m]f
Trong đó m là số chữ số sau dấu phẩy, n là một số
nguyên xác định độ rộng tối thiểu trên màn hình cho giá
trị của biểu thức:
VD:
%c : in một ký tự có mã ASCII tương ứng
%[n]d : in một số nguyên với chiều dài tối thiểu là n
%[n]ld: in một số nguyên (long int)
%[n.m]f : in một số thực vối chiều dài n và lấy m số thập
Trang 1326 Ngôn ngữ lập trình C
Các ký tự điều khiển và ký tự đặc biệt
\n : Nhảy xuống dòng kế tiếp canh về cột đầu tiên
\t : Canh cột tab ngang
\r : Nhảy về đầu hàng, không xuống hàng
\a : Tiếng kêu bip
Trang 1428 Ngôn ngữ lập trình C
char chuoi[]="mon ngon ngu lap trinh";
main () /* Ham chinh */
{
printf(" Ngay hom nay hoc %s ",chuoi);
}
Trang 1530 Ngôn ngữ lập trình C
/* Chương trình ví dụ hàm printf : xuất kết quả 1 phép tính*/
# include <stdio.h>
float a=90.9,b=9.1;
main () /* Ham chinh */
{
printf(" ket qua cua so %4.2f + so %4.2f = %4.2f ",a,b,a+b);
// ket qua cua so 90,90 + so 9,10=100,00
Dòng điều khiển: tương tự như lệnh printf
&đối số 1, &đối số 2: là địa chỉ của biến trong bộ nhớ
Trang 1632 Ngôn ngữ lập trình C
Viết chương trình nhập vào 2 số thập phân a
và b, sau đó xuất ra màn hình kết quả phép
toán:a + b, a x b.
Trang 1734 Ngôn ngữ lập trình C
Hiển thị một xâu ký tự s lên màn hình, sau khi in xong thì
con trỏ sẽ được chuyển xuống dòng
Trang 1836 Ngôn ngữ lập trình C
II Hàm xuất nhập chuẩn trong thư viện <conio.h>
được ấn thì nhận ngay ký tự đó mà không cần phải
enter như các hàm nhập từ stdio.h
- Hàm getche() cho hiện ký tự lên màn hình còn getch()
thì không
- Kết quả trả về của hàm là ký tự được ấn trên bàn phím
Xuất ký tự có màu
Cú pháp : cprintf giống hàm printf
Ý nghĩa: in ra ký tự có màu được ấn định bởi hàm
+ Nhận nội dung trực tiếp từ bộ đệm bàn phím Vì
vậy với hàm cscanf ta cũng phải khử ký tự \n trong
Trang 1938 Ngôn ngữ lập trình C
III.Một số hàm thao tác trên màn hình (không có trong
DEV C)
Có tác dụng xóa toàn bộ m àn hình và sau khi xóa con trỏ
sẽ ở vị trí góc phía bên trái
Tương đương hàm: system(“cls”); (thư viện windows.h)
Hàm đặt tọa độ con trỏ: gotoxy(int x, int y);
Đặt con trỏ tại vị trí x, y
Hàm đặt mầu nền textbackground
void textbackground(int color);
Đặt mầu nền Color là một biểu thức nguyên có giá trị
từ 0 đến 7 tương ứng với một trong 8 hằng số màu đầu
tiên của bảng mầu văn bản
Hàm đặt mầu chữ textcolor
void textcolor(int newColor);
Lựa chọn màu ký tự mới newColor.Trong đó newColor
là một biểu thức nguyên có giá trị từ 0 đến 15 tương ứng
với một trong các hằng số màu của bảng mầu văn bản
Trang 20/*Chương trình minh họa hàm Hàm cprintf() và Hàm cscanf() * Borland c
cprintf("\nNhap mot so: ");
cscanf("%d%*c",&a);/*Nhập số a, nếu không có %*c sẽ trôi lệnh cscanf
diễn đạt một công thức toán học nào đó
Biểu thức trong C gồm có biểu thức toán học và
biểu thức logic
Biểu thức toán học bao gồm các phép toán số học và các
hằng, các biến, các hàm
Biểu thức logic bao gồm các biến, hằng, hàm và phép
toán logic (!: phép phủ định, &&: phép và, || : phép
hoặc)
Trang 2142 Ngôn ngữ lập trình C
>= Có lớn hơn hay bằng không? a>=b
<= Có nhỏ hơn hay bằng không? a<=b
Trang 2244 Ngôn ngữ lập trình C
Các phép toán quan hệ có độ ưu tiên nhỏ hơn
so với ! nhưng lớn hơn so với phép && và ||
Trang 23Phép toán tăng giảm
Toán tử + + : dùng để tăng giá trị của các biến nguyên
Khi các toán tử + +, đứng trước toán hạng thì giá trị
của toán hạng được tăng hoặc giảm trước khi sử dụng và
ngược lại nếu toán tử ++, đứng sau toán hạng thì toán
hạng được tăng hay giảm sau khi thực hiện
Ví dụ: n=5
Chuyển đổi kiểu giá trị
Việc chuyển đổi kiểu giá trị trong C thường diễn ra tự
động trong trường hợp sau:
Trong biểu thức có các toán hạng khác kiểu
Khi gán một giá trị kiểu này cho một giá trị kiểu khác
Ngoài ra ta có thể dùng phép chuyển kiểu để ép kiểu dữ
liệu sang kiểu khác
(type) biểu_thức
Ví dụ: (float) (a+b)
Muốn có kết quả chính xác trong phép chia:
Trang 2448 Ngôn ngữ lập trình C
Chú ý:
- Khi chuyển đổi kiểu trong biểu thức thì đối với toán
hạng có kiểu thấp hơn sẽ được nâng thành kiểu cao hơn
trước khi thực hiện phép toán và kết quả thu được sẽ có
kết quả theo kiểu cao hơn
Kiểu int và kiểu long thì int > long
int và float thì int -> float
Float và double thì float -> double
Kiểu int có thể chuyển thành float và ngược lại
Ví dụ: 1.5*(11/3)=4.5
1.5*11/3=5.5 (11/3)*1.5=4.5
Chú ý:
- Chuyển đổi kiểu thông qua phép gán :Giá trị của vế
phải được chuyển sang kiểu vế trái đó là kiểu của kết
quả
Kiểu int < > float
Kiểu double -> float
Kiểu Long -> int
Ví dụ: int n;
n=15.6 ; //giá trị của n là 15
Trang 25Bài tập
Bài 1: Viết chương trình nhập dữ liệu cho các
biến kiểu int, long int, float, chuỗi, sau đó hiển
thị ra màn hình.
Bài 2:Viết chương trình tìm xy
Hàm luỹ thừa: pow(x,y);
Bài 3: Viết chương trình tính c = a/b, với a và
b là hai số nguyên, c số thực Nếu ta ép kiểu a
sang thực thì kết quả thế nào?
50 Ngôn ngữ lập trình C
Bài 4: Cấu trúc điều khiển
Câu lệnh, khối lệnh
Câu lệnh: mỗi câu lệnh thực hiện một công việc và
được kết thúc bởi dấu ;
Khối lệnh: là tập hợp các câu lệnh bắt đầu bằng dấu
“{“ và kết thúc bằng dấu “}”
Trang 2652 Ngôn ngữ lập trình C
I Cấu trúc điều khiển if
1 Cấu trúc if dạng 1
Ý nghĩa: bt là biểu thức lôgic, s là lệnh đơn hoặc lệnh
phức nếu bt nhân giá trị true thì thực hiện s, ngược lại s
được bỏ qua
2 Cấu trúc if dạng 2
Ý nghĩa: bt là biểu thức lôgic, nếu bt nhận giá trị true
thì thực hiện s bỏ qua s1, ngược lại nếu bt nhận giá trị
false thì thực hiện s1 bỏ qua s(s và s1 có thể là lệnh đơn
hoặc lệnh phức)
Chú ý : trong C cho phép sử dụng các cấu trúc if lồng
nhau để giải quyết bài toán
3 Bài tập
Bài 1: Nhập 2 số thực a, b từ bàn phím Tìm và in ra
màn hình số lớn nhất và số bé nhất
Bài 2: Viết chương trình nhập điểm thi từ bàn phím và
hiển thị kết quả: kém nếu điểm từ 0 đến 3; Yếu nếu
điểm là 4; Trung bình nếu điểm từ 5 đến 6; Khá nếu
điểm từ 7 đến 8; Giỏi nếu điểm từ 9 đến 10
Trang 2754 Ngôn ngữ lập trình C
II Cấu trúc rẽ nhánh switch
}
Ý nghĩa:
bt: là biểu thức toán học có giá trị kiểu nguyên
ni (i=1 k): là các số kiểu nguyên, kiểu hằng ký tự, hoặc
biểu thức
si(i=1 k): là các lệnh đơn hoặc lệnh phức
[default: s(k+1)]: là phần tuỳ chọn có thể có hoặc không
Trang 2856 Ngôn ngữ lập trình C
Hoạt động: lệnh switch phụ thuộc vào giá trị của biểu
thức bt viết sauswitch, nếu:
Giá trị bt = nithì thực hiện câu lệnh saucase ni
Khi giá trị biểu thức khác tất cả các ni thì thực hiện câu
lệnh sau default nếu có, hoặc thoát khỏi câu lệnh
switch
Khi chương trình đã thực hiện xong câu lệnh của case
ni nào đó thì nó sẽ thực hiện luôn các lệnh thuộc case
bên dưới nó mà không xét lại điều kiện Vì vậy, để
chương trình thoát khỏi lệnh switch sau khi thực hiện
xong một trường hợp, ta dùng lệnh break
3 Bài tập
Viết chương trình nhập điểm thi từ bàn phím và hiển
thị kết quả: kém nếu điểm từ 0 đến 3; Yếu nếu điểm
là 4; Trung bình nếu điểm từ 5 đến 6; Khá nếu điểm
từ 7 đến 8; Giỏi nếu điểm từ 9 đến 10
Trang 2958 Ngôn ngữ lập trình C
III Câu lệnh lặp for
bt2: là biểu thức logic, giá trị của biểu thức lôgic này
quyết định vòng lặp tiếp tục hay kết thúc
bt3: thường là lệnh gán có tác dụng làm thay đổi giá trị
của biến điều khiển
Hoạt động:
Bước 1: Thực hiện bt1
Bước 2: Tính toán, xác định giá trị củabt2
Bước 3: Nếu bt2 có giá trị falsethì thoát khỏi vòng lặp
Ngược lạibt2có giá trịtruethì s được thực hiện
Bước 4: sau khi thực hiện s sẽ thực hiệnbt3 và quay lại
bước 2
Nhận xét:
bt1: chỉ được thực hiện duy nhất một lần khi bắt đầu
vòng lặp
Trang 3060 Ngôn ngữ lập trình C
Chú ý khi sử dụng vòng lặp for
bt1, bt2, bt3 đều có thể vắng mặt nhưng vẫn phải giữ lại
dấu( ; )
Trường hợp đặc biệt bt2 không có thì luôn được xem là
nhận giá trị true, muốn thoát khỏi vòng lặp phải dùng
lệnh break, gotohoặcreturn
Có thể dùng cấu trúc các vòng for lồng nhau
Khi gặp lệnh break thì chương trình sẽ thoát khỏi vòng
forsâu nhất còn chứa lệnhbreak
Trong vòng for có thể sử dụng lệnh continue để chuyển
tới chu trình mới của vòng lặp
2 Bài tập
Bài 1: Viết chương trình tính tổng của n số đầu tiên của
dãy số sau:
S = 1+1/2+1/3+1/4+ +1/n
Bài 2: Viết chương trình đếm và in ra số lượng các số
đoạn 1 đến 100
Bài 3: Có 3 loại giấy bạc 100đ, 200đ, 500đ Viết
chương trình in các phương án kết hợp các loại giấy bạc
trên cho ra 10000đ
Trang 3162 Ngôn ngữ lập trình C
IV Câu lệnh while
- Bước 1: Xác định giá trị của bt Nếu giá trị củabt= true
thì chuyển sang bước 2, ngược lại thì thoát khỏi vòng
lặp
- Bước 2: Thực hiệns sau đó quay về bước 1 (Lệnh s có
thể được thực hiện nhiều lần hoặc không được thực
hiện lần nào nếubt =falsengay từ đầu)
V Câu lệnh do while
- Bước 2: Xác định giá trị của bt Nếu giá trị của bt =
true thì chuyển sang bước 1, ngược lại thì thoát khỏi
Trang 3264 Ngôn ngữ lập trình C
Chú ý : trong câu lệnh lặp while ta có thể dùng câu lệnh
break để thoát khỏi vòng lặp theo ý muốn
Mảng được hiểu là một tập hợp các giá trị có
cùng kiểu dữ liệu nằm liên tiếp nhau trong bộ
nhớ máy tính
Mảng được coi như một biến mảng và tên
mảng được đặt theo quy tắc đặt tên biến