5. Module E – Thư viện chuẩ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. Module E - 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. Module E – Thư viện chuẩ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. Module E - 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]