Bài giảng Lập trình tính toán khoa học kỹ thuật - Buổi 7: Kiểu tập tin và nâng cao - Lê Hoàng Sơn

Lập trình tính toán khoa học kỹ thuật 1

Buổi 7: Kiểu tập tin và nâng cao

Nội dung chính

1 Kiểu Tập Tin

2 Nâng Cao Về C

3 Bài tập

pdf 24 trang phuongnguyen 7340
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình tính toán khoa học kỹ thuật - Buổi 7: Kiểu tập tin và nâng cao - Lê Hoàng Sơn", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Lập trình tính toán khoa học kỹ thuật - Buổi 7: Kiểu tập tin và nâng cao - Lê Hoàng Sơn

Bài giảng Lập trình tính toán khoa học kỹ thuật - Buổi 7: Kiểu tập tin và nâng cao - Lê Hoàng Sơn
 Buổi 7: Kiểu tập tin và nâng cao 
 Giảng viên: TS. Lê Hoàng Sơn 
 lehoangson@hus.edu.vn 
Lập trình tính toán khoa học kỹ thuật 1 
Nội dung chính 
 1 Kiểu Tập Tin 
 2 Nâng Cao Về C 
 3 Bài tập 
 2/24 Lê Hoàng Sơn 
 1. Kiểu tập tin (File) 
 File là loại dữ liệu có thể ghi lên đĩa để dùng nhiều lần. 
 Trong C chỉ có một loại File, nhưng cấu trúc của mỗi File 
 có thể khác nhau. 
 Cấu trúc này được hình thành khi ta ghi dữ liệu lên File, 
 nó phụ thuộc vào hàm mà ta dùng để ghi dữ liệu lên đĩa. 
 Có hai kiểu xuất/ nhập dữ liệu vào File: 
 . Nhị phân 
 . Văn bản 
 3/24 Lê Hoàng Sơn 
 Kiểu xuất/nhập tập tin 
 Nhị phân: 
 . Dữ liệu trong file ở dạng các số nhị phân 
 . Dữ liệu ghi lên tập tin không bị thay đổi và khi đóng tập tin thì mã 
 kết thúc tập tin sẽ được ghi lên đĩa là -1 
 Văn bản: 
 . Dữ liệu ở dạng text 
 . Khi xử lý ký tự xuống dòng và khi đóng tập tin thì mã kết thúc tập 
 tin sẽ được ghi lên đĩa là 26 
 . Khi ghi một ký tự chuyển dòng lên đĩa (mã 10) sẽ ghi thành 2 ký tự 
 mã 13 và mã 10. 
 . Khi đọc, nếu gặp hai ký tự liên tiếp là mã 10 và mã 13, sẽ gom lại 
 thành một ký tự là mã 10. 
 4/24 Lê Hoàng Sơn 
 Một số hàm xuất/ nhập chuẩn 
 Mở file: Nếu thành công trả về kết quả là con trỏ FILE tương ứng 
 với file vừa mở, ngược lại trả về giá trị NULL. 
 . FILE *fopen(const char *tên_tập_tin,const char *kiểu_truy_cập); 
 Đóng file: Ðóng tập tin được chỉ đến bởi con trỏ f. Nếu thành công 
 thì giá trị của hàm = 0 ngược lại có giá trị EOF. Sau khi đóng con 
 trỏ f sẽ không còn trỏ đến file trước đó nữa 
 . int fclose(FILE *f) 
 Làm sạch vùng đệm của tập tin được chỉ đến bởi con trỏ f. Nếu 
 thành công cho giá trị 0, ngược lại cho giá trị EOF 
 . int fflush(FILE *f) 
 Xóa một tập tin trên đĩa: Nếu thành công giá trị của hàm bằng 0 , 
 ngược lại cho giá trị EOF 
 . int unlink(const char *tên_tập_tin) 
 5/24 Lê Hoàng Sơn 
 Một số hàm xuất/ nhập chuẩn (P2) 
 Ðổi tên một tập tin trên đĩa: Nếu thành công giá trị của hàm 
 bằng 0 , ngược lại cho giá trị EOF 
 . int rename(const char *tên_cũ,const char *tên_mới) 
 Kiểm tra kết thúc tập tin: Cho giá trị khác không nếu ở cuối 
 tập tin, ngược lại =0 
 . int feof(FILE *f) 
 Ghi dữ liệu theo khuôn dạng: dữ liệu sẽ được ghi lên file 
 . int fprintf(FILE *f , const char *đặc tả,....) 
 Ðọc dữ liệu theo khuôn dạng: dữ liệu sẽ được đọc từ File f 
 rồi đưa vào các đối số tương ứng 
 . fscanf(FILE *f , const char *đặc tả,....) 
 6/24 Lê Hoàng Sơn 
 Một số hàm xuất/ nhập chuẩn (P3) 
 Ghi một chuỗi: Ghi một chuỗi được chỉ tới bởi con trỏ s 
 vào file f. Kết quả = ký tự cuối được ghi nếu thành công, 
 ngược lại =EOF 
 . int fputs(const char *s, FILE *f) 
 Ðọc một chuỗi: Ðọc một chuỗi từ File f và đưa vào 
 vùng nhớ do s trỏ đến. Việc đọc kết thúc khi đã đọc 
 được n-1 ký tự , hoặc gặp ký tự xuống dòng , hoặc gặp 
 ký tự kết thúc File. Nếu việc đọc có lỗi kết quả của hàm 
 =NULL 
 . char *fgets(const char *s, int n, FILE *f) 
 Ðưa con trỏ về đầu file: 
 . void rewind ( FILE *f); 
 7/24 Lê Hoàng Sơn 
 Nhập danh sách sinh viên từ file và in ra file khác 
 sinh viên có điểm lớn nhất 
