Chương 2 Cấu trúc và thành phần của chương trình C

Presenter:

Nhập môn về lập trình (C2) Slide 1

Nội dung

Chương trình C đơn giản. Phong cách lập trình. Rèn luyện việc xuất ra màn hình. Đọc dữ liệu từ bàn phím. Xử lý đơn giản.

Nhập môn về lập trình (C2) Slide 2

Learning outcomes

L.O.1.4 – Biết được cấu trúc và hiểu được các thành phần của một chương trình viết bằng ngôn ngữ lập trình C.

L.O.1.5 – Vận dụng được các nguyên tắc trong phong cách lập trình để viết được các chương trình trong sáng và dễ đọc.

L.O.1.6 – Liệt kê được các kiểu dữ liệu cơ bản trong C và ghi ra giá trị điển hình của các kiểu đó trong mã nguồn.

L.O.1.7 – Sử dụng được các hàm để đọc dữ liệu từ bàn

phím và xuất dữ liệu ra màn hình.

Nhập môn về lập trình (C2) Slide 3

Chương trình C đơn giản

i.e., quit the program

// "printf" is a function, which is defined in printf("Ho Chi Minh city University of Technology\n"); printf("Programming Fundamentals"); // _getch() causes the program pause before close the console window, // // _getch() is a function, which is defined in _getch();

#include “stdafx.h” #include /* This is a simple program, which is used to show the structure of programs developed in C The objective of this program is to print the following information on different lines 1. University's name 2. Course's name */ void main() { }

Nhập môn về lập trình (C2) Slide 4

Chương trình C đơn giản

Các thành phần

 Khai báo thư viện sẽ được sử dụng

 Cho biết chương trình có sử dụng 2 thư viện hàm stdio.lib (gián tiếp qua stdafx.h) và conio.lib.

 Thư viện stdio.lib chứa hàm printf.

 Thư viện conio.lib chứa hàm _getch.

 Cách khai báo bằng chỉ thị #include

 Chỉ thị #include:

như hình bên.

#include “stdafx.h” #include void main() { }

 Chú ý dấu “ ” và < >.

printf(“123"); printf(“456\n"); _getch();

Nhập môn về lập trình (C2) Slide 5

Chương trình C đơn giản

Các thành phần

 Chương trình viết bằng C sẽ bắt đầu chạy từ hàm main().

 main (viết toàn chữ thường) là tên hàm, chú ý dấu ().

• Lệnh đầu tiên ngay sau hàm main() • Mỗi chương trình viết bằng C phải có một hàm có tên main

Dấu “{“ đánh dấu bắt đầu phần thân hàm main

Dấu “}“ đánh dấu điểm kết thúc phần thân hàm main // Thân hàm

void main() { }

Nhập môn về lập trình (C2) Slide 6

Chương trình C đơn giản

Kiểu trả kết quả

 Kiểu trả kết quả do từ khóa viết trước tên hàm quy định (void).

 Trong trường hợp này, void có nghĩa là không trả kết quả về.

void main() { }

Nơi này xác định kiểu trả kết quả về của hàm (main) void : Hàm main không trả kết quả gì về cả

Nhập môn về lập trình (C2) Slide 7

Các thành phần

Chương trình C đơn giản

 Chú thích

 Chú thích là văn bản không

cần có văn phạm của C.

Chú thích

 Chú thích được chèn vào nhằm giải thích, ghi chú, đánh dấu, hay làm tiêu đề dẫn nhập cho phần tử của C.

printf("..."); // "printf" is ... printf("...");

 Hai dạng chú thích:

_getch(); // waiting for ...

#include "stdafx.h" #include /* The objective of ... ... This is ... */ void main(){ }

 Chú thích trên nhiều dòng, được bao bọc giữa ký hiệu mở đầu “/*” và kết thúc “*/”.  Chú thích trên một dòng, mở

đầu bởi “//”.

Nhập môn về lập trình (C2) Slide 8

Phong cách lập trình

 Chương trình cũng như một bài văn trong ngôn ngữ tự nhiên.  Do đó, cần được viết sao cho dễ đọc, dễ hiểu, và dễ phát hiện các sai sót.  Trong các dự án lớn, phong cách lập trình là rất quan trọng nhằm :

 Danh sách các chủ đề có thể xem chi tiết ở những trang sau.  Sinh viên phải rèn luyện phong cách trong suốt quá trình học, thông qua thực

hành.

Tất cả các bài nộp cho giảng viên xem phải tuân thủ hầu hết các gợi ý.

• Dễ dàng phối hợp giữa các thành viên phát triển • Dễ dàng phát hiện sai sót • Dễ dàng bảo trì và nâng cấp

Xem thêm

1. http://users.ece.cmu.edu/~eno/coding/CCodingStandard.html 2. http://www.cs.swarthmore.edu/~newhall/unixhelp/c_codestyle.html

Nhập môn về lập trình (C2) Slide 9

Các gợi ý

Phong cách lập trình

 Về quy cách đặt tên:

