1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Tóm tắt ngôn ngữ lập trình C ppt

51 2,2K 73

Đ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

Tiêu đề Tóm tắt ngôn ngữ lập trình C
Tác giả Thanh Tùng
Người hướng dẫn KS 20_CNTT - ĐHBKHN
Trường học Đại học Bách Khoa Hà Nội
Chuyên ngành Công nghệ thông tin
Thể loại Tóm tắt
Năm xuất bản 2004
Thành phố Hà Nội
Định dạng
Số trang 51
Dung lượng 683,18 KB

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

Nội dung

Cách thức lưu trữ: Trước hết Tôi muốn giải thích cách lưu trữ trong bộ nhớ của máy tính như sau: Khi mà bạn nhập dữ liệu vào máy tính đương nhiên máy tính phải cấp phát một khoảng nhớ

Trang 1

Tóm tắt ngôn ngữ

lập trình C

Trang 2

Tựa đề trang sách

Cảm nghĩ: Tôi viết lên những dòng này không mục đích gì khác ngoài :

1 Ghi chép lại những gì mình biết

2 Chia xẻ kiến thức với những người bạn thân của Tôi và mong được góp ý kiến những chỗ sai và thiếu sót để được bổ sung kiến thức

Vì vậy những dòng chữ này không may ai có cầm phải nó xin đừng hỏi Tôi

là ai, vì Tôi chỉ là kẻ vô danh với các bạn, và h∙y xem đây là những dòng chữ nguyệch ngoạc mà thôi ( Tôi xin nói thật môn C này Tôi còn phải thi lại đấy !) Xin chân thành cảm ơn !

Hà Nội, ngày 20 tháng 2 năm 2004

Tác giả

Trang 3

Giới thiệu

Một cuốn C dày tới hơn 500 trang đó là cuốn sách hoàn hảo Còn đây

Tôi chỉ đưa ra được phương pháp đọc và hiểu được phần nào cuốn sách đó thôi Tôi hi vọng cuốn sách C và thêm những lời giải thích này của Tôi, những ai chưa biết sẽ hiểu ra phần nào

Tôi nhắc lại đây chỉ là những lời giải thích do Tôi hiểu khi đọc sách Chính vì vậy mà Tôi đặt cho nó cái tên là:

Trang 4

Phần 1 : cấu trúc một chương trình C

I Các #include<….> :

Đây là các thư viện của người lập trình đã được Turbo C định nghĩa sẵn cho người

lập trình Khi viết chương trình người lập trình cần khai báo nó

Một số thư viện thường dùng là:

- Thư viện #include<stdio.h> : là thư viện Vào / Ra chuẩn

- Thư viện #include<conio.h> : là thư viện

- Thư viện #include<string.h>: là thư viện cho phép sử dụng các xâu kí tự

- Thư viện #include<math.h> : cho phép sử dụng các hàm toán học như sin,cos…

- Thư viện #include<malloc.h> : là thư viện cho phép khai báo động bộ nhớ

Đây là một số thư viện thường dùng, ngoài ra còn một số thư viện khác nữa

Trong thân chương trình thường là các trình tự sau:

- Khai báo các biến,hằng…có sử dụng trong chương trình

- Nhập giá trị cho các biến nếu cần

- Xử lý các phép toán

- Đưa ra kết quả sau xử lý

Chú ý :

Đây chỉ là cấu trúc cơ bản của chương trình, cấu trúc sẽ khác và phức tạp hơn rất

nhiều, nếu ta sử dụng cấu trúc tự định nghĩa

Trang 5

II Kiểu dữ liệu và vấn đề khai báo biến, hằng :

Kiểu dữ liệu có liên quan trặt trẽ với việc khai báo biến, hằng Điều này là đương nhiên, bởi lẽ khi khai báo một biến nào đó bạn phải định kiểu dữ liệu tương ứng cho nó, còn việc hiểu biến, hằng là gì?, kiểu dữ liệu là gì ? Tôi xin trình bày một cách nôm na, chắc là không chặt trẽ, nhưng Tôi nghĩ nó rễ hiểu:

Là giá trị đầu vào của chương trình, hằng không thể thay đổi được giá trị trong

suốt thời gian tính toán

3 Kiểu dữ liệu :