#include 
#include 
#include 
struct sinhvien { Cấu trúc sinh viên 
 int masv; 
 char hoten[30]; 
 float diem; 
}; 
FILE *fi, *fo; sinhvien *sv; int n; Con trỏ đến file input và output 
int mofile(char *filein, char *fileout) { 
 fi = fopen (filein,"r"); rewind(fi); Mở input để đọc và output để ghi 
 fo = fopen (fileout,"w"); rewind(fo); 
 if ( (fi == NULL) || (fo == NULL) ) return 0; 
 return 1; 
} 
 8/24 Lê Hoàng Sơn 
 Nhập danh sách sinh viên từ file và in ra file khác 
 sinh viên có điểm lớn nhất (P2) 
int dongfile() { 
 fclose(fi); fflush(fi); 
 fclose(fo); fflush(fo); 
} 
void docdulieu() { 
 int i = 0; 
 fscanf (fi, "%d", &n); Đọc số sinh viên và ghi vào n 
 sv =(sinhvien *) calloc(n,sizeof(sinhvien)); 
 while (!feof(fi)) { 
 fscanf (fi, "%d", &sv[i].masv); 
 fgets(sv[i].hoten,30,fi); Nhập từng dòng dữ liệu 
 fscanf (fi, "%f", &sv[i].diem); 
 i++; 
 } 
} 
 9/24 Lê Hoàng Sơn 
 Nhập danh sách sinh viên từ file và in ra file khác 
 sinh viên có điểm lớn nhất (P3) 
void indanhsach() { In danh sách sinh viên ra 
 int i; màn hình 
 puts("Danh sach sinh vien:"); 
 puts("MaSV\tHo va ten\tDiem"); 
 for (i=0; i<n; i++) 
 printf("\n%d\t%s\t%5.1f",sv[i].masv,sv[i].hoten,sv[i].diem); 
} 
int timsinhvien() { Tìm sinh viên có điểm lớn nhất 
 float max = 0; int vitri,i; 
 for (i=0; i<n; i++) 
 if(sv[i].diem >= max) { 
 max = sv[i].diem; 
 vitri = i; 
 } 
 return vitri; Lưu thứ tự sinh viên vào vitri 
} 
 10/24 Lê Hoàng Sơn 
 Nhập danh sách sinh viên từ file và in ra file khác 
 sinh viên có điểm lớn nhất (P4) 
void inraoutput(int i) { 
 fprintf(fo,"\n%d\t\t%s\t\t%5.3f",sv[i].masv,sv[i].hoten,sv[i].diem); 
} 
 In sinh viên có điểm lớn 
 nhất vào file output 
