You are on page 1of 9

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN – ĐHQG-HCM

BAN HỌC TẬP CÔNG NGHỆ PHẦN MỀM

ĐÁP ÁN THAM KHẢO MÔN NHẬP MÔN LẬP TRÌNH CUỐI KÌ 1 – NH 2023-2024

MÃ ĐỀ: Tôi ngay thẳng

Câu 1:
#include <iostream>
using namespace std;
int main()
{
cout << 13.0 / 5 - 24 % 2 << ",";
cout << (int)-7.1 * (21 / 6) + (float)7 / 4;
return 0;
}

Kết quả của chương trình là: 2.6,-19.25

Giải thích: (int) -7.1 * (21 / 6) = int (-7.1) * 3 = -7 * 3 = -21

Theo thứ tự độ ưu tiên toán tử, () được ưu tiên hơn (int) nên tiến hành tính 21/6 = 3
trước (chia số nguyên), sau đó tiến hành tính (int) -7.1 thành -7. Cuối cùng là tính -7 * 3
= 21

Câu 2:
#include <iostream>
using namespace std;
int main()
{
int x = 12, y = 24;
cout << (y != 24 || (x < 5 && y >= 24)) << ",";
cout << (x > y ? y - x : y / 3) << ",";
cout << (x > y > 10) << ",";
cout << (!0 && !(x == y));
return 0;
}

Kết quả của chương trình là: 0,8,0,1

Câu 3:
#include <iostream>
using namespace std;
int main()
{
int x, y;
cin >> x;
y = x;
switch (x)
{
case 1:
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN – ĐHQG-HCM
BAN HỌC TẬP CÔNG NGHỆ PHẦN MỀM
case 2: y *= y + x;
case 4: y--;
case 5: y = 2 * x - 10; break;
case 6: y = y / 5; break;
default: y += 2;
};
cout << y;

return 0;
}

Trường hợp x có giá trị là 1, kết quả của chương trình là: -8

Trường hợp x có giá trị là 3, kết quả của chương trình là: 5

Câu 4:
#include <iostream>
using namespace std;
int main()
{
int sum, num;
cin >> sum;
do {
cin >> num;
if (n % 5 != 0) continue;
sum += num;
} while (sum < 100);
cout << "sum=" << sum;
return 0;
}

Người dùng cố gắng nhập dãy số sau đây (có thể không nhập hết): … (không nhớ dữ liệu đề)

Kết quả của chương trình là: sum=111

Giải thích: mấu chốt của bài này ở dòng lệnh “cin >> sum;”, khiến cho giá trị ban đầu
của sum chính là số đầu tiên trong input (11) chứ không phải là 0.

Câu 5:
#include <iostream>
using namespace std;
int main()
{
int n = 518, s = 0;
for (int i = n; i > 0; i = i / 10) {
s += i;
}
cout << s;
return 0;
}
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN – ĐHQG-HCM
BAN HỌC TẬP CÔNG NGHỆ PHẦN MỀM

Kết quả của chương trình là: 574

Câu 6:
#include <iostream>
using namespace std;

void fun(int& a, int b, int& c) {


a -= b * c;
b = 5 * c;
c = 10;
}
int main()
{
int x = 1, y = 5, z = 4;
fun(z, x, y);
cout << x << y << z;
return 0;
}

Kết quả của chương trình là: 110-1

Giải thích:

&a b &c
z x y
4 1 5
-1 1 5
-1 25 5
-1 25 10
Giá trị mới của z = -1 Không đổi giá trị của x Giá trị mới của y = 10

Câu 7:
#include <iostream>
using namespace std;

int test(int a) {
a = 2 * a - 7;
return -a;
}
int main()
{
int a = 7;
int& b = a;
cout << test(a) << ",";
b = 100;
a = b - a + 1;
b++;
cout << a << "," << b;
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN – ĐHQG-HCM
BAN HỌC TẬP CÔNG NGHỆ PHẦN MỀM
return 0;
}

Kết quả của chương trình là: -7,2,2

Câu 8:
#include <iostream>
using namespace std;

int fun(int x) {
if (x < 2) return 1;
return (x + 1) * fun(x - 1);
}
int main()
{
cout << fun(3) + fun(4); //12 + 60
return 0;
}

