Chương 2 Các yếu tố cơ bản của ngôn ngữ C
Chương 2 - Các yếu tố cơ bản của ngôn ngữ C
Từ vựng trong C Biểu thức Hàm vào/ra dữ liệu chuẩn Các câu lệnh điều khiển
Từ vựng trong C
Tập ký tự Tên Từ khóa Các kiểu dữ liệu Hằng Biến
Từ vựng trong C
Tập ký tự
26 chữ cái hoa: A, B, …, Z 26 chữ cái thường: a, b, …, z 10 chữ số: 0, 1, …9 Các ký tự đồ họa: +, -, *, /, =, !, #, %, ^, &, _, ~, [, ],\, |, ; , :, ‘, “, {, }, ,, ., <, >, ?, (, )
Các ký tự không hiển thị ra màn hình: space, tab,
enter
Từ vựng trong C
Từ khóa
Là những từ dành riêng cho một ngôn ngữ lập trình Một số từ khóa thường dung: const, enum, signed, struct, typedef, unsigned… char, double, float, int, long, short, void case, default, else, if, switch do, for, while break, continue, goto, return
Từ vựng trong C
Tên/Định danh (Identifier)
Một dãy ký tự dùng để chỉ tên một hằng số, hằng ký tự, tên
một biến, một kiểu dữ liệu, một hàm một hay thủ tục.
Quy tắc đặt tên:
Ký tự đầu tiên có thể là chữ cái hoặc dấu gạch dưới _ Các ký tự sau đó (nếu có) có thể là chữ cái, dấu gạch dưới
VD: x1, temp, _bien1 là những tên hợp lệ; 1abc, bai
hoặc số.
1 la những tên không hợp lệ
Từ vựng trong C
Đối tượng dữ liệu: gồm các thuộc tính
Kiểu dữ liệu: chỉ ra loại dữ liệu có thể được lưu trữ Giá trị: hiện đang được lưu trong đối tượng dữ liệu Địa chỉ: vị trí của đối tượng dữ liệu trong bộ nhớ Tên: dùng để xác định đối tượng dữ liệu
Kiểu dữ liệu
Mỗi kiểu dữ liệu có tên và kích thước nhất định. Có miền giá trị xác định
Từ vựng trong C
Kiểu dữ liệu Kiểu ký tự
Tên: char và unsigned char Kích thước: 1 byte Miền giá trị
Kiểu
Phạm vi biểu diễn
Số ký tự
char
-128 đến 127
256
unsigned char
0 đến 255
256
Một ký tự được biểu diễn thông qua bảng mã ASCII
(http://en.wikipedia.org/wiki/ASCII)
Từ vựng trong C
Kiểu dữ liệu Kiểu ký tự
Phân nhóm ký tự: 3 nhóm
Nhóm các ký tự điều khiển: từ 0÷31 và 127 Nhóm các ký tự văn bản: 32÷126 Nhóm các ký tự đồ họa: 128÷255
Từ vựng trong C
Kiểu dữ liệu Kiểu nguyên
short, int, long
Kích thước và phạ vi biểu diễn:
Kiểu Phạm vi biểu diễn Kích thước
int/ signed int -32768 đến 32767 2/4 bytes
unsigned int 0 đến 65535 2/4 bytes
short/ signed short -32768 đến 32767 2 bytes
unsigned short 0 đến 65535 2 bytes
long/ signed long -2147483648 đến 2147483647 4 bytes
unsigned long 0 đến 4294967295 4 bytes
Từ vựng trong C
Kiểu dữ liệu
Kiểu số phẩy động
float, double, long double
Kích thước và phạm vi biểu diễn:
Phạm vi biểu diễn Kích thước Kiểu
float 3.4E-38 đến 3.4E+38 4 bytes
double 8 bytes 1.7E-308 đến 1.7E+308
long
3.4E-4932 đến 1.1E4932 10 bytes
double
Từ vựng trong C
Kiểu dữ liệu
Định nghĩa kiểu dữ liệu mới bằng typedef
Cú pháp:
typedef ;
Ví dụ:
typedef int nguyen
typedef float m50[50]
typedef int m_20x30[20][30]
Từ vựng trong C
Hằng
Là đại lượng mà giá trị của nó không thay đổi trong suốt
quá trình hoạt động của chương trình
Cú pháp khai báo
Ví dụ:
#define
#define MAX 1000
#define PI 3.141593
Hằng số học:
Hằng số nguyên Hằng số thực
Hằng ký tự: ký tự đơn được viết trong dấu nháy đơn Hằng kiểu chuỗi: một dãy các ký tự liên tục được đặt
trong dấu nháy kép
Từ vựng trong C
Biến
Là một đối tượng dữ liệu có giá trị thay đổi trong quá
trình hoạt động của chương trình
Cú pháp khai báo:
;
Ví dụ
Khai báo ba biến int là a,b,c
int a,b,c;
Khai báo hai biến long là dai và mn
long dai,mn;
Khai báo hai biến ký tự là kt1 và kt2
char kt1,kt2;
Khai báo hai biến float là x và y
float x,y
double canh1,canh2; Khai báo hai biến double là canh1 và canh2
Từ vựng trong C
Biến (t.)
Vị trí khai báo biến: Các biến ngoài:
Là các biến được khai báo bên ngoài hàm Phạm vi sử dụng được tính từ vị trí khai báo đến cuối
Là các biến được khai báo bên trong hàm, hoặc bên
chương trình Các biến cục bộ:
Phạm vi sử dụng: được tính từ vị trí khai báo đến cuối
trong các khối lệnh
hàm hoặc cuối khối lệnh
Biểu thức
Biểu thức trong C Các toán tử Phép toán chuyển đổi kiểu dữ liệu
Biểu thức
Là sự kết hợp giữa toán tử và toán hạng để
diễn đạt một công thức toán học nào đó
Mỗi biểu thức có một giá trị trả về Biểu thức thường được dùng trong:
Vế phải của câu lệnh gán Đối số của hàm Làm chỉ số cho phần tử của mảng Trong các biểu thức điều kiện
Biểu thức
Toán tử:
Là các phép toán được ngôn ngữ lập trình hỗ trợ trực
tiếp
Được biểu diễn thông qua các ký hiệu Phân loại: 1 ngôi, 2 ngôi, 3 ngôi Một số toán tử thông dụng
+ - * / %
Toán tử số học: Toán tử quan hệ: == > < >= <= != Toán tử gán: = += -= *= /= Toán tử tăng, giảm trị: ++ -- Toán tử logic: Toán tử trên bit gồm: & | ~ ^
&& || !
Biểu thức
Các loại biểu thức Biểu thức số học Biểu thức so sánh Biểu thức logic Biểu thức gán
Biểu thức
Phép toán chuyển đổi kiểu dữ liệu:
Trong biểu thức gồm các toán hạng khác kiểu, kiểu thấp hơn sẽ được tự động nâng thành kiểu cao hơn trước khi thực hiện phép toán. Điều này được gọi là tăng cấp kiểu. Cấp của kiểu dữ liệu theo thứ tự:char < int < long < float < double
Giá trị của kiểu dữ liệu này được gán cho 1 biến có kiểu dữ liệu khác. Việc này xảy ra trong lệnh gán hoặc truyền giá trị các tham số, kiểu dữ liệu được tự động đổi kiểu như sau: Giá trị của vế phải được chuyển sang kiểu của vế trái đó là kiểu
của kết quả.
Kiểu int có thể được chuyển thành float. Kiểu float có thể chuyển thành int do chặt đi phần sau dấu phảy. Kiểu double chuyển thành float bằng cách làm tròn. Kiểu long được chuyển thành int.
Biểu thức
Phép toán chuyển đổi kiểu dữ liệu:
Ngoài ra, có thể thực hiện chuyển kiểu giá trị bằng
phép chuyển kiểu (ép kiểu)
Cú pháp: (Kiểu_dữ_liệu_mới)
Biểu thức Ví dụ :
#include
// co so 10 // co so 8 // co so 16
int a = 15; a=1; int b = 015; int c = 0x15; float d = 1.2e-6; // 15.06*10^-3 bt = a + b + c/m + (a>b);
0 1 2 3 4 5 6 7 8 9 10 11 }
Nhập/xuất dữ liệu
Thư viện
Cú pháp
#include
Văn bản thường (literal text) Ký tự điều khiển (escape sequence) Đặc tả (conversion specifier)
printf(
Nhập/xuất dữ liệu
Văn bản thường (literal text)
Được xuất y hệt như lúc gõ trong chuỗi định dạng.
Ví dụ
Xuất chuỗi Hello World
printf(“Hello ”); printf(“World”); printf(“Hello World”);
Xuất chuỗi a + b
printf(“a + b”);
Nhập/xuất dữ liệu
Ký tự điều khiển (escape sequence)
Gồm dấu \ và một ký tự như trong bảng sau:
Ký tự điều khiển
Ý nghĩa
\a \b \n \t \\ \? \”
Tiếng chuông Lùi lại một bước Xuống dòng Dấu tab In dấu \ In dấu ? In dấu “
Ví dụ
printf(“\t”); printf(“\n”); printf(“\t\n”);
Nhập/xuất dữ liệu
Đặc tả (conversion specifier):
%[-][fw][.pp]
Ý nghĩa:
Dấu -: căn lề cho dữ liệu
Có dấu -: kết quả in ra được căn trái Không có dấu -: kết quả được căn theo bên phải
fw: xác định kích thước tối thiểu để in pp:
Đối số kiểu double/float: pp là độ chính xác của giá trị in ra Đối số là xâu ký tự:
pp nhỏ hơn độ dài của xâu: in ra pp ký tự đầu tiên của xâu Không có pp hoặc pp lớn hơn độ dài xâu: in ra toàn bộ xâu Đối số là số nguyên: số ký tự được in ra (điền thêm số 0 nếu cần)
Nhập/xuất dữ liệu
Đặc tả (conversion specifier):
Ký tự định dạng: Dùng để xác định quy tắc chuyển
dạng và dạng in ra của đối số tương ứng.
Đặc tả
Ý nghĩa
%c %d, %ld %f, %lf %s %u
Ký tự Số nguyên có dấu Số thực Chuỗi ký tự Số nguyên không dấu
char char, int, short, long float, double char[], char* unsigned int/short/long
Nhập/xuất dữ liệu
Ví dụ:
int a = 1706; float x = 176.85; printf(“%10d”, a);printf(“\n”); printf(“%10.2f”, x);printf(“\n”); printf(“%.2f”, x);printf(“\n”); printf(“%f\n”,x)
Nhập/xuất dữ liệu
Thư viện
#include
Cú pháp
scanf(
đặc tả.
Các đối số là tên các biến sẽ chứa giá trị nhập và được đặt
trước dấu &
Nhập/xuất dữ liệu
Ví dụ: cho a và b kiểu số nguyên
// Nhập giá trị cho biến a // Nhập giá trị cho biến b
Các câu lệnh sau đây sai
scanf(“%d”, &a); scanf(“%d”, &b); //scanf(“%d%d”, &a, &b);
// Thiếu dấu &
// a là biến kiểu số nguyên
scanf(“%d”, a); scanf(“%d”, &a, &b);// Thiếu %d cho biến b scanf(“%f”, &a); scanf(“%9d”, &a); // không được định dạng scanf(“a = %d, b = %d”, &a, &b”); //chứa ký tự khác
Các câu lệnh điều khiển
Câu lệnh điều khiển rẽ nhánh
Câu lệnh if … else Câu lệnh switch … case Câu lệnh điều khiển lặp
Câu lệnh for Câu lệnh while Câu lệnh do … while
Các câu lệnh điều khiển
Câu lệnh if … else
Bài toán: Xác định 1 năm có phải là năm nhuận Lệnh if là lệnh cho phép thực hiện hay không thực hiện một khối lệnh nào đó tùy thuộc vào tính đúng của biểu thức.
Có 2 dạng:
Dạng 1
Dạng 2 if (biểu thức)
if (biểu thức) khối lệnh (1)
khối lệnh (1) else
khối lệnh (2)
Các câu lệnh điều khiển
Câu lệnh if … else
Các câu lệnh điều khiển Câu lệnh if … else
Trong C, cho phép sử dụng nhiều câu lệnh if lồng
nhau
Máy sẽ ghép lệnh else với lệnh if không có else gần nhất Chú ý: nên sử dụng dấu {} để tránh nhầm lẫn if-else của câu
Khi muốn thực hiện 1 trong n quyết định
lệnh này với câu lệnh khác
if (biểu thức 1)
khối lệnh 1
else if (biểu thức 2)
khối lệnh 2 ......
else
khối lệnh n
Các câu lệnh điều khiển Câu lệnh if … else
Ví dụ:
Viết chương trình nhập vào hai số nguyên n, k. Kiểm tra xem n có chia hết cho k hay không, nếu có in ra màn hình dưới định dạng: n chia het cho k (Ví dụ: 6 chia hết cho 3), nếu không in ra màn hình dòng chữ “khong chia het”.
Viết chương trình giải phương trình bậc nhất. Viết chương trình giải phương trình bậc 2 (kể
cả trường hợp có nghiệm phức)
Các câu lệnh điều khiển
Câu lệnh if … else
Một số lỗi đơn giản thường gặp:
#include
#include
main()
{
int b; printf("Nhap b =“);scanf("%d",&b); if (b=0)
printf("b bang 0");
getch();
}
0 1 2 3 4 5 6 7 8 9 10 11
Các câu lệnh điều khiển
Câu lệnh if … else
Một số lỗi đơn giản thường gặp:
#include
#include
main()
{
int b; printf("Nhap b =“);scanf("%d",&b); if (b%5==0)
printf("b la chia het cho5\n"); printf("b = 5*%d",b/5);
else …
}
0 1 2 3 4 5 6 7 8 9 10
Các câu lệnh điều khiển
Câu lệnh if … else
Một số lỗi đơn giản thường gặp:
#include
#include
main()
{
int b; printf("Nhap b = );scanf("%d",&b); if (b%5==0);
printf("b la uoc cua 5\n");
getch();
}
0 1 2 3 4 5 6 7 8 9
Các câu lệnh điều khiển
Câu lệnh switch … case
Có thể sử dụng câu lệnh switch để chọn 1 trong nhiều quyết
định
switch (biểu thức nguyên ) là các số nguyên, hằng ký tự
{
case n1:
khối lệnh 1 break;
case n2:
ni hoặc biểu thức hằng. default là một thành phần không bắt buộc phải có trong thân của switch. Sự hoạt động của switch:
khối lệnh 2 break; .......
case nk:
khối lệnh k
break;
[ default:
khối lệnh k+1
break;]
} • Giá trị biểu thức bằng ni, chương trình hoạt động tại nhãn case ni, cho đến khi gặp break. • Nếu giá trị biểu thức khác với tất cả các ni, sẽ thực hiện lệnh sau default, hoặc thoát khỏi switch.
Các câu lệnh điều khiển
Câu lệnh switch … case
Các câu lệnh điều khiển
Câu lệnh switch … case
Ví dụ:
Viết chương trình đọc các số từ 0 đến 9. Nếu nằm ngoài khoảng
Viết chương trình in ra số ngày trong tháng, nếu là tháng 2 yêu
đó, in ra dòng thông báo: “Khong doc duoc”.
cầu nhập thêm năm để tính ngày.
Các câu lệnh điều khiển
Câu lệnh for
Bài toán: in ra bảng cửu chương của 3? Lệnh for cho phép thực hiện lặp lại 1 số câu lệnh tuân
theo một số quy luật nào đó.
for (; <Đ/K lặp>; )
;
Đ
<Đ/K lặp>
S
Các câu lệnh điều khiển Câu lệnh for
Ví dụ
int i; for(i = 1; i <= 9; i++)
printf("3x%d = %d\n", i, i*3);
Một số lưu ý:
1. Câu lệnh for là câu lệnh đơn, và có thể lồng nhau 2. Các phần khởi đầu, bước nhảy, điều kiện lặp có thể không
3.
4.
5. Các thành phần
xuất hiện Lệnh break làm kết thúc câu lệnh. Lệnh continue bỏ qua lần lặp hiện tại.
6. Nếu có nhiều thành phần trong mỗi phần thì được cách nhau
nhau bằng dấu ; (bắt buộc phải có!)
bằng dấu ,
Các câu lệnh điều khiển
Câu lệnh for Ví dụ:
Viết chương trình nhập vào số nguyên n, tính tổng bình
phương các số từ 1 đến n (n nhập từ bàn phím)
Viết chương trình tính n! (n nhập từ bàn phím) Viết chương trình tính và in ra màn hình giá trị biểu
thức: (n nhập từ bàn phím)
Viết chương trình in ra bảng cửu chương
Các câu lệnh điều khiển
Câu lệnh for
Một số lỗi thường gặp
#include
int n,s; n = 10; s = 0; for(int i = 1;i<10;i++);
s += i;
printf("Tong cac so tu nhien tu 1 den 10: %d",s); getch();
}
Các câu lệnh điều khiển
Câu lệnh for
Một số lỗi thường gặp
#include
#include
main()
{
int i,j; for(i = 1,j = 1;j<5,i<3;i++,j++)
printf("i = %d; j = %d\n",i,j);
getch();
}
Các câu lệnh điều khiển
Câu lệnh while
Btoán: in ra các bội số (nhỏ hơn 20) của 2? Lệnh while là lệnh thực hiện 1 số câu lệnh khi thỏa mãn một
điều kiện nào đó.
while (Điều kiện) Hành_động_cần_lặp;
Đ
<Đ/K lặp>
S
Các câu lệnh điều khiển
Câu lệnh while Một số lưu ý:
Câu lệnh while là câu lệnh đơn, có thể đặt lồng nhau Câu lệnh while có thể không thực hiện lần nào Câu lệnh while có thể lặp vô tận Có thể sử dụng các lệnh break, continue trong các
vòng lặp
Các câu lệnh điều khiển
Câu lệnh do…while
Lệnh do… while là lệnh cho phép thực hiện 1 số câu lệnh khi còn thỏa mãn một điều kiện nào đó.
do
Hành_động_cần_lặp ;
while (Điều kiện);
Đ
<Đ/K lặp>
S
Các câu lệnh điều khiển
Câu lệnh do…while
Một số lưu ý:
Câu lệnh do … while là câu lệnh đơn, có thể đặt lồng
Câu lệnh do … while thực hiện ít nhất 1 lần Câu lệnh do … while có thể lặp vô tận Có thể sử dụng các lệnh break, continue trong các
nhau
vòng lặp
Các câu lệnh điều khiển
So sánh 3 câu lệnh lặp
Đều có khả năng lặp lại một (hoặc nhiều) hành động
nhiều lần.
Câu lệnh for có số vòng lặp được xác định trước while có thể không thực hiện lần nào. do… while sẽ được thực hiện ít nhất 1 lần.
Các câu lệnh điều khiển
Bài tập trên lớp: Sử dụng các câu lệnh điều
khiển thực hiện các bài sau Viết chương trình nhập vào một số nguyên dương
không lớn hơn 10000, in ra màn hình tổng các chữ số của số đó (ví dụ nhập n = 1356 in ra 15). Chương trình chỉ cho phép người dùng nhập các giá trị từ 1 – 10000, nếu nằm ngoài vùng giá trị trên yêu cầu nhập lại.
Viết chương trình in ra 3 số hoàn thiện bé nhất. Số hoàn thiện n là số nguyên dương mà tổng các ước nguyên dương (nhỏ hơn n) bằng n. VD: 28 = 1+2+4+7+14;
Các câu lệnh điều khiển
Viết chương trình C thực hiện thuật toán theo sơ đồ khối hình bên
Bài tập về nhà
Tìm hiểu các bài toán sau và cài đặt chương
trình tương ứng: Tính gần đúng tích phân xác định (phương pháp
hình chữ nhật, hình thang)
Tìm nghiệm gần đúng của phương trình (phương
pháp chia đôi)
Tính căn bậc hai theo phép lặp Newton