Download as pdf or txt
Download as pdf or txt
You are on page 1of 8

TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT TPHCM ĐÁP ÁN CUỐI KỲ HỌC KỲ 2 NH 2018-2019

KHOA ĐÀO TẠO CHẤT LƯỢNG CAO Môn: NGÔN NGỮ LẬP TRÌNH C

Chữ ký giám thị 1 Chữ ký giám thị 2 Mã môn học: CPRL130064


Đề số/Mã đề: 02 Đề thi có 07 trang.
Thời gian: 90 phút.
CB chấm thi thứ nhất CB chấm thi thứ hai ĐƯỢC tham khảo 1 tờ A4 viết tay.
Số câu đúng: Số câu đúng:
SV làm bài trực tiếp trên đề thi.
Điểm và chữ ký Điểm và chữ ký
Họ và tên: ...................................................................

Mã số SV: ...................................................................

Số TT:....................... Phòng thi: ...............................

PHẦN TRẮC NGHIỆM (5.0 đ)


Phiếu trả lời
Chọn câu trả lời đúng: a Bỏ chọn: a Chọn lại:
Câu 1 a b  d Câu 6 a b c  Câu 11  b c d Câu 16  b c d
Câu 2  b c d Câu 7 a  c d Câu 12 a b  d Câu 17 a b c 
Câu 3  b c d Câu 8 a b  d Câu 13 a b c  Câu 18 a b c 
Câu 4 a b  d Câu 9 a b  d Câu 14 a b  d Câu 19 a b c 
Câu 5  b c d Câu 10  b c d Câu 15 a  c d Câu 20  b c d

Câu hỏi
Câu 1: Kết quả in ra màn hình khi chạy đoạn chương trình: Câu 2: Kết quả in ra màn hình khi chạy chương trình:
int a = 3, b = 6, c = 7, d = 10, e = 15; #include <stdio.h>
if ((a <= b) && (b > c)||(d < e)) void main(void)
{ a = c - b; {
a +=e; int i=0,c[] = {1, 2, 3}, b=*c;
e +=a; switch (b)
d++; {
d*=b; case 1: i+=2;
++b;} case 2: i=i+3;
else case 3: ++i;
{ b = a + c; default: i+=5;
++a; }
d=a+e; printf("%d",i);
c=b+d; }
b--;}
printf("%d%d",a,b);
a. 16, 7 b. 160 c. 167 d. Đáp án khác a. 11 b. 14 c. 6 d. Đáp án khác
Câu 3: Kết quả in ra màn hình khi chạy chương trình: Câu 4: Kết quả in ra màn hình khi chạy chương trình:
int a[5] = {1,8,1,1,6}; #include <stdio.h>
int j; int hamc(int x);
for (int i = 0; i < 4; i++){ void main(void)
j = i + 1; { int a=11, b=8;
a[i] = a[j]; b=hamc(a);
} printf(“%d va %d”,a,b);}
printf("%d,%d,%d,%d",a[4],a[3],a[2],a[1]); int hamc(int x)
{

Số hiệu: BM3/QT-PĐBCL-RĐTV- 1 Trang: 1/7


Họ tên:………………………………………………MSSV:……………………STT…………
++x;
return(x%2);}
a. 6 6 1 1 b. 6 1 1 8 c. 3. 8 1 1 6 d. Đáp án khác a. 11 va 9 b. 12 va 8 c. 11 va 0 d. Đáp án khác
Câu 5: Kết quả in ra màn hình khi chạy chương trình: Câu 6: Kết quả in ra màn hình khi chạy chương trình:
#include<stdio.h> #include <stdio.h>
void main(void){ void main(void)
char a[10] = "HCM UTE"; { int a=8, b=10;
int i, j; for(;a!=2;){
for (i = 0; ; i++) { a--; b++;
if (a[i] ==' ') { }
j = ++i; break; if (a%2==1){
} a=a-b; b=b+1;
} }
printf("%d",j); else
} b=b+2;
printf("%d",b);}
a. 4 b. 2 c. 3 d. Vòng lặp vô hạn a. 12 b. 11 c. 10 d. 18
Câu 7: Câu 8: Kết quả in ra màn hình khi chạy chương trình:
Kết quả in ra màn hình khi chạy chương trình sau: #include <stdio.h>
#include <stdio.h> void main(void)
void main(void) {
{ int j=0,i=2;
int a,x=3; do
for(a=1; a<5; a++) {
x=x*a++; i+=3;j++;
printf("%d",x); if(j==2)break;
} }
while(1);
printf("%d",i);
}

