Trường Đại học Công nghệ thông tin, Đại học Quốc gia
Thành phố Hồ Chí Minh.Thầy Cao Thanh Tình
Nhập môn lập trình (Trường Đại học Công nghệ thông tin, Đại học Quốc gia Thành phố
Hồ Chí Minh)
Scan to open on Studeersnel
Studocu is not sponsored or endorsed by any college or university
Trường Đại học Công nghệ thông tin, Đại học Quốc gia
Thành phố Hồ Chí Minh.Thầy Cao Thanh Tình
Nhập môn lập trình (Trường Đại học Công nghệ thông tin, Đại học Quốc gia Thành phố
Hồ Chí Minh)
Scan to open on Studeersnel
Studocu is not sponsored or endorsed by any college or university
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com)
lOMoARcPSD|58746900
1
TRƯỜNG ĐẠI HC CÔNG NGH THÔNG TIN
KHOA KHOA HC MÁY TÍNH
Đề thi cui k: Nhp môn lp trình
Năm học 2020 - 2021
Thi gian: 90 phút
ĐỀ 02
Câu 1: (0.5 đim) Cho biết kết qu của chương trình sau:
#include <iostream>
using namespace std;
int main()
{ int x=5, y =10;
if(x>y) x=x+y;
else y=y-x;
cout<<x<<","<<y;
return 0;
}
Trưng hp
Đim
5,5
0.5
5 5
0.5
x=5
y=5
0.5
Câu 2: (0.5 đim) Cho biết kết qu của chương trình sau:
#include <iostream>
using namespace std;
int main()
{
int x=1;
switch(x)
{
case 0:
case 1:
case 2:x=x+2;
case 3:x=x+3;
break;
case 4:x=x+4;
break;
}
cout<<x;
return 0;
}
5,5
6
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com)
lOMoARcPSD|58746900
2
Câu 3: (0.5 đim) Cho biết kết qu của chương trình sau:
#include <iostream>
using namespace std;
int main()
{
int x1=1,s1=0;
while(x1!=5)
{
x1++;
s1=s1+x1;
}
int x2=1,s2=0;
do
{
s2=s2+x2;
x2++;
}while(x2!=5);
cout<<s1<<","<<s2;
return 0;
}
Trưng hp
Đim
Ghi chú
14,10
0.5
đáp án đúng
14 10
0.5
thiếu dấu , nhưng không trừ
điểm
14, s khác
0.25
mi s đúng được 0.25
s khác, 10
0.25
mi s đúng được 0.25
10,14
0
khác th t là sai
Câu 4: (0.5 đim) Cho biết kết qu của chương trình sau:
#include <iostream>
using namespace std;
int main()
{
for(int i=10;i!=0;i=i-2)
{
if(i<5)
cout<<i<<"\t";
}
return 0;
}
14,10
4 2
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com)
lOMoARcPSD|58746900
3
Trưng hp
Đim
Ghi chú
4 2
0.5
đáp án đúng
4
2
0.5
xuống dòng nhưng không
tr điểm
4\t2
0.5
SV không biết ký t điều
khin \t nhưng không trừ
điểm
4
0.25
ch ghi 1 s
2
0.25
ch ghi 1 s
Câu 5: (0.5 đim) Cho biết kết qu của chương trình sau:
#include <iostream>
using namespace std;
int func(int x)
{
if (x==5) return 1;
return func(x+1)+x;
}
int main()
{
cout<<func(0);
return 0;
}
Trưng hp
Đim
Ghi chú
11
0.5
đáp án đúng
1 1
0
2 s 1 cách xa nhau, có v SV copy bài bn
1 dãy s có/không
có s 11 cui dãy
0
sai
Câu 6: (0.5 đim) Cho biết kết qu của chương trình sau:
#include <iostream>
using namespace std;
int main()
{
int A[5]={1,3,5,7,9};
int S=0;
for(int i=1;i<3;i++)
S=S+A[i];
cout<<S;
return 0;
11
8
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com)
lOMoARcPSD|58746900
4
}
Trưng hp
Đim
Ghi chú
8
0.5
đáp án đúng
S=8
0.5
vn chấm đúng
Câu 7: (0.5 đim) Cho biết kết qu của chương trình sau:
#include <iostream>
using namespace std;
int main()
{
int A[3][3]={{1,3,5}
,{3,5,1}
,{5,1,3}};
int S=0;
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
if(i>=j)
S=S+A[i][j];
cout<<S;
return 0;
}
Trưng hp
Đim
Ghi chú
18
0.5
đáp án đúng
S=18
0.5
vn chấm đúng
Câu 8: (0.5 đim) Cho biết kết qu của chương trình sau:
#include <iostream>
using namespace std;
int main()
{
int x=10;
int *y=&x;
x++;
cout<<*(&(*y));
return 0;
}
Câu 9: (0.5 đim) Cho biết kết quả chương trình sau:
#include <iostream>
#include <string.h>
18
11
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com)
lOMoARcPSD|58746900
5
using namespace std;
struct Point
{ int x, y;
};
int main()
{
struct Point p1 = {1, 2};
struct Point *p2 = &p1;
p2->x = 10;
(*p2).y = 5;
cout<<p1.x <<" " <<p1.y<<" "<<p2->x <<" " <<p2->y;
return 0;
}
Trưng hp
Đim
10 5 10 5
0.5
Mi s đúng được 0.125 (đúng theo vị trí như trên đáp án)
Ví d: 1 2 10 5 --> đưc 0.25 do đúng 2 s cui
1 5 10 5 --> được 0.375
Câu 10: (0.75 điểm) Cho bài toán được phát biu bng lời như sau: "Tìm vị trí xut
hin ca s nguyên t ln nht trong mng s nguyên mt chiu".
a. Hãy phát biu input và output của bài toán (để có th lp trình gii trên máy
tính).
Input: Mt mng s nguyên dương có n phần t
Output: Ch s ca phn t có giá tr là s nguyên t ln nht trong mng.
Trưng hp mng có nhiu phn tng giá tr và cùng là s nguyên t ln
nht thì output ch s ca phn t nào cũng được.
Trưng hp mng không có s nguyên t nào thì output là -1
---------------------------------------------------------------------------------
- Ghi đưc mng có tối đa n phần tử: 0.125đ
- Ghi đưc output là ch s ca phn t trong mng. Hoặc ghi đưc trưng
hp mng có nhiu phn t cùng giá tr và cùng là s nguyên t ln nht:
0.125đ
- Ghi đưc trưng hp mng không có s nguyên t nào: 0.125đ
10 5 10 5
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com)
lOMoARcPSD|58746900
6
b. Cho 03 ví d minh ha (gồm input và output tương ứng):
Mi ví d 0.125đ
Nếu ví d thiếu trường hp mng không có s nguyên t nào thì tr 0.125đ
Câu 11: (0.5 đim) Cho hàm sau trong ngôn ng C/C++:
int f(int a){
return ((a>0)-(a<0))*a
}
Hãy điền vào bảng kết quả của hàm ứng với các giá trị tham số/ giá trị trả về sau:
Tham s a
Giá tr kết qu tr v ca hàm f
-3
……3…..
………..
0
5
……5…..
……6 hoặc -6 đều
đúng…..
6
Mỗi giá trị đúng tính 0.125
Câu 12: (1.75 đim) Cho chương trình chưa hoàn thiện như sau:
#include <iostream>
using namespace std;
const int MAX=50;
void NhapMang(int a[], int &n)
{ do{
cout<<"Nhap so nguyen n=";
cin>>n;
}while(n<1 || n>MAX);
for(int i=0; i<n; i++)
{ cout<<"Nhap a["<<i<<"]= ";
cin>>a[i];
}
}
Yêu cu sinh viên viết tiếp các hàm sau:
a) Kim tra mng a có phi mng toàn các s chính phương hay không ?
Biết rng: s chính phương hay còn gọi là s hình vuông là s t nhiên có căn bậc hai
mt s t nhiên, hay nói cách khác, s chính phương bằng bình phương (lũy thừa bc 2)
ca mt s t nhiên (có tính s 0).
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com)
lOMoARcPSD|58746900
7
//Cách 1
bool laSoChinhPhuong(int n){
int sqr = sqrt(n);
if(sqr*sqr == n)
return 1;
return 0;
}
//Cách 2
bool laSoChinhPhuong(int n){
if(int(sqrt(n) !=sqrt(n))
return 0;
return 1;
}
//Cách 3
bool laSoChinhPhuong (int n)
{
for (int i=0; i*i <= n; i++){
if(i*i == n)
return 1;
}
return 0;
}
// Hoặc cách khác đúng
int toanChinhPhuong(int a[], int n)
{
for (int i = 0; i < n ; i++)
if (laSoChinhPhuong(a[i]) == 0)
return 0;
return 1;
}
0.25 điểm
0.5 điểm
b) Tính tng tt c các phn t có giá trmt s l.
int tongSoChan(int a[], int n)
{
int tong=0;
for (int i=0;i<n;i++)
if(a[i]%2!=0) // hoc a[i]%2==1
tong+=a[i];
return tong;
}
0.5 điểm
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com)
lOMoARcPSD|58746900
8
Trưng hp
Đim
Ghi chú
sai điu kin ca if, k c a[i]%2==0
tr 0.25
sai câu lnh tính tng
tr 0.25
nhiu SV ghi tong++;
i<=n
tr 0.125
thiếu khi to tong = 0
tr 0.125
void, không cout
tr 0.125
int, không return
tr 0.125
int, có cout và return 0:
không tr điểm
c) Hãy hoàn thin hàm main trên bng cách viết các dòng lnh để gi các hàm trong câu a
và b trên.
int main()
{ int a[MAX], n=0;
NhapMang(a,n);
if (toanChinhPhuong(a,n)==1)
cout <<"Mang toan so chinh phuong"<<endl;
else cout<<"Mang khong phai chua toan cac so
chinh phuong";
0.25 điểm
cout<<"Tong so chan: "<<tongSoChan(a,n);
0.25 điểm
****SV có th xut thông tin dạng khác như "Yes"/"No".
Hoc cách khác tùy theo cách viết hàm câu a, b
}
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com)
lOMoARcPSD|58746900
9
Câu 13: (1.5 đim)
Viết chương trình nhập vào 2 chui và thc hin so sánh 2 chuỗi xem chúng có “bng
nhau” hay không? Biết rng 2 chui được xem là “bằng nhau” (theo 1 cách đc bit) nếu
như thỏa các điu kin sau:
- 2 chuỗi có độ dài bng nhau
- nếu ký t th i trong 1 chui là ch cái thì ký t th i trong chui còn li cũng phi là
ch cái và chúng ging nhau, không phân bit ch hoa ch thưng.
Ví d: Cho 2 chuỗi s1 “abcd123” và s2 “ABcD2#.”, 2 chuỗi này được xem là bng nhau
theo quy ước trên, bi vì chúng có cùng đ dài và nếu xét tng cp ký t v trí ging
nhau trong 2 chui thì: a=A, b=B, c=c, d=D, 1=2, 2=#, 3=. (tc là các cp ký t không
phi là ch cái thì đưc xem là ging nhau).
Nếu so sánh s1 “abcd123” với s3 “ABcD2#x” thì 2 chuỗi không bng nhau vì cp ký t
cui (3, x) có 1 ký t là ch cái nhưng ký tự kia không là ch cái.
// 1 cách gii mang tính cht tham kho
bool myCompare(char a[], char b[])
{
if (strlen(a)!=strlen(b)) return 0;
for(int i =0; i<strlen(a); i++)
{
if('A'<=a[i] && a[i]<='Z')
a[i] = tolower(a[i]);
if ('A'<=b[i] && b[i]<='Z')
b[i] = tolower(b[i]);
if( 'a'<=a[i] && a[i]<='z' && 'a'<=b[i] && b[i]<='z'
&& a[i]!=b[i])
return 0;
if( 'a'<=a[i] && a[i]<='z' && (b[i]<'a' || b[i]>'z') )
return 0;
if( (a[i]<'a' || a[i]>'z') && 'a'<=b[i] && b[i]<='z' )
return 0;
}
return 1;
}
- SV có th viết các hàm riêng để
kim tra 1 ký t là ch cái. Ví
d:
bool isAlpha (char x)
{
if (('a'<=x && x<='z') || ('A'<=x &&
x<='Z'))
return 1;
return 0;
}
ri gi hàm:
if( isAlpha(a[i]) && ! isAlpha(b[i]) )
- SV có th s dng các hàm có
sẵn trong thư viện như isalpha,
...
Thang đim gi ý:
- So sánh độ dài 2 chui
0.25
- X lý không phân bit ch cái hoa
0.25
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com)
lOMoARcPSD|58746900
10
thường (đổi ch cái hoa thường)
- Kiểm tra được 1 ký t là ch cái
0.25
- Kiểm tra được 1 ký t KHÔNG là ch
cái
0.25
- Cách giải đúng theo yêu cầu
SV phi lit kê đưc hết các trưng hp "2
chui không bng nhau"
0.5
Câu 14: (1 đim)
Ngày trước khi đi thi ĐGNL của ĐHQG bn Bình rt cn thận nên làm bài trên đ trưc
ri mới tô đen vào phiếu tr li trc nghim sau.
Chẳng mai hôm đó bạn Bình b tô nhm đáp án của câu s 2 vào v trí ca câu s 1 trên
phiếu tr li trc nghim, nhầm đáp án của câu s 3 vào v trí ca câu s 2,…. Mãi đến
câu cui cùng khi không thy đáp án đâu Bình mới phát hin ra sai sót này.
Bây gi xóa hết tô li thì rất lâu, mà Bình là người rt thông minh, Bình chc chn nãy gi
mình làm bài là đúng hết không sai câu nào. Bình mun nhm th xem mình đang được
bao nhiêu điểm để quyết đnh coi có cn tô li hay không.
Hãy viết chương trình giúp tính xem Bình đã được bao nhiêu đim vi cái đáp án tô sai
t trên xuống dưới như vậy.
D liu nhp vào gm:
Dòng đu tiên là s nguyên dương n, đây là số câu trong đ.
Dòng th hai cha n ký t trong tp {'A', 'B', 'C', 'D'} cách nhau bi khong trng.
Đây là đáp án của tng câu.
Yêu cu xut ra:
mt con s duy nht, là s ợng câu Bình tô đúng.
Ví d:
nhp vào
9
B C C D A A B C B
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com)
lOMoARcPSD|58746900
11
xut ra
2
#include <iostream>
using namespace std;
int main(){
int n, count = 0;;
char *a = new char[n]; 0.25đ
cin >> n;
for(int i = 0; i < n; i++) cin >> a[i];0.25đ
for(int i = 1; i < n; i++) { 0.5đ
if (a[i] == a[i-1]) count ++;
}
cout << count;
}
Thang điểm chi tiết
Sinh viên khai báo mảng phải dùng cấp phát động hoặc khai báo mảng có
kích thước tối thiểu 120 ký tự (do đề thi ĐGNL có 120 câu) Nếu khai báo
mảng ít hơn 120 ký tự mà không có giải thích. Thì mất 0.25đ
Sinh viên nhập mảng dùng vòng lặp hoặc dùng cin.getline để nhập toàn bộ
hàng đều được full 0.25đ
Vòng lặp cuối sinh viên cho chạy từ 1 -> n hay từ 0 -> n-1 đều được.
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com)
lOMoARcPSD|58746900

