1. Trang chủ
  2. » Giáo án - Bài giảng

bai tap C++ 1

16 163 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 16
Dung lượng 35,29 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

 Tính đơn thể modules : Với lập trình cấu trúc, các vấn đề trong lập trình được phân rã chia nhỏ thành những phần nhỏ hơn gọi là các đơn thể.. Mỗi đơn thể, được gọi là một chương trình

Trang 1

BÀI BÁO CÁO WEEK 06

I. Phương pháp lập trình cấu trúc

Lập trình cấu trúc là một phương pháp lập trình có các đặc trưng cơ bản sau : tính đơn thể, cấu trúc điều khiển và tính vào/ra đơn Tuân thủ theo nguyên tắc lập trình có cấu trúc sẽ giúp các chương trình dễ viết, dễ đọc, dễ hiểu, dễ kiểm lỗi và dễ hiệu chỉnh

 Tính đơn thể (modules) :

Với lập trình cấu trúc, các vấn đề trong lập trình được phân rã (chia nhỏ) thành những phần nhỏ hơn gọi là các đơn thể Mỗi đơn thể, được gọi là một chương trình con trong các ngôn ngữ lập trình, sẽ thực hiện một nhiệm vụ định trước trong chương trình Ðiểm lợi chính của kỹ thuật này là nó đơn giản hóa việc phát triển chương trình vì mỗi đơn thể chương trình có thể được phát triển một cách độc lập Khi các đơn thể được lắp ghép lại, chúng tạo thành một chương trình hoàn chỉnh tạo ra được kết quả mong muốn

Sơ đồ cấu trúc (structure chart) hay còn gọi là sơ đồ phân cấp (hierarchy chart) thường được dùng để phân rã và biểu diễn cho các đơn thể trong chương trình Khi một quá trình phân rã chương trình hoàn tất, toàn bộ cấu trúc của chương trình sẽ được biểu diễn bằng một sơ đồ phân cấp

 Cấu trúc điều khiển (control structure) :

Trong lập trình cấu trúc, người ta sử dụng 3 cấu trúc điều khiển để tạo nên logic của chương trình Mọi vấn đề logic đều có thể giải quyết được bằng cách phối hợp 3 cấu trúc này 3 cấu trúc này là : cấu trúc tuần tự , cấu trúc chọn và cấu trúc lặp

Cấu trúc tuần tự : trong cấu trúc này, việc các quá trình được thực hiện tuần tự, từ quá trình

này đến quá trình theo sau nó

Cấu trúc chọn : hay còn gọi là cấu trúc nếu … thì …ngược lại (if….then…else) cho phép các

lập trình viên diễn đạt được các logic điều kiện trong chương trình Ý nghĩa của cấu trúc này là nếu điều kiện là đúng thì thực hiện quá trình ứng với điều kiện đúng, ngược lại, thực hiện quá trình ứng với điều kiện sai

Một dạng khác của cấu trúc chọn là cấu trúc case Cấu trúc case được dùng khi một điều kiện được kiểm tra có thể dẫn đến 2 hay nhiều quá trình xử lý khác nhau Trong một chương trình, menu là một ví dụ về cấu trúc case vì nó cung cấp nhiều chọn lựa xử lý khác nhau

Cấu trúc lặp: cho phép thực hiện nhiều lần một quá trình dựa trên một điều kiện cho trước Có 2

dạng cơ bản của cấu trúc lặp là cấu trúc lặp for và while Cấu trúc lặp for cho phép lặp lại một

Trang 2

quá trình xử lý một số lần xác định trước Còn cấu trúc lặp while thì lặp lại quá trình xử lý cho đến lúc điều kiện kiểm tra không còn đúng nữa

 Vào/ra đơn( single entry/exit) :

