Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 22 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
22
Dung lượng
217,5 KB
Nội dung
5. ModuleE–Thưviệnchuẩn 3 5.1. Ví dụ 3 5.1.1. Ví dụ 1 - Nhập 2 số nguyên và float .3 5.1.2. Ví dụ 2 - Nhập 2 số nguyên và ký tự 3 5.1.3. Ví dụ 3 – Kiểm tra dữ liệu nhập vào .4 5.1.5. Ví dụ 5 - Tạo số ngẫu nhiên trong miền giới hạn .6 5.2. Bài tập thực hành .7 5.2.1. Bài tập thực hành 1 7 5.2.2. Bài tập thực hành 2 7 5.2.3. Bài tập thực hành 3 7 5.2.4. Bài tập thực hành 4 8 6. ModuleE - Mảng 8 6.1. Ví dụ 8 6.1.1. Ví dụ 1 – Khai báo mảng, thiết lập giá trị ban đầu .8 6.1.2. Ví dụ 2 - Truyền tham số mảng cho hàm 9 6.1.3. Ví dụ 3 - Mảng song song và nhập thông tin một bảng 10 6.1.4. Ví dụ 4 – Tìm kiếm trong mảng 11 6.1.5. Ví dụ 5 – Mặt nạ để Tính tổng con 11 6.1.6. Ví dụ 6 - Sắp xếp mảng .13 6.2. Bài tập thực hành 13 6.2.1. Bài tập thực hành 1 14 6.2.2. Bài tập thực hành 2 14 6.2.3. Bài tập thực hành 3 14 6.2.3. Bài tập thực hành 3 15 6.2.4. Bài tập thực hành 4 15 7. Module G – Xâu 15 7.1. Ví dụ 15 7.1.1. Ví dụ 1 – Khai báo xâu, đặt giá trị ban đầu và in xâu .15 7.1.2. Ví dụ 2 - Nhập xâu .16 7.1.3. Ví dụ 3 – Hàm xâu .16 7.1.4. Ví dụ 4 – Mảng xâu, khai báo và đặt giá trị ban đầu 17 7.1.5. Ví dụ 5 – Mảng xâu, nhập và xắp xếp danh sách tên 17 7.2. Bài tập thực hành 18 7.2.1.Bài tập thực hành 1 .18 7.2.2. Bài tập thực hành 2 19 7.2.3. Bài tập thực hành 3 19 8. Module F – File 19 8.1. Ví dụ 19 8.1.1. Ví dụ 1 – Ghi dữ liệu lên tệp .19 8.1.1. Ví dụ 2 – Đọc dữ liệu từ tệp 20 8.2. Bài tập thực hành 21 8.2.1. Bài tập thực hành 1 22 8.2.2. Bài tập thực hành 2 22 2 5. ModuleE–Thưviệnchuẩn 5.1. Ví dụ 5.1.1. Ví dụ 1 - Nhập 2 số nguyên và float int items; float price; printf("Enter items, price : "); scanf("%d%f", &items, &price); Đầu ra của chương trình Enter items, price : 4 39.99 Hàm scanf coi ký tự trắng giữa các giá trị nhập vào như là dấu phân cách, không cần đặt dấu cách giữa các đặc tả chuyển đổi. Hàm scanf tự động loại bỏ các ký tự trắng khi nhập số 5.1.2. Ví dụ 2 - Nhập 2 số nguyên và ký tự /* scanf với đặc tả %c * scanfc.c */ #include <stdio.h> int main (void) { int items; char tax; printf("Number of items : "); scanf("%d", &items); printf("Tax Status : "); scanf("%c", &tax); /* ERROR reads \n */ printf("%d items (tax status %c)\n", items, tax); return 0; } 3 Chỉ lấy dữ liệu số nguyên theo đặc tả chuyển đổi %d và bỏ lại ký tự xuống dòng \n trong bộ đệm Hiện Number of items : 25 Tax status : 25 items (taxable status) Nguyên nhân để không nhập được ký tự sau khi nhập số là ký tự xống dòng còn trong bộ đệm, mà %c thì không tự động bỏ đi các ký tự trắng như %d Có một số cách để xử lý các ký tự xuống dòng \n còn bị bỏ lại trong bộ đệm như sau scanf("%d", &itmes); scanf("%c%c", &junk, &tax); /* lưu 1 ký tự đầu tiên trong junk */ scanf("%d", &items); scanf("%*c%c", &tax); /* Nuốt 1 đầu */ scanf("%d", &items); scanf(" %c", &tax); /* skip all whitespace first */ scanf("%d%*c", &items); /* swallow newline */ scanf("%c", &tax); scanf("%d", &items); clear(); /* clear the buffer */ scanf("%c", &tax); 5.1.3. Ví dụ 3 – Kiểm tra dữ liệu nhập vào /* Kiểm tra dữ liệu nhập vào * getInt.c */ #include <stdio.h> int getInt(int min, int max); void clear(void); #define MIN 3 #define MAX 15 int main( ) { int input; input = getInt(MIN, MAX); printf("\nProgram accepted %d\n", input); return 0; } 4 /* getInt nhận dữ liệu nhập vào trong khoảng từ * min đến max, * trả lại giá trị số nguyên đã được nhập */ int getInt(int min, int max) { int value, keeptrying = 1, rc; char after; do { printf("Enter a number\n in the range [%d,%d]:",min, max); rc = scanf("%d%c", &value, &after); if (rc == 0) { printf("**No input accepted!**\n\n"); clear(); } else if (after != '\n') { printf("**Trailing characters!**\n\n"); clear(); } else if (value < min || value > max) { printf("**Out of range!**\n\n"); } else keeptrying = 0; } while (keeptrying == 1); return value; } /* Xoá bộ đệm vào */ void clear (void) { while ( getchar() != '\n' ) ; /* null statement intentional */ } Đầu ra của chương trình như sau Enter a whole number in the range [3,15] : we34 // rc = 0 **No input accepted!** Enter a whole number in the range [3,15] : 34.4 // after != ‘n’ **Trailing characters!** Enter a whole number in the range [3,15] : 345 // 345 > MAX **Out of range!** Enter a whole number in the range [3,15] : 14 5 Program accepted 14 5.1.4. Ví dụ 4 – In ra theo khuôn dạng /* Khuôn dạng của printf * printf.c */ int main( ) { /* integers */ printf("\n* ints *\n"); printf("00000000011\n"); printf("12345678901\n"); printf("-------------------------\n"); printf("%d|<-- %%d\n",4321); printf("%10d|<-- %%10d\n",4321); printf("%010d|<-- %%010d\n",4321); printf("%-10d|<-- %%-10d\n",4321); /* floats */ printf("\n* floats *\n"); printf("00000000011\n"); printf("12345678901\n"); printf("-------------------------\n"); printf("%f|<-- %%f\n",4321.9876546); /* doubles */ printf("\n* doubles *\n"); printf("00000000011\n"); printf("12345678901\n"); printf("-------------------------\n"); printf("%lf|<-- %%lf\n",4321.9876546); printf("%10.3lf|<-- %10.3lf\n",4321.9876546); printf("%010.3lf|<-- %%010.3lf\n",4321.9876546); printf("%-10.3lf|<-- %%-10.3lf\n",4321.987654); /* characters */ printf("\n* chars *\n"); printf("00000000011\n"); printf("12345678901\n"); printf("-------------------------\n"); printf("%c|<-- %%c\n",'d'); printf("%d|<-- %%d\n",'d'); printf("%o|<-- %%o\n",'d'); printf("%x|<-- %%x\n",'d'); return 0; } * ints * 00000000011 12345678901 --------------------------- 4321|<-- %d 4321|<-- %10d 0000004321|<-- %010d 4321 |<-- %-10d * floats * 00000000011 12345678901 --------------------------- 4321.987655|<-- %f * doubles * 00000000011 12345678901 --------------------------- 4321.987655|<-- %lf 4321.988|<-- %10.3lf 004321.988|<-- %010.3lf 4321.988 |<-- %-10.3lf * chars * 00000000011 12345678901 --------------------------- d|<-- %c 100|<-- %d 144|<-- %o 64|<-- 5.1.5. Ví dụ 5 - Tạo số ngẫu nhiên trong miền giới hạn 6 /* tạo ra 10 số ngẫu nhiên trong khoảng từ 6 đến 10 * random.c */ #include <stdlib.h> #include <stdio.h> #include <time.h> int main ( ) { int i, n, a = 6, b = 100; srand(time(NULL)); for (i = 0; i < 10 ; i++) { n = a + rand() % (b + 1 - a); printf("Random number %d is %d\n", i+1, n); } return 0; } Hàm srand đặt giá trị khởi đầu cho bộ phát số ngẫu nhiên. Chúng ta gọi hàm srand trước khi gọi hàm rand, thường tại bắt đầu của chương trình. Chúng ta sử dụng time(NULL) để phát ra số khởi đầu dựa trên thời gian của mỗi lần chạy 5.2. Bài tập thực hành 5.2.1. Bài tập thực hành 1 Viết chương trình cho phép nhập số nhỏ nhất và số lớn nhất, rồi in ra một bảng gồm 4 cột các số ngẫu nhiên nằm trong giới hạn đó 5.2.2. Bài tập thực hành 2 Viết chương trình in ra một bảng gồm 4 cột 100 số ngẫu nhiên có 4 chữ số khác nhau 5.2.3. Bài tập thực hành 3 Viết hàm có khai báo như sau double getDouble(double min, double max); 7 Hàm này cho phép nhập số double trong khoảng từ min đến max, nếu không thì ra thông báo buộc người dùng nhập lại 5.2.4. Bài tập thực hành 4 Viết hàm có khai báo như sau int getEvenInteger(int min, int max) Hàm này cho phép nhập một số chẵn trong khoảng min va max. Nếu không thì ra thông báo bắt người dùng nhập lại. Sau đó viết chương trình để thử hàm này như sau Nhập số nhỏ nhất: 4 Nhập số lớn nhất 56 Nhập số chẵn: 5 **Đây không phải số chẵn **Nhập lại: 90 **Không được lớn hơn 56 **Nhập lại: 16 Số 15 đã được nhập Ấn phím bất kỳ để tiếp tục (Ctrl + C để thoát)! 6. ModuleE - Mảng 6.1. Ví dụ 6.1.1. Ví dụ 1 – Khai báo mảng, thiết lập giá trị ban đầu #include <stdio.h> #define BITS 16 main() { int i; int digits[BITS] = {0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,0}; //In các phần tử của mảng từ digits[0] đến digits[BITS-1] for(i = 0; i < BITS; i++) printf(“%d”, digits[i]); printf(“\n”); //In các phần tử của mảng từ digits[BITS-1] đến digits[0] for(i = BITS; i >= 0; i--) printf(“%d”, digits[i]); printf(“\n”); } Hiện 8 Mảng digits gồm BITS các số nguyên từ digits[0] đến digits[BITS-1] 0000000001011100 0011101000000000 6.1.2. Ví dụ 2 - Truyền tham số mảng cho hàm /* Số hệ 10 sang hệ 2 * binary.c */ #include <stdio.h> void binary(int, int []); void display(int digit[]); #define BITS 16 int main ( ) { int decimal, digit[BITS]; printf("Enter a positive integer value : "); scanf("%d", &decimal); binary(decimal, digit); display(decimal, digit); return 0; } /* binary đặt biểu diễn nhị phân của * decimal trong mảng digit[BITS] với phần tử * đầu tiên chứa bit có nghĩa cao nhất */ void binary(int decimal, int digit[]){ int i; i = BITS - 1; while ( decimal != 0 && i >= 0) { digit[i] = decimal % 2; decimal /= 2; i--; } for (; i >= 0; i--) digit[i] = 0; } /* display in mảng digit[BITS] * thành các khối 8-bit */ void display(int decimal, int digit[]){ int i; printf("%d is binary is ", decimal); 9 Truyền địa chỉ mảng (tên mảng là địa chỉ trỏ đến phần tử đầu tiên của mảng) for (i = 0; i < BITS; i++) { printf("%d", digit[i]); if (i%8 == 7) putchar(' '); } } Đầu ra cua chương trình như sau Enter a positive integer value : 92 92 in binary is 00000000 01011100 6.1.3. Ví dụ 3 - Mảng song song và nhập thông tin một bảng /* Mảng song song * parallel.c */ #include <stdio.h> #define MAX_ITEMS 20 int main ( ) { int i, nItems, keepgoing, s, sku[MAX_ITEMS]; double unitPrice[MAX_ITEMS]; printf("Enter skus and unit prices\n"); nItems = 0; keepgoing = 1; do { printf("SKU (0 to stop) : "); scanf("%d", &s); if (s != 0) { sku[nItems] = s; printf("Unit Price : "); scanf("%lf", &unitPrice[nItems]); nItems++; } else keepgoing = 0; } while ( keepgoing == 1 && nItems < MAX_ITEMS ); printf("SKU Unit Price\n"); for (i = 0; i < nItems; i++) printf("%06d $%9.2lf\n", sku[i], unitPrice[i]); return 0; } Chương trình cho phép nhập thông tin một bảng gồm 2 cột, cột mã hàng, lưu trong mảng sku[] và cột đơn giá lưu trong mảng unitprice[] 10 [...]... liệu từ tệp /* Đọc từ file * readFile.c */ #include #include 20 #define MAX_STUDENTS 5 #define MAX_CHARACTERS 30 #define FILE_NAME "list_student.dat" void main(void) { //Khai báo các mảng int i, n, stdID[MAX_STUDENTS]; char name[MAX_STUDENTS][MAX_CHARACTERS+1]; double GPA[MAX_STUDENTS]; int classID[MAX_STUDENTS]; FILE *fp; // Mở tệp để đọc fp = fopen(FILE_NAME, “r”; // Nếu không mở... (có điếm GPA >= 5) và số phần trăm đỗ theo từng lớp, ví dụ như sau Lớp Tổng số Số đỗ % đỗ - - 01 30 10 33 02 25 15 48 03 30 20 67 8 Module F – File 8.1 Ví dụ 8.1.1 Ví dụ 1 – Ghi dữ liệu lên tệp /* Save to the file * saveFile.c */ #include #include #define MAX_STUDENTS 5 #define MAX_CHARACTERS 30 19 #define FILE_NAME "list_student.dat" void main(void) { //Khai báo và... Tên * sortNames.c */ #include #include #define MN 10 #define MC 30 #define FM "30" void sort(char a[][MC+1], int size); int main(void) { char name[MN][MC+1]; int i, n, keepgoing; /* Nhập tên */ printf("Enter names (^ to stop)\n"); i = 0; do { printf("? "); scanf(" %"FM"[^\n]", name[i]); // Nếu xâu name[i] trùng với xâu “^” thì keepgoing = 0 17 keepgoing = strcmp(name[i], "^") !=... scanf(“%30[^\n]”, name); //Nhận đến ký tự xuống dòng gets(name); return 0; } Chú ý là dùng scanf không nhập được xâu trống 7.1.3 Ví dụ 3 – Hàm xâu /* Đào ngược xâu * reverseString.c */ #include #include int main ( ) { char str[31]; 16 int i, len; printf("Enter a string : "); scanf("%30[^\n]%*c", str); printf("In reverse order : "); len = strlen(str); for (i = len - 1; i >= 0; i )... và unitprice[0] Chương trình kết thúc nhập khi đã đủ MAX_ITEMS hàng hoặc khi người dùng gõ mã 0 6.1.4 Ví dụ 4 – Tìm kiếm trong mảng /* Tìm kiếm tuyến tính * linearSearch.c */ #include #define MAX_ITEMS 3 #define SKU { 1234, 3456, 2345} #define PRICE {12.34, 45.23, 13.12} int find(int, int [], int); int main ( ) { int i, code, sku[MAX_ITEMS] = SKU; double unitPrice[MAX_ITEMS] = PRICE; printf("SKU... scanf("%d", &code); i = find(code, sku, MAX_ITEMS); if (i != -1) printf("The unit price of item %d " "is $%.2lf\n", sku[i], unitPrice[i]); else printf("%06d not found\n", code); return 0; } /* find trả lại chỉ số đầu tiên mà tại đó * search == key[index] trong mảng key[size], * hoặc -1 nếu không tìm thấy */ int find(int search, int key[], int size) { int i = 0, rc = -1; for (i = 0; i < size && rc == -1;... mảng /* Bubble Sort * bubbleSort.c */ #include #define MAX_ITEMS 3 #define SKU {1234, 3456, 2345} void bubbleSort(int a[], int size); int main ( ) { int i, sku[MAX_ITEMS] = SKU; bubbleSort( sku, MAX_ITEMS ); for (i = 0; i < MAX_ITEMS; i++ ) printf("%06d\n", sku[i]); } return 0; /* bubbleSort sắp xếp các phần tử của mảng a[size] * theo trình tự tăng */ void bubbleSort(int a[], int size) { int... i < size && rc == -1; i++) if (search == key[i]) rc = i; return rc; } 6.1.5 Ví dụ 5 – Mặt nạ để Tính tổng con /* Đặt cờ các phần tử * flagging.c 11 */ #include #define MAX_SOLD 200 int main ( ) { int sku[MAX_SOLD], code; int units[MAX_SOLD], accountedFor[MAX_SOLD]; int i, j, nItems, total, keepreading; printf("Enter skus and units sold\n"); nItems = 0; keepreading = 1; do { printf("SKU (0... : "); scanf("%d", &sku[nItems]); if (sku[nItems] != 0) { printf("Units Sold : "); scanf("%d", &units[nItems]); nItems++; } else keepreading = 0; } while ( keepreading == 1 && nItems < MAX_SOLD ); /* Cờ bằng 0 cho tất cả các phần tử chưa được tính tổng */ for ( i = 0; i < nItems; i++ ) accountedFor[i] = 0; printf("SKU Units Sold\n"); for ( i = 0; i < nItems; i++ ) { /* Chỉ xem xét các phần tử chưa được... strcmp(name[i], "^") != 0; i++; } while (keepgoing == 1 && i < MN); if (keepgoing == 1) n = MN; else n = i - 1; /* Xắp xếp tên */ bubble(name, n); /* Hiện các Danh sách */ for (i = 0; i < n; i++) printf("%s\n", name[i]); return 0; } /* bubbleSort xắp xếp các phần tử của mảng a[size] theo thứ tự tăng */ void bubble(char a[][MC+1], int size) { int i, j; char temp[MC+1]; for (i = size - 1; i > 0; i ) { for (j = . như sau Enter a whole number in the range [3,15] : we34 // rc = 0 **No input accepted!** Enter a whole number in the range [3,15] : 34.4 // after != ‘n’. characters!** Enter a whole number in the range [3,15] : 345 // 345 > MAX **Out of range!** Enter a whole number in the range [3,15] : 14 5 Program accepted