cslt chuong 2 ly thuyet

Màu nền
Font chữ
Font size
Chiều cao dòng

Câu 1 : Chỉ ra trình tự xây dựng một chương trình C?

Trả lời:

Bước 1 : Bước thảo chương

Dùng chương trình soạn thảo văn bản (text editor) để viết chương trình. Chương trình  viết bằng ngôn ngữ này viết băng Pascal được gọi là chương trình nguồn.

Tên các tệp (file) chứa chương trình C có dạng chung là : *.C,C++ có dạng tên *.CPP   (C Plus Plus)

Bước 2 : Bước dịch

Gọi chương trình dịch C.Chuơng trình dịch có nhiệm vụ dịch chương trinh viết bằng C của người lập trình sang mã máy với 2 giai đoạn : Dịch ra tệp OBJ và liên kết các tệp OBJ lạI vớI nhau qua chương trình liên kết linker.Kết quả dịch chứa trong các tệp .*COM; *.EXE;.*OBJ. Giai đoạn này cho phép ta phát hiện lỗi cú pháp khi viết chương trình.Nếu có lỗi chương trình sẽ báo lỗi.

Ta phảI quay về bước 1 để sửa.Nếu có lỗI cú pháp ta sang bước tiếp theo.

Quá trình nói trên bao hàm cả hai quá trình dịch và kết nốI

Một chương trình lớn thường bao hàm nhiều modun.Mỗi modun ta có thể dịch riêng rẽ kết quả cho ra tệp mã liên kết *.OBJ (tệp có đuôi là OBJ).Sau đó ta gọI chương trình kết nốI để liên kết các modun đã được dịch riêng rẽ lạI vớI nhau.Kết quả của quá trình kết nốI link mớI cho ta tệp chương trinh đuôi EXE hộăc đuôi COM.Một lí do cần đến linker là quá trình kết nốI vớI các thư viện chứa các chương trình con đã được dịch sẵn.

Bước 3 : Cho chạy chương trình và thử

Nếu kết quả nhận được mà sai thì ta fảI tự tìm lỗI vì đây là lỗI logic, lỗI về thuật toán giảI,máy tính không thể fát hiện được các lỗI như là lỗI về mặt cú pháp,hoặ muốn chỉnh sửa lạI cho đẹp thì ta quay lạI bước 1 để sửa lạI chương trình.

Câu 2 Nêu cấu trúc tổng quát của một chương trình C?

 

Trả lời:

/*GọI các tệp tiền xử lí và định nghĩa */

#include  <…>

#define    …

/*hàm chính – không có đốI */

main()

{

   /*các lệnh của hàm main*/

return(0);/*trả giá trị cho chương trình gọI hàm */

}

/*Khai báo hàm ngườI dùng*/

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

{

/*các lệnh của hàm */

return(…);/*trả giá trị cho tên hàm */

}

Câu 3 Khái niệm khối lệnh, sự tương tác giữa các biến trong và ngoài khối lệnh?

trả lờI

KhốI lệnh : MỗI lệnh sẽ được thực hiện một tác vụ và khi viết chương trình, nó kết thúc bằng dấu chấm phẩy(;).Có nhiều tác vụ không thể thực hiện bằng một lệnh đơn giản mà phảI nhờ một tập hợp nhiều lệnh ,ví dụ ta viết “Nếu thoả mãn điều kiện a thì phảI thực hiện tập hơp lệnh x,lệnh y, lệnh z ” ;tập hợp lệnh đó gọI là một khốI lệnh.

Trong chương trình C, khốI lệnh có thể coi như một lệnh riêng lẻ, ở đâu có thể đặt một lệnh thì ở đó có thể đặt được một khốI lệnh. Những câu lệnh của một hàm,của cấu trúc phảI đặt trong cấu trúc khốI lệnh.

Sự tương tác giữa các biến trong và ngoài khốI lệnh:

-        Nếu khai báo một biến ở ngoài khốI lệnh không trùng vơi tên biến nằm trong khốI lệnh thì khốI lệnh nằm trong được phép sử dụng biến ngoài khốI lệnh đó.

-        Nếu trong và ngoài khốI lệnh đều có khai báo 1 biến trùng tên thì biến ở khốI lệnh nằm trong là biến địa phương,chỉ của khốI lệnh không aảnh hưởng đến khốI lệnh nằm ngoài.

