30 câu hỏi
Hãy khai báo một cấu trúc mô tả sinh viên, thông tin về mỗi sinh viên bao gồm: tên, điểm 3 môn học. Khai báo nào sau đây là đúng?
structure STUDENT {char Name[]; int s1,s2,s3;};
struct STUDENT {char Name[]; int s1, s2, s3;};
typedef struct STUDENT {char Name[]; float s1,s2,s3;};
typedef STUDENT { char Name[]; int s1, s2, s3;};
Biến con trỏ có thể chứa:
Địa chỉ vùng nhớ của một biến khác.
Giá trị của một biến khác.
Cả A và B đều đúng.
Cả A và B đều sai.
Kết quả của chương trình sau là gì?
#include
void main() {
struct diem {
float k;
float a;
float l;
};
struct diem m;
m.k = 8;
m.a = 6.5;
m.l = 6;
printf("%0.1f%0.1f%0.1f", m.k, m.a, m.l);
};
“8.06.56.0”.
“86.56”.
“8.0000006.5000006.000000”.
“86.5000006”.
Kiểu dữ liệu nào có thể chứa nhiều thành phần dữ liệu có thể có kiểu dữ liệu khác nhau thành một nhóm duy nhất?
Mảng.
Con trỏ.
Tập tin.
Cấu trúc (struct).
Chọn kết quả hợp lý cho chương trình sau:
void main() {
struct sv {
float d;
char ht[10];
};
struct sv m, *p;
p = &m;
printf("%p", &m);
printf("%p", p);
};
“FFE6FFE6”.
“FFE6FFE7”.
“FFE66EFF”.
Kết quả khác. (“FFE4FFE4”).
Chọn kết quả đúng cho chương trình sau:
#include
void main() {
clrscr();
struct sv {
float d;
char ht[10];
};
struct sv m, *p;
p = &m;
(*p).d = p->d = 10;
strcpy(m.ht, “NguyenVanTuan”);
printf(“%0.1f”, m.d);
printf(“%s”, m.ht);
};
“10.000000NguyenVanTuan”.
“10.0NguyenVanTuan”.
Kết quả khác.
Chương trình bị lỗi.
Chọn kết quả đúng cho chương trình sau:
#include
#include
void main() {
struct S1 {
float d;
float d1;
float d2;
};
struct S1 m = {12, 1};
printf(“%0.1f%0.1f%0.1f”, m.d, m.d1, m.d2);
};
“12.01.00.0”.
“12.0000001.0000000.000000”.
Kết quả khác.
Chương trình bị lỗi.
Chương trình sau cho kết quả là gì?
#include
void main() {
int *px, *py;
int a[] = {1, 2, 3, 4, 5, 6};
px = a;
py = &a[5];
printf(“%d”, ++px - py);
};
-4.
2.
5.
Không có kết quả đúng.
Có bao nhiêu cách khai báo biến cấu trúc?
1.
2
3.
4.
Khi sử dụng từ khóa typedef trước định nghĩa cấu trúc thì:
Khai báo biến cho cấu trúc đó ta không cần sử dụng từ khóa “struct” nữa.
Khai báo 1 biến cho loại cấu trúc đó ta cần sử dụng từ khóa “struct”.
Không thể khai báo thêm biến cấu trúc nào nữa.
Cho khai báo sau:
struct Date {
unsigned int ngay: 5;
unsigned int thang;
unsigned int nam: 11;
} sn1;
Số lượng bit sử dụng trong biến cấu trúc trên là bao nhiêu?
16.
20.
32.
48.
Chọn đáp án đúng khi sử dụng trường kiểu bit:
Độ dài các trường không vượt quá 16 bit.
Áp dụng được cho các trường có kiểu số nguyên và số thực.
Cho phép lấy địa chỉ trường kiểu nhóm bit.
Xây dựng được các mảng kiểu nhóm bit.
Đâu là định nghĩa đúng về cấu trúc tự trỏ?
Là một cấu trúc có một trường là con trỏ chứa địa chỉ của một biến cấu trúc.
Là dạng cấu trúc có một trường là con trỏ chứa địa chỉ của một biến cấu trúc có dạng dữ liệu giống nó.
Là dạng cấu trúc có một trường có kiểu dữ liệu giống nó.
Tất cả các ý trên.
Trong các khai báo sau, khai báo nào không đúng?
struct Date { int ngay, thang, nam; };
struct { int ngay, thang, nam; } D1, D2;
typedef struct { int ngay, thang, nam; } Date;
struct Date { long int ngay:7; long int thang:6; long int nam:5; };
Đâu là phát biểu đúng về danh sách móc nối?
Độ dài danh sách không thể thay đổi.
Các phần tử của nó được lưu trữ rải rác trong bộ nhớ RAM.
Để cài đặt danh sách móc nối phải sử dụng đến cấu trúc tự trỏ.
Chỉ có thể xóa được phần tử đầu tiên của danh sách.
Phát biểu nào không đúng về union?
Tất cả các trường chỉ dùng chung một vùng nhớ, và kích thước union bằng kích thước trường lớn nhất.
Các trường nằm rải rác trong bộ nhớ RAM và kích thước của các trường bằng tổng kích thước các trường.
Có thể khai báo các biến trong union có nhiều kiểu khác nhau.
Tại một thời điểm ta không thể chứa dữ liệu tại tất cả các thành phần của một biến union được.
Cho đoạn chương trình:
struct ng {
unsigned ngay;
unsigned thang;
unsigned nam;
};
struct diachi {
int sonha;
char tenpho[20];
};
union u {
struct ng date;
struct diachi address;
} diachi_ngaysinh;
Kích thước của biến u là bao nhiêu byte?
20.
22.
28.
Đáp án khác.
Cho một danh sách móc nối với các phần tử trong danh sách có kiểu S1 được định nghĩa như sau:
struct S1 {
int info;
struct S1 * next;
} *head;
Biết con trỏ “head” lưu địa chỉ của phần tử đầu tiên trong danh sách. Cho biết mục đích của câu lệnh sau:
c
Sao chépChỉnh sửa
head->next->next->info = 111;
Câu lệnh bị lỗi.
Giá trị “info” trong phần tử thứ 3 đã bị thay đổi.
Giá trị “info” trong phần tử thứ 2 đã bị thay đổi.
Giá trị “info” trong phần tử bất kỳ đã bị thay đổi.
Cho một danh sách móc nối với các phần tử trong danh sách có kiểu S1 được định nghĩa như sau:
struct S1 {
int info;
struct S1 * next;
} *head;
Biết con trỏ “head” lưu địa chỉ của phần tử đầu tiên trong danh sách. Cho biết mục đích của câu lệnh sau:
c
Sao chépChỉnh sửa
(head->next) = (head->next)->next;
Loại bỏ phần tử thứ nhất ra khỏi danh sách.
Loại bỏ phần tử thứ 2 ra khỏi danh sách.
Loại bỏ phần tử thứ 3 ra khỏi danh sách.
Câu lệnh bị lỗi.
Một danh sách trong đó tất cả các thao tác chèn thực hiện tại một đầu, thao tác xóa được thực hiện tại đầu kia của danh sách gọi là:
Stack.
Queue.
Cây nhị phân.
Cả 3 đáp án trên.
Đâu là phát biểu đúng về danh sách móc nối?
Chỉ có thể thêm phần tử mới vào đầu danh sách.
Không thể thêm phần tử mới vào cuối danh sách.
Có thể thêm phần tử mới vào vị trí bất kỳ trong danh sách.
Không câu nào đúng.
Đâu là phát biểu đúng về danh sách?
Chỉ có thể xóa phần tử đầu tiên trong danh sách.
Chỉ có thể xóa phần tử cuối cùng trong danh sách.
Có thể xóa một phần tử tại vị trí bất kỳ trong danh sách.
Tất cả đều sai.
Hàm dùng để cấp phát bộ nhớ động cho kiểu nhớ động do lập trình viên tự định nghĩa như (union, struct):
calloc();
malloc();
realloc();
Cả 3 đáp án trên.
Cho một danh sách móc nối với các phần tử trong danh sách có kiểu S1 được định nghĩa như sau:
struct S1 {int info; struct S1 *next;} *head;
Biết con trỏ “*head” lưu địa chỉ của phần tử đầu tiên trong danh sách. Nhóm câu lệnh nào sau đây thêm một phần tử vào đầu danh sách?
p->next = head; head = p;
p->next = head; head->p; head = p->next;
head->next = p; p = head;
Không có câu nào đúng.
Cho một danh sách móc nối với các phần tử trong danh sách có kiểu S1 được định nghĩa như sau:
struct S1 {int info; struct S1 *next;} *head;
Biết con trỏ “*head” lưu địa chỉ của phần tử đầu tiên trong danh sách. Nhóm câu lệnh nào sau đây xóa phần tử đầu tiên ra khỏi danh sách?
head->next = head;
head = head->next;
head = head->next->next;
2, 3.
Đâu là phát biểu sai khi nói về danh sách liên kết?
Mỗi phần tử trong danh sách liên kết phải có ít nhất một trường dùng để lưu địa chỉ.
Sử dụng danh sách liên kết thường tiết kiệm bộ nhớ hơn dùng mảng.
Sử dụng danh sách liên kết thường tốn bộ nhớ hơn dùng mảng.
Tất cả các đáp án đều sai.
Câu nào không nói đến ưu điểm của việc sử dụng cấu trúc?
Bạn có thể xử lý một cách hỗn hợp các kiểu dữ liệu trong một đơn vị.
Bạn có thể lưu trữ xâu kí tự có độ dài khác nhau vào trong một biến cấu trúc.
Dữ liệu có thể lưu trữ trong một module và dưới dạng phân cấp.
Cần ít nhất một bộ nhớ cho cùng dữ liệu.
Làm thế nào có thể biểu diễn phần tử “hoten” của SV1:
struct SV { char hoten[20]; } SV1, *p;
p = &SV1;
SV1.hoten;
p->hoten;
&hoten;
1 và 2.
Đâu là phát biểu sai?
Có thể truyền tham số là một biến struct cho hàm.
Có thể truyền tham số là một biến con trỏ cho hàm.
Có thể truyền tham số là một biến con trỏ struct cho hàm.
Không thể truyền tham số là phần tử của struct cho hàm.
Cho mảng A gồm các phần tử kiểu struct, phát biểu nào là đúng khi truy cập đến các trường của các phần tử?
A[chỉ số].tên_trường;
A.tên_trường;
&A.tên_trường;
&A[chỉ số].tên_trường;