• Hàm

động).

 Bắt đầu bởi động từ (verb), vì hàm là đơn vị xử lý (nghĩa là thực thi hành

kiểm tra xem một điều kiện nào đó có thỏa hay không

lấy giá trị

gán giá trị

 Nên sử dụng “suffix” hay “prefix” để tăng ngữ nghĩa.  Prefixes • is • get • set

 Tên phải nêu bật tính năng xử lý của hàm. Ví dụ: Nên dùng: Thay cho: check_for_errors() error_checking() hay dump_data_to_file()

Nhập môn về lập trình (C2) Slide 10

Các gợi ý

Phong cách lập trình

• Biến

 Thường bắt đầu bởi danh từ (noun)  Tất cả các ký tự trong tên đều là chữ thường  Nối các từ với nhau bởi dấu gạch dưới, “_”  Đưa đơn vị vào tên nếu có thể Ví dụ:

• Biến kiểu pointer

unit32 time timeout_msec; time_of_error

*name;

 Đặt dấu * liền sát tên biến  Suffix với “ptr” nếu có thể Ví dụ: char Student *student_ptr

Nhập môn về lập trình (C2) Slide 11

Các gợi ý

Phong cách lập trình

 Về quy cách đặt tên:

• Biến toàn cục

 Prefix với “g_”, để dễ phân biệt trong code Ví dụ: Logger g_logger; Logger g_logger_ptr;

• Hằng toàn cục

 Sử dụng toàn bộ chữ hoa Ví dụ: const int A_GLOBAL_CONSTANT = 5;

 Xem chi tiết trong trang chỉ dẫn trước, và luyện tập

đến cuối chương trình học.

Nhập môn về lập trình (C2) Slide 12

Dữ liệu và kết xuất trong C

 Kiểu số nguyên

 Tên kiểu “int”, sẽ nói sâu hơn

trong chương sau.

 Giá trị ghi ra trong code (literal

constant):

printf("%d\n", 123); printf("%5d\n", 123); printf("%05d\n", 123); _getch();

#include "stdafx.h" #include void main() { }

Ví dụ: 15, -20, 40, . . .  Sử dụng đặc tả “%d” hoặc “%i”

trong printf như ví dụ bên

 Câu hỏi: luật in số nguyên ra màn

hình?

Nhập môn về lập trình (C2) Slide 13

Dữ liệu và kết xuất trong C

Rèn luyện phong cách lập trình

printf("%d\n", 123); printf("%5d\n", 123); printf("%05d\n", 123); _getch();

#include “stdafx.h” #include void main() { printf("%d\n", 123); printf("%5d\n", 123); printf("%05d\n", 123); _getch(); }

#include “stdafx.h” #include void main() { printf("%d\n", 123); printf("%5d\n", 123); printf("%05d\n", 123); _getch(); }

#include “stdafx.h” #include void main(){ }

Không nên!

Sử dụng TAB để canh lề code Nên!

Nhập môn về lập trình (C2) Slide 14

Dữ liệu và kết xuất trong C

#include “stdafx.h” #include void main() { printf("%d\n", 123); printf("%5d\n", 123); printf("%05d\n", 123); _getch(); }

 Ký tự điều khiển  \n (newline)  \t (tab)  \v (vertical tab)  \f (new page)  \b (backspace)  \r (carriage return)

Nhập môn về lập trình (C2) Slide 15

Dữ liệu và kết xuất trong C

 Kiểu số nguyên

 In nhiều số dùng chỉ một hàm printf

#include “stdafx.h” #include void main() {

printf("|%5d|\t%5d|\t%5d|\n",123,456,7890); printf("|%5d|\t%5d|\t%5d|\n",12,345,6789); _getch();

}

Nhập môn về lập trình (C2) Slide 16

Dữ liệu và kết xuất trong C

 Kiểu số thực chấm động

#include “stdafx.h” #include void main() {

 Kiểu chính xác đơn: float  Kiểu chính xác kép: double  Giá trị ghi ra trong code (literal

constant):

printf("%f\n", 123.456); printf("%10.2f\n", 123.456); printf("%010.2f\n", 123.456); _getch();

}

Ví dụ:

5.5f 5.5

float: double:  Sử dụng đặc tả “%f” trong printf.

Câu hỏi

1. Làm sao chỉ in ra 3 ký tự sau chấm thập phân. 2. Hãy in ra số thực có 7 ký số (kể cả dấu chấm).

Nhập môn về lập trình (C2) Slide 17

Dữ liệu và kết xuất trong C

 Kiểu ký tự

 Tên kiểu: char  Giá trị ghi ra trong code

(literal constant):

#include “stdafx.h” #include void main() {

Ví dụ: „A‟, „a‟, „8‟, „(„, ...  Sử dụng đặc tả “%c” trong

printf("%c\n", 'A'); printf("%3c\n", 'a'); printf("%03c\n", '8'); _getch();

printf.

}

Câu hỏi

