Họ và tên: Phạm Văn Thái
Lớp: AT15E (L09)
MSV: AT150551
Lập Trình Căn Bản
Buổi 1:
1. Một số hoàn hảo là một số có tổng các ước số của nó bằng chính số đó. Hãy tìm số hồn
hảo nhỏ hơn 5000. Ví dụ: 6 có các ước số là 1, 2, 3 và 6 = 1 + 2 + 3.
Cụ thể hơn với số n bất kỳ:
#include <stdio.h>
#include <stdlib.h>
int main(){
int n,tong=0;
do {
printf("nhap n = ");
scanf("%d",&n);
if (n<1) printf("\nn duong, nhap lai\n");
} while (n<1);
printf("\nso hoan hao la: ");
for (int i=1;i<=n;i++){
if (i==1) {
printf("1");
continue;
}
for (int j=1;jif (i%j==0) tong+=j;
}
if (i==tong) printf("\t%d",i);
tong=0;
}
return 0;
}
P h ạ m V ă n T h á i - P a g e 1 | 62
Sử dụng hàm:
#include <stdio.h>
#include <stdlib.h>
void timsohoanhao(int n) {
int tong=0;
for (int i=1; i<=n; i++) {
if (i==1) {
printf("1");
continue;
}
for (int j=1; j
if (i%j==0)
tong+=j;
}
if (i==tong)
printf("\t%d",i);
tong=0;
}
}
int main() {
int n;
do {
printf("nhap n = ");
scanf("%d",&n);
if (n<1)
printf("\nn duong, nhap lai\n");
}
while (n<1);
printf("\nso hoan hao la: ");
timsohoanhao(n);
return 0;
}
P h ạ m V ă n T h á i - P a g e 2 | 62
2. Tính tổng bình phương của 2 số
#include <stdio.h>
#include <stdlib.h>
int main(){
int a,b;
do {
printf("nhap a = ");
scanf("%d",&a);
printf("\nnhap b = ");
scanf("%d",&b);
if (a<0) printf("\na duong, nhap lai\n");
if (b<0) printf("\nb duong, nhap lai\n");
} while (a<0||b<0);
printf("\ntong binh phuong cua %d va %d la: %d",a,b,a*a+b*b);
return 0;
}
P h ạ m V ă n T h á i - P a g e 3 | 62
Sử dụng hàm:
#include <stdio.h>
#include <stdlib.h>
void nhap(char ten,int *a) {
do {
printf("nhap %c = ",ten);
scanf("%d",a);
if (*a<0)
printf("\n%c duong, nhap lai\n",ten);
}
while (*a<0);
}
int tongbp(int a, int b){
return (a*a+b*b);
}
int main() {
int a,b;
nhap('a',&a);
nhap('b',&b);
printf("\ntong binh phuong cua %d va %d la: %d",a,b,tongbp(a,b));
return 0;
}
P h ạ m V ă n T h á i - P a g e 4 | 62
3. Viết chương trình giải hệ phương trình bậc nhất:
– ax + by = c
– dx + ey = f
Hướng dẫn : Phải nhớ được công thức : D, Dx, Dy,
Xét điều kiện cho D, Dx, Dy
#include <stdio.h>
#include <stdlib.h>
int main() {
int a,b,c,d,e,f;
printf("he phuong trinh dang:");
printf("\nax+by=c");
printf("\ndx+ey=f");
printf("\nnhap a,b,c,d,e,f theo thu tu cua he\n");
scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f);
int D, Dx, Dy;
D= a*e-b*d;
Dx= c*e-b*f;
Dy= a*f-c*d;
if (D==0) {
if (c==f)
printf("\nhe vo so nghiem");
else
printf("\nhe vo nghiem");
}
else
printf("\nhe co nghiem duy nhat x = %7.3f, y = %7.3f",(float)Dx/D, (float)Dy/D);
P h ạ m V ă n T h á i - P a g e 5 | 62
return 0;
}
Sử dụng hàm:
#include <stdio.h>
#include <stdlib.h>
void timnghiem(int a, int b, int c, int d, int e, int f){
int D, Dx, Dy;
D= a*e-b*d;
Dx= c*e-b*f;
Dy= a*f-c*d;
if (D==0) {
if (c==f)
printf("\nhe vo so nghiem");
else
printf("\nhe vo nghiem");
}
else
printf("\nhe co nghiem duy nhat x = %7.3f, y = %7.3f",(float)Dx/D, (float)Dy/D);
}
int main() {
int a,b,c,d,e,f;
printf("he phuong trinh dang:");
printf("\nax+by=c");
printf("\ndx+ey=f");
printf("\nnhap a,b,c,d,e,f theo thu tu cua he\n");
scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f);
timnghiem(a,b,c,d,e,f);
return 0;
P h ạ m V ă n T h á i - P a g e 6 | 62
}
P h ạ m V ă n T h á i - P a g e 7 | 62
4. Giai phuong trinh ax2 +bx +c =0
Bài này không nói gì a<>0 thì phải xét cả a=0, a<>0
#include <stdio.h>
#include <stdlib.h>
int main() {
int a,b,c;
printf("phuong trinh dang:");
printf("\nax^2+bx+c=0");
printf("\nnhap a,b,c theo thu tu\n");
scanf("%d%d%d",&a,&b,&c);
if (a==0)
printf("phuong trinh co nghiem duy nhat x = %8.3f",-c/(float)b);
else {
int denta;
denta= b*b-4*a*c;
if (denta<0)
printf("phuong trinh vo nghiem");
else if (denta==0)
printf("phuong trinh co nghiem kep x = %8.3f",-b/(float)2*a);
else {
printf("phuong trinh co 2 nghiem phan biet x1 = %8.3f, x2 = %8.3f",(-b+sqrt(denta))/
(float)2*a,(-b-sqrt(denta))/(float)2*a);
}
}
return 0;
}
P h ạ m V ă n T h á i - P a g e 8 | 62
5. Giải phương trình trùng phương
Ax4+bx2+c=0
Đặt t=x2
#include <stdio.h>
#include <stdlib.h>
int main() {
int a,b,c;
printf("phuong trinh dang:");
printf("\nax^4+bx^2+c=0");
printf("\nnhap a,b,c theo thu tu\n");
scanf("%d%d%d",&a,&b,&c);
if (a==0) {
if (b==0 && c==0)
printf("phuong trnh co vo so nghiem");
else if (b==0 && c!=0)
printf("phuong trinh vo nghiem");
else if (b!=0 && c==0)
printf("phuong trinh co nghiem duy nhat x = 0");
else {
if (-c/b>0)
printf("phuong trinh co 2 nghiem phan biet: x1 = %8.3f, x2 = %8.3f",sqrt((float)-c/b),sqrt((float)-c/b));
else
printf("phuong trinh vo nghiem");
}
}
else {
if (c==0) {
if (-b/a<=0)
printf("phuong trinh co nghiem duy nhat x = 0");
else
P h ạ m V ă n T h á i - P a g e 9 | 62
printf("phuong trinh co 3 nghiem: x1 = 0; x2 = %8.3f, x3 = %8.3f", sqrt(-b/(float)a),-sqrt(-b/
(float)a));
}
else {
int denta;
denta= b*b-4*a*c;
if (denta<0)
printf("phuong trinh vo nghiem");
else if (denta==0) {
if (-b/2*a<0)
printf("phuong trinh vo nghiem");
else
printf("phuong trinh 2 nghiem x1 = %8.3f, x2 = %8.3f",sqrt(-b/(float)2*a),-sqrt(-b/
(float)2*a));
}
else {
if (((-b+sqrt(denta))/(float)2*a>0)&&((-b-sqrt(denta))/(float)2*a)>0)
printf("phuong trinh co 4 nghiem phan biet x1 = %8.3f, x2 = %8.3f, x3 = %8.3f, x4 =
%8.3f",sqrt((-b+sqrt(denta))/(float)2*a),-sqrt((-b+sqrt(denta))/(float)2*a),sqrt((-b-sqrt(denta))/
(float)2*a),-sqrt((-b-sqrt(denta))/(float)2*a));
else if (((-b+sqrt(denta))/(float)2*a<0)&&((-b-sqrt(denta))/(float)2*a)<0)
printf("phuong trinh vo nghiem");
else if (((-b+sqrt(denta))/(float)2*a>0)&&((-b-sqrt(denta))/(float)2*a)<0)
printf("phuong trinh co 2 nghiem phan biet x1 = %8.3f, x2 = %8.3f",sqrt((-b+sqrt(denta))/
(float)2*a),-sqrt((-b+sqrt(denta))/(float)2*a));
else if (((-b+sqrt(denta))/(float)2*a<0)&&((-b-sqrt(denta))/(float)2*a)>0)
printf("phuong trinh co 2 nghiem phan biet x1 = %8.3f, x2 = %8.3f",sqrt((-b-sqrt(denta))/
(float)2*a),-sqrt((-b-sqrt(denta))/(float)2*a));
}
}
}
return 0;
}
P h ạ m V ă n T h á i - P a g e 10 | 62
6. Viết chương trình nhập vào số nguyên h và in ra màn hình tam giác cân có chiều cao h
H=1
H=1
H=1
J=1
Hướng dẫn:
Tam giác đặc: số dòng là số chiều cao nhập vào (vd h4)
Đáy =2*h-1
Vịng for ngồi I chạy theo dòng (1-h=4)
Vòng for trong (j=1-2*h-1)
ứng với i=1: j=[4,4]
i=2-> j=[3, 5]
i=3-> j=[2,6]
i=4-> j=[1,7]
[a, b]
a=h-i+1
b=h+i-1
for(i=1;i<=h;i++)
for(j=1;j<=2*h-1;j++)
if (j>=h-i+1 &&j<=h+i-1) printf(“ * “);
else printf(“ “);
tam giac khong dac: nghi lai (hoi Chien)
P h ạ m V ă n T h á i - P a g e 11 | 62
Hình 1
#include <stdio.h>
#include <stdlib.h>
int main() {
int h;
do {
printf("nhap chieu cao h = ");
scanf("%d",&h);
if (h<1)
printf("\nh duong, nhap lai\n");
}
while (h<1);
for (int i=1; i<=h; i++) {
for (int j=1; j<=2*h-1; j++) {
if (j<=h-i||j>=h+i)
printf(" ");
else
printf("*");
}
printf("\n");
}
return 0;
}
P h ạ m V ă n T h á i - P a g e 12 | 62
Hình 2
#include <stdio.h>
#include <stdlib.h>
int main() {
int h;
do {
printf("nhap chieu cao h = ");
scanf("%d",&h);
if (h<1)
printf("\nh duong, nhap lai\n");
}
while (h<1);
for (int i=1; i<=h; i++) {
for (int j=1; j<=2*h-1; j++) {
if (i==1) {
if (j==h)
printf("*");
else {
printf(" ");
continue;
}
}
if (i==h) {
printf("*");
continue;
}
if (j==h-i||j==h+i)
printf("*");
else
printf(" ");
}
printf("\n");
}
return 0;
}
P h ạ m V ă n T h á i - P a g e 13 | 62
7. Viết chương trình thực hiện các yêu cầu sau:
Thực hiện lặp lại việc nhập 1 số nguyên dương n từ bàn phím, tính n! (n
giai thừa). Kết thúc chương trình khi nhập n=0.
In kết quả ra màn hình.
Ví dụ: nhập 3 tính 3!=6 enter lại quay lại nhập n=4… khi nào nhập n=0 thì mới thốt
C1: dùng goto
C2: dùng if… else, while, do…while, switch
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
return1:
do {
printf("nhap n = ");
scanf("%d",&n);
if (n<1)
printf("\nn duong, nhap lai\n");
}
while (n<1);
int giaithua(unsigned int n) {
if (n<=1)
return 1;
else
return n*giaithua(n-1);
}
printf("%d! = %d\n",n,giaithua(n));
goto return1;
return 0;
}
P h ạ m V ă n T h á i - P a g e 14 | 62
#include <stdio.h>
#include <stdlib.h>
unsigned int giaithua(int n)
{
if (n<=1)
return 1;
else
return n*giaithua(n-1);
}
int main()
{
int n;
while (1)
{
printf("\nnhap n = ");
scanf("%d",&n);
if (n==0)
break;
printf("\n%d! = %d",n,giaithua(n));
}
return 0;
}
P h ạ m V ă n T h á i - P a g e 15 | 62
8. Cần có tổng 200000 đồng từ 3 loại giấy bạc 1000 đồng, 2000 đồng, 5000 đồng. Lập
chương trình để tìm ra tất cả các phương án có thể
Hướng dẫn: x * 1000 + y * 2000 + z * 5000 = 200.000
200 * 1000 = 200000 => x thuộc [0, 200]
100 * 2000 = 200000 => y thuộc [0, 100]
40 * 5000 = 200000 => z thuộc [0, 40]
For(x=0;x<=200;x++)
For(y=0;y<=100;y++)
For(z=0;z<=40;z++)
If (x * 1000 + y * 2000 + z * 5000 ==200000) in ra x, y , z
#include <stdio.h>
#include <stdlib.h>
int main() {
int dem=0;
printf("cac truong hop chia 200000 theo 3 loai 1000, 2000, 5000 la:");
for (int i=1; i<=40; i++)
for (int j=1; j<= 100; j++)
for (int k=1; k<=200; k++)
if ((i*5000+j*2000+k*1000)==200000) {
dem++;
printf("\nTH%d: co %d to 1000, %d to 2000, %d to 5000",dem,k,j,i);
}
return 0;
}
P h ạ m V ă n T h á i - P a g e 16 | 62
9. Viết chương trình in ra tam giác cân có độ cao h
a. Tam giác cân đặc nằm giữa màn hình
b. Tam giác cân rỗng nằm giữa màn hình
c. Tam giác vuông cân đặc
d. Tam giác vuông cân rỗng
a.
#include <stdio.h>
#include <stdlib.h>
int main() {
int h;
do {
printf("nhap chieu cao h = ");
scanf("%d",&h);
if (h<1)
printf("\nh duong, nhap lai\n");
}
while (h<1);
for (int i=1; i<=h; i++) {
for (int j=1; j<=2*h-1; j++) {
if (j<=h-i||j>=h+i)
printf(" ");
else
printf("*");
}
printf("\n");
}
return 0;
}
P h ạ m V ă n T h á i - P a g e 17 | 62
b.
#include <stdio.h>
#include <stdlib.h>
int main() {
int h;
do {
printf("nhap chieu cao h = ");
scanf("%d",&h);
if (h<1)
printf("\nh duong, nhap lai\n");
}
while (h<1);
for (int i=1; i<=h; i++) {
for (int j=1; j<=2*h-1; j++) {
if (i==1) {
if (j==h)
printf("*");
else {
printf(" ");
continue;
}
}
if (i==h) {
printf("*");
continue;
}
prinf((j==h-i||j==h+i) ? "*":" ");
}
printf("\n");
}
return 0;
}
P h ạ m V ă n T h á i - P a g e 18 | 62
c.
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
printf("\nNhap n: ");
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++)
printf((j<=i)? "*":" ");
printf("\n");
}
return 0;
}
d.
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
printf("\nNhap n: ");
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++)
printf((j==i||j==1||i==n)? "*":" ");
printf("\n");
}
return 0;
}
P h ạ m V ă n T h á i - P a g e 19 | 62
10.Chương trình kiểm tra xem số N có phải là số nguyên tố không?
Liệt kê tất cả các số nguyên tố nhỏ hơn giá trị N nhập từ bàn phím
Phần 1:
#include <stdio.h>
#include <stdlib.h>
int main() {
int n,dem=0;
printf("Nhap N: ");
scanf("%d", &n);
for(int i = 2; i <= sqrt(n); i++) {
if (n%i==0) {
printf("N khong phai la so nguyen to");
dem++;
break;
}
}
if (dem==0||n==2||n==3)
printf("%d la so nguyen to",n);
return 0;
}
P h ạ m V ă n T h á i - P a g e 20 | 62
Sử Dụng Hàm:
#include <stdio.h>
#include <stdlib.h>
int ktsonguyento(int n)
{
int dem = 0;
for(int i = 2; i <= sqrt(n); i++)
{
if (n%i==0)
{
return 0;
dem++;
break;
}
}
if (dem==0||n==2||n==3)
return 1;
}
int main()
{
int n,dem=0;
printf("Nhap N: ");
scanf("%d", &n);
if (ktsonguyento(n))
printf("%d la so nguyen to",n);
else
printf("N khong phai la so nguyen to");
return 0;
}
P h ạ m V ă n T h á i - P a g e 21 | 62
Phần 2:
#include <stdio.h>
#include <stdlib.h>
int main() {
int n,dem=0;
do {
printf("nhap n = ");
scanf("%d",&n);
if (n<1)
printf("\nn duong, nhap lai\n");
}
while (n<1);
printf("\ncac so nguyen to la:\n");
for (int i=2; i<=n; i++) {
for(int j = 2; j <= sqrt(i); j++) {
if (i%j==0) {
dem++;
break;
}
}
if (dem==0||i==2||i==3)
printf("%d\t",i);
dem=0;
}
return 0;
}
P h ạ m V ă n T h á i - P a g e 22 | 62
Sử Dụng Hàm:
#include <stdio.h>
#include <stdlib.h>
void songuyento (int n){
int dem=0;
for (int i=2; i<=n; i++) {
for(int j = 2; j <= sqrt(i); j++) {
if (i%j==0) {
dem++;
break;
}
}
if (dem==0||i==2||i==3)
printf("%d\t",i);
dem=0;
}
}
int main() {
int n;
do {
printf("nhap n = ");
scanf("%d",&n);
if (n<1)
printf("\nn duong, nhap lai\n");
}
while (n<1);
printf("\ncac so nguyen to la:\n");
songuyento(n);
return 0;
}
P h ạ m V ă n T h á i - P a g e 23 | 62
Bài tập buổi 2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int check_year (int year)
{
return (((year%4==0)&&(year%100!=0))||(year%400==0));
}
int check_month (int month)
{
return (month <=12 && month >=1);
}
int check_day (int day, int year, int month)
{
if (month==2)
{
if (check_year(year))
return (day<=29&&day>=1);
else
return (day<=28&&day>=1);
P h ạ m V ă n T h á i - P a g e 24 | 62
}
else if (month==1||month==3||month==5||month==7||month==8||month==10||month==12)
return (day<=31&&day>=1);
else
return (day<=30&&day>=1);
}
char *dayweek (int day, int month, int year)
{
int dayofweek,a,y,m;
a=(14-month)/12;
y=year-a;
m=month+12*a-2;
dayofweek= (day + y + y/4 - y/100 + y/400 + (31*m)/12)%7;
if (dayofweek==0) return "Chu Nhat";
else if (dayofweek==1) return "Thu Hai";
else if (dayofweek==2) return "Thu Ba";
else if (dayofweek==3) return "Thu Tu";
else if (dayofweek==4) return "Thu Nam";
else if (dayofweek==5) return "Thu Sau";
else if (dayofweek==6) return "Thu Bay";
}
int main()
{
int day,month,year;
printf("nhap ngay, thang, nam: ");
scanf("%d%d%d",&day,&month,&year);
if (check_month(month)&&check_year(year)&&check_day(day,month,year))
{
P h ạ m V ă n T h á i - P a g e 25 | 62