Đã được C định nghĩa sẵn, gồm có một số kiểu cơ bản hay sử dụng sau:

+ Kiểu số nguyên : Trong C nó được đặt tên là int, chiếm 2 byte trong bộ nhớ ,

có giá trị từ -32768 -> 32767 (2 byte) Tức là khi khai báo một biến nào đó, biến ấy không thể nhận giá trị vượt quá giới hạn này được

VD: int a=2345 đúng

int a=32768 sai do vượt quá giới hạn

Tuy nhiên kết quả tính toán được của một biến nào đó cũng không được vượt quá giới hạn trên

+ Kiểu số thực : Có tên là float, chiếm 4 byte trong bộ nhớ phạm vi biểu diễn từ -3.4E-38 đến 3.4E+38

+ Kiểu kí tự : Có tên là char, chiếm 1 byte trong bộ nhớ

Đây là 3 kiểu dữ liệu đơn giản nhất và hay sử dụng nhất, ngoài ra còn rất nhiều kiểu dữ liệu khác mục đích làm tăng phạm vi biểu diễn của 3 kiểu dữ liệu trên

( nếu có nhu cầu xin tự tham khảo thêm )

Trang 6

III Lệnh vào ( nhập dữ liệu ), ra ( xuất dữ liệu ) trong C:

1.Cách khai báo trong C:

- Nếu là số nguyên: int a ; với khai báo này ta nhận được một biến a có kiểu là số

nguyên

- Nếu là số thực : float b; giải thích tương tự trên

- Nếu là mảng: VD : float a[10]; mảng tên là a kiểu thực và có 10 phần tử,

int b[10]; mảng b kiểu nguyên có 10 phần tử

Chú ý :

Khi nhập dữ liệu kiểu của biến tương ứng

2.Nhập ( vào dữ liệu ), xuất dữ liệu trong C:

a Nhập dữ liệu :

Cú pháp:

scanf(“%.kiểu dữ liệu”,&.biến);

VD : Giả sử có khai báo : float a;hoặc int b;

Câu lệnh nhập là : scanf(“%f ”,&a); hoặc scanf(“%d”,&b);

trong đó : - % : Bắt buộc phải có

- Kiểu dữ liệu : Có thể là số thực (kí hiệu là f )

Có thể là số nguyên (kí hiệu là d )

Có thể là kí tự ( k/hiệu là c ),

- & : Đại diện cho phép lấy địa chỉ

- biến : Là 1 biến bất kì do bạn tự đặt

b Xuất dữ liệu:

Cú pháp :

printf(“ %.đặc tả.kiểu dữ liệu”,biến);

trong đó: - Đặc tả : Là kĩ thuật lấy phần nguyên và phần thập phân

+ Nếu viết đặc tả = 4.2f nghĩa là 4 số phần nguyên và 2 số phần

thập phân (cách viết này chỉ dùng cho số thực)

+ Đặc tả = 4d nghĩa là 4 chỗ cho chữ số đó (chỉ sử dụng cho số

nguyên)

VD: printf(“%4.2f”,a); hoặc printf(“%4d”,b);

Trang 7

IV.Chương trình:

Trong 3 phần trên Tôi đã giới thiệu sơ qua những yếu tố cần thiết khi viết một

chương trình Trong phần này xẽ giới thiệu 1 cấu trúc chương trình hoàn hảo và một số

câu lệnh cần thiết, bắt buộc trong chương trình Có ví dụ minh họa:

a Cấu trúc:

1 Khai báo các thư viện có liên quan

2 Sau dấu { là phần khai báo các biến, hằng có sử dụng trong chương trình

3 Nhập dữ liệu cho các biến cần thiết

4 Xử lý theo yêu cầu của đề bài để có được kết quả

5 Xuất dữ liệu ra màn hình

6 Kết thúc trương trình bằng dấu }

b.Các câu lệnh cần thiết:

1 Lệnh getch();: Lệnh này yêu cầu dừng màn hình để xem kết quả

2 Lệnh clrscr();:Lệnh này dùng để xóa màn hình trước khi xuất dữ liệu

c Ví dụ:

Tôi xin đưa ra 1 ví dụ hết sức đơn giản là :

Cho hai số a, b là 2 số thực được nhập vào từ bàn phím Yêu cầu tính tổng

