DANH SÁCH BÀI VIẾT Giải bài tập thực hành 1 – Các thành phần trong ngôn ngữ C Giải bài tập thực hành 2 – Cấu trúc rẽ nhánh Giải bài tập thực hành 3 – Cấu trúc lặp for Giải bài thực hành 4 – Cấu trúc lặp While, do…while Giải bài thực hành 5 – HÀM Giải bài thực hành 6 – Truyền tham số cho hàm Giải bài thực hành 7 – Mảng Giải bài thực hành 8 – Chuỗi ký tự Giải bài thực hành 9 – Kiểu cấu trúc Giải bài thực hành 10 – Tập tin
I, Các bài thực hành cơ bản
Bài 3: Viết chương trình nhập số nguyên dương n. Liệt kê n số nguyên tố đầu tiên.
Code mẫu
#include<stdio.h>
#include<math.h>
long nguyento(int n)
{
if(n==0||n==1) return 0;
int i;
for(i=2;i<=sqrt(n);i++)
if(n%i==0) return 0;
return 1;
}
void lietke()
{
int i=2;
int n,count=0;
printf("\nNhap n = ");
scanf("%d",&n);
while(count<n)
{
if(nguyento(i)==1)
{
printf("%5d",i);
count++;
}
i++;
}
}
int main()
{
lietke();
}
Bài 4. Viết chương trình nhập vào hai số nguyên dương a và b. tìm ước số chung lớn nhất và bội số chung nhỏ nhất của a và b.
Code mẫu
#include<stdio.h>
int main()
{
int x,y,a,b;
printf("Nhap a,b = ");
scanf("%d%d",&a,&b);
x=a;
y=b;
while(a!=b)
{
if(a>b)
a-=b;
else
b-=a;
}
printf("Uoc chung lon nhat la %d",a);
printf("\nBoi chung nho nhat la %d",(x*y)/a);
}
Bài 5. Viết chương trình nhập vào một số nguyên n gồm tối đa 10 chữ số (4 bytes). In ra màn hình giá trị nhị phân của số trên.
Code mẫu
#include <stdio.h>
int main()
{
unsigned long n;
int i2=0,j2,t2,a2[100];
printf("Nhap so nguyen duong N:");
scanf("%lu",&n);
for(i2=0 ;n!=0; i2++) {
a2[i2]=n%2;
n=n/2;
}
printf("\nSo N o he 2 la: ");
t2=i2-1;
for (j2=t2;j2>=0;j2--)
printf("%d",a2[j2]);
}
Bài 6. Viết chương trình đếm số ước số của số nguyên dương N.
Code mẫu
#include <stdio.h>
int main()
{
int i,in,idem=0;
printf("Nhap vao so nguyen: ");
scanf("%d",&in);
printf("Cac uoc so la: ");
for(i=1;i<=in;i++)
if(in%i == 0)
{
printf("%d, ",i);
idem++;
}
printf("\nSo uoc so la %d",idem);
}
Bài 7. Viết chương trình giải bài toán cổ điển sau: Vừa gà vừa có 36 con Bó lại cho tròn, đếm đủ trăm chân Hỏi có bao nhiêu gà, bao nhiêu chó?
Code mẫu
#include<stdio.h>
void main()
{
int ga , cho;
for (ga = 1 ; ga < 36 ; ga++)
for (cho = 1 ; cho < 36 ; cho++)
if ((2*ga + 4*cho == 100) && (ga + cho == 36))
printf ("Ga : %d con, Cho : %d con \n" , ga , cho);
}
Bài 8. Viết chương trình giải bài toán cổ điển sau: Trăm trâu, trăm cỏ Trâu đứng ăn nằm Trâu nằm ăn ba, Ba trâu già ăn một Hỏi mỗi loại trâu có bao nhiêu con?
Code mẫu
#include<stdio.h>
void main()
{
int traudung , traunam , traugia;
for(traudung = 1 ; traudung <= 100 ; traudung++)
for(traunam = 1 ; traunam <= 100 ; traunam++)
for(traugia = 1 ; traugia <= 100 ; traugia++)
if((5*traudung + 3*traunam + traugia/3 == 100) && (traugia%3 == 0) && (traudung + traunam + traugia == 100))
printf ("Trau dung : %d con Trau nam : %d con Trau gia : %d con\n", traudung , traunam , traugia);
}
Bài 9. Viết chương trình in ra các số lẻ nhỏ hơn hoặc bằng số nguyên dương n(với n được nhập). Yêu cầu nhập lại nếu n<=0.
Code mẫu
#include<stdio.h>
int main()
{
int n, i;
printf("Nhap N: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
if(i%2 == 0)
continue;
printf("%u ",i);
}
}
Bài 10. Viết chương trình tính n!
Code mẫu
#include<stdio.h>
int main()
{
int n,i;
long int gt=1;
printf("Nhap so can tinh giai thua: ");
scanf("%d",&n);
for(i=2;i<=n;i++)
gt=gt*i;
printf("\n%d giai thua bang: %ld",n,gt);
}
Bài 11. Viết chương trình cho phép tính tổng của nhiều số(chưa biết bao nhiêu số). Nhập số 0 để kết thúc quá trình nhập.
Code mẫu
#include<stdio.h>
int main()
{
int s=0,a=1,i;
for(i=1;a!=0; i++)
{
printf("Hay nhap so thu %d: ", i);
scanf("%d",&a);
s+=a;
}
printf("\nTong = %d",s);
}
Bài 12. Viết chương trình tìm ước chung lớn nhất(UCLN) của hai số với yêu cầu sử dụng thuật toán Euclid.
Code mẫu
#include<stdio.h>
int main()
{
int a,b,r;
printf("a = ");
scanf("%d",&a);
printf("b = ");
scanf("%d",&b);
for(;(r = (a%b)) != 0;) // Nhung tham so khong can thiet co the khong truyen
{
a = b;
b = r;
}
printf("UCLN = %d",b);
}
Bài 13. Viết chương trình tính tổng s. với n nguyên dương được nhập vào từ bàn phím. S= 1 – 1/(1^2+2^2 ) + 1/(1^2+2^2+3^2 ) – … + 〖(-1)〗^(n+1)/(1^2+2^2+3^2+⋯+n^2 )
Code mẫu
#include<stdio.h>
#include<math.h>
float tong(int n)
{
float s=0;
int t=0, i;
for (i=1;i<=n;i++)
{
t = t + ( i * i );
s = s + pow( -1 , i + 1 )/t;
}
return s;
}
int main()
{
int n;
printf("Nhap gia tri n = ");
scanf("%d",&n);
printf("S(%d) = %f",n,tong(n));
}
Bài 14. Viết chương trình in ra các số lẻ nhỏ hơn hoặc bằng n(với n được nhập). Sao cho 15 số lẻ được in trên một dòng.
Code mẫu
#include<stdio.h>
int main()
{
int n, i, dem=0;
printf("Nhap N: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
if(i%2 == 0)
continue;
printf("%d ",i);
dem++;
if(dem%15==0)
printf("\n");
}
}
Bài 15. Viết chương trình in ra tổng các số lẻ nhỏ hơn hoặc bằng n (Với n được nhập).
Code mẫu
#include<stdio.h>
int main()
{
long n, sum, i;
printf("Nhap n: ");
scanf("%ld", &n);
sum = 0;
for (i=1; i<=n; i+=2)
sum+=i;
printf("Tong cac so le tu 1 den n la %ld", sum);
}
Bài 16. Viết chương trình in ra tất cả các ước của một số n(Với n được nhập vào từ bàn phím).
Code mẫu
#include<stdio.h>
int main() {
int i,in;
printf("Nhap vao so nguyen: ");
scanf("%d",&in);
printf("Cac uoc so la: ");
for(i=1; i<=in; i++)
if(in%i == 0) {
printf("%d, ",i);
}
}
Bài 17. Viết chương trình xét xem một số n có phải là số nguyên tố không.
Code mẫu
#include<stdio.h>
#include<math.h>
int main() {
int n, i, ngt=1;
printf("Nhap n: ");
scanf("%d",&n);
for(i=2; i<=sqrt(n); i++) {
if (n%i==0) {
ngt=0;
}
}
if(ngt==0)
printf("\nSo da nhap khong phai la so nguyen to");
else
printf("\nSo da nhap la so nguyen to");
}
Bài 18. 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ố đó.
Code mẫu
#include<stdio.h>
int main() {
int n, i;
printf("Nhap n: ");
scanf("%d", &n);
for(i=1; i<=n; i++) {
if(n%i==0)
printf("\nUoc so cua n la %d",i);
}
}
Bài 19. 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.
Code mẫu
#include<stdio.h>
int main() {
int n, i, a[100], max, min;
printf("Nhap so phan tu cua day N = ");
scanf("%d",&n);
for(i=1; i<=n; i++) {
printf("a[%d]: ",i);
scanf("%d",&a[i]);
}
max=a[1];
for(i=1; i<=n; i++) {
if(a[i]>max) {
max=a[i];
}
}
printf("\nSo lon nhat trong day la: %d", max);
min=a[1];
for(i=1; i<=n; i++) {
if(a[i]<min) {
min=a[i];
}
}
printf("\nSo nho nhat trong day la: %d", min);
}
I, Các bài thực hành cơ bản
Bài 20. Viết chương trình tìm các số nguyên gồm 3 chữ số sao cho tích của 3 chữ số bằng tổng của 3 chữ số. Ví dụ 1*2*3 = 1+2+3.
Code mẫu
#include<stdio.h>
int main() {
int i, a, b, c;
for(i=100; i<=999; i++) {
a = i/100;
b = (i%100)/10;
c = i%10;
if(a*b*c == a+b+c)
printf("%d%d%d ",a,b,c);
}
}
Bài 21. Nhập vào giờ, phút, giây. Kiểm tra xem giờ, phút, giây đó có hợp lệ hay không, nếu hợp lệ cho biết giờ sau đó một giây là bao nhiêu. Ví dụ nhập 01:59:59, giờ sau đó 1 giây là 02:00:00.
Code mẫu
#include<stdio.h>
int main() {
int i, h, p, s;
printf("Nhap gio: ");
scanf("%d",&h);
printf("Nhap phut: ");
scanf("%d",&p);
printf("Nhap giay: ");
scanf("%d",&s);
if((h>=0 && h<=23) && (p>=0 && p<=59) && (s>=0 && s<=59)) {
printf("%d gio %d phut %d giay hop le",h,p,s);
if(s == 59) {
if(p == 59) {
if(h == 23)
printf("\nGio sau do 1 giay la 00:00:00");
else
printf("\nGio sau do 1 giay la %d:%d:%d",h+1,p,s);
} else
printf("\nGio sau do 1 giay la %d:%d:%d",h,p+1,s);
} else
printf("\nGio sau do 1 giay la %d:%d:%d",h,p,s+1);
} else
printf("%d gio %d phut %d giay khong hop le",h,p,s);
}