int main() { 
 mofile("danhsach.inp", "danhsach.out"); 
 docdulieu(); 
 indanhsach(); Chương trình chính 
 inraoutput( timsinhvien() ); 
 dongfile(); 
 printf("\n\nSinh vien co diem lon nhat trong file danhsach.out !"); 
 getch(); 
} 
 11/24 Lê Hoàng Sơn 
Kết quả 
 12/24 Lê Hoàng Sơn 
Nội dung chính 
 1 Kiểu Tập Tin 
 2 Nâng Cao Về C 
 3 Bài tập 
 13/24 Lê Hoàng Sơn 
 Đo thời gian chạy của chương trình 
# include 
# include 
# include 
int main() { 
 float max, min, tam; 
 clock_t t1,t2; 
 t1=clock(); Biến thời gian 
 printf("\nNhap vao so max, min: "); scanf("%f%f", &max, &min); 
 if (max < min) { 
 tam = max; max = min; min = tam; 
 } 
 printf("\nMax = %5.3f Min = %5.3f", max, min); 
 t2=clock(); Đo thời gian chạy 
 float diff = ((float)t2 - (float)t1) / CLOCKS_PER_SEC; 
 printf("\nThoi gian chay chuong trinh la: %5.3f giay", diff); 
 getch(); return 0;} 
 14/24 Lê Hoàng Sơn 
Kết quả 
 15/24 Lê Hoàng Sơn 
 Kiểm tra đoạn nhập vào là số hay xâu? 
#include #include #include 
#include #include 
int isNumber(const char str[]){ Kiểm tra có phải là số 
 char *ok; strtod(str,&ok); 
 return !isspace(*str) && strlen(ok)==0; 
} 
int main(){ 
 char mang[14][15] = {"00100" ,"-00200","+030","-040.30", 
 "-000.35"," 50","50 ","char","200.003-",".-","-", 
 ".","+1.234E-05","-6.789E+10"}; 
 for(int i=0; i<14; i++){ 
 printf("%s:\t\t\t", mang[i]); 
 if(isNumber(mang[i])) printf("la so!\n"); Kiểm tra các phần tử 
 else printf("khong phai la so!\n"); 
 } 
 getch(); return 0; } 
 16/24 Lê Hoàng Sơn 
Kết quả 
 17/24 Lê Hoàng Sơn 
 Chuyển xâu thành số 
#include 
#include 
#include 
int main () 
{ 
 int i; 
 char xau [256]; 
 printf ("\nNhap vao mot so: "); 
 fgets ( xau, 256, stdin ); 
 i = atoi (xau); Chuyển xâu thành số 
 printf ("\nXau nhap vao la: %s\nSo la: %d",xau,i); 
 getch(); 
 return 0; 
} 
 18/24 Lê Hoàng Sơn 
Kết quả 
 19/24 Lê Hoàng Sơn 
 Tóm tắt bài học 
Kiểu tập tin 
 . Kiểu xuất/nhập tập tin 
 . Một số hàm xuất/ nhập chuẩn 
Một số ví dụ nâng cao 
 . Đo thời gian chạy chương trình 
 . Kiểm tra đoạn nhập vào là số hay xâu? 
 . Chuyển xâu thành số 
 20/24 Lê Hoàng Sơn 
Câu hỏi thảo luận 
 21/24 Lê Hoàng Sơn 
Nội dung chính 
 1 Kiểu Tập Tin 
 2 Nâng Cao Về C 
 3 Bài tập 
 22/24 Lê Hoàng Sơn 
 Bài tập 
1. Đối với danh sách sinh viên trong ví dụ 1, hãy in ra file 
 output danh sách sinh viên mới sắp xếp theo thứ tự 
 alphabet của họ tên 
2. Cho bai2.inp như sau: 
 - Dòng đầu là chỉ số hàng 
 và cột của ma trận 
 - Các dòng sau là phần tử 
 ma trận 
 Ghi vào file bai2.out: 
 a) Dòng đầu: Số phần tử dương 
 b) Dòng thứ hai: Số phần tử âm 
 c) Dòng thứ ba: Số phần tử bằng 0 
 23/24 Lê Hoàng Sơn 
 Lê Hoàng Sơn 
 C l i c k to e d i t c o m p a n y s l o g a n . 
Lập trình tính toán khoa học kỹ thuật 

File đính kèm:

  • pdfbai_giang_lap_trinh_tinh_toan_khoa_hoc_ky_thuat_buoi_7_kieu.pdf