Có thể minh hoạ điều đó trong sơ đồ sau :

 { int a,b;                              chỉ được sử dụng 4 biến a,b,c,d

  fload c,d;

 

     {

      int m,n;                        được sử dụng cả 6 biến a,b,c,d,m,n

       …..

     }

 

}




Câu 4 Các kiểu dữ liệu cơ sở trong C: Cách lưu trữ và phạm vi biểu diễn? 

Trả lờI :

Kiểu dữ liệu số nguyên :

Kiểu dữ liệu

Miền giá trị

Bộ nhớ lưu trữ

int

-32.368 ¸32.767

2 bytes

short

-32.768 ¸ 32.767

2 bytes

long

-2.147.483 ¸2.147.483.476

4 bytes

usnigned int

0¸ 65.535

2 bytes

usnigned short

0¸ 65.535

2 bytes

usnigned long

0¸ 4.294.967.295

4 bytes

Kiểu số thực :

kiểu dữ liệu

phạm vi biểu diễn

bộ nhớ lưu trữ

float

1.2E-38¸3.4E+3.4

4  bytes

double

2.2E-308¸1.8E+308

8  bytes

long double

3.4E-4932¸3.4E+4932

10  bytes

kiểu char:

dữ liệu kiểu char biểu diễn một kí tự thông qua bảng mã ASCII.Mã của kí tự là số thứ tự của kí tự đó trong bảng mã.Có tất cả 256 kí tự dánh số từ 0 đến 255, trong đó các mã từ 0 đến 31 dùng để điều khiển quá trình vào ra của thiết bị ngoạI vi nên không in ra được.

Dữ liệu kiểu char được lưu trữ ở 1 bytes trong bộ nhớ.

Kiểu xâu :

dữ liệu kiểu xâu là dữ liệu thể hiện một dãy kí tự bất kì.Trong C xâu gồm không quá 255 kí tự bất kì đặt trong dấu nháy kép.

Trong bộ nhớ của C xâu được lưu trữ trong một mảng ô nhớ liền nhau,mỗI kí tự một byte,ngoài ra còn sử dụng thêm 1 ô nhớ cuốI cùng để lưu trữ mã số 0.

Kiểu logic

Dữ liệu kiểu logic là dữ liệu thể hiện một trong 2 giá trị đúng hoặc sai của một mệnh đề logic.

Trong C hai giá trị sai hoặc đúng được thể hiện bằng số nguyên kiểu int,có giá trị bằng 0 (sai),và khác 0(đúng).Tuy vậy trong các kết quả tính toán thì đúng luôn có giá trị là 1.

Câu 5. Các đại lượng được sử dụng trong C như thế nào?

trả lờI :

* Hằng

-        Hằng nguyên :

      hằng nguyên được viết dướI dạng :±n vớI n là một số nguyên hệ 10 nằm trong miền giá trị ,có thể dấu + hoặc dấu - trước chữ số đầu tiên.

-        Hằng thực :

      hằng thực có 2 cách viết :

cách 1 :viết dạng dấu chấm tĩnh theo mẫu :±n.m vớI m,n là dãy các chữ số hệ 10.Trong cách viết số thực dạng dấu chấm tĩnh,phảI có dấu chấm ngăn cách phần nguyên và phần phân nhưng các chữ số 0 vô nghĩa đều có thể bỏ qua.

Cách 2 : Viết dạng dấu chấm động. dạng tổng quát là : ±n.mE±s trong đó m,n,s là các chữ số hệ 10,E±s nghĩa là nhân vớI 10­±s , phần định trị và phần bậc có thể có dấu ± đi kèm và viết liền nhau không chứa khoảng trống,các dấu + và dấu chấm có thể không viết.

-Hằng kí tự :

Hằng kí tự được viết bằng cách đặt một kí tự trong cặp dấu nháy đơn

Có 1 số kí tự không nhìn thấy hoặc không được viết trong một số trường hợp,dùng để điều khiển có thể được mã hoá bằng cáh viết thêm truớc dấu \ (kí tự escape) như bảng sau :

Kí tự

Mã kí tự

Mã ASSCII

đổ chuông

