Hướng dẫn viết chương trình c++

Trong bài này mình sẽ hướng dẫn các bạn cách viết chương trình C Hello World đầu tiên, và thông qua chương trình này bạn sẽ hiểu được cấu trúc của một chương trình C.

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Mã nguồn chương trình C có thể được viết trong bất kỳ trình soạn thảo văn bản nào, tuy nhiên file nên được lưu với phần mở rộng “.c”. Để giỏi một ngôn ngữ lập trình thì không có cách nào khác ngoài khác luyện tập code thường xuyên, chính vì thế cùng bắt tay vào viết chương trình C đầu tiên thôi nào.

1. Chương trình C đầu tiên

Trước tiên hãy tham khảo một chương trình dưới đây. Tạm thời bạn đừng quan tâm đến ý nghĩa của nó, hãy xem code, copy nó vào chương trình của bạn và chạy xem kết quả, sau đó xem phần giải thích nhé.

/* Demo được viết bởi Chaitanya trên BeginnersBook.com*/
#include
int main[]
{
      int num;
      printf["Nhap tuoi cua ban: "];
      scanf["%d", &num];
      if [num  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...

Nhập vào:

  • Source file: MyFirstExample.cpp
  • Template: Default C source temple

File nguồn đã được tạo ra, nó chẳng có gì cả.

Chúng ta sẽ viết code cho file nguồn này:

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.

MyFirstExample.cpp


// Khai báo sử dụng thư viện vào ra chuẩn stdio.h
// [Standard IO / Standard Input Output]
#include

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ụ:

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

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

6.1- Kiểu số nguyên

TypeStorage sizeValue rangeFormat
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  

6.2- Kiểu số chấm động [Floating point type]

Kiểu dữ liệuKí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

6.3- Ví dụ

PrimitiveExample.cpp


// Khai báo sử dụng thư viện vào ra chuẩn stdio.h
// [Standard IO / Standard Input Output]
#include 

// Khai báo sử dụng thư viện float.h
#include 


int main[] {

	// Hàm sizeof[type]
	// trả về số byte cần thiết để lưu trữ kiểu dữ liệu này.
	printf["Storage size for float : %d \n", sizeof[float]];

	// FLT_MIN là hằng số, giá trị nhỏ nhất của kiểu float.
	// Hằng số này được định nghĩa trong thư viện float.h
	printf["Minimum float positive value: %E\n", FLT_MIN];

	// FLT_MAX là hằng số, giá trị lớn nhất của kiểu dữ liệu float.
	// Hằng số này được định nghĩa trong thư viện float.h
	printf["Maximum float positive value: %E\n", FLT_MAX];

	// FLT_DIG là hằng số, số vị trí tối đa của phần thập phân.
	// Hằng số này được định nghĩa trong thư viện float.h
	printf["Precision value: %d\n", FLT_DIG];

	return 0;

}

Kết quả chạy ví dụ:

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]
= 80 && age Need ';' return 0; }

Kết quả chạy ví dụ:

9.4- Lệnh break trong vòng lặp

break là một lệnh nó có thể nằm trong một khối lệnh của một vòng lặp. Đây là lệnh kết thúc vòng lặp vô điều kiện.

BreakExample.cpp


#include 

int main[] {

	printf["Break example\n"];

	fflush [stdout];

	// Tạo một biến x và gán giá trị 2 cho nó.
	int x = 2;

	while [x < 15] {

		printf["----------------------\n"];
		printf["x = %d \n", x];

		// Kiểm tra nếu x = 5 thì thoát ra khỏi vòng lặp.
		if [x == 5] {
			break;
		}
		// Tăng giá trị của x lên 1 [Viết ngắn gọn cho x = x + 1].
		x++;
		printf["x after ++ = %d \n", x];

	}
	return 0;

}

Kết quả chạy ví dụ:

9.5- Lệnh continue trong vòng lặp

continue là một lệnh, nó có thể nằm trong một vòng lặp, khi bắt gặp lệnh continue chương trình sẽ bỏ qua các dòng lệnh trong cùng vòng lặp và ở phía dưới của continue và bắt đầu một vòng lặp mới.

ContinueExample.cpp


#include 

int main[] {

	printf["Continue example\n"];

	fflush [stdout];

	// Tạo một biến x và gán giá trị 2 cho nó.
	int x = 2;

	while [x < 7] {

		printf["----------------------\n"];
		printf["x = %d \n", x];

		// % là toán tử chia lấy số dư.
		// [Remainder operator].
		// Nếu x là số chẵn, thì bỏ qua các dòng lệnh phía dưới
		// của 'continue', tiếp tục bước lặp mới [nếu có].
		if [x % 2 == 0] {
			// Tăng giá trị của x lên 1 [Viết ngắn gọn cho x = x + 1;].
			x++;
			continue;
		} else {
			// Tăng giá trị của x lên 1 [Viết ngắn gọn cho x = x + 1;].
			x++;
		}
		printf["x after ++ = %d \n", x];

	}
	return 0;

}

Kết quả chạy ví dụ:

10- Mảng trong C

10.1- 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 

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ụ:

10.2- Mảng hai chiều

Đây là hình minh họa một mảng 2 chiều

Cú 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 

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à:

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 

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;

}

11.1- NULL Pointer

NULL 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 

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

Bài Viết Liên Quan

Chủ Đề