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ừ đó.
73 trang |
Chia sẻ: tieuaka001 | Lượt xem: 638 | Lượt tải: 0
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:
- lap_trinh_co_ban_6662.pdf