Giáo trình Lập trình cơ bản - Nguyễn Thị Thu Hà

C là ngôn ngữ lập trình cấp cao, được sử dụng rất phổ biến để lập trình hệ thống

cùng với Assembler và phát triển các ứng dụng.

Vào những năm cuối thập kỷ 60 đầu thập kỷ 70 của thế kỷ XX, Dennish Ritchie

(làm việc tại phòng thí nghiệm Bell) đã phát triển ngôn ngữ lập trình C dựa trên ngôn ngữ

BCPL (do Martin Richards đưa ra vào năm 1967) và ngôn ngữ B (do Ken Thompson

phát triển từ ngôn ngữ BCPL vào năm 1970 khi viết hệ điều hành UNIX đầu tiên trên

máy PDP-7) và được cài đặt lần đầu tiên trên hệ điều hành UNIX của máy DEC PDP-11.

Năm 1978, Dennish Ritchie và B.W Kernighan đã cho xuất bản quyển “Ngôn

ngữ lập trình C” và được phổ biến rộng rãi đến nay.

Lúc ban đầu, C được thiết kế nhằm lập trình trong môi trường của hệ điều hành

Unix nhằm mục đích hỗ trợ cho các công việc lập trình phức tạp. Nhưng về sau, với

những nhu cầu phát triển ngày một tăng của công việc lập trình, C đã vượt qua khuôn khổ

của phòng thí nghiệm Bell và nhanh chóng hội nhập vào thế giới lập trình để rồi các công

ty lập trình sử dụng một cách rộng rãi. Sau đó, các công ty sản xuất phần mềm lần lượt

đưa ra các phiên bản hỗ trợ cho việc lập trình bằng ngôn ngữ C và chuẩn ANSI C cũng

được khai sinh từ đó.