Đây là một khái niệm quan trọng trong lập trình cấu trúc Vào/ ra đơn nghĩa là chỉ có một điểm vào và một điểm ra đối với mỗi cấu trúc trong 3 cấu trúc ở trên Ðiểm vào là điểm bắt đầu cấu trúc điều khiển và điểm ra là điểm kết thúc cấu trúc điều khiển

Tính chất này cải thiện đáng kể logic của một chương trình, bởi vì, khi đọc một chương trình, lập trình viên có thể đảm bảo rằng cho dù có chuyện gì xảy ra trong cấu trúc đi nữa thì cấu trúc điều khiển chỉ đi ra ở một điểm duy nhất Trước khi có lập trình cấu trúc, nhiều lập trình viên hay có thói quen chuyển điều khiển đến những phần khác trong chương trình mà không tuân theo luật vào/ra đơn Ðiều này sẽ dẫn đến một thiết kế chương trình tồi, cực kỳ khó khăn để đọc

và kiểm tra lỗi cũng như hiệu chỉnh Chương trình viết theo lối này sẽ giống như một mớ dây rối !!

II. Điểm khác biệt giữa thủ tục và hàm

1 Thủ tục (procedure)

 Thủ tục (procedure) là chương trình con thực hiện các thao tác nhất định nhưng không trả về giá trị nào qua tên của nó Ví dụ các thủ tục vào ra chuẩn: writeln, readln…

 Thủ tục có cấu trúc như sau (pascal):

procedure <tên thủ tục>[(<danh sách tham số>)];

[<phần khai báo>]

Begin

[<dãy các lệnh>]

End;

Phần đầu thủ tục gồm tên dành riêng procedure, tiếp theo là tên thủ tục Danh sách

tham số có thể có hoặc không

Phần khai báo dùng để xác định hằng, kiểu, biến và cũng có thể xác định các chương

trình con khác được sử dụng tring thủ tục

Dãy các lệnh được viết giữa cặp tên dành riêng begin và end tạo thành thân cảu thủ tục.

2 Hàm (function)

Trang 3

 Hàm: là chương trình con thực hiên một số thao tác nào đó và trả vế một giá trị qua tên của nó Ví dụ hàm toán:

sin(x) nhận giá trị thực x và trả vế giá trị sinx

sqrt(x) nhận giá trị x và trả về giá trị căn bậc hai của x

 Hàm có cấu trúc tương tự như thủ tục, tuy nhiên có khác nhau phần đầu Khai báo phần đầu một hàm như sau:

function <tên hàm>[(<danh sách tham số>)]:<kiểu dữ liệu>;

Trong đó,kiểu dữ liệu là kiểu dữ liệu của giá trị mà hàm trả về và chỉ có thể là các kiểu

integer, real,char, boolean, string

3 Điểm khác biệt giữa thủ tục và hàm:

 Khác nhau về cách khai báo:

+ Thủ tục không có giá trị trả về (nên không thể viết trong các biểu thức)

+ Hàm luôn luôn có giá trị trả về thông qua tên cua hàm (giá trị kết quả thuộc kiểu xác định) và do đó nó có thể được sử dụng trong biểu thức Kiểu giá trị trả về của hàm phải được khai báo trong phần đầu của hàm

 Khác nhau về lời gọi

+ Lời gọi thủ tục đứng riêng, và như một câu lệnh độc lập

+ Lời gọi hàm không bao giờ đúng một mình, mà chỉ có thể nằm trong một biểu thức nào đó (ví dụ lới gọi hàm là một câu lệnh gán nào đó)

III. Tham số hình thức – tham số thực, tham số giá trị - tham số biến.

1 Tham số hình thức – tham số thực

Tham số hình thức:

Các biến được khai báo cho dữ liệu vào/ra được gọi là tham số hình thức của chương trình con Các biến được khai báo chỉ dùng riên cho chương trình con được gọi là biến cục bộ

Nói chung, chương trình chính và các chương trình con khác không thể sử dụng các biến cục bộ của một chương trình con, nhưng mọi chương trình con

Trang 4

