Bài tập C# có lời giải – VietTuts

Bài này cung cấp cho bạn danh sách các bài tập Csharp có lời giải ở các cấp độ khác nhau để bạn thực hành khi học ngôn ngữ lập trình Csharp:

Bài tập C# kinh điển

Bài 01: Viết một chương trình C# in ra dãy số Fibonacci

Gợi ý:

  • Sử dụng đệ quy
  • Không sử dụng đệ quy

Code mẫu: In dãy số Fibonacci trong C không sử dụng đệ quy.


using System;
using System.Collections;
namespace VietTutsCsharp
{
    class Program
    {
        static void Main(string[] args)
        {
            int i;
            Console.Write("10 so dau tien cua day so Fibonacci: \n");
            for (i = 0; i < 10; i++)
            {
                Console.Write("{0} ", fibonacci(i));
            }
        
            Console.WriteLine();
            Console.ReadKey();
        }


        /**
         * Tinh so Fibonacci thu n
         * 
         * @param n: chi so cua so Fibonacci tinh tu 0 
         *           vd: F0 = 0, F1 = 1, F2 = 1, F3 = 2
         * @return So Fibonacci thu n
         */
        static int fibonacci(int n)
        {
            int f0 = 0;
            int f1 = 1;
            int fn = 1;
            int i;

            if (n < 0)
            {
                return -1;
            }
            else if (n == 0 || n == 1)
            {
                return n;
            }
            else
            {
                for (i = 2; i < n; i++)
                {
                    f0 = f1;
                    f1 = fn;
                    fn = f0 + f1;
                }
            }
            return fn;
        }
    }
}

Kết quả:

10 so dau tien cua day so Fibonacci: 
0 1 1 2 3 5 8 13 21 34 

Bài 02: Viết một chương tình C kiểm tra số nguyên tố.

Code mẫu:


using System;
using System.Collections;
namespace VietTutsCsharp
{
    class Program
    {
        static void Main(string[] args)
        {
            int i;
            Console.Write("Cac so nguyen to nho hon 100 la: \n");
            for (i = 0; i < 100; i++)
            {
                if (isPrimeNumber(i))
                {
                    Console.Write("{0} ", i);
                }
            }

            Console.WriteLine();
            Console.ReadKey();
        }


        /**
     * check so nguyen to trong C
     * 
     * @author viettuts.vn
     * @param n: so nguyen duong
     * @return 1 la so nguyen so, 
     *         0 khong la so nguyen to
     */
        static Boolean isPrimeNumber(int n)
        {
            // so nguyen n < 2 khong phai la so nguyen to
            if (n < 2)
            {
                return false;
            }
            // check so nguyen to khi n >= 2
            int squareRoot = (int)Math.Sqrt(n);
            int i;
            for (i = 2; i <= squareRoot; i++)
            {
                if (n % i == 0)
                {
                    return false;
                }
            }
            return true;
        }
    }
}

Kết quả:

Cac so nguyen to nho hon 100 la: 
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 

Bài 03: Viết một chương trình C# tính giai thừa của một số bằng cách không sử dụng đệ quy và có sử dụng đệ quy.

Gợi ý:

  • Sử dụng đệ quy
  • Không sử dụng đệ quy

Code mẫu: Tính giai thừa trong C không sử dụng đệ quy.


using System;
using System.Collections;
namespace VietTutsCsharp
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 5;
            int b = 0;
            int c = 10;
            Console.Write("Giai thua cua {0}  la: {1} \n", a, tinhGiaithua(a));
            Console.Write("Giai thua cua {0}  la: {1} \n", b, tinhGiaithua(b));
            Console.Write("Giai thua cua {0}  la: {1} \n", c, tinhGiaithua(c));

            Console.WriteLine();
            Console.ReadKey();
        }


        /**
        * tinh giai thua
        * 
        * @author viettuts.vn
        * @param n: so nguyen duong
        * @return giai thua cua so n
        */
        static long tinhGiaithua(int n)
        {
            int i;
            long giai_thua = 1;
            if (n == 0 || n == 1)
            {
                return giai_thua;
            }
            else
            {
                for (i = 2; i <= n; i++)
                {
                    giai_thua *= i;
                }
                return giai_thua;
            }
        }
    }
}

Kết quả:

Giai thua cua 5  la: 120
Giai thua cua 0  la: 1
Giai thua cua 10  la: 3628800

Bài 04: Viết một chương trình C# để chuyển đổi số nguyên N sang hệ cơ số B (2 <= B <= 32) bất kỳ.

