Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 55 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
55
Dung lượng
310,5 KB
Nội dung
Giới thiệu • Thực hànhlậptrìnhC trên môitrườngUNIX. • Chủ đề thựchành liên quan đến cấu trúc dữ liệu và giải thuật. • trình biên dịch: gcc • Trình soạn thảo: Emacs, K-Developper. Cú pháp gcc Tham số: -Wall : bật tất cả các cảnh báo -c: tạo file đối tượng (object file) -o: name of output file ( tên file đầu ra ) -g: thông tin về gỡ lỗi (muốn sử dụng gdb thì khi dịch phải thêm tham số này). -l: thư viện gcc –Wall hello.c –o runhello ./runhello Tuần này: Các cấu trúc dữ liệu cơ sở và giải thuật. Chủ đề: – Array, String, Pointer Review – Các phép toán về File dựa trên kí tự trong UNIX. – Các bài tập lập trình. Array • Mảng là một khối các biến có cùng kiểu dữ liệu • Mảng có thể được khai báo với mọi kiểu dữ liệu. – Ví dụ: int A[10] là 1 mảng 10 số nguyên. • Các ví dụ : – Danh sách điểm của SV (list of students’ marks) – Dãy các số được nhập vào bởi người sử dụng. – vectors (véc tơ) – Ma trận.(Matrices) Mảng trong bộ nhớ • Là dãy các biến có kiểu dữ liệu đã được định trước. • Bản thân mảng đã lưu giữ địa chỉ đầu tiên của dãy trong bộ nhớ. • Ví dụ: double S[10]; • 1 mảng k phần tử A được khai báo là A [k-1] (0- based) …0 1 2 3 4 5 6 7 8 … s Ví dụ - Đảo ngược # include <stdio.h> int main(void) { int i, A[10]; printf("please enter 10 numbers:\n"); for(i=0; i<10; i++) scanf("%d", &A[i]); printf("numbers in reversed order:\n"); for(i=9; i>=0; i ) printf("%d\n", A[i]); return 0; } Bài tập 1.1 Viết 1 chương trình nhận vào 1 dòng kí tự (kết thúc bằng kí tự ‘\n’) từ người sử dụng, và đưa ra màn hình số lần xuất hiện của mỗi chữ cái trong dòng đó. Nhập vào chỉ gồm các chữ cái thường và dấu khoảng trống. Ví dụ:The output for the input line: “hello, world!” The letter 'd' appears 1 time(s). The letter 'e' appears 1 time(s). The letter 'h' appears 1 time(s). The letter 'l' appears 3 time(s). The letter 'o' appears 2 time(s). The letter 'r' appears 1 time(s). The letter 'w' appears 1 time(s). Solution (giải pháp) #define ALPHABET_LEN 26 int main(void) { int i = 0; count[ALPHABET_LEN] = {0}; char c = '\0'; printf(“Nhập a line of text: \n"); /* nhập từng kí tự và cập nhật mảng đếm*/ c = getchar(); while (c != '\n' && c >= 0) { if (c <= 'z' && c >= 'a') ++count[c - 'a']; if (c <= 'Z' && c >= 'A') ++count[c - 'A']; c = getchar(); } Solution for (i = 0; i < ABC_LEN; ++i) { if (count[i] > 0) printf("The letter '%c' appears %d time(s).\n", 'a' + i, count[i]); } return 0; } Bài tập 1.2 (20 phút) • Thực thi 1 hàm nhận vào 2 mảng số nguyên, trả về 1 nếu 2 mảng giống nhau, trả về 0 nếu không. • Viết 1 chương trình nhận 2 mảng số nguyên từ người sử dụng và kiểm tra sự = nhau. [...]... "); scanf("%f", &num); split(num, &integer, &fraction); printf("The integer part is %d\n", integer); printf("The remaining fraction is %f\n", fraction); return 0; } Exercise 1.5 Viết 1 hàm với nguyên mẫu: void replace_char(char *str,char c1 ,char c2 ); Hàm này thay cc kí tự c1 trong str bởi c2 Không đư c sử dụng khai báo [] Minh chứng hàm c a bạn bằng 1 chương trình Solution void replace_char(char... “/root/hedspi/CProgrammingBasic/Lab1/data txt” - Ho c có thể là 1 mảng kí tự chứa tên file : char file_name[] = “junk.txt”; C c chế độ cho file text chế độ Mô tả "r" Mở 1 file text đã c để đ c “w” Tạo 1 file text để ghi “a” Mở 1 file đã c để thêm dữ liệu vào cuối “r+” Mở 1 file text đã c để đ c ho c ghi "w+" Tạo 1 file text để đ c ho c ghi "a+" Tạo mới ho c mở 1 file đã c để thêm dữ liệu vào cuối ... n+1 phần tử C ch khai báo trên tương đương với c ch khai báo sau: char str[] = {'b', 'l', 'a', 'b', 'l',’\0’} ; Cc hàm liên quan đến xâu và kí tự getchar() c = getchar();//đ c 1 kí tự và lưu vào c scanf scanf("%s", str); gets() gets(str);// chú ý trư c khi dùng gets thường sử dụng lệnh while(getchar()! =‘\n’); để tránh lỗi Cc hàm liên quan đến xâu và kí tự strlen(const char s[]) return... } Ví dụ file chạy là “hcn” Dòng lệnh l c chạy chương trình là: /hcn 1.5 2.5 Thì argv[0]=“hcn”; argv[1]=“1.5”; argv[2]=“2.5” Quản lí file C giao tiếp với cc file qua sử dụng 1 kiểu dữ liệi gọi là con trỏ file Con trỏ File: - Tham chiếu tới 1 file trên đĩa - Đư c sử dụng để dẫn đường cc phép toán c a hàm vào/ra • FILE *fptr; 4 phép toán quan trọng Mở file Đ c từ 1 file vào chương trình Viết... (no spaces)\n"); scanf("%100s", str); printf("Letter to replace: "); scanf(" %c" , &replace_what);//chữ đư c thay thế do {tmp=getchar();} while (tmp!='\n'); printf("Letter to replace with: "); scanf(" %c" , &replace_with);//chữ thay thế vào replace(str, replace_what, replace_with); printf("The result: %s\n", str); return 0; } Con trỏ - Khai báo type *variable_name; Con trỏ đư c khai báo bằng c ch thêm... nghĩa như trên Trong đó: argc: giữ số đối số đư c đưa vào bởi người gọi argv: mảng c c con trỏ xâu kí tự, lưu giữ giá trị text c a đối số Đối số đầu tiên luôn là tên c a chương trình Nguyên mẫu ‘main’ int main(int argc, char* argv[]) argc thường = 3 (Đôi khi c ng c thể là 2 trong 1 số trường hợp, tuỳ vào dòng lệnh) argv (dạng mảng cc xâu kí tự): Ví dụ: Khi ta chạy dong lệnh trong terminal: /abc text.txt... Thì ta c tương ứng: argc = 3; argv[0] = “abc”; argv[1] =“text.txt”; argv[2]=“178”; Khi đó trong chương trình xâu “text.txt” sẽ đư c thay cho argv[1], xâu “178” sẽ đư c thay cho argv[2] - C ng c thể chỉ truyền 2 tham số thôi.Ví dụ: /abc text.txt Thì:argc = 2; argv[0] = “abc”; argv[1] =“text.txt”; Exercise 1.6 Viết chương trình nhận vào 2 số dưới dạng đối số dòng lệnh, biểu diễn chiều dài và chiều... replace_char(char *str, char c1 , char c2 ) { if (str == NULL) return; while (*str != '\0') { if (*str == c1 ) *str = c2 ; ++str; } } Đối số dòng lệnh Đối số dòng lệnh là đối số cho hàm - Hàm main là 1 hàm c sở - Nó c thể nhận đối số như bất kì hàm nào kh c - Hàm gọi trong trường hợp này là 1 hệ thống tính toán ho c là 1 chương trình kh c Nguyên mẫu ‘main’ • int main(int argc, char* argv[]) Khi ta muốn... file: từ chương trình vào file Đóng file Opening a file Hàm fopen() FILE *fopen(const char *filename, const char *mode); Ví dụ: FILE *fptr; if ((fptr = fopen("test.txt", "r")) ==NULL) { printf(“không thể mở test.txt file.\n"); exit(1); } Opening a file filename: tên file - Nó c thể là tên không, ví dụ: “data.txt” (trong trường hợp nằm c ng folder với chương trình C) - Ho c có thể chứa đầy... rộng c a 1 hình chữ nhật.(số ở dưới dạng dấu phẩy động) Chương trình đưa ra diện tích và chu vi c a hcn Solution int main(int argc, char* argv[]) { double width, height; if (argc != 3) { printf("Wrong number of arguments!\n"); return 1; } width = atof(argv[1]);//hàm chuyển đổi từ xâu kí tự về số height = atof(argv[2]); printf("The rectangle's area is %g\n", width * height); printf("The rectangle's . thiệu • Th c hành lập trình C trên môi trường UNIX. • Chủ đề th c hành liên quan đến c u tr c dữ liệu và giải thuật. • trình biên dịch: gcc • Trình soạn thảo: Emacs, K-Developper. C pháp gcc Tham. viện gcc –Wall hello .c –o runhello ./runhello Tuần này: C c cấu tr c dữ liệu c sở và giải thuật. Chủ đề: – Array, String, Pointer Review – C c phép toán về File dựa trên kí tự trong UNIX. – C c. sách điểm c a SV (list of students’ marks) – Dãy c c số đư c nhập vào bởi người sử dụng. – vectors (v c tơ) – Ma trận.(Matrices) Mảng trong bộ nhớ • Là dãy c c biến c kiểu dữ liệu đã đư c định