đều sử dụng được các biến của chương trình chính Do vậy các biến của chương trình chính được gọi là biến toàn cục

Tham số thực sự:

Để thực hiện (gọi) một chương trình con, ta cần phải có lệnh gọi nó tương

tự lệnh gọi hàm hay thủ tục chuẩn, bao gồm tên chương trình con với tham số (nếu có) là các hằng và biến chứa dữ liệu vào ra tương ứng với các tham số hình thức tring cặp ngoặc ( và ) Các hằng và biến này được gọi là tham số hình thức

Ví dụ:

sqr(225)

Khi thực hiện chương trình con,các tham số hình thức được dùng để nhập dữ liệu vào sẽ nhận giá trị của tham số thực sự tương ứng,còn các tham số hình thức được dùng

để lưu trữ dữ liệu ra sẽ trả giá trị đó cho tham số thực sự tương ứng

2. Tham số giá trị - tham số biến

Điểm khác biệt giữa tham số giá tị và tham số biến là:

Ở tham số giá trị, thì mọi thay đổi về giá trị của các tham số dạng tham trị trong chương trình con đều không làm thay đổi giá trị của biến thực tương ứng của chương trình gọi nó

Ở tham số biến, thì mọi thay đổi về giá trị của các tham số dạng tham chiếu trong chương trình con đều làm thay đổi giá trị của biến thực tương ứng của chươg trình gọi nó

IV. Bài tập chương 06 – handout 06

1. Bài 1: Viết hàm tính diện tích và cạnh huyền của một tam giác vuông biết hai cạnh gốc vuông.

Chương trình viết bằng ngôn ngữ C

#include"stdio.h"

#include"conio.h"

#include"math.h"

float dt(float a,float b) {

float dien_tich;

dien_tich=0.5*a*b;

return(dien_tich);

} float canhhuyen(float a,float b)

Tham số thực sự Tên chương trình con

Trang 5

float ch;

ch=sqrt(pow(a,2)+pow(b,2));

return ch;

} void main() {

float x,y;

float dientich,canh_huyen;

printf("nhap vao hai canh goc vuong x ,y: ");

scanf("%f%f",&x,&y);

dientich=dt(x,y);

canh_huyen=canhhuyen(x,y);

printf("dien tich tam giac vuong la : %f\n",dientich);

printf("canh huyen: %f",canh_huyen);

getch();

}

Chương trình viết bằng ngôn ngữ Pascal

Program bai1;

uses crt;

var x,y,dientich,canhhuyen : real;

Function dt(a,b:real) : real;

var d_t : real;

begin d_t:=0.5*a*b;

dt:=d_t;

end;

procedure ch(a,b:real);

var c_h:real;

begin c_h:=sqrt(sqr(a)+sqr(b));

writeln('canh huyen cua tam giac vuong la : ',c_h);

end;

begin writeln('nhap vao hai canh goc vuong x ,y: ');

readln(x,y);

dientich:=dt(x,y);

ch(x,y);

writeln('dien tich tam giac la: ',dientich);

readln;

end

Trang 6

2. Bài tập 2: Viết hàm tính giá tiền phải trả với tham số truyền vào là số lượng đĩa DVD.

Viết chương trình bằng ngôn ngữ C

#include"stdio.h"

#include"conio.h"

long tien(int soluong) {

int t;

t=soluong*5000;

return t;

} void main() {

int n;

long tien_tra;

printf("nhap vao so luong dia: ");

scanf("%d",&n);

if (n>10) tien_tra=tien(n)*0.9;

else

tien_tra=tien(n);

printf("so tien phai tra khi mua %d cai dia la: %ld",n,tien_tra);

getch();

}

Viết chương trình bằng ngôn ngữ Pascal.

program handout6_2;

uses crt;

var n,tien_tra:real;

function tien(soluong:real):real;

var t:real;

begin t:=soluong*5000;

tien:=t;

end;