Code mẫu: Chuyển đối hệ cơ số 10 sang hệ cơ số B


using System;
using System.Collections;
namespace VietTutsCsharp
{
    class Program
    {
        public static int CHAR_55 = 55;
        public static int CHAR_48 = 48;

        static void Main(string[] args)
        {
            int n = 14;
            Console.Write("So {0} trong he co so 2 = ", n);
            convertNumber(n, 2);
            Console.Write("\nSo {0} trong he co so 16 = ", n);
            convertNumber(n, 16);

            Console.WriteLine();
            Console.ReadKey();
        }


        /**
         * chuyen doi so nguyen n sang he co so b
         * 
         * @author viettuts.vn
         * @param n: so nguyen
         * @param b: he co so
         */
        static int convertNumber(int n, int b)
        {
            if (n < 0 || b < 2 || b > 16)
            {
                Console.Write("He co so hoac gia tri chuyen doi khong hop le!");
                return 0;
            }
            int i;
            char[] arr = new char[20];
            int count = 0;
            int m;
            int remainder = n;
            while (remainder > 0)
            {
                if (b > 10)
                {
                    m = remainder % b;
                    if (m >= 10)
                    {
                        arr[count] = (char)(m + CHAR_55);
                        count++;
                    }
                    else
                    {
                        arr[count] = (char)(m + CHAR_48);
                        count++;
                    }
                }
                else
                {
                    arr[count] = (char)((remainder % b) + CHAR_48);
                    count++;
                }
                remainder = remainder / b;
            }
            // hien thi he co so
            for (i = count - 1; i >= 0; i--)
            {
                Console.Write("{0}", arr[i]);
            }
            return 1;
        }
    }
}

Kết quả:

So 14 trong he co so 2 = 1110
So 14 trong he co so 16 = E

Bài tập C# cơ bản

Danh sách bài tập:

  1. Viết chương trình C# giải phương trình bậc 2: ax2 + bx + c = 0.
  2. Viết chương trình C# tìm ước số chung lớn nhất (UCLN) và bội số chung nhỏ nhất (BCNN) của hai số a và b.
  3. Viết chương trình C# liệt kê tất cả các số nguyên tố nhỏ hơn n.
  4. Viết chương trình C# liệt kê n số nguyên tố đầu tiên.
  5. Viết chương trình C# liệt kê tất cả các số nguyên tố có 5 chữ số.
  6. Viết chương trình C# phân tích số nguyên n thành các thừa số nguyên tố. Ví dụ: 12 = 2 x 2 x 3.
  7. Viết chương trình C# tính tổng các chữ số của một số nguyên n. Ví dụ: 1234 = 1 + 2 + 3 + 4 = 10.
  8. Viết chương trình C# tìm các số thuận nghịch có 6 chữ số. Một số được gọi là số thuận nghịch nếu ta đọc từ trái sang phải hay từ phải sang trái số đó ta vẫn nhận được một số giống nhau. Ví dụ 123321 là một số thuận nghịch.
  9. Nhập số tự nhiên n. Hãy liệt kê các số Fibonacci nhỏ hơn n là số nguyên tố.
  10. Dãy số Fibonacci được định nghĩa như sau: F0 = 0, F1 = 1, F2 = 1, Fn = F(n-1) + F(n-2) với n >= 2. Ví dụ: 0, 1, 1, 2, 3, 5, 8, … Hãy viết chương trình tìm số Fibonacci thứ n.

Bài 01: Viết chương trình C# giải phương trình bậc 2: ax2 + bx + c = 0.

Code mẫu:


using System;
namespace VietTutsCsharp
{
    class Program
    {
        static void Main(string[] args)
        {
            float a, b, c;
            Console.Write("Nhap he so bac 2, a = ");
            a = float.Parse(Console.ReadLine());
            Console.Write("Nhap he so bac 1, b = ");
            b = float.Parse(Console.ReadLine());
            Console.Write("Nhap so hang tu do, c = ");
            c = float.Parse(Console.ReadLine());
            giaiPTBac2(a, b, c);

            Console.WriteLine();
            Console.ReadKey();
        }


        /**
          * giai phuong trinh bac 2: ax2 + bx + c = 0
          * 
          * @param a: he so bac 2
          * @param b: he so bac 1
          * @param c: so hang tu do
          */
        static void giaiPTBac2(float a, float b, float c)
        {
            // kiem tra cac he so
            if (a == 0)
            {
                if (b == 0)
                {
                    Console.WriteLine("Phuong trinh vo nghiem!");
                }
                else
                {
                    Console.WriteLine("Phuong trinh co mot nghiem: x = {0}", (-c / b));
                }
                return;
            }
            // tinh delta
            float delta = b * b - 4 * a * c;
            float x1;
            float x2;
            // tinh nghiem
            if (delta > 0)
            {
                x1 = (float)((-b + Math.Sqrt(delta)) / (2 * a));
                x2 = (float)((-b - Math.Sqrt(delta)) / (2 * a));
                Console.WriteLine("Phuong trinh co 2 nghiem la: x1 = {0} va x2 = {1}", x1, x2);
            }
            else if (delta == 0)
            {
                x1 = (-b / (2 * a));
                Console.WriteLine("Phong trinh co nghiem kep: x1 = x2 = {0}", x1);
            }
            else
            {
                Console.WriteLine("Phuong trinh vo nghiem!");
            }
        }
    }
}

Kết quả:

Nhap he so bac 2, a = 2
Nhap he so bac 1, b = 3
Nhap so hang tu do, c = 1
Phuong trinh co 2 nghiem la: x1 = -0.500000 va x2 = -1.000000

Bài 02: Viết chương trình C# tìm ước số chung lớn nhất (USCLN) và bội số chung nhỏ nhất (BSCNN) của hai số a và b.

Gợi ý:

  • Sử dụng giải thuật Euclid

Code mẫu:


using System;
namespace VietTutsCsharp
{
    class Program
    {
        static void Main(string[] args)
        {
            int a, b;
            Console.Write("Nhap so nguyen duong a = ");
            a = int.Parse(Console.ReadLine());
            Console.Write("Nhap so nguyen duong b = ");
            b = int.Parse(Console.ReadLine());
            // tinh USCLN cua a và b
            Console.WriteLine("USCLN cua {0} va {1} la: {2}", a, b, USCLN(a, b));
            // tinh BSCNN cua a và b
            Console.WriteLine("USCLN cua {0} va {1} la: {2}", a, b, BSCNN(a, b));

            Console.WriteLine();
            Console.ReadKey();
        }


        /**
        * Tim uoc so chung lon nhat (USCLN)
        */
        static int USCLN(int a, int b)
        {
            if (b == 0) return a;
            return USCLN(b, a % b);
        }

        /**
         * Tim boi so chung nho nhat (BSCNN)
         */
        static int BSCNN(int a, int b)
        {
            return (a * b) / USCLN(a, b);
        }
    }
}

Kết quả:

Nhap so nguyen duong a = 6
Nhap so nguyen duong b = 8
USCLN cua 6 va 8 la: 2
USCLN cua 6 va 8 la: 24

Bài 03: Viết chương trình C# liệt kê tất cả các số nguyên tố nhỏ hơn n.

Code mẫu:


using System;
namespace VietTutsCsharp
{
    class Program
    {
        static void Main(string[] args)
        {
            int i, n;
            Console.Write("Nhap n = ");
            n = int.Parse(Console.ReadLine());
            Console.WriteLine("Tat ca cac so nguyen to nho hon {0} la:", n);
            if (n >= 2)
            {
                Console.Write("{0} ", 2);
            }
            for (i = 3; i < n; i += 2)
            {
                if (isPrimeNumber(i) == 1)
                {
                    Console.Write("{0} ", i);
                }
            }

            Console.WriteLine();
            Console.ReadKey();
        }

        /**
         * check so nguyen to
         * 
         * @author viettuts.vn
         * @param n: so nguyen duong
         * @return 1: la so nguyen so, 
         *         0: khong la so nguyen to
         */
        static int isPrimeNumber(int n)
        {
            // so nguyen n < 2 khong phai la so nguyen to
            if (n < 2)
            {
                return 0;
            }
            // check so nguyen to khi n >= 2
            int i;
            int squareRoot = (int) Math.Sqrt(n);
            for (i = 2; i <= squareRoot; i++)
            {
                if (n % i == 0)
                {
                    return 0;
                }
            }
            return 1;
        }
    }
}

Kết quả:

Nhap n = 100
Tat ca cac so nguyen to nho hon 100 la:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

Bài 04: Viết chương trình C# liệt kê n số nguyên tố đầu tiên.

Code mẫu:


