Tin học cơ sở 3 (ngôn ngữ lập trình C)

Ngôn ngữ C có một số các đặc điểm nổi bật sau :

C là ngôn ngữ lập trình có cấu trúc và phân biệt chữ Hoa – chữ thường.

Một chương trình C bao giờ cũng gồm một hoặc nhiều hàm và các hàm rời nhau.

 

ppt155 trang | Chia sẻ: Mr Hưng | Lượt xem: 1065 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Tin học cơ sở 3 (ngôn ngữ lập trình C), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
(int i = 0; i max) max = a[i]; return max;}Sắp xếp mảng tăng dầnYêu cầuCho trước mảng a kích thước n. Hãy sắp xếp mảng a đó sao cho các phần tử có giá trị tăng dần.Ý tưởngSử dụng 2 biến i và j để so sánh tất cả cặp phần tử với nhau và hoán vị các cặp theo thứ tự.Mảng một chiều012MAX - 1n – 1 5186tạm5ij815jj68jHàm Sắp Xếp TăngMảng một chiềuint SapXepTang(int a[], int n){ int i, j; for (i = 0; i a[j]) HoanVi(a[i], a[j]);//gọi hàm HV } }}Thêm một phần tử vào mảngYêu cầuThêm phần tử x vào mảng a kích thước n tại vị trí vt.Ý tưởng“Đẩy” các phần tử bắt đầu tại vị trí vt sang phải 1 vị trí.Đưa x vào vị trí vt trong mảng.Tăng n lên 1 đơn vị.Mảng một chiềuczz012MAX - 1n – 1abcxchèn?vtn3Hàm ThêmMảng một chiềuint Them(int a[], int &n, int vt, int x){ if (vt >= 0 && vt vt; i--) a[i] = a[i - 1]; a[vt] = x; n++; }}Cách 2: Xem phần Bản ghi, mục bổ sung học sinhXóa một phần tử trong mảngYêu cầuXóa một phần tử trong mảng a kích thước n tại vị trí vtÝ tưởng“Kéo” các phần tử bên phải vị trí vt sang trái 1 vị trí.Giảm n xuống 1 đơn vị.Mảng một chiềub012MAX - 1n – 1axbzxóa?vtzn - 1Hàm XóaMảng một chiềuint Xoa(int a[], int &n, int vt){ if (vt >= 0 && vt a[j])        { temp = a[i];         a[i] = a[j];         a[j] = temp;         }   // có thể gọi hàm hoanvi }     for (j=0; j[][]int a[3][4];0120123Gán dữ liệu kiểu mảngKhông được sử dụng phép gán thông thường mà phải gán trực tiếp giữa các phần tửVí dụMảng hai chiềuint a[5][10], b[5][10];b = a; // Saiint i, j;for (i = 0; i dùng tham chiếu int NhapMaTran(int a[][MAXC], int &m, int &n){printf(“Nhap so dong, so cot cua ma tran: ”);scanf(“%d%d”, &m, &n);// có thể để ở hàm main int i, j; for (i=0; i [Chiều dài tối đa]Ví dụ: char Ten[12]; // 12 ô, mỗi ký tự chiếm 1 ô nhớ2. Nhập chuỗi từ bàn phímĐể nhập một chuỗi ký tự từ bàn phím, ta sử dụng hàm gets() Cú pháp: gets()Ví dụ: char Ten[20]; gets(Ten);Cũng có thể dùng hàm scanf. VD scanf(“%s”,Ten);3. Xuất chuỗi lên màn hìnhĐể xuất một chuỗi (biểu thức chuỗi) lên màn hình, ta sử dụng hàm puts().Cú pháp: puts()Ví dụ: puts(Ten); *Ví dụ: Nhập vào một chuỗi và hiển thị trên màn hình chuỗi vừa nhập.#include #include #include int main() { char Ten[12]; char queQuan[15]; printf("Nhap Ten: "); fflush(stdin); gets(Ten); printf("Nhap Que Quan: ");fflush(stdin); dùng tránh bị trôi lệnh; gets(queQuan); printf("Chuoi vua nhap: "); puts(Ten); puts(queQuan); getch(); return 0; } *Một số hàm xử lý chuỗi (trong string.h)Cộng chuỗi - Hàm strcat()Ví dụ: Nhập vào họ lót và tên của một người, sau đó in cả họ và tên của họ lên mà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; } *Một số hàm xử lý chuỗi (trong string.h)Xác định độ dài chuỗi - Hàm strlen()Ví dụ: Sử dụng hàm strlen xác định độ dài một 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 do dai %d",Dodai); getch(); return 0; } *Một số hàm xử lý chuỗi (trong string.h)So sánh 2 chuỗi có bằng nhau hay không - Hàm strcmp() (dùng khi tìm kiếm tên,)So sánh 2 chuỗi strnicmp (s1, s2, n); so sánh n ký tự đầu tiên của chuỗi s1 và s2, không phân biệt chữ hoa, chữ thường của cùng một ký tự (dùng khi sắp xếp tên theo alphable)Bài 7: Kiểu cấu trúc – kiểu bản ghiKhái niệmKiểu cấu trúc (kiểu bản ghi) là kiểu dữ liệu bao gồm nhiều thành phần có kiểu khác nhau, mỗi thành phần được gọi là một trường (field) . Các thành phần được truy nhập thông qua một tên. Sự khác biệt giữa kiểu cấu trúc và kiểu mảng là: các phần tử của mảng là cùng kiểu còn các phần tử của kiểu cấu trúc có thể khác kiểu nhau. Minh họaSttHọ tênNgày sinhQuê quanToánLýHóa1Nguyễn Văn B10/3/1999Hà nội8792Trần Văn C20/10/1998Hà nội8671015161826Mảng lưu các số nguyênMảng lưu các bản ghiKhai báo kiểu cấu trúc Cách 1: struct { ; ; .. ; }; - Tên cấu trúc: là một tên được đặt theo quy tắc đặt tên và là tên kiểu cấu trúc. - (i=1..n): là kiểu của mỗi trường trong cấu trúc - Tên trường: phải là một tên được đặt theo quy tắc đặt tên. Khai báo kiểu cấu trúcCách 2: Sử dụng từ khóa typedef để định nghĩa kiểu: typedef struct { ; ; .. ; } ; Ví dụ 1Để quản lý ngày, tháng, năm của một ngày trong năm ta có thể khai báo kiểu cấu trúc gồm 3 thông tin: ngày, tháng, năm. struct NgayThang { int Ngay; int Thang; int Nam; }; typedef struct { int Ngay; int Thang; int Nam; } NgayThang; Ví dụ 2Mỗi sinh viên cần được quản lý bởi các thông tin: mã số sinh viên, họ tên, ngày tháng năm sinh, giới tính, địa chỉ thường trú. Lúc này ta có thể khai báo một struct gồm các thông tin trên. 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; CÁC THAO TÁC TRÊN BIẾN KIỂU CẤU TRÚC1. Truy xuất đến từng trường của biến cấu trúcCú pháp: . Ví dụ : Viết chương trình cho phép đọc dữ liệu từ bàn phím cho biến mẩu tin SinhVien và in biến mẩu tin đó lên màn hình: #include #include #include typedef struct { int Ngay; int Thang; int Nam; }NgayThang; Ví dụ (tiếp)typedef struct { char MSSV[10]; char HoTen[40]; NgayThang NgaySinh; int Phai; char DiaChi[40]; } sinhvien; /* Hàm in lên màn hình 1 mẩu tin SinhVien*/ int 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); } Ví dụ (tiếp)int main() { SinhVien SV; 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); fflush(stdin); printf("Dia chi: "); gets(SV.DiaChi); InSV(SV); getch(); } Ví dụ 2Viết chương trình nhập danh sách học viên gồm các trường họ tên, tuổi, điểm, và nhập vào một tên để tìm kiếm tên này trong danh sách.#include #include#include typedef struct{ char Ten[30]; int tuoi ; float diem ;} HV ;Ví dụ 2 (tiếp)int nhap(HV hvs[], int &n){ int i ; printf(“nhap vao so hoc sinh: “);scanf(“%d”,&n);for ( i = 0 ; i hvs[j].diem) { tam =hvs[i]; hvs[i] =hvs[j]; hvs[j]= tam; } } }}int main(){int n; HV hs[100];nhap(hs,n);hienthi(hs,n);timkiem(hs,n);sapxep(hs,n);getch();}*scanf(“%d”, &chon);switch(chon){ case 1: nhap(hs,n);case 2: hienthi(hs,n);case 3: timkiem(hs,n); case 4: sapxep(hs,n);}getch();}*Hoặcint main(){int n, chon;Printf(“Hay nhap cac so sau de thuc hien: \n”);Printf(“ so 1: nhap\n”);Printf(“ so 2: in danh sach vua nhap \n”);Printf(“ so 3: tim kiem ten trong danh sach vua nhap \n”);Printf(“ so 4: sap xep danh sach vua nhap theo diem \n”);Bài tậpViết hàm nhập vào họ tên, điểm của n học sinh. In ra danh sách các học sinh vừa nhập.Viết hàm nhập vào họ tên, điểm của n học sinh. Sắp xếp lại điểm của các HV từ thấp đến cao và in ra danh sách các học sinh vừa nhập.Viết hàm nhập vào vào, họ và họ lót, tên, địa chỉ, sắp xếp tên và địa chỉ theo thứ tự alphabet, sau đó hiển thị danh sách đã được sắp xếp.TiếpBài tậpĐể quản lý học sinh của một lớp, người ta dùng một mảng 1 chiều gồm có n phần tử, cấu trúc của mỗi phần tử gồm có:Mã học sinh (MHS) kiểu xâu ký tự có độ dài 10 ký tự Họ đệm (HODEM) kiểu xâu ký tự có độ dài 20 ký tự Tên (TEN) kiểu xâu ký tự có độ dài 10 ký tự Lớp (LOP) kiểu xâu ký tự có độ dài 10 ký tự Điểm toán (TOAN) có kiểu số thựcĐiểm lý (LY) có kiểu số thựcĐiểm hóa (HOA) có kiểu số thựcĐiểm trung bình(DTB) có kiểu số thực (được tính bằng trung bình cộng của 3 điểm toán, lý, hóa)*Yêu cầu : Lập trình bằng ngôn ngữ C để thực hiện công việc sau:Khai báo kiểu dữ liệu phù hợp theo đầu bài. Viết hàm nhap() để nhập n học sinh theo cấu trúc trên. Viết hàm in() để in ra danh sách các học sinh vừa nhập, mỗi học sinh hiển thị trên một dòng (gồm: Mã học sinh, họ đệm, tên, lớp, điểm toán, điểm lý, điểm hóa, điểm trung bình).Viết hàm sapxeptenhs() để sắp xếp tên của học sinh theo theo thứ tự alphabet và in ra danh sách học sinh vừa sắp xếp.Viết hàm timkiemtenhs() để tìm tên học sinh trong danh sách vừa nhập. Nếu tìm thấy thì đưa ra màn hình tất cả thông tin về học sinh này, nếu không tìm thấy thì đưa ra màn hình thông báo “không tìm thấy học sinh có tên vừa nhập trong danh sách”.Viết hàm main() chứa lời gọi của các hàm trên và cho phép lựa chọn các hàm trên nhiều lần cho tới khi muôn kết thúc.*#include#include#include#includestruct hs{ char MHS[10]; char HODEM[20]; char TEN[10]; char LOP[10]; float TOAN; float LY; float HOA; float DTB ;};*void nhap(hs s[],int &n){ printf(" Nhap n = "); scanf("%d",&n); for(int i=0;i 0) { tam =s[i]; s[i]= s[j]; s[j]= tam; } } } printf(" Danh sach sap xep ten la:\n"); in(s,n);}*void timkiemtenhs(hs s[],int n){ int i; char ten[10]; printf(" \nNhap ten hoc sinh can tim :"); fflush(stdin); gets(ten); bool thay; thay = 0; i=0; while((!thay) && (i5)); return c;}*int main(){ int n,c,i; char ten[10]; hs s[200]; for( ; ; ) { switch(menu()) { case 1 : nhap(s,n); break; case 2 : in(s,n); break; case 3 : sapxeptenhs(s,n); break; case 4 : timkiemtenhs(s,n); break; case 5 : exit(0); break; } }}*

Các file đính kèm theo tài liệu này:

  • pptc__9763.ppt
Tài liệu liên quan