Giáo trình C và ngôn ngữ lập trình hệ thống

112 2K 9
Giáo trình C và ngôn ngữ lập trình hệ thống

Đ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

Giáo trình C và ngôn ngữ lập trình hệ thống

Giíi thiƯu Tin häc lµ mét ngµnh khoa häc mịi nhọn phát triển nhanh chóng vài chục năm lại ngày mở rộng lĩnh vực nghiên cứu, ứng dụng mặt đời sống xà hội Ngôn ngữ lập trình loại công cụ giúp ngời thể vấn đề thực tế lên máy tính cách hữu hiệu Với phát triển tin học, ngôn ngữ lập trình dần tiến hoá để đáp ứng thách thức thực tế Khoảng cuối năm 1960 đầu 1970 xuất nhu cầu cần có ngôn ngữ bậc cao để hỗ trợ cho nhà tin học việc xây dựng phần mềm hệ thống, hệ điều hành Ngôn ngữ C đời từ đó, đà đợc phát triển phòng thí nghiệm Bell Đến năm 1978, giáo trình " Ngôn ngữ lập trình C " tác giả ngôn ngữ Dennish Ritchie B.W Kernighan viết, đà đợc xuất phổ biến rộng rÃi C ngôn ngữ lập trình vạn Ngoài việc C đợc dùng để viết hệ điều hành UNIX, ngời ta nhanh chóng nhận søc m¹nh cđa C viƯc xư lý cho vấn đề đại tin học C không gắn với hệ điều hành hay máy nào, đà đợc gọi " ngôn ngữ lập trình hệ thống" đợc dùng cho việc viết hệ điều hành, tiện lợi cho việc viết chơng trình xử lý số, xử lý văn sở liệu Và tìm hiểu giới ngôn ngữ C từ khái niệm ban đầu Hà nội tháng 11 năm 1997 Nguyn Hu Tun Chơng khái niệm 1.1 Tập ký tự dùng ngôn ngữ C : Mọi ngôn ngữ lập trình đợc xây dựng từ ký tự Các ký tự đợc nhóm lại theo nhiều cách khác để tạo nên từ Các từ lại đợc liên kết với theo qui tắc để tạo nên câu lệnh Một chơng trình bao gồm nhiều câu lệnh thể thuật toán để giải toán Ngôn ngữ C đợc xây dựng ký tự sau : 26 chữ hoa : A B C Z 26 chữ thờng : a b c z 10 chữ số : Các ký hiƯu to¸n häc : + - * / = ( ) Ký tự gạch nối : _ Các ký tù kh¸c : , : ; [ ] {} ! \ & % # $ DÊu c¸ch (space) dùng để tách từ Ví dụ chữ VIET NAM cã ký tù, cßn VIETNAM chØ cã ký tự Chú ý : Khi viết chơng trình, ta không đợc sử dụng ký tự khác ký tự Ví dụ nh lập chơng trình giải phơng trình bậc hai ax2 +bx+c=0 , ta cÇn tÝnh biƯt thøc Delta = b2 - 4ac, ngôn ngữ C không cho phép dùng ký tự , ta phải dùng ký hiệu khác để thay 1.2 Từ khoá : Từ khoá từ đợc sử dụng để khai báo kiểu liệu, để viết toán tử câu lệnh Bảng dới liệt kê từ khoá TURBO C : asm break case cdecl char const continue default double else enum extern far float for goto huge if int interrupt long near pascal register return short signed sizeof static struct switch tipedef union unsigned void volatile while ý nghĩa cách sử dụng từ khoá đợc đề cập sau này, ta cần ý : - Không đợc dùng từ khoá để đặt tên cho hằng, biến, mảng, hàm - Từ khoá phải đợc viết chữ thờng, ví dụ : viết từ khoá khai báo kiểu nguyên int INT 1.3 Tên : Tên khái niệm quan trọng, dùng để xác định đại lợng khác chơng trình Chúng ta có tên hằng, tên biến, tên mảng, tên hàm, tên trỏ, tên tệp, tên cấu trúc, tên nhÃn, Tên đợc đặt theo qui tắc sau : Tên dÃy ký tự bao gồm chữ cái, số gạch nối Ký tự tên phải chữ gạch nối Tên không đợc trùng với khoá Độ dài cực đại tên theo mặc định 32 đợc đặt lại giá trị từ tới 32 nhờ chức : Option-Compiler-SourceIdentifier length dùng TURBO C Ví dụ : Các tên : a_1 Các tªn sai delta x1 _step GAMA : 3MN m#2 f(x) te ta Y-3 Ký tự số Sư dơng ký tù # Sư dơng c¸c dÊu ( ) Trùng với từ khoá Sử dụng dấu trắng Sử dơng dÊu - Chó ý : Trong TURBO C, tªn chữ thờng chữ hoa khác ví dụ tên AB khác với ab C, ta thờng dùng chữ hoa để đặt tên cho dùng chữ thờng để đặt tên cho hầu hết cho đại lợng khác nh biến, biến mảng, hàm, cấu trúc Tuy nhiên điều bắt buộc 1.4 Kiểu liệu : Trong C sử dụng các kiểu liệu sau : 1.4.1 Kiểu ký tự (char) : Một giá trị kiểu char chiếm byte ( bit ) biểu diễn đợc ký tự thông qua bảng mà ASCII Ví dụ : Ký tù A B a b M· ASCII 048 049 050 065 066 097 098 Cã hai kiÓu liệu char : kiểu signed char unsigned char KiĨu Ph¹m vi biĨu diƠn Sè ký tù Char ( Signed char ) Unsigned char -128 ®Õn 127 ®Õn 255 256 256 KÝch thíc byte byte VÝ dụ sau minh hoạ khác hai kiểu liệu : Xét đoạn chơng trình sau : char ch1; unsigned char ch2; ch1=200; ch2=200; Khi ®ã thực chất : ch1=-56; ch2=200; Nhng ch1 ch2 ®Ịu biĨu diƠn cïng mét ký tù cã m· 200 Phân loại ký tự : Có thể chia 256 ký tự làm ba nhóm : Nhóm 1: Nhóm ký tù ®iỊu khiĨn cã m· tõ ®Õn 31 Chẳng hạn ký tự mà 13 dùng để chuyển trỏ đầu dòng, ký tự 10 chuyển trỏ xuống dòng dới ( cột ) Các ký tự nhóm nói chung không hiển thị hình Nhóm : Nhóm ký tự văn có mà từ 32 đến 126 Các ký tự đ ợc đa hình máy in Nhóm : Nhóm ký tự đồ hoạ có mà số từ 127 đến 255 Các ký tự đ a hình nhng không in đợc ( lệnh DOS ) 1.4.2 KiĨu nguyªn : Trong C cho phÐp sư dơng số nguyên kiểu int, số nguyên dài kiểu long số nguyên không dấu kiểu unsigned Kích cỡ phạm vi biểu diễn chúng đợc bảng dới : Kiểu Phạm vi biểu diễn Kích thớc int -32768 ®Õn 32767 byte unsigned int ®Õn 65535 byte long -2147483648 ®Õn 2147483647 byte unsigned long ®Õn 4294967295 byte Chó ý : KiĨu ký tự xem dạng kiểu nguyên 1.4.3 Kiểu dấu phảy động : Trong C cho phép sử dụng ba loại liệu dấu phảy ®éng, ®ã lµ float, double vµ long double KÝch cì phạm vi biểu diễn chúng đợc bảng dới : Kiểu Phạm vi biểu diễn Số chữ số Kích thớc có nghĩa Float 3.4E-38 đến 3.4E+38 ®Õn byte Double 1.7E-308 ®Õn 1.7E+308 15 ®Õn 16 byte long double 3.4E-4932 ®Õn 1.1E4932 17 đến 18 10 byte Giải thích : Máy tính lu trữ đợc số kiểu float có giá trị tuyệt đối từ 3.4E-38 đến 3.4E+38 Các số có giá trị tuyệt đối nhỏ hơn3.4E-38 đợc xem Phạm vi biểu diễn số double đợc hiểu theo nghĩa tơng tự 1.5 Định nghĩa kiểu TYPEDEF : 1.5.1 Công dụng : Từ khoá typedef dùng để đặt tên cho kiểu liệu Tên kiểu đợc dùng để khai báo liệu sau Nên chọn tên kiểu ngắn gọn để dễ nhớ Chỉ cần thêm từ khoá typedef vào tr ớc khai báo ta nhận đợc tên kiểu liệu dùng tên để khai báo biến, mảng, cấu trúc, vv 1.5.2 Cách viết : Viết từ khoá typedef, sau kiểu liệu ( kiểu ), đến tên cđa kiĨu VÝ dơ c©u lƯnh : typedef int nguyen; đặt tên kiểu int nguyen Sau ta dùng kiểu nguyen để khai báo biến, mảng int nh ví dụ sau ; nguyen x,y,a[10],b[20][30]; Tơng tự cho câu lệnh : typedef float mt50[50]; Đặt tên kiểu mảng thực chiều có 50 phần tử tên mt50 typedef int m_20_30[20][30]; Đặt tên kiểu mảng thực hai chiều có 20x30 phần tử tên m_20_30 Sau ta dùng kiểu khai báo : mt50 a,b; m_20_30 x,y; 1.6 Hằng : Hằng đại lợng mà giá trị không thay đổi trình tính toán 1.6.1 Tên : Nguyên tắc đặt tên ta đà xem xét mục 1.3 Để đặt tên hằng, ta dùng dòng lệnh sau : #define tên giá trị Ví dụ : #define MAX 1000 Lúc này, tất tên MAX chơng trình xuất sau đợc thay 1000 Vì vậy, ta thờng gọi MAX tên hằng, biểu diễn số 1000 Một ví dụ khác : #define pi 3.141593 Đặt tên cho float pi có giá trị 3.141593 1.6.2 Các loại : 1.6.2.1 Hằng int : Hằng int số nguyên có giá trị khoảng từ -32768 đến 32767 Ví dụ : #define number1 -50 Định nghià int number1 có giá trị -50 #define sodem 2732 Định nghià int sodem có giá trị 2732 Chú ý : Cần phân biệt hai 5056 5056.0 : 5056 số nguyên 5056.0 thực 1.6.2.2 Hằng long : Hằng long số nguyên có giá trị khoảng từ -2147483648 đến 2147483647 Hằng long đợc viết theo cách : 1234L 1234l ( thêm L l vào đuôi ) Một số nguyên vợt miền xác định int đợc xem long Ví dụ : #define sl 8865056L #define sl 8865056 Định nghià long sl có giá trị 8865056 Định nghià long sl có giá trị 8865056 1.6.2.3 Hằng int hệ : Hằng int hệ đợc viết theo cách 0c1c2c3 ci số nguyên dơng khoảng từ đến Hằng int hệ luôn nhận giá trị dơng Ví dụ : #define h8 0345 Định nghià int hệ có giá trị 3*8*8+4*8+5=229 1.6.2.4 Hằng int hệ 16 : Trong hƯ nµy ta sư dơng 16 ký tù : 0,1 ,9,A,B,C,D,E,F Cách viết a A b B c hc C d hc D e hc E f F Giá trị 10 11 12 13 14 15 Hằng số hệ 16 có dạng 0xc1c2c3 hặc 0Xc1c2c3 ci số hệ 16 VÝ dô : #define h16 0xa5 #define h16 0xA5 #define h16 0Xa5 #define h16 0XA5 Cho ta hắng số h16 hệ 16 có giá trị nh Giá trị chúng hệ 10 : 10*16+5=165 1.6.2.5 H»ng ký tù : H»ng ký tù lµ ký tự riêng biệt đợc viết hai dấu nháy đơn, ví dụ 'a' Giá trị 'a' mà ASCII chữ a Nh giá trị cđa 'a' lµ 97 H»ng ký tù cã thĨ tham gia vào phép toán nh số nguyên khác VÝ dô : '9'-'0'=57-48=9 VÝ dô : #define kt 'a' Định nghià ký tự kt có giá trị 97 Hằng ký tự đợc viết theo cách sau : ' \c1c2c3' c1c2c3 số hệ mà giá trị mà ASCII cđa ký tù cÇn biĨu diƠn VÝ dơ : chữ a có mà hệ 10 97, đổi hƯ lµ 0141 VËy h»ng ký tù 'a' cã thể viết dới dạng '\141' Đối với vài ký tự đặc biệt ta cần sử dụng cách viết sau ( thêm dấu \ ) : Cách viết Ký tù '\'' ' '\"' " '\\' \ '\n' \n (chuyÓn dßng ) '\0' \0 ( null ) '\t' Tab '\b' Backspace '\r' CR ( đầu dòng ) '\f' LF ( sang trang ) Chú ý : Cần phân biệt h»ng ký tù '0' vµ '\0' H»ng '0' øng víi chữ số có mà ASCII 48, '\0' øng víi kýtù \0 ( thêng gäi lµ ký tù null ) cã m· ASCII lµ H»ng ký tự thực số nguyên, dùng số nguyên hệ 10 để biểu diễn c¸c ký tù, vÝ dơ lƯnh printf("%c%c",65,66) sÏ in AB 1.6.2.5 H»ng x©u ký tù : H»ng x©u ký tự dÃy ký tự đặt hai dÊu nh¸y kÐp VÝ dơ : #define xau1 "Ha noi" #define xau2 "My name is Giang" X©u ký tù đợc lu trữ máy dới dạng bảng có phần tử ký tự riêng biệt Trình biên dịch tự động thêm ký tự null \0 vào cuối xâu ( ký tự \0 đ ợc xem dấu hiệu kết thúc xâu ký tự ) Chú ý : Cần phân biệt hai 'a' "a" 'a' ký tự đợc lu trữ byte, "a" xâu ký tự đợc lu trữ mảng hai phần tử : phần tử thứ chứa chữ a phần tử thứ hai chứa \0 1.7 Biến : Mỗi biến cần phải đợc khai báo trớc đa vào sử dụng Việc khai báo biến đợc thực theo mẫu sau : Kiểu liệu biến tên biến ; VÝ dô : int a,b,c; long dai,mn; char kt1,kt2; float x,y double canh1, canh2; Khai báo ba biến int a,b,c Khai báo hai biến long dai mn Khai báo hai biến ký tự kt1 kt2 Khai báo hai biến float x y Khai báo hai biến double canh1 canh2 Biến kiểu int nhận đợc giá trị kiểu int Các biến khác có ý nghĩa tơng tự Các biến kiểu char chứa đợc ký tự Để lu trữ đợc xâu ký tự cần sử dụng mảng kiểu char Vị trí khai báo biến : Các khai báo cần phải đợc đặt sau dấu { thân hàm cần đứng trớc câu lệnh khác Sau ví dụ vỊ khai b¸o biÕn sai : ( Kh¸i niƯm vỊ hàm cấu trúc chơng trình nghiên cứu sau này) main() { int a,b,c; a=2; int d; /* Vị trí khai báo sai */ } Khởi đầu cho biến : Nếu khai báo sau tên biến ta đặt dấu = giá trị cách vừa khai báo vừa khởi đầu cho biến Ví dụ : int a,b=20,c,d=40; float e=-55.2,x=27.23,y,z,t=18.98; Việc khởi đầu việc khai báo biến gán giá trị cho sau hoàn toàn tơng đơng Lấy địa biến : Mỗi biến đợc cấp phát vùng nhớ gồm số byte liên tiếp Số hiệu byte đầu địa biến Địa biến đợc sử dụng số hàm ta nghiên cứu sau ( ví dụ nh hàm scanf ) Để lấy địa biến ta sử dụng phép toán : & tên biến 1.8 Mảng : Mỗi biến biểu diễn giá trị Để biểu diƠn mét d·y sè hay mét b¶ng sè ta cã thể dùng nhiều biến nhng cách không thuận lợi Trong trờng hợp ta có khái niệm mảng Khái niệm mảng ngôn ngữ C giống nh khái niệm ma trận đại số tuyến tính Mảng đợc hiểu tập hợp nhiều phần tử có kiểu giá trị chung tên Mỗi phần tử mảng biểu diễn đợc giá trị Có kiểu biến có 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ảng Số chiều kích thớc chiều Khái niệm kiểu mảng tên mảng giống nh khái niệm kiểu biến tên biến Ta giải thích khái niệm số chiều kích thớc chiều thông qua ví dụ cụ thể dới Các khai báo : int a[10],b[4][2]; float x[5],y[3][3]; xác định mảng ý nghĩa chúng nh sau : Thứ tự Tên mảng A B KiĨu m¶ng Int Int Sè chiỊu KÝch thíc 10 4x2 Các phần tử a[0],a[1],a[2] a[9] b[0][0], b[0][1] b[1][0], b[1][1] b[2][0], b[2][1] b[3][0], b[3][1] X Y Float Float 3x3 x[0],x[1],x[2] x[4] y[0][0], y[0][1], y[0][2] y[1][0], y[1][1], y[1][2] y[2][0], y[2][1], y[1][2] Chó ý : C¸c phần tử mảng đợc cấp phát khoảng nhớ liên tiếp nhớ Nói cách khác, phần tử mảng có địa liên tiếp Trong nhớ, phần tử mảng hai chiều đợc xếp theo hàng Chỉ số mảng : Một phần tử cụ thể mảng đợc xác định nhờ số Chỉ số mảng phải có giá trị int không vợt kích thớc tơng øng Sè chØ sè ph¶i b»ng sè chiỊu cđa m¶ng Giả sử z,b,x,y đà đợc khai báo nh trên, giả sử i,j biến nguyên i=2, j=1 Khi : a[j+i-1] a[2] b[j+i][2-i] b[3][0] y[i][j] y[2][1] Chú ý : Mảng có chiều ta phải viết có nhiêu chØ sè V× thÕ nÕu ta viÕt nh sau sÏ sai : y[i] ( Vì y mảng chiỊu ) vv BiĨu thøc dïng lµm chØ sè cã thể thực Khi phần nguyên biểu thức thực số mảng Ví dụ : a[2.5] a[2] b[1.9] a[1] * Khi số vợt kích thớc mảng, máy không báo lỗi, nhng truy cập đến vùng nhớ bên mảng làm rối loạn chơng trình Lấy địa phần tử mảng : Có vài hạn chế mảng hai chiều Chẳng hạn lấy địa phần tử mảng chiều, nhng nói chung không cho phép lấy địa phần tử mảng hai chiều Nh vËy m¸y sÏ chÊp nhËn phÐp tÝnh : &a[i] nhng không chấp nhận phép tính &y[i][j] Địa đầu mảng : Tên mảng biểu thị địa đầu mảng Nh ta dùng a thay cho &a[0] Khởi đầu cho biến mảng : Các biến mảng khai báo bên thân hàm ( kể hàm main() ) gọi biến mảng cục Muốn khởi đầu cho mảng cục ta sử dụng toán tử gán thân hàm Các biến mảng khai báo bên thân hàm gọi biến mảng Để khởi đầu cho biến mảng ta áp dụng qui tắc sau : Các biến mảng khởi đầu ( lần ) vào lúc dịch chơng trình cách sử dụng biểu thức Nếu không đợc khởi đầu máy gán cho chúng giá trị Ví dụ : float y[6]={3.2,0,5.1,23,0,42}; int z[3][2]={ {25,31}, {12,13}, {45,15} { main() { 10 ... dấu kết th? ?c \0 cho ch 17 xâu "48a" dấu kết th? ?c \0 cho ct Ký tự chuyển dạng : Ký tự chuyển dạng x? ?c định c? ?ch th? ?c dò đ? ?c ký tự dòng vào nh c? ?ch chuyển dịch thông tin đ? ?c đự? ?c tr? ?c gán cho địa... scanf("%d%d%d,&a,&b, &c) ; Để vào số liƯu ta c? ? thĨ thao t? ?c theo nhiỊu c? ?ch kh? ?c nhau: C? ?ch : Đa ba số vào dòng, số phân c? ?ch dấu c? ?ch dấu tab C? ?ch : Đa ba số vào ba dòng kh? ?c Cách : Hai số đầu dòng ( c? ?ch nahu... ten[]={''h'',''a'',''g''} char ho[]=''tran'' char dem[10] ="van" 12 Chơng C? ?c lệnh vào Chơng giới thiệu th viện vào/ra chuẩn tập hàm đ? ?c thiết kế để cung c? ??p hệ thống vào/ra chuẩn cho chơng trình C Chúng ta không

Ngày đăng: 18/08/2012, 11:00

Hình ảnh liên quan

Một giá trị kiểu char chiế m1 byte (8 bi t) và biểu diễn đợc một kýtự thông qua bảng mã ASCII - Giáo trình C và ngôn ngữ lập trình hệ thống

t.

giá trị kiểu char chiế m1 byte (8 bi t) và biểu diễn đợc một kýtự thông qua bảng mã ASCII Xem tại trang 3 của tài liệu.
/* Đa danh sách liên kết ra màn hình, trỏ pdau tro */ printf("\n Danh sach nhu sau :\n"); - Giáo trình C và ngôn ngữ lập trình hệ thống

a.

danh sách liên kết ra màn hình, trỏ pdau tro */ printf("\n Danh sach nhu sau :\n"); Xem tại trang 97 của tài liệu.
• Bảng trên cho ta các hằng và giá trị của chúng mà các biến graphdtriver và graphmode có thể nhận - Giáo trình C và ngôn ngữ lập trình hệ thống

Bảng tr.

ên cho ta các hằng và giá trị của chúng mà các biến graphdtriver và graphmode có thể nhận Xem tại trang 114 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan