Bài giảng Ngôn ngữ lập trình C: Các thành phần cơ bản cung cấp cho người học các kiến thức: Giới thiệu ngôn ngữ lập trình C, thư viện, nhập xuất cơ bản. Mời các bạn cùng tham khảo nội dung chi tiết.
Trang 1Ngôn ngữ lập trình C
Các thành phần cơ bản
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THÀNH PHỐ HỒ CHÍ MINH
Trang 2 Nhập: scanf, cin, gets
Xuất: printf, cout, puts
Trang 3Ngôn ngữ lập trình C
Được phát triển bởi Dennis
Ritchie tại phòng thí nghiệm
AT&T Bell vào đầu thập niên
1970
C được dùng trong hệ điều
hành UNIX và phát triển cùng
với hệ điều hành này
C đã lan rộng ra nhiều hệ điều
hành khác và trở thành ngôn
ngữ phổ dụng nhất
Trang 4Trình biên dịch/Trình thông dịch
Trình biên dịch
Compiler
Mã nguồn
Source code
Mã máy Machine Code
Executable Program
Interpreter
Source Code
Trình thông dịch: Phân tích và thực thi chương trình cùng lúc.
Việc thực thi chậm nhưng dễ sửa lỗi chương trình.
Trang 5Biên dịch và chạy chương trình
Trang 6Sửa lỗi - debug
Semantic Errors
Trang 7Cấu trúc chương trình C
Ký hiệu #include dùng để khai báo thư viện phục vụ chương
trình
Hàm main là nơi bắt đầu thực hiện chương trình
Lệnh printf nằm trong thư viện stdio.h, dùng để xuất dữ liệu
ra màn hình
Kí hiệu \n dùng để xuống dòng
Lệnh return dùng để kết thúc và trả về giá trị kiểu int cho hàm
main
3 int main() // Chương trình chính
5 printf( "Hello world!\n" ); // Câu lệnh
Trang 8Định dạng trong C
Có phân biệt giữa chữ in HOA và chữ in thường!
Tất cả các từ khóa và hàm chuẩn trong C đều là chữ thường
Các dòng trống, khoảng trắng, lời chú thích đều được trình
biên dịch bỏ qua
Không ảnh hưởng đến hoạt động của chương trình
Các dấu thụt dòng giúp chương trình dễ đọc, rõ ràng.
Có thể dùng tab hoặc dấu cách
Không ảnh hưởng đến hoạt động của chương trình
Câu lệnh được kết thúc bằng dấu chấm phẩy ;
Chuỗi ký tự được đặt giữa hai dấu hai nháy "Chuỗi"
Một ký tự được đặt giữa hai dấu một nháy 's'
Trang 9Lời chú thích
Không ảnh hưởng đến hoạt động của chương trình
Giải thích về giải thuật, cách hoạt động, chú thích các
phần khác nhau
Hai cách ghi chú thích
// chú thích dòng
/* chú thích khối*/
Chú thích dòng: Lời chú thích đứng sau dấu //
Chú thích khối: Lời chú thích nằm giữa dấu /* và */
Trang 10 Tên biến: Do người lập trình tự đặt
Biến phải được khai báo trước khi sử dụng
Cú pháp: Kiểu-dữ-liệu Tên-biến;
int year;
char kytu;
Trang 11 Mỗi ô nhớ có một địa chỉ riêng
Dữ liệu kiểu con trỏ lưu địa chỉ
Trang 12Kiểu dữ liệu
int: Kiểu số nguyên
2 hoặc 4 bytes (16 hoặc 32 bits)
-32,768 → 32,767 hoặc -2,147,483,648 → 2,147,483,647
float: Kiểu số thực
4 bytes (32 bits): 1.2E-38 → 3.4E+38, độ chính xác 24 bits
double: Kiểu số thực có độ chính xác cao hơn float
8 bytes (64 bits): 2.3E-308 → 1.7E+308, độ chính xác 53 bits
char: Kiểu ký tự
1 byte, ví dụ: char exit = 'e';
bool: Kiểu luận lý, có giá trị true hoặc false
1 byte, ví dụ: bool kt = true ;
Độ chính xác?
Trang 13significand x base exponent
Kiểu dữ liệu Dấu Mũ Trị số Tổng số bit Độ chính xác
Float 1 bit 8 bits 23 bits 32 bits (4 bytes) 24 bits (Dấu + trị số) Double 1 bit 11 bits 52 bits 64 bits (8 bytes) 53 bits (Dấu + trị số)
Trang 14Tên biến
Phải bắt đầu bằng một chữ hoặc dấu gạch dưới (_), tiếp sau đó
có thể kết hợp giữa chữ, số và dấu gạch dưới.
Không được trùng với từ khóa có sẵn của C
Hai biến không được trùng tên nhau
Có phân biệt giữa chữ hoa và chữ thường
Độ dài tùy thích, tuy nhiên không nên đặt tên quá dài
Nên đặt tên có nghĩa, dễ hiểu
Ví dụ: Những tên biến nào sau đây đúng hay sai?
1ngoi_sao, bienDem1, phepNhân, donVi$, ngoi_nha, int, kiem-tra, A&T
dien _tich, +hai_so, luy thua, T_T, ^_^,
edthbdl_mbcln2h
Trang 15Từ khóa
Là những từ đã được định nghĩa bởi trình biên dịch
Không được dùng để đặt tên biến, tên hàm…
Các công cụ lập trình C thường có thể nhận biết và đổi
màu các từ khóa trên trình soạn thảo
auto break case char const continue
default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while
Trang 16Ví dụ về biến và kiểu biến
1 #include <stdio.h> // Khai báo thư viện
2 int main() // Chương trình chính
Trang 17Chuyển đổi kiểu
Đặt (Kiểu dữ liệu) phía trước biểu thức để chuyển đổi
kiểu dữ liệu cho kết quả của biểu thức
f = (float) i1 / i2; i = (int)f;
Gán một số nguyên vào một biến kiểu thực
f = i; // Cảnh báo việc chuyển đổi
f1 = 10; f2 = (float)i; // OK! f1 = 10.000000
Gán một số thực vào một biến kiểu nguyên: Mất phần
thập phân (sau dấu chấm)
i1 = 9.5; i2 = f; // Cảnh báo, i1 = 9
i1 = (int)9.5; i2 = (int)f; // OK!
Trang 18Chuyển đổi kiểu (2)
Chia một số nguyên cho một số nguyên: Kết quả là sốnguyên
i1=5; i2=10; f=i1/i2; // Cảnh báo, f=0.000000
f=(float)i1/i2; // OK, f=0.500000
Chia một số thực cho một số nguyên hoặc chia một sốnguyên cho một số thực: Kết quả là số thực
i=5; f=10; i1 = i/f; // Cảnh báo, i1 = 0
f1=i/f; f2=i/10.0; // OK! f1 = f2 = 0.500000
Trang 19#define b 125u // unsigned int
#define c 87l // long int
#define d 23ul // unsigned long int
#define e 057 // Cơ số 8
#define f 0xfee // Cơ số 16
#define g 3.14159 // float
#define h 314159E-5 // float
#define i 'a' // char
#define j "morning" // string
const int k = 2016;
const float l = 2.016;
const char m = '4' ;
const char n[] = "afternoon" ;
#define o 048 /* ERROR! Hệ cơ số 8
không có số 8 */
#define p 59E // ERROR!
Trang 20Vận dụng
Đề bài 1: Hãy khai báo
Một biến kiểu số nguyên
Hai biến kiểu số thực
Trang 21% Phép chia lấy phần dư B % A = 0
++ Cộng lên một số nguyên A++ = 11
Trang 22int A=10, B=20;
if (A==B) printf( "A = B" );
if (A!=B) printf( "A ≠ B" );
if (A>B) printf( "A > B" );
if (A<B) printf( "A < B" );
if (A>=B) printf( "A ≥ B" );
if (A<=B) printf( "A ≤ B" );
}
Trang 23Toán tử luận lý
Những phép toán luận lý
Cho A = 1, B = 0
&& Gọi toán tử AND, nếu cả hai toán hạng
điều đúng, kết quả phép toán là đúng
(A && B) Sai
|| Gọi toán tử OR, nếu cả hai toán hạng
đều sai, kết quả phép toán là sai (A || B) Đúng
! Gọi toán tử NOT, thực hiện phép phủ
định
!(A && B) Đúng
Trang 24Toán tử trên bit
Các phép toán trên bit
Trang 25&= Phép AND trên bit và gán C &= 2 là C = C & 2
^= Phép XOR trên bit và gán C ^= 2 là C = C ^ 2
Trang 27Các thư viện
Các thư viện định nghĩa sẵn các hàm hay kiểu dữ liệu
Cú pháp khai báo: #include <tên thư viện>
<stdio.h> các hàm nhập xuất chuẩn, các thao tác với tập
tin…
getchar, putchar, printf, scanf, fopen, fclose, remove, rename…
<stdlib.h> các hàm chuyển đổi kiểu dữ liệu, cấp phát bộ
Trang 28 gets, puts, cin, cout…
<time.h> các hàm xử lý về thời gian
time, clock, localtime, difftime, time_t, struct tm…
Trang 29Hàm thường dùng ở thư viện stdio.h
Khai báo: #include <stdio.h>
Trang 30Hàm thường dùng ở thư viện stdlib.h
Khai báo: #include <stdlib.h>
Hàm rand: Tạo số nguyên ngẫu nhiên
Nguyên mẫu hàm: int rand (void);
a = rand(); // a có giá trị từ 0 đến 32767
b = rand()%90; // b có giá trị từ 0 đến 89
c = rand()%90 + 10; // c có giá trị từ 10 đến 99
Hàm srand: Khởi tạo số ngẫu nhiên
Nguyên mẫu hàm: void srand (unsigned int seed);
Ví dụ:
srand(time(NULL));
d = rand() % 101 – 50;
Trang 31Hàm thường dùng ở thư viện math.h
Khai báo: #include <math.h>
Hàm sqrt: Tính căn bậc hai
Nguyên mẫu hàm: double sqrt (double x);
x = sqrt(9); // Căn bậc hai của 9
y = sqrt(x + 1); // Căn bậc hai của x + 1
Hàm pow: Tính lũy thừa
Nguyên mẫu hàm: double pow (double base, double exponent);
x = pow(3, 2); // ba mũ hai
y = pow(x, 4); // x mũ bốn
Hàm floor, ceil: Làm tròn
z = floor(4.3); // z = 4.0
Trang 32Hàm thường dùng ở thư viện string.h
Khai báo: #include <string.h>
Hàm strlen: Tính chiều dài của chuỗi
Nguyên mẫu hàm: size_t strlen(const char * str)
a = strlen(“hello”); // a = 5
Hàm strcpy: Sao chép chuỗi
Nguyên mẫu hàm: char * strcpy(char * dest, const char * src)
strcpy(hello, “Hello ”); // hello = “Hello ”
Hàm strcat: Nối chuỗi
Nguyên mẫu hàm: char * strcat( char * dest, const char * src)
char name[50] = “Tuan”;
strcat(hello, name); // hello = “Hello Tuan!”
Hàm strcmp: So sánh chuỗi
Nguyên mẫu hàm: int strcmp( const char * str1, const char * str2 )
a = strcmp(name, “Tuan”); // a = 0
Trang 33Hàm thường dùng ở thư viện ctype.h
Khai báo: #include <ctype.h>
Hàm tolower: Chuyển ký tự sang chữ thường
Nguyên mẫu int tolower ( int c );
char c = ‘N’; tolower(c); // c = ‘n’
Hàm toupper: Chuyển ký tự sang chữ in
Nguyên mẫu int toupper ( int c );
char c = ‘n’; toupper(c); // c = ‘N’
Các hàm kiểm tra ký tự
isalnum(c): Trả về true (khác 0) nếu c là số hoặc chữ
isalpha(c): Trả về true nếu c là chữ
islower(c): Trả về true nếu c là chữ thường
Trang 35 scanf(“%s”, &s); // Ký tự trắng kết thúc nhập liệu
Có thể thay bằng scanf(“%[^\n]s”, &s); hoặc gets(s);
Trang 3913 return 0;
14 }
Trang 40Định dạng biểu diễn dữ liệu
%[flags][width][.precision][length]specifier
– Canh trái trong width
+ Buộc in dấu + hoặc –
0 In số 0 trước dữ liệu
hh signed char unsigned char
h short int unsigned short int
Trang 41Định dạng biểu diễn dữ liệu
%x, %X Số thập lục phân không dấu 7fa, 7FA
Trang 42Ví dụ biểu diễn dữ liệu
1 #include <stdio.h>
2 int main()
3 {
4 printf ( "Ky tu: %c %c \n" , 'a' , 65);
5 printf ( "So nguyen: %d \n" , 1977);
6 printf ( "Khoang trong: %10d \n" , 1977);
7 printf ( "So khong: %010d \n" , 1977);
8 printf ( "%d %x %o %#x %#o\n" ,100,100,100,100,100);
9 printf ( "So thuc: %.2f\n" , 3.1416);
10 printf ( "%s\n" , "Mot chuoi" );
11 return 0;
12 }
Ky tu: a A
So nguyen: 1977 Khoang trong: 1977
So khong: 0000001977
100 64 144 0x64 0144
So thuc: 3.14 Mot chuoi
Trang 43 Mã escape dùng để đại diện
cho những ký tự đặc biệt hoặc
Trang 44Bài tập vận dụng
Đề bài 5: Viết chương trình nhập vào số ngày công (số
nguyên), tính lương theo công thức:
Lương = số ngày công x lương công nhật
Trong đó lương công nhật là hằng số = 120’000
Đề bài 6: Viết chương trình nhập vào hai số x và y, tính
Trang 45 Nhập: scanf, cin, gets
Xuất: printf, cout, puts