1. Trang chủ
  2. » Công Nghệ Thông Tin

pdf bài giảng lập trình C

64 279 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 64
Dung lượng 423,23 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Chương 1Các kiến thức bổ trợ Khái niệm Thông tin - Tin học Đơn vị đo thông tin Các hệ cơ số đếm Thuật toán - Biểu diễn thuật toán Khái niệm ngôn ngữ lập trình Khái niệm chương trình

Trang 1

Giảng viên: TS Cao Thanh Sơn

Khoa CNTT - Trường Đại học Vinh

(Dựa theo bài giảng của NCS Trần Thị Kim Oanh

Phó trưởng khoa CNTT - Trường Đại học Vinh)

Tài liệu

 Bài giảng điện tử

 Trần Thị Kim Oanh, Cao Thanh Sơn, Giáo trình Ngôn

 Chương 6: Dữ liệu kiểu cấu trúc

 Chương 7: Dữ liệu kiểu tệp

2

Trang 2

Chương 1Các kiến thức bổ trợ

 Khái niệm Thông tin - Tin học

 Đơn vị đo thông tin

 Các hệ cơ số đếm

 Thuật toán - Biểu diễn thuật toán

 Khái niệm ngôn ngữ lập trình

 Khái niệm chương trình

 Lỗi lập trình

 Tự học

3

Khái niệm Thông tin – Tin học

 Khái niệm thông tin: Là những yếu tố mang đến cho ta sự hiểu

biết về một đối tượng nào đó

 Tính chất của thông tin: Tính quy luật, tính tổ chức, tính mới

mẻ, tính thời sự, tính bất ổn định

 Khái niệm tin học: Là bộ môn khoa học chuyên nghiên cứu

cách thu thập, tổ chức, lưu trữ và xử lý thông tin bằng các thiết

Trang 3

Các hệ cơ số đếm

 Hệ cơ số 2: Sử dụng 2 ký hiệu 0, 1 để biểu diễn các số

 Hệ cơ số 8: Sử dụng 8 ký hiệu 0, 1, 2, 3, 4, 5, 6, 7 để biểu diễn

Chuyển đổi giữa các hệ cơ số đếm

 Chuyển đổi các số từ hệ cơ số 10 sang hệ cơ số 2, 8, 16

 Chuyển đổi số từ hệ cơ số 2, 8, 16 sang hệ cơ số 10

 Các phép toán trên các hệ cơ số đếm

8

Trang 4

Thuật toán

 Thuật toán được hiểu là một dãy hữu hạn các thao tác để giải

quyết một lớp các bài toán sao cho khi có dữ liệu vào xác định

thì cho kết quả ra xác định

 Có nhiều cách biểu diễn thuật toán nhưng cách trực quan nhất là

sử dụng lưu đồ thuật toán, nghĩa là sử dụng các khối để biểu

diễn thuật toán

9

Thuật toánCác khối dùng trong lưu đồ:

Điều kiện

Khối bắt đầu/kết thúc

Khối nhập/xuất dữ liệu

sai đúng

10

Khối tính toán

Khối gọi chương trình con

Khối điều kiện

Mũi tên liên kết các khối

Trang 5

Chương trình

 Ngôn ngữ dùng để mô tả thuật toán sao cho máy tính có thể hiểu

được thì gọi là ngôn ngữ lập trình

 Dùng ngôn ngữ lập trình để diễn tả thuật toán thì được chương

trình, chương trình này được gọi là chương trình nguồn Chương

trình dịch sẽ phải dịch chương trình nguồn ra chương trình mã

máy

12

Chương trình dịch

Chương trình mã mãy Chương trình nguồn

13

Lỗi lập trìnhKhi biên dịch và chạy chương trình có thể xuất hiện 2 loại lỗi làLỗi

cú phápvàLỗi thuật toán

 Lỗi cú pháp (Syntax Error): Lỗi thuộc quy định về mặt cú

pháp của ngôn ngữ lập trình: lỗi về từ khoá, lỗi về tên, lỗi về cấu

trúc lệnh, lỗi về kiểu dữ liệu,…Tất cả những lỗi này sẽ được

máy phát hiện khi dịch chương trình

 Lỗi thuật toán (Logic Error): Là những lỗi thuộc trách nhiệm

của người lập trình mà máy không thể phát hiện được Do vậy,

yêu cầu khi chương trình chạy và cho kết quả, người lập trình

phải biện luận lại kết quả xem đã chính xác hay chưa

Tự học

1 Chuyển số thực từ hệ đếm cơ số 10 sang hệ đếm cơ số 2, 8, 16

2 Chuyển trực tiếp một số từ hệ đếm cơ số 2 sang hệ đếm cơ số 8,

16; hệ đếm cơ số 8, 16 sang hệ đếm cơ số 2 không thông qua

trung gian hệ 10

3 Phép nhân, chia các số ở hệ đếm cơ số 2, 8, 16

4 Vẽ lưu đồ một số thuật toán: Giải phương trình bậc hai, tìm

max, min hai số, tìm max, min ba số

5 Tìm hiểu bảng mã chuẩn ASCII

14

Trang 6

Chương 2 Một số khái niệm cơ bản của NNLT C

 Giới thiệu NNLT C

 Ký pháp NNLT C

 Cấu trúc chương trình viết bằng NNLT C

 Một số ví dụ đơn giản

 Soạn thảo, dịch và chạy chương trình viết bằng NNLT C

 Các kiểu dữ liệu cơ sở

 Biến - Hằng - Lệnh gán đơn giản

 Biểu thức và các phép toán

 Khối lệnh

 Một số hàm số học xây dựng sẵn

Giới thiệu ngôn ngữ lập trình C

- Ngôn ngữ lập trình C do Dennis Ritchie đưa ra vào năm

1972

- Ông đã tham khảo nhiều ngôn ngữ B, do đó ông đặt tên

ngôn ngữ lập trình của ông là ngôn ngữ lập trình C

Lịch sử ra đời:

16

Giới thiệu ngôn ngữ lập trình C

- NNLT C là ngôn ngữ mạnh và linh hoạt, được sử dụng trong

Trang 7

Giới thiệu ngôn ngữ lập trình C

- Là ngôn ngữ lập trình bậc cao nhưng NNLT C lại có những

đặc điểm của ngôn ngữ lập trình bậc thấp Assembly và chạy

nhanh gần bằng Assembly

- NNLT C có rất nhiều hàm xây dựng sẵn, được khai báo trong

các thư viện chuẩn

asm, break, case, char, const, continue, default, do, double,

else, enum, extern, far, float, for, goto, huge, if, int, long, near,

pascal, register, return, short, static, struct, signed, nzeof, switch,

typedef, union, unsigned, void, volatile, while, include, define,

Các từ khoá:

Lưu ý:

 Trong chương trình từ khoá luôn luôn phải viết thường

 Ngôn ngữ lập trình C phân biệt chữ hoa và chữ thường

Ký pháp ngôn ngữ lập trình C

Trang 8

• Ký tự đầu tiên của tên phải là chữ cái hoặc dấu gạch nối.

• Tên không được trùng với từ khoá

Ví dụ về cách đặt tên:

- Các tên đúng: x1, a_1, delta, _delta

- Các tên sai: 3x, r#3, f(x), case, del ta

 Các chương trình con này được gọi là các hàm

 Số lượng các hàm trong một chương trình là không hạn chế

nhưng bắt buộc phải có một hàm chính với tên quy định làmain

Cấu trúc của một chương trình C bao gồm 4 phần sau:

<1> Khai báo các thư viện

<2> Định nghĩa các kiểu, biến tổng thể

<3> Định nghĩa các hàm

<4> Định nghĩa hàm main

Cấu trúc của chương trình viết bằng NNLT C

23

Trang 9

Lưu ý:

 Đối với những chương trình đơn giản thì phần <2> và phần

<3> có thể không có nhưng phần <1> và phần <4> luôn

luôn phải có trong bất cứ chương trình nào

 Việc khai báo các thư viện thường đặt ở đầu chương trình

theo cú pháp:#include <tên thư viện>

 Thư viện chuẩn là các tệp*.h

Cấu trúc của chương trình viết bằng NNLT C

24

25

Một số ví dụ đơn giản đầu tiên

Ví dụ 1: In ra màn hình câu chào Hello

#include <stdio.h>

#include <conio.h>

int main() //ham chinh

{

printf("hello"); //ham xuat du lieu ra man hinh

getch(); //ham dung man hinh ket qua

return 0; //lenh tra ve gia tri cho ham main

Trang 10

Các kiểu dữ liệu cơ bản

1 char (signed char) 1 -128 127

Các kiểu dữ liệu cơ bản

 Kiểu số thực

Biến - Hằng - Lệnh gán đơn giản

 Biến: Biến là một cấu trúc ghi nhớ dữ liệu

Cách khai báo: Kiểu Danh sách biến;

Trang 11

Biến - Hằng - Lệnh gán đơn giản

Biến có thể được khai báo ở một trong ba vị trí sau trong

Biến - Hằng - Lệnh gán đơn giản

 Hằng: Hằng là đại lượng mà giá trị của nó không thay đổi

trong quá trình tính toán

• Hằng số nguyên: Các hằng loại này có thể khai báo dưới

dạng cơ số 2, cơ số 8, cơ số 10 hay cơ số 16

- Là một ký tự được viết trong

cặp dấu nháy đơn, chẳng hạn

Trang 12

Biến - Hằng - Lệnh gán đơn giản

• Hằng xâu ký tự:

Là dãy ký tự bất kỳ đặt trong cặp dấu nháy kép

Chẳng hạn: "Nguyen Van An"

"" /*xâu rỗng*/

Xâu ký tự được lưu trữ trong máy dưới dạng một mảng một

chiều, mỗi phần tử là một ký tự của xâu Trình biên dịch tự động

thêm ký tự NULL vào cuối mỗi xâu để báo hiệu kết thúc xâu

Lưu ý: Cần phân biệt giữa 'a' và "a"

 'a' : Là hằng ký tự được lưu trữ trong 1 byte

 "a": Là hằng xâu ký tự được lưu trữ trong 2 bytes

Là sự kết hợp giữa phép toán và toán hạng nhằm diễn đạt một

công thức toán học nào đó Trong đó, toán hạng có thể là biến,

Trang 13

Biểu thức và các phép toán

• Các phép toán quan hệ: > >= < <= == !=

Các phép toán quan hệ dùng để tạo các biểu thức quan hệ

Nếu biểu thức đúng thì giá trị của biểu thức là 1, ngược lại, giá trị

của biểu thức là 0

Ví dụ: a = (5>10) /* a == 0 */

b = (4>-1) /* b == 1*/

Lưu ý: Các biểu thức quan hệ có thể tham gia vào các phép

toán đối với số nguyên

& Phép Và theo bit

| Phép Hoặc theo bit

^ Phép Hoặc loại trừ theo bit

~ Phép Lấy phần bù theo bit

Trang 14

• Các phép chuyển đổi kiểu giá trị:

- Phép chuyển đổi kiểu trong biểu thức:

Hai toán hạng trong một phép toán có kiểu khác nhau thì kiểu

thấp hơn sẽ chuyển thành kiểu cao hơn và đó chính là kiểu kết quả

Ví dụ: 1.5 * (8/3) == 3.0

- Phép chuyển đổi kiểu thông qua phép gán:

Giá trị vế phải được chuyển sang kiểu của vế trái, đó là kiểu

• Các phép toán tăng giảm:

Để tăng biến a lên 1 đơn vị ta viết : a++hoặc ++a

Để giảm biến a xuống 1 đơn vị ta viết: a hoặc a

Biểu thức và các phép toán

Trang 15

Lưu ý:

a++: Sử dụng a sau đó mới tăng a 1 đơn vị

++a: Tăng a lên 1 đơn vị rồi mới sử dụng

a : Sử dụng a sau đó mới giảm a 1 đơn vị

a: Giảm a xuống 1 đơn vị rồi mới sử dụng

Gán gộp a = 2; b = 3; c = a* b; c = (a = 2) * (b = 3);

Trang 16

• Biểu thức điều kiện:

Cú pháp: biến = điều kiện? biểu thức 1: biểu thức 2;

Ý nghĩa:

- Nếu điều kiện đúng thì biến nhận giá trị của biểu thức 1

- Ngược lại, biến nhận giá trị của biểu thức 2

Biểu thức và các phép toán

Ví dụ:  Tìm max 2 số a, b

max = a > b?a : b;

 Tìm max 3 số a, b, cmax1=a > b? a : b;

max = max1 > c? max1: c;

46

Thứ tự ưu tiên của các phép toán

TT ưu tiên Các phép toán Thứ tự kết hợp

1 () [] -> trái qua phải

2 ! * & ~ ++ + - (type) sizeof phải qua trái

5 << >> trái qua phải

6 < <= > >= trái qua phải

11 && trái qua phải

14 = *= /= %= += -= <<= >>= &= |= ^= phải qua trái

47Khối lệnh

Là dãy các lệnh được đặt giữa cặp dấu ngoặc nhọn { và }

Trang 17

Một số hàm số học xây dựng sẵn

nguyên a

stdlib.h

đoạn văn bản Đoạn văn bản dùng để làm sáng tỏ ý nghĩa kết quả

hiện ra Mã định dạng dùng để xác định số mục và cách biểu thị giá

trị các mục này lên màn hình

- Các mục cần đưa ra màn hình có thể là một hay nhiều mục

cách nhau dấu phẩy, mỗi mục có thể là các biến, hằng, hàm, phần tử

Trang 18

printf("So nguyen n = %5d\nSo thuc x = %5.2f",n,x);

Kết quả hiện lên màn hình

Trang 19

Ý nghĩa: Tương tự hàm getchar chỉ khác ký tự đưa vào bằng

hàm getch không cho hiện lên màn hình

2 Viết chương trình nhập vào từ bàn phím 2 số thực a và b Hãy

tính và in ra màn hình chu vi và diện tích hình chữ nhật có chiều

rộng và chiều dài là a và b

Trang 20

Chương 3Các cấu trúc lập trình

công việc

sai

59

Trang 21

Cấu trúc rẽ nhánhThuật toán tìm max 3 số

Ví dụ: Kiểm tra 3 số thực a, b, c có thể là độ dài 3 cạnh của một tam

giác hay không Nếu đúng tính chu vi, diện tích tam giác đó,

ngược lại có thông báo

điều kiện đúng

sai

Sơ đồ hoạt động:

61

Cấu trúc rẽ nhánhThuật toán kiểm tra tạo tam giác

điều kiện

Trong đó, điều kiện = ((a+b>c) && (b+c>a) && (a+c>b))

62

Trang 22

case n2: công việc 2; break;

case nk: công việc k; break;

[default: công việc k+1;]

• thành phần default: công việc k+1; có thể có hoặc không

• sau mỗi công việc i đều phải có câu lệnh break;

bt=n1

đúng

công việc 1

bt=n2 sai

đúng công việc 2

bt=nk đúng công việc k

sai

công việc k+1

65

Trang 23

Cấu trúc tuyển chọn

Ví dụ: Cho biết số ngày của một tháng bất kỳ của một năm bất kỳ

Quy luật tính số ngày của một năm bất kỳ:

+ Ngược lại có 28 ngày Những năm chia hết

100 nhưng không chia hết cho 400, chẳng hạn như năm 1700, 1800,

Cấu trúc tuyển chọnThuật toán

songay=30

t=2 đúng sai

®iÒu kiÖn

songay=28

songay=29 đúng

sai nhập t, n

điều khiển Biến điều khiển là biến mà giá trị của nó quyết

định đến việc câu lệnh lặp tiếp tục lặp hay dừng lại

lệnh lặp

Trang 24

Câu lệnh lặp for

Sơ đồ hoạt động:

phần 1

phần 2 đúng công việc

 Bất kỳ phần nào trong ba phần trên đều có thể vắng mặt nhưng phải giữ

dấu chấm phẩy.

 Khi phần 2 vắng mặt thì nó luôn có giá trị bằng 1 Trong trường hợp

này việc ra khỏi câu lệnh lặp phải nhờ vào một trong các câu lệnh

break, goto, return trong thân câu lệnh lặp.

 Mỗi phần trong ba phần trên có thể có một biểu thức hoặc nhiều biểu

thức cách nhau bởi dấu phẩy Các biểu thức trong mỗi phần được tính

từ trái qua phải.

 Biến điều khiển của câu lệnh lặp có thể có kiểu ký tự, kiểu số nguyên

hoặc kiểu số thực.

 Biển điều khiển có thể được thay đổi bởi một giá trị tùy ý.

 Đối với những câu lệnh lặp for có thân đơn giản, ta có thể kết hợp thân

vào phần 3 để tạo câu lệnh lặp for rỗng Lúc này phải có dấu chấm

Câu lệnh lặp for

Ví dụ: Tính tổng s = 1 + 2 + … + n theo các cách sau:

Cách 1: Sử dụng câu lệnh lặp for đầy đủ

Cách 2: Sử dụng câu lệnh lặp for rỗng

Cách 3: Sử dụng câu lệnh lặp for khuyết một phần

Cách 4: Sử dụng câu lệnh lặp for khuyết hai phần

Cách 5: Sử dụng câu lệnh lặp for khuyết cả ba phần

71

Trang 25

Câu lệnh lặp while

Cú pháp:

while (điều kiện)

Trang 26

Câu lệnh lặp do while

Sơ đồ hoạt động:

công việc

điều kiện đúng

Ví dụ: Tính tổng s = 1 + 3 + 5+ …+ (2*n -1), với n nguyên dương

Một số chú ý về cấu trúc lặp

 Các câu lệnh lặp for, while, do while có thể thay thế cho nhau

 Trong thân câu lệnh lặp có thể:

- Sử dụng câu lệnhbreakđể thoát khỏi thân câu lệnh lặp

- Sử dụng câu lệnhgotođể nhảy ra khỏi thân câu lệnh lặp đến

một vị trí nào đó

- Sử dụng câu lệnhreturnđể trả giá trị về cho một hàm nào đó

 Trong thân câu lệnh lặp có thể dùng câu lệnhcontinueđể chuyển

đến đầu một vòng mới mà bỏ qua tất cả các lệnh trong thân câu

lệnh lặp nhưng nằm saucontinue

Trang 27

 Không cho phépgotonhảy từ ngoài vào trong một khối lệnh

nhưng được phép nhảy từ trong một khối lệnh ra ngoài.78

}

79

80

Tự học

1 Sử dụng câu lệnh lặp while, do while để tính tổng s=1+2+ +n

2 Lấy ví dụ về việc sử dụng câu lệnh continue trong thân câu lệnh

lặp

3 Viết chương trình tính tổng s=1*2 + 2*3 + + (n-1)*n, với n

nguyên dương nhập từ bàn phím, sử dụng câu lệnh lặp for theo

các cách khác nhau: câu lệnh lặp for đầy đủ, câu lệnh lặp for

không thân, câu lệnh lặp for khuyết 1 phần, câu lệnh lặp for

khuyết 2 phần, câu lệnh lặp for khuyết 3 phần

Trang 28

Chương 4Con trỏ và mảng

 Dữ liệu kiểu con trỏ

 Dữ liệu kiểu mảng một chiều

 Con trỏ: là loại biến đặc biệt dùng để chứa địa chỉ Có các loại

địa chỉ khác nhau nên cũng có các loại con trỏ tương ứng

Khai báo: kiểu *biến_trỏ;

float *y, b;

khi đó các phép gán sau là đúng x=&a; y=&b;

các phép gán sau là sai: x=a;y=b;x=&b;y=&a;

83

Dữ liệu kiểu con trỏToán tử *:

biến_trỏ: Chứa địa chỉ vùng nhớ mà biến_trỏ đang trỏ tới