a. 3 b. 9 c.15 d. Lỗi cú pháp a. 2 b. 5 c. 8 d. vòng lặp vô hạn


Câu 9: Kết quả in ra màn hình khi chạy chương trình: Câu 10: Kết quả in ra màn hình khi chạy chương trình:
#include <stdio.h> #include <stdio.h>
void main(void) #include <string.h>
{ void main(void)
int a=22, b=3; double f; {
f=(double)a/(double)b; struct DIEMTHI
printf("%2.2f",f); {
} char c;
int d,d1,d2;
}
m={'C',11,2};
m.d+=3; ++m.d2;

printf("%c%d%d%d",m.c,m.d,m.d1,m.d2);
}
a. 7 b. 7.00 c. 7.33 d. Lỗi cú pháp a. C1421 b. C112 c. 1421C d. Lỗi cú pháp
Câu 11: Kết quả in ra màn hình khi chạy chương trình: Câu 12: Cho biết giá trị của biến S sau khi thực thi đoạn
#include<stdio.h> lệnh sau:
void main(void) int Func(int *a)
{ {
int j; if(*a>0)
for (;;) { *a+=1;return 3;}
{ else
j++; { *a-=1;return 4;}
if(j<5)continue; }
break; void main()
} {
printf("%d",j); int S=1;

Số hiệu: BM3/QT-PĐBCL-RĐTV- 1 Trang: 2/7


Họ tên:………………………………………………MSSV:……………………STT…………
} Func(&S);
a. 5 b. 4 c. 3 d. Sai cú pháp }
a. 2 b.1 c. 3 c. khai báo hàm Func sai
Câu 13: Cho đoạn lệnh sau: Câu 14: Trong ngôn ngữ C, ký hiệu || là ký hiệu của
double *a, b; phép toán gì?
a = (double*) malloc(4*sizeof(double));
printf("%d ",a);
Khi chạy đoạn lệnh này,thu được kết quả in ra màn hình là: a. Phép chia lấy phần nguyên
a. Địa chỉ của biến a b. Phép and
b. Địa chỉ của biến b c. Phép or
c. Kích thước của biến a d. Phép chia lấy phần nguyên
d. Đáp án khác
Câu 15: Kết quả in ra màn hình khi chạy chương trình: Câu 16: Cho các biến được khai báo như sau:
#include <stdio.h> int n= 30, m= 20; float t=10;
void func(int *n, int *m) Kết quả của biểu thức n*m/t sẽ có kiểu:
{
int a; a. float
a=*n-9; *n=*m+9; *m=a; b. int
} c. long
void main(void) d. double
{
int i,a[4] = {1,3,5,7};
func(&a[1],&a[2]);
printf("%d%d", a[1],a[2]);
}
a. 15 -7 b. 14 -6 c. 16 9 d. Không thực hiện được
Câu 18: Kết quả in ra màn hình của chương trình:
Câu 17: Chọn đáp án đúng
Trong ngôn ngữ C, thành phần nào sau đây sẽ quyết định kích #include <stdio.h>
void main(void)
thước vùng nhớ của một biến?
{
int n=10;
a. Độ lớn của dữ liệu lưu trong biến do
b. Tên biến {
n=n/2; printf("%d",n);
c. Dung lượng còn trống hiện tại của bộ nhớ RAM }
d. Kiểu dữ liệu while ( n>0);
}
a. 0 b. 1042 c.0124 d.5210
Câu 19: Trong ngôn ngữ C, câu lệnh a %= b; tương đương với Câu 20: Kết quả in ra màn hình khi chạy chương trình:
câu lệnh nào sau đây? #include <stdio.h>
a. b =% a; #include <malloc.h>
b. a = b % a; void main(void)
c. b = a % b; {
d. a = a % b; int *p,n=8;
p=(int *)calloc(n,sizeof(int));
for (int i =0;i<8;i++)
*(p+i)=4*i;
printf("%d",*(p+4));
free(p);
}
a. 16 b. 32 c. 8 d. Đáp án khác
PHẦN TỰ LUẬN (5.0 đ)
1 1 1
Câu 21(1.0 điểm): Cho tổng 𝑠(𝑛) = 1 + 32 + 52 + ⋯ + (2𝑛+1)2:

a) Vẽ lưu đồ giải thuật và viết chương trình thực hiện yêu cầu nhập và kiểm tra một số nguyên dương
n từ bàn phím, tính và in ra giá trị của tổng s(n) sử dụng vòng lặp.

Số hiệu: BM3/QT-PĐBCL-RĐTV- 1 Trang: 3/7


Họ tên:………………………………………………MSSV:……………………STT…………
b) Viết lại chương trình theo yêu cầu của câu a) sử dụng hàm đệ quy để tính tổng s(n) với tham số
đầu vào của hàm là n
--------------------
a) Vẽ lưu đồ giải thuật: //0.5 điểm

Chương trình tính và in ra giá trị của tổng s(n) sử dụng vòng lặp: //0.25 điểm
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void main()
{
int n, i;
double sum = 1;
do
{
printf("Nhap so nguyen duong n:");
scanf("%d", &n);
} while (n <= 0);
// Tinh tong
for (i = 1; i <= n; i++)
sum += 1/pow(double(2 * i + 1),2);
printf("Tong la: %f", sum);
}
b) Chương trình tính và in ra giá trị của tổng s(n) sử dụng đệ quy: //0.25 điểm
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double sum(int n);
void main()
{
int n;
do
{
printf("Nhap so nguyen duong n:");
scanf("%d", &n);

Số hiệu: BM3/QT-PĐBCL-RĐTV- 1 Trang: 4/7


Họ tên:………………………………………………MSSV:……………………STT…………
} while (n <= 0);
// Xuat tong
printf("Tong la: %f", sum(n));
}
double sum(int n)
{
if (n == 1)
return (1 + 1.0 / 9);
else
return (sum(n - 1) + 1 / pow(double(2 * n + 1), 2));
}

Câu 22 (2.5 điểm): Hãy viết một chương trình hoàn chỉnh với những yêu cầu sau:
a) Nhập vào và kiểm tra một số nguyên dương n, và nhập vào một số nguyên k từ bàn phím.
b) Nhập dữ liệu từ bàn phím cho một mảng số nguyên gồm n phần tử (cấp phát bộ nhớ động)
d) Thực hiện đếm và in ra số lượng của các phần tử có giá trị nguyên dương của mảng.
e) Viết hàm thực hiện việc sắp xếp một mảng số nguyên một chiều theo chiều giảm dần. Sử dụng
hàm này để sắp xếp mảng trên và xuất ra kết quả.
f) Viết hàm kiểm tra trong mảng có tồn tại phần tử có giá trị bằng k hay không? Nếu có thì trả về giá
trị “true” ngược lại trả về giá trị “false”. Sử dụng hàm này để kiểm tra mảng trên và xuất ra kết quả
của việc kiểm tra.
--------------------------

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
void Sapxepgiam(int a[], int n);
int Kiemtra(int a[], int n, int k);
void main()
{
int n, k, dem, i;
int *ptr;
//a. Nhập vào và kiểm tra một số nguyên dương n, và nhập vào một số nguyên k từ bàn phím;
//0.5 điểm
do
{
printf("Nhap so nguyen duong n:");
scanf("%d", &n);
} while (n <= 0);
printf("\nNhap so nguyen k:");
scanf("%d", &k);
// b) Nhập dữ liệu từ bàn phím cho một mảng số nguyên gồm n phần tử (cấp phát bộ nhớ động)
//0.5 điểm
ptr = (int*)malloc(n*sizeof(int));
if (ptr ==NULL)
{
exit(0);
}
for (i = 0; i<n; i++)
{
printf("\nNhap phan tu mang so nguyen thu %d: ", i);
scanf("%d", ptr + i);
}

Số hiệu: BM3/QT-PĐBCL-RĐTV- 1 Trang: 5/7


Họ tên:………………………………………………MSSV:……………………STT…………
//c. Thực hiện đếm và in ra số lượng của các phần tử có giá trị nguyên dương của mảng.
//0.5 điểm
dem = 0;
for (i = 0; i<n; i++)
{
if (*(ptr + i) >0)
dem++;
}
printf("\nSo luong phan tu nguyen duong cua mang: %d", dem);
//d. Viết hàm thực hiện việc sắp xếp một mảng số nguyên một chiều theo chiều giảm dần.
//Sử dụng hàm này để sắp xếp mảng trên và xuất ra kết quả.
//0.5 điểm
Sapxepgiam(ptr, n);
printf("\nMang duoc sap theo thu tu giam dan:\n");
for (i = 0; i<n; i++)
printf("%d ", *(ptr + i));
//e. Viết hàm kiểm tra trong mảng có tồn tại phần tử có giá trị bằng k hay không?
//Nếu có thì trả về giá trị “true” ngược lại trả về giá trị “false”.
//Sử dụng hàm này để kiểm tra mảng trên và xuất ra kết quả của việc kiểm tra.
//0.5 điểm
if(Kiemtra(ptr, n, k))
printf("\nMang ton tai phan tu co gia tri %d",k);
else
printf("\nMang khong ton tai phan tu co gia tri %d", k);
}

