You are on page 1of 45

ÔN TẬP LẬP TRÌNH C

1.Xác định đầu vào, đầu ra và vẽ lưu đồ thuật toán cho chương trình tính S:

S = 12 − 22 + 32 −... + (−1)n−1 2

2.Xác định đầu vào, đầu ra và vẽ lưu đồ thuật toán cho chương trình tính n!!.
Nếu n chẵn : n!! = 2 x 4 x 6 x ... x 2n
Nếu n lẻ : n!! = 1 x 3 x 5 x ... x (2n-1)
3.Xác định đầu vào, đầu ra và vẽ lưu đồ thuật toán cho chương trình tính tổng các số hoàn
chỉnh nhỏ hơn n. Với n là số nguyên thỏa 0 < n < 50, nhập từ bàn phím.
4.Trình bày các tính chất của thuật toán?
Xây dựng giải thuật để giải quyết bài toán nhập vào số nguyên n thỏa điều kiện 1<= n <=
100, sau đó kiểm tra số n có phải là số hoàn chỉnh hay không?

Tính chính xác


Nhắc đến tính chất của thuật toán là gì không thể thiếu tính chính xác. Nó là yếu tố quan trọng
hàng đầu, đảm bảo cho kết quả và thao tác thực hiện của máy tính được thực hiện hiệu quả,
khả thi.

Tính rõ ràng
Thuật toán được thực hiện trên nguyên tắc lệnh. Vì vậy các câu lệnh cần được đưa ra một
cách rõ ràng, dễ hiểu và swps xếp theo trình tự nhất định.

Tính khách quan


Thuật toán dù được thực hiện bởi máy tính hay con người đều phải đưa ra kết quả duy nhất,
giống nhau. Nếu kết quả được đưa ra bởi 2 phương pháp này không tương đồng, chứng tỏ
thuật toán cần được xem xét lại.

Tính phổ dụng


Thuật toán đòi hỏi tính ứng dụng cao. Nó không chỉ sử dụng đối với bài toán nhất định mà
được dùng để giải quyết nhiều dạng tương tự.

Tính kết thúc


Như phần thuật toán là gì đã giới thiệu, thuật toán là một tập hợp hữu hạn vì vậy nó luôn có
điểm kết thúc. Điểm kết thúc ở đây được hiểu là khi đã tìm ra kết quả phù hợp.
#include <stdio.h>
#include <conio.h>
int main(){
int n,sum = 0;
do{
printf("\nNhap n = ");
scanf("%d", &n);
if(n>100||n<1)
printf("1 <= n <= 100");
}while(n>100||n<1);
for(int i=0;i<=n/2;i++){
if ( n % i ==0)
sum=sum +i;
}
if (sum == n)
printf(" %d la so hoan thien",n);
else
printf(" %d kh la so hoan thien",n);
return 0;
}

a/ Xác định dầu vào, đầu ra cho bài toán nhập 1 số nguyên dương (n) có giá trị trong khoảng
từ 100 đến 999. In tất cả các số nguyên tố trong khoảng từ 1 đến n.

#include <stdio.h>
#include <math.h>

int main(){
int n;
do{
printf("\nNhap n = ");
scanf("%d", &n);
if(n>999||n<100)
printf("100<n<999");
}while(n>999||n<100);
int i;
int k=0;
for(i = 2; i <= n; i++){
if(n % i == 0){
k++;
}
}
if(k == 0){
printf("\n%d la so nguyen to", n);
}
else
printf("\n%d khong la so nguyen to", n);
return 0;
}

5.Trình bày các nhận xét về thuật giải?


Xây dựng giải thuật để giải quyết bài toán nhập vào số nguyên n thỏa điều kiện 1<= n <=
100, sau đó kiểm tra số n có phải là số chính phương hay không?

#include <stdio.h>

int KT_SCP(int n) // ktra chinh phuong


{
int i = 0;
while (i * i <= n)
{
if (i * i == n)
{
return 1;
}
++i;
}
return 0;
}

void main(void)
{
system("cls");
int n;
do
{
do
{
printf("Input n (1<=n<=100): ");
scanf("%d", &n);
} while (n > 100);
} while (n < 1);
if (KT_SCP(n) == 1)
printf("La so chinh phuong");
else
printf("Khong la so chinh phuong");
}
a/ Xác định dầu vào, đầu ra cho bài toán nhập 1 số nguyên dương (n) có giá trị trong
khoảng từ 100 đến 999. In ra số đảo của n. Vd, với n=123, sẽ in ra số đảo là 321.
#include <stdio.h>

void main(void)
{
system("cls");
int n;
do
{
do
{
printf("Input n (100<=n<=999): ");
scanf("%d", &n);
} while (n > 999);
} while (n < 100);
int reverse = 0;
while (n != 0)
{
reverse = reverse * 10 + n % 10;
n = n / 10;
}
printf("Reverse number is : %d", reverse);
}

6.Viết chương trình nhập mảng 1 chiều gồm n số nguyên và thực hiện các yêu cầu sau :
a/ Kiểm tra mảng có chứa đồng thời số dương, số âm và số 0 hay không?
b/ Viết hàm trả về vị trí của tất cả phần tử là số nguyên tố.
c/ Xóa tất cả số nguyên tố có trong mảng.

#include <stdio.h>
#include <math.h>

void nhapmang(long n,long arr[]){


for(int i=0;i<n;i++){
printf("Nhap vao phan tu arr[%d]", i);
scanf("%d", &arr[i]);
}
}
int vitringuyento(long n, long arr[],long ant[]){
int m=0;
for(int i=0;i<n;i++){
if(arr[i]>=2){
int count=0;
for(int j=2;j<=sqrt(arr[i]);j++){
if(arr[i]%j==0){
count++;
}
}
if(count==0){
ant[m]=i;
m++;

}
}
}
return m;
}

int main()
{
int checkam=0;
int k=0;
int checkduong=0;
int check=0;
int temp;
long n;
long arr[n];
int xoa=0;
printf("Nhap n: ");
scanf("%d", &n);

nhapmang(n,arr);

for(int i=0;i<n;i++){
if(arr[i]==0){
check = 1;
}else if(arr[i]<0){
checkam = 1;
}else{
checkduong = 1;
}
}
if(checkam==1 && checkduong==1 && check==1){
temp=1;
}else{
temp=0;
}
printf("\n");
if(temp==1){
printf("Mang chua so duong,am,0 \n");
}else {
printf("Mang khong chua so duong,am va so 0 \n");
}
long ant[k];
k = vitringuyento(n,arr,ant);
if(k!=0)
{
printf("Cac vi tri la so nguyen to : ");
for(int i=0;i<k;i++){
printf("%d ", ant[i]);

}
printf("\n");
for(int i =0;i<k;i++){
for(int j=ant[i]-xoa;j<=n;j++){
arr[j] = arr[j+1];
}
xoa++;
n--;
}

printf("Mang sau khi xoa: ");


for(int i =0;i<n;i++){
printf("%d ", arr[i]);
}
}
else {
printf("Mang khong chua so nguyen to ");
}

7.Viết chương trình nhập mảng 1 chiều gồm n số nguyên và thực hiện các yêu cầu sau :
a/ Kiểm tra mảng có đuợc sắp thứ tự hay không?
#include <stdio.h>

void nhapmang(int A[100], int n)


{
int i;
for (i = 0; i < n; i++)
{
printf("Nhap pt thu[%d]: ", i);
scanf("%d", &A[i]);
}
}

void ktratt(int A[], int n) // ktra mang co thu tu tang dan


{
int i, t = 1, g = 1;
for (i = 0; i < n - 1; i++)
{
if (A[i] > A[i + 1])
t = 0;
if (A[i] < A[i + 1])
g = 0;
}
if ((t == 1) || (g == 1))
printf("Mang Theo thu tu");
else
printf("Mang khong theo thu tu");
}

b/ Viết hàm tìm vị trí của phần tử là số nguyên tố nhỏ nhất.


#include <stdio.h>

void nhapmang(int A[100], int n)


{
int i;
for (i = 0; i < n; i++)
{
printf("Nhap pt thu[%d]: ", i);
scanf("%d", &A[i]);
}
}

void timvitri(int A[100], int n) // vi tri SNT nho nhat //cau 7 b


{
int i, j, dem, min, vt, t = 0;
for (i = 1; i < n - 1; i++)
{
dem = 0;
for (j = 2; j < A[i]; j++)
if (A[i] % j == 0)
dem++;
if (dem == 0)
if (t == 0)
{
min = A[i];
vt = i;
t++;
}
else if (min > A[i])
{
min = A[i];
vt = i;
}
}
printf("\nSNT nho nhat la: %d o vi tri %d", min, vt);
}

int main()
{
system("cls");
int A[100];
int n;
printf("Input n: ");
scanf("%d", &n);
nhapmang(A, n);
timvitri(A, n);
}

c/ Tạo mảng b từ mảng trên sao cho mảng b chỉ chứa các phần tử là số nguyên tố.

8.Viết chương trình nhập mảng 1 chiều gồm n số nguyên và thực hiện các yêu cầu sau :
a/ Kiểm tra mảng có đan xen chẵn lẻ hay không?
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

void nhapmang(int A[100], int n)


{
int i;
for (i = 0; i < n; i++)
{
printf("Nhap pt thu[%d]: ", i);
scanf("%d", &A[i]);
}
}

void main(void)
{
system("cls");
printf("Kiem tra mang xen ke chan le");
int A[100], n = 0;
printf("\nInput n: ");
scanf("%d", &n);
nhapmang(A, n);
int i;
int xenke = 1;
for (i = 0; i < n; i++)
if ((A[i] % 2 == 0 && A[i + 1] % 2 == 0) || (A[i] % 2 != 0 && A[i + 1] % 2 != 0))
{
xenke = 0;
break;
}
if (xenke == 1)
printf("\nMang CO xen ke chan le");
else
printf("\nMang KHONG xen ke chan le");
}

b/ Viết hàm tìm vị trí của phần tử là số hoàn chỉnh lớn nhất.
c/ Tạo mảng b từ mảng trên sao cho mảng b chỉ chứa các phần tử là số hoàn chỉnh.
#include <stdio.h>
#include <math.h>
#include <conio.h>
void NhapMang(int a[], int &n)
{
printf("Nhap so luong phan tu n: ");
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
printf(" a[%d]: ", i);
scanf("%d", &a[i]);
}
}
void XuatMang(int a[], int n)
{
for (int i = 0; i < n; i++)
{
printf("%d\t", a[i]);
}
}

int SoHoanChinh (int n)


{
int tong =1;
for (int i=2;i<n;i++)
{
if (n%i==0)
{
tong+=i;
}
}
if (tong==n)
{
return 1;
}
else
{
return 0;
}
}

int TimVTMax(int a[],int n)