của hai số đó kết quả được bao nhiêu chứa vào biến c, sau đó in kết quả ra màn hình

Đầu ra : In giá trị nhận được của biến c (c phải là số thực)

float a,b,c; /*khai báo biến*/

printf(“nhập giá trị cho 2 biến:\ n”);scanf(“%f”,&a);

scanf(“%f”,&b); /*nhập */

c=a+b; /*tính toán*/

printf(“kết quả là c=%4.2f”,c); /* xuất dữ liệu*/

getch(); /*dừng màn hình*/ }

Trang 8

Bạn có thể tự lấy cho mình ví dụ đơn giản đề làm quen với ngôn ngữ này

Bài tập ví dụ:

Giải phương trình bậc nhất : ax + b = 0 ; với a,b là hai số thực nhập từ bàn phím,và in kết quả ra màn hình

Tóm lại:

- Khi viết một chương trình bạn phải nắm được đề bài cho gì và yêu cầu làm gì

Để đơn giản hóa Tôi thiết nghĩ bạn nên giải bài toán một cách bình thường ra giấy Sau

đó bạn tìm cách đưa nó vào khuôn khổ của ngôn ngữ, với chú ý là

Biến nhận kết quả (giá trị đầu ra) luôn nằm bên trái của phép toán

Biến, hằng số tham gia thực hiện pháp toán (còn gọi là đầu vào) nằm bên phải biểu thức

VD: Viết ax=b; /*viết sai*/

Viết x=b/a /*viết đúng*/

- Sau khi viết được chương trình này rồi, Tôi tin chắc rằng bạn xẽ đưa ra kết luận rằng Tôi phức tạp quá viết ra giấy còn nhanh và đơn giản gấp vạn lần Bạn yên tâm cứ hãy cố gắng đi, còn rất nhiều điều thú vị đang chờ bạn khi đó Tôi tin chắc bạn xẽ có một cách nghĩ khác cho mà xem

V Các vòng lặp xác định và không xác định:

1 Cách thức lưu trữ:

Trước hết Tôi muốn giải thích cách lưu trữ trong bộ nhớ của máy tính như sau:

Khi mà bạn nhập dữ liệu vào máy tính đương nhiên máy tính phải cấp phát một khoảng nhớ để lưu trữ dữ liệu, và nó có địa chỉ xác định

Trang 9

b Với số nguyên:

Máy sẽ cấp phát 2 byte=16 bit để lưu trữ

Mô hình lưu trữ =>

Bit cao nhất => =>bit thấp nhất

VD: Với khai báo: int a=23; => mô hình cấp phát là:

mà là địa chỉ của nó Bạn phải biết được địa chỉ của nó thì bạn mới mong gọi được nó

ra Đây quả là một vấn đề hết sức phức tạp đối với những người bắt đầu làm quen với ngôn ngữ lập trình.Tôi xin đưa ra hai cách lấy địa chỉ như sau:

a goi theo tên biến : Là cách gọi bằng chính cái tên của biến do bạn đặt

b gọi theo địa chỉ : Là cách gọi theo chỗ nhớ của biến tương ứng Cách này

rất có hiệu quả trong việc lưu trữ biến nhiều phần tử, tuy nhiên bạn phải sử dụng 1 con trỏ để lưu trữ địa chỉ (Tôi xẽ giới thiệu sau) VD như biến mảng, biến cấu trúc).Trong

Pascal đã giới thiệu rất kĩ về mảng tuy nhiên Tôi xin nhắc lại định nghĩa mảng

Mảng là một số các phần tử phân bố kế tiếp nhau trong bộ nhớ

VD : với khai báo int a[20]; Mảng a có 20 phần tử vì vậy

a[0] : Là phần tử đầu tiên trong mảng

Trang 10

if((c-b)=0) printf(“co 1 nghiem x=0.”);

if((c-b)<0) printf(“phuong trinh vo nghiem.”);

Trang 11

printf(“nhap gia tri cho mang:\ n”);

printf(“phan tu thu: %d \ n”,i);scanf(“%d”,&a[i]);

Tương tự vậy bạn có thể làm ví dụ sau:

Bài Tập : Nhập mảng 10 số thực bất kì sau đó:

- Cho hiện lên màn hình dãy số vừa nhập

- Tính tổng của 10 số đó và cho hiện tổng tính được lên màn hình

Trang 12

printf(“gia tri n can tim la n= : %d”,n);

printf(“giai thua tai n la:%d)”,gt;

getch();

}

Nhận xét :

Khác với vòng lặp for bởi vì nó không biết nó phải lặp bao nhiêu lần Nếu không có

điều kiện(còn đúng) thì nó xẽ lặp mãi không dừng Nhưng vấn đề không phải ở đó Bạn nên hiểu rằng khi người ta đưa ra một vòng lặp thì chắc chắn nó sẽ có những công dụng khác nhau, giải quyết loại bài toán khác nhau.Tôi lấy ví dụ đơn giản bạn có thể dùng vòng for để nhập dữ liệu cho mảng, ngược lại trong 1 phép tính nào đó VD :y=x/5 điều kiện là hãy nhập vào giá trị của x để có được y<0.0004 và in giá trị của x tương ứng với loại bài toán này thì vòng for tỏ ra không có hiệu quả

Trang 13

Tóm lại:

Để phân biệt được sự khác nhau giữa các vòng lặp là vô cùng khó khăn Thực

ra mà nói thì giữa chúng gần như không có danh giới, mà chỉ tỏ ra ưu việt hơn trong từng loại bài toán mà thôi Vì vậy bạn cần nắm vững và phân biệt các loại bài toán để

áp dụng nó một cách chính xác

Bạn có thể xem các vòng lặp như là những công cụ làm việc, còn dữ liệu là nguyên liệu Tôi lấy ví dụ như có bao giờ bạn dùng dao để trặt đá không trong khi đó bạn có búa, tuy nhiên bạn cố tình thì vẫn có thể làm được

while <điều kiện>;

Vòng lặp này chỉ khác vòng lặp trên ở chỗ while được đặt ở cuối câu còn nội dung thì giống nhau

Ghi chú:

Đối với 2 vòng lặp b, c bạn cần kết hợp thêm câu lệnh sau thì rất có hiệu quả (tham khảo trong sách)

- break ; mục đích để thoát khỏi vòng lặp không cần đến điều kiện

- Continue; Khi gặp lệnh này nó xẽ bỏ công việc đang thực hiện và quay lại thực hiện công việc tiếp theo

Chú ý :

Bạn phải hết sức quan tâm đến phần này, vì nó là công cụ duy nhất để giải quyết bài toán Nếu như không hiểu phần này coi như bạn chẳng biết gì cả Cách tốt nhất bạn nên làm nhiều bài tập để hiểu cặn kẽ vấn đề

VI Con trỏ và hàm:

1 Con trỏ:

Con trỏ rất có lợi trong mọi ngôn ngữ vì nó rất tiện lợi sử dụng trong việc lưu trữ

địa chỉ Có những việc nếu như không có con trỏ bạn không thể thực hiện được công việc như ý muốn Ví dụ việc lấy kết quả từ một chương trình con sang chương trình chính, nếu không sử dụng con trỏ bạn không thể lấy kết quả ra khỏi chương trình đó

Trang 14

được Tuy nhiên việc sử dụng con trỏ làm cho chúng ta cảm thấy rất phức tạp.Thực ra

nó cũng đơn giản thôi bạn thấy gì sự khác nhau giữa hai chương trình sau:

Vì sao vậy bởi vì con trỏ chỉ lưu địa chỉ của biến a chứ nó không lưu giá trị của biến

a Mà địa chỉ trong bộ nhớ thì đương nhiên không phải là giá trị của biến nào đó Đến

đây Tôi tin chắc bạn đã hình dung ra rồi trứ, nếu chưa Tôi xin được lấy một ví dụ vui thế này:Bạn của bạn nhờ bạn cất giữ hộ một cái va li đương nhiên bạn không thể mở nó

ra được, chiếc va li đó chẳng may bị mất, khi trình báo với công an thì bạn chỉ có thể trình bày là chiếc va li để chỗ nào thôi chứ không biết được trong đó có gì, còn bạn của bạn lại biết bên trong có gì nhưng không biết nó nằm chỗ nào

Tức là gì:

Trang 15

