1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Giáo trình c

144 15 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 144
Dung lượng 143,5 KB

Nội dung

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 Mục lục Giới thiệu Chơng Các khái niệm 1.1 Tập ký tự dùng ngôn ngữ C 1.2 Từ khoá 1.3 Tên 1.4 Kiểu liệu 1.4.1 KiĨu ký tù (char) 1.4.2 KiĨu nguyªn 1.4.3 KiĨu dấu phảy động 1.5 Định nghĩa kiểu TYPEDEF 1.5.1 Công dụng 1.5.2 Cách viết 1.6 Hằng 1.6.1 Tên 1.6.2 Các loại 1.6.2.1 Hằng int 1.6.2.2 Hằng long 1.6.2.3 H»ng int hÖ 1.6.2.4 H»ng int hÖ 16 1.6.2.5 H»ng ký tù 1.6.2.5 H»ng x©u ký tù 1.7 Biến 1.8 Mảng Chơng Các lệnh vào 2.1 Thâm nhập vào th viện chuẩn 2.2 Các hàm vào chuÈn - getchar() vµ putchar() 2.2.1 Hµm getchar() 2.2.2 Hµm putchar() 2.2.3 Hµm getch() 2.2.4 Hµm putch() 2.3 Đa kết lên hình - hàm printf 2.4 Vµo sè liƯu tõ bµn phÝm - hµm scanf 2.5 Đa kết máy in Chơng Biểu thức 3.1 Biểu thức 3.2 Lệnh gán biểu thức 3.3 C¸c phÐp to¸n sè häc 3.4 C¸c phÐp to¸n quan hệ logic 3.5 Phép toán tăng giảm 3.6 Thứ tự u tiên phép toán 3.7 Chuyển đổi kiểu giá trị Chơng Cấu trúc chơng trình 4.1 Lời thích 4.2 Lệnh khối lệnh 4.2.1 Lệnh 4.2.2 Khối lệnh 4.3 Cấu trúc chơng trình 4.4 Một số qui tắc cần nhớ viết chơng trình Chơng Cấu trúc điều khiển 5.1 CÊu tróc cã ®iỊu kiƯn 5.1.1 LƯnh if-else 5.1.2 Lệnh else-if 5.2 Lệnh nhảy không điều kiện - toán tư goto 5.3 CÊu tróc rÏ nh¸nh - to¸n tư switch 5.4 CÊu tróc lỈp 5.4.1 CÊu tróc lỈp víi toán tử while for 5.4.1.1 Cấu trúc lặp với toán tử while 5.4.1.2 Cấu trúc lặp với toán tử for : 5.4.2 Chu trình do-while 5.5 Câu lệnh break 5.6 Câu lệnh continue Chơng Hàm 6.1 Cơ sở 6.2 Hàm không cho giá trị 6.3 Hàm đệ qui 6.3.3 Mở đầu 6.3.2 Các toán dùng đệ qui 6.3.3 Cách xây dựng hàm đệ qui 6.3.4 Các ví dụ dùng hàm đệ qui 6.4 Bé tiỊn sư lý C Ch¬ng Con trá 7.1 Con trỏ địa 7.2 Con trỏ mảng chiều 7.2.1.Phép toán lấy địa 7.2.2 Tên mảng địa 7.2.3 Con trỏ trỏ tới phần tử mảng chiều 7.2.4 Mảng, trỏ xâu ký tự 7.3 Con trỏ mảng nhiều chiều 7.3.1.Phép lấy địa 7.3.2 Phép cộng địa mảng hai chiều 7.3.3 Con trỏ mảng hai chiều 7.4 Kiểu trỏ kiểu địa chỉ, phép toán trỏ 7.4.1 Kiểu trỏ kiểu địa 7.4.2 Các phép toán trá 7.4.3 Con trá kiĨu void 7.5 M¶ng trỏ 7.6 Con trỏ tới hàm 7.6.1 Cách khai báo trỏ hàm mảng trỏ hàm 7.6.2 Tác dụng trỏ hàm 7.6.3 Đối trỏ hàm Chơng Cấu trúc 8.1 Kiểu cấu trúc 8.2 Khai báo theo kiểu cấu trúc đà định nghĩa 8.3 Truy nhập đến thành phần cấu trúc 8.4 Mảng cấu trúc 8.5 Khởi đầu cấu trúc 8.6 Phép gán cấu trúc 8.7 Con trỏ cấu trúc địa cấu trúc 8.7.1 Con trỏ địa 8.7.2 Truy nhËp qua trá 8.7.3 PhÐp g¸n qua trỏ 8.7.4 Phép cộng địa 8.7.5 Con trỏ mảng 8.8 Cấu trúc tự trỏ danh sách liên kết Chơng Tập tin - file 9.1 Khái niƯm vỊ tƯp tin 9.2 Khai b¸o sư dơng tƯp - số hàm thờng dùng thao tác tƯp 9.2.1 Khai b¸o sư dơng tƯp 9.2.2 Më tƯp - hàm fopen 9.2.3 Đóng tệp - hàm fclose 9.2.4 Đóng tất tệp mở- hàm fcloseall 9.2.5 Làm vùng đệm - hàm fflush 9.2.6 Làm vùng đệm tệp mở - hàm fflushall 9.2.7 Kiểm tra lỗi file - hàm ferror 9.2.8 KiĨmtra ci tƯp - hµm feof 9.2.9 Truy nhËp ngÉu nhiên - hàm di chuyên trỏ vị 9.2.9.1 Chuyển trỏ vị đầu tệp - Hàm rewind 9.2.9.2 Chuyển trỏ vị trí cần thiết - Hàm fseek 9.2.9.3 Vị trí cuẩ trỏ vị - Hàm ftell 9.2.10 Ghi mẫu tin lên tệp - hàm fwrite 9.2.11 Đọc mÉu tin tõ tƯp - hµm fread 9.2.12 NhËp xt ký tự 9.2.12.1 Các hàm putc fputc 9.2.12.2 Các hàm getc fgettc 9.2.13 Xoá tệp - hàm unlink Chơng 10 Đồ hoạ 10.1 Khởi động đồ hoạ 10.2 Các hàm đồ hoạ 10.2.1 Mẫu màu 10.2.2 Vẽ tô màu 10.2.3 Vẽ đờng gấp khúc đa giác 10.2.4 Vẽ điểm, miền 10.2.5 Hình chữ nhật 10.2.6 Cửa sổ (Viewport) 10.3 Sử lý văn hình đồ hoạ 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ự, VIETNAM 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 ax +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¸ cđa TURBO C : asm char break const double case continue else cdecl default 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 delta x1 _step GAMA Các tên sai : 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 ) vµ 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 d÷ liƯu char : kiĨu signed char vµ unsigned char KiĨu Char ( Signed char ) Unsigned char Ph¹m vi biĨu diƠn Sè ký tù KÝch th- -128 ®Õn 127 ®Õn 255 256 256 í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 biểu diễn 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 chun trá xng 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 int unsigned int long unsigned long Ph¹m vi biĨu diƠn -32768 ®Õn 32767 ®Õn 65535 -2147483648 ®Õn 2147483647 ®Õn 4294967295 KÝch thíc byte byte byte byte Chó ý : KiĨu ký tù cịng cã thể 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, float, double long double Kích cỡ phạm vi biểu diễn chúng đợc bảng dới : KiĨu Float Double long double Ph¹m vi biĨu diƠn 3.4E-38 ®Õn 3.4E+38 1.7E-308 ®Õn 1.7E+308 3.4E-4932 ®Õn 1.1E4932 Sè chữ số Kích thớc có nghĩa đến 15 ®Õn 16 17 ®Õn 18 byte byte 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 10 } Vẽ đờng thẳng : Để vẽ đờng thẳng nối hai điểm có toạ độ (x1,y1) vµ (x2,y2) ta sư dơng hµm sau : void line(int x1, int y1, int x2, int y2); Con ch¹y đồ hoạ giữ nguyên vị trí Để vẽ đờng thẳng nối từ điểm chạy đồ hoạ đến điểm bất có toạ độ (x,y) ta sử dụng hàm sau : void lineto(int x, int y); Con ch¹y sÏ chun đến vị trí (x,y) Để vẽ đờng thẳng từ ví trí chạy ( giả sử ®iĨm x,y ) ®Õn ®iĨm cã to¹ ®é (x+dx,y+dy) ta sư dơng hµm sau : void linerel(int dx, int dy); Con chạy chuyển đến vị trí (x+dx,y+dy) Di chuyển chạy đồ hoạ : Để di chuyển chạy đến vị trí (x,y), ta sử dụng hàm sau : void moveto(int x, int y); ● Chän kiĨu ®êng : Hàm void setlinestyle(int kiểu_đờng, int mẫu, int độ_dày); tác ®éng ®Õn nÐt vÏ cđa c¸c thđ tơc vÏ ®êng line, lineto,linerel , circle, rectangle (hàm vẽ hình chữ nhật, ta học phần vẽ miền dới) Hàm cho phép ta xác định ba yếu tố vẽ đờng thẳng, : Kiểu đờng, bề dày mẫu tự tạo Dạng đờng tham số kiểu_đờng xác định Bảng dới cho giá trị kiểu_đờng : Tên SOLID_LINE DOTTED_LINE CENTER_LINE DASHED_LINE USERBIT_LINE Giá trị số 130 Kiểu đờng Nét liền Nét chấm Nét chấm gạch Nét gạch Mẫu tự tạo Bề dày đờng vẽ tham số độ_dày xác định, bảng dới cho giá trị độ_dày : Tên Giá trị số Bề dày NORM_WIDTH Bề dày bình thờng THICK_WIDTH Bề dày gấp ba Mẫu tự tạo : Nếu tham số thứ USERBIT_LINE ta tạo mẫu đờng thẳng tham số mẫu Ví dụ ta xét đoạn chơng trình : int pattern = 0x1010; setlinestile(USERBIT_LINE,pattern,NORM_WIDTH); line(0,0,100,200); Giá trị pattern hƯ 16 lµ 1010, hƯ lµ : 0001 0000 0001 0000 Bit cho điểm sáng, bit làm tắt điểm ảnh Ví dụ : Chơng trình vẽ đờng gấp khúc đoạn thẳng Đờng gấp khúc qua đỉnh sau : (20,20),(620,20),(620,180),(20,180) vµ (320,100) #include "graphics.h" #include "stdio.h" #include "conio.h" main() { int mh=0, mode; initgraph(&mh,&mode,"C:\\TC\\BGI"); setbkcolor(BLUE); setcolor(YELLOW); setlinestyle(SOLID-LINE,0,THICK_WIDTH); moveto(320,100); /* chạy vị trí ( 320,100 ) */ line(20,20,620,20); /* chạy vị trí ( 320,100 ) */ linerel(-300,80); lineto(620,180); lineto(620,20); 131 getch(); closegraph(); } 10.2.4 VÏ ®iĨm, miền : Vẽ điểm : Hàm : void putpixel(int x, int y, int color); tô điểm (x,y) theo mầu xác định color Hàm : unsigned getpixel(int x, int y); trả số hiệu mầu điểm ảnh vị trí (x,y) Chú ý : Nếu điểm cha đợc tô màu hàm vẽ hàm putpixel (mà đợc tạo màu setbkcolor) hàm cho giá trị Tô miền : Để tô màu cho miền hình, ta dùng hàm sau : void floodfill(int x, int y, int border); : (x,y) toạ ®é cđa mét ®iĨm nµo ®ã gäi lµ ®iĨm gieo Tham số border chứa mà màu Sự hoạt động hàm floodfill phụ thuộc vào giá trị x,y,border trạng thái hình + Khi hình có đờng cong khép kín đờng gấp khúc khép kín mà mà màu giá trị border : - Nếu điểm gieo (x,y) nằm miền miền giới hạn phía đờng đợc tô màu - Nếu điểm gieo (x,y) nằm miền miền phía đờng đợc tô màu + Trong trờng hợp hình đờng cong nh hình đợc tô màu 132 Ví dụ : Vẽ đờng tròn màu đỏ hình màu xanh Toạ độ (x,y) điểm gieo đợc nạp từ bàn phím Tuỳ thuộc giá trị cụ thể x,y chơng trình tô màu vàng cho hình tròn phần hình bên hình tròn #include "graphics.h" #include "stdio.h" main() { int mh=mode=0, x, y; printf("\nVao toa x,y:"); scanf("%d%d",&x,&y); initgraph(&mh,&mode,""); if (graphresult != grOk) exit(1); setbkcolor(BLUE); setcolor(RED); setfillstyle(11,YELLOW); circle(320,100,50); moveto(1,150); floodfill(x,y,RED); closegraph(); } 10.2.5 Hình chữ nhật : ● Hµm : void rectangle(int x1, int y1, int x2, int y2); vẽ hình chữ nhật có cạnh song song với cạnh hình Toạ độ đỉnh trái hình chữ nhật (x1,y1) toạ độ đỉnh phải dới hành chữ nhật lµ (x2,y2) ● Hµm : void bar(int x1, int y1, int x2, int y2); vẽ tô màu hình chữ nhật Toạ độ đỉnh trái hình chữ nhật (x1,y1) toạ độ đỉnh phải dới hành chữ nhật (x2,y2) 133 Hàm : void bar3d(int x1, int y1, int x2, int y2, int depth, int top); sÏ vÏ mét khèi hép ch÷ nhËt, mặt hình chữ nhật xác định toạ độ (x1,y1), (x2,y2) Hình chữ nhật đợc tô màu thông qua hàm setfillstyle Tham số depth xác định số điểm ảnh bề sâu khèi chiỊu Tham sè top cã thĨ nhËn c¸c giá trị hay khối chiều tơng ứng có nắp không top=1 top=0 Ví dụ : Chơng trình dới tạo nên hình chữ nhật, khối hình chữ nhật hình hộp cã n¾p : #include "graphics.h" main() { int mh=mode=0; initgraph(&mh,&mode,""); if (graphresult != grOk) exit(1); setbkcolor(GREEN); setcolor(RED); setfillstyle(CLOSE_DOT_FILL,YELLOW); rectangle(5,5,300,160); bar(3,175,300,340); bar3d(320,100,500,340,100,1); closegraph(); } 10.2.6 Cưa sỉ (Viewport) : 134 ● Thiết lập viewport : Viewport vùng chữ nhật hình đồ hoạ Để thiết lập viewport ta dïng hµm : void setviewport(int x1, int y1, int x2, int y2, int clip); (x1,y1) toạ độ góc bên trái, (x2,y2) toạ độ góc dới bên phải Bốn giá trị phải thoả m·n : ≤ x1 ≤ x2 ≤ y1 ≤ y2 Tham sè clip cã thÓ nhËn mét hai giá trị : clip=1 không cho phép vẽ ngoµi viewport clip=0 cho phÐp vÏ ngoµi viewport VÝ dụ : setviewport(100,50,200,150,1); Lập nên vùng viewport hình chữ nhật có toạ độ góc trái cao (100,50) toạ độ góc phải thấp (200,150) (là toạ độ trớc đặt viewport) Chú ý : Sau lập viewport, ta có hệ toạ độ mà góc bên trái có toạ độ (0,0) Nhận diện viewport hành : Để nhận viewport thời ta dùng hàm : void getviewsetting(struct viewporttype *vp); kiểu viewporttype đà đợc định nghĩa nh sau : struct viewporttype { int left,top,right,bottom; int clip; }; ● Xãa viewport : Sử dụng hàm : void clearviewport(void); 135 Xoá hình, đa chạy tạo độ (0,0) hình : Sử dụng hàm : void cleardevice(void); Toạ độ âm dơng : Nhờ sử dụng viewport viết chơng trình đồ hoạ theo toạ độ âm dơng Muốn ta thiết lập viewport cho clip để vẽ giới hạn viewport Sau đoạn chơng trình thực công việc : int xc,yc; xc=getmaxx()/2; yc=getmaxy()/2; setviewport(xc,yc,getmaxx(),getmaxy(),0); Nh thế, hình đợc chia làm bốn phần với toạ độ âm dơng nh sau : Phần t trái : x âm, y âm x : từ -getmaxx()/2 ®Õn y : tõ -getmaxy()/2 ®Õn PhÇn t trái dới : x âm, y dơng x : từ -getmaxx()/2 đến y : từ đến getmaxy()/2 Phần t phải : x dơng, y âm x : tõ ®Õn getmaxx()/2 y : tõ -getmaxy()/2 ®Õn Phần t phải dới : x dơng, y dơng x : tõ ®Õn getmaxx()/2 y : tõ ®Õn getmaxy()/2 Ví dụ : Chơng trình vẽ đồ thị hàm sin x hệ trục toạ độ âm dơng Hoành độ x lấy giá trị từ -4 đến Trong chơng trình có sử dụng hai hàm settextjustify outtextxy ta đề cập phần sau #include "graphics.h" #include "conio.h" #include "math.h" 136 #define TYLEX 20 #define TYLEY 60 main() { int mh=mode=DETECT; int x,y,i; initgraph(mh,mode,""); if (graphresult!=grOK ) exit(1); setviewport(getmaxx()/2,getmaxy()/2,getmaxx(),getmaxy(),0); setbkcolor(BLUE); setcolor(YELLOW); line(-getmaxx()/2,0,getmaxx()/2,0); line(0,-getmaxy()/2,0,getmaxy()/2,0); settextjustify(1,1); setcolor(WHITE); outtextxy(0,0,"(0,0)"); for (i=-400;i

Ngày đăng: 15/10/2020, 17:18

w