Kết quả của chương trình là: 72

Câu 9:
#include <iostream>
using namespace std;

bool KiemTra(int* a, int n) {


for (int i = 1; i < n; i++)
if (a[i] > a[i - 1]) return false;
return true;
}
int fun(int x) {
if (x < 2) return 1;
return (x + 1) * fun(x - 1);
}
int main()
{
int n, a[100];
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
cout << KiemTra(a, n);
return 0;
}

Kết quả của chương trình là:

Input Output
1 1
7
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN – ĐHQG-HCM
BAN HỌC TẬP CÔNG NGHỆ PHẦN MỀM

2 1
55
5 0
33455
10 1
6654443211

Câu 10: Hãy điền vào các chỗ trống

Dưới đây là một trong các đáp án tham khảo:


#include <iostream>
using namespace std;

int count_LowwerCase(char* s) {
int i = 0, dem = 0;
while (s[i] != '\0') {
if (s[i] >= 'a' && s[i] <= 'z')
dem++;
i++;
}
return dem;
}

int main()
{
char str[35];
cin.getline(str, 30);
cout << count_LowwerCase(str);
return 0;
}

Câu 11:
#include <iostream>
using namespace std;

int main()
{
int a[5][5] = { {1,0,3,2,1},
{1,8,2,0,5},
{7,2,3,1,4},
{4,3,0,1,3},
{1,2,3,4,5} };

int s = 0;
for (int i = 2; i < 5; i++)
for (int j = 1; j < 4; j++)
if (i != j)
s += a[i][j];
cout << s;
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN – ĐHQG-HCM
BAN HỌC TẬP CÔNG NGHỆ PHẦN MỀM
return 0;
}

Kết quả của chương trình là: 15

Câu 12:
#include <iostream>
using namespace std;

int fun(int a[][6], int n) {


int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++)
if (a[i][j] > 0)
break;
if (j == n) return i;

for (j = 0; j < n; j++)


if (a[i][j] < 0)
break;
if (j == n) return i;
}
return -1;
}

int main()
{
int a[6][6] = { {0,-1,2,-3,4,-5},
{-1,0,-1,0,-1,0},
{0,1,0,1,0,1},
{1,-1,1,-1,1,-1},
{1,2,3,4,5,6},
{-6,-5,-4,-3,-2,-1} };
int n = 6;
cout << fun(a,n);
return 0;
}

Kết quả của chương trình là: 1

Câu 13:

Hãy tìm lỗi trong chương dưới đây và giải thích lỗi đó (kể cả lỗi cú pháp hay lỗi
logic)

Dòng Code Giải thích


1 #include <iostream> Dòng 7: d là hằng con trỏ,
2 using namespace std;
3 int main() không thể thay đổi giá trị của d
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN – ĐHQG-HCM
BAN HỌC TẬP CÔNG NGHỆ PHẦN MỀM
4 { Dòng 11: địa chỉ của mỗi biến là
5 int d[] = { 1,2,3,4,5 };
6 *(d + 3) = 2; không đổi
7 d++; Dòng 12: con trỏ pc có kiểu dữ
8 cout << d;
9 int a = 5, b = 6, c, * pa = NULL; liệu double* không thể trỏ vào
10 double* pb, * pc; biến c (int)
11 &pb = 0x6efe1f;
12 pc = &c; Dòng 13: không thể gán giá trị
13 *pa = &a; tại nơi con trỏ pa trỏ tới (*pa)
14 return 0;
15 }
bằng địa chỉ của một biến khác

Câu 14:

Hãy giải thích ý nghĩa từ dòng thứ 5 đến dòng thứ 8 của đoạn code, và hãy cho
biết kết quả của chương trình

Dòng Code Giải thích


1 #include <iostream> Dòng 5: khai báo và gán con trỏ p
2 using namespace std;
3 int main(){ trỏ đến vị trí a[2]
4 int a[5] = { 5,4,3,2,1 }; Dòng 6: gán giá trị của a[2] thành
5 int* p = &a[2];
6 *p = 7; 7
7 p[-1] = 0; Dòng 7: gán giá trị của a[1] thành
8 p++;
9 *(p + 1) = -5; 0
10 p = new int(10); Dòng 8: đưa con trỏ p trỏ đến vị trí
11 for (int i = 0; i < 5; i++)
12 cout << a[i] << " ";
a[3]
13 return 0;
14 }