“ Con trỏ chỉ lưu trữ địa chỉ chứ không lưu trữ giá trị của biến đó,đương nhiên giá trị phải nằm trong địa chỉ ”

Hi vọng bạn không còn nhầm lẫn nữa Và sau đây Tôi xẽ cho các bạn thấy sự tác

dụng của con trỏ và việc sử dụng nó Tôi xẽ nói tiếp về con trỏ sau, vì nó gắn liền với việc sử dụng hàm

VD: Có hàm void tim(int n); Khi đó trong chương trình chính đưa ra lời gọi hàm

printf(“kết quả tìm là%d”,tim(n)); thì chắc trắn bạn không có được kết quả đúng

2.2 Hàm main() : Hàm này bắt buộc cho mọi chương trình(còn gọi là hàm

chính)

2.3 Hàm có kiểu : Trong đó có thể là các kiểu nguyên, thực,char

VD: int gt(int n); hoặc hàm float tbc(float a,float b);

Loại hàm này sau khi thực hiện bạn đưa ra câu lệnh sau

return(biến tổng); thì tự khắc kết quả được tự động chứa vào tên hàm là

“tbc” , khi đó ở chương trình chính bạn gọi tới nó thì nó sẽ cho kết quả mà nó nhận

Trang 16

Từ đầu đến giờ cứ mỗi một ví dụ đều phải sử dụng hàm đó là hàm main().

Nhưng trong phần này Tôi muốn trình bày cách kết hợp nhiều hàm trong 1 chương trình, kết hợp với việc sử dụng con trỏ như thế nào

a.Kết hợp hàm main và hàm có kiểu:

Tôi sẽ xây dựng 1 chương trình có 2 hàm trong đó hàm main sẽ gọi đến hàm void

VD (bt 4,trang 133,chương 5,sách của ông ất):

Viết chương trình tính

Gơị ý:

Ta thấy x luôn tỷ lệ với n, tức n tăng thì mũ của x cũng tăng theo, khi n tăng thêm 1

đơn vị thì ta lại có được 1 thương mới, nếu n lẻ thì thương này mang dấu trừ và ngược lại Độ chính xác 0.0001 tức là khi có một thương mới, nếu thương này <0.0001 tức là

điều kiện được thỏa mãn

Đầu vào : Nhập x bất kì

n: Là biến chạy nhằm thỏa mãn độ chính xác

Đầu ra : Giá trị của sinx ;

Để viết được chương trình này bạn phải hình dung được là:

- Mẫu số là biểu thức tính giai thừa Vì vậy để đơn giản bài toán ta xây dựng

1 hàm tính giai thừa là mẫu số, khi n tăng tự nó xẽ đưa ra lời gọi giai thừa

- Tử số tuy nó phức tạp nhưng rất may trong c đã có hàm pow(y,x) yx để tính xn và (-1)n tức là (-1) n<=> pow(-1,n);và xn<=>pow(x,n) ;

- Chương trình sử dụng 1 biến kt để chứa giá trị thương nhận được, đồng thời

nó cũng là điều kiện để vòng lặp kết thúc Nếu kt>0.0001.biến sinx để chứa kết quả nhận được

Trang 17

while (abs(dk)<0.0001); /*abs là lấy giá trị tuyệt đối*/

printf("\n gia tri cua sinx =%4.8f",sinx);

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

getch();

}

Trang 18

NÕu còng víi bµi to¸n nµy T«i khai b¸o lµ: int *gt(int n);tøc lµ sö dông con trá th× ®iÒu g× xÏ x¶y ra: B¹n h·y tù ch¹y ch−¬ng tr×nh nµy th× b¹n xÏ hiÓu nh÷ng g× T«i nãi trong phÇn con trá

Trang 19

while (abs(dk)<0.0001); /*abs là lấy giá trị tuyệt đối*/

printf("\n gia tri cua sinx =%4.8f",sinx);

Tương tự vậy bạn hãy làm bài tập sau:

Tính giá trị của ex=1+x/1!+x2/2!+….+xn/n!;

b Hàm main và hàm void:

- Như ta đã biết hàm void không trả lại kết quả cho tên hàm vì vậy muốn lấy kết quả ra khỏi chương trình thì bắt buộc bạn phải dùng đến con trỏ

