Giao diện mới của VnDoc Pro: Dễ sử dụng hơn - chỉ tập trung vào lớp bạn quan tâm. Vui lòng chọn lớp mà bạn quan tâm: Lưu và trải nghiệm

Tin học 11 Cánh diều bài 6: Kiểm thử và sửa lỗi chương trình

Giải Tin học 11 Cánh diều bài 6: Kiểm thử và sửa lỗi chương trình

Tin học 11 Cánh diều bài 6: Kiểm thử và sửa lỗi chương trình được VnDoc.com sưu tầm và xin gửi tới bạn đọc cùng tham khảo. Mời các bạn cùng theo dõi để có thêm tài liệu giải SGK Tin học 11 Cánh diều nhé.

Khởi động

Câu hỏi. Theo em, tại sao rất ít khi viết chương trình xong có thể chạy được ngay?

Bài làm

Bởi vì chương trình vừa viết xong còn lỗi và chưa được sửa

Một số kinh nghiệm thực hành gỡ lỗi chương trình

Câu hỏi. Hãy cho một số ví dụ ca kiểm thử:

1) Chương trình giải phương trình bậc hai.

2) Chương trình tính đếm (tính tổng, tính trung bình cộng....) các số dương trong một mảng số thực.

Bài làm

a) Gợi ý:

Ý tưởng

Dùng một vòng do while để nhập a, b, c nếu a = 0, thì nhập lại.

Chúng ta dùng hàm sqrt() trong thư viện math.h để tính căn delta hoặc tính căn không dùng hàm sqrt()tại đây.

Chúng ta tạo hàm giaiPT trả về kiểu int chính là số nghiệm của phương trình (1).

Chúng ta sẽ đưa tham chiếu 2 biến x1 , x2 vào hàm giaiPT để gán giá trị hai nghiệm.

Nếu pt (1) vô nghiện thì giaiPT sẽ trả về 0 , đồng thời gán x1 = x2 =0 .

Nếu pt (1) có nghiệm kép thì giaiPT sẽ trả về 1 , đồng thời gán x1 = x2 = -b/2a .

Nếu pt (1) có 2 nghiệm thì giaiPT sẽ trả về 2 , gán x1 = (-b+√delta ) / 2a x = (-b-√delta ) / 2a .

b) Gợi ý:

#include <iostream>

using namespace std;

void nhap(int &n, int a[]){

for(int i=0;i<n;i++){

cout<<"a["<<i+1<<"]= ";cin>>a[i];

}

}

void xuat(int n, int a[]){

for(int i=0;i<n;i++){

cout<<a[i]<<" ";

}

}

int tinhTBCongint (int n, int a[]){

int sum=0, dem=0;

for(int i=0;i<n;i++){

sum+=a[i]; dem++;

}

return sum/n;

}

int tinhTBCongDuong(int n, int a[]){

int sum=0, dem=0;

for(int i=0;i<n;i++){

if(a[i] > 0) {

sum+=a[i]; dem++;

}

}

if(dem==0) return 0;

return sum/dem;

}

int tinhTBCongAm(int n, int a[]){

int sum=0, dem=0;

for(int i=0;i<n;i++){

if(a[i]<0) {

sum+=a[i]; dem++;

}

}

if(dem==0) return 0;

return sum/dem;

}

int main(){

int n;

int a[100];

do{

cout<<"Nhap n: "; cin>>n;

}while(n <= 0 || n >=100);

nhap(n,a);

cout<<"\n--------XUAT MANG----\n";

xuat(n,a);

cout<<"Trung binh cong: "<<tinhTBCongint(n,a)<<"\n\n";

cout<<"Trung binh so duong: "<<tinhTBCongDuong(n,a)<<"\n\n";

cout<<"Trung binh so am: "<<tinhTBCongAm(n,a)<<"\n\n";

}

Luyện tập

Câu 1. Có các loại lỗi chương trình nào? Nguyên nhân gây ra loại lỗi đó có thể là gì?

Bài làm

Lỗi cú pháp

Lỗi thực thi

Lỗi logic

Câu 2. Hãy nêu một vài thói quen lập trình tốt để chương trình ít lỗi và dễ gỡ lỗi.