\a

7

Xoá lùi

\b

8

nhảy một tab

\t

9

nhảy cách đứng

\v

11

xuống dòng

10

xuống dướI

\f

12

về đầu dòng

\r

13

dấu nháy kép ”

\”

34

dấu nháy đơn ‘

\’

39

dấu chấm hỏI

\?

63

dấu \

\\

92

Null(số 0)

\0

0

-        Hằng xâu kí tự

hằng xâu kí tự có cách viết : Đặt xâu kí tự bất kì (kể cả kí tự đặc biệt sau dấu \) trong dấu nháy kép (“)

  có 2 cáh khai báo hằng như sau :

cách 1 : khai báo bắt đầu ở một hàm,bắt đầu một khốI lệnh theo mẫu :

const <kiểu dữ liệu > < tên hằng >=<giá trị (hoặc biểu thức) của hằng>;

cách 2: #define <tên hằng>  <giá trị hằng>

* Biến (Variable)

a.khai báo biến ?:

Dnạg khai báo như sau :

<kiểu dữ liệu > <danh sách biến>

Trong đó :

<danh sách biến > là tên  các biến cần khai báo đặt cách nhau dấu phẩy;

<kiểu dữ liệu > la một trong các kiêu nư :int,long,float…

Khai báo này thường được đặt đầu chương trình(ngoài tất cả các hàm),bắt đầu một hàm hoặc bắt đầu một khốI lệnh.Nếu khia báo biến đầu chương trình thì các biến này là biến toàn cục,tác động đến toàn bộ chương trình.Nếu khai báo ở một hàm biến ở đầu một hàm hay khốI lệnh thì fảI đặt nó sau dấu { đầu tiên của thân hàm và trước tất cả mọI câu lệnh khác,trường hợp này ngườI ta gọI nó là biến địa phương,chỉ có tác dụng trong hàm hay khốI lệnh đó.

Khi khai báo máy sẽ cấp phát cho các biến trong danh sách một trường nhớ có độ dài do kiểu dữ liệu của biến quy định. Địa chỉ bytes đầu của trường nhó đó gọI là địa chỉ của biến. Để truy nhập vào đạI chỉ chủa biến ta viết dấu & trước tên biến đó

b.Gán giá trị ban đầu cho biến

Mõi biến đều có 1 kiểu dữ liệu xác định ,nếu không gán giá trị ban dầu cho biến thì biến đó sẽ mang một giá trị bất kì (không xác định được ) trong miền của biến đã được khia báo. Để cho biến nhận một giá trị xác định ban đầu phảI gán cho biến một giá trị bằng 1 trong 2 cách sau :

      -    Dùng lệnh gán , có dạng : <tên biến >=<biểu thức >;

-        Vừa khai báo vừa gán giá trị

* Hàm mẫu :

 Để giúp cho việc lập trình được thuận tiện và có hiệu quả hơn ngườI ta đã xây dựng sẵn một số chương trình mẫu.

Khi cần dùng, đầu chương trình phảI khai báo đọc tệp chứa hàm mẫu thì trong thân chương trình sẽ được gọI hàm thông qua tên hàm kèm theo giá trị của đốI cụ thể(nếu có) theo đúng quy định trong C 

Câu 6 Nêu khái niệm và cách tính giá trị của các loại biểu thức trong C?

Trả lờI :

Câu 6:  Khái niệm và cách tính các giá trị biểu thức trong C:

Biểu thức là 1 tập hợp các đại lượng liên kết với nhau bởi các dấu phép toán và các dấu hiệu thể hiện trình tự ưu tiên. Trong hầu hết các ngôn ngữ lập trình, dấu hiệu thể hiện trình tự ưu tiên là cặp dấu ( ). Trong biểu thức các đại lượng còn gọi là các toán hạng, các dấu phép toán còn gọi là toán tử, biểu thức chỉ có 1 toán hạng gọi là phép toán 1 ngôi, ví dụ như –a hoặc !a (phủ định của a). Mỗi kiểu dữ liệu có thể tham gia vào 1 số phép toán nhất định, căn cứ vào giá trị của biểu thức, ta chi biểu thức thành các loại sau:

a.     Biểu thức sô:

Một tập hợp các đại lượng (hằng , biến, hàm) có cùng kiểu số (nguyên hay thực) được liên kết với nhau bởi các dấu phép toán số học, các dấu mở ngoặc, đóng ngoặc 1 cách có ý nghĩa tạo thành biểu thức số học. Biểu thức số học đơn giản nhất chỉ gồm duy nhất 1 hằng, 1 biến hoặc 1 hàm có kiểu số.

Đặc biệt trong C, 1 biểu thức số có thể chứa các toán hạng là các đại lượng kiểu char. Mỗi đậi lượng kiểu char tham gia trong biểu thức số đều được coi là 1 số nguyên không dấu với giá trị bằng mã ASCII của kí tự đó. Ví dụ: ‘A’là số 65, ‘1’ là số 49… có thể viết ‘9’-‘1’ sẽ cho kết quả như 57-49 hoặc ‘a’-‘A’ cho kết quả của phép toán 97-65.

Các dấu phép toán số học bao gồm:

Phép toán

Dấu phép toán

Thực hiện trên loại dữ liệu

Cộng

+

Số nguyên và số thực

Trừ

-

số nguyên và thực

Nhân

*

số nguyên và thực

Chia

/

số nguyên và thực

Lấy phần dư

%

chỉ thực hiện trên số nguyên

Thứ tự ưu tiên của các phép toán  được xếp từ cao đến thấp như sau:

-        Các phép toán trong ( )

-        Phép tính hàm

-        Phép toán 1 ngôi( như –a hay +a)

-        Phép nhân, chia, lấy phần dư

-        Phép cộng, trừ

Nếu trong biểu thức có nhiều phép toán cùng 1 mức độ ưu tiên thì thực hiện từ trái qua phải, riêng phép toán 1 ngôi thì thực hiện từ phải qua trái.

Ví dụ:

Biểu thức

Viết trong turbo C

-x

------+1

2yH­­2 

-x/(2*y*y)+1

-b+d1/2

-----------

2a

(-b+sqrt(d))/(2*a)

xn

Pow(x,n) hoặc exp(n*log(x))

123-65

123-65 hoặc 123-‘A’

Chú ý: giá trị của biểu thức số là 1 số. Khi trong biểu thức số có nhiều đại lượng không cùng kiểu dữ liệu tham gia thì giá trị biểu thức sẽ có kiểu của đại lượng có độ chính xác cao nhất( chuyển kiểu tự động). Cụ thể như cho ở bảng sau:

int

long

unsigned int

unsigned long

float

double

long double

int

i

l

i

i

f

d

ld

long

l

l

l

l

f

d

Ld

unsigned int

i

l

ul

ul

f

d

Ld

unsigned long

i

l

ul

ul

f

D

Ld

foat

f

f

f

f

f

d

Ld

double

d

d

d

d

d

D

Ld

long double

ld

ld

ld

ld

ld

ld

ld

Trong nhiều trường hợp người ta muốn chuyển kiểu dữ liệu khi thực hiện các phép toán, C cho phép làm điều đó bằng cách ép kiểu( chuyển kiểu bắt buộc), có dạng: (kiểu) <biểu thức>

Trong đó: kiểu là kiểu mà biểu thức cần chuyển sang.

Ví dụ: i và j là 2 biến có kiểu int, biểu thức (float) i/j sẽ có kiểu float.

b.    Biểu thức quan hệ:

-Khái niệm: tập hợp các biểu thức liên kết với nhau bởi dấu các phép toán quan hệ và dấu ( ,) thì tạo thành 1 biểu thức quan hệ.

Các dấu phép toán quan hệ gồm:

dấu phép toán

Ý nghĩa

độ ưu tiên

lớn hơn

1

nhỏ hơn

1

>=

lớn hơn hoặc bằng

1

<=

nhỏ hơn hoặc bằng

1

==

bằng

2

!=

Khác

2

-tính giá trị của biểu thức quan hệ: trong biểu thức quan hệ nếu có cả các phép toán số học thì trật tự ưu tiên khi thực hiện các phép toán được xếp từ cao xuống thấp như sau:

-các phép toán số học

-các phép toán trong ngoặc

-các phép toán ưu tiên mức 1(>,<,>=,<=)

-các phép toán ưu tiên mức 2(==, !=)

nếu cùng mức độ ưu tiên sẽ thực hiện từ trái qua phải. Ở mỗi phép so sánh, nếu thoả mãn dấu phép toán thì biểu thức quan hệ nhận giá trị 1, ngược lại nhận giá trị 0. Các giá trị này là một số nguyễn kiểu int, có thể tham gia vào các phép toán số học.

-        ví dụ:

biểu thức : 1>2 nhận giá trị 0

biểu thức: ‘A’ +1<100 nhận giá trị 1

biểu thức: 1>(2>3)==5 nhận giá trị 1

( thứ tự tính: 2>3 nhận 0; 1>0 nhận 1; 5 > 1 nhận 1; 1==1 nhận 1)

biểu thức: 12.3+(1>(2>3)==5>1) nhận giá trị 13.3 nhưng nếu viết : 12.3+1>(2>3)==5>1 thì sẽ nhận 1.

c.     biểu thức logic:

-        khái niệm: một tập hợp các biểu thức liên kết với nhau bởi các dâu phép toán logic, các dâu (,) một cách hợp lí sẽ tạo thành 1 biểu thức logic( Boon).

Các dấu phép toán logic gồm:

!              dấu phép toán phủ định

&&         dấu phép toán và (giao)

||              dấu phép toán hoặc (tuyển)

Cách thực hiện các phép toán được thể hiện ở bảng  sau:

X

Y

!X

X||Y

X&&Y

Khác 0

Khác o

0

1

1

Khác 0

0

1

0

0

Khác 0

1

1

0

0

0

0

0

-        tinhá giá trị của biểu thức logic: trong biểu thức logic nếu có cả các phép toán số học và các phép toán quan hệ thì trật tự ưu tiên xếp từ trên cao xuống thấp như sau:

-        các phép toán trong ngoặc

-        phép toán phủ định !

-        phép toán số học

-        các phép toán quan hệ

-        phép toán và &&

-        phép toán hoặc ||

nếu cùng mức độ ưu tiên sẽ thực hiện từ trái qua phải, riêng phép phủ định từ phải qua trái. cuối cùng, 1 biểu thức logic nhận 1 giá trị 1 hoặc 0- 1 số nguyên kiểu int và có thể tham gia vào các pép toán khác. Biểu thức quan hệ thực chất chỉ là một biểu thức logic đơn giản nhất.

-ví dụ:

10+1>10||4>!’A’<100 có giá trị là 1

Chú ý: trong C, phủ định 2 lần cho kết quả chưa chắc bằng giá trị ban đầu

 Ví dụ: với x=2772, !!x=1.

d.    biểu thức điều kiện:

-        khái niệm: là biểu thức khá đặc biệt trong C, nó gồm 3 toán hạng, mỗi toán hạng là 1 biểu thức với cách viết được quy định bắt buộc có dạng như sau:

e1?e2:e3

trong đó e1, e2, e3 là các biểu thức bát kì.

-        tính giá trị của biểu thức điều kiện: trước tiên tính giá trị của biểu thức e1. Nếu e1 có giá trị khác 0 ( coi là giá trị logic đúng), biểu thức điều kiện sẽ nhận giá trị bằng e2, ngược lại e1 có giá trị bằng 0 thì biểu thức điều kiện nhận giá trị bằng e3.

-        kiểu giá trị của biểu thức điều kiện sẽ là kiểu có độ chính xác cao nhât trong 2 kiểu của e2 và e3. ví dụ: e2 có kiểu int, e3 có kiểu float thì biểu thức điều kiện sẽ có kiểu là float.

-        - ví dụ: (a>b)?a:b  là 1 biểu thức điều kiện. biểu thức cho giá trị là số lớn hơn trong 2 số a và b đã cho.

-        (n1<n2)?(min=n1, max=n2): (min=n2, max=n1) là 1 biểu thức điều kiện. Biểu thức gán giá trị cho biến số min và max tương ứng là số nhỏ và số lớn trong 2 số đã cho n1 và n2.

-        Trong biểu thức điều kiện thứ 2 này các biểu thức e2 và e3 được viết khá đặc biệt, gọi là dãy phép gán mà ta sẽ nghiễn cứu sau.

Bạn đang đọc truyện trên: Truyen2U.Pro