SlideShare a Scribd company logo
1 of 55
C	căn	bản
Đơn giản mà đẹp
cuong@techmaster.vn
Ngôn ngữ C
• Năm sinh 1972
• Bố: Dennis Ritchie, Me: Bell Labs
• Lần nâng cấp gần đây C11, 2011
• Đa nền tảng: Linux, Unix, Mac, Windows
• Mã nguồn: *.c, *.h
Ưu điểm
• Cú pháp đơn giản
• ~ 60% Javascript,
C++, Java…
• Thực thi nhanh
• Tiết kiệm bộ nhớ
• Đa nền tảng
• Thích hợp để học
thuật toán
Nhược điểm
• Thiếu tính năng mạnh
– Hướng đối tượng
– Chồng toán tử
– Generic programming
– Functional programming
Top 3 ngôn ngữ phổ biến
Ứng dụng nổi tiếng viết bằng C
• Hầu hết các hệ điều hành
• Các phần mềm máy chủ
http://www.mycplus.com/featured-articles/top-10-
applications-written-in-c-cplusplus/
Lợi ích khi học C
• Nhập cuộc đơn giản, cú pháp tối giản
• Dễ dàng chuyển đổi sang ngôn ngữ khác
• Hiểu hệ điều hành quản lý bộ nhớ
• Tính năng ít, phải tự viết nhiều à
hiểu sâu
• Thạo C đi xin việc được
C awesome
• https://notabug.org/koz.ross/awes
ome-c
• https://github.com/aleksandar-
todorovic/awesome-c
Học C trong 2 tiếng
#include <stdio.h>
int main() {
printf("Hello, World!n");
return 0;
}
Nhúng	thư	viện	có	sẵn
Hàm	chính	luôn	chạy	đầu	tiên
In	ra	terminal	hoặc	console
Công cụ soạn mã IDE Windows Linux Mac
Visual Studio $ ✔
Clion $ ✔ ✔ ✔
XCode ✔
CodeBlocks ✔
DevC ✔
NetBeans ✔ ✔ ✔
Eclipse ✔ ✔ ✔
Sublime Text $ ✔ ✔ ✔
Vim editor soạn thảo C trực tiếp trong terminal
printf – in ra màn hình
• (formatstring, param1, param2, param3…);
• %d decimal number
• %c character
• %s string
• %f float
• %p pointer
• n new line
Kết quả in ra là gì?
#include <stdio.h>
main() {
int i = 0;
for (i = 0; i < 10; i++) {
printf("Line %dn", i);
}
return 0;
}
Trình biên dịch - compiler
• Mac
– make
• Linux, Windows
– gcc, g++
https://www.youtube.com/watch?v=B-ru-
q_Bm2I
Compiler biên dịch
IDE
• Ứng dụng soạn thảo
code
• Giao diện đồ hoạ:
highlight syntax…
• Quản lý nhiều file
mã nguồn, dự án
• Tích hợp hoặc gọi
đến compiler
Compiler
• Trình biên dịch mã
nguồn ra file chạy
• Có nhiều option:
– Debug
– Release
• Chạy trên dòng lệnh,
không có giao diện
Cú pháp
• #include <stdio.h>
• #include "MyHeader.h"
• Chú thích 1 dòng //something
• Chú thích khối /* line 1
line 2 */
Data	
types
Numeric
Interger Floating
char	/	c-
string
char C	String
void Array Struct Pointer Derived
bool
Kiểu dữ liệu số nguyên
sizeof Value	range
char 1	byte -128	to	127 .	Or	0	to	255
signed	char 1	byte -128	to	127
unsigned	char 1	byte 0	to	255
int 2	or	4	bytes -32,768	to	32,767	or	-2,147,483,648	to	2,147,483,647
unsigned int 2	or	4	bytes 0	to	65,535	or	0	to	4,294,967,295
short 2	bytes -32,768	to	32,767
unsigned short 2 bytes 0	to	65,535
long 8	bytes -2^31+1	to	+2^31-1
unsigned long 8	bytes 0 to	2^32-1
long	long 8	or	16	bytes -2^63+1	to	+2^63-1
#include <stdio.h>
void main() {
int a = 10;
float pi = 3.14158;
char c = 32;
long long bigLong = 100;
long largeInt = 10000;
double bigFloat = 1.168;
printf("size %lu", sizeof(bigLong));
}
CPU 32 bit khả năng đánh địa chỉ tối đa 2^32
Dấu phẩy động –floating point types
Type Size Value range Precision
float 4 bytes 1.2E-38 to
3.4E+38
6 decimal
places
double 8 bytes 2.3E-308 to
1.7E+308
15 decimal
places
long double 10 bytes 3.4E-4932 to
1.1E+4932
19 decimal
places
Kiểu void
• Không có gì, không tồn tại
• Không dùng void khai báo biến
• Dùng void * khai báo con trỏ kiểu
không xác định
• Hàm không trả về giá trị
void doSomething() {
printf("Return nothing from this func");
}
void* a;
Sử dụng void
#include <stdio.h>
void doSomething() {
printf("Do something returns nothing");
}
main() {
//void a; //Cannot compile
int x = 10;
void* b = &x;
printf("%dn", *(int*)b);
doSomething();
return 0;
}
Ký tự - char
• Ký tự trong C chiếm 1 byte, không
hỗ trợ unicode
char c ='C';
char space = 32;
char six = '0' + 6;
Xem quy chuẩn bẳng mã ASCII
https://vi.wikipedia.org/wiki/ASCII
In tuần tự a-z
#include <stdio.h>
main() {
char c;
for (c = 'a'; c < 'z'; c++) {
printf("%cn", c);
}
return 0;
}
Con trỏ - Pointer
Con trỏ - Pointer
• Nhiều ngôn ngữ lập trình không
cần con trỏ: Visual Basic, C#,
Swift, Java, Javascript, Scala
• Tại sao C vẫn dùng con trỏ?
• Liệu con trỏ có thực sự cần thiết
Tại sao C dùng con trỏ ?
• C rất sát với hệ điều hành
• Quản lý bộ nhớ thủ công – nhanh
nhưng rủi ro
• Con trỏ để tham chiếu đến các
biến trong bộ nhớ
• Cấp phát – giải phóng bộ nhớ
#include <stdio.h>
int main() {
int a = 10;
int *p = &a;
printf("Value p points to %dn", *p);
printf("Address that p points at %pn", p);
printf("Address of p itself in mem %pn", &p);
a = 11;
printf("New value p points to %dn", *p);
return 0;
}
Value p points to 10
Address of p points to 0x7fff5c049b68
Address of actual p 0x7fff5c049b60
New value p points to 11
a =	100x7fff5c049b68
0x7fff5c049b60 p=1597348712
Value p points to 10
Address of p points to 0x7fff5c049b68
Address of actual p 0x7fff5c049b60
New value p points to 11
Con trỏ có kích thước không?
• Ở hệ điều hành 32bit, nó chiếm 4
bytes, ở hệ 64bit, nó chiếm 8
bytes
• 32 bits = 4 bytes, dải vùng nhớ
khoảng 4GB
• 64 bits = 8 bytes lớn gấp 2^32
lần
1
128 64 32 16 8 4 2 1
1 1 1 1 1 1 1
Khả năng đánh địa chỉ hệ 64 bit
You will never, ever be able to assemble a system that has
264 bytes (16 exibytes) of physical RAM.
Second, just because an architecture uses 64-bit pointers,
doesn't mean that all the bits of those pointers are actually
used. Notably, current x86-64 CPUs (aka AMD64 and Intel's
current 64-bit chips) actually use 48-bit address lines
(AMD64) and 42-bit address lines (Intel)
(see http://en.wikipedia.org/wiki/X86_64#Virtual_address_space
_details ), theoretically allowing 256 terabytes of physical
RAM.
Trích
https://superuser.com/questions/168114/how-much-memory-can-a-
64bit-machine-address-at-a-time/168120
Mảng 1 chiều, 2 chiều
Mảng - Array
• Fixed size array
• Memory allocated array
int scores[] = {1, 2, 3};
char sizes[] = {'S', 'M', 'L'};
char* workdays[] = {"Monday", "Tuesday",
"Wednesday", "Thursday", "Friday"};
int *intArray = malloc(10* sizeof(int));
intArray[0] = 100;
free(intArray);
Đặc điểm mảng
• Phần tử đầu tiên đánh vị trí 0
• Không thay đổi được kích thước
sau khi khai báo
• Các phần tử nằm liên tiếp nhau
#include <stdio.h>
#include <stdlib.h>
int main() {
const int N = 10;
int *intArray = malloc(N * sizeof(int));
free(intArray);
int i = 0;
while (i < N) {
intArray[i] = i;
i++;
}
free(intArray);
return 0;
}
int int2D[3][3] =
{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d", int2D[i][j]);
if (j < 2) {
printf(", ");
} else {
printf("n");
}
}
}
Mảng 2 chiều
1, 2, 3
4, 5, 6
7, 8, 9
In ra
C string, mảng ký tự kiểu char
H e l l o W o r l d 0
p
Terminated
character,
value = 0;
0 1 2 3 4 5 6 7 8 9 10
p[2]
char* p ="Hello World";
strlen(p) == 11
Thư viện <string.h>
• strlen trả về số ký tự
• strcpy copy từ mảng này sang mảng kia
• memset đặt 1 ký tự N lần vào mảng
• strcmp so sánh 2 chuỗi
https://www.tutorialspoint.com/c_standard_libr
ary/string_h.htm
#include <stdio.h>
#include <string.h>
int main() {
char *p = "Hello World";
char str[] = "Hello World";
char chuoi[100];
strcpy(chuoi, "Hello World");
printf("%sn", chuoi);
int val = strcmp(p, chuoi);
if (val == 0) {
printf("Giong nhaun");
} else {
printf("Khac nhaun");
}
memset(chuoi, 'A', 11);
printf("%sn", chuoi);
return 0;
}
Kiểu dữ liệu khác trong C
Boolean: đúng hoặc sai
• C không có kiểu nguyên thuỷ
boolean
• Dùng kiểu char lấy giá trị 0 hoặc
1 để thay thế
• Hoặc dùng thư viện stdbool.h
#include <stdbool.h>
int main() {
bool continueLoop = true;
int i = 0;
while (continueLoop) {
if (i > 10) continueLoop = false;
i++;
}
return 0;
}
struct
• Gom nhiều biến liên quan thành
một cụm
• Có thể định nghĩa kiểu để tái sử
dụng
int main() {
struct Book {
char *title;
char *author;
int ISBN;
} book;
struct Book b;
b.title = "The C Programming Language";
b.author = "Brian W Kernighan & Dennis M. Ritchie";
b.ISBN = 0131101633;
return 0;
}
typedef
typedef struct {
char *title;
char *author;
int ISBN;
} Book;
struct Book {
char *title;
char *author;
int ISBN;
};
Ngắn gọn hơn
typedef đặt tên mới cho kiểu
#include <stdio.h>
typedef unsigned char BYTE;
typedef unsigned char BOOL;
#define true 1
#define false 0
int main() {
BYTE rock = 125;
BOOL isTrue = true;
if (isTrue) {
printf("%d", rock);
}
return 0;
}
typedef đặt tên kiểu mới
#define đặt tên giá trị
Hỏi đáp về C
C có hỗ trợ hướng đối tượng?
• Không. C++ hỗ trợ hướng đối tượng
• C++ là ngôn ngữ phát triển lên từ
C
C-99, C-11 là gì?
• C-99 là tiêu chuẩn C được thống
nhất năm 1999
• C—11 là tiêu chuẩn C được thống
nhất năm 2011
File binary biên dịch ở Windows có chạy được trên Linux không?
• Không
• Mã nguồn C là portable, có thể
biên dịch lại trên các hệ điều
hành khác nhau
• Nhưng file binary biên dịch không
portable