*biến_trỏ: Là giá trị vùng nhớ mà biến_trỏ đang trỏ tới

Cách thay đổi biến trỏ:

biến_trỏ = biến_trỏ + n; biến_trỏ = biến_trỏ - n;

biến_trỏ++; ++biến_trỏ; biến_trỏ ; biến_trỏ;

với n là số nguyên không âm

Trang 29

Dữ liệu kiểu con trỏ

Ý nghĩa

biến_trỏ++; ++biến_trỏ; Cho biến_trỏ trỏ tới vùng nhớ kế

sau vùng nhớ hiện tại

biến_trỏ ; biến_trỏ; Cho biến_trỏ trỏ tới vùng nhớ kế

trước vùng hiện tại

+ sizeof(kiểu): số byte của kiểu của con trỏ

+ n*sizeof(kiểu): tổng số byte được cấp phát cho con trỏ

86

Dữ liệu kiểu con trỏ

Ví dụ: int *p;

p=(int*)malloc(5*sizeof(int));

lệnh trên cấp phát 5 ô nhớ liên tiếp nhau, mỗi ô 2 bytes và

cho con trỏ p trỏ vào ô đầu tiên

p

2000 2002 2004 2006 2008

Trang 30

Dữ liệu kiểu con trỏ

Ví dụ: Dùng con trỏ nhập vào từ bàn phím 5 số nguyên sau đó in ra