{
int vt,d,i;
for( i=0 ; i<n ; i++ )
if(SoHoanChinh(a[i])==1)
{
d=i;
break;
}
if(i==n)
return -1;
vt=d;
for(i=vt+1;i<n;i++ )
if(SoHoanChinh(a[i])==1 && a[i]>a[vt])
vt=i;
return vt;
}
void TaoMangBChuaSoHoanChinhTuMangA(int a[], int n)
{
int b[100], nb = 0;
for(int i = 0; i < n; i++)
{
if(SoHoanChinh(a[i]) == 1)
{
b[nb] = a[i];
nb++;
}
}
XuatMang(b,nb);
}
int main ()
{
int a[100],n;
NhapMang(a,n);
if(TimVTMax(a,n)==-1)
printf("\nTrong mang khong co so hoan chinh ");
else
printf("\nVi tri hoan chinh lon nhat trong mang la: a[%d]",TimVTMax(a,n));

printf("\nMang b chua so Hoan Chinh tu mang a: \n");


TaoMangBChuaSoHoanChinhTuMangA(a, n);

}
9.Viết chương trình nhập mảng 1 chiều gồm n số nguyên và thực hiện các yêu cầu sau :
a/ Kiểm tra mảng có đan xen âm dương hay không?
b/ Viết hàm tìm vị trí của phần tử là số hoàn chỉnh nhỏ nhất.
c/ Sắp xếp các phần tử là số hoàn chỉnh giảm dần, các phần tử khác giữ nguyên vị trí.
#include <stdio.h>
#include <math.h>
#include <conio.h>
void NhapMang(int a[], int &n)
{
printf("Nhap so luong phan tu n: ");
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
printf(" a[%d]: ", i);
scanf("%d", &a[i]);
}
}
void XuatMang(int a[], int n)
{
for (int i = 0; i < n; i++)
{
printf("%d\t", a[i]);
}
}
void KiemTraMang(int a[],int n )
{
int i;
for(i=0;i<n-1;i++)
if(a[i]<0 && a[i+1]>0 )
{
printf("mang xen ke am duong");
break;
}
if(a[i]>0 && a[i+1]<0)
{
printf("mang xen ke am duong");
}
else
{
printf ("\nmang khong co xen ke am duong");
}
}
int SoHoanChinh (int n)
{
int tong =1;
for (int i=2;i<n;i++)
{
if (n%i==0)
{
tong+=i;
}
}
if (tong==n)
{
return 1;
}
else
{
return 0;
}
}
void TimVTmin(int a[],int n)
{
int min=0,index;
for(int i=0;i<n;i++)
{
if(SoHoanChinh(a[i])==1)
{
min=a[i];
index=i;
for (int j=i+1;j<n;j++)
{
if(SoHoanChinh(a[j])==1)
{
if (min>a[j])
{
min=a[j];
}
}
}
break;
}
}
printf ("\n vi tri phan tu nho nhat la :a[%d]",index);
}
void HoanVi(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
void SapXepGiamDan(int a[],int n)
{
for (int i=0;i<n-1;i++)
{
if(SoHoanChinh (a[i])==1)
{
for (int j=i+1;j<n;j++)
{
if(SoHoanChinh (a[j])==1 && a[i]<a[j])
{
HoanVi(a[i],a[j]);
}
}
}
}
}
int main ()
{
int a[100],n,kq;
NhapMang(a,n);
XuatMang(a,n);
KiemTraMang(a,n);
SoHoanChinh(n);
TimVTmin(a,n);
SapXepGiamDan(a,n);
printf("\nMang sau khi sap xep cac so hoan chinh giam dan \n");
XuatMang(a,n);
getch();
return 0;
}

10.Viết chương trình nhập mảng gồm n số nguyên. Tìm phần tử chẵn lớn nhất trong mảng.
#include <stdio.h>
#include <math.h>
#include <conio.h>
void NhapMang(int a[], int &n)
{
printf("Nhap so luong phan tu n: ");
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
printf(" a[%d]: ", i);
scanf("%d", &a[i]);
}
}
void XuatMang(int a[], int n)
{
for (int i = 0; i < n; i++)
{
printf("%d\t", a[i]);
}
}
int SoChanLonNhat(int a[],int n)
{
int max;
for(int i=0;i<n;i++)
{
if(a[i]%2==0)
{
max=a[i];
for(int j=0;j<n;j++)
if(a[j]>max && a[j]%2==0) max=a[j];
}
}
return max;
}
int main()
{
int a[100],n;
NhapMang(a,n);
XuatMang(a,n);
printf ("\n Phan Tu chan lon nhat = %d",SoChanLonNhat(a,n));
}

11.Viết chương trình nhập mảng gồm n số nguyên. Tìm phần tử lẻ nhỏ nhất trong mảng.
#include <stdio.h>
#include <math.h>
#include <conio.h>
void NhapMang(int a[], int &n)
{
printf("Nhap so luong phan tu n: ");
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
printf(" a[%d]: ", i);
scanf("%d", &a[i]);
}
}
void XuatMang(int a[], int n)
{
for (int i = 0; i < n; i++)
{
printf("%d\t", a[i]);
}
}
int SoChanLonNhat(int a[],int n)
{
int max;
for(int i=0;i<n;i++)
{
if(a[i]%2!=0)
{
max=a[i];
for(int j=0;j<n;j++)
if(a[j]>max && a[j]%2!=0) max=a[j];
}
}
return max;
}
int main()
{
int a[100],n;
NhapMang(a,n);
XuatMang(a,n);
printf ("\n Phan Tu chan lon nhat = %d",SoChanLonNhat(a,n));
}
12.Xây dựng cấu trúc phân số với hai thuộc tính là tử số và mẫu số. Viết chương trình thực
hiện những yêu cầu sau:
a/ Nhập vào thông tin cho hai phân số a,b.
b/ Viết hàm tính cộng, trừ, nhân, chia 2 phân số a,b.
c/ Viết hàm kiểm tra xem một phân số có phải là tối giãn hay không.
d/ Viết hàm tìm dạng tối giãn của phân số.

#include<stdio.h>
#include<conio.h>

struct PhanSo
{
float TuSo;
float MauSo;
};
typedef struct PhanSo PHANSO;
void NhapPhanSo(PHANSO &ps)
{
float temp;
printf("\nNhap tu so: ");
scanf("%f", &temp);
ps.TuSo = temp;
do
{
printf("\nNhap mau so: ");
scanf("%f", &temp);
ps.MauSo = temp;
if(ps.MauSo == 0)
{
printf("\nMau so phai khac 0. ");
}
}while(ps.MauSo == 0);
}

void XuatPhanSo(PHANSO ps)