More Related Content

What's hot

Hướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.docHướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.docTrần Văn Nam
 
Hàm và Chuỗi
Hàm và ChuỗiHàm và Chuỗi
Hàm và Chuỗipnanhvn
 
Huong dan su dung va debug voi dev c++
Huong dan su dung va debug voi dev c++Huong dan su dung va debug voi dev c++
Huong dan su dung va debug voi dev c++tuandong_ptit
 
Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-Minh Ngoc Tran
 
Lap trinh c++ có lời giải 3
Lap trinh c++ có lời giải 3Lap trinh c++ có lời giải 3
Lap trinh c++ có lời giải 3Minh Ngoc Tran
 
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modulesLocal sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modulesTrần Văn Nam
 
Ctdl C02
Ctdl C02Ctdl C02
Ctdl C02giang
 
Ctdl C05
Ctdl C05Ctdl C05
Ctdl C05giang
 
Giao trinh bai tap c va c++
Giao trinh bai tap c va c++Giao trinh bai tap c va c++
Giao trinh bai tap c va c++Congdat Le
 

What's hot (18)

Tut6 solution
Tut6 solutionTut6 solution
Tut6 solution
 
Hướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.docHướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.doc
 
Tut5 solution
Tut5 solutionTut5 solution
Tut5 solution
 