màn hình theo thứ tự xuôi và ngược

/*Khai bao va cap phat vung nho cho con tro*/

Sau khi in xuôi:

/*Dua p ve phan tu cuoi*/

Sau khi in ngược:

 Giải phóng ô nhớ cho con trỏ:

Cú pháp: free(biến_trỏ);

Trang 31

Dữ liệu kiểu mảng một chiều

Dữ liệu kiểu mảng một chiều

- Các phần tử của mảng có thể được xác định thông qua chỉ số

mảng hoặc thông qua con trỏ Chỉ số mảng được bắt đầu từ 0

- Truy nhập đến phần tử thứ i của mảng bằng chỉ số ta viết

Dữ liệu kiểu mảng một chiều

Ví dụ: Viết chương trình nhập và xem mảng một chiều sử dụng chỉ

Trang 32

Dữ liệu kiểu mảng một chiều

• Tên mảng là một hằng địa chỉ và nó là địa chỉ của phần tử đầu

tiên của mảng

Chẳng hạn: Với mảng int a[5], ta có:

a tương đương địa chỉ a[0]

a+1 tương đương địa chỉ a[1]

a+i tương đương địa chỉ a[i]

*(a+i) tương đương a[i]

93

Dữ liệu kiểu mảng một chiều

 Truy nhập đến các phần tử mảng một chiều nhờ con trỏ: khai

báo một con trỏ cùng kiểu với mảng, sau đó gán con trỏ bằng

tên mảng Khi này, con trỏ và mảng gần tương đương nhau

Dữ liệu kiểu mảng một chiều

Ví dụ: Viết chương trình nhập và xem mảng một chiều sử dụng

con trỏ

/*Nhap mang nho con tro*/

int a[5], i,*p;

Ngày đăng: 23/11/2017, 23:42

TỪ KHÓA LIÊN QUAN