begin WriteLn('nhap vao so luong dia');

Readln(n);

if (n>10) then tien_tra:=tien(n)*0.9

else tien_tra:=tien(n);

writeln('so tien phai tra la: ',tien_tra);

readln;

end

Trang 7

3. Bài tập 4: viết hàm để hoán vị trí hai số x và y.

Viết chương trình bằng ngôn ngữ C

#include"stdio.h"

#include"conio.h"

void hoandoi(int a,int b) {

int t;

t=a;

a=b;

b=t;

printf("x=%d\n",a);

printf("y=%d",b);

} void main() {

int x,y;

int da_doi;

printf("nhap vao hai so x,y: \n");

scanf("%d%d",&x,&y);

hoandoi(x,y);

getch();

}

Viết chương trình bằng ngôn ngữ Pascal.

program hoandoivitri;

uses crt;

var x,y:integer;

procedure hoandoi(a,b:integer);

var t:integer;

begin t:=b;

b:=a;

a:=t;

writeln('x= ',a);

Trang 8

writeln('y= ',b);

end;

begin WriteLn('nhap vao hai so x vay!'); Readln(x,y);

hoandoi(x,y);

readln;

end

4. Bài 5: viết hàm nhập 1 phân số tính: Tổng,Hiệu,Tích,Thương.

Viết chương trình tính tổng hiệu tích thương hai phân số bằng ngôn ngữ C

#include"stdio.h"

#include"conio.h"

#include"math.h"

int m,n,k;

int tuso1,tuso2,mauso1,mauso2;

int tu, mau;

int USCLN(int a, int b) {

int t;

a=abs(a);

b=abs(b);

while (b!=0) {

t=b;

b=a%b;

a=t;

} return t;

} void main() {

printf("nhap vao tu so 1: ");

scanf("%d",&tuso1);

printf("nhap vao mau so 1: ");

scanf("%d",&mauso1);

printf("nhap vao tu so 2: ");

scanf("%d",&tuso2);

printf("nhap vao mau so 2: ");

scanf("%d",&mauso2);

if (tuso1!=0)

Trang 9

{

n=USCLN(tuso1,mauso1);

tuso1=tuso1/n;

mauso1=mauso1/n;

}

if (mauso1<0) {

tuso1=-tuso1;

mauso1=-mauso1;

} }

else

mauso1=1;

if (tuso2!=0) {

{

m=USCLN(tuso2,mauso2);

tuso2=tuso2/m;

mauso2=mauso2/m;

}

if(mauso2<0) {

tuso2=-tuso2;

mauso2=-mauso2;

} }

else mauso2=1;

mau=(mauso1/USCLN(mauso1,mauso2))*mauso2;

tu=tuso1*(mau/mauso1)+tuso2*(mau/mauso2);

/*mau=(mauso1/USCLN(mauso1,mauso2))*mauso2;

tu=tuso1*(mau/mauso1)-tuso2*(mau/mauso2);*/

/*mau=mauso1*mauso2;

tu=tuso1*tuso2;*/

/*mau=tuso2*mauso1;

tu=tuso1*mauso2;*/

if(tu!=0) {

{

k=USCLN(tu,mau);

tu=tu/k;

mau=mau/k;

}

if(mau<0) {

tu=-tu;

Trang 10

} }

else

mau=1;

printf("tong hai phan so tren la: %d/%d",tu,mau);

getch();

}

5. Bài 7: Viết hàm tìm ước số chung lớn nhất với tham số truyền vào là hai số nguyên dương.

Viết chương trình bằng ngôn ngữ C

#include"stdio.h"

#include"conio.h"

#include"math.h"

int uscln(int a,int b) {

int t;

a=abs(a);

b=abs(b);

while(b!=0) {

t=b;

b=a%b;

a=t;

} return t;

} void main() {

int x,y,USCLN;

printf("nhap vao hai so x,y: ");

scanf("%d%d",&x,&y);

USCLN=uscln(x,y);

printf("uoc so chung lon nhat la: %d",USCLN);

getch();

}