Lect09 string
Lect09 stringLect09 string
Lect09 string
 
Hàm và Chuỗi
Hàm và ChuỗiHàm và Chuỗi
Hàm và Chuỗi
 
Ktlt lab full
Ktlt lab fullKtlt lab full
Ktlt lab full
 
Nmlt c06 ham
Nmlt c06 hamNmlt c06 ham
Nmlt c06 ham
 
String c++
String c++String c++
String c++
 
Huong dan su dung va debug voi dev c++
Huong dan su dung va debug voi dev c++Huong dan su dung va debug voi dev c++
Huong dan su dung va debug voi dev c++
 
Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-
 
Lap trinh c++ có lời giải 3
Lap trinh c++ có lời giải 3Lap trinh c++ có lời giải 3
Lap trinh c++ có lời giải 3
 
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modulesLocal sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
 
Tn ktlt
Tn ktltTn ktlt
Tn ktlt
 
Ctdl C02
Ctdl C02Ctdl C02
Ctdl C02
 
Nmlt c11 con_trocoban
Nmlt c11 con_trocobanNmlt c11 con_trocoban
Nmlt c11 con_trocoban
 
Ctdl C05
Ctdl C05Ctdl C05
Ctdl C05
 
Bai tap oop c++
Bai tap oop c++Bai tap oop c++
Bai tap oop c++
 
