Giáo trình Lập trình căn bản (Nghề Kỹ thuật sửa chữa, lắp ráp máy tính): Phần 2 - CĐ nghề Vĩnh Long

34 21 0
Giáo trình Lập trình căn bản (Nghề Kỹ thuật sửa chữa, lắp ráp máy tính): Phần 2 - CĐ nghề Vĩnh Long

Đ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

(NB)Tiếp nối phần 1, phần 2 của Giáo trình Lập trình căn bản (Nghề Kỹ thuật sửa chữa, lắp ráp máy tính) do CĐ nghề Vĩnh Long biên soạn nhằm cung cấp cho người học những kiến thức tổng quan về hàm và dữ liệu kiểu mảng (array), chuỗi ký tự (string) và bản chi (struct). Mời các bạn tham khảo!

44 CHƯƠNG 4: HÀM Mục tiêu − Trình bày khái niệm hàm; − Trình bày qui tắc xây dựng hàm, thủ tục vận dụng thiết kế xây dựng chương trình; − Phân biệt cách sử dụng tham số, tham biến; − Sử dụng lệnh kết thúc lấy giá trị trả hàm − Thực thao tác an toàn cho máy Nội dung Khái niệm chương trình Hàm đoạn chương trình có tên có chức giải số vấn đề chuyên biệt cho chương trình chính, gọi nhiều lần với tham số khác trả lại giá trị cho chương trình gọi Hàm thường sử dụng khi: - Nhu cầu tái sử dụng: có số cơng việc thực nhiều nơi (cùng chương trình nhiều chương trình khác nhau), chất khơng đổi giá trị tham số cung cấp khác trường hợp - Nhu cầu sửa lỗi cải tiến: giúp phân đoạn chương trình để chương trình sáng, dễ hiểu dễ dàng phát lỗi cải tiến chương trình 1.1 Cú pháp Trong đó: - : kiểu liệu C char, int, long, float hay double… Nếu hàm đơn thực số câu lệnh mà không cần trả cho chương trình gọi kiểu trả void - : tên gọi hàm đặt theo quy tắc đặt tên/định danh - : xác định đối số truyền cho hàm Các tham số giống khai báo biến cách dấu phẩy Hàm khơng có đối số - : câu lệnh thực hàm gọi - : giá trị trả cho hàm thơng qua câu lệnh return Ví dụ: Hàm sau có tên Tong, nhận vào hai đối số kiểu nguyên trả tổng hai số nguyên /* Hàm tên tổng 45 Nhận vào hai số nguyên trả số nguyên */ int Tong(int a, int b){ return a + b; } Hàm sau có tên Xuat, nhận vào đối số kiểu ngun xuất số ngun hình Hàm khơng trả void Xuat(int n){ printf(“%d”, n); } Hàm sau có tên Nhap, không nhận đối số trả giá trị số nguyên người dùng nhập vào int Nhap(){ int n; printf(“Nhap mot so nguyen: ”); scanf(“%d”, &n); return n; } 1.2 Một số lưu ý Hàm phải khai báo định nghĩa trước sử dụng thường đặt hàm (hàm main) int Tong(int a, int b){ return a + b; } void main(){ int a = 2912, b = 1706; int sum = Tong(a, b); // Loi goi ham } Thông thường, trước hàm main ta xác định tên hàm, tham số giá trị trả hàm để thông báo cho hàm bên biết cách sử dụng cịn phần định nghĩa hàm đưa xuống Phần gọi nguyên mẫu hàm (function prototype) Nguyên mẫu hàm tiêu đề hàm kết thúc dấu chấm phẩy int Tong(int a, int b); // prototype hàm Tong void main(){ int a = 2912, b = 1706; int sum = Tong(a, b); // Lời gọi hàm } int Tong(int a, int b) // Mô tả hàm tổng { 46 return a + b; } Trên thực tế, nguyên mẫu hàm không cần thiết phải giống tuyệt đối tiêu đề hàm Tên tham số khác bỏ ln miễn kiểu Tuy nhiên, không nên để chúng khác gây rối cho chương trình Ví dụ sau cho thấy bỏ hẳn tên tham số: int Tong(int, int); // prototype ham Tong … Cấu trúc chương trình có sử dụng chương trình Ví dụ Kết in hình Giải thích chương trình - Dịng đến dịng 14: định nghĩa hàm line, hàm không trả giá trị, thực công việc in 19 dấu 47 - Dòng 5: khai báo prototype, sau tên hàm phải có dấu chấm phẩy - Trong hàm line có sử dụng biến i, biến i biến cục sử dụng phạm vi hàm line - Dòng 18 20: gọi thực hàm line Trình tự thực chương trình Khơng có dấu chấm phẩy sau tên hàm, phải có cặp dấu ngoặc ( ) sau tên hàm hàm khơng có tham số truyền vào Phải có dấu chấm phẩy sau tên hàm khai báo prototype Nên khai báo prototype cho dù hàm gọi nằm trước hay sau câu lệnh gọi Ví dụ 48 Kết in hình mu = mu = _ Giải thích chương trình - Hàm power có hai tham số truyền vào ix, in có kiểu int kiểu trả có kiểu int - Dịng 13: return ip: trả giá trị sau tính tốn - Dịng 18: đối mục có kiểu trả int sau thực gọi power - Hai tham số ix, in hàm power dạng truyền tham trị Thực chương trình Quy tắc đặt tên hàm giống tên biến, hằng… Mỗi đối số cách = dấu phẩy kèm theo kiểu liệu tương ứng Ví dụ 49 - Hàm time có hai tham số truyền vào ix, in có kiểu int tham số có tốn tử địa & trước cho biết tham số dạng truyền tham biến Trình tự thực chương trình Các hàm ngơn ngữ lập trình Muốn hàm thực hàm gọi phải thực lời gọi hàm Việc thực cách gọi tên hàm đồng thời truyền biến trị cho tham số mà chương trình khai báo, biến trị cách dấu phẩy Ví dụ 1: chương trình sau định nghĩa thủ tục XuatSo cho phép xuất số từ a đến b hình (a b truyền vào hàm) Các tham số tham trị #include void XuatSo(int a, int b); void main(){ XuatSo(5, 20); // Goi ham lan int x = 5; XuatSo(x, x + 5); // Goi ham lan } void XuatSo(int a, int b){ for (int i = a; i (lớn hơn), < (nhỏ hơn),… mà phải gọi hàm thư viện ; 2.3.1 Cộng chuỗi - Hàm strcat() Cú pháp: char *strcat(char *des, const char *source) Hàm có tác dụng ghép chuỗi nguồn vào chuỗi đích Ví dụ: Nhập vào họ lót tên người, sau in họ tên họ lên hình #include #include #include int main(){ char HoLot[30], Ten[12]; printf("Nhap Ho Lot: ");gets(HoLot); printf("Nhap Ten: ");gets(Ten); strcat(HoLot,Ten); /* Ghep Ten vao HoLot*/ printf("Ho ten la: ");puts(HoLot); getch(); return 0; } 2.3.2 Xác định độ dài chuỗi - Hàm strlen() Cú pháp: int strlen(const char* s); Ví dụ: Sử dụng hàm strlen xác định độ dài chuỗi nhập từ bàn phím #include #include #include int main(){ char Chuoi[255]; int Dodai; printf("Nhap chuoi: ");gets(Chuoi); Dodai = strlen(Chuoi) printf("Chuoi vua nhap: ");puts(Chuoi); printf("Co dai %d",Dodai); getch(); 65 return 0; } 2.3.3 Đổi ký tự thường thành ký tự hoa - Hàm toupper() Hàm toupper() (trong ctype.h) dùng để chuyển đổi ký tự thường thành ký tự hoa Cú pháp: char toupper(char c) 2.3.4 Đổi chuỗi chữ thường thành chuỗi chữ hoa, hàm strupr() Hàm struppr() dùng để chuyển đổi chuỗi chữ thường thành chuỗi chữ hoa, kết trả hàm trỏ đến địa chuỗi chuyển đổi Cú pháp: char* strupr(char *s) Ví dụ: Viết chương trình nhập vào chuỗi ký tự từ bàn phím Sau sử dụng hàm strupr() để chuyển đổi chúng thành chuỗi chữ hoa #include #include #include int main(){ char Chuoi[255],*s; printf("Nhap chuoi: ");gets(Chuoi); s=strupr(Chuoi) ; printf(“Chuoi chu hoa: ”);puts(s); getch(); return 0; } 2.3.5 Đổi chuỗi chữ hoa thành chuỗi chữ thường, hàm strlwr() Muốn chuyển đổi chuỗi chữ hoa thành chuỗi toàn chữ thường, ta sử dụng hàm strlwr(), tham số hàm tương tự hàm strupr(); Cú pháp: char *strlwr(char *s) 2.4 Nhập, xuất chuỗi Để xuất chuỗi, ta sử dụng hàm printf với đặc tả “%s” hàm puts sau: 66 Hàm xuất liệu hình (#include ) int puts(const char *s); Hàm puts xuất chuỗi s hình tự động xuống dịng Nếu thành công trả giá trị không âm, ngược lại trả EOF Ví dụ: char ten[] = “THCS A”; printf(“%s”, ten); // Khong xuong dong puts(ten); // Tu dong xuong dong Để nhập chuỗi, ta sử dụng hàm scanf( ) với đặc tả “%s” hàm đọc ký tự từ bàn phím đến gặp ký tự khoảng trắng Ví dụ: char ten[100; scanf(“%s”, &ten); puts(ten); Nếu nhập vào “THCS A” nhận chuỗi “THCS” Để nhập chuỗi đầy đủ, ta sử dụng hàm sau: Hàm nhập liệu từ bàn phím (#include ) char *gets(char *s); Hàm gets đọc tất ký tự nhập từ bàn phím đến gặp ký tự sang dịng (khi ta nhấn enter) Hàm gets loại bỏ ký tự enter thêm vào chuỗi ký tự kết thúc chuỗi ‘\0’ Hàm gets trả địa chuỗi nhận Ví dụ: char ten[100]; gets(ten); puts(ten); 2.5 Các hàm làm việc với chuỗi 2.5.1 Sao chép phần chuỗi, hàm strncpy() Hàm cho phép chép n ký tự chuỗi nguồn sang chuỗi đích Cú pháp: char *strncpy(char *Des, const char *Source, size_t n) 2.5.2 Trích phần chuỗi, hàm strchr() Để trích chuỗi chuỗi ký tự ký tự định chuỗi hết chuỗi, ta sử dụng hàm strchr() 67 Cú pháp: char *strchr(const char *str, int c) Ghi chú: - Nếu ký tự định khơng có chuỗi, kết trả NULL - Kết trả hàm trỏ, trỏ đến ký tự c tìm thấy chuỗi str 2.5.3 Tìm kiếm nội dung chuỗi, hàm strstr() Hàm strstr() sử dụng để tìm kiếm xuất chuỗi s2 chuỗi s1 Cú pháp: char* strstr(const char *s1, const char *s2) Kết trả hàm trỏ đến phần tử chuỗi s1 có chứa chuỗi s2 giá trị NULL chuỗi s2 khơng có chuỗi s1 Ví dụ: Viết chương trình sử dụng hàm strstr() để lấy phần chuỗi gốc chuỗi "hoc" #include #include #include int main() { char Chuoi[255],*s; printf("Nhap chuoi: ");gets(Chuoi); s=strstr(Chuoi,"hoc"); printf("Chuoi trich ra: ");puts(s); 10 getch(); 11 return 0; 12 } 2.5.4 So sánh chuỗi, hàm strcmp() Để so sánh hai chuỗi theo ký tự bảng mã Ascii, ta sử dụng hàm strcmp() Cú pháp: int strcmp(const char *s1, const char *s2) Hai chuỗi s1 s2 so sánh với nhau, kết trả số nguyên (số có cách lấy ký tự s1 trừ ký tự s2 vị trí xảy khác nhau) - Nếu kết số âm, chuỗi s1 nhỏ chuỗi s2 - Nếu kết 0, hai chuỗi - Nếu kết số dương, chuỗi s1 lớn chuỗi s2 68 2.5.5 So sánh chuỗi, hàm stricmp() Hàm thực việc so sánh n ký tự chuỗi s1 s2, chữ thường chữ hoa không phân biệt Cú pháp: int stricmp(const char*s1, const char *s2) Kết trả tương tự kết trả hàm strcmp() 2.5.6 Khởi tạo chuỗi, hàm memset() Hàm sử dụng để đặt n ký tự chuỗi ký tự c Cú pháp: memset(char *Des, int c, size_t n) 2.5.7 Đổi từ chuỗi số, hàm atoi(), atof(), atol() (trong stdlib.h) Để chuyển đổi chuỗi số, ta sử dụng hàm Cú pháp: − int atoi(const char *s): chuyển chuỗi thành số nguyên − long atol(const char *s): chuyển chuỗi thành số nguyên dài − float atof(const char *s): chuyển chuỗi thành số thực Nếu chuyển đổi không thành công, kết trả hàm Ngồi ra, thư viện string.h cịn hỗ trợ hàm xử lý chuỗi khác, ta đọc thêm phần trợ giúp Dữ liệu kiểu ghi 3.1 Khái niệm Kiểu cấu trúc (Structure) kiểu liệu bao gồm nhiều thành phần có kiểu khác nhau, thành phần gọi trường (field) Sự khác biệt kiểu cấu trúc kiểu mảng là: phần tử mảng kiểu cịn phần tử kiểu cấu trúc có kiểu khác Định nghĩa kiểu cấu trúc Cách 1: struct 69 { ; ; … ; }; Cách 2: Sử dụng từ khóa typedef để định nghĩa kiểu: typedef struct{ ; ; … ; } ; Trong đó: - : tên đặt theo quy tắc đặt tên danh biểu; tên mang ý nghĩa tên kiểu cấu trúc - (i=1 n): trường cấu trúc có liệu thuộc kiểu (tên trường phải tên đặt theo quy tắc đặt tên danh biểu) Ví dụ 1: Để quản lý ngày, tháng, năm ngày năm ta khai báo kiểu cấu trúc gồm thông tin: ngày, tháng, năm struct NgayThang{ unsigned char Ngay; unsigned char Thang; unsigned int Nam; }; typedef struct{ unsigned char Ngay; unsigned char Thang; unsigned int Nam; } NgayThang; Ví dụ 2: Mỗi sinh viên cần quản lý thông tin: mã số sinh viên, họ tên, ngày tháng năm sinh, giới tính, địa thường trú Lúc ta khai báo struct gồm thông tin struct SinhVien{ char MSSV[10]; char HoTen[40]; struct NgayThang NgaySinh; int Phai; char DiaChi[40]; }; typedef struct{ char MSSV[10]; char HoTen[40]; NgayThang NgaySinh; int Phai; char DiaChi[40]; }SinhVien; 70 3.2 Khai báo kiểu ghi Việc khai báo biến cấu trúc tương tự khai báo biến thuộc kiểu liệu chuẩn Cú pháp: Đối với cấu trúc định nghĩa theo cách 1: struct [, …]; Đối với cấu trúc định nghĩa theo cách 2: [, …]; Ví dụ: Khai báo biến NgaySinh có kiểu cấu trúc NgayThang; biến SV có kiểu cấu trúc SinhVien struct NgayThang NgaySinh; struct SinhVien SV; NgayThang NgaySinh; SinhVien SV; 3.3 Truy xuất kiểu ghi Cú pháp: . Khi sử dụng cách truy xuất theo kiểu này, thao tác . giống thao tác biến kiểu liệu Ví dụ: Viết chương trình cho phép đọc liệu từ bàn phím cho biến mẩu tin SinhVien in biến mẩu tin lên hình: #include #include #include typedef struct{ unsigned char Ngay; unsigned char Thang; unsigned int Nam; } NgayThang; typedef struct{ char MSSV[10]; char HoTen[40]; NgayThang NgaySinh; 71 int Phai; char DiaChi[40]; } SinhVien; /* Hàm in lên hình mẩu tin SinhVien*/ void InSV(SinhVien s){ printf("MSSV: | Ho va ten | Ngay Sinh | Dia chi\n"); printf("%s | %s | %d-%d-%d | %s\n",s.MSSV,s.HoTen, s.NgaySinh.Ngay,s.NgaySinh.Thang,s.NgaySinh.Nam,s DiaChi); } /* Hàm main */ int main(){ SinhVien SV, s; printf("Nhap MSSV: ");gets(SV.MSSV); printf("Nhap Ho va ten: ");gets(SV.HoTen); printf("Sinh ngay: ");scanf("%d",&SV.NgaySinh.Ngay); printf("Thang: ");scanf("%d",&SV.NgaySinh.Thang); printf("Nam: ");scanf("%d",&SV.NgaySinh.Nam); printf("Gioi tinh (0: Nu), (1: Nam): "); scanf("%d",&SV.Phai); flushall(); printf("Dia chi: ");gets(SV.DiaChi); InSV(SV); s=SV; /* Gán trị cho mẩu tin s*/ InSV(s); getch(); return 0; } Lưu ý: Các biến cấu trúc gán cho Thực chất thao tác tồn cấu trúc khơng phải trường riêng rẽ Chương trình dịng s=SV 72 Ví dụ: Với biến kiểu cấu trúc ta thực thao tác sau đây: o Sử dụng hàm xuất nhập biến cấu trúc o Các phép toán quan hệ, phép toán số học logic 4.4.2 Khởi tạo cấu trúc Việc khởi tạo cấu trúc thực lúc khai báo biến cấu trúc Các trường cấu trúc khởi tạo đạt dấu { }, chúng phân cách dấu phẩy (,) Ví dụ: Khởi tạo biến cấu trúc NgaySinh: struct NgayThang NgaySinh ={29, 8, 1986}; 73 BÀI TẬP MẢNG (ARRAY) Lý thuyết Mảng gì? Trường hợp sử dụng mảng? Bảng ghi gì? Trường hợp sử dụng bảng ghi? Tập hợp gì? Trường hợp sử dụng kiểu tập hợp? Tình bày cách khai báo kiểu, biến, mảng, bảng ghi, tập hợp cho ví dụ minh họa Trình bày thao tác truy xuất mảng, bảng ghi, tập hợp Cho ví dụ minh họa trường hợp Thực hành Viết chương trình nhập vào mảng, xuất hình: - Phần tử lớn mảng - Phần tử nhỏ mảng - Tính tổng phần tử mảng Viết chương trình nhập vào dãy n số thực a[0], a[1], , a[n-1], xếp dãy số theo thứ tự từ lớn đến nhỏ In dãy số sau xếp Viết chương trình xếp mảng theo thứ tự tăng dần sau loại bỏ phần tử trùng Viết chương trình nhập vào dãy số theo thứ tự tăng, nhập sai quy cách yêu cầu nhập lại In dãy số sau nhập xong Nhập thêm số chèn số vào dãy có cho dãy đảm bảo thứ tự tăng In lại dãy số để kiểm tra 10 Viết chương trình nhập vào ma trận (mảng hai chiều) số nguyên, gồm m hàng, n cột In ma trận lên hình Nhập số nguyên khác vào xét xem có phần tử ma trận trùng với số không ? Ở vị trí ? Có phần tử? 11 Viết chương trình nhập vào mảng số tự nhiên Hãy xuất hình: - Dịng 1: gồm số lẻ, tổng cộng có số lẻ - Dịng 2: gồm số chẵn, tổng cộng có số chẵn - Dòng 3: gồm số nguyên tố - Dịng 4: gồm số khơng phải số nguyên tố 12 Viết chương trình thực việc đảo mảng chiều Ví dụ: 10 đảo thành 10 13 Viết chương trình thực việc trộn hai dãy có thứ tự thành dãy có thứ tự u cầu khơng trộn chung thứ tự Khi trộn phải tận dụng tính chất hai dãy 14 Viết chương trình nhập vào mảng số thực từ bàn phím Hãy viết chương 74 trình định nghĩa hàm tính số lớn số thực sử dụng hàm để tìm số lớn mảng nói Hướng dẫn: xây dựng hàm tìm số lớn số thực Nhập vào mảng gọi hàm vừa định nghĩa float max_xy(float x, float y){ return x>y?x:y; } void main(){ float m[100], max; int n; printf(“Nhap vao so phan tu n cua mang: ”); scanf(“%d”,&n); for(int i=1;i

Ngày đăng: 19/01/2022, 10:16

Tài liệu cùng người dùng

Tài liệu liên quan