Các câu hỏi ôn tập cho kỳ thi giữa kỳ
1.
Hàm đệ quy int Factorial(int N) tính N!
2.
Hàm đệ quy double Pow(double x, int n) tính x
n
3.
Hàm đệ quy USCLN (int a, int b) tìm ước số chung lớn nhất của a và b
4.
Viết hàm double Value(double a[], int n, double x0) để tính giá trị của hàm
f(x) = a
n
x
n
+ a
n-1
x
n-1
+…+a
1
x + a
0
tại x0
5.
Viết hàm double Root(double a[], int n, double x1, double x2) để tìm giao điểm
của f(x) = a
n
x
n
+ a
n-1
x
n-1
+…+a
1
x + a
0
giữa [x1, x2] với trục hoành bằng phương
pháp chia đôi với độ chính xác 1e-10
6.
Viết hàm void InsertionSort(int A[], int N, int Indies[])
// A – mảng dữ liệu, N – số phần tử của mảng
// Indies – mảng các chỉ số
sao cho A[Indies[i]] |
i = 0…N – 1
có thứ tự tăng dần
7.
Viết hàm void SelectionSort(int A[], int N, int Indies[])
// A – mảng dữ liệu, N – số phần tử của mảng
// Indies – mảng các chỉ số
sao cho A[Indies[i]] |
i = 0…N – 1
có thứ tự tăng dần
8.
Viết hàm void BubbleSort(int A[], int N, int Indies[])
// A – mảng dữ liệu, N – số phần tử của mảng
// Indies – mảng các chỉ số
sao cho A[Indies[i]] |
i = 0…N – 1
có thứ tự tăng dần
9.
Viết hàm int Part(int A[], int lb, int ub, int Indies[])
// A – mảng dữ liệu, N – số phần tử của mảng
// Indies – mảng các chỉ số
// lb – chỉ số đầu đoạn, ub – chỉ số cuối đoạn
sao cho (A[Indies[l]] |
l = lb … j – 1
< A[Indies[j]] < A[Indies[r]] |
r = j + 1 … ub
) |
j – giá trị trả về
của hàm
10.
Viết hàm void BuildHeap(int A[], int N, int i, int Indies[])
// A – mảng dữ liệu, N – số phần tử của mảng
// Indies – mảng các chỉ số
// i – chỉ số của nút gốc
sao cho A[Indies[j]] |
j = i…N – 1
là một Heap
11.
Viết hàm int BinarySearch(int A[], int N, int Indies[], int X)
// A – mảng dữ liệu, N – số phần tử của mảng
// Indies – mảng các chỉ số, A[Indies[i]] |
i = 0…N – 1
có thứ tự tăng dần
// giá trị trả về: vị trí của X trong mảng A hoặc –1 nếu không tồn tại X
12.
Cho đoạn khai báo class sau:
class Int32 {
int value;
public:
Int32(int v) : value(v) {} // hàm tạo từ giá trị v
void Parse(const char *s);
};
Viết mã cho hàm void Int32::Parse(const char *s) để gán giá trị cho Int32::value
từ xâu đầu vào s
13.
Cho đoạn khai báo class sau:
class Array {
int * data, len; // data – mảng số nguyên, len – độ dài của mảng
public:
Array(int A[], int N); // hàm tạo từ mảng A với N phần tử
~Array(); // hàm hủy
int Sum(); // hàm tính tổng các phần tử của mảng
double Avg(); // hàm tìm giá trị trung bình của mảng
int Max(); // hàm tìm giá trị lón lớn nhất trong mảng
int Min(); // hàm tìm giá trị nhỏ nhất trong mảng
void GetRange(int &min, int &max);// hàm tìm giá trị lớn nhất và
// nhỏ nhất của mảng
};
Viết mã cho các hàm của class Array.
14.
Xây dựng class Stack để có thể thực hiện đoạn thuật toán sau:
Stack s; // khai báo Stack s có thể chứa 20 phần tử kiểu int
int x = 25;
do { s.Push(x & 1); x >>=1; } while (x);
while (!s.IsEmpty()) cout << s.Pop();
Trên màn hình phải thể hiện:
Tao stack
11001
Huy stack
15.
Cho đoạn khai báo class sau:
class TamGiac {
double _a, _b, _c; // ba cạnh của tam giác
private:
int Kieu(); // hàm tìm kiểu của tam giác (thường, vuông, cân,
// vuông cân hoặc đều)
public:
TamGiac(double a, double b, double c);
void Print();
};
Viết mã cho các hàm của class TamGiac sao cho kết quả của đoạn mã:
TamGiac tg(2, sqrt(2), sqrt(2))
tg.Print();
cho hiện trên mà hình kết quả là “vuong can”
Ví dụ đề thi
Cho trước các file trong project ThiGiuaKy:
// main.cpp
#include “ThuVien.h”
#include <iostream>
using namespace std;
int showMenu()
{
cout << “0. Thoat\n”;
cout << “1. Stack\n”;
cout << “2. Array\n”;
cout << “3. InsertionSort”;
cout << “> ”;
char c = cin.get();
return (c – 48);
}
void main()
{
int menu;
int A[] = { 66, 33, 44, 77, 99, 11, 55, 22, 88 };
while (menu = showMenu())
{
if (menu == 1) {
Stack s;
int x = 25;
do { s.Push(x & 1); x >>=1; } while (x);
while (!s.IsEmpty()) cout << s.Pop();
}
if (menu == 2) {
int min, max;
Array arr(A, 9);
cout << “min = “ << arr.Min() << endl;
cout << “max = “ << arr.Max();
}
if (menu == 3) {
int N = 9, i;
int *indies = new int[N];
for (i = 0; i < N; i++)
indies[i] = i;
InsertionSort(A, N, indies);
for (i = 0; i < N; i++)
cout << A[indies[i]] << ‘ ‘;
}
cout << endl;
}
}
// ThiGiuaKy.h
#pragma once
double Value(int a[], int n, double x0);
double Root(int a[], int n, double x1, double x2);
void swap(int &a, int &b);
void SelectionSort(int A[], int N, int Indies[]);
void InsertionSort(int A[], int N, int Indies[]);
void BubbleSort(int A[], int N, int Indies[]);
int Part(int A[], int lb, int ub, int Indies[]);
void BuildHeap(int A[], int N, int i, int Indies[]);
class Array {…};
class Stack {…};
class Int32 {…};
class TamGiac {…};
// ThiGiuaKy.cpp
#include “ThiGiuaKy.h”
void swap(int &a, int &b)
{
int t = a; a = b; b = t;
}
// mã của các hàm cần thiết khác
Yêu cầu đối với sinh viên có số hiệu 2008003
Thêm file 2001003.cpp vào project và viết mã cho các hàm để hàm main có thể
cho kết quả đúng.