Giao trinh bai tap c va c++
Giao trinh bai tap c va c++Giao trinh bai tap c va c++
Giao trinh bai tap c va c++
 

Similar to Basic C programming

Lập Trình an toàn - Secure programming
Lập Trình an toàn - Secure programmingLập Trình an toàn - Secure programming
Lập Trình an toàn - Secure programmingbeatmaking
 
06 tong quan ve ngon ngu c
06 tong quan ve ngon ngu c06 tong quan ve ngon ngu c
06 tong quan ve ngon ngu cTrí Nguyễn
 
DoThanhNghi2016_Python.pdf
DoThanhNghi2016_Python.pdfDoThanhNghi2016_Python.pdf
DoThanhNghi2016_Python.pdfTamDo58
 
Python moi
Python moiPython moi
Python moiDÉp LÊ
 
Pplthdt c03 kieu_dulieucoso_lopdungsan_v13.09a
Pplthdt c03 kieu_dulieucoso_lopdungsan_v13.09aPplthdt c03 kieu_dulieucoso_lopdungsan_v13.09a
Pplthdt c03 kieu_dulieucoso_lopdungsan_v13.09aPix Nhox
 
Postgresql các vấn đề thực tế
Postgresql các vấn đề thực tếPostgresql các vấn đề thực tế
Postgresql các vấn đề thực tếTechMaster Vietnam
 
Chuanmanguon 151124092923-lva1-app6892
Chuanmanguon 151124092923-lva1-app6892Chuanmanguon 151124092923-lva1-app6892
Chuanmanguon 151124092923-lva1-app6892HaiNguyen870
 
Coding Standard (Chuẩn Mã Nguồn)
Coding Standard (Chuẩn Mã Nguồn)Coding Standard (Chuẩn Mã Nguồn)
Coding Standard (Chuẩn Mã Nguồn)Hong Le Van
 
Nhập môn lập trình - Vương Bá Thịnh
Nhập môn lập trình - Vương Bá ThịnhNhập môn lập trình - Vương Bá Thịnh
Nhập môn lập trình - Vương Bá Thịnhsilverclaw
 
Lec3. Ham.pdf
Lec3. Ham.pdfLec3. Ham.pdf
Lec3. Ham.pdfKinHongnh
 
Cấp phát bộ nhớ động trong C
Cấp phát bộ nhớ động trong CCấp phát bộ nhớ động trong C
Cấp phát bộ nhớ động trong CIam Me
 
Giới thiệu ngôn ngữ lập trình C++
Giới thiệu ngôn ngữ lập trình C++Giới thiệu ngôn ngữ lập trình C++
Giới thiệu ngôn ngữ lập trình C++LAnhHuy4
 
Nhat nghe c#
Nhat nghe   c#Nhat nghe   c#
Nhat nghe c#Hihi Hung
 
Nhat nghe c#
Nhat nghe   c#Nhat nghe   c#
Nhat nghe c#LanLT2011
 

Similar to Basic C programming (20)

06 tong quan ve ngon ngu c
06 tong quan ve ngon ngu c06 tong quan ve ngon ngu c
06 tong quan ve ngon ngu c
 
Lập Trình an toàn - Secure programming
Lập Trình an toàn - Secure programmingLập Trình an toàn - Secure programming
Lập Trình an toàn - Secure programming
 
06 tong quan ve ngon ngu c
06 tong quan ve ngon ngu c06 tong quan ve ngon ngu c
06 tong quan ve ngon ngu c
 
DoThanhNghi2016_Python.pdf
DoThanhNghi2016_Python.pdfDoThanhNghi2016_Python.pdf
DoThanhNghi2016_Python.pdf
 
Python moi
Python moiPython moi
Python moi
 