pdf73 trang | Chia sẻ: tieuaka001 | Lượt xem: 519 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Giáo trình Lập trình cơ bản - Nguyễn Thị Thu Hà, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
5. Bài tập Làm lại các bài tập ở bài Mảng sử dụng biến con trỏ. 49 Chương 7: CHUỖI KÝ TỰ Mục tiêu: - Hiểu được khái niệm về kiểu dữ liệu chuỗi ký tự; - Hiểu cách khai báo biến chuỗi, cách thao tác trên chuỗi; - Viết được các chương trình thực hiện một số thao tác xử lý các chuỗi ký tự ; - Nghiêm túc, tỉ mỉ, sáng tạo trong quá trình học và vận dụng vào thực hành. 1. Khái niệm chuỗi Chuỗi được xem như là một mảng 1 chiều gồm các phần tử có kiểu char như mẫu tự, con số và bất cứ ký tự đặc biệt như +, -, *, /, $, # Theo quy ước, một chuỗi sẽ được kết thúc bởi ký tự null ('\0' : kí tự rỗng). Ví dụ: chuỗi "Infoworld" được lưu trữ như sau: i N f o w o r l d \0 \0Kí tự kết thúc chuỗi 2. Khai báo chuỗi: 2.1 Khai báo theo mảng Cú pháp: char [Chiều dài tối đa] Ví dụ: Trong chương trình, ta có khai báo: char Ten[12]; Trong khai báo này, bộ nhớ sẽ cung cấp 12+1 bytes để lưu trữ nội dung của chuỗi ký tự Ten; byte cuối cùng lưu trữ ký tự ‘\0’ để chấm dứt chuỗi. Ghi chú: - Chiều dài tối đa của biến chuỗi là một hằng nguyên nằm trong khoảng từ 1 đến 255 bytes. - Chiều dài tối đa không nên khai báo thừa để tránh lãng phí bộ nhớ, nhưng cũng không nên khai báo thiếu. 2.2 Khai báo theo con trỏ Cú pháp: char * Ví dụ: Trong chương trình, ta có khai báo: 50 char *Ten; Trong khai báo này, bộ nhớ sẽ dành 2 byte để lưu trữ địa chỉ của biến con trỏ Ten đang chỉ đến, chưa cung cấp nơi để lưu trữ dữ liệu. Muốn có chỗ để lưu trữ dữ liệu, ta phải gọi đến hàm malloc() hoặc calloc() có trong “alloc.h”, sau đó mới gán dữ liệu cho biến. 3. Các thao tác với chuỗi: 3.1 Nhập xuất chuỗi 1.1 Nhập chuỗi từ bàn phím Để nhập một chuỗi ký tự từ bàn phím, ta sử dụng hàm gets() Cú pháp: gets() Ví dụ: char Ten[20]; gets(Ten); Ta cũng có thể sử dụng hàm scanf() để nhập dữ liệu cho biến chuỗi, tuy nhiên lúc này ta chỉ có thể nhập được một chuỗi không có dấu khoảng trắng. Ngoài ra, hàm cgets() (trong conio.h) cũng được sử dụng để nhập chuỗi. 3.2 Xuất chuỗi lên màn hình Để xuất một chuỗi (biểu thức chuỗi) lên màn hình, ta sử dụng hàm puts(). Cú pháp: puts() Ví dụ: Nhập vào một chuỗi và hiển thị trên màn hình chuỗi vừa nhập. #include #include #include int main() { char Ten[12]; printf("Nhap chuoi: ");gets(Ten); printf("Chuoi vua nhap: ");puts(Ten); getch(); 51 return 0; } Ngoài ra, ta có thể sử dụng hàm printf(), cputs() (trong conio.h) để hiển thị chuỗi lên màn hình. Ví dụ 17 : char cname[30]; /* Chuong trinh nhap va in ra ten*/ #include #include void main(void) { char cname[30]; printf("Cho biet ten cua ban: "); scanf("%s", cname); printf("Chao ban %s\n", cname); getch(); } Kết quả in ra màn hình Cho biet ten cua ban: Minh Chao ban Minh Chạy lại chương trình và thử nhập tên: Mai Lan, Thanh Nhi Quan sát kết quả. Ý nghĩa: Khai báo chuỗi cname có chiều dài 30 kí tự. Do chuỗi kết thúc bằng kí tự null, nên khi bạn khai báo chuỗi có chiều dài 30 kí tự chỉ có thể chứa 29 kí tự. Ví dụ 18 : Nhập vào in ra tên /* Chuong trinh nhap va in ra ten*/ #include #include void main(void) 52 { char cname[30]; char chao[] = "Chao ban"; printf("Cho biet ten cua ban: "); gets(cname); printf("%s %s.\n", chao, cname); getch(); } � Kết quả in ra màn hình Cho biet ten cua ban: Mai Lan Chao ban Mai Lan Chạy lại chương trình vào thử nhập tên: Doan Trang Quan sát kết quả. ƒ Lưu ý: không cần sử dụng toán tử địa chỉ & trong cname trong lệnh scanf("%s", fname), vì bản thân fname đã là địa chỉ. Dùng hàm scanf để nhập chuỗi có hạn chế như sau: Khi bạn thử lại chương trình trên với dữ liệu nhập vào là Mai Lan, nhưng khi in ra bạn chỉ nhận được Mai. Vì hàm scanf nhận vào dữ liệu đến khi gặp khoảng trắng thì kết thúc. 3.3 Các hàm làm việc với chuỗi Hàm nhập (gets), xuất (puts) chuỗi Sử dụng hàm gets, puts phải khai báo #include /* Chuong trinh nhap va in ra ten*/ #include #include void main(void) { char cname[30]; puts("Cho biet ten cua ban: "); 53 gets(cname); puts("Chao ban "); puts(cname); getch(); } ƒ Kết quả in ra màn hình Cho biet ten cua ban: Mai Lan Chao ban Mai Lan Sửa dòng 9 thành printf("Cho biet ten cua ban: "); và từ dòng 11 đến 12 thành printf("Chao ban %s.\n", cname); Chạy lại chương trình vào thử nhập tên: Tuan Anh, Thanh Lan Quan sát kết quả. ƒ Đối với hàm puts kí tự kết thúc chuỗi null (\0) được thay thế bằng kí tự newline (\n). Hàm gets và puts chỉ có 1 đối số và không sử dụng dạng thức trong nhập liệu cũng như xuất ra màn hình. Ví dụ: Chuong trinh nhap thang (so) và in ra thang (chu) tuong ung*/ #include #include void main(void) { char cthang[12][15] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; int ithang; printf("Nhap vao thang (1-12): "); scanf("%d", &ithang); 54 printf("%s.\n", cthang[ithang-1]); getch(); } 4. Bài tập 1. Viết hàm tìm số lớn nhất, nhỏ nhất trong một mảng n số nguyên. 2. Viết hàm sắp xếp tăng dần, giảm dần của một dãy số cho trước. 3. Viết hàm tách tên và họ lót từ một chuỗi cho trước. 4. Viết hàm cắt bỏ khoảng trắng thừa ở giữa, hai đầu. 5. Viết hàm chuyển đổi 1 chuỗi sang chữ thường và 1 hàm chuyển đổi sang chữ HOA. 55 *BÀI TẬP THỰC HÀNH TỔNG HỢP (Có hướng dẫn, dùng để tham khảo) Chương trình: 1. Viết chương trình đổi một số nguyên hệ 10 sang hệ 2. 2. Viết chương trình đổi một số nguyên hệ 10 sang hệ 16. 3. Viết chương trình đọc và 2 số nguyên và in ra kết quả của phép (+), phép trừ (-), phép nhân (*), phép chia (/). Nhận xét kết quả chia 2 số nguyên. 4. Viết chương trình nhập vào bán kính hình cầu, tính và in ra diện tích, thể tích của hình cầu đó. Hướng dẫn: S = 4πR2 và V = (4/3)πR3. 5. Viết chương trình nhập vào một số a bất kỳ và in ra giá trị bình phương (a2), lập phương (a3) của a và giá trị a4. 6. Viết chương trình đọc từ bàn phím 3 số nguyên biểu diễn ngày, tháng, năm và xuất ra màn hình dưới dạng "ngay/thang/nam" (chỉ lấy 2 số cuối của năm). 7. Viết chương trình nhập vào số giây từ 0 đến 86399, đổi số giây nhập vào thành dạng "gio:phut:giay", mỗi thành phần là một số nguyên có 2 chữ số. Ví dụ: 02:11:05 Hàm if: 1. Viết chương trình nhập vào số nguyên dương, in ra thông báo số chẵn hay lẻ. Hướng dẫn: Nhập vào số nguyên dương x. Kiểm tra nếu x chia chẵn cho hai thì x là số chẵn (hoặc chia cho 2 dư 0) ngược lại là số lẻ. 2. Viết chương trình nhập vào 4 số nguyên. Tìm và in ra số lớn nhất. Hướng dẫn: Ta có 4 số nguyên a, b, c, d. Tìm 2 số nguyên lớn nhất x, y của 2 cặp (a, b) và (c, d). Sau đó so sánh 2 số nguyên x, y để tìm ra số nguyên lớn nhất. 3. Viết chương trình giải phương trình bậc 2: ax2 + bx + c = 0, với a, b, c nhập vào từ bàn phím. Hướng dẫn: Nhập vào 3 biến a, b, c. Tính Delta = b*b - 4*a*c Nếu Delta < 0 thì Phương trình vô nghiệm Ngược lại Nếu Delta = 0 thì x1 = x2 = - b/(2*a) Ngược lại x1 = (- b - sqrt(Delta))/(2*a) x2 = (- b + sqrt(Delta))/(2*a) Hết Nếu Hết Nếu 4. Viết chương trình nhập vào giờ phút giây (hh:mm:ss). Cộng thêm số giây nhập vào và in ra kết quả dưới dạng hh:mm:ss. Hướng dẫn: Nhập vào giờ phút giây vào 3 biến gio, phut, giay và nhập và giây công thêm vào biến them: Nếu giay + them < 60 thì giay = giay + them 56 Ngược lại giay = (giay + them) - 60 phut = phut + 1 Nếu phut >= 60 thì phut = phut - 60 gio = gio + 1 Hết nếu Hết nếu 5. Viết chương trình nhập vào 3 số nguyên rồi in ra màn hình theo thứ tự tăng dần. Vòng lặp 1. Viết chương trình tính tổng bậc 3 của N số nguyên đầu tiên. 2. Viết chương trình nhập vào một số nguyên rồi in ra tất cả các ước số của số đó. 3. Viết chương trình vẽ một tam giác cân bằng các dấu * 4. Viết chương trình tính tổng nghịch đảo của N số nguyên đầu tiên theo công thức S = 1 + 1/2 + 1/3 + + 1/N 5. Viết chương trình tính tổng bình phương các số lẻ từ 1 đến N. 6. Viết chương trình nhập vào N số nguyên, tìm số lớn nhất, số nhỏ nhất. 7. Viết chương trình nhập vào N rồi tính giai thừa của N. 8. Viết chương trình tìm USCLN, BSCNN của 2 số. 9. Viết chương trình vẽ một tam giác cân rỗng bằng các dấu *. 10. Viết chương trình vẽ hình chữ nhật rỗng bằng các dấu *. 11. Viết chương trình nhập vào một số và kiểm tra xem số đó có phải là số nguyên tố hay không? Hàm: 1. Viết hàm tính n! 2. Viết hàm tính tổng S = 1+2+.+n. 3. Viết hàm kiểm tra số nguyên tố. 4. Viết hàm tính số hạng thứ n trong dãy Fibonacci. 5. Viết hàm tìm số lớn nhất trong 2 số. Mảng và chuỗi: 1. Viết hàm tìm số lớn nhất, nhỏ nhất trong một mảng n số nguyên. 2. Viết hàm sắp xếp tăng dần, giảm dần của một dãy số cho trước. 3. Viết hàm tách tên và họ lót từ một chuỗi cho trước. 4. Viết hàm cắt bỏ khoảng trắng thừa ở giữa, hai đầu. 5. Viết hàm chuyển đổi 1 chuỗi sang chữ thường và 1 hàm chuyển đổi sang chữ HOA. 6. Viết hàm chuyển đổi 1 chuỗi sang dạng Title Case (kí tự đầu của mỗi từ là chữ HOA, các kí tự còn lại chữ thường) 7. Viết chương trình nhập vào 1 chuỗi và in ra chuỗi đảo ngược. Ví dụ: Nhập vào chuỗi "Lap trinh C can ban" In ra "nab nac C hnirt paL" 8. Viết chương trình nhập vào một chuỗi ký tự rồi đếm xem trong chuỗi đó có bao nhiêu chữ 'th'. Hướng dẫn giải 57 1. Viết chương trình đổi một số nguyên hệ 10 sang hệ 2. #include "stdio.h" #include "conio.h" #include "alloc.h" #include "string.h" char* doiCoSo(int so) { char* kq=(char*)malloc(255); int thuong=so; kq=""; while(thuong) { int du=thuong%2; thuong/=2; kq[strlen(kq)+1]=0; if(du<10) kq[strlen(kq)]=du+'0'; else kq[strlen(kq)]=du-10+'A'; } strrev(kq); return kq; } void main() { int so; printf("CHUONG CHINH DOI MOT SO TU CO SO 10 SANG CO SO 2 /n"); printf("So can chuyen:"); scanf("%d",&so); printf("So chuyen:%s",doiCoSo(so)); getch(); } 2. Viết chương trình đổi một số nguyên hệ 10 sang hệ 16. #include "stdio.h" #include "conio.h" #include "alloc.h" #include "string.h" char* doiCoSo(int so) { char* kq=(char*)malloc(255); int thuong=so; kq=""; 58 while(thuong) { int du=thuong%16; thuong/=16; kq[strlen(kq)+1]=0; if(du<10) kq[strlen(kq)]=du+'0'; else kq[strlen(kq)]=du-10+'A'; } strrev(kq); return kq; } void main() { int so; printf("CHUONG CHINH DOI MOT SO TU CO SO 10 SANG CO SO 16 /n"); printf("So can chuyen:"); scanf("%d",&so); printf("So chuyen:%s",doiCoSo(so)); getch(); } 3. Viết chương trình đọc và 2 số nguyên và in ra kết quả của phép (+), phép trừ (-), phép nhân (*), phép chia (/). Nhận xét kết quả chia 2 số nguyên. #include #include int main () { int so1, so2; float thuong; clrscr(); printf("\n Nhap vao 2 so nguyen "); scanf("%d%d",&so1,&so2); printf("\n %d + %d =%d",so1, so2, so1+so2); printf("\n %d - %d =%d",so1, so2, so1-so2); printf("\n %d * %d =%d",so1, so2, so1*so2); if (so2!=0) { thuong=float(so1)/float(so2); printf("\n %d / %d =%f", so1, so2, thuong); } else printf("Khong chia duoc cho 0"); getch(); return 0; } 59 4. Viết chương trình nhập vào bán kính hình cầu, tính và in ra diện tích, thể tích của hình cầu đó. Hướng dẫn: S = 4πR2 và V = (4/3)πR3. #include #include int main () { int bk; clrscr(); printf(" nhap vao ban kinh cua hinh cau: "); scanf("%d",&bk); printf(" Dien tich cua ban cau la: %.2f\n",4*3.14*bk*bk); printf(" The tich cua ban cau la : %.2f\n",(4/3)*3.14*3*bk); getch(); return 0; } 5. Viết chương trình nhập vào một số a bất kỳ và in ra giá trị bình phương (a2), lập phương (a3) của a và giá trị a4. #include #include int main () { int a; clrscr(); printf(" nhap vao mot so a bat ki: "); scanf("%d",&a); printf(" Binh phuong cua so a la %d:\n",a*a); printf(" Lap phuong cua so a la :%d\n",a*a*a); printf(" Gia tri a^4 la : %d\n",a*a*a*a); getch(); return 0; } 6. Viết chương trình đọc từ bàn phím 3 số nguyên biểu diễn ngày, tháng, năm và xuất ra màn hình dưới dạng "ngay/thang/nam" (chỉ lấy 2 số cuối của năm). #include #include int main () { int ngay,thang,nam; clrscr(); printf(" Nhap vao 3 so : ngay, thang, nam"); scanf("%d%d%d",&ngay,&thang,&nam); if(ngay==0|| ngay>31) printf("nhap sai ngay ! moi kiem tra lai ngay\n"); else if (thang==0||thang>12) printf("nhap sai thang ! moi kiem tra lai thang\n"); else if (nam==0||nam>100) printf("nhap sai nam ! moi kiem tra lai nam\n"); else 60 printf("ban vua nhap ngay,thang,nam:%d:%d:%d",ngay,thang,nam); getch(); return 0; } 7. Viết chương trình nhập vào số giây từ 0 đến 86399, đổi số giây nhập vào thành dạng "gio:phut:giay", mỗi thành phần là một số nguyên có 2 chữ số. Ví dụ: 02:11:05 #include #include void main() { int giay,phut,gio; printf("Nhap giay: "); scanf("%d",&giay); gio=giay/3600; giay=giay%3600; phut=giay/60; giay=giay%60; printf("\nSau khi chuyen: "); char a[3],b[3],c[3]; if (gio<10) printf("0%d:",gio); else printf("%d:",gio); if (phut<10) printf("0%d:",phut); else printf("%d:",phut); if (gio<10) printf("0%d",giay); else printf("%d",giay); getch(); } Hàm if: 1. Viết chương trình nhập vào số nguyên dương, in ra thông báo số chẵn hay lẻ. Hướng dẫn: Nhập vào số nguyên dương x. Kiểm tra nếu x chia chẵn cho hai thì x là số chẵn (hoặc chia cho 2 dư 0) ngược lại là số lẻ. #include #include int main () { int a; clrscr(); printf(" nhap vao mot so a bat ki: "); scanf("%d",&a); 61 if(a%2==0) printf("So nhap vao la so chan\n"); else printf("So nhap vao la so le\n"); getch(); return 0; } 2. Viết chương trình nhập vào 4 số nguyên. Tìm và in ra số lớn nhất. Hướng dẫn: Ta có 4 số nguyên a, b, c, d. Tìm 2 số nguyên lớn nhất x, y của 2 cặp (a, b) và (c, d). Sau đó so sánh 2 số nguyên x, y để tìm ra số nguyên lớn nhất. #include #include main() { int a,b,c,d,max1,max2; printf("\n nhap so thu nhat="); scanf("%d",&a); printf("\n nhap so thu hai="); scanf("%d",&b); printf("\n nhap so thu ba="); scanf("%d",&c); printf("\n nhap so thu tu="); scanf("%d",&d); if(a>b) max1=a; else max1=b; if(c>d) max2=c; else max2=d; if (max1>max2) printf("so lon nhat trong 4 so la:%d",max1); else printf("so lon nhat trong 4 so la:%d",max2); getch(); } 3. Viết chương trình giải phương trình bậc 2: ax2 + bx + c = 0, với a, b, c nhập vào từ bàn phím. Hướng dẫn: Nhập vào 3 biến a, b, c. Tính Delta = b*b - 4*a*c Nếu Delta < 0 thì Phương trình vô nghiệm Ngược lại Nếu Delta = 0 thì x1 = x2 = - b/(2*a) Ngược lại x1 = (- b - sqrt(Delta))/(2*a) 62 x2 = (- b + sqrt(Delta))/(2*a) Hết Nếu Hết Nếu #include #include #include void main () { clrscr(); float a,b,c,delta; printf("ban hay nhap a,b,c vao "); scanf("%f%f%f",&a,&b,&c);// cac he so cua pt bac 2 if (a!=0) { delta=b*b-4*a*c; if (delta>0) { printf("phuong trinh co 2 nghiem: "); printf("x1=%.2f",(-b-sqrt(delta))/(2*a)); printf(" x2=%.2f",(-b+sqrt(delta))/(2*a)); } else //TH a0 va delta <=0 { if (delta==0) { printf("phuong trinh co nghiem kepn"); printf("x=%.2f",-b/(2*a)); } else printf("phuong trinh vo nghiem "); } } else // (If a==0) { if (b!=0) // a luc nay =0 { printf("phuong trinh co 1 nghiemn"); printf("x=%.2f",-c/b); } else // a=0 va b=0 { if (c!=0) printf("phuong trinh khong xac dinh"); else printf("phuong trinh vo so nghiem"); } } 63 getch(); } 4. Viết chương trình nhập vào giờ phút giây (hh:mm:ss). Cộng thêm số giây nhập vào và in ra kết quả dưới dạng hh:mm:ss. Hướng dẫn: Nhập vào giờ phút giây vào 3 biến gio, phut, giay và nhập và giây công thêm vào biến them: Nếu giay + them < 60 thì giay = giay + them Ngược lại giay = (giay + them) - 60 phut = phut + 1 Nếu phut >= 60 thì phut = phut - 60 gio = gio + 1 Hết nếu Hết nếu #include #include main() { clrscr(); int h,m,s,t; printf("\nnhap vao gio, phut, giay:"); scanf ("%d%d%d",&h,&m,&s); printf("\nnhap them giay muon cong vao :"); scanf ("%d",&t); if (s+t<60) s=s+t; else { s=(s+t)-60; m=m+1; } if (m>=60) { m=m-60; h=h+1; } printf("\gio : phut : giay sau khi cong vao la: %d:%d:%d",h,m,s); getch(); } 5. Viết chương trình nhập vào 3 số nguyên rồi in ra màn hình theo thứ tự tăng dần. #include #include void sapxep(int &x,int &y) 64 { int t; if (x>y) { t=x; x=y; y=t; } } main() { int a,b,c; printf("\n nhap so thu nhat="); scanf("%d",&a); printf("\n nhap so thu hai="); scanf("%d",&b); printf("\n nhap so thu ba="); scanf("%d",&c); sapxep(a,b); sapxep(a,c); sapxep(b,c); printf("Ba so a,b,c da dc sap xep la:%d %d %d",a,b,c); getch(); } Vòng lặp 1. Viết chương trình tính tổng bậc 3 của N số nguyên đầu tiên. #include #include main() { int n,k,s=0; printf("Nhap vao so N :"); scanf("%d",&n); s=0; for(k=1;k<=n;k++) s=s+(k*k*k); printf("Tong bac 3 cac so dau tien cua n: %d.\n",s); getch(); } 2. Viết chương trình nhập vào một số nguyên rồi in ra tất cả các ước số của số đó. #include #include void main() { clrscr(); 65 int n,i; printf("nhap so nguyen n:"); scanf("%d",&n); printf("cac uoc so cua %d la:",n); for(i=1;i<=n;i++) if(n%i==0) printf("%3d;",i); getch(); } 3. Viết chương trình vẽ một tam giác cân bằng các dấu * #include #include void main() { clrscr(); int n,i,j; printf("nhap chieu cao tam giac:"); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=n-i;j++) printf(" "); for(j=1;j<=2*i-1;j++) printf("*"); printf("\n"); } getch(); } 4. Viết chương trình tính tổng nghịch đảo của N số nguyên đầu tiên theo công thức S = 1 + 1/2 + 1/3 + + 1/N 5. Viết chương trình tính tổng bình phương các số lẻ từ 1 đến N. #include #include int n,i,s; int main() { printf("nhap vao so nguyen n: "); scanf("%d",&n); //nhap vao so nguyen n s=0; //khoi tao tong, gan gia tri cua tong ban dau bang 0 for(int i=1;i<=n;i=i+2) s=s+i*i; //cho i chay tu 1 den n, moi lan tang i 2 don vi, cong tong voi i binh phuong printf("/n Tong binh phuoc cac so le la:%d",s); getch(); } 6. Viết chương trình nhập vào N số nguyên, tìm số lớn nhất, số nhỏ nhất. #include 66 #include int max,min,i,n; int a[100]; void main() { printf("nhap vao so phan tu cua mang:"); scanf("%d",&n); for(int i=0;i<n;i++) { printf("nhap phan tu thu:%d ",i); scanf("%d",&a[i]); } max=a[0]; min=a[0]; for(i=0;i<n;i++) { if(max<a[i]) max=a[i]; if(min>a[i]) min=a[i]; } printf("gia tri lon nhat cua mang la: %d\n",max); printf("gia tri nho nhat cua mang la: %d\n",min); getch(); } 7. Viết chương trình nhập vào N rồi tính giai thừa của N. #include #include void main () { int n,i,gt; clrscr(); printf(" nhap vao mot so n bat ki: "); scanf("%d",&n); gt=1; for(i=1;i<=n;i++) gt=gt*i; printf(" Giai thua cua so a la %d:\n",gt); getch(); } 8. Viết chương trình tìm USCLN, BSCNN của 2 số. #include #include int uscln(int a , int b) { if (a < 0) a = -a; if (b < 0) b = -b; if (a == 0) return b; 67 if (b == 0) return a; while (a != b) { if (a > b) a -= b; else b-= a; } return b; } void main() { int a , b; printf(" Nhap so a:"); scanf("%d",&a); printf(" Nhap so b:"); scanf("%d",&b); printf("USCLN = %d\n",uscln(a,b)); printf("BSCNN = %d",(a*b)/uscln(a,b)); getch(); } 9. Viết chương trình vẽ một tam giác cân rỗng bằng các dấu *. #include #include void main () { int n; printf ("Nhap chieu cao cua tam giac : "); scanf ("%d" , &n); n = 2*n-1; for (int i = 1 ; i <= n ; i++) { for (int j = 1 ; j <= n ; j++) { if ( (i == n || i == j || i+j == n+1) && i >= (n/2)+1) printf ("%c" , '*'); else printf (" "); } printf ("\n"); } getch(); } 10. Viết chương trình vẽ hình chữ nhật rỗng bằng các dấu *. #include #include void main () { 68 int n , m; printf ("Nhap chieu rong : "); scanf ("%d" , &n); printf ("Nhap chieu cao : "); scanf ("%d" , &m); for (int i = 1 ; i <= m ; i++) { for (int j = 1 ; j <= n ; j++) { if (i == 1 || i == m || j == 1 || j == n) printf ("%c" , '*'); else printf (" "); } printf ("\n"); } getch(); } 11. Viết chương trình nhập vào một số và kiểm tra xem số đó có phải là số nguyên tố hay không? #include #include void main () { int n; do { printf ("Nhap vao so can kiem tra : "); scanf ("%d" , &n); } while (n < 2); int i = 2; while (n%i != 0) i++; if (n == i) printf ("Do la so NGUYEN TO \n"); else printf ("Khong phai so NGUYEN TO \n"); getch(); } Hàm: 1. Viết hàm tính n! int tong (int n) { int i, s=1; for (i=1;i<=n;i++) s*=i; return s; } 2. Viết hàm tính tổng S = 1+2+.+n. int tong (int n) 69 { int i, s=0; for (i=1;i<=n;i++) s+=i; return s; } 3. Viết hàm kiểm tra số nguyên tố. int ktNgto(int n) { int i,demuoc=1,s; for(i=1;i<=n;i++) { if(i%n==0) demuoc++; } if(demuoc==2) s=1; else s=0; return s; } 4. Viết hàm tính số hạng thứ n trong dãy Fibonacci. #include #include int f(int a) // Fibonacci { if(a==1 || a==2) return a; else return (f(a-1)+f(a-2)); } void main() { int i,n; clrscr(); printf("Nhap vao gia tri cho n : "); scanf("%d",&n); for(i=1;i<=n;i++) printf("%d ",f(i)); getch(); } 5. Viết hàm tìm số lớn nhất trong 2 số. int max (int a,int b) { If(a>b) return a; Else return b; } Mảng và chuỗi: 1. Viết hàm tìm số lớn nhất, nhỏ nhất trong một mảng n số nguyên. 70 int tmax(int a[],int n) { int i,max; max=a[0]; for (i=1;i<n;i++) if (max<a[i]) max=a[i]; return max; } * Hàm tìm số nhỏ nhất int tmin(int a[],int n) { int i,min; min=a[0]; for (i=1;i<n;i++) if (min>a[i]) min=a[i]; return min; } 2. Viết hàm sắp xếp tăng dần, giảm dần của một dãy số cho trước. * Hàm sắp xếp tăng dần void sxtd(int a[],int n) { int i,j,tam; for (i=0;i<n;i++) for (j=i+1;j<n;j++) if (a[i]>a[j]) {tam=a[i]; a[i]=a[j]; a[j]=tam;} } * Hàm sắp xếp giảm dần void sxgd(int a[],int n) { int i,j,tam; for (i=0;i<n;i++) for (j=i+1;j<n;j++) if (a[i]<a[j]) { tam=a[i]; a[i]=a[j]; a[j]=tam; } } 3. Viết hàm tách tên và họ lót từ một chuỗi cho trước. #include #include #include void tach (char s[],char ten[],char lot[]) { int i,j,n; 71 n=strlen(s); for (i=n-1;i>0;i--) if (s[i]==' ') break; for (j=0;j<i;j++) lot[j]=s[j]; lot[i]='\0'; for (j=i+1;j<n;j++) ten[j-i-1]=s[j]; ten[n-i-1]='\0'; } void main(void) { char s[30],ten[20],lot[20]; printf(" nhap ho va ten \n"); gets(s); tach(s,ten,lot); printf (" \n ho va chu lot: \n"); puts(lot); printf(" ten: \n"); puts(ten); getch(); } 4. Viết hàm cắt bỏ khoảng trắng thừa ở giữa, hai đầu. #include #include #include void catbo( char s[]) { int n,i,j=0; char t[30]; n=strlen(s); for (i=0;i<n;i++) if (s[i]!=' ') t[i-j]=s[i]; else j++; t[n-j]='\0'; strcpy(s,t); } void main(void) { char s[30]; printf(" nhap chuoi: \n"); gets(s); catbo(s); puts(s); 72 getch(); } 5. Viết hàm chuyển đổi 1 chuỗi sang chữ thường và 1 hàm chuyển đổi sang chữ HOA. 6. Viết hàm chuyển đổi 1 chuỗi sang dạng Title Case (kí tự đầu của mỗi từ là chữ HOA, Code giải bài 5 và bài 6: #include #include #include #include void t_hoa(char s[]) { int i,n; n=strlen(s); for (i=0;i<n;i++) s[i]=toupper(s[i]); } void t_thuong(char s[]) { int i,n; n=strlen(s); for (i=0;i<n;i++) s[i]=tolower(s[i]); } void hoadd(char s[]) { int i,n; n=strlen(s); s[0]=toupper(s[0]); for (i=1;i<n;i++) s[i]=tolower(s[i]); } void main(void) { char s[30]; printf(" nhap chuoi: \n"); gets(s); t_hoa(s); printf(" chuoi da doi thanh chu hoa: \n"); puts(s); t_thuong(s); printf(" chuoi doi thanh chu thuong: \n"); puts(s); hoadd(s); printf(" chuoi doi thanh chu hoa dau dong con lai thuong: \n"); puts(s); getch(); } 73 các kí tự còn lại chữ thường) 7. Viết chương trình nhập vào 1 chuỗi và in ra chuỗi đảo ngược. #include #include #include void main(void) { char s[30],t[30]; int i,n; printf(" nhap chuoi:\n"); gets(s); n=strlen(s); for (i=0;i<n;i++) t[i]=s[n-i-1]; t[n]='\0'; print

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

  • pdflap_trinh_co_ban_6662.pdf
Tài liệu liên quan