{
printf("%g / %g", ps.TuSo, ps.MauSo);
}
float TimUocChungLonNhat(float a, float b)
{
if(a < 0)
{
a = a * -1;
}
if(b < 0)
{
b = b * -1;
}

if(a == 0 && b !=0)


{
return b;
}
else if( b == 0 && a != 0 )
{
return a;
}

while(a != b)
{
if(a > b)
{
a = a - b;
}
else
b = b - a;
}
return a;
}
PHANSO DangToiGian(PHANSO a)
{
float UCLN = TimUocChungLonNhat(a.TuSo, a.MauSo);
a.TuSo = a.TuSo / UCLN;
a.MauSo = a.MauSo / UCLN;
return a;
}
PHANSO TinhTong2PhanSo(PHANSO a, PHANSO b)
{
PHANSO ketqua;
ketqua.TuSo = a.TuSo * b.MauSo + a.MauSo * b.TuSo;
ketqua.MauSo = a.MauSo * b.MauSo;
return ketqua;
}
PHANSO TinhHieu2PhanSo(PHANSO a, PHANSO b)
{
PHANSO ketqua;
ketqua.TuSo = a.TuSo * b.MauSo - a.MauSo * b.TuSo;
ketqua.MauSo = a.MauSo * b.MauSo;
return ketqua;
}
PHANSO TinhTich2PhanSo(PHANSO a, PHANSO b)
{
PHANSO ketqua;
ketqua.TuSo = a.TuSo * b.TuSo;
ketqua.MauSo = a.MauSo * b.MauSo;
return ketqua;
}
PHANSO TinhThuong2PhanSo(PHANSO a, PHANSO b)
{
PHANSO ketqua;
ketqua.TuSo = a.TuSo * b.MauSo;
ketqua.MauSo = a.MauSo * b.TuSo;
return ketqua;
}
int KiemTraPhanSoToiGian(PHANSO a)
{
PHANSO c = DangToiGian(a);
if (c.TuSo == a.TuSo && c.MauSo == a.MauSo)
return 1;
return 0;
}
int main()
{
PHANSO ps1, ps2;
NhapPhanSo(ps1);
XuatPhanSo(ps1);
NhapPhanSo(ps2);
XuatPhanSo(ps2);

PHANSO a = DangToiGian(ps1);
printf("\nPhan so toi gian cua a la : ");
XuatPhanSo(a);

PHANSO b = DangToiGian(ps2);
printf("\nPhan so toi gian cua b la : ");
XuatPhanSo(b);

PHANSO tong = TinhTong2PhanSo(a, b);


printf("\nTong 2 phan so: ");
XuatPhanSo(tong);

PHANSO hieu = TinhHieu2PhanSo(a, b);


printf("\nHieu 2 phan so: ");
XuatPhanSo(hieu);

PHANSO tich = TinhTich2PhanSo(a, b);


printf("\nTich 2 phan so: ");
XuatPhanSo(tich);

PHANSO thuong = TinhThuong2PhanSo(a, b);


printf("\nThuong 2 phan so: ");
XuatPhanSo(thuong);

int Check = KiemTraPhanSoToiGian(a);


if (Check)
printf("\nPhan so toi gian");
else
printf("\nPhan so chua toi gian");
}

13.Xây dựng cấu trúc phân số với hai thuộc tính là tử số và mẫu số. Viết chương trình thực
hiện những yêu cầu sau:
a/ Nhập vào thông tin cho hai phân số a,b.
b/ Viết hàm tính cộng, trừ, nhân, chia 2 phân số a,b.
c/ Viết hàm kiểm tra xem một phân số có phải là tối giãn hay không.
d/ Viết hàm tìm dạng tối giãn của phân số.
#include<stdio.h>
#include<conio.h>
#include<math.h>
struct PhanSo
{
float TuSo;
float MauSo;
};
typedef struct PhanSo PHANSO;
void NhapPhanSo(PHANSO &ps)
{
float temp;
printf("\nNhap tu so: ");
scanf("%f", &temp);
ps.TuSo = temp;
do
{
printf("\nNhap mau so: ");
scanf("%f", &temp);
ps.MauSo = temp;
if(ps.MauSo == 0)
{
printf("\nMau so phai khac 0. ");
}
}while(ps.MauSo == 0);
}

void XuatPhanSo(PHANSO ps)


{
printf("%g / %g", ps.TuSo, ps.MauSo);
}
float TimUocChungLonNhat(float a, float b)
{
if(a < 0)
{
a = a * -1;
}
if(b < 0)
{
b = b * -1;
}

if(a == 0 && b !=0)


{
return b;
}
else if( b == 0 && a != 0 )
{
return a;
}

while(a != b)
{
if(a > b)
{
a = a - b;
}
else
b = b - a;
}
return a;
}
PHANSO DangToiGian(PHANSO a)
{
float UCLN = TimUocChungLonNhat(a.TuSo, a.MauSo);
a.TuSo = a.TuSo / UCLN;
a.MauSo = a.MauSo / UCLN;
return a;
}
PHANSO TinhTong2PhanSo(PHANSO a, PHANSO b)
{
PHANSO ketqua;
ketqua.TuSo = a.TuSo * b.MauSo + a.MauSo * b.TuSo;
ketqua.MauSo = a.MauSo * b.MauSo;
return ketqua;
}
PHANSO TinhHieu2PhanSo(PHANSO a, PHANSO b)
{
PHANSO ketqua;
ketqua.TuSo = a.TuSo * b.MauSo - a.MauSo * b.TuSo;
ketqua.MauSo = a.MauSo * b.MauSo;
return ketqua;
}
PHANSO TinhTich2PhanSo(PHANSO a, PHANSO b)
{
PHANSO ketqua;
ketqua.TuSo = a.TuSo * b.TuSo;
ketqua.MauSo = a.MauSo * b.MauSo;
return ketqua;
}
PHANSO TinhThuong2PhanSo(PHANSO a, PHANSO b)
{
PHANSO ketqua;
ketqua.TuSo = a.TuSo * b.MauSo;
ketqua.MauSo = a.MauSo * b.TuSo;
return ketqua;
}