Kết quả của chương trình: 5 0 7 2 -5

Câu 15:

Dưới đây là đoạn chương trình có chứa hàm nhập đa giác n đỉnh, mỗi đỉnh nhập 2
thành phần tọa độ trong mặt phẳng (Oxy). Ví dụ với đa giác 4 đỉnh ABCD, người dùng
nhập n = 4 và 4 cặp giá trị (x, y) ứng với tọa độ mỗi đỉnh A, B, C, D. Bạn hãy hoàn thiện
hàm NhapMotDiem và hàm NhapMotDaGiac (yêu cầu phải có lời gọi hàm NhapMotDiem
trong hàm NhapMotDaGiac). Sinh viên không cần kiểm tra tính hợp lệ của đa giác.

Dưới đây là một trong các đáp án tham khảo:


#include <iostream>
using namespace std;
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN – ĐHQG-HCM
BAN HỌC TẬP CÔNG NGHỆ PHẦN MỀM
struct DIEM {
int x, y;
};

struct DAGIAC {
int n;
DIEM* p;
};

void NhapMotDiem(DIEM* input_data) {


cin >> input_data->x >> input_data->y;
}

DAGIAC NhapMotDaGiac( ) { //hàm không có tham số


DAGIAC DG;
cin >> DG.n;
DG.p = new DIEM[DG.n];
for (int i = 0; i < DG.n; i++) {
NhapMotDiem(DG.p + i);
}
return DG;
}

int main()
{
DAGIAC B;
B = NhapMotDaGiac();
return 0;
}

Câu 16:

Giả sử bạn có một chương trình nhập một số nguyên n (1 ≤ 𝑛 ≤ 1 tỉ), sau đó xuất
ra số hình chữ nhật thõa mãn chiều dài, chiều rộng, đường chéo đều là số nguyên
dương và diện tích phải nhỏ hơn n. Lưu ý: hình chữ nhật có thể xoay đi xoay lại được, vì
thế nên ta tính hình chữ nhật (4x3) và hình chữ nhật (3x4) là cùng một hình chữ nhật.

a/ Chọn một cặp input và output, sau đó giải thích cụ thể về input vừa chọn:

Dưới đây là một số đáp án tham khảo:

Input: 13

Output: 1

Giải thích cụ thể input và output (kích thước chiều dài, chiều rộng, đường chéo và
diện tích của các hình chữ nhật thõa mãn input):

Chiều dài: 4
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN – ĐHQG-HCM
BAN HỌC TẬP CÔNG NGHỆ PHẦN MỀM

Chiều rộng: 3

Độ dài đường chéo: 5

Diện tích: 12

Input: 2

Output: 0

Giải thích cụ thể input và output (kích thước chiều dài, chiều rộng, đường chéo và
diện tích của các hình chữ nhật thõa mãn input):

Không tồn tại hình chữ nhật thõa mãn input

b/ Hãy chọn một input sao cho output bằng 3 và giải thích như câu a/

Input: 61

Output: 3

Giải thích:

Chiều dài Chiều rộng Độ dài đường Diện tích


chéo
4 3 5 12
12 5 13 60
8 6 10 48
Lưu ý: đề chỉ kêu chọn 1 input, không phải liệt kê các input
Nếu các bạn chọn input nằm trong [61;108] thì output chắc chắn bằng 3
Nếu các bạn dựa vào 3 * (3, 4, 5) để chọn input = 9*12 + 1 = 109, output = 4 do có
các hình chữ nhật (3x4), (6x8), (5x12), (9x12)
Nếu các bạn dựa vào 22 * (3, 4, 5) để chọn input = 12 * 16 + 1 = 193, output = 7 do
có các hình chữ nhật (3x4), (6x8), (5x12), (9x12), (8x15), (7x24), (12x16)

Đáp án tham khảo được soạn bởi Team học thuật:


-Võ Chí Cường – KTPM2023.1
-Tiền Minh Dương – KTPM2023.1
-Phạm Trần Khánh Duy – KTPM2023.1
-Huỳnh Hữu Nghĩa – KTPM2023.2

You might also like