Pplthdt c03 kieu_dulieucoso_lopdungsan_v13.09a
Pplthdt c03 kieu_dulieucoso_lopdungsan_v13.09aPplthdt c03 kieu_dulieucoso_lopdungsan_v13.09a
Pplthdt c03 kieu_dulieucoso_lopdungsan_v13.09a
 
C++ can ban
C++ can banC++ can ban
C++ can ban
 
Slide pointer sepro
Slide pointer seproSlide pointer sepro
Slide pointer sepro
 
Postgresql các vấn đề thực tế
Postgresql các vấn đề thực tếPostgresql các vấn đề thực tế
Postgresql các vấn đề thực tế
 
Chuanmanguon 151124092923-lva1-app6892
Chuanmanguon 151124092923-lva1-app6892Chuanmanguon 151124092923-lva1-app6892
Chuanmanguon 151124092923-lva1-app6892
 
Coding Standard (Chuẩn Mã Nguồn)
Coding Standard (Chuẩn Mã Nguồn)Coding Standard (Chuẩn Mã Nguồn)
Coding Standard (Chuẩn Mã Nguồn)
 
Chapter07 io
Chapter07 ioChapter07 io
Chapter07 io
 
Nhập môn lập trình - Vương Bá Thịnh
Nhập môn lập trình - Vương Bá ThịnhNhập môn lập trình - Vương Bá Thịnh
Nhập môn lập trình - Vương Bá Thịnh
 
Lec3. Ham.pdf
Lec3. Ham.pdfLec3. Ham.pdf
Lec3. Ham.pdf
 
Cấp phát bộ nhớ động trong C
Cấp phát bộ nhớ động trong CCấp phát bộ nhớ động trong C
Cấp phát bộ nhớ động trong C
 
Giới thiệu ngôn ngữ lập trình C++
Giới thiệu ngôn ngữ lập trình C++Giới thiệu ngôn ngữ lập trình C++
Giới thiệu ngôn ngữ lập trình C++
 
Oop unit 02 java cơ bản
Oop unit 02 java cơ bảnOop unit 02 java cơ bản
Oop unit 02 java cơ bản
 
Nhat nghe c#
Nhat nghe   c#Nhat nghe   c#
Nhat nghe c#
 
Nhat nghe c#
Nhat nghe   c#Nhat nghe   c#
Nhat nghe c#
 
C# cơ bản hay
C# cơ bản hayC# cơ bản hay
C# cơ bản hay
 

More from TechMaster Vietnam

Go micro framework to build microservices
Go micro framework to build microservicesGo micro framework to build microservices
Go micro framework to build microservicesTechMaster Vietnam
 
Authentication and Authorization
Authentication and AuthorizationAuthentication and Authorization
Authentication and AuthorizationTechMaster Vietnam
 
Chia sẻ kinh nghiệm giảng dạy CNTT
Chia sẻ kinh nghiệm giảng dạy CNTTChia sẻ kinh nghiệm giảng dạy CNTT
Chia sẻ kinh nghiệm giảng dạy CNTTTechMaster Vietnam
 
Cơ sở dữ liệu postgres
Cơ sở dữ liệu postgresCơ sở dữ liệu postgres
Cơ sở dữ liệu postgresTechMaster Vietnam
 
Tìm nền tảng lập trình cho 5 năm tới
Tìm nền tảng lập trình cho 5 năm tớiTìm nền tảng lập trình cho 5 năm tới
Tìm nền tảng lập trình cho 5 năm tớiTechMaster Vietnam
 
Cấu hình Postgresql căn bản trong 20 phút
Cấu hình Postgresql căn bản trong 20 phútCấu hình Postgresql căn bản trong 20 phút
Cấu hình Postgresql căn bản trong 20 phútTechMaster Vietnam
 
Manage your project differently
Manage your project differentlyManage your project differently
Manage your project differentlyTechMaster Vietnam
 
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSXHướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSXTechMaster Vietnam
 
Day0: Giới thiệu lập trình ứng dụng Apple iOS
Day0: Giới thiệu lập trình ứng dụng Apple iOSDay0: Giới thiệu lập trình ứng dụng Apple iOS
Day0: Giới thiệu lập trình ứng dụng Apple iOSTechMaster Vietnam
 

More from TechMaster Vietnam (20)

Neural Network from Scratch
Neural Network from ScratchNeural Network from Scratch
Neural Network from Scratch
 
Go micro framework to build microservices
Go micro framework to build microservicesGo micro framework to build microservices
Go micro framework to build microservices
 
Flutter vs React Native 2018
Flutter vs React Native 2018Flutter vs React Native 2018
Flutter vs React Native 2018
 
Authentication and Authorization
Authentication and AuthorizationAuthentication and Authorization
Authentication and Authorization
 