Bài làm

- Đặt tên biến và hàm rõ ràng và mô tả đúng chức năng của chúng.

- Sử dụng các lời gọi hàm phù hợp để tái sử dụng mã.

- Đặt các phần của mã trong các hàm và lớp để dễ dàng tái sử dụng và kiểm thử.

- Sử dụng các phương thức kiểm thử để đảm bảo rằng chương trình hoạt động đúng và dễ dàng gỡ lỗi khi có lỗi.

Vận dụng

Câu 1. Em hãy liệt kê một số ca kiểm thử cho chương trình:

a) Tìm số x trong một dãy số (đã cho cụ thể).

b) Sắp xếp một dãy số.

Bài làm

a) Gợi ý

Bước 1: Ta khai báo một mảng tĩnh số nguyên có 100 ô nhớ int a[100].

Bước 2: Ta khai báo số nguyên int n là số lượng phần tử có trong mảng với điều kiện n>1 hoặc n<100 nếu không thỏa mãn thì yêu cầu nhập lại n.

Bước 3: Ta khỏi tạo hàm void Nhap(int a[], int n) dùng để nhập dữ liệu từ bàn phím cho mảng. Trong hàm ta sử dụng vòng for bắt đầu từ int i =0 và kết thúc khi i<n và mỗi lần i tăng lên một để nhập dữ liệu cho từng phần tử từ a[0] đến a[n-1], trong vòng for thì nhập vào dữ liệu của a[i].

Bước 4: Ta khởi tạo hàm void Xuat(int a[], int n) dùng để hiển thị dữ liệu từ mảng ra màn hình. Trong hàm ta sử dụng vòng for bắt đầu từ int i =0 và kết thúc khi i<n và mỗi lần i tăng lên một để hiển thị dữ liệu của từng phần tử từ a[0] đến a[n-1] ra màn hình, trong vòng for in a[i] ra màn hình.

Bước 5: Ta khởi tạo hàm int TimKiem(int a[], int n) dùng để tìm kiếm phần tử; ta khai báo biến int x là số cần tìm và nhập vào giá trị của x; tiếp theo sử dụng vòng lặp for bắt đầu từ int i =0 và kết thúc khi i<n và mỗi lần i tăng lên một để hiển thị dữ liệu của từng phần tử có trong mảng; trong vòng lặp ta dùng if với điều kiện nếu a[i]==x thỏa mãn thì ta in i ra màn hình.

Bước 6: Trong hàm main ta gọi hàm Nhap(a,n), Xuat(a,n) để hiển thị mảng gốc ta gọi thêm hàm TimKiem(a,n) rồi chạy chương trình.

b) Sắp xếp một dãy số giảm dần

#include <stdio.h>

int main(){

int a[100];

int n;

printf("\nNhap so luong phan tu n = ");

do{

scanf("%d", &n);

if(n <= 0){

printf("\nNhap lai n = ");

}

}while(n <= 0);

for(int i = 0; i < n; i++){

printf("\nNhap a[%d] = ",i);

scanf("%d", &a[i]);

}

// Sap xep dung thuat toan sap xep chon

int tg;

for(int i = 0; i < n - 1; i++){

for(int j = i + 1; j < n; j++){

if(a[i] < a[j]){

// Hoan vi 2 so a[i] va a[j]

tg = a[i];

a[i] = a[j];

a[j] = tg;

}

}

}

printf("\nMang da sap xep la: ");

for(int i = 0; i < n; i++){

printf("%5d", a[i]);

}

}

----------------------------------------------

Bài tiếp theo: Tin học 11 Cánh diều bài 7: Lập trình giải bài toán tìm kiếm

VnDoc.com vừa gửi tới bạn đọc bài viết Tin học 11 Cánh diều bài 6: Kiểm thử và sửa lỗi chương trình. Mời các bạn cùng tham khảo thêm tại mục Tin học 11 cánh diều.

Chia sẻ, đánh giá bài viết
1
Sắp xếp theo
    🖼️

    Gợi ý cho bạn

    Xem thêm
    🖼️

    Tin học 11 Cánh diều

    Xem thêm