void Sapxepgiam(int a[], int n)


{
int i,j,temp;
for (i = 0; i<n - 1; i++)
for (j = 0; j<n - 1; j++)
{
if (*(a + j) < *(a + j + 1))
{
temp = *(a + j);
*(a + j) = *(a + j + 1);
*(a + j + 1) = temp;
}
}
}

int Kiemtra(int a[], int n, int k)


{
int i;
for (i = 0; i<n; i++)
if (*(a + i) == k)
return 1;
return 0;
}

Câu 23 (1.5 điểm): Viết một chương trình hoàn chỉnh để xử lý các công việc sau:
a. Tạo một kiểu dữ liệu cấu trúc tên là TempSensor để lưu trữ thông tin từ cảm biến nhiệt độ đo
được tại khu vực Tp.HCM bao gồm các thông số sau:

Số hiệu: BM3/QT-PĐBCL-RĐTV- 1 Trang: 6/7


Họ tên:………………………………………………MSSV:……………………STT…………
- ID (Mã thiết bị): kiểu int
- Temp (Số đo nhiệt độ): kiểu double
b. Nhập thông tin bao gồm mã thiết bị và số đo nhiệt độ của 100 cảm biến nhiệt độ.
c. Kiểm tra và in ra thông tin đầy đủ các cảm biến có giá trị đo nhỏ hơn 15 và lớn hơn 450C; tính
và in ra giá trị trung bình của các cảm biến có giá trị do trong khoản từ 15 đến 450C
--------------------------
#include <stdio.h>
#include <conio.h>
#include<string.h>
# define N 100
//a. Tao du lieu cau truc: 0.5 điểm
struct TempSensor
{
int ID;
double Temp;
};
void main()
{
struct TempSensor S[N]; //0.25 điểm
int i, dem=0;
double sum = 0;
//b. Nhap thong tin bao gom ma thiet bi va so do nhiet do cua 100 cam bien 0.25 điểm
for (i = 0; i < N; i++)
{
printf("\nNhap ma thiet bi:");
scanf("%d", &S[i].ID);
printf("Nhap so do nhiet do: ");
scanf("%lf", &S[i].Temp);
}
//c. Kiểm tra và in ra thông tin đầy đủ các cảm biến có giá trị đo
//nhỏ hơn 15 và lớn hơn 450C; tính và in ra giá trị trung bình
//của các cảm biến có giá trị do trong khoản từ 15 đến 45 0.5 điểm

for (i = 0; i < N; i++)


{
if (S[i].Temp<15.0||S[i].Temp>45.0)
{
printf("\nIn ma thiet bi: %d ", S[i].ID);
printf(" In so do nhiet do: %f \n", S[i].Temp);
}
else
{
sum += S[i].Temp;
dem += 1;
}
}
if (dem != 0)
{
printf("\nGia tri trung binh co gia tri do tu 15 den 45: %f \n", sum/dem);
}
}

Số hiệu: BM3/QT-PĐBCL-RĐTV- 1 Trang: 7/7

You might also like