using System;
namespace VietTutsCsharp
{
    class Program
    {
        static void Main(string[] args)
        {
            int n;
            Console.Write("Nhap n = ");
            n = int.Parse(Console.ReadLine());
            Console.Write("{0} so nguyen to dau tien la: \n", n);
            int dem = 0; // dem tong so nguyen to
            int i = 2;   // tim so nguyen to bat dau tu so 2
            while (dem < n)
            {
                if (isPrimeNumber(i))
                {
                    Console.Write("{0} ", i);
                    dem++;
                }
                i++;
            }

            Console.WriteLine();
            Console.ReadKey();
        }

        /**
        * check so nguyen to
        * 
        * @author viettuts.vn
        * @param n: so nguyen duong
        * @return 1: la so nguyen so, 
        *         0: khong la so nguyen to
        */
        static Boolean isPrimeNumber(int n)
        {
            // so nguyen n < 2 khong phai la so nguyen to
            if (n < 2)
            {
                return false;
            }
            // check so nguyen to khi n >= 2
            int i;
            int squareRoot = (int) Math.Sqrt(n);
            for (i = 2; i <= squareRoot; i++)
            {
                if (n % i == 0)
                {
                    return false;
                }
            }
            return true;
        }
    }
}

Kết quả:

Nhập n = 10
10 so nguyen to dau tien la: 
2 3 5 7 11 13 17 19 23 29 

Bài 05: Viết chương trình C# liệt kê tất cả các số nguyên tố có 5 chữ số.

Code mẫu:


using System;
namespace VietTutsCsharp
{
    class Program
    {
        static void Main(string[] args)
        {
            int count = 0;
            int i;
            Console.Write("Liet ke tat ca cac so co 5 chu so:");
            for (i = 10001; i < 99999; i += 2)
            {
                if (isPrimeNumber(i))
                {
                    Console.Write("{0}\n", i);
                    count++;
                }
            }
            Console.Write("Tong cac so nguyen to co 5 chu so la: {0}", count);

            Console.WriteLine();
            Console.ReadKey();
        }

        /**
        * check so nguyen to
        * 
        * @author viettuts.vn
        * @param n: so nguyen duong
        * @return 1: la so nguyen so, 
        *         0: khong la so nguyen to
        */
        static Boolean isPrimeNumber(int n)
        {
            // so nguyen n < 2 khong phai la so nguyen to
            if (n < 2)
            {
                return false;
            }
            // check so nguyen to khi n >= 2
            int i;
            int squareRoot = (int) Math.Sqrt(n);
            for (i = 2; i <= squareRoot; i++)
            {
                if (n % i == 0)
                {
                    return false;
                }
            }
            return true;
        }
    }
}

Kết quả:

Liet ke tat ca cac so co 5 chu so:
10007
10009
10037
...
99971
99989
99991
Tong cac so nguyen to co 5 chu so la: 8363

Bài 06: Viết chương trình C# phân tích số nguyên n thành các thừa số nguyên tố. Ví dụ: 12 = 2 x 2 x 3.

Code mẫu:


using System;
namespace VietTutsCsharp
{
    class Program
    {
        static void Main(string[] args)
        {
            int n;
            Console.Write("Nhap so nguyen duong n = ");
            n = int.Parse(Console.ReadLine());
            // phan tich so nguyen duong n
            phanTichSoNguyen(n);

            Console.WriteLine();
            Console.ReadKey();
        }

        /**
       * Phan tich so nguyen n thanh tich cac thua so nguyen to
       */
        static void phanTichSoNguyen(int n)
        {
            int i = 2;
            int dem = 0;
            int [] a = new int[100];
            int originalN = n;
            // phan tich
            while (n > 1)
            {
                if (n % i == 0)
                {
                    n = n / i;
                    a[dem++] = i;
                }
                else
                {
                    i++;
                }
            }
            // neu dem = 0 thi n la nguyen to
            if (dem == 0)
            {
                a[dem++] = n;
            }
            // in ket qua ra man hinh
            Console.Write("{0} = ", originalN);
            for (i = 0; i < dem - 1; i++)
            {
                Console.Write("{0} x ", a[i]);
            }
            Console.Write("{0}", a[dem - 1]);
        }
    }
}

Kết quả:

Nhap so nguyen duong n = 100
100 = 2 x 2 x 5 x 5

Bài 07: Viết chương trình C# tính tổng các chữ số của một số nguyên n. Ví dụ: 1234 = 1 + 2 + 3 + 4 = 10.

Code mẫu:


using System;
namespace VietTutsCsharp
{
    class Program
    {
        static void Main(string[] args)
        {
            int n;
            Console.Write("Nhap so nguyen duong n = ");
            n = int.Parse(Console.ReadLine());
            Console.WriteLine("Tong cac chu so cua {0} la: {1}", n, totalDigitsOfNumber(n));

            Console.WriteLine();
            Console.ReadKey();
        }

        /**
         * Tinh tong cac chu so cua mot so nguyen duong
         */
        static int totalDigitsOfNumber(int n)
        {
            int total = 0;
            int DEC_10 = 10;
            do
            {
                total = total + n % DEC_10;
                n = n / DEC_10;
            } while (n > 0);
            return total;
        }
    }
}

Kết quả:

Nhap so nguyen duong n = 1234
Tong cac chu so cua 1234 la: 10

Bài 08: Viết chương trình C# tìm các số thuận nghịch có 6 chữ số. Một số được gọi là số thuận nghịch nếu ta đọc từ trái sang phải hay từ phải sang trái số đó ta vẫn nhận được một số giống nhau. Ví dụ 123321 là một số thuận nghịch.

Code mẫu:


using System;
namespace VietTutsCsharp
{
    class Program
    {
        static void Main(string[] args)
        {
            int count = 0, i;
            // in ra man hinh cac so thuan nghich co 6 chu so
            for (i = 100000; i < 1000000; i++)
            {
                if (isThuanNghich(i))
                {
                    Console.Write("{0}\n", i);
                    count++;
                }
            }
            Console.Write("Tong cac so thuan nghich co 6 chu so la: {0}", count);

            Console.WriteLine();
            Console.ReadKey();
        }

        /**
         * kiem tra so thuan nghich
         * 
         * @param n: so nguyen duong
         * @return 1: la so thuan nghich
         *         0: khong la so thuan nghich
         */
        static Boolean isThuanNghich(int n)
        {
            int [] a = new int[20];
            int dem = 0, i;
            int DEC_10 = 10;
            // phan tich n thanh mang cac chu so
            do
            {
                a[dem++] = (n % DEC_10);
                n = n / DEC_10;
            } while (n > 0);
            // kiem tra tinh thuan nghich
            for (i = 0; i < (dem / 2); i++)
            {
                if (a[i] != a[(dem - i - 1)])
                {
                    return false;
                }
            }
            return true;
        }
    }
}

Kết quả:

100001
101101
102201
...
997799
998899
999999
Tong cac so thuan nghich co 6 chu so la: 900

Bài 09: Nhập số tự nhiên n. Hãy liệt kê các số Fibonacci nhỏ hơn n là số nguyên tố.

Code mẫu:


using System;
namespace VietTutsCsharp
{
    class Program
    {
        static void Main(string[] args)
        {
            int n;
            Console.Write("Nhap so nguyen duong = ");
            n = int.Parse(Console.ReadLine());
            Console.Write("Cac so fibonacci nho hon {0} va la so nguyen to: ", n);
            int i = 0;
            while (fibonacci(i) < n)
            {
                int fi = fibonacci(i);
                if (isPrimeNumber(fi))
                {
                    Console.Write("{0} ", fi);
                }
                i++;
            }

            Console.WriteLine();
            Console.ReadKey();
        }

        /**
         * Tinh so fibonacci thu n
         * 
         * @param n: chi so cua day fibonacci tinh tu 0
         *           vd: F0 = 0, F1 = 1, F2 = 1, F3 = 2
         * @return so fibonacci thu n
         */
        static int fibonacci(int n)
        {
            if (n < 0)
            {
                return -1;
            }
            else if (n == 0 || n == 1)
            {
                return n;
            }
            else
            {
                return fibonacci(n - 1) + fibonacci(n - 2);
            }
        }

        /**
         * check so nguyen to
         * 
         * @author viettuts.vn
         * @param n: so nguyen duong
         * @return 1: la so nguyen so, 
         *         0: khong la so nguyen to
         */
        static Boolean isPrimeNumber(int n)
        {
            // so nguyen n < 2 khong phai la so nguyen to
            if (n < 2)
            {
                return false;
            }
            // check so nguyen to khi n >= 2
            int i;
            int squareRoot = (int) Math.Sqrt(n);
            for (i = 2; i <= squareRoot; i++)
            {
                if (n % i == 0)
                {
                    return false;
                }
            }
            return true;
        }
    }
}

Kết quả:

Nhap so nguyen duong = 100
Cac so fibonacci nho hon 100 va la so nguyen to: 2 3 5 13 89

Bài tập quản lý sinh viên trong C/C++