- Tôi lại xin nhắc lại cho nhớ hai câu mà bạn không được pháp quên đó là:

1 Con trỏ chỉ lưu địa chỉ của biến chứ không lưu giá trị

2 Khi nào cần lấy giá trị của biến ra khỏi chương trình thì bắt buộc phải sử dụng con trỏ

Vì sao Tôi nhắc lại điều này vì từ bây giờ trở đi con trỏ là công cụ đắc lực khi giải quyết bài toán Việc sử dụng hàm bạn đã quá quen thuộc vì vậy sau đây Tôi muốn bạn hiểu thông qua ví dụ sau:

VD: Viết chương trình hoán vị hai số a,b cho nhau sủ sụng 2 hàm:

- Hàm void vh(float *p1,float *p2) để hoán vị 2 số cho nhau

- Hàm main() để nhập dữ liệu và in kết quả hoán vị

Chương trình:

#include<stdio.h>

#include<conio.h>

void hv(float *p1,float *p2); /*khai báo nguyên mẫu*/

void hv(float *p1, float *p2); /*bắt đầu hàm void*/

{

float tg;

tg=*p1; *p1=*p2; *p2=tg;

}

Trang 20

main()

{

float a,b;

printf("\n nhap gia tri cua a= ");scanf("%f",&a);

printf("\n nhap gia tri cua b= ");scanf("%f",&b);

vh(&a,&b);

printf("\n nhap gia tri cua a= %4.2f",a);

printf("\n nhap gia tri cua b= %4.2f",b);

getch();

}

nhập a=2.4;b=3.0;

kết quả chạy: a=3.00;b=2.40;

Để tỏ rõ uy lực của con trỏ bạn thử bỏ * ở p1 và p2 mà xem

4 Các lỗi thường gặp trong khi sử dụng con trỏ:

Đưa ra phần này Tôi, bản thân cảm thấy rất xấu hổ bởi vì vốn tiếng anh của Tôi vô cùng khiêm tốn Có gì mong bỏ quá cho

+ Máy báo : inconpatible type conversion : lỗi này là do lời gọi hàm sai lẽ ra là tên

hàm (&biến) bạn chỉ viết tênhàm(biến)

+ Máy báo : illegal use of floating point :bạn đã viết thiếu dấu “*” trong 1 biểu thức nào đó vì đây là con trỏ

+ Máy báo : cannot covert int to int :thiếu dấu & trong return(tênhàm)

+ Máy báo : too few parameters in callto :đối trong lời gọi hàm không tương thích với trong hàm

+ Máy báo : linler error undefined symbol ….:sai đường dẫn giữa lời gọi hàm và hàm

Ngoài ra còn rất nhiều lỗi khác nữa mong tự tìm hiểu.Đặc biệt có 1 lỗi mà chương trình không báo lỗi, nhưng chương trình cho kết quả sai, thì đó là do thuật toán của bạn sai hoặc là bạn sử dụng con trỏ không đúng, tức là bàn vẫn chưa hiểu gì về con trỏ

Trang 21

Chú ý:

Trong C quy định chỉ số của 1 mảng bắt đầu từ 0 Và bạn đừng nghĩ mảng và biến

là một (hi vọng Tôi nhắc điều này là không thừa).Nếu bạn lấy chỉ số là 1 thì khi truy nhập mảng xẽ truy nhập ra ngoài vùng nhớ của mảng=>kết quả sai

VD : for(i=1;i<n;i++) là sai tuy nhiên máy không báo lỗi

Còn for(i=0;i<n;i++) là đúng;

Trong ngôn ngữ C có 2 loại mảng đó là mảng tĩnh và mảng động :

1 Mảng tĩnh:

Là mảng cho ta biết trước số phần tử là bao nhiêu

VD: int a[10]; với khai báo này bạn đã có một mảng số nguyên có10 phần tử do chính bạn sẽ nhập vào trong chương trình bằng câu lệnh:

Trang 22

Sau khi ch¹y ch−¬ng tr×nh nµy b¹n :

1.Thö bá * trong p xem ®iÒu g× xÏ s¶y ra

2.Trong lêi gäi hµm b¹n viÕt sxep(&a[i])

Trang 23