1. Hãy giải thích ý nghĩa của định dạng “%3c”. 2. Định dạng “%03c” in ra thế nào ?

Nhập môn về lập trình (C2) Slide 18

Dữ liệu và kết xuất trong C

Kiểu chuỗi (string)

#include "stdafx.h" #include void main() {

 Kiểu chuỗi được hiểu là dãy ký tự (character array) và kết thúc bằng ký tự null („\0‟). Định nghĩa như sau: s[50]; char

printf("%s\n","01234567890123456789"); printf("%s\n","University"); printf("%20s\n","University"); printf("%020s\n","University"); _getch();

}

 Giá trị chuỗi (literal constant) viết trong 2 dấu nháy kép (“): “Programming Fundamentals”, “Computer”, ...  Sử dụng đặc tả “%s” trong

printf.

Nhập môn về lập trình (C2) Slide 19

Nhập liệu trong C

 Nguyên tắc

• Dữ liệu có thể được nhập vào từ bàn phím thông qua các hàm

nhập.

• Giá trị nhập vào sẽ được lưu giữ trong bộ nhớ.

int i,so; float x,y; char ktu,s[36];

Sinh viên tạm thời chấp nhận hai khái niệm sau: 1. Vùng nhớ được đặt tên (còn gọi là biến) Ví dụ: 2. Cách lấy địa chỉ của vùng nhớ Ví dụ: &ktu, &so, &x

(sử dụng dấu & trước tên của biến)

Nhập môn về lập trình (C2) Slide 20

Nhập liệu trong C

 Hàm nhập dữ liệu

• Hàm scanf trong thư viện stdio.lib. • Cú pháp:

scanf_s(,)

Phần đặc tả những kiểu mong muốn đọc

Phần liệt kê địa chỉ của các biến tương ứng với những kiểu mong muốn. Dùng dấu phẩy “,” để phân cách các địa chỉ

Nhập môn về lập trình (C2) Slide 21

Nhập liệu trong C

Cửa sổ ban đầu:

 Nhập số nguyên : %d

#include "stdafx.h" #include void main() {

(chương trình chờ người dùng nhập vào một số nguyên)

Cửa sổ sau khi nhập giá trị 123 và nhấn phím ENTER:

int x; printf("%s", "Please enter x: "); scanf_s("%d", &x); printf("%s %d\n", "x =", x); _getch();

}

Nhập môn về lập trình (C2) Slide 22

Nhập liệu trong C

 Đọc hai số nguyên với 1 scanf_s

Cửa sổ ban đầu:

#include “stdafx.h” #include void main() {

Nhập giá trị 123 và ENTER:

nhập tiếp giá trị 456 và nhấn ENTER:

int x; int y; printf("%s", "Please enter x: "); scanf_s("%d", &x); printf("%s", "Please enter y: "); scanf_s("%d", &y); printf("%s %d\n", "x =", x); printf("%s %d\n", "y =", y); _getch();

}

Nhập môn về lập trình (C2) Slide 23

Nhập liệu trong C

Chương trình ngắn hơn nhưng

có cùng tính năng  Hai vùng nhớ được khai báo trên

#include "stdafx.h" #include void main() {

cùng dòng.

 Hàm scanf_s đọc hai giá trị x

và y trong cùng 1 lần gọi.

int x,y; printf("Please enter x and y: "); scanf_s("%d %d",&x,&y); printf("x = %d\ny = %d\n",x,y); _getch();

 Hàm printf in hai giá trị x và

}

y trong cùng 1 lần gọi.

 Sử dụng các ký tự điều khiển \n

đúng chỗ.

Nhập môn về lập trình (C2) Slide 24

Nhập liệu trong C

Bảng các đặc tả kiểu dữ liệu muốn nhập vào

Kiểu

Đặc tả dữ liệu muốn đọc trong hàm scanf

int

%d %i %u (số không dấu, unsigned int)

float

%f, %e, %E, %g, %G

double

%lf, %le, %lE, %lg, %lG

char

%c

string

%s

Xem thêm

1. http://www.tutorialspoint.com/c_standard_library/c_function_fscanf.htm

Nhập môn về lập trình (C2) Slide 25

Xử lý đơn giản

 Yêu cầu của chương trình:

• Đọc hai số x và y là tọa độ trong không gian 2D. • Tính và in ra khoảng cách từ tâm hệ trục tọa độ đến điểm (x,y)

#include "stdafx.h" #include #include void main(){

float x, y; printf("Please enter coordinates x and y: "); scanf_s("%f%f", &x, &y); printf("(x,y) = (%5.2f,%5.2f)\n", x, y); printf("Distance to the origin = %5.2f\n", sqrt(x*x + y*y)); _getch();

}

Nhập môn về lập trình (C2) Slide 26

Xử lý đơn giản

 Dùng thư viện toán học, cần chèn tập tin

 Hàm sqrt(x): tính và trả về giá trị căn bậc hai của x.

 Kết quả như hình sau :

Nhập môn về lập trình (C2) Slide 27