Ngôn ngữ C - Chương III: Hằng, biến và mảng

Trong chương trình C sử dụng các dạng thông tin (kiểu giá trị) sau: số nguyên (int), số thực hay số dấu phẩy động (float), số dấu phẩy động có độ chính xác gấp đôi (double) và ký tự (char).

Hằng chính là một giá trị thông tin cụ thể. Biến và mảng là các đại lượng mang tin. Mỗi loại biến (mảng) có thể chứa một dạng thông tin nào đó, ví dụ biến kiểu int chứa được các số nguyên, biến kiểu float chứa được các số thực. Để lưư trử thông tin, biến và mảng cần phải được cấp phát bộ nhớ.

 

ppt31 trang | Chia sẻ: Mr Hưng | Lượt xem: 1093 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Ngôn ngữ C - Chương III: Hằng, biến và mảng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương III HẰNG, BIẾN VÀ MẢNG Trong chương trình C sử dụng các dạng thông tin (kiểu giá trị) sau: số nguyên (int), số thực hay số dấu phẩy động (float), số dấu phẩy động có độ chính xác gấp đôi (double) và ký tự (char).Hằng chính là một giá trị thông tin cụ thể. Biến và mảng là các đại lượng mang tin. Mỗi loại biến (mảng) có thể chứa một dạng thông tin nào đó, ví dụ biến kiểu int chứa được các số nguyên, biến kiểu float chứa được các số thực. Để lưư trử thông tin, biến và mảng cần phải được cấp phát bộ nhớ. Người ta chia biên ( mảng) thành: -         Biến (mảng) tự động -         Biến (mảng) ngoài -         Biến (mảng) tĩnh.Biến (mảng) tự động chỉ tồn tại (được cấp phát bộ nhớ) khi nào chúng được sử dụng.Biến (mảng) ngoài và tĩnh tồn tại trong suốt thời gian làm việc của chương trình.Cách tổ chức như vậy vừa tiết kiệm bộ nhớ (vì cùng một khoảng nhớ lúc thì phân cho biến này, lúc thì phân cho biến khác), vừa cho phép sử dụng một tên biến cho các đối tượng khác nhau mà không gây ra một sự nhầm lẫn nào. I Kiểu dữ liệu Trong C sử dụng các kiểu dữ liệu sau: -         Ký tự (char) -         Số nguyên (int) -         Số dấu phẩy động độ chính xác đơn (float) -         Số dấu phẩy động độ chính xác gấp đôi (float) 1. Một giá trị kiểu char chiếm một byte (8bit) và biểu diễn được một ký tự thông qua bảng mã ASCII Thực chất dữ liệu kiểu char là một số nguyên không dấu trong khoảng từ 0 đến 255. Dưới đây là phạm vi và kích cỡ biểu diễn của giá trị kiểu char KiãøuPhaûm vi biãøu diãùnSäú kyï tæûKêch thæåïcchar0  2552561 byte 2. Giá trị kiểu nguyên (int). Trong C cho phép sử dụng: Số nguyên (int), số nguyên dài (long) và số nguyên không dấu (unsigned). Kích thước và phạm vi biểu diễn của chúng là: KiãøuPhaûm vi biãøu diãùnKêch thæåïcintlong intunsigned int-32768  32767-2145483648 21454836480  655352 byte4 byte2 byte 3. Giá trị dấu phẩy động. Trong C cho phép sử dụng 2 loại giá trị dấu phẩy động là float và double. Kích thước và phạm vị biểu diển là: KiãøuPhaûm vi biãøu diãùnSäú chæî säú coï nghéaKêch thæåïcfloatdouble1.5e-45  3.4e+385.0e-324  1.7e+3087-815-164 byte8 byte Giải thích: Máy có thể lưu trữ được số dấu phảy dộng có giá trị tuyệt đối trong khoảng từ 1.5e-45 đến 3.4e+38. Số có giá trị tuyệt đối nhỏ hơn 1.5e-45 được xem bằng 0. Phạm vi biểu diễn của số double được hiểu theo nghĩa tương tự. II.   Hằng Hằng là các đại lượng mà các giá trị của nó không thay đổi trong quá trình tính toán. Các loại hằng được sử dụng: · Hằng dấu chấm động (float và double) được viết theo hai cách Cách 1: (Ký pháp tự nhiên): Số được viết theo cách thông thường chỉ có khác là dấu phẩy thập phân được thay bởi dấu chấm. Ví dụ: 44.356, -43442.54546 Cách 2: (Ký pháp khoa học): Số được tách thành hai phần là phần định trị và phần bậc. Phần định trị là một số nguyên hoặc số thực được viết theo ký pháp tự nhiên, phần bậc là một số nguyên. Hai phần này cách nhau bởi ký tự e hoặc EVí dụ:123.456e-5 (Biểu diễn giá trị 0.00123456)0.123E5 (Biểu diễn giá trị 12300)-123.56e-4 (Biểu diễn giá trị -0.012356)2E4 (Biểu diễn giá trị 20000) · Hằng int là số nguyên có giá trị trong khoảng từ -32768  32767 · Hằng long được viết theo kiểu: -4234253l hoặc -4234253l (Thêm l hoặc L). Một số nguyên vượt ra ngoài miền xác định của int cũng được xem là hằng long. · Hằng int hệ 8 được viết theo cách: 0x1x2x3... Ở đây x1, x2, x3, ... là số nguyên trong khoảng từ 0 đến 7. Hằng nguyên hệ 8 luôn luôn nhận giá trị dương. · Hằng int hệ 16 được viết theo cách: 0xx1x2x3... hoặc 0Xx1x2x3... Ở đây x1, x2, x3, ... là số nguyên trong khoảng từ 0 đến 9 và các chữ cái từ a(A) đến f(F). Hằng nguyên hệ 16 luôn luôn nhận giá trị dương. · Hằng ký tự là một ký tự riêng biệt được viết trong dấu nháy đơn (‘), ví dụ: ‘a’, giá trị ‘a’ chính là mã ASCII của chữ a. Như vậy giá trị của ‘a’ là 97. Hằng ký tự có thể tham gia vào các phép toán như mọi số nguyên khác. Ví dụ, giá trị của biểu thức: ‘a’ - ‘A’ = 97 - 65 = 32 Hằng ký tự còn có thể được viết theo cách ‘\x1x2x3...’ Ở đây x1, x2, x3, ... là một số hệ 8 mà hệ giá trị của nó bằng mã ASCII của ký tự cần biểu diễn. Ví dụ: Chữ a có mã hệ 10 là 97 đối ra hệ 8 là 141. Vậy hằng ký tự ‘a’ có thể viết dưới dạng ‘\141’ · Hằng xâu ký tự: là một dãy các ký tự bất kỳ đặt giữa hai dấu nháy kép (“) Ví dụ: “Dai Hoc Su Pham” “” /* Xâu rỗng */ Cách định nghĩa một hằng: #define Hoặc: const = III. Biến Mọi biến cần phải khai báo trước khi sử dụng. Cách khái báo một biến: type Vị trí khái báo biến: Các biến khai báo cần đặt ngay sau dấu { đầu tiên của thân hàm và cần đứng trước mọi câu lệnh. Như vậy, sau một câu lệnh gán chẵng hạn thì không được khai báo nữa. Việc khởi đầu cho các biến: Nếu trong khai báo, ngay sau tên iến ta đặt dấu = và một giá trị nào đó thì đây chính là cách vừa khai báo vừa khởi đầu cho một biến. Ví dụ: int a, b = 45, c =50; float c, b = 35.79;Các kiểu dữ liệu TYPEFORMAT BYTESMINIUM MAXIMUMIntegercharsigned charunsigned charshort [int]unsigned shortintunsigned intlongunsigned long %c%c%c%hi%hu%i%u%li%lu 111222 or 42 or 444 CHAR_MINSCHAR_MIN0SHRT_MIN0INT_MIN0LONG_MIN0 CHAR_MAXSCHAR_MAXUCHAR_MAXSHRT_MAXUSHRT_MAXINT_MAX UNIT_MAXLONG_MAXULONG_MAX TYPEFORMAT BYTESMINIUM MAXIMUMRealfloatdoublelong double %f %e %g%lf %le %lg%Lf %Le %Lg4810FLT_MINDBL_MINLDBL_MINFLT_MAXDBL_MAXLDBL_MAXIV Một số ví dụ về hằng và biến:Ví dụ 1: Chương trình hiển thị các giá trị lớn nhất và nhỏ nhất trong kiểu số nguyên#include "stdio.h"#include "limits.h"int main(void){unsigned long big = ULONG_MAX;clrscr();printf(" Minimum int = %i ", INT_MIN);printf(" \n Maximum int = %i ", INT_MAX);printf(" \n Maximum unsigned = %u ", UINT_MAX);printf(" \n Maximum long int = %li ", LONG_MAX);printf(" \n Maximum unsigned long = %lu ", big);getch();return 0;}Ví dụ 2: Chương trình hiển thị các giá trị trong kiểu char #include "stdio.h"#include "limits.h"int main(void){char lower_a ='a';char lower_z ='z';clrscr();printf(" Minimum char = %i ", CHAR_MIN);printf(" \n Maximum char = %i ", CHAR_MAX);printf(" \n Sau ky tu '%c' la ky tu '%c' ",lower_a, lower_a+1);printf(" \n Ky tu hoa cua '%c' la '%c' ", lower_z,lower_z-'a'+'A');getch();return 0;}Ví dụ 3: Hãy viết chương trinh chuyển đổi giữa các hệ cơ số:#include "stdio.h"int main(void){int dec = 45 , oct = 045, hex = 0xA5, heX =0XA5;clrscr();printf("Decimal = %d Octan = %d Hexa = %d, Hexa = %d \n", dec, oct, hex,heX);printf("Decimal = %d Octan = %o Hexa = %x\n", dec, oct, hex);printf("Decimal = %d Octan = %o Hexa = %X", dec, oct, heX);getch();return 0;}Mảng Một biến chỉ có thể biểu diễn được một giá trị. Để biểu diễn một dãy hay một bảng số ta có thể dùng nhiều biến nhưng cáhc này không tiên lợi. Việc sử dụng mảng là cách tốt hơn nhiều trong những trường hợp như vây. Mảng có thể hiểu là tập hợp nhiều phần tử có cùng một kiểu giá trị và có chung một tên. Mỗi phần tử của mảng biểu diễn được một giá trị Có bao nhiêu kiểu biến thì cũng có bấy nhiêu kiểu mảng. Mảng cần được khai báo để định rõ:Loại mảng (int, float, double,...)Tên mảngSố chiều và kích thước mỗi chiều. Khai bái mảng: Mảng một chiều: [Number of elements] Mảng nhiều chiều: [Num of elements1][Num of elements ] Ví dụ: Khai báo mảng 1 chiêu: int a[10] /*Khai báo một mảng chứa 10 số nguyên*/ Khai báo mảng 2 chiều: int b[5][4] /Khai báo một ma trận có 5dòng 4 cột*/ Chú ý:Các phần của mảng được cấp phát các khoảng nhớ liên tiếp nhau trong bộ nhớ. Nói cách khác phần tử có địa chỉ liên tiếp nhau trong bộ nhớ.Trong bộ nhớ, các phần tử của mảng hai chiều được sắp xếp theo hàng. Truy cập đến từng phần tử của mảng:Mỗi phần tử của mảng được xác định nhờ các chỉ số của nó.Chỉ số của mảng phải có giá trị int không vượt quá kích thước của chiều tương ứng.Ví dụ: a[i] b[i][j] Chú ý: Cho phép lấy địa chỉ của mảng một chiều: &a[I] Và không chấp nhận phép tính: &b[i][j]Khối lệnh:Định nghĩa: Một khối lệnh là gồm dãy các câu lệnh được bao bởi các dấu { và } Ví dụ: { a = 4; b = 5; printf(“\n %6d%6d”,a,b) } Máy xem một khối lệnh cũng như một câu lệnh riêng lẻ. Nói cáhc khác, chổ nào trong chương trình đặt được một câu lệnh thì có thể đặt một khối lệnh2. Khai báo biến ở đầu khối lệnh: Các khai báo chẳng những có thể đặt ở đầu mỗi hàm mà còn có thể viết ở đầu khối lệnh. Ví dụ: { int a ,b; float x, y,z; a=b=3; x=5; y=a*x; z= 5-b*y; printf(“\ny = %8.2f\nz = %8.2f”,y,z); }3. Sự lòng nhau của các khối lệnh: Bên trong một khối lệnh lại có thể viết thêm các khối lệnh khác. Sự lồng nhau theo cách như vậy là không hạnh chế.Phạm vi hoạt động của biến và mảng: Một điểm cần nhớ kỹ là: nếu ta quan miện các biến và các mảng khái báo trong một khối lệnh sẽ tồn tại suốt thời gian làm việc của chương trình và được sử dụng trong toàn bộ chương trình, thì cách hiểu như vậy là không dúng. Thực chất là: Khi máy bắt đầu làm việc với khói lệnh thì các biến và các mảng khai báo bên trong nó mới được hình thành và được cấp phát bộ nhớ. Các biến này chỉ tồn tại trong thời gain máy làm việc bên trong khối lệnh và chúng sẽ lập tưc biến mất khi ra khỏi khối lệnh. Từ đó cần nhớ:Giá trị của một biến hay một mảng khai báo bên trong một khối lệnh không thể đưa ra để sử dụng ở bất kỳ chổ nào ngoài khối lệnh đóỞ bất kỳ chổ nào bên ngoài một khối lệnh ta không thể can thiệp đến các biến và các mảng được khái báo bên trong khối lệnh đó.Nếu bên trong một khối lệnh ta dùng một biến (hay một mảng) có tên là a, thì điều này không làm thay đổi gía trị của một biến khác cũng có tên là a (nếu có) được dùng ở đâu đó bên ngoài khối lệnh đó.Tuy nhiên, nếu một biến (mảng) đã được khai báo ở ngoài một khối lệnh và trùng tên với các biến khai báo bên trong khối lệnh và này thì biến đó có tể sử dụng cả bên trong cũng như bên ngoài khối lệnhVí dụ:#include "stdio.h"main(){int a, b=50, c, d=30;float x=35, y,z;a=c=40;y=z=a+b+c+d;{float y,z;y=z=a+b-x;printf("\ny trong = %8.2f \nz trong = %8.2f",y,z);}printf("\ny ngoai = %8.2f \nz ngoai = %8.2f",y,z);getch();return 0;}Vài nét về hàm và chương trình. Hàm là một đơn vị độc lập của chương trình. Tính độc lập của hàm được thể hiện trên hai điểm:Không cho phép xây dựng một hàm bên trong hàm khác.Mỗi hàm có các biến, mảng,... Riêng của mình và chúng chỉ được sử dụng nội bộ bên trong hàm đó. Một chương trình bao gồm một hoặc nhiều hàm. Hàm main() là thànn phần bắt buộc của chương trình. Chương trình bắt đầu thực hiện từ lệnh đầu tiên của hàm main() và kết thức khi gặp dấu } cuối cùng. Khi chương trình làm việc máy có thể đi từ hàm này sang hàm khác. Việc truyền dữ liệu và kết quả từ hàm này sang hàm khác được thực hiện theo một trong hai cách sau:Sử dụng đối của hàmSử dụng biến ngoài, mảng ngoài, biến tĩnh ngoài và mảng tĩnh ngoài.Biến, mảng tự động:Định nghĩa: Biến (mảng) khái báo bên trong thân của một hàm (kể cả hàm main()) gọi là biến (mảng) tự động. Đối của hàm cũng được xem là biến tự động.Đặc trưng của biến, mảng tự động: Phạm vị hoạt động: Các biến (mảng) tự động chỉ hoạt động bên trong thân của hàm (khối lệnh) mà tại đó chúng được khái báo. Thời gian tồn tại: Các biến (mảng) tự động của một hàm sẽ tồn tại (được cấp phát bộ nhớ) trong khoảng thời gian từ khi máy bắt đầu làm việc với hàm đến khi máy ra khỏi hàm. Do chương trình bắt đầu làm việc từ câu lệnh đầu tiên của hàm main() và khi máy ra khỏi hàm main() thì chương trình kết thúc, nên nếu các biến, mảng khai báo trong main() sẽ tồn tại trong suốt thời gian làm việc của chương trình. Khỏi đầu: Chỉ có thể áp dụng cơ chế khởi đầu cho biến tự động.Muốn khởi đầu cho một mảng tự động ta phải sử dụng toán tử gán.Biến, mảng ngoài:Định nghĩa: Biến (mảng) khai báo ngoài hàm gọi là biến (mảng) ngoài.Đặc trưng của biến, mảng ngoài: Phạm vị hoạt động: Các biến (mảng) ngoài hoạt động từ vị trí khái báo cho đến cuối chương trình. Như vậy, nếu một biến (mảng) ngoài được khai báo ở đầu chương trình (đứng trước tất của các hàm) thì nó có thể được sử dụng trong bất kỳ hàm nào miễn là hàm đó không có các biến (mảng) tự động trùng tên với biến (mảng) ngoài Thời gian tồn tại: Các biến (mảng) ngoài sẽ tồn tại (được cấp phát bộ nhớ) trong suốt thời gian làm việc của chương trình.Các quy tắc về khởi đầu:Các biến (mảng) ngoài có thể khởi đầu (một lần) vào lúc dịch chương trình bằng cách sử dụng các biểu thức hằng. Nếu không được khởi đầu, máy sẽ gán giá trị không.Khi khởi đầu mảng ngoài có thể không cần chỉ ra kích thước (số phần tử) của nó. Khi đó, mãy sẽ dành cho mảng một khoảng nhớ đủ để thu nhân danh sách giá trị khởi đầu.Khi chỉ ra kích thước cụ thể của mảng, thì kích thước này cần không nhỏ hơn kích thước của bộ khởi đầu.Bộ khởi đầu của một mảng char có thể:Hoặc là danh sách các hằng ký tự.Hoặc là một hằng xâu ký tựVí dụ:#include "stdio.h"int a= 35, t[][3] ={ {2,4,5},{6,7,8}};float y[5] = {45.8, 35.6};float x[4][2] = {{32.5,21.6},{32,65}};char ch1[]={'I', 'l','o','v','e'};char ch2[]="I love";char ch3[6]={'I', 'l','o','v','e'};char ch4[6]="I love";main(){clrscr();printf("\n\na = %6d t(1,2) = %6d t(1,1) = %6d",a,t[1][2],t[1][1]);printf("\n\nx(1,1) = %6.2f x(0,1) = %6.2f x(1,1) = %6.2f",x[1][1],x[0][1],x[1][1]);printf("\n\n%5s %10s %10s %15s",ch1,ch2,ch3,ch4);getch();return 0;}Biến tĩnh, mảng tĩnh Khi khai báo biến (mảng ) tĩnh ta viết thêm từ khoá static vào đằng trước Cú pháp: static [Số phần tử]... Biến (mảng) tĩnh có thể đặt bên trong hoặc bên ngoài các hàm. Nếu đặt bên trong, ta có các biến (mảng) tĩnh trong, trường hợp trái lại, ta có các biến (mảng) tĩnh ngoài. Các biến (mảng) tĩnh (trong và ngoài) giống biến (mảng) ngoài ở chổ: + Chúng được cấp phát bộ nhớ trong suốt thời gian hoạt động của chương trình, do đó, giá trị của chúng được lưu trữ từ đầu đến cuối chương trình.+ Chúng có thể được khởi đầu một lần khi dịch chương trình nhờ các biểu thức hằng. Các quy tắc khỏi đầu đối với biến (mảng) ngoài áp dụng cho biến mảng tĩnh. Sự khác nhau giữa biến (mảng) ngaòi với biến (mảng) tĩnh chỉ ở phạm vi hoạt động.+ Các biến (mảng) tĩnh trong khi hoạt động được bên trong thân của hàm mà tại đó chúng được khai báo.+ Phạm vi hoạt động của các biến (mảng) tĩnh ngoài được tính từ khi chúng khai báo đến cuối tệp gốc chứa chúng.

Các file đính kèm theo tài liệu này:

  • pptbaigianglaptrinhngonngucchuong_3_345.ppt
Tài liệu liên quan