Postgresql security
Postgresql securityPostgresql security
Postgresql security
 
Knex Postgresql Migration
Knex Postgresql MigrationKnex Postgresql Migration
Knex Postgresql Migration
 
Arrowjs.io
Arrowjs.ioArrowjs.io
Arrowjs.io
 
Minimum Viable Products
Minimum Viable ProductsMinimum Viable Products
Minimum Viable Products
 
Chia sẻ kinh nghiệm giảng dạy CNTT
Chia sẻ kinh nghiệm giảng dạy CNTTChia sẻ kinh nghiệm giảng dạy CNTT
Chia sẻ kinh nghiệm giảng dạy CNTT
 
Cơ sở dữ liệu postgres
Cơ sở dữ liệu postgresCơ sở dữ liệu postgres
Cơ sở dữ liệu postgres
 
Node.js căn bản
Node.js căn bảnNode.js căn bản
Node.js căn bản
 
Tìm nền tảng lập trình cho 5 năm tới
Tìm nền tảng lập trình cho 5 năm tớiTìm nền tảng lập trình cho 5 năm tới
Tìm nền tảng lập trình cho 5 năm tới
 
iOS Master - Detail & TabBar
iOS Master - Detail & TabBariOS Master - Detail & TabBar
iOS Master - Detail & TabBar
 
Phalcon căn bản
Phalcon căn bảnPhalcon căn bản
Phalcon căn bản
 
Cấu hình Postgresql căn bản trong 20 phút
Cấu hình Postgresql căn bản trong 20 phútCấu hình Postgresql căn bản trong 20 phút
Cấu hình Postgresql căn bản trong 20 phút
 
Phalcon introduction
Phalcon introductionPhalcon introduction
Phalcon introduction
 
Slide that wins
Slide that winsSlide that wins
Slide that wins
 
Manage your project differently
Manage your project differentlyManage your project differently
Manage your project differently
 
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSXHướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
 
Day0: Giới thiệu lập trình ứng dụng Apple iOS
Day0: Giới thiệu lập trình ứng dụng Apple iOSDay0: Giới thiệu lập trình ứng dụng Apple iOS
Day0: Giới thiệu lập trình ứng dụng Apple iOS
 