int KiemTraPhanSoToiGian(PHANSO a)
{
PHANSO c = DangToiGian(a);
if (c.TuSo == a.TuSo && c.MauSo == a.MauSo)
return true;
return false;
}
int main()
{
PHANSO ps1;
PHANSO ps2;

printf("Phan so a\n ");


NhapPhanSo(ps1);
printf("\nPhan so b\n");
NhapPhanSo(ps2);

printf("\n\n-------------Xuat---------------\n");
printf("Phan so a: ");
XuatPhanSo(ps1);
printf("\nPhan so b: ");
XuatPhanSo(ps2);

printf("\n\n------------PhanSoToiGian------------");
PHANSO a = DangToiGian(ps1);
printf("\nPhanSo cua a la: ");
XuatPhanSo(a);
PHANSO b = DangToiGian(ps2);
printf("\nPhanSo cua b la: ");
XuatPhanSo(b);

printf("\n\n------------Cong Tru Nhan Chia------------\n");


PHANSO tong = TinhTong2PhanSo(a, b);
printf("\nTong 2 phan so: ");
XuatPhanSo(tong);

PHANSO hieu = TinhHieu2PhanSo(a, b);


printf("\nHieu 2 phan so: ");
XuatPhanSo(hieu);

PHANSO tich = TinhTich2PhanSo(a, b);


printf("\nTich 2 phan so: ");
XuatPhanSo(tich);
PHANSO thuong = TinhThuong2PhanSo(a, b);
printf("\nThuong 2 phan so: ");
XuatPhanSo(thuong);
printf("\n\n------------KiemTraPhanSoDaToiGian------------\n");
int Check = KiemTraPhanSoToiGian(a);
if (Check)
printf("\nPhan so da toi gian");
else
printf("\nPhan so chua toi gian\n");

14.Xây dựng cấu trúc điểm trong mặt phẳng Oxy với hai thuộc tính là hoành độ x và tung
độ y. Viết chương trình thực hiện những yêu cầu sau:
a/ Nhập và xuất điểm A theo định dạng (x, y).
b/ Viết hàm tính khoảng cách giữa hai điểm A, B.
c/ Viết hàm kiểm tra 3 điểm A, B, C có tạo thành một tam giác không?
d/ Cho trước 2 điểm A và B, viết hàm tìm điểm C đối xứng với A qua B.

#include <stdio.h>
#include <math.h>
#include<stdlib.h>
// cau a
typedef struct Diem
{
int x, y, z;
} diem;

void nhap(diem& N)
{
printf("\nNhap toa do cua diem %c", N);
printf("Toa do x: ");
scanf("%d", &N.x);
printf("Toa do y: \n");
scanf("%d", &N.y);
printf("Toa do z: ");
scanf("%d", &N.z);
}
void xuat(diem N)
{
printf("Toa do diem ban nhap x:%d ", N.x);
printf("Toa do diem ban nhap y: %d", N.y);
printf("Toa do z: %d ", N.z);
}
// cau b
void khoangcachcaub()
{
int x1, y1, x2, y2;
printf("Nhap vao x1: \n");
printf("Nhap vao y1: \n");
printf("Nhap vao x2: \n");
printf("Nhap vao x2: \n");

scanf("%d%d%d%d", &x1, &y1, &x2, &y2);


int x = (x1 - x2) * (x1 - x2);
int y = (y1 - y2) * (y1 = y2);
float khoangcach = sqrt(x + y);
printf("khoang cach la : %.2f", khoangcach);

}
//cau c
void checkTriangle(int x1, int y1, int x2,
int y2, int x3, int y3)
{
int a = x1 * (y2 - y3)
+ x2 * (y3 - y1)
+ x3 * (y1 - y2);
if (a == 0)
printf("Day khong phai tam giac");
else
printf("Day la tam giac");
}
//cau d
void timdoixung(int xa, int ya, int xb, int yb)
{
float xc, yc;
xc = xb - xa + xb;
yc = yb - ya + yb;
printf("Gia tri cua xc la : %f", xc);
printf("Gia tri cua yc la : %f", yc);
}

void menu() {
printf("\t\t\tCau a. \n");
printf("\t\t\tCau b. \n");
printf("\t\t\tCau c. \n");
printf("\t\t\tCau d. \n");
}

void thucThiMenu() {
int x1, y1, x2, y2, x3, y3;
char chon;
diem n;
do {
menu();
printf("\nNhap vao lua chon cua ban: "); scanf("%s", &chon);
printf("\nLua chon cua ban la: %s", &chon);

switch (chon) {
case 'a':
nhap(n);
xuat(n);
break;
case 'b':
khoangcachcaub();
break;
case 'c':
printf("Nhap vao x1 : ");
scanf("%d", &x1);
printf("Nhap vao y1 : ");
scanf("%d", &y1);
printf("Nhap vao x2 : ");
scanf("%d", &x2);
printf("Nhap vao y2 : ");
scanf("%d", &y2);
printf("Nhap vao x3 : ");
scanf("%d", &x3);
printf("Nhap vao y3 : ");
scanf("%d", &y3);
checkTriangle(x1, y1, x2, y2, x3, y3);
break;
case 'd':
printf("Nhap vao x1 : ");
scanf("%d", &x1);
printf("Nhap vao y1 : ");
scanf("%d", &y1);
printf("Nhap vao x2 : ");
scanf("%d", &x2);
printf("Nhap vao y2 : ");
scanf("%d", &y2);
timdoixung(x1, y2, x1, y2);
break;
case 0:
exit(1);
break;
default:
printf("Loi!"); break;
}
} while (chon != 0 || chon > 3);
}
int main()
{
thucThiMenu();
return 0;
}

15.Xây dựng cấu trúc phân số với hai thuộc tính là tử số và mẫu số. Viết chương trình thực
hiện những yêu cầu sau:
a/ Nhập vào thông tin cho hai phân số a, b.
b/ Viết hàm tính cộng, trừ, nhân, chia 2 phân số a, b.
c/ Viết hàm so sánh 2 phân số a, b.
d/ Viết hàm tìm dạng tối giãn của phân số.
#include<stdio.h>
#include<conio.h>
#include<math.h>
struct PhanSo
{
float TuSo;
float MauSo;
};
typedef struct PhanSo PHANSO;
void NhapPhanSo(PHANSO &ps)
{
float temp;
printf("\nNhap tu so: ");
scanf("%f", &temp);
ps.TuSo = temp;
do
{
printf("\nNhap mau so: ");
scanf("%f", &temp);
ps.MauSo = temp;
if(ps.MauSo == 0)
{
printf("\nMau so phai khac 0. ");
}
}while(ps.MauSo == 0);
}

void XuatPhanSo(PHANSO ps)


{
printf("%g / %g", ps.TuSo, ps.MauSo);
}
float TimUocChungLonNhat(float a, float b)
{
if(a < 0)
{
a = a * -1;
}
if(b < 0)
{
b = b * -1;
}

if(a == 0 && b !=0)


{
return b;
}
else if( b == 0 && a != 0 )
{
return a;
}

while(a != b)
{
if(a > b)
{
a = a - b;
}
else
b = b - a;
}
return a;
}
PHANSO DangToiGian(PHANSO a)
{
float UCLN = TimUocChungLonNhat(a.TuSo, a.MauSo);
a.TuSo = a.TuSo / UCLN;
a.MauSo = a.MauSo / UCLN;
return a;
}
PHANSO TinhTong2PhanSo(PHANSO a, PHANSO b)
{
PHANSO ketqua;
ketqua.TuSo = a.TuSo * b.MauSo + a.MauSo * b.TuSo;
ketqua.MauSo = a.MauSo * b.MauSo;
return ketqua;
}
PHANSO TinhHieu2PhanSo(PHANSO a, PHANSO b)
{
PHANSO ketqua;
ketqua.TuSo = a.TuSo * b.MauSo - a.MauSo * b.TuSo;
ketqua.MauSo = a.MauSo * b.MauSo;
return ketqua;
}
PHANSO TinhTich2PhanSo(PHANSO a, PHANSO b)
{
PHANSO ketqua;
ketqua.TuSo = a.TuSo * b.TuSo;
ketqua.MauSo = a.MauSo * b.MauSo;
return ketqua;
}
PHANSO TinhThuong2PhanSo(PHANSO a, PHANSO b)
{
PHANSO ketqua;
ketqua.TuSo = a.TuSo * b.MauSo;
ketqua.MauSo = a.MauSo * b.TuSo;
return ketqua;
}
int SoSanh2PhanSo(PHANSO a, PHANSO b)
{
float kq1 = a.TuSo / a.MauSo;
float kq2 = b.TuSo / b.MauSo;
if (kq1 < kq2)
return -1;
if (kq1 > kq2)
return 1;
return 0;
}
int KiemTraPhanSoToiGian(PHANSO a)
{
PHANSO c = DangToiGian(a);
if (c.TuSo == a.TuSo && c.MauSo == a.MauSo)
return 1;
return 0;
}
int main()
{
PHANSO ps1;
PHANSO ps2;

printf("Phan so a\n ");


NhapPhanSo(ps1);
printf("\nPhan so b\n");
NhapPhanSo(ps2);

printf("\n\n-------------Xuat---------------\n");
printf("Phan so a: ");
XuatPhanSo(ps1);
printf("\nPhan so b: ");
XuatPhanSo(ps2);

printf("\n\n------------PhanSoToiGian------------");
PHANSO a = DangToiGian(ps1);
printf("\nPhanSo cua a la: ");
XuatPhanSo(a);
PHANSO b = DangToiGian(ps2);
printf("\nPhanSo cua b la: ");
XuatPhanSo(b);

printf("\n\n------------Cong Tru Nhan Chia------------\n");


PHANSO tong = TinhTong2PhanSo(a, b);
printf("\nTong 2 phan so: ");
XuatPhanSo(tong);

PHANSO hieu = TinhHieu2PhanSo(a, b);


printf("\nHieu 2 phan so: ");
XuatPhanSo(hieu);

PHANSO tich = TinhTich2PhanSo(a, b);


printf("\nTich 2 phan so: ");
XuatPhanSo(tich);

PHANSO thuong = TinhThuong2PhanSo(a, b);


printf("\nThuong 2 phan so: ");
XuatPhanSo(thuong);

printf("\n\n------------SoSanh2PhanSo------------\n");
int kq=SoSanh2PhanSo(a,b);
if(kq>0)
printf("\n a>b");
else
if(kq<0)
printf("\n a<b \n");
else
printf("\n a=b \n");
}

16.Viết chương trình thực hiện những yêu cầu sau:


a/Nhập mảng một chiều các nhân viên (NHANVIEN). Biết rằng một nhân viên gồm những
thành phần sau:
- Mã nhân viên: chuỗi tối đa 5 ký tự.
- Tên nhân viên: chuỗi tối đa 30 ký tự.
- Lương nhân viên: kiểu số thực.
b/ Xuất mảng danh sách các nhân viên.
c/ Tìm nhân viên theo mã nhân viên.
#include <stdio.h>
#include <string.h>

struct nhanvien{
char maNhanvien[5];
char tenNhanvien[30];
float luongNhanvien;
};
void nhapNhanvien(int n){
struct nhanvien a[50];
for(int i =0;i<n;i++){
fflush(stdin);
printf("Nhap ma nhan vien thu %d\n",i);
gets(a[i].maNhanvien);
fflush(stdin);
printf("Nhap ten nhan vien thu %d\n",i);
gets(a[i].tenNhanvien);
fflush(stdin);
printf("Nhap luong nhan vien thu %d\n",i);
scanf("%f",&a[i].luongNhanvien);
}
}
void xuatNhanvien(int n){
struct nhanvien a[50];
for(int i=0;i<n;i++){
printf("Nhan vien thu %d\n",i);
printf("ma nhan vien thu %d : %s\n",i,a[i].maNhanvien);
printf("ten nhan vien thu %d : %s\n",i,a[i].tenNhanvien);
printf("luong nhan vien thu %d : %f\n",i,a[i].luongNhanvien);
}
}
void timNhanvien(int n)
{
char ma[50];
int b=0;
struct nhanvien a[50];
printf("Nhap ma nhan vien can tim : ");
fflush(stdin);
gets(ma);
for(int i=0;i<n;i++)
{
if(strcmp(ma,a[i].maNhanvien)==0)
printf("ma nhan vien : %s\n",a[i].maNhanvien);
printf("ten nhan vien : %s\n",a[i].tenNhanvien);
printf("luong nhan vien :%f\n",a[i].luongNhanvien);
}
}
int main(){
int n;
struct nhanvien a[50];
printf("Nhap vao so nhan vien :");
scanf("%d",&n);
nhapNhanvien(n);
xuatNhanvien(n);
timNhanvien(n);
}

17.Viết chương trình thực hiện những yêu cầu sau:


a/ Nhập mảng một chiều các thí sinh (THISINH). Biết rằng một thí sinh gồm những thành
phần sau:
- Mã thí sinh: chuỗi tối đa 5 ký tự.
- Tên thí sinh: chuỗi tối đa 30 ký tự.
- Điểm: kiểu số thực.
b/ Xuất mảng danh sách các thí sinh.
c/ Tìm thí sinh theo tên.

#include <stdio.h>
#include <string.h>
const int MAX = 100;
void bai17();
void bai18();
void bai19();
void bai20();
void back();

int main (){

int key;
{
printf (" BAI TAP C - MENU \n");
printf (" **** \n");
printf ("Chon '17' cho bai 17\n");
printf ("Chon '18' cho bai 18\n");
printf ("Chon '19' cho bai 19\n");
printf ("Chon '20' cho bai 20\n");
printf ("Chon '0' de thoat\n");
printf (" **** \n");
printf ("\n Nhap tuy chon: ");
scanf("%d", &key);
switch(key){
case 17:
printf("\n Bai 17: \n");
bai17();
back();
break;
case 18:
printf("\n Bai 18: \n");
bai18();
back();
break;
case 19:
printf("\n Bai 19: \n");
bai19();
back();
break;
case 20:
printf("\n Bai 20: \n");
bai20();
back();
break;
case 0:
printf ("\n Chon thoat chuong trinh!");
return 0;
default :
break;
}
}
}

void back(){
printf("\n Quay lai MENU \n");
main();
}

18.
a/Viết hàm NgayTruoc() theo nguyên mẫu hàm cho trước, hàm này trả về ngày kế trước
pd, pm, py của ngày hiện hành d, m, y:
void NgayTruoc(int d, int m, int y, int *pd, int *pm, int *py);
b/ Viết chương trình gọi hàm của câu a và in kết quả ra màn hình.

struct THISINH {
char mathisinh[5];
char tenthisinh[30];
float diem;
};

void Nhapmang (THISINH a[], int n){

printf("Nhap du lieu thi sinh: \n");


for (int i = 0; i < n; i++) {
printf("\n Ma thi sinh so %d : ", i+1);
fflush(stdin);
fgets(a[i].mathisinh, sizeof(a[i].mathisinh), stdin);
printf("\n Ten thi sinh so %d : ", i+1);
fflush(stdin);
fgets(a[i].tenthisinh, sizeof(a[i].tenthisinh), stdin);
printf("\n Diem thi sinh so %d : ", i+1);
fflush(stdin);
scanf("%f", &a[i].diem);
}
};

void Xuatmang(THISINH a[], int n){

printf("Danh sach cac thi sinh: \n");


for (int i = 0; i < n; i++) {
printf("\n\n Thi sinh %d \n", i+1);
printf("\n\t Ma thi sinh: %s ", a[i].mathisinh);
printf("\n\t Ten thi sinh: %s ", a[i].tenthisinh);
printf("\t Diem: %.2f ", a[i].diem);
}

};
void Timthisinh(THISINH a[], int n){

int s = 0;
char tstim[30];
char tschuoi[30];
printf("\n Ten thi sinh can tim: ");
fflush(stdin);
fgets(tstim, sizeof(tstim), stdin);
for (int i = 0; i < n; i++){
strcpy(tschuoi, a[i].tenthisinh);
if(strcmp(tstim,tschuoi) == 0) {
printf("Thi sinh can tim la: \n");
printf("\n\n Thi sinh %d \n", i+1);
printf("\n\t Ma thi sinh: %s ", a[i].mathisinh);
printf("\n\t Ten thi sinh: %s ", a[i].tenthisinh);
printf("\t Diem: %.2f ", a[i].diem);
}
else{
s=s+1;
}
}
if (s == n) {
printf("\n Khong co thi sinh can tim");
}
}

void bai17(){

int n;
THISINH a[MAX];
printf("Nhap so phan tu : \n");
scanf("%d", &n);
if ( n <= 0 || n > MAX ){
printf("\nNhap lai so luong phan tu: ");
}
else{
printf("\n======NHAP MANG=====\n");
Nhapmang(a, n);
printf("\n======XUAT MANG=====\n");
Xuatmang(a, n);
printf("\n======TIM KIEM THI SINH=====\n");
Timthisinh(a, n);
}

19.
a/Viết hàm HaiNgayTruoc() theo nguyên mẫu hàm cho trước, hàm này trả về hai ngày kế
trước pd, pm, py của ngày hiện hành d, m, y:
void HaiNgayTruoc(int d, int m, int y, int *pd, int *pm, int *py);
b/ Viết chương trình gọi hàm của câu a và in kết quả ra màn hình.

int Nhuan(int y){


return ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0);
}
int Ngaytrongthang(int m, int y){
switch(m){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
{
return 31;
break;
}
case 2:{
if(Nhuan(y)){
return 29;
}
return 28;
}
case 4:case 6:case 9:case 11:{
return 30;
}
}
}

void Nhapngay(int d, int m, int y){


printf( "\nNháºp ngà y: ");
scanf("%d", &d);
printf( "Nháºp tháng: ");
scanf("%d", &m);
printf("Nháºp năm: ");
scanf("%d",&y);
if (y > 0 && m > 0 && m < 13 && d> 0 && d < Ngaytrongthang(m, y) ){
printf("\nNgay hom nay la: ngay %d thang %d nam %d", d, m, y);
}
else{
printf("\nNhap sai, vui long nhap lai");
bai18();
}
}

void Ngaytruoc()
{

int d, m, y;
int *pd = &d;
int *pm = &m;
int *py = &y;
if (Nhuan(y)){
if (d == 1)
{
switch (m)
{
case 1:
{
m = 12;
d = 31;
y = y - 1;
break;
}
case 2: case 4: case 6: case 8: case 9: case 11:{
m = m - 1;
d = 31;
y = y;
break;
}
case 5: case 7: case 10: case 12:{
m = m - 1;
d = 30;
y = y;
break;
}
case 3:
{
m = m - 1;
d = 29;
y = y;
break;
}
default:{
printf("Loi\n");
break;
}
}
}
else{
m = m;
d = d - 1;
y = y;
}
}
else{
if (d == 1)
{
switch (m)
{
case 1:
{
m = 12;
d = 31;
y = y - 1;
break;
}
case 2: case 4: case 6: case 8: case 9: case 11:
{
m = m - 1;
d = 31;
y = y;
break;
}
case 5: case 7: case 10: case 12:{
m = m - 1;
d = 30;
y = y;
break;
}
case 3:
{
m = m - 1;
d = 28;
y = y;
break;
}
default:
{
printf("Loi\n");
break;
}
}
}
else{
m = m;
d = d - 1;
y = y;
}
}

printf("\n Ngay truoc la: ngay %d thang %d nam %d", *pd, *pm, *py);

void bai18(){
int d, m, y;
int *pd, *pm, *py;
Nhapngay(d, m, y);
Ngaytruoc();
}

20.
a/ Viết hàm NgaySau() theo nguyên mẫu hàm cho trước, hàm này trả về ngày kế sau pd,
pm, py của ngày hiện hành d, m, y:
void NgaySau(int d, int m, int y, int *pd, int *pm, int *py);
b/ Viết chương trình gọi hàm của câu a và in kết quả ra màn hình.
void Ngaysau()
{

int d, m, y;
int *pd = &d;
int *pm = &m;
int *py = &y;

if (Nhuan(y))
{

if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10)
{
if (d == 31){
m = m + 1;
d = 1;
}
else{
m = m;
d = d + 1;
}
y = y;
}
else if (m == 4 || m == 6 || m == 9 || m == 11){
if (d == 30){
m = m + 1;
d = 1;
}
else{
m = m;
d = d + 1;
}
y = y;
}
else if(m == 2){
if (d == 28){
m = m + 1;
d = 1;
}
else{
m = m;
d = d + 1;
}
y = y;
}
else{
if (d == 31){
m = 1;
d = 1;
y = y + 1;
}
else{
m = m;
d = d + 1;
y = y;
}
}

}
else{

if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10)
{
if (d == 31){
m = m + 1;
d = 1;
}
else{
m = m;
d = d + 1;
}
y = y;
}
else if (m == 4 || m == 6 || m == 9 || m == 11){
if (d == 30){
m = m + 1;
d = 1;
}
else{
m = m;
d = d + 1;
}
y = y;
}
else if(m == 2){
if (d == 28){
m = m + 1;
d = 1;
}
else{
m = m;
d = d + 1;
}
y = y;
}
else{
if (d == 31){
m = 1;
d = 1;
y = y + 1;
}
else{
m = m;
d = d + 1;
y = y;
}
}

printf("\n Ngay sau la: ngay %d thang %d nam %d", *pd, *pm, *py);

void bai20(){
int d, m, y;
int *pd, *pm, *py;
Nhapngay(d, m, y);
Ngaysau();
};

21.
a/ Viết hàm HaiNgaySau() theo nguyên mẫu hàm cho trước, hàm này trả về hai ngày kế
sau pd, pm, py của ngày hiện hành d, m, y:
void HaiNgaySau(int d, int m, int y, int *pd, int *pm, int *py);
b/ Viết chương trình gọi hàm của câu a và in kết quả ra màn hình.

#include <stdio.h>

int nhuan(int y)
{
return ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0);
}
int songaytrongthang(int m,int y)
{
switch(m)
{
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
{
return 31;
break;
}
case 2:
{
if(nhuan(y))
{
return 29;
}
return 28;
}
case 4:case 6:case 9:case 11:
{
return 30;
}
}
}
void haingaysau(int y,int m,int d)
{
int ny=y;int nm=m;int nd=d;
if(y>0&&m>0&&m<13&&d>0&&d<=(songaytrongthang(m,y)))
{
nd=d+2;
if(m!=12&&d==songaytrongthang(m,y))
{
nd=2;
nm=m+2;
}
else if(m==12&&d==songaytrongthang(m,y))
{
nd=2;
ny=y+2;
nm=2;
}
else if(m==2)
{
if(nhuan(y))
{
if(d==29)
{
nd=2;
nm=m+2;
}
}
else
{
if(d==28)
{
nd=2;nm=m+2;
}
}
}
}
printf("\n haingaysau : %d:%d:%d",nd,nm,ny);
}
int main()
{
int y;int m;int d;
do
{
printf( "\ nhapngay: ");
scanf("%d", &d);

printf( " nhapthang: ");


scanf("%d", &m);

printf(" nhapnam: ");


scanf("%d",&y);
}
while (y < 0 || m < 1 || m >12 || d < 0 || d > 31);
haingaysau(y ,m ,d );
}

22.
a/Viết hàm NgayTruoc() theo nguyên mẫu hàm cho trước, hàm này trả về ngày kế trước
pd, pm, py của ngày hiện hành d, m, y:
void NgayTruoc(int d, int m, int y, int *pd, int *pm, int *py);
b/ Viết chương trình gọi hàm của câu a và in kết quả ra màn hình.

#include <stdio.h>

int nhuan(int y)
{
return ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0);
}
int songaytrongthang(int m,int y)
{
switch(m)
{
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
{
return 31;
break;
}
case 2:
{
if(nhuan(y))
{
return 29;
}
return 28;
}
case 4:case 6:case 9:case 11:
{
return 30;
}
}
}
void ngaytruoc(int y,int m,int d)
{
int ny=y;int nm=m;int nd=d;
if(y>0&&m>0&&m<13&&d>0&&d<=(songaytrongthang(m,y)))
{
nd=d-1;
if(m!=12&&d==songaytrongthang(m,y))
{
nd=-1;
nm=m-1;
}
else if(m==12&&d==songaytrongthang(m,y))
{
nd=-1;
ny=y-1;
nm=-1;
}
else if(m==2)
{
if(nhuan(y))
{
if(d==29)
{
nd=-1;
nm=m-1;
}
}
else
{
if(d==28)
{
nd=-1;nm=m-1;
}
}
}
}
printf("\n ngay ke truoc : %d:%d:%d",nd,nm,ny);
}
int main()
{
int y;int m;int d;
do
{
printf( "\ nhapngay: ");
scanf("%d", &d);

printf( " nhapthang: ");


scanf("%d", &m);

printf(" nhapnam: ");


scanf("%d",&y);
}
while (y < 0 || m < 1 || m >12 || d < 0 || d > 31);
ngaytruoc(y ,m ,d );
}

23.Cho đoạn chương trình sau :

int main()
{
const int SIZE=5;
int kq=0, i, *p, A[SIZE]={8,7,6,5,4};
p=A;
for (i=0;i<SIZE;++i)
if(*(A+i) % 2 == 0)
kq+=*(p+i);
printf("Ket qua la: %d",kq);
return 0;
}
Cho biết kết quả hiển thị của đoạn chương trình trên.

Kết quả là: 18

24.Cho đoạn chương trình sau :


int main()
{
const int SIZE=5;
int kq=0, i, *p, A[SIZE]={5,8,12,9,11};
p=A;
for (i=0;i<SIZE;++i)
if(*(A+i) %2 != 0)
kq+=*(p+i);
printf("Ket qua la: %d",kq);
return 0;
}
Cho biết kết quả hiển thị của đoạn chương trình trên.

Kết quả là: 25

You might also like