










Preview text:
//------------------------------------------------------------------------
- Với khai báo int a[10];
Chọn phát biểu đúng
{
~ &a là địa chỉ của phần tử a[0]
~ a là địa chỉ của phần tử a[1]
~ a+i là địa chỉ của phần tử a[i]
~ a+1 là địa chỉ của phần tử a[1]
}
//------------------------------------------------------------------------
- Với khai báo int a[10];
Chọn phát biểu sai
{
~ a là địa chỉ của phần tử a[0]
~ &a[1] là địa chỉ của phần tử a[1]
~ *(a+i) là địa chỉ của phần tử a[i]
~ *(a+i) là giá trị của phần tử a[i]
}
//------------------------------------------------------------------------
- Cho biết kết quả đoạn lệnh sau:
int a[7]={ 2, 1, 5, 6, 3, 8, 9}; int n = 5, d = 0;
for (i=0; i<n; i++) if (a[i]%2) d++; printf(“%d”, d);
{
~ 3
~ 4
~ 24
~ 22
}
//------------------------------------------------------------------------
- Cho biết ý nghĩa của hàm sau:
int tinh( int a[], int n)
{ int i, m=0;
for (i=0; i<n; i++) if (a[i]<=5 && a[i]>0) m = m+a[i];
return m; }
{
~ Tính tổng các phần tử có giá trị ϵ (0, 5)
~ Tính tổng các phần tử có giá trị ϵ (0, 5]
~ Đếm số phần tử có giá trị ϵ (0, 5]
~ Kết quả khác
}
//------------------------------------------------------------------------
- Giả sử có khai báo hàm sau để tìm kiếm phần tử x trong dãy a gồm n phần tử:
int tk(int x, int *a, int n)
{ int i; for(i=0; i<n; i++) if (x==a[i]) return i; return n; }
Ta hiểu như sau:
{
~ Hàm trả về n nếu tìm thấy
~ Hàm trả về n nếu không tìm thấy
~ Hàm trả về giá trị nguyên thuộc [0, n-1] nếu tìm thấy
~ Hàm trả về giá trị nguyên thuộc [0, n-1] nếu không tìm thấy
}
//------------------------------------------------------------------------
- Phát biểu nào liên quan đến mảng là đúng
{
~ Mảng là dãy các phần tử có kiểu dữ liệu bất kì
~ Mảng là dãy các phần tử có cùng kiểu dữ liệu
~ Tên mảng là địa chỉ của mảng
~ Số phần tử của mảng là không xác định
}
//------------------------------------------------------------------------
- Mỗi phần tử của mảng được xác định thông qua
{
~ Tên mảng
~ Chỉ số mảng
~ Kích thước mảng
~ Kiểu mảng
}
//------------------------------------------------------------------------
- Với khai báo:
int a[10];
Phần tử a[4] là phần tử thứ bao nhiêu trong mảng a ?
{
~ Thứ 4
~ Thứ 5
~ Thứ 6
~ Thứ 7
}
//------------------------------------------------------------------------
- Cho biết dòng khai báo nào là không hợp lệ ?
{
~ float a[5] = {1, 2, 3, 4, 5};
~ int max; float a[max];
~ const int max=5; float a[max];
~ float a[] = {1, 2, 3, 4, 5};
}
//------------------------------------------------------------------------
- Giá trị phần tử thứ i của mảng a là:
{
~ &a[i]
~ *a+i
~ *(a+i)
~ a[i]
}
//------------------------------------------------------------------------
- Với đoạn lệnh:
float x[5] = {1, 3, 5, 7, 9}; float *px = x; px = px + 2;
Khi đó, px = ?
{
~ 5
~ &x[2]
~ x[2]
~ Không xác định
}
//------------------------------------------------------------------------
- Với đoạn lệnh:
float x[5] = {1, 3, 5, 7, 9}; float *px = x; px += 3;
Khi đó, *px = ?
{
~ 9
~ 3
~ 5
~ 7
}
//------------------------------------------------------------------------
- Dòng nào dưới đây không được xem là dãy trong C
{
~ 1 2 3 5 8
~ 2 4 5.5 7 10
~ 5 10 “Lan” “Mai” 9
~ ‘a’ ‘b’ ‘c’ “Mai”
}
//------------------------------------------------------------------------
- Cho biết ý nghĩa của hàm sau:
int minmax(int a[], int n)
{ m=a[0]; k=0;
for (i=0; i<n; i++) if (m>a[i]) {m = a[i]; k = i;}
return k; }
{
~ Tìm vị trí phần tử lớn nhất đầu tiên
~ Giá trị phần tử lớn nhất
~ Tìm vị trí phần tử nhỏ nhất đầu tiên
~ Tìm vị trí phần tử nhỏ nhất cuối cùng
}
//------------------------------------------------------------------------
- Cho biết ý nghĩa của hàm sau:
int minmax(int a[], int n)
{ int m=a[0], k=0;
for (i=1; i<n; i++) if (m<=a[i]) {m=a[i]; k=i;}
return m; }
{
~ Tìm vị trí phần tử lớn nhất
~ Tìm vị trí phần tử lớn nhất cuối cùng
~ Giá trị phần tử nhỏ nhất
~ Giá trị phần tử lớn nhất
}
//------------------------------------------------------------------------
- Chọn phương án đúng thế vào tương ứng cho #1 và #2
void Nhap( int *a, int n)
{ int i; for (i=0; i<n; i++) scanf(“#1”, #2); }
{
~ %f và &a[i]
~ %d và &a[i]
~ %f và a[i]
~ %d và a+i
}
//------------------------------------------------------------------------
- Chương trình sau sắp xếp dãy theo thứ tự giảm dần. Chọn phương án đúng thế vào tương ứng cho #1, #2?
# include <stdio.h>
void sx( int a[], int n)
{ int i, j, t;
for (i=0; i<n-1; i++)
for (j=i+1; j<n; j++)
if ( #1) { t=a[i]; a[i]=a[j]; a[j]=t; } }
void main()
{ int n=5; int a[n]={3, 2, 9, 1, 4}; #2; }
{
~ a[i]>a[j] và sx(&a, n)
~ a[i]<a[j] và sx(&a[0], n)
~ a[i]>a[j] và sx(a, n)
~ a[i]<a[j] và sx(a, n)
}
//------------------------------------------------------------------------
void p( int a[], int n)
{ int i, j, t;
for (i=1, j=n; i<j ; i++, j--) { t=a[i]; a[i]=a[j]; a[j]=t; }
}
{
~ Đảo dãy
~ Sắp dãy tăng dần
~ Sắp dãy giảm dần
~ Chức năng khác
}
//------------------------------------------------------------------------
- Với khai báo int a[5];
Phát biểu nào sau đây là sai
{
~ &a là địa chỉ của phần tử a[0]
~ *(a+i) là địa chỉ của phần tử a[i]
~ a+i là giá trị của phần tử a[i]
~ Tất cả
}
//------------------------------------------------------------------------
- Cho biết ý nghĩa của đoạn lệnh sau:
for (i=n-1; i>=0; i--) printf(“%5d”, a[i]);
{
~ Đảo dãy a
~ Xuất dãy a theo thứ tự ngược
~ Xuất dãy a
~ Chức năng khác
}
//------------------------------------------------------------------------
- Cho hàm hoán đổi giá trị 2 biến a,b là: Hoandoi(int *a, int *b). Hãy điền vào chỗ # để có hàm với chức năng đảo dãy: x[0], …, x[n-1]
void daoday(int x[], int n)
{ int i;
for(i=0; i<n/2; i++) #;
}
{
~ Hoandoi(x+i, x+n)
~ Hoandoi(&x[i], &x[n-i])
~ Hoandoi(x+i, x+n-i)
~ Hoandoi(&x[i], &x[n-1-i])
}
//------------------------------------------------------------------------
- Hàm sau trả về
int vt(int *a, int n)
{ int i;
for (i=n-1; i>=0; i--) if (a[i]%2) break;
return i;
}
{
~ Vị trí phần tử lẻ đầu tiên
~ Vị trí phần tử lẻ cuối cùng
~ Vị trí phần tử chẵn đầu tiên
~ Vị trí phần tử chẵn cuối cùng
}
//------------------------------------------------------------------------
- Hàm sau trả về
int p(int *a, int n)
{ int i; int s=0;
for (i=0; i<n; i++) if (a[i]%2) s++;
return s;
}
{
~ Tổng giá trị các phần tử lẻ
~ Tổng giá trị các phần tử chẵn
~ Số phần tử lẻ
~ Số phần tử chẳn
}
//------------------------------------------------------------------------
- Chọn phương án đúng để điền vào tương ứng cho #1, #2
void xuat( int *a, int n)
{ int i; for (i=0; i<n; i++) printf(“#1 ”, #2); }
{
~ %f và &a[i]
~ %d và *(a+i)
~ %d và a[i]
~ %d và *a+i
}
//------------------------------------------------------------------------
- Với khai báo float y, x[5] = {1, 2, 3, 4, 5};
Lệnh nào sau đây là sai cú pháp
{
~ y = x[2];
~ y = x;
~ y = *(x+2);
~ y = x+2;
}
//------------------------------------------------------------------------
- Hàm tạo mảng a mà a[i] là chữ số thập phân thứ i của b (Ví dụ: p=123 thì a = {3, 2, 1}). Chọn phương án đúng thế vào tương ứng cho #1 và #2 ?
void taoday(int *a, int *n, int b)
{ int i=0;
while (b != 0 )
{
a[i] = #1; b = #2; i++;
}
*n=i;
}
{
~ b/10 và b%10
~ b%10 và b/10
~ b%10 và a/10
~ a%10 và a/10
}
Dưới đây là 30 câu hỏi trắc nghiệm mới về mảng trong C, được thiết kế dựa hoàn toàn trên phong cách và mức độ của file bạn gửi (câu hỏi ngắn gọn, 4 lựa chọn đánh dấu ~, có thể có nhiều đáp án đúng/sai cần chọn chính xác).
Tôi không ghi đáp án đúng ở bất kỳ đâu, cũng không giải thích, không đánh dấu gì để tránh lộ đáp án như bạn yêu cầu. Bạn có thể dùng bộ này để tự luyện hoặc làm đề thi thử.
1. Với khai báo int a[8];
Phát biểu nào đúng? ~ a là địa chỉ của phần tử a[0] ~ &a là địa chỉ của phần tử a[0] ~ a+3 là địa chỉ của phần tử a[3] ~ *(a+3) là địa chỉ của phần tử a[3]
2. Với khai báo int a[10];
Phát biểu nào sai? ~ a[i] tương đương *(a+i) ~ &a[i] tương đương a+i ~ a tương đương &a ~ a[0] tương đương *a
3. Cho đoạn lệnh:
int a[6] = {4, 7, 2, 9, 1, 5}; int s = 0; for(int i = 0; i < 4; i++) if(a[i] % 2 == 0) s += a[i]; printf("%d", s); Kết quả in ra là? ~ 4 ~ 6 ~ 10 ~ 12
4. Ý nghĩa của hàm sau:
int tong(int a[], int n) { int i, s = 0; for(i = 0; i < n; i++) if(a[i] > 0) s += a[i]; return s; } ~ Tính tổng các phần tử dương ~ Tính tổng các phần tử âm ~ Đếm số phần tử dương ~ Tính tổng toàn bộ mảng
5. Hàm tìm kiếm tuyến tính:
int tim(int a[], int n, int x) { int i; for(i = 0; i < n; i++) if(a[i] == x) return i; return -1; } Hàm này trả về? ~ Vị trí tìm thấy (nếu có), -1 nếu không ~ Giá trị x nếu tìm thấy ~ Số lần xuất hiện của x ~ n nếu tìm thấy
6. Phát biểu nào về mảng trong C là đúng?
~ Mảng có thể thay đổi kích thước sau khi khai báo ~ Các phần tử mảng có thể có kiểu dữ liệu khác nhau ~ Tên mảng là con trỏ hằng trỏ đến phần tử đầu tiên ~ Mảng luôn được lưu trữ trên heap
7. Phần tử a[0] là phần tử thứ mấy trong mảng a?
~ Thứ 0 ~ Thứ 1 ~ Thứ 2 ~ Không xác định
8. Với khai báo int a[5];
Phần tử a[3] là phần tử thứ mấy? ~ Thứ 3 ~ Thứ 4 ~ Thứ 5 ~ Thứ 2
9. Khai báo nào sau đây không hợp lệ (trong C chuẩn trước C99)?
~ int n = 10; int a[n]; ~ int a[] = {1, 2, 3, 4}; ~ const int n = 10; int a[n]; ~ int a[5] = {0};
10. Giá trị của phần tử a[i] được biểu diễn bằng?
~ a+i ~ &a[i] ~ (a+i) ~ a+i
11. Cho:
int x[4] = {10, 20, 30, 40}; int *p = x; p += 2; Khi đó *p bằng? ~ 10 ~ 20 ~ 30 ~ 40
12. Cho:
float y[5] = {1.5, 2.5, 3.5, 4.5, 5.5}; float *py = y; py++; Khi đó py trỏ đến? ~ y[0] ~ y[1] ~ y[2] ~ Không xác định
13. Dãy nào sau đây không thể là mảng hợp lệ trong C?
~ 1 2 3 4 5 ~ 'a' 'b' 'c' 'd' ~ 1.5 2.5 3.5 "abc" ~ "Mot" "Hai" "Ba"
14. Hàm sau tìm gì?
int vitri_min(int a[], int n) { int i, min = a[0], k = 0; for(i = 1; i < n; i++) if(a[i] < min) { min = a[i]; k = i; } return k; } ~ Giá trị nhỏ nhất ~ Vị trí phần tử nhỏ nhất đầu tiên ~ Vị trí phần tử lớn nhất ~ Giá trị lớn nhất
15. Hàm sau trả về gì?
int max_value(int a[], int n) { int i, m = a[0]; for(i = 1; i < n; i++) if(a[i] >= m) m = a[i]; return m; } ~ Vị trí phần tử lớn nhất ~ Giá trị phần tử lớn nhất (cuối cùng nếu trùng) ~ Vị trí phần tử nhỏ nhất ~ Giá trị phần tử nhỏ nhất
16. Để nhập mảng int a có n phần tử:
void nhap(int a[], int n) { int i; for(i = 0; i < n; i++) scanf("___", ___); } Điền đúng vào hai chỗ trống: ~ %d và a[i] ~ %d và &a[i] ~ %f và &a[i] ~ %d và *(a+i)
17. Để sắp xếp mảng tăng dần bằng bubble sort, điều kiện hoán đổi là?
~ if(a[i] > a[j]) ~ if(a[i] < a[j]) ~ if(a[i] == a[j]) ~ if(a[i] >= a[j])
18. Hàm sau có chức năng gì?
void dao_nguoc(int a[], int n) { int i, t; for(i = 0; i < n/2; i++) { t = a[i]; a[i] = a[n-1-i]; a[n-1-i] = t; } } ~ Sắp xếp tăng dần ~ Đảo ngược mảng ~ Tính tổng mảng ~ Đếm phần tử chẵn
19. Với khai báo int b[6];
Phát biểu nào sau đây là sai? ~ b là địa chỉ của b[0] ~ *(b+i) là giá trị của b[i] ~ b+i là giá trị của b[i] ~ &b[0] là địa chỉ của b[0]
20. Đoạn lệnh sau làm gì?
for(int i = 0; i < n; i++) printf("%d ", a[n-1-i]); ~ Xuất mảng theo thứ tự bình thường ~ Xuất mảng theo thứ tự ngược ~ Đảo ngược mảng rồi xuất ~ Tính tổng mảng
21. Hàm hoán đổi hai phần tử: void swap(int *x, int *y);
Để đảo mảng, điền vào chỗ trống: for(i = 0; i < n/2; i++) ________; ~ swap(a[i], a[n-1-i]) ~ swap(&a[i], &a[n-1-i]) ~ swap(a+i, a+n-i-1) ~ swap(&a[i], a+n-1-i)
22. Hàm sau trả về gì?
int last_odd(int a[], int n) { int i; for(i = n-1; i >= 0; i--) if(a[i] % 2 != 0) return i; return -1; } ~ Vị trí phần tử lẻ đầu tiên ~ Vị trí phần tử lẻ cuối cùng ~ Số phần tử lẻ ~ Giá trị phần tử lẻ cuối cùng
23. Hàm sau trả về gì?
int dem_chan(int a[], int n) { int i, cnt = 0; for(i = 0; i < n; i++) if(a[i] % 2 == 0) cnt++; return cnt; } ~ Tổng các phần tử chẵn ~ Số phần tử chẵn ~ Tổng các phần tử lẻ ~ Số phần tử lẻ
24. Để xuất mảng int a có n phần tử:
void xuat(int a[], int n) { int i; for(i = 0; i < n; i++) printf("___ ", ___); } Điền đúng: ~ %d và a[i] ~ %d và &a[i] ~ %f và *(a+i) ~ %d và a+i
25. Với khai báo double z, d[4] = {1.1, 2.2, 3.3, 4.4};
Lệnh nào sai cú pháp? ~ z = d[1]; ~ z = *(d+2); ~ z = d; ~ z = d+1;
26. Hàm tạo mảng chữ số của số nguyên dương p (ví dụ p=456 → a={6,5,4}):
void tach_so(int a[], int *m, int p) { int i = 0; while(p > 0) { a[i++] = ___; p = ___; } *m = i; } Điền đúng: ~ p % 10 và p / 10 ~ p / 10 và p % 10 ~ p % 10 và p * 10 ~ p / 10 và p - 10
27. Với int a[5] = {0};
Giá trị của a[3] là? ~ 0 ~ Không xác định ~ 5 ~ Lỗi
28. Cho int *p = NULL; int a[3];
Lệnh nào đúng để gán p trỏ đến phần tử đầu tiên của a? ~ p = &a; ~ p = a; ~ p = *a; ~ p = a[0];
29. Để tính tổng các phần tử ở vị trí chẵn (i=0,2,4,...):
int tong_vi_tri_chan(int a[], int n) { int s = 0; for(int i = 0; i < n; i += ___) s += ___; return s; } Điền đúng: ~ 1 và a[i] ~ 2 và a[i] ~ 2 và i ~ 1 và i
30. Phát biểu nào đúng về mảng và con trỏ?
~ Kích thước của int* và int(*)[10] luôn giống nhau ~ a[i] có thể viết dưới dạng i[a] ~ Không thể dùng con trỏ để truy cập mảng ~ Mảng 2 chiều không liên quan đến con trỏ