Basic C programming

  • 1. C căn bản Đơn giản mà đẹp cuong@techmaster.vn
  • 2. Ngôn ngữ C • Năm sinh 1972 • Bố: Dennis Ritchie, Me: Bell Labs • Lần nâng cấp gần đây C11, 2011 • Đa nền tảng: Linux, Unix, Mac, Windows • Mã nguồn: *.c, *.h
  • 3.
  • 4. Ưu điểm • Cú pháp đơn giản • ~ 60% Javascript, C++, Java… • Thực thi nhanh • Tiết kiệm bộ nhớ • Đa nền tảng • Thích hợp để học thuật toán Nhược điểm • Thiếu tính năng mạnh – Hướng đối tượng – Chồng toán tử – Generic programming – Functional programming
  • 5. Top 3 ngôn ngữ phổ biến
  • 6. Ứng dụng nổi tiếng viết bằng C • Hầu hết các hệ điều hành • Các phần mềm máy chủ http://www.mycplus.com/featured-articles/top-10- applications-written-in-c-cplusplus/
  • 7. Lợi ích khi học C • Nhập cuộc đơn giản, cú pháp tối giản • Dễ dàng chuyển đổi sang ngôn ngữ khác • Hiểu hệ điều hành quản lý bộ nhớ • Tính năng ít, phải tự viết nhiều à hiểu sâu • Thạo C đi xin việc được
  • 8. C awesome • https://notabug.org/koz.ross/awes ome-c • https://github.com/aleksandar- todorovic/awesome-c
  • 9. Học C trong 2 tiếng
  • 10. #include <stdio.h> int main() { printf("Hello, World!n"); return 0; } Nhúng thư viện có sẵn Hàm chính luôn chạy đầu tiên In ra terminal hoặc console
  • 11. Công cụ soạn mã IDE Windows Linux Mac Visual Studio $ ✔ Clion $ ✔ ✔ ✔ XCode ✔ CodeBlocks ✔ DevC ✔ NetBeans ✔ ✔ ✔ Eclipse ✔ ✔ ✔ Sublime Text $ ✔ ✔ ✔
  • 12. Vim editor soạn thảo C trực tiếp trong terminal
  • 13. printf – in ra màn hình • (formatstring, param1, param2, param3…); • %d decimal number • %c character • %s string • %f float • %p pointer • n new line
  • 14. Kết quả in ra là gì? #include <stdio.h> main() { int i = 0; for (i = 0; i < 10; i++) { printf("Line %dn", i); } return 0; }
  • 15. Trình biên dịch - compiler • Mac – make • Linux, Windows – gcc, g++ https://www.youtube.com/watch?v=B-ru- q_Bm2I
  • 17. IDE • Ứng dụng soạn thảo code • Giao diện đồ hoạ: highlight syntax… • Quản lý nhiều file mã nguồn, dự án • Tích hợp hoặc gọi đến compiler Compiler • Trình biên dịch mã nguồn ra file chạy • Có nhiều option: – Debug – Release • Chạy trên dòng lệnh, không có giao diện
  • 18. Cú pháp • #include <stdio.h> • #include "MyHeader.h" • Chú thích 1 dòng //something • Chú thích khối /* line 1 line 2 */
  • 20. Kiểu dữ liệu số nguyên sizeof Value range char 1 byte -128 to 127 . Or 0 to 255 signed char 1 byte -128 to 127 unsigned char 1 byte 0 to 255 int 2 or 4 bytes -32,768 to 32,767 or -2,147,483,648 to 2,147,483,647 unsigned int 2 or 4 bytes 0 to 65,535 or 0 to 4,294,967,295 short 2 bytes -32,768 to 32,767 unsigned short 2 bytes 0 to 65,535 long 8 bytes -2^31+1 to +2^31-1 unsigned long 8 bytes 0 to 2^32-1 long long 8 or 16 bytes -2^63+1 to +2^63-1
  • 21. #include <stdio.h> void main() { int a = 10; float pi = 3.14158; char c = 32; long long bigLong = 100; long largeInt = 10000; double bigFloat = 1.168; printf("size %lu", sizeof(bigLong)); }
  • 22. CPU 32 bit khả năng đánh địa chỉ tối đa 2^32
  • 23. Dấu phẩy động –floating point types Type Size Value range Precision float 4 bytes 1.2E-38 to 3.4E+38 6 decimal places double 8 bytes 2.3E-308 to 1.7E+308 15 decimal places long double 10 bytes 3.4E-4932 to 1.1E+4932 19 decimal places
  • 24. Kiểu void • Không có gì, không tồn tại • Không dùng void khai báo biến • Dùng void * khai báo con trỏ kiểu không xác định • Hàm không trả về giá trị void doSomething() { printf("Return nothing from this func"); } void* a;
  • 25. Sử dụng void #include <stdio.h> void doSomething() { printf("Do something returns nothing"); } main() { //void a; //Cannot compile int x = 10; void* b = &x; printf("%dn", *(int*)b); doSomething(); return 0; }
  • 26. Ký tự - char • Ký tự trong C chiếm 1 byte, không hỗ trợ unicode char c ='C'; char space = 32; char six = '0' + 6; Xem quy chuẩn bẳng mã ASCII https://vi.wikipedia.org/wiki/ASCII
  • 27. In tuần tự a-z #include <stdio.h> main() { char c; for (c = 'a'; c < 'z'; c++) { printf("%cn", c); } return 0; }
  • 28. Con trỏ - Pointer
  • 29. Con trỏ - Pointer • Nhiều ngôn ngữ lập trình không cần con trỏ: Visual Basic, C#, Swift, Java, Javascript, Scala • Tại sao C vẫn dùng con trỏ? • Liệu con trỏ có thực sự cần thiết
  • 30. Tại sao C dùng con trỏ ? • C rất sát với hệ điều hành • Quản lý bộ nhớ thủ công – nhanh nhưng rủi ro • Con trỏ để tham chiếu đến các biến trong bộ nhớ • Cấp phát – giải phóng bộ nhớ
  • 31. #include <stdio.h> int main() { int a = 10; int *p = &a; printf("Value p points to %dn", *p); printf("Address that p points at %pn", p); printf("Address of p itself in mem %pn", &p); a = 11; printf("New value p points to %dn", *p); return 0; } Value p points to 10 Address of p points to 0x7fff5c049b68 Address of actual p 0x7fff5c049b60 New value p points to 11
  • 32. a = 100x7fff5c049b68 0x7fff5c049b60 p=1597348712 Value p points to 10 Address of p points to 0x7fff5c049b68 Address of actual p 0x7fff5c049b60 New value p points to 11
  • 33. Con trỏ có kích thước không? • Ở hệ điều hành 32bit, nó chiếm 4 bytes, ở hệ 64bit, nó chiếm 8 bytes • 32 bits = 4 bytes, dải vùng nhớ khoảng 4GB • 64 bits = 8 bytes lớn gấp 2^32 lần
  • 34. 1 128 64 32 16 8 4 2 1 1 1 1 1 1 1 1
  • 35. Khả năng đánh địa chỉ hệ 64 bit You will never, ever be able to assemble a system that has 264 bytes (16 exibytes) of physical RAM. Second, just because an architecture uses 64-bit pointers, doesn't mean that all the bits of those pointers are actually used. Notably, current x86-64 CPUs (aka AMD64 and Intel's current 64-bit chips) actually use 48-bit address lines (AMD64) and 42-bit address lines (Intel) (see http://en.wikipedia.org/wiki/X86_64#Virtual_address_space _details ), theoretically allowing 256 terabytes of physical RAM. Trích https://superuser.com/questions/168114/how-much-memory-can-a- 64bit-machine-address-at-a-time/168120
  • 36. Mảng 1 chiều, 2 chiều
  • 37. Mảng - Array • Fixed size array • Memory allocated array int scores[] = {1, 2, 3}; char sizes[] = {'S', 'M', 'L'}; char* workdays[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"}; int *intArray = malloc(10* sizeof(int)); intArray[0] = 100; free(intArray);
  • 38. Đặc điểm mảng • Phần tử đầu tiên đánh vị trí 0 • Không thay đổi được kích thước sau khi khai báo • Các phần tử nằm liên tiếp nhau
  • 39. #include <stdio.h> #include <stdlib.h> int main() { const int N = 10; int *intArray = malloc(N * sizeof(int)); free(intArray); int i = 0; while (i < N) { intArray[i] = i; i++; } free(intArray); return 0; }
  • 40. int int2D[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { printf("%d", int2D[i][j]); if (j < 2) { printf(", "); } else { printf("n"); } } } Mảng 2 chiều 1, 2, 3 4, 5, 6 7, 8, 9 In ra
  • 41. C string, mảng ký tự kiểu char
  • 42. H e l l o W o r l d 0 p Terminated character, value = 0; 0 1 2 3 4 5 6 7 8 9 10 p[2] char* p ="Hello World"; strlen(p) == 11
  • 43. Thư viện <string.h> • strlen trả về số ký tự • strcpy copy từ mảng này sang mảng kia • memset đặt 1 ký tự N lần vào mảng • strcmp so sánh 2 chuỗi https://www.tutorialspoint.com/c_standard_libr ary/string_h.htm
  • 44. #include <stdio.h> #include <string.h> int main() { char *p = "Hello World"; char str[] = "Hello World"; char chuoi[100]; strcpy(chuoi, "Hello World"); printf("%sn", chuoi); int val = strcmp(p, chuoi); if (val == 0) { printf("Giong nhaun"); } else { printf("Khac nhaun"); } memset(chuoi, 'A', 11); printf("%sn", chuoi); return 0; }
  • 45. Kiểu dữ liệu khác trong C
  • 46. Boolean: đúng hoặc sai • C không có kiểu nguyên thuỷ boolean • Dùng kiểu char lấy giá trị 0 hoặc 1 để thay thế • Hoặc dùng thư viện stdbool.h
  • 47. #include <stdbool.h> int main() { bool continueLoop = true; int i = 0; while (continueLoop) { if (i > 10) continueLoop = false; i++; } return 0; }
  • 48. struct • Gom nhiều biến liên quan thành một cụm • Có thể định nghĩa kiểu để tái sử dụng
  • 49. int main() { struct Book { char *title; char *author; int ISBN; } book; struct Book b; b.title = "The C Programming Language"; b.author = "Brian W Kernighan & Dennis M. Ritchie"; b.ISBN = 0131101633; return 0; }
  • 50. typedef typedef struct { char *title; char *author; int ISBN; } Book; struct Book { char *title; char *author; int ISBN; }; Ngắn gọn hơn typedef đặt tên mới cho kiểu
  • 51. #include <stdio.h> typedef unsigned char BYTE; typedef unsigned char BOOL; #define true 1 #define false 0 int main() { BYTE rock = 125; BOOL isTrue = true; if (isTrue) { printf("%d", rock); } return 0; } typedef đặt tên kiểu mới #define đặt tên giá trị
  • 53. C có hỗ trợ hướng đối tượng? • Không. C++ hỗ trợ hướng đối tượng • C++ là ngôn ngữ phát triển lên từ C
  • 54. C-99, C-11 là gì? • C-99 là tiêu chuẩn C được thống nhất năm 1999 • C—11 là tiêu chuẩn C được thống nhất năm 2011
  • 55. File binary biên dịch ở Windows có chạy được trên Linux không? • Không • Mã nguồn C là portable, có thể biên dịch lại trên các hệ điều hành khác nhau • Nhưng file binary biên dịch không portable