o Nhập thông tin dự án như sau:
Tên dự án: KTLT
Đường dẫn dự án: D:\ws\KTLT_2023
Chọn vào tùy chọn Place solution and project in the same directory
o Chọn .NET Framework hiện có: .NET 6.0 hay 7.0
o Sau khi tạo dự án, màn hình giao diện lập trình hiển thị như sau:
o Thực hiện biên dị ch dự án và chạy:
Menu Build Build KTLT (Ctrl + B)
Menu Debug Start Debugging (F5) hay Start without Debugging (Ctrl + F5)
o Kết quả chạy chương trình
o Phần Không gian làm việc: tiến hành viết mã chương trình
o Phần Output: hiển thị kết quả Build hay các thông tin liên quan
o Phần Solution Explorer: quản lý các tài nguyên dự án chọn Show All Files để hiển thị tất cả tập
tin/thư mục k ể cả tập tin/thư mục chưa được chọn vào dự án
Yêu cầu đ ề bài: Tính toán phép toán số học cơ bản trên hai số nguyên
• Nhập vào hai số nguyên a và b.
• Nhập các toán tử cộng (+), trừ (-), nhân (*) và chia (/), nếu nhập sai yêu cầu nhập lại.
namespace KTLT.LyThuyet.Buoi1a
{
public class OnTap1
{
static void Main(string[] args)
{
// Khai báo biế n
int a = 0, b = 0;
double kq = 0.0;
string op = "";
// Nhậ p hai số nguyên a và b
Console.Write("Moi ban nhap a: ");
a = int.Parse(Console.ReadLine());
Console.Write("Moi ban nhap b: ");
b = Convert.ToInt32(Console.ReadLine());
// Nhậ p toán tử (+, -, *, /) và kiểm tra dữ liệu
Console.Write("Moi ban nhap toan tu(+, - , *, /): ");
op = Console.ReadLine();
while (op != "+" && op != " -" && op != "/" && op != "*")
{
Console.Write("Nhap sai! Moi ban nhap lai toan tu(+, - , *, /): ");
op = Console.ReadLine();
}
// Tính toán kế t quả
switch (op)
{
case "+":
kq = a + b;
break;
case "-":
kq = a - b;
break;
case "*":
kq = a * b;
break;
case "/":
if (b != 0)
kq = a / (double)b;
break;
}
// Hiể n thị tiếng việ t bởi Font Unicode UTF8
Console.OutputEncoding = System.Text.Encoding.UTF8;
// Chạ y lớp chứ a hàm Main được khai báo bở i tham số dòng lệ nh
KTLT.LyThuyet.Buoi1a.OnTap1.Main(args);
o Sau này, cần chạy hàm Main nào, chúng ta cứ việc tiến hành thay đổ i lệnh gọi hàm Main tương ứng:
KTLT.LyThuyet.Buoi1a.OnTap1.Main(args);
• Sinh viên tiến hành tìm hiểu chạy từng bước chương trình, xem cửa sổ Watch để Debug:
o Chọn điểm dừng: Debug Toggle BreakPoint (F9)
o Chạy từng bước: có vào hàm (Step Into F11), không vào hàm (Step Over F10)
o Xem cử a sổ Watch
2.2 Làm quen với truyền tham số tương ứng với loại dữ liệu
• Truyền tham trị/chiếucho kiểu tham trị (int, float, double, struct, tuple, enum, etc.) hay tham chieeus (Class)
Bài 3 (OnTap2.cs). Truyền tham trị / chiếu với kiểu tham trị/chiếu (OnTap2.cs)
Viết chương trình hoán vị 2 số nguyên (có kiểm tra nhập liệu) và minh họa cho truyền tham trị và tham chiếu
Moi ban nhap x: 10
Moi ban nhap y: 20
Truyen tham tri:
+ x=10,y=20
+ x=10,y=20
Truyen tham chieu:
+ x=10,y=20
+ x=20,y=10
Hướng dẫn
OnTap2.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace KTLT.LyThuyet.Buoi1a
{
public class OnTap2
{
static int NhapSo(ref int n)
{
bool laDung = false;
while (laDung == false )
{
try
{ // các lệ nh có thể gây ra ngoạ i lệ (exception)
Console.WriteLine("Moi ban nhap so:");
n = int.Parse(Console.ReadLine());
laDung = true;
}
catch (Exception ee)
{ // phần code để xử lý lỗ i
laDung = false ;
Console.WriteLine("Nhap sai!Nhap lai: ");
}
finally { //(các lệnh Luôn đượ c thi hành dù có phát sinh ngoạ i lệ hay không)
}
}
return n;
}
/* Truyề n tham trị , kiể u tham trị */
static void HoanVi1(int a, int b)
{
int tmp = a;
a = b;
/* Truyề n tham chiế u, kiể u tham trị
T ừ khóa:
+ ref (vừ a đọc và gán đượ c)
+ out (chỉ được gán)
*/
static void HoanVi2(ref int a, ref int b)
{
int tmp = a;
a = b;
b = tmp;
}
public static void Main(string[] args)
{
int x = 0, y = 0;
Nhapso(ref x);
Nhapso(ref y);
Console.WriteLine("Truyen tham tri:");
Console.WriteLine("+ x={1},y={0}", y, x);
HoanVi1(x, y);
Console.WriteLine("+ x={1},y={0}", y, x);
Console.WriteLine("Truyen tham chieu:");
Console.WriteLine("+ x={1},y={0}", y, x);
HoanVi2(ref x, ref y);
Console.WriteLine("+ x={1},y={0}", y, x);
}
}
}
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
// Hiể n thị tiếng việ t bởi Font Unicode UTF8
Console.OutputEncoding = System.Text.Encoding.UTF8;
// Chạ y lớp chứ a hàm Main được khai báo bở i tham số dòng lệ nh
KTLT.LyThuyet.Buoi1a.OnTap2.Main(args);
3. Ôn tập Mảng 1 chiều
Bài 1 (ViDu1.cs). Minh họa mảng 1 chiều
ViDu1.cs
using System;
namespace KTLT.LyThuyet.Buoi1a {
class ViDu1 {
public static void Main(string [] args){
int[] arr;
arr = new int[4];
arr[0] = 5;
Bài 2 (BaiTap1.cs – Slide 7). Nhập/xuất mảng 1 chiều
Viết chương trình có các hàm chức năng sau:
(a) Hàm nhập một mảng số nguyên (bao gồm các thao tác: nh ập số lượng phầ n tử, khởi tạo và nhậ p giá trị
các phần tử của mảng)
(b) Hàm nhậ p giá trị các phần tử của một mảng số nguyên (mảng đã được khởi tạo trước khi gọi hàm)
(c) Hàm xuất giá trị các phần tử của một mảng số nguyên ra màn hình
** Bài thêm**
(d) Hàm nhập ngẫu nhiên giá trị các phần tử của một mảng số nguyên từ 100 - 300 (mảng đã được khởi tạo trước khi
gọi hàm)
Hướng dẫn
BaiTap1.cs
namespace KTLT.LyThuyet.Buoi1a {
class BaiTap1 {
public static void InputArray1(out int[] arr){
// Nhậ p số lượng phầ n tử
int n = 0;
Console.Write("M ời bạn nhậ p số phần tử của mảng: ");
n = int.Parse(Console.ReadLine());
// Khở i tạo
arr = new int[n];
// Nhậ p giá trị các phần tử của mảng
Console.WriteLine("Mờ i bạn nhập {0} phầ n tử của mảng: ", arr.Length);
for( int i=0; i<arr.Length; ++i) {
Console.Write("+ Nhậ p phầ n tử {0}: ", i);
arr[i] = int.Parse(Console.ReadLine());
}
}
public static int[] InputArray2() {
int[] arr = null ;
// Nhậ p số lượng phầ n tử
int n = 0;
Console.Write("M ời bạn nhậ p số phần tử của mảng: ");
n = int.Parse(Console.ReadLine());
// Khở i tạo
arr = new int[n];
// Nhậ p giá trị các phần tử của mảng
Console.WriteLine("Mờ i bạn nhậ p {0} phầ n tử của mảng: ", arr.Length);
public static void InpuElements(int[] arr) {
// Nhậ p giá trị các phần tử của mảng
Console.WriteLine("Mờ i bạn nhập {0} phầ n tử của mảng: ", arr.Length);
for( int i=0; i<arr.Length; ++i) {
Console.Write("+ Nhậ p phầ n tử {0}: ", i);
arr[i] = int.Parse(Console.ReadLine());
}
}
public static void InputRandomElements(int[] arr, int from, int to) {
// Khở i tạo lớp sinh số ngẫu nhiên
Random rnd = new Random();
// Nhậ p giá trị ngẫu nhiên cho các phầ n tử của mảng
for( int i=0; i<arr.Length; ++i) {
arr[i] = rnd.Next(from, to);
}
}
public static void PrintArray(int[] arr){
Console.Write("M ảng có {0} phầ n tử: ", arr.Length);
for( int i=0; i<arr.Length; ++i)
Console.Write("{0} ", arr[i]);
Console.WriteLine();
}
public static void Main(string [] args){
Console.WriteLine(" ----------" );
Console.WriteLine("Buổ i 1 - Bài tậ p 1");
Console.WriteLine(" ----------" );
// int[] arr3 = new int[5];
// InputElements(arr3);
// PrintArray(arr3);
int[] arr4 = new int[5];
InputRandomElements(arr4, 100, 200);
PrintArray(arr4);
Console.WriteLine(" ----------" );
Console.WriteLine("Kế t thúc chương trình!");
}
}
}
• Hiển thị tiếng Việt trên Console:
o Click phả i lên thanh tiêu đề Console Chọn Properties
Bài 3 (BaiTap2.cs – Slide 13) Minh họa List
Viết chương trình thự c hiện các yêu cầ u sau:
a) Khai báo và khở i tạo một List số nguyên. In ra màn hình giá trị thuộc tính Count và Capacity của List
b) Thêm lần lượt các số nguyên từ 1 đến 10 vào cuối List. Sau mỗ i lượt thêm in ra màn hình giá trị các
phần tử hiện có trong List, các thuộc tính Count và Capacity của List
c) Lần lượt xóa phầ n tử ở đầu List cho đế n khi hế t danh sách. Sau mỗi lượt xóa in ra màn hình giá trị các
phần tử hiện có trong List, các thuộc tính Count và Capacity của List
Hướng dẫn
BaiTap2.cs
namespace KTLT.LyThuyet.Buoi1a {
class BaiTap2 {
public static void Main(string [] args){
// a) Khai báo và khở i tạo một List số nguyên. In ra màn hình giá trị thuộc tính
Count và Capacity củ a List
List<int> list1 = new List<int>(5) { 1, 2, 5};
Console.WriteLine("Danh sách hiệ n tại có {0} phầ n tử, với sức chứ a tối đa {1}
phần tử.", list1.Count, list1.Capacity);
Console.WriteLine(" ----------" );
// b) Thêm lầ n lượ t các số nguyên từ 1 đến 10 vào cuố i List. Sau mỗi lượt thêm
in ra màn hình giá trị các phầ n tử hiện có trong List, các thuộc tính Count và Capacity củ a
List
for( int i=1; i<=10; ++i) {
list1.Add(i);
Console.WriteLine( "Thêm giá trị {0} vào cuố i danh sách.", i);
// c) Lầ n lượ t xóa phầ n tử ở đầu List cho đế n khi hế t danh sách. Sau mỗ i lượ t
xóa in ra màn hình giá trị các phầ n tử hiện có trong List, các thuộ c tính Count và Capacity
của List
while(list1.Coun t>0){
int val = list1[0];
list1.RemoveAt(0);
Console.WriteLine( "Xóa phầ n tử tại đầu danh sách có giá trị {0}.", val);
Console.WriteLine( "==> Số phần tử hiện tại là {0} với sức chứ a tối đa {1}." ,
list1.Count, list1.Capacity);
Console.WriteLine( "");
}
Console.WriteLine(" ----------" );
}
}
}
Output
Danh sách hiện tại có 3 phần tử, với sức chứa tối đa 5 phần tử.
----------
Thêm giá trị 1 vào cuối danh sách.
==> Số phần tử hiện tại là 4 với sức chứa tối đa 5.
Thêm giá trị 2 vào cuối danh sách.
==> Số phần tử hiện tại là 5 với sức chứa tối đa 5.
Thêm giá trị 3 vào cuối danh sách.
==> Số phần tử hiện tại là 6 với sức chứa tối đa 10.
Thêm giá trị 4 vào cuối danh sách.
==> Số phần tử hiện tại là 7 với sức chứa tối đa 10.
Thêm giá trị 5 vào cuối danh sách.
==> Số phần tử hiện tại là 8 với sức chứa tối đa 10.
Thêm giá trị 6 vào cuối danh sách.
==> Số phần tử hiện tại là 9 với sức chứa tối đa 10.
Thêm giá trị 7 vào cuối danh sách.
==> Số phần tử hiện tại là 10 với sức chứa tối đa 10.
Thêm giá trị 8 vào cuối danh sách.
==> Số phần tử hiện tại là 11 với sức chứa tối đa 20.
Thêm giá trị 9 vào cuối danh sách.
==> Số phần tử hiện tại là 12 với sức chứa tối đa 20.
Thêm giá trị 10 vào cuối danh sách.
==> Số phần tử hiện tại là 13 với sức chứa tối đa 20.
----------
Xóa phần tử tại đầu danh sách có giá trị 1.
==> Số phần tử hiện tại là 12 với sức chứa tối đa 20.
Xóa phần tử tại đầu danh sách có giá trị 2.
==> Số phần tử hiện tại là 11 với sức chứa tối đa 20.
Câu 02. Cho số tự nhiên n. Hãy tính tổng bình phương các chữ số chẵn của n. Ví dụ: n=421 thì tổng bình
phương các chữ số chẵn là 4^2 + 2^2 = 20.
Các anh (chị) hãy thực hiện các yêu cầu sau:
(a) Viết nguyên mẫu hàm của hàm tổng bình phương các chữ số chẵn (tongBinhPhuongChuSoChan) của
một số tự nhiên
(b) Viết cài đặt hàm kiểm tra tính đúng đắ n (kiemTraTongBinhPhuongChuSoChan) cho hàm
tongBinhPhuongChuSoChan.
(c) Viết cài đặt hàm cho hàm tongBinhPhuongChuSoChan.
Câu 03. Cho dãy số A chứa các số nguyên có n phần tử (1 ≤ n ≤ 100). Hãy tính tổng các số nguyên tố có
trong dãy A. Ví dụ: A[] = { 2, 17, 25, 11, 4 }, t ổng các số nguyên tố trong A = 2 + 17 + 11 = 30.
Một nhóm lập trình Alpha được giao nhiệm vụ thực hiện các hàm có chức năng sau:
• Kiểm tra một s ố nguyên có phả i là số nguyên tố (kiemTraNguyenTo)
• Nhập dãy số nguyên từ bàn phím (nhapDay)
• Xuất dãy số nguyên ra màn hình (xuatDay)
Nhóm lập trình Beta được giao nhiệm vụ thực hiện các hàm có chức năng sau:
• Tính tổng các số nguyên tố trong dãy số nguyên cho trước (tongSoNT)
Các anh (chị) hãy thực hiện các yêu cầu sau:
(a) Viết nguyên mẫu hàm cho các hàm kiemTraNguyenTo , tongSoNT, nhapDay, xuatDay để thống nhấ t
cho Alpha, Beta. Cho ví dụ dữ liệu vào và ra với nguyên mẫu hàm kiemTraNguyenTo, tongSoNT.
(b) Viết cài đặt hàm Main theo yêu cầu đề bài (được phép sử dụng các hàm mô tả ở trên nếu cần thiết).
(c) Viết cài đặt cho hàm tongSoNT (được phép sử dụng các hàm mô tả ở trên nếu cần thiết).