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; }
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 hố
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ó q ở “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 tốn cao nhất. - In ra màn hình tồn bộ thơng tin của n thí sinh..
ðể giải quyết bài tố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);
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 tố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.
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>
http://www.ebook.edu.vn 96
175. setlinestyle <graphics.h> 204. strnset <string.h> 176. setpalette <graphics.h> 205. strpbrk <string.h> 177. settextjustify <graphics.h> 206. strrchr <string.h> 178. settextstyle <graphics.h> 207. strrev <string.h> 179. settime <time.h> 208. strset <string.h> 180. setvect <dos.h> 209. strspn <string.h> 181. setviewport <graphics.h> 210. Strstr <string.h> 182. setwritemode <graphics.h> 211. strupr <string.h> 183. sin <math.h> 212. system <process.h> 184. Sinh <math.h> 213. tan <math.h> 185. sleep <dos.h> 214. Tanh <math.h> 186. sound <dos.h> 215. textbackground <conio.h> 187. sprintf <stdio.h> 216. textcolor <conio.h> 188. sqrt <math.h> 217. textheight <graphics.h> 189. srand <stdlib.h> 218. textmode <conio.h> 190. strcat <string.h> 219. textwidth <graphics.h> 191. strchr <string.h> 220. time <time.h> 192. strcmp <string.h> 221. tolower <ctype.h> 193. strcmpi <string.h> 222. toupper <ctype.h> 194. strcpy <string.h> 223. ultoa <ctype.h> 195. strcspn <string.h> 224. unlink <stdio.h> 196. strdup <string.h> 225. Wherex <conio.h> 197. stricmp <string.h> 226. wherey <conio.h> 198. strlen <string.h> 227. window <conio.h> 199. strlwr <string.h> 228. write <io.h>