Bài tập 1- Các kỹ thuật lập trình làm việc với biến, dữ liệu và các cấu trúc lập trình - Pdf 25

1
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
BÀI TẬP NHÓM MÔN HỌC
BÀI TẬP KĨ THUẬT LẬP TRÌNH NĂM HỌC 2012

Hà Nội 2012
BÀI TẬP 1- PHÂN TÍCH BÀI TOÁN
LẬP TRÌNH
Giảng viên hướng dẫn : PGS. TS. Huỳnh Quyết Thắng
Nhóm học viên :Mai Tiến Khải
Nghiêm Xuân Đức
Lê Sơn Hải

Lớp :KSTN-CNTT K55
Bài tập 1- Các kỹ thuật lập trình làm việc với biến, dữ liệu và các cấu trúc lập trình
Mục lục
1.2) Một số vấn đề về sử dụng dữ liệu
2.1) Các vấn đề cơ bản về đặt tên biến.
2.2) Đặt tên từng kiểu dữ liệu.
2.3) Các tên viết tắt.
2.4) Những loại tên cần tránh:
Chương 3 nhũng kiểu sữ kiệu cơ bản
3.1) Tổng quan về số:
3.2) Số nguyên:
3.3) Số thực dấu phẩy động:
3.4) Xâu và kí tự:
3.5)
3.6) Biến Boolean:
3.7) Kiểu liệt kê:
3.8) Hằng:

