http://www.ebook.edu.vn 87
5.5.1 Ví dụ 1
Nhập toạ ủộ của N ủiểm trong mặt phẳng. Tớnh tổng ủộ dài ủường gấp khỳc ủi qua cỏc ủiểm này theo thứ tự nhập vào.
Với vớ dụ này, chỳng ta cú thể dựng 2 mảng số thực ủể lưu cỏc toạ ủộ x và y của cỏc ủiểm. Một cỏch khỏc là dựng một cấu trỳc mụ tả ủiểm, trong ủú x và y là cỏc thành phần của cấu trỳc này. Mảng cỏc ủiểm là một mảng cấu trỳc.
#include <stdio.h>
#include <math.h>
typedef struct {
float x;
float y;
} DIEM, *PDIEM;
// Khai bao cac nguyen mau ham void NhapDiem(PDIEM, int);
float TinhDoDai(PDIEM, int);
void main() {
DIEM day[100];
int n;
printf("Nhap so diem: ");
scanf("%d", &n);
NhapDiem(day, n);
printf("Do dai duong gap khuc la: %.3f", TinhDoDai(day, n));
}
void NhapDiem(PDIEM pDiem, int n) {
DIEM diem;
int i;
for (i = 0; i < n; i++) {
printf("x[%d] = ", i + 1);
scanf("%f", &diem.x);
printf("y[%d] = ", i + 1);
scanf("%f", &diem.y);
pDiem[i] = diem;
} }
float TinhDoDai(PDIEM pDiem, int n) {
float do_dai, dx, dy;
int i;
do_dai = 0;
for (i = 0; i < n - 1; i++) {
dx = (pDiem[i + 1].x - pDiem[i].x);
dy = (pDiem[i + 1].y - pDiem[i].y);
do_dai+= sqrt(dx*dx + dy*dy);
}
return do_dai;
}
5.5.2 Ví dụ 2
http://www.ebook.edu.vn 88
Nhập một danh sỏch gồm n thớ sinh dự thi ủại học, mỗi thớ sinh là một cấu trỳc gồm cỏc trường: Họ và tên, Quê, ðiểm toán, ðiểm lý, ðiểm hoá
Yêu cầu:
- Nhập ủiểm chuẩn sau ủú tỡm và in ra màn hỡnh danh sỏch cỏc thớ sinh ủỗ ủại học cú quờ ở “Ha Noi” (Thớ sinh ủỗ ủại học nếu cú tổng ủiểm khụng dưới ủiểm chuẩn).
- Tỡm và in ra màn hỡnh danh sỏch cỏc thớ sinh cú ủiểm toỏn cao nhất.
- In ra màn hình toàn bộ thông tin của n thí sinh..
ðể giải quyết bài toán này ta có chương trình sau:
#include <stdio.h>
#include <string.h>
// Dinh nghia kieu Ho so sinh vien typedef struct {
char HoTen[30];
char Que[50];
float DiemToan;
float DiemLy;
float DiemHoa;
} HSSV, *PHSSV;
void NhapHSSV(PHSSV pSv, int n) {
HSSV sv;
int i;
for (i = 0; i < n; i++) {
printf("Ten sinh vien %d: ", i + 1);
fflush(stdin);
gets(sv.HoTen);
printf("Que sinh vien %d: ", i + 1);
fflush(stdin);
gets(sv.Que);
printf("Diem toan, ly, hoa sinh vien %d: ", i + 1);
scanf("%f%f%f", &sv.DiemToan, &sv.DiemLy, &sv.DiemHoa);
pSv[i] = sv;
} }
void InHSSV(PHSSV pSv, int n) {
int i;
printf("%4s %20s %20s %6s %6s %6s\n",
"STT", "Ho ten", "Que quan", "Toan", "Ly", "Hoa");
for (i = 0; i < n; i++)
printf("%4d %20s %20s %6.1f %6.1f %6.1f\n", i + 1, pSv[i].HoTen, pSv[i].Que, pSv[i].DiemToan, pSv[i].DiemLy, pSv[i].DiemHoa);
}
void main() {
HSSV day[50];
int n, i;
float chuan, max;
printf("Nhap so sinh vien: ");
scanf("%d", &n);
// Nhap ds sinh vien
http://www.ebook.edu.vn 89
NhapHSSV(day, n);
// In ds sinh vien vua nhap InHSSV(day, n);
// Tim kiem cac sinh vien do que o Ha Noi printf("Nhap diem chuan: ");
scanf("%f", &chuan);
printf("\nDanh sach sinh vien do, que o Ha Noi:\n");
printf("%4s %20s %20s %6s %6s %6s\n",
"STT", "Ho ten", "Que quan", "Toan", "Ly", "Hoa");
for (i = 0; i < n; i++)
if ((day[i].DiemToan + day[i].DiemLy + day[i].DiemHoa >= chuan)&&
(strcmpi(day[i].Que, "Ha Noi") == 0))
printf("%4d %20s %20s %6.1f %6.1f %6.1f\n", i + 1, day[i].HoTen, day[i].Que, day[i].DiemToan, day[i].DiemLy, day[i].DiemHoa);
// Tim diem toan cao nhat max = day[0].DiemToan;
for (i = 1; i < n; i++) if (max < day[i].DiemToan) max = day[i].DiemToan;
// In ra danh sach sinh vien diem toan cao nhat
printf("\nDanh sach sinh vien diem toan cao nhat:\n");
printf("%4s %20s %20s %6s %6s %6s\n",
"STT", "Ho ten", "Que quan", "Toan", "Ly", "Hoa");
for (i = 0; i < n; i++)
if (day[i].DiemToan == max)
printf("%4d %20s %20s %6.1f %6.1f %6.1f\n", i + 1, day[i].HoTen, day[i].Que, day[i].DiemToan, day[i].DiemLy, day[i].DiemHoa);
}
Trong chương trình trên, ta xây dựng 2 hàm nhập (NhapHSSV) và in (InHSSV) danh sách sinh viờn. Sau ủú sử dụng chỳng trong hàm main. ðộc giả cú thể viết lại chương trỡnh trờn mà khụng sử dụng 2 hàm trờn bằng cỏch viết trực tiếp ủoạn chương trỡnh nhập và in vào trong hàm main.
BÀI TẬP CHƯƠNG 5
Bài 1. Xõy dựng một cấu trỳc (ứng với phiếu ủiểm của thớ sinh) gồm cỏc thành phần:
- Họ tên - Quê quán - Trường - Tuổi
- Số báo danh - ðiểm thi
trong ủú Họ tờn lại là một cấu trỳc gồm ba thành phần: Họ, tờn ủệm và tờn. Quờ quỏn cũng là một cấu trúc gồm ba thành phần: xã, huyện và tỉnh. ðiểm thi là một cấu trúc gồm ba thành phần: toỏn, lý, húa (ủiểm chấm chớnh xỏc ủến 1/4).
http://www.ebook.edu.vn 90
ðọc số liệu từ một phiếu ủiểm cụ thể và lưu trữ vào cỏc thành phần của cấu trỳc núi trờn, sau ủú in cỏc số liệu ra màn hỡnh.
Bài 2. Sử dụng ủịnh nghĩa cấu trỳc ở bài 1 :
Nhập số liệu của 20 phiếu ủiểm và lưu trữ vào mảng cấu trỳc núi trờn.
Tỡm kiếm và in ra cỏc thớ sinh cú tổng số ủiểm ba mụn lớn hơn 15.
Bài 3. Giả sử ủó nhập số liệu của 20 phiếu ủiểm theo như yờu cầu của bài 2. Hóy lập chương trỡnh sắp xếp lại cỏc phần tử của mảng cấu trỳc theo thứ tự giảm dần của tổng số ủiểm, sau ủú in danh sách thí sinh (theo thứ tự nói trên). Mỗi thí sinh sẽ in trên một dòng gồm các thông tin:
- Họ tên - Quê quán - Số báo danh - ðiểm toán, lý, hóa.
Bài 4. Nhập danh sỏch n học sinh với cỏc thuộc tớnh: họ tờn, năm sinh và tổng ủiểm. Sắp xếp danh sỏch theo thứ tự giảm của tổng ủiểm. Khi tổng ủiểm như nhau thỡ học sinh cú năm sinh nhỏ hơn ủược xếp trước. In danh sỏch học sinh ủó sắp xếp sao cho tất cả cỏc chữ cỏi của họ tên chuyển thành chữ hoa.
Bài 5. ðịnh nghĩa kiểu cấu trỳc mụ tả ủa thức, sau ủú viết cỏc hàm vào ủa thức, in ủa thức, cộng ủa thức và nhõn ủa thức. ỏp dụng trong hàm main() ủể thực hiện cỏc việc:
Vào từ bàn phớm ba ủa thức P1, P2 và P3. Tớnh ủa thức P theo cụng thức:
P = (P1 + P2)2 + P3 In P1, P2, P3 và P.
Vào từ bàn phớm một dẫy n ủa thức, sau ủú in chỳng lờn màn hỡnh theo thứ tự giảm của bậc.
http://www.ebook.edu.vn 91
PHỤ LỤC 1 - BẢNG MÃ ASCII
Bộ ký tự ASCII (American Standard Code for Interchange Information) gồm 256 ký ủược phõn bố như sau:
- 32 ký tự ủầu tiờn là cỏc ký tự ủiều khiển khụng in ủược như ký tự Enter (mó 13), ký tự ESC (mã 27).
- Cỏc mó ASCII 32-47,58-64,91-96 và 123-127 là cỏc ký tự ủặc biệt như dấu chấm, dấu phẩy, dấu cách, dấu ngoặc, dấu móc, dấu hỏi,...
- Các mã ASCII 48-57 là 10 chữ số
- Cỏc mó ASCII 65-90 là cỏc chữ cỏi hoa từ A ủến Z - Cỏc mó ASCII 97-122 là cỏc chữ cỏi thường từ a ủến z - Cỏc mó ASCII 128-255 là cỏc ký tự ủồ hoạ.
MÃ KÝ TỰ MÃ KÝ TỰ MÃ KÝ TỰ
0 NUL 43 + 86 V
1 SOH 44 , 87 W
2 STX 45 - 88 X
3 ETX 46 . 89 Y
4 EOT 47 / 90 Z
5 ENQ 48 0 91 [
6 ACK 49 1 92 \
7 BEL 50 2 93 ]
8 BS 51 3 94 ^
9 HT 52 4 95 _
10 LF 53 5 96 `
11 VT 54 6 97 a
12 FF 55 7 98 b
13 CR 56 8 99 c
14 SO 57 9 100 d
15 SI 58 : 101 e
16 DLE 59 ; 102 f
17 DC1 60 < 103 g
18 DC2 61 = 104 h
19 DC3 62 > 105 i
20 DC4 63 ? 106 j
21 NAK 64 @ 107 k
22 SYN 65 A 108 l
23 ETB 66 B 109 m
http://www.ebook.edu.vn 92
24 CAN 67 C 110 n
25 EM 68 D 111 o
26 SUB 69 E 112 p
27 ESC 70 F 113 q
28 FS 71 G 114 r
29 GS 72 H 115 s
30 RS 73 I 116 t
31 US 74 J 117 u
32 Space 75 K 118 v
33 ! 76 L 119 w
34 ” 77 M 120 x
35 # 78 N 121 y
36 $ 79 O 122 z
37 % 80 P 123 {
38 & 81 Q 124 |
39 ’ 82 R 125 }
40 ( 83 S 126 ~
41 ) 84 T 127 DEL
42 * 85 U
http://www.ebook.edu.vn 93
PHỤ LỤC 2
DANH SÁCH MỘT SỐ HÀM CỦA TURBO C (theo thứ tự ABC)
ðể biết chi tiết, ủề nghị ủộc giả sử dụng help của mụi trường TC bằng cỏch ủỏnh tờn hàm trong mụi trường TC sau ủú ủể con trỏ dưới tờn hàm rối nhấn Ctrl + F1.
Hàm Tệp tiờu ủề Hàm Tệp tiờu ủề
1. _chmod <io.h> 28. coreleft <alloc.h>
2. _close <io.h> 29. cos <math.h>
3. _creat <io.h> 30. cosh <math.h>
4. _open <io.h> 31. cprintf <conio.h>
5. abort <process.h> 32. creat <io.h>
6. abs <stdlib.h> 33. cscanf <conio.h>
7. acos <math.h> 34. delay <dos.h>
8. arc <graphics.h> 35. delline <conio.h>
9. asin <math.h> 36. disable <dos.h>
10. atan <math.h> 37. drawpoly <graphics.h>
11. atan2 <math.h> 38. ecvt <ctype.h>
12. atof <ctype.h> 39. ellipse <graphics.h>
13. atoi <ctype.h> 40. enable <dos.h>
14. atol <ctype.h> 41. exit <process.h>
15. bar <graphics.h> 42. exp <math.h>
16. bar3d <graphics.h> 43. fabs <math.h>
17. cabs <math.h> 44. fclose <stdio.h>
18. calloc <alloc.h> 45. fcloseall <stdio.h>
19. ceil <math.h> 46. fcvt <ctype.h>
20. chdir <dir.h> 47. feof <stdio.h>
21. chmod <io.h> 48. ferror <stdio.h>
22. circle <graphics.h> 49. fflush <stdio.h>
23. cleardevive <graphics.h> 50. fflushall <stdio.h>
24. clearviewport <graphics.h> 51. fgetc <stdio.h>
25. close <io.h> 52. fgets <stdio.h>
26. clreol <conio.h> 53. fillpopy <graphics.h>
http://www.ebook.edu.vn 94
27. clrscr <conio.h> 54. findfirst <dir.h>
55. findnext <dir.h> 87. getpalette <graphics.h>
56. floodfill <graphics.h> 88. getpixel <graphics.h>
57. floor <math.h> 89. gets <stdio.h>
58. fmode <math.h> 90. gettextinfo <conio.h>
59. fopen <stdio.h> 91. gettime <dos.h>
60. FP_OFF <dos.h> 92. gettime <time.h>
61. FP_SEG <dos.h> 93. getvect <dos.h>
62. fprintf <stdio.h> 94. getviewport <graphics.h>
63. fprintf <stdio.h> 95. getw <stdio.h>
64. fputc <stdio.h> 96. gotoxy <conio.h>
65. fputs <stdio.h> 97. gotoxy <conio.h>
66. fread <stdio.h> 98. grapherrormsg <graphics.h>
67. free <alloc.h> 99. graphresult <graphics.h>
68. fscanf <stdio.h> 100. imagesize <graphics.h>
69. fseek <stdio.h> 101. initgraph <graphics.h>
70. fteel <stdio.h> 102. int86 <dos.h>
71. fwrite <stdio.h> 103. int86x <dos.h>
72. gcvt <ctype.h> 104. intdos <dos.h>
73. geninterrupt <dos.h> 105. intdosx <dos.h>
74. getbkcolor <graphics.h> 106. intr <dos.h>
75. getc <stdio.h> 107. inxdigit <ctype.h>
76. getch <conio.h> 108. isalnum <ctype.h>
77. getchar <stdio.h> 109. isalpha <ctype.h>
78. getche <conio.h> 110. iscntrl <ctype.h>
79. getcolor <graphics.h> 111. isdigit <ctype.h>
80. getcwd <dir.h> 112. isgraph <ctype.h>
81. getdate <time.h> 113. islower <ctype.h>
82. getimage <graphics.h> 114. isprint <ctype.h>
83. getlinesettings <graphics.h> 115. ispunct <ctype.h>
84. getmaxcolor <graphics.h> 116. isspace <ctype.h>
85. getmaxx <graphics.h> 117. isupper <ctype.h>
86. getmaxy <graphics.h> 118. itoa <ctype.h>
119. kbhit <conio.h> 145. peek <dos.h>
120. Keep <dos.h> 146. peekb <dos.h>
http://www.ebook.edu.vn 95
121. labs <stdlib.h> 147. perror <stdio.h>
122. line <graphics.h> 148. pieslice <graphics.h>
123. linerel <graphics.h> 149. poke <dos.h>
124. lineto <graphics.h> 150. pokeb <dos.h>
125. log <math.h> 151. pow <math.h>
126. log10 <math.h> 152. printf <stdio.h>
127. lseek <io.h> 153. putc <stdio.h>
128. Ltoa <ctype.h> 154. putch <conio.h>
129. malloc <alloc.h> 155. putchar <stdio.h>
130. memccpy <memory.h> hoặc
<string.h>
156. putimage <graphics.h>
131. memchr <memory.h> hoặc
<string.h>
157. putpixel <graphics.h>
132. memcmp <memory.h> hoặc
<string.h>
158. puts <stdio.h>
133. memcpy <memory.h> hoặc
<string.h>
159. putw <stdio.h>
134. memicmp <memory.h> hoặc
<string.h>
160. rand <stdlib.h>
135. memset <memory.h> hoặc
<string.h>
161. random <stdlib.h>
136. MK_FP <dos.h> 162. randomize <stdlib.h> và
<time.h>
137. mkdir <dir.h> 163. read <io.h>
138. movedata <mem.h> 164. realloc <alloc.h>
139. movedata <memory.h> hoặc
<string.h>
165. rectangle <graphics.h>
140. moveto <graphics.h> 166. remove <stdio.h>
141. nosound <dos.h> 167. rewind <stdio.h>
142. open <io.h> 168. rmdir <dir.h>
143. outtext <graphics.h> 169. scanf <stdio.h>
144. outtextxy <graphics.h> 170. segread <dos.h>
171. setbkcolor <graphics.h> 200. Strncat <string.h>
172. setcolor <graphics.h> 201. strncmp <string.h>
173. setdate <time.h> 202. strncpy <string.h>
174. setfillstyle <graphics.h> 203. strnicmp <string.h>