Preview text:

lOMoARcPSD|58746900
Trường Đại học Công nghệ thông tin, Đại học Quốc gia
Thành phố Hồ Chí Minh.Thầy Cao Thanh Tình
Nhập môn lập trình (Trường Đại học Công nghệ thông tin, Đại học Quốc gia Thành phố Hồ Chí Minh) Scan to open on Studeersnel
Studocu is not sponsored or endorsed by any college or university
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com) lOMoARcPSD|58746900
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN Đề thi cuối kỳ: Nhập môn lập trình ĐỀ 02
KHOA KHOA HỌC MÁY TÍNH Năm học 2020 - 2021 Thời gian: 90 phút Câu 1:
(0.5 điểm) Cho biết kết quả của chương trình sau: #include using namespace std; int main() { int x=5, y =10; if(x>y) x=x+y; 5,5 else y=y-x; cout< return 0; } Trường hợp Điểm Ghi chú 5,5 0.5 đáp án đúng 5 5 0.5
thiếu dấu , nhưng không trừ điểm x=5 0.5 không trừ điểm y=5 Câu 2:
(0.5 điểm) Cho biết kết quả của chương trình sau: #include using namespace std; int main() { int x=1; switch(x) { case 0: case 1: case 2:x=x+2; case 3:x=x+3; break; 6 case 4:x=x+4; break; } cout< return 0; } 1
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com) lOMoARcPSD|58746900 Câu 3:
(0.5 điểm) Cho biết kết quả của chương trình sau: #include using namespace std; int main() { int x1=1,s1=0; while(x1!=5) { x1++; s1=s1+x1; } int x2=1,s2=0; 14,10 do { s2=s2+x2; x2++; }while(x2!=5); cout< return 0; } Trường hợp Điểm Ghi chú 14,10 0.5 đáp án đúng 14 10 0.5
thiếu dấu , nhưng không trừ điểm 14, số khác 0.25
mỗi số đúng được 0.25 số khác, 10 0.25
mỗi số đúng được 0.25 10,14 0 khác thứ tự là sai Câu 4:
(0.5 điểm) Cho biết kết quả của chương trình sau: #include using namespace std; int main() { for(int i=10;i!=0;i=i-2) { if(i<5) 4 2 cout< } return 0; } 2
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com) lOMoARcPSD|58746900 Trường hợp Điểm Ghi chú 4 2 0.5 đáp án đúng 4 0.5 xuống dòng nhưng không 2 trừ điểm 4\t2 0.5
SV không biết ký tự điều
khiển \t nhưng không trừ điểm 4 0.25 chỉ ghi 1 số 2 0.25 chỉ ghi 1 số Câu 5:
(0.5 điểm) Cho biết kết quả của chương trình sau: #include using namespace std; int func(int x) { if (x==5) return 1; return func(x+1)+x; } 11 int main() { cout< return 0; } Trường hợp Điểm Ghi chú 11 0.5 đáp án đúng 1 1 0
2 số 1 cách xa nhau, có vẻ SV copy bài bạn 1 dãy số có/không 0 sai có số 11 ở cuối dãy Câu 6:
(0.5 điểm) Cho biết kết quả của chương trình sau: #include using namespace std; int main() { int A[5]={1,3,5,7,9}; int S=0; for(int i=1;i<3;i++) 8 S=S+A[i]; cout< return 0; 3
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com) lOMoARcPSD|58746900 } Trường hợp Điểm Ghi chú 8 0.5 đáp án đúng S=8 0.5 vẫn chấm đúng Câu 7:
(0.5 điểm) Cho biết kết quả của chương trình sau: #include using namespace std; int main() { int A[3][3]={{1,3,5} ,{3,5,1} ,{5,1,3}}; 18 int S=0; for(int i=0;i<3;i++) for(int j=0;j<3;j++) if(i>=j) S=S+A[i][j]; cout< return 0; } Trường hợp Điểm Ghi chú 18 0.5 đáp án đúng S=18 0.5 vẫn chấm đúng Câu 8:
(0.5 điểm) Cho biết kết quả của chương trình sau: #include using namespace std; int main() { int x=10; int *y=&x; 11 x++; cout<<*(&(*y)); return 0; } Câu 9:
(0.5 điểm) Cho biết kết quả chương trình sau: #include #include 4
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com) lOMoARcPSD|58746900 using namespace std; struct Point { int x, y; }; int main() 10 5 10 5 { struct Point p1 = {1, 2}; struct Point *p2 = &p1; p2->x = 10; (*p2).y = 5; cout<x <<" " <y; return 0; } Trường hợp Điểm Ghi chú 10 5 10 5 0.5 đáp án đúng
Mỗi số đúng được 0.125 (đúng theo vị trí như trên đáp án)
Ví dụ: 1 2 10 5 --> được 0.25 do đúng 2 số cuối
1 5 10 5 --> được 0.375 Câu 10:
(0.75 điểm) Cho bài toán được phát biểu bằng lời như sau: "Tìm vị trí xuất
hiện của số nguyên tố lớn nhất trong mảng số nguyên một chiều".
a. Hãy phát biểu input và output của bài toán (để có thể lập trình giải trên máy tính).
 Input: Một mảng số nguyên dương có n phần tử
 Output: Chỉ số của phần tử có giá trị là số nguyên tố lớn nhất trong mảng.
Trường hợp mảng có nhiều phần tử cùng giá trị và cùng là số nguyên tố lớn
nhất thì output chỉ số của phần tử nào cũng được.
 Trường hợp mảng không có số nguyên tố nào thì output là -1
---------------------------------------------------------------------------------
- Ghi được mảng có tối đa n phần tử: 0.125đ
- Ghi được output là chỉ số của phần tử trong mảng. Hoặc ghi được trường
hợp mảng có nhiều phần tử cùng giá trị và cùng là số nguyên tố lớn nhất: 0.125đ
- Ghi được trường hợp mảng không có số nguyên tố nào: 0.125đ 5
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com) lOMoARcPSD|58746900
b. Cho 03 ví dụ minh họa (gồm input và output tương ứng): Mỗi ví dụ 0.125đ
Nếu ví dụ thiếu trường hợp mảng không có số nguyên tố nào thì trừ 0.125đ Câu 11:
(0.5 điểm) Cho hàm sau trong ngôn ngữ C/C++: int f(int a){ return ((a>0)-(a<0))*a }
Hãy điền vào bảng kết quả của hàm ứng với các giá trị tham số/ giá trị trả về sau: Tham số a
Giá trị kết quả trả về của hàm f -3 ……3….. ……….. 0 5 ……5….. ……6 hoặc -6 đều 6 đúng…..
Mỗi giá trị đúng tính 0.125 Câu 12:
(1.75 điểm) Cho chương trình chưa hoàn thiện như sau: #include using namespace std; const int MAX=50;
void NhapMang(int a[], int &n) { do{
cout<<"Nhap so nguyen n="; cin>>n; }while(n<1 || n>MAX);
for(int i=0; i { cout<<"Nhap a["< cin>>a[i]; } }
Yêu cầu sinh viên viết tiếp các hàm sau:
a) Kiểm tra mảng a có phải mảng toàn các số chính phương hay không ?
Biết rằng: số chính phương hay còn gọi là số hình vuông là số tự nhiên có căn bậc hai là
một số tự nhiên, hay nói cách khác, số chính phương bằng bình phương (lũy thừa bậc 2)
của một số tự nhiên (có tính số 0). 6
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com) lOMoARcPSD|58746900 //Cách 1
int toanChinhPhuong(int a[], int n)
bool laSoChinhPhuong(int n){ { int sqr = sqrt(n);
for (int i = 0; i < n ; i++) if(sqr*sqr == n)
if (laSoChinhPhuong(a[i]) == 0) return 1; return 0; return 0; return 1; } } //Cách 2
bool laSoChinhPhuong(int n){
if(int(sqrt(n) !=sqrt(n)) return 0; return 1; } //Cách 3
bool laSoChinhPhuong (int n) {
for (int i=0; i*i <= n; i++){ if(i*i == n) return 1; } return 0; } // Hoặc cách khác đúng 0.25 điểm 0.5 điểm
b) Tính tổng tất cả các phần tử có giá trị là một số lẻ.
int tongSoChan(int a[], int n) 0.5 điểm { int tong=0;
for (int i=0;i if(a[i]%2!=0) // hoặc a[i]%2==1 tong+=a[i]; return tong; } 7
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com) lOMoARcPSD|58746900 Trường hợp Điểm Ghi chú
sai điều kiện của if, kể cả a[i]%2==0 trừ 0.25 sai câu lệnh tính tổng trừ 0.25 nhiều SV ghi tong++; i<=n trừ 0.125 thiếu khởi tạo tong = 0 trừ 0.125 void, không cout trừ 0.125 int, không return trừ 0.125 int, có cout và return 0: không trừ điểm
c) Hãy hoàn thiện hàm main trên bằng cách viết các dòng lệnh để gọi các hàm trong câu a và b trên. int main() { int a[MAX], n=0; NhapMang(a,n);
if (toanChinhPhuong(a,n)==1) 0.25 điểm
cout <<"Mang toan so chinh phuong"< else cout<<"Mang khong phai chua toan cac so chinh phuong";
cout<<"Tong so chan: "<0.25 điểm
****SV có thể xuất thông tin ở dạng khác như "Yes"/"No".
Hoặc cách khác tùy theo cách viết hàm ở câu a, b } 8
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com) lOMoARcPSD|58746900 Câu 13: (1.5 điểm)
Viết chương trình nhập vào 2 chuỗi và thực hiện so sánh 2 chuỗi xem chúng có “bằng
nhau” hay không? Biết rằng 2 chuỗi được xem là “bằng nhau” (theo 1 cách đặc biệt) nếu
như thỏa các điều kiện sau:
- 2 chuỗi có độ dài bằng nhau
- nếu ký tự thứ i trong 1 chuỗi là chữ cái thì ký tự thứ i trong chuỗi còn lại cũng phải là
chữ cái và chúng giống nhau, không phân biệt chữ hoa chữ thường.
Ví dụ: Cho 2 chuỗi s1 “abcd123” và s2 “ABcD2#.”, 2 chuỗi này được xem là bằng nhau
theo quy ước trên, bởi vì chúng có cùng độ dài và nếu xét từng cặp ký tự ở vị trí giống
nhau trong 2 chuỗi thì: a=A, b=B, c=c, d=D, 1=2, 2=#, 3=. (tức là các cặp ký tự không
phải là chữ cái thì được xem là giống nhau).
Nếu so sánh s1 “abcd123” với s3 “ABcD2#x” thì 2 chuỗi không bằng nhau vì cặp ký tự
cuối (3, x) có 1 ký tự là chữ cái nhưng ký tự kia không là chữ cái.
// 1 cách giải mang tính chất tham khảo
- SV có thể viết các hàm riêng để
kiểm tra 1 ký tự là chữ cái. Ví
bool myCompare(char a[], char b[]) { dụ:
if (strlen(a)!=strlen(b)) return 0;
bool isAlpha (char x) {
for(int i =0; i if (('a'<=x && x<='z') || ('A'<=x && { x<='Z'))
if('A'<=a[i] && a[i]<='Z') return 1; a[i] = tolower(a[i]); return 0;
if ('A'<=b[i] && b[i]<='Z') } b[i] = tolower(b[i]); rồi gọi hàm:
if( 'a'<=a[i] && a[i]<='z' && 'a'<=b[i] && b[i]<='z' && a[i]!=b[i])
if( isAlpha(a[i]) && ! isAlpha(b[i]) ) return 0;
if( 'a'<=a[i] && a[i]<='z' && (b[i]<'a' || b[i]>'z') ) return 0;
- SV có thể sử dụng các hàm có
if( (a[i]<'a' || a[i]>'z') && 'a'<=b[i] && b[i]<='z' )
sẵn trong thư viện như isalpha, return 0; ... } return 1; } Thang điểm gợi ý:
- So sánh độ dài 2 chuỗi 0.25
- Xử lý không phân biệt chữ cái hoa 0.25 9
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com) lOMoARcPSD|58746900
thường (đổi chữ cái hoa thường)
- Kiểm tra được 1 ký tự là chữ cái 0.25
- Kiểm tra được 1 ký tự KHÔNG là chữ 0.25 cái
- Cách giải đúng theo yêu cầu 0.5
SV phải liệt kê được hết các trường hợp "2
chuỗi không bằng nhau"
Câu 14: (1 điểm)
Ngày trước khi đi thi ĐGNL của ĐHQG bạn Bình rất cẩn thận nên làm bài trên đề trước
rồi mới tô đen vào phiếu trả lời trắc nghiệm sau.
Chẳng mai hôm đó bạn Bình bị tô nhầm đáp án của câu số 2 vào vị trí của câu số 1 trên
phiếu trả lời trắc nghiệm, nhầm đáp án của câu số 3 vào vị trí của câu số 2,…. Mãi đến
câu cuối cùng khi không thấy đáp án đâu Bình mới phát hiện ra sai sót này.
Bây giờ xóa hết tô lại thì rất lâu, mà Bình là người rất thông minh, Bình chắc chắn nãy giờ
mình làm bài là đúng hết không sai câu nào. Bình muốn nhẩm thử xem mình đang được
bao nhiêu điểm để quyết định coi có cần tô lại hay không.
Hãy viết chương trình giúp tính xem Bình đã được bao nhiêu điểm với cái đáp án tô sai
từ trên xuống dưới như vậy.
Dữ liệu nhập vào gồm:
● Dòng đầu tiên là số nguyên dương n, đây là số câu trong đề.
● Dòng thứ hai chứa n ký tự trong tập {'A', 'B', 'C', 'D'} cách nhau bởi khoảng trắng.
Đây là đáp án của từng câu. Yêu cầu xuất ra:
● một con số duy nhất, là số lượng câu Bình tô đúng. Ví dụ: nhập vào 9 B C C D A A B C B 10
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com) lOMoARcPSD|58746900 xuất ra 2 #include
using namespace std; int main(){
int n, count = 0;;
char *a = new char[n]; 0.25đ cin >> n;
for(int i = 0; i < n; i++) cin >> a[i];0.25đ
for(int i = 1; i < n; i++) { 0.5đ
if (a[i] == a[i-1]) count ++; } cout << count; } Thang điểm chi tiết
 Sinh viên khai báo mảng phải dùng cấp phát động hoặc khai báo mảng có
kích thước tối thiểu 120 ký tự (do đề thi ĐGNL có 120 câu) Nếu khai báo
mảng ít hơn 120 ký tự mà không có giải thích. Thì mất 0.25đ
 Sinh viên nhập mảng dùng vòng lặp hoặc dùng cin.getline để nhập toàn bộ
hàng đều được full 0.25đ
 Vòng lặp cuối sinh viên cho chạy từ 1 -> n hay từ 0 -> n-1 đều được. 11
Downloaded by Thu nguy?t Nguy?n th? (mianliennguonvai@gmail.com)