Bài tập 1- Các kỹ thuật lập trình làm việc với biến, dữ liệu và các cấu trúc lập trình
Lời mở đầu
4
Mai Tiến Khải–Nghiêm Xuân Đức-Lê Sơn Hải KSTN-CNTT K55
Bài tập 1- Các kỹ thuật lập trình làm việc với biến, dữ liệu và các cấu trúc lập trình
Chương 1:Các vấn đề cơ bản trong sử dụng
biến
1.1) Khởi tạo biến
- Khai báo biến gần nơi nó được sử dụng lần đầu, tránh khai báo ngầm.
- Nên khởi tạo giá trị của biến ngay khi khai báo. (Trong trường hợp
ngôn ngữ lập trình không cho phép thì nên khởi tạo biến gần với nơi nó được sử
dụng lần đầu).
- Luôn chú ý đến các biến đếm, nên khởi tạo lại chúng mỗi lần sử dụng.
- Kiểm tra sự cần thiết của việc khởi tạo lại biến trong những đoạn mã
chạy lặp lại nhiều lần (ví dụ như vòng lặp).
Ví dụ 1: Chương trình giải phương trình bậc 2.
import java.util.Scanner;
public class QuadraticEquationSolution {
public static void main(String[] args) {
Scanner nhap = new Scanner(System.in);
System.out.println("Nhập vào giá trị cho a ");
float a = nhap.nextInt();
System.out.println("Nhập vào giá trị cho b ");
float b = nhap.nextInt();
System.out.println("Nhập vào giá trị cho c ");
float c = nhap.nextInt()
if(a == 0) {
if(b == 0) {
if(c == 0)
5

Bài tập 1- Các kỹ thuật lập trình làm việc với biến, dữ liệu và các cấu trúc lập trình
Ví dụ 2: Chương trình nhập vào một mảng nguyên, tìm phần từ lớn nhất, nhỏ
nhất trong mảng
import java.io.*;
public class MinMax {
public static void main (String[] args) throws Exception {
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
System.out.print("Nhap so phan tu co trong mang n: ");
int n = Integer . parseInt(in.readLine());
int a[] = new int[n];
int i;
for (i = 0; i < n; i++) {
System.out.print("Nhap a["+i+"]: ");
a[i] = Integer . parseInt(in.readLine());
}
int min=a[0];
int max=a[0];
for(i=0;i<n;i++) {
if(a[i]<min)
min=a[i];

else
max=a[i];
}
System.out.println("So nho nhat la: "+min);
System.out.println("So lon nhat la: "+max);
}
}
7

}
Trong ví dụ trên: tất cả các biến đều được khai báo rõ ràng, có ý nghĩa,
đều được cục bộ hóa, được sử dụng (cho chỉ một mục đích) và có thời gian sống
ngắn.

9
Mai Tiến Khải–Nghiêm Xuân Đức-Lê Sơn Hải KSTN-CNTT K55
Bài tập 1- Các kỹ thuật lập trình làm việc với biến, dữ liệu và các cấu trúc lập trình
Chương 2 : Đặt tên biến
2.1) Các vấn đề cơ bản về đặt tên biến.
- Tên biến mô tả đầy đủ, đúng và chính xác đối tượng mà nó đại diện.
- Tên biến cần liên quan đến vấn đề cần giải quyết hơn là cách giải
quyết vấn đề đó.
- Tên biến có độ dài phù hợp (khoảng 8-20 ký tự).
- Các biến mang giá trị tính toán như: max, min, sum, total… nên đặt
kiểu tính toán đó ở cuối tên biến.
- Nên sử dụng Count và Index thay vì Num để tránh gây rối loạn, nhầm
lẫn.
- Sử dụng quy ước đặt tên với từng loại ngôn ngữ cụ thể. Ví dụ như
Java Convention.
Ví dụ: Chương trình kiểm tra một sô tự nhiên nhập vào từ bàn phím có phải số
nguyên tố không.
import java.util.*;
public class IsPrime {
public static void main (String[] args) throws Exception {
Scanner scan=new Scanner(System.in);
10
Mai Tiến Khải–Nghiêm Xuân Đức-Lê Sơn Hải KSTN-CNTT K55
Bài tập 1- Các kỹ thuật lập trình làm việc với biến, dữ liệu và các cấu trúc lập trình
System.out.print("Nhap so tu nhien can kiem tra:");

public static boolean isPrime(int soKiemTra) {
boolean checkPrime = true;
if (soKiemTra == 1)
checkPrime = false;
else {
for (int i = 2; i <= Math.sqrt (soKiemTra); i++) {
if (soKiemTra % i == 0) {
checkPrime = false;
break;
}
}
}
return checkPrime;
}
public static void main (String[] args) throws Exception {
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
System.out.print("Nhap so phan tu co trong mang n: ");
int n = Integer . parseInt(in.readLine());
int a[] = new int[n];
12
Mai Tiến Khải–Nghiêm Xuân Đức-Lê Sơn Hải KSTN-CNTT K55
Bài tập 1- Các kỹ thuật lập trình làm việc với biến, dữ liệu và các cấu trúc lập trình
for (int i = 0; i < n; i++) {
System.out.print("Nhap a["+i+"]: ");
a[i] = Integer . parseInt(in.readLine());
}
int arraySum = 0;
for (int i = 0; i < n; i++) {
if (isPrime(a[i]) == true)

- Những tên, viết tắt gây nhầm lẫn, đa nghĩa.
- Những tên có nghĩa giống nhhau.
Ví dụ: arrayNum và arrayNo
- Những tên chỉ khác nhau một ký tự.
Ví dụ: dataRecs và dataReps
- Những tên nghe có vẻ giống nhau.
Ví dụ: wrap, swap
- Những tên có ký tự số.
Ví dụ: a1, a2, a3
- Những tên thường hay hoặc cố ý viết sai chính tả.
Ví dụ: accumulate viết thành acumulate
14
Mai Tiến Khải–Nghiêm Xuân Đức-Lê Sơn Hải KSTN-CNTT K55
Bài tập 1- Các kỹ thuật lập trình làm việc với biến, dữ liệu và các cấu trúc lập trình
- Những tên chứa nhiều ngôn ngữ khác nhau
- Những tên đặt bừa bãi không liên quan đến giá trị nó đại diện.
- Những tên trùng với những từ dùng trong ngôn ngữ lập trình.
Ví dụ: public, math
Chương 3: Những kiểu dữ liệu cơ bản
3.1) Tổng quan về số:
+) Tránh sử dụng “magic number”:
- “Magic number” là những số như 23, 5724 xuất hiện ở giữa
chương trình mà không được giải thích. Ta nên sử dụng hằng để
thay thế cho chúng.
+) Dự đoán trước lỗi chia cho 0:
- Mỗi lần sử dụng đến phép chia, hãy nghĩ đến khả năng của số
chia là 0. Nếu có, viết code để ngăn điều này xảy ra.
+) Ép kiểu một cách tường minh:
- Ép kiểu tường minh để người đọc sẽ biết được khi nào việc
chuyển đổi dữ liệu diễn ra

if (diemTb == 50.0)
System.out.println("Chuc mung doi da dat diem toi da!");
System.out.println("Nhap vao so nguoi trong to: ");
int soNguoi = console.nextInt();
/* kiem tra xem so chia co the bang 0 hay khong */
if (soNguoi != 0) {
float diemTbCaNhan = diemTb / soNguoi;
System.out.println("Diem trung binh cho moi ca nhan la: "
+ diemTbCaNhan);
} else
System.out.println("So nguoi khong the bang khong!");
}
}
3.2) Số nguyên:
+) Chú ý việc chia nguyên
16
Mai Tiến Khải–Nghiêm Xuân Đức-Lê Sơn Hải KSTN-CNTT K55
Bài tập 1- Các kỹ thuật lập trình làm việc với biến, dữ liệu và các cấu trúc lập trình
+) Chú ý kiểm tra lỗi tràn số
- Không chỉ chú ý lỗi tràn số ở kết quả cuối cùng, cần nghĩ đến
việc có thể bị tràn số ở kết quả trung gian.
Ví dụ:
package com.xuanduc987.example;
import java.util.*;
public class Example2 {
public static void main(String[] args) {
int soA = 0;
int soB = 0;
float giaTri = 0;
Scanner console = new Scanner(System.in);

public static boolean equal(float a, float b) {
return (Math.abs(a - b) < SAI_SO_CHAP_NHAN_DUOC);
}
public static void main(String[] args) {
float giaTri = 0;
for (int i = 0; i < 100; ++i)
giaTri += 0.01;
if (giaTri == 1)
System.out.println("giaTri = 1 la dung");
else
System.out.println("giaTri = 1 la sai");
if (equal(giaTri, 1))
System.out.println("giaTri equal 1 la dung");
else
System.out.println("giaTri equal 1 la sai");
}
}
/*
* OUTPUT:
* giaTri = 1 la sai
* giaTri equal 1 la dung
18
Mai Tiến Khải–Nghiêm Xuân Đức-Lê Sơn Hải KSTN-CNTT K55
Bài tập 1- Các kỹ thuật lập trình làm việc với biến, dữ liệu và các cấu trúc lập trình
*/
Ở đây do làm tròn số nên giaTri không bằng 1. Cho nên, để so sánh, ta
dùng method equal, so sánh |giaTri – 1| với SAI_SO_CHAP_NHAN_DUOC.
7.4) Xâu và kí tự:
+) Tránh “magic character” và “magic string”:
- Giống ở kiểu dữ liệu số, nên dùng hằng để thay thế chúng.

}
}
Ở đây ta dùng 2 biến Boolean quaGioiHan và chiSoAm để chương trình
dễ đọc, dễ hiểu hơn: biểu thức
(quaGioiHan || chiSoAm) dễ hiểu hơn ((index >= maxIndex) || (index <
0))
7.6) Kiểu liệt kê:
+) Dùng kiểu liệt kê thay cho hằng để cải thiện sự dễ đọc, sự ổn định,
và dễ thay đổi:
- Dễ đọc: (chosenColor == Color.red) dễ hiểu hơn nhiều so với
(chosenColor == 1)
- Tăng sự ổn định: khi đặt chosenColor là kiểu Color, không thể
gán chosenColor = 1 hay gán chosenColor = Device.phone
- Dễ sửa đổi: Nếu không dùng kiểu liệt kê, ta phải quy ước 1 là
red, 2 là blue,… nếu phát hiện ra cách qui ước đó không hợp lí,
ta phải sửa lại hết nhứng số 1, 2,… trong chương trình.
Ví dụ:
package com.xuanduc987.example;
import java.util.Random;
enum Color {
RED, BLUE, YELLOW, BLACK, WHITE
}
public class Example5 {
public static void main(String[] args) {
Color color = Color.BLACK;
Random random = new Random();
20
Mai Tiến Khải–Nghiêm Xuân Đức-Lê Sơn Hải KSTN-CNTT K55
Bài tập 1- Các kỹ thuật lập trình làm việc với biến, dữ liệu và các cấu trúc lập trình
int i = random.nextInt(5);

21
Mai Tiến Khải–Nghiêm Xuân Đức-Lê Sơn Hải KSTN-CNTT K55
Bài tập 1- Các kỹ thuật lập trình làm việc với biến, dữ liệu và các cấu trúc lập trình
FALSE, OUT_OF_RANGE, NEGATIVE_INDEX
}
public class Example6 {
final static int MAX_INDEX = 10;
public static Error isError(int index) {
if (index >= MAX_INDEX)
return Error.OUT_OF_RANGE;
if (index < 0)
return Error.NEGATIVE_INDEX;
return Error.FALSE;
}
public static void main(String[] args) {
int[] mangSo = new int[MAX_INDEX];
System.out.print(“Nhap vao chi so phan tu can nhap: “);
Scanner console = new Scanner(System.in);
int index = Integer.parseInt(console.nextLine());
switch (isError(index)) {
case FALSE:
System.out.print(“Nhap vao phan tu mangSo[“ + (index) +
“] : “);
mangSo[index] = Integer.parseInt(console.nextLine());
break;
case OUT_OF_RANGE:
System.out.println(“index vuot gioi han”);
break;
case NEGATIVE_INDEX:
System.out.println(“Chi so am”);

diemTb += (float) mangDiemThiDua[i]; /* ep kieu mot cach
tuong minh */
}
diemTb = diemTb / NUMBER_OF_MONTH;
System.out.println("Diem thi dua trung binh cua ca to la: " +
diemTb);
if (diemTb == 50.0)
System.out.println("Chuc mung doi da dat diem toi da!");
System.out.println("Nhap vao so nguoi trong to: ");
23
Mai Tiến Khải–Nghiêm Xuân Đức-Lê Sơn Hải KSTN-CNTT K55
Bài tập 1- Các kỹ thuật lập trình làm việc với biến, dữ liệu và các cấu trúc lập trình
int soNguoi = console.nextInt();
/* kiem tra xem so chia co the bang 0 hay khong */
if (soNguoi != 0) {
float diemTbCaNhan = diemTb / soNguoi;
System.out.println("Diem trung binh cho moi ca nhan la: "
+ diemTbCaNhan);
} else
System.out.println("So nguoi khong the bang khong!");
}
}
7.8) Mảng:
+)Tất cả chỉ số phải trong giới hạn:
- Ta có thể truy cập một cách tự do các phần tử nằm trong mảng,
có chỉ số trong giới hạn nhất định. Nếu ta thử truy cập phần tử
nằm ngoài giới hạn ấy, chương trình sẽ báo lỗi.
+) Tránh lỗi “off-by-one”:
- Mảng được đánh số từ 0, nên mảng có n phần tử thì phần tử thứ
n có chỉ số n-1

= ");
matranB[i][j] =
Integer.parseInt(console.nextLine());
}
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
matranC[i][j] = matranA[i][j] + matranB[i][j];
System.out.println("Matran c = a + b la: ");
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j) {
System.out.printf("%5d", matranC[i][j]);
if (j == n - 1)
System.out.print('\n');
}
}
}
25
Mai Tiến Khải–Nghiêm Xuân Đức-Lê Sơn Hải KSTN-CNTT K55

Trích đoạn những lưu ý về code else-if chọn loại vòng lặp cho hợp lí Bên trong vòng lặp
Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status