3.Thử viết for(i=0;I<=5;i++) hoặc for(i=1;i<5;i++)

4 Thay lời gọi trên bằng for(i=0;i<5;i++)

sxep(&a[i])đối chiếu với lời gọi trên và cho nhận xét (Đây là hai cách gọi hàm đều đúng mà Tôi phải tìm hiểu mãi mới nhận ra được quy luật của nó bạn phản thử mới nhớ được)

Chú ý:

Bạn phải thử mới biết cái thú vị của nó.Nếu bạn không thử trong những hướng dẫn này, đến 1 lúc nào đó bạn làm chương trình nó không báo lỗi, mà lại cho kết quả sai, khi đó bạn xẽ tức điên lên cho mà xem

2 Khai báo động: (mảng động)

Cú pháp: a=(kiểu dữ liệu*)malloc(n*sizeof(a));

Trong đó: a : Là mảng phần tử(a phảI là con trỏ mảng)

n : Là chỉ số lớn nhất của mảng

+ Kiểu dữ liệu: Là kiểu dữ liệu của mảng

Thực ra phần này tương tự với phần trên nó chỉ khác ở hai điểm sau:

- Tên mảng phải là con trỏ, số lượng phần tử (n) phải nhập vào

- Không biết trước số lượng phần tử Đây là lý do của việc phải sử dụng con trỏ,và vì n nhập từ bàn phím chứ không ấn định cho nên tiết kiệm được bộ nhớ

- Trước khi sử dụng khai báo động phải khai báo thư viện là:

#include<stdio.h>

Do vậy Tôi mong các bạn hiểu phần này thông qua ví dụ sau:

VD:

Viết CT nhập n phần tử từ bàn phím CT sử dụng hai hàm:

1.Hàm float tbc(float p[],int n);để tính trung bình cộng của mảng

2.Hàm main() để nhập dữ liệu và in kết quả

Chương trình:

#include<stdio.h>

#include<conio.h>

#include<alloc.h>

float tbc(float p[],int n);

float tbc(float p[],int n)

{

int i,d=0;

float s;

Trang 24

Bạn có thấy điều gì khác biệt trong phần này không Trong phần con trỏ Tôi

nói: Con trỏ chỉ lưu giữ địa chỉ chứ không lưu kết quả Còn trong phần này thì nó lại lưu kết quả, lúc in ra vần hoàn toàn đúng: Tôi xin lấy tiếp ví dụ vui trong phần con trỏ như sau:Lần trước là chiếc va li của người bạn nhờ bạn cất giữ hộ Còn bây giờ chiếc

va li ấy là của bạn thì đương nhiên bạn phải biết trong đó có gì, và nó được cất ở đâu

Có nghĩa là: Khi bạn nhập giá trị cho 1 biến a nào đó, bạn gán *(p)=a (tức là cất hộ),còn bạn nhập trực tiếp *p[i]=?(như ví dụ trên đã chứng minh) Thì thử hỏi hai điều này có khác nhau không

Trang 25

Phần 2 cấu trúc

I Cách lưu trữ của máy tính:

Phần này Tôi cứ loay hoay từ đầu CT đến giờ xem giới thiệu vào chỗ nào là hợp lý nhất, bạn biết vì sao không: Vì nó cực kì quan trọng, vì Tôi sợ bạn quên mất Nếu bạn quên thì bạn mất đi cơ hội biết được máy tính làm gì, và làm như thế nào, khi bạn tác

động vào nó Nếu không hiểu đương nhiên những việc bạn làm chỉ là mò mẫm mà thôi

Bạn chú ý câu nói này: Trong ngôn ngữ C quy định lưu trữ trong máy tính bằng 2 dạng đó là: Lưu trữ kế tiếp và lưu trữ móc nối đối với dữ liệu có cấu trúc Mô hình lưu trữ :

1.Dạng kế tiếp:

Ví dụ có khai báo trong phần II(xem ở dưới) Đầu chương trình bạn: Viết khai báo

1 biến cấu trúc tên là danh sách và 1 mảng cấu trúc tên là ds[10]

a Với biến cấu trúc tên là danh sách:

=>giả thiết các ô nhớ có thứ tự từ trái qua phải và từ trên xuống

Ngày đăng: 11/12/2013, 21:15

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w