Trang 11

Viết chương trình bằng ngôn ngữ Pascal.

program USCLN_ham;

uses crt;

var x,y:integer;

function USCLN(a,b:integer):integer;

var t:integer;

begin a:=abs(a);

b:=abs(b);

repeat t:=b;

b:=a mod b;

a:=t;

until(b=0) ; USCLN:=t;

end;

begin WriteLn('nhap vao hai so nguyen duong x va y: ');

Readln(x,y);

writeln('uoc so chung lon nhat cua hai so ',x,' va ',y,' la ',USCLN(x,y));

readln;

end

6. Bài 8: Viết hàm tính phần tử thứ n của dãy Fibonaci.

Viết chương trình bằng ngôn ngữ Pascal.

program ham_Fibonaci;

Trang 12

uses crt;

var i,n:integer;

function fibo(n:integer):integer;

begin

if (n=1)or(n=2) then fibo:=1 else

fibo:=fibo(n-1)+fibo(n-2);

end;

begin clrscr;

WriteLn('nhap vao so nguyen n: ');

Readln(n);

for i:=1 to n do write(fibo(i):3);

readln;

end

Trang 13

viết chương trình bằng ngôn ngữ Pascal bằng cách không dùng phương pháp đệ quy.

program ham_Fibonaci;

uses crt;

var fibo:array[1 100] of integer;

i,n:integer;

begin writeln('nhap vao so luong phan tu cua mang: ');

readln(n);

If n<2 then writeln('ban nhap sai dieu kien n>2 @_@') else

fibo[1]:=1;

fibo[2]:=1;

for i:=3 to n do fibo[i]:=fibo[i-1]+fibo[i-2];

writeln();

for i:=1 to n do write(fibo[i]:3);

readln;

end

7. Bài 9: Viết hàm tính n!.

Viết chương trình bằng ngôn ngữ C

#include"stdio.h"

#include"conio.h"

Trang 14

long giai_thua(int n) {

int i,gt;

if (n==0) gt=1;

else {

gt=1;

for (i=1;i<=n;i++)

gt=gt*i;

} return gt;

} void main() {

int m;

printf("nhap vao so m: ");

scanf("%d",&m);

printf("%d giai thua bang: %d",m,giai_thua(m));

getch();

}

Viết chương trình bằng ngôn ngữ C không sử dụng phương pháp đệ quy.

#include"stdio.h"

#include"conio.h"

void main() {

int n;

int i,giaithua;

printf("nhap vao so nguyen n: ");

scanf("%d",&n);

if(n==0) printf("0!=1");

Trang 15

else {

giaithua=1;

for (i=1;i<=n;i++)

giaithua=giaithua*i;

printf("%d giai thua bang: %d",n,giaithua);

} getch();

}

Viết chương trình bằng ngôn ngữ Pascal.

program ham_giaithua;

uses crt;

var n:integer ;

function giaithua(n:integer):integer;

var gt,i:integer;

begin

if (n=0) then gt:=1 else

begin gt:=1;

for i:=1 to n do gt:=gt*i;

end;

giaithua:=gt

end;

begin WriteLn('nhap vao so nguyen n: ');

Readln(n);

Trang 16

writeln(n,' giai thua = ',giaithua(n));

readln;

end

Viết chương trình tính n! không sử dụng phương pháp đệ quy bằng Pascal

program giai_thua;

uses crt;

var i,n,giaithua:integer;

begin writeln('nhap vao so n: ');

readln(n);

if n=0 then writeln('0!=1') else

begin giaithua:=1;

for i:=1 to n do giaithua:=giaithua*i;

writeln(n,' giai thua = ',giaithua);

end;

readln;

end

Ngày đăng: 23/10/2014, 02:00

Xem thêm

TỪ KHÓA LIÊN QUAN

w