Hướng Dẫn Lập Trình C Cho Người Mới Bắt đầu - Openplanning
- Tất cả tài liệu
- Java
- Java Basic
- Java Collections Framework
- Java IO
- Java New IO
- Java Date Time
- Servlet/JSP
- Eclipse Tech
- SWT
- RCP
- RAP
- Eclipse Plugin Tools
- XML & HTML
- Java Opensource
- Java Application Servers
- Maven
- Gradle
- Servlet/Jsp
- Thymeleaf
- Spring
- Spring Boot
- Spring Cloud
- Struts2
- Hibernate
- Java Web Service
- JavaFX
- SWT
- Oracle ADF
- Android
- iOS
- Python
- Swift
- C#
- C/C++
- Ruby
- Dart
- Batch
- Database
- Oracle
- MySQL
- SQL Server
- PostGres
- Other Database
- Oracle APEX
- Report
- Client
- ECMAScript / Javascript
- TypeScript
- NodeJS
- ReactJS
- Flutter
- AngularJS
- HTML
- CSS
- Bootstrap
- OS
- Ubuntu
- Solaris
- Mac OS
- VPS
- Git
- SAP
- Amazon AWS
- Khác
- Chưa phân loại
- Phần mềm & ứng dụng tiện ích
- VirtualBox
- VmWare
- Bắt đầu với C/C++ cần những gì
- Phân biệt C và C++
- Tạo Project bắt đầu với C
- Đặc điểm của C và chú ý trong thực hành
- Cấu trúc của một chương trình C
- Kiểu dữ liệu trong C
- Câu lệnh rẽ nhánh trong C (if - else if - else)
- Câu lệnh rẽ nhánh Switch
- Vòng lặp trong C
- Mảng trong C
- Con trỏ (Pointer)
- Hàm (Function)
1. Bắt đầu với C/C++ cần những gì
Các tài liệu hướng dẫn C/C++ trên website o7planning chúng tôi sử dụng Eclipse IDE. Bạn cần cài đặt và cấu hình Eclipse và môi trường C/C++ trước khi bắt đầu. Bạn có thể xem chỉ dẫn tại:- Bắt đầu với C/C++ cần những gì?
2. Phân biệt C và C++
Bạn cần có cái nhìn tổng quát để phân biệt C và C++.C là ngôn ngữ ra đời trước, và là ngôn ngữ hướng thủ tục, nó dễ dàng được triển khai và chạy trên các hệ điều hành. C++ ra đời sau mở rộng từ C nó mang vào khái niệm lập trình hướng đối tượng, C là nền tảng của C++, và C++ không ra đời để thay thế C, các thư viện của nó được mở rộng lên rất nhiều.Lập trình hướng thủ tục ở đây có nghĩa là: Các file nguồn (Chứa code của bạn) sẽ chứa các hàm. Trong khi đó hướng đối tượng file nguồn chứa một class (lớp) và trong class có chứa các phương thức. Để gọi một phương thức trong một class bạn cần tạo ra một đối tượng của class và sau đó gọi hàm thông qua đối tượng này, trong khi đó với hướng thủ tục bạn có thể gọi trực tiếp.Trong tài liệu hướng dẫn này tôi sẽ hương dẫn bạn làm việc trên C. Còn C++ sẽ được đề cập tới trong một tài liệu khác.3. Tạo Project bắt đầu với C
Nếu bạn làm việc với: Windows 64bit + Eclipse 64bit + Java64bit, bạn cần phải mở Eclipse với quyền Administrator, có một rắc rối là Eclipse không in các message ra màn hình Console trong trường hợp chạy ở chế độ thông thường.
- File/New/Other..
- CBasicTutorial
4. Đặc điểm của C và chú ý trong thực hành
Khi một chương trình C được chạy nó sẽ tìm hàm main() để thực thi, chẳng hạn thực thi hàm main() của ví dụ HelloWorld nói trên. Một chương trình C có thể có nhiều file nguồn, mỗi file nguồn có thể nhiều hàm. Tuy nhiên chỉ cho phép duy nhất một hàm main() trên toàn bộ Project của bạn.Trên kia bạn vừa tạo ra một file CBasicTutorial.cpp nó có một hàm main(), giờ bạn tạo ra một file khác để thực hành chẳng hạn PrimitiveExample.cpp và có hàm main() bạn cần đổi tên hàm main() của CBasicTutorial.cpp thành một tên khác để nó không xung đột và bạn có project thể biên dịch được, sau đó có thể thực hành những gì viết trong PrimitiveExample.cpp.Theo tôi trong quá trình thực hành bạn nên chọn cách đổi tên như sau:- CBasicTutorial.cpp
- main() ==> mainCBasicTutorial()
5. Cấu trúc của một chương trình C
Tôi sẽ tạo ra một file cpp mới để minh họa và giải thích về cấu trúc của một chương trình C.Trên Eclipse chọn:- File/New/Other...
- Source file: MyFirstExample.cpp
- Template: Default C source temple
MyFirstExample.cpp// Khai báo sử dụng thư viện vào ra chuẩn stdio.h // (Standard IO / Standard Input Output) #include<stdio.h> int main() { // printf là một hàm của thư viện stdio.h // Đây là một hàm để in ra màn hình Console một dòng chữ. // \n là ký tự xuống dòng printf("Hello!, This is your first C example.\n"); // In ra dòng thông báo ứng dụng sẽ kết thúc. printf("Exit!"); // Hàm này trả về 0. return 0; }Chạy ví dụ:Kết quả chạy ví dụ:Chú ý: Hãy đổi tên hàm main của file nguồn CBasicTutorial.cpp thành mainCBasicTutorial vì một project của C chỉ cho phép một hàm main trên toàn bộ Project.
Có một vài chú ý: Có một số hàm trong thư viện conio.h của C đã không được hỗ trợ trong C++. Chẳng hạn như getch() - Vốn là một hàm tạm dừng chương trình chờ cho tới khi người dùng gõ một ký tự bất kỳ mới tiếp tục chạy tiếp. Vì vậy trong hướng dẫn này tôi cố gắng không sử dụng các hàm như vậy trong các ví dụ.
#include<conio.h> int main() { // Làm gì đó tại đây .... // Dừng chương trình tại đây, // chờ cho tới khi người dùng gõ một ký tự bất kỳ mới tiếp tục chạy. // (Hàm này không được hỗ trợ đầy đủ) getch(); // Làm gì đó tiếp tại đây. }
6. Kiểu dữ liệu trong C
Kiểu số nguyênType | Storage size | Value range | Format |
char | 1 byte | -128 to 127 or 0 to 255 | %c |
unsigned char | 1 byte | 0 to 255 | %c |
signed char | 1 byte | -128 to 127 | %s |
int | 2 or 4 bytes | -32,768 to 32,767 or -2,147,483,648 to 2,147,483,647 | %d |
unsigned int | 2 or 4 bytes | 0 to 65,535 or 0 to 4,294,967,295 | %u |
short | 2 bytes | -32,768 to 32,767 | |
unsigned short | 2 bytes | 0 to 65,535 | |
long | 4 bytes | -2,147,483,648 to 2,147,483,647 | %ld |
unsigned long | 4 bytes | 0 to 4,294,967,295 |
Kiểu dữ liệu | Kích thước lưu trữ | Tập giá trị | Phần thập phân |
float | 4 byte | 1.2E-38 to 3.4E+38 | 6 vị trí sau thật phân |
double | 8 byte | 2.3E-308 to 1.7E+308 | 15 vị trí sau thật phân |
long double | 10 byte | 3.4E-4932 to 1.1E+4932 | 19 vị trí sau thật phân |
7. Câu lệnh rẽ nhánh trong C (if - else if - else)
if là một câu lệnh kiểm tra một điều kiện gì đó trong C. Chẳng hạn: Nếu a > b thì làm gì đó ....Các toán tử so sánh thông dụng:Toán tử | Ý nghĩa | Ví dụ |
> | Lớn hơn | 5 > 4 là đúng (true) |
< | Nhỏ hơn | 4 < 5 là đúng (true) |
>= | Lớn hơn hoặc bằng | 4 >= 4 là đúng (true) |
<= | Nhỏ hơn hoặc bằng | 3 <= 4 là đúng (true) |
== | Bằng nhau | 1 == 1 là đúng (true) |
!= | Không bằng nhau | 1 != 2 là đúng (true) |
&& | Và | a > 4 && a < 10 |
|| | Hoặc | a == 1 || a == 4 |
8. Câu lệnh rẽ nhánh Switch
Cú pháp câu lệnh rẽ nhánh switch:// Sử dụng switch để kiểm tra một giá trị của một biến. switch ( a_variable ) { case value1: // Làm gì đó ở đây, nếu giá trị của biến == value1 break; case value2: // Làm gì đó ở đây, nếu giá trị của biến == value2 break; default: // Làm điều gì đó tại đây // nếu giá trị của biến không thuộc các giá trị liệt kê ở trên. break; }SwitchExample.cpp#include <stdio.h> int main() { // Đề nghị người dùng chọn 1 lựa chọn. printf("Please select one option:\n"); printf("1 - Play a game \n"); printf("2 - Play music \n"); printf("3 - Shutdown computer \n"); fflush (stdout); // Khai báo một biến 'option'. int option; // Hàm scanf sẽ đợi bạn gõ vào một đoạn text từ bàn phím // (Và nhấn enter để hoàn thành). // Nó sẽ quét lấy một số (Chỉ định bởi tham số %d) // Chuyển thành số tự nhiên (integer) và gán vào biến option. scanf("%d", &option); // Kiểm tra giá trị của 'option'. switch (option) { case 1: printf("You choose to play the game \n"); break; case 2: printf("You choose to play the music \n"); break; case 3: printf("You choose to shutdown the computer \n"); break; default: printf("Nothing to do...\n"); break; } fflush(stdout); return 0; }Kết quả chạy ví dụ (Trong trường hợp nhập vào số 2 và nhấn Enter).Chú ý:Có một vấn đề bạn đặt ra câu lệnh break trong trường hợp này có ý nghĩa gì?. break trong trường hợp này nói với chương trình rằng thoát ra khỏi switch. Trong trường hợp bạn không sử dụng break câu chương trình sẽ tiếp tục thực hiện các khối lệnh trong 'case' ở phía dưới (hoặc cả default) cho tới khi nó bắt gặp break, kể cả giá trị của biến trong trường hợp đó khác với giá trị trong 'case'.Hãy xem một ví dụ minh họa:SwitchExample2.cpp#include <stdio.h> int main() { // Khai báo biến option và gán giá trị 3 cho nó. int option = 3; printf("Option = %d \n", option); // Kiểm tra giá trị của option switch (option) { case 1: printf("Case 1 \n"); break; case 2: printf("Case 2 \n"); // No break case 3: printf("Case 3 \n"); // No break case 4: printf("Case 4 \n"); // No break case 5: printf("Case 5!!! \n"); break; default: printf("Nothing to do...\n"); break; } fflush (stdout); return 0; }Kết quả chạy ví dụ:9. Vòng lặp trong C
Vòng lặp được sử dụng để chạy lặp lại một khối lệnh. Nó làm chương trình của bạn thực thi lặp đi lặp lại một khối lệnh nhiều lần, đây là một trong các nhiệm vụ cơ bản trong lập trình.C hỗ trợ 3 loại vòng lặp khác nhau:- FOR
- WHILE
- DO WHILE
10. Mảng trong C
Mảng một chiềuĐây là hình minh họa về mảng một chiều có 5 phần tử, các phần tử được đánh chỉ số từ 0 tới 4.Cú pháp khai báo mảng một chiều:// Cách 1: // Khai báo một mảng các số int, chỉ rõ các phần tử. int years[] = { 2001, 2003, 2005, 1980, 2003 }; // Cách 2: // Khai báo một mảng có 5 phần tử, // chỉ định giá trị cho 3 phần tử đầu tiên. int age[5] = { 20, 10, 50 }; // Cách 3: // Khai báo một mảng các số float, chỉ rõ số phần tử. // (Kích thước 3). float salaries[3];ArrayExample1.cpp#include <stdio.h> int main() { // Cách 1: // Khai báo một mảng với các phần tử. int years[] = { 2001, 2003, 2005, 1980, 2003 }; // Ghi ra số byte cần thiết để lưu trữ kiểu int. printf("Sizeof(int) = %d \n", sizeof(int)); // Số byte cần thiết để để lưu trữ mảng này. printf("Sizeof(years) = %d \n", sizeof(years)); int arrayLength = sizeof(years) / sizeof(int); printf("Element count of array years = %d \n\n", arrayLength); // Sử dụng vòng lặp for để in ra các phần tử của mảng. for (int i = 0; i < arrayLength; i++) { printf("Element at %d = %d \n", i, years[i]); } fflush (stdout); // Cách 2: // Khai báo một mảng có kích thước 3. float salaries[3]; // Gán các giá trị cho các phần tử. salaries[0] = 1000; salaries[1] = 1200; salaries[2] = 1100; return 0; }Kết quả chạy ví dụ:Mảng hai chiềuĐây là hình minh họa một mảng 2 chiềuCú pháp khai báo một mảng 2 chiều:// Khai báo mảng 2 chiều chỉ định các phần tử. // 3 hàng & 5 cột int a[3][5] = { { 1, 2, 3, 4, 5 }, { 0, 3, 4, 5, 7 }, { 0, 3, 4, 0, 0 } }; // Khai báo một mảng 2 chiều, // Chỉ định số dòng, số cột. int a[3][5];ArrayExample2.cpp#include <stdio.h> int main() { // Khai báo một mảng 2 chiều (3 hàng, 5 cột) int a[3][5] = { { 1, 2, 3, 4, 5 }, { 0, 3, 4, 5, 7 }, { 0, 3, 4, 0, 0 } }; // Sử dụng vòng lặp for để in ra các phần tử của mảng. for (int row = 0; row < 3; row++) { for (int col = 0; col < 5; col++) { printf("Element at [%d,%d] = %d \n", row, col, a[row][col]); } } fflush (stdout); return 0; }Kết quả chạy ví dụ:11. Con trỏ (Pointer)
Một con trỏ (Pointer) là một biến có giá trị là địa chỉ của một biến khác, ví dụ, địa chỉ trực tiếp của vị trí bộ nhớ. Giống như bất kỳ biến hoặc hằng số, bạn phải khai báo một con trỏ trước khi bạn có thể sử dụng nó để lưu trữ bất kỳ địa chỉ biến nào. Cú pháp khai báo biến con trỏ là:type *variable-name;Ví dụ:// Khai báo một biến kiểu int. int var = 120; // Khai báo một con trỏ (pointer) (trỏ tới địa chỉ của kiểu int). int *ip; // Gán giá trị cho ip (Trỏ tới địa chỉ của biến 'var'). ip = &var; // Sử dụng * để truy cập vào giá trị của biến mà con trỏ đang trỏ tới. int var2 = *ip;PointerExample.cpp#include <stdio.h> int main() { // Khai báo một biến int var = 120; // Khai báo một con trỏ (Pointer). int *ip; // Gán địa chỉ của biến 'var' cho con trỏ. ip = &var; // Ghi ra địa chỉ của biến 'var'. printf("Address of var variable: %x \n", &var); // Ghi ra địa chỉ được lưu trữ trong biến 'ip'. printf("Address stored in ip variable: %x \n", ip); // Truy cập vào giá của biến mà con trỏ đang trỏ tới. printf("Value of *ip variable: %d\n", *ip); fflush (stdout); int var2 = *ip; return 0; }NULL PointerNULL là một hằng số được định nghĩa trước trong một vài thư viện của C. Khi bạn khai báo một con trỏ mà không gán giá trị cụ thể cho con trỏ, nó sẽ trỏ vào một vùng bộ nhớ ngẫu nhiên. Trong một số tình huống bạn có thể khai báo con trỏ và gán trực tiếp giá trị NULL cho nó. Hãy xem một ví dụ:NULLPointerExample.cpp#include <stdio.h> int main() { // Khai báo một con trỏ (Pointer). // Không gán giá trị nào cho con trỏ này. // (Nó trỏ vào ngẫu nhiên vào vùng bộ nhớ nào đó). int *pointer1; // In ra địa chỉ của pointer1 printf("Address of pointer1 is %x \n", pointer1); // Kiểm tra pointer1 là khác NULL. if (pointer1) { // In ra giá trị của vùng bộ nhớ mà pointer1 đang trỏ tới. printf("Value of *pointer1 is %d \n", *pointer1); } // Khai báo một biến con trỏ (Pointer). // Trỏ tới vị trí NULL (Không trỏ tới đâu). int *pointer2 = NULL; // Ghi ra địa chỉ của pointer2. printf("Address of pointer2 is %x \n", pointer2); // Nếu pointer2 là NULL ghi ra thông báo. if (!pointer2) { printf("pointer2 is NULL"); } else { // CHÚ Ý: // Nếu pointer2 NULL truy cập vào giá trị của *pointer2 // sẽ bị lỗi và làm ngừng chương trình. printf("Value of *pointer2 is %d \n", *pointer2); } fflush (stdout); return 0; }Kết quả chạy ví dụ:12. Hàm (Function)
- TODO
Các hướng dẫn Lập trình C/C++
- Hướng dẫn lập trình C cho người mới bắt đầu
- Bắt đầu với C/C++ cần những gì?
- Cài đặt công cụ phát triển C/C++ cho Eclipse
- Cài đặt trình biên dịch C/C++ MinGW trên Windows
- Cài đặt trình biên dịch C/C++ CygWin trên Windows
- Lớp và đối tượng trong C++
- Hướng dẫn và ví dụ C/C++ string
Các hướng dẫn Lập trình C/C++
- Hướng dẫn lập trình C cho người mới bắt đầu
- Bắt đầu với C/C++ cần những gì?
- Cài đặt công cụ phát triển C/C++ cho Eclipse
- Cài đặt trình biên dịch C/C++ MinGW trên Windows
- Cài đặt trình biên dịch C/C++ CygWin trên Windows
- Lớp và đối tượng trong C++
- Hướng dẫn và ví dụ C/C++ string
Các bài viết mới nhất
- Xử lý lỗi 404 trong Flutter GetX
- Ví dụ đăng nhập và đăng xuất với Flutter Getx
- Hướng dẫn và ví dụ Flutter NumberTextInputFormatter
- Hướng dẫn và ví dụ Flutter multi_dropdown
- Hướng dẫn và ví dụ Flutter flutter_form_builder
- Hướng dẫn và ví dụ Flutter GetX obs Obx
- Hướng dẫn và ví dụ Flutter GetX GetBuilder
- Từ khoá part và part of trong Dart
- Hướng dẫn và ví dụ Flutter InkWell
- Bài thực hành Flutter SharedPreferences
- Hướng dẫn và ví dụ Flutter Radio
- Hướng dẫn và ví dụ Flutter Slider
- Hướng dẫn và ví dụ Flutter SkeletonLoader
- Chỉ định cổng cố định cho Flutter Web trên Android Studio
- Hướng dẫn và ví dụ Flutter SharedPreferences
- Tạo Module trong Flutter
- Flutter upload ảnh sử dụng http và ImagePicker
- Bài thực hành Dart http CRUD
- Hướng dẫn và ví dụ Flutter image_picker
- Flutter GridView với SliverGridDelegate tuỳ biến
- Các hướng dẫn Lập trình C/C++
Từ khóa » Học C
-
Bài 1. Giới Thiệu Khóa Học “Học C Bá Đạo” - Lập Trình Không Khó
-
Học Lập Trình C Cơ Bản Và Nâng Cao
-
Lập Trình C Cơ Bản Dành Cho Người Mới Học Lập Trình
-
C Cho Người Mới Bắt đầu - CodeLearn
-
Tài Liệu Lập Trình C/C++ Và Các Bước Tự Học Lập Trình - TMA Solutions
-
Lộ Trình Học Lập Trình C Từ A Tới Z Cho Người Mới Bắt đầu
-
Chạy Chương Trình C Trên Dev C++ | Tự Học Lập Trình C - YouTube
-
Tài Liệu Học Lập Trình C Cho Người Mới Bắt đầu 2021 | Ironhack VN
-
Học Lập Trình C Căn Bản & Nâng Cao - Freetuts
-
MIỄN PHÍ 100% | Series Tự Học C/C++ Từ Cơ Bản Tới Nâng Cao
-
Khóa Học Lập Trình C/C++ – Dành Cho Người Mới Bắt Đâu
-
Khóa Học C++
-
TUT C/C++ Cơ Bản - Nguyễn Văn Quân
-
Tất Tần Tật Về C Và C++ - TopDev