Thực Hành Tin Học Đại Cương Với Lời Giải Lập Trình C Chi Tiết

Việc học tốt môn thực hành tin học đại cương đóng vai trò then chốt trong quá trình rèn luyện tư duy lập trình căn bản cho sinh viên. Nội dung này cung cấp lời giải chi tiết cho các bài tập từ buổi 2 đến buổi 6, giúp bạn nắm vững kiến thức về ngôn ngữ lập trình C. Qua đó, người học dễ dàng làm chủ các thuật toán cơ bản, quản lý cấu trúc điều khiển và thao tác hiệu quả trên mảng và chuỗi.

Thực Hành Tin Học Đại Cương Với Lời Giải Lập Trình C Chi Tiết

Kiến thức nền tảng cần nắm vững

Trước khi bắt đầu giải bài tập, bạn cần nắm vững các khái niệm về biến và hằng số. Đây là những đơn vị lưu trữ dữ liệu cơ bản nhất trong mọi chương trình máy tính.

Việc hiểu rõ kiểu dữ liệu sẽ giúp bạn tối ưu hóa bộ nhớ. Bạn cũng cần thành thạo các toán tử để thực hiện tính toán số học và logic.

Kỹ năng nhập và xuất dữ liệu qua scanfprintf là yêu cầu bắt buộc. Các câu lệnh rẽ nhánh như if-else giúp chương trình đưa ra quyết định dựa trên điều kiện.

Vòng lặp for, whiledo-while cho phép thực hiện các công việc lặp đi lặp lại. Cuối cùng, mảng và chuỗi là công cụ mạnh mẽ để xử lý tập hợp dữ liệu lớn.

Thực Hành Tin Học Đại Cương Với Lời Giải Lập Trình C Chi Tiết

Giải bài tập thực hành buổi 2: Nhập xuất và tính toán

Buổi thực hành thứ hai tập trung vào các thao tác tính toán đơn giản và định dạng dữ liệu xuất. Bạn sẽ học cách tìm số lớn nhất, nhỏ nhất và tính trung bình cộng.

Bài 2.1 yêu cầu tính tổng hai số thực đơn giản. Bài 2.2 và 2.3 sử dụng cấu trúc rẽ nhánh để so sánh giá trị giữa hai số.

//2.1 - Tính tổng hai số thực
#include <stdio.h> 
int main(){ 
 float a,b,tong; 
 scanf("%f",&a); 
 scanf("%f",&b); 
 tong = a + b; 
 printf("%f",tong); 
 return 0; 
} 
//2.2 - Tìm số lớn nhất
#include <stdio.h> 
int main(){ 
 float a,b,max; 
 scanf("%f",&a); 
 scanf("%f",&b); 
 max = a; 
 if(max < b){ 
  max = b; 
 } 
 printf("%6.2f",max); 
 return 0; 
} 

Bài 2.5 yêu cầu tính trung bình cộng của ba số nguyên. Lưu ý quan trọng là phải chia cho 3.0 thay vì 3 để kết quả trả về là số thực chính xác.

//2.5 - Tổng và trung bình cộng 3 số nguyên
#include <stdio.h> 
int main(){ 
 int a,b,c; 
 scanf("%d %d %d",&a,&b,&c); 
 printf("%d",a+b+c); 
 printf("n%f",(a+b+c)/3.0); 
 return 0; 
} 

Giải bài tập thực hành buổi 3: Toán tử và hàm toán học

Buổi 3 mở rộng kiến thức sang các kiểu dữ liệu có độ chính xác cao hơn như double. Bạn cũng sẽ bắt đầu làm quen với thư viện math.h để giải các bài toán phức tạp.

Bài 3.2 yêu cầu tính chu vi và diện tích hình tròn. Chương trình cần kiểm tra điều kiện bán kính phải lớn hơn 0 để tránh lỗi logic.

//3.2 - Tính chu vi và diện tích hình tròn
#include <stdio.h> 
int main(){ 
 double r,pi=3.14159; 
 scanf("%lf",&r); 
 if(r<=0){ 
  printf("ERROR"); 
  return 0; 
 } 
 printf("%.6lf",2pir); 
 printf("n%.6lf",pirr); 
 return 0; 
} 

Bài 3.5 thực hiện tính toán biểu thức toán học có chứa hàm lượng giác và trị tuyệt đối. Hãy đảm bảo khai báo #include <math.h> để sử dụng được hàm fabs, cos.

//3.5 - Tính giá trị biểu thức phức tạp
#include <stdio.h> 
#include <math.h> 
int main(){ 
 double a,b,c,f; 
 scanf("%lf %lf %lf",&a,&b,&c); 
 f = (a+b+c)/(aa+bb+1) - fabs(a-(ccos(b))); 
 printf("%.6lf",f); 
 return 0; 
} 

Giải bài tập thực hành buổi 4: Cấu trúc lặp và giải thuật

Cấu trúc lặp là trọng tâm của buổi thực hành thứ tư. Sinh viên sẽ giải quyết các bài toán về số nguyên tố, ước chung lớn nhất và các dãy số vô hạn.

Bài 4.2 hướng dẫn cách kiểm tra một số có phải là số nguyên tố hay không. Thuật toán sử dụng vòng lặp để đếm số ước của số đó trong khoảng từ 2 đến căn bậc hai của nó.

//4.2 - Kiểm tra số nguyên tố
#include <stdio.h> 
int main(){ 
 int a,check = 0; 
 scanf("%d",&a); 
 for(int i=2;i<(a/2 + 1);i++){ 
  if(a%i==0){ 
   check+=1; 
  } 
 } 
 if(a==1||(a!=2 && check!= 0)||a<=0){ 
  printf("Khong phai so nguyen to"); 
 }else { 
  printf("La so nguyen to"); 
 } 
 return 0; 
} 

Bài 4.4 giải quyết bài toán tìm Ước chung lớn nhất (UCLN) và Bội chung nhỏ nhất (BCNN). Đây là những thuật toán kinh điển trong chương trình thực hành tin học đại cương.

//4.4 - Tìm UCLN và BCNN
#include <stdio.h> 
int main(){ 
 int a,b,UCLN,BCNN=0; 
 scanf("%d %d",&a,&b); 
 if(a<=0||b<=0){ 
  printf("ERROR"); 
  return 0; 
 } 
 for(int i=1;i<(((a<b)?a:b) + 1);i++){ 
  if(a%i==0 && b%i==0){ 
   UCLN=i; 
  } 
 } 
 int j= (a>b)?a:b; 
 while(BCNN == 0){ 
  if(j%a==0 && j%b == 0){ 
   BCNN = j; 
  } 
  j++; 
 } 
 printf("%dn",UCLN); 
 printf("%d",BCNN); 
 return 0; 
} 

Các bài tập từ 4.6 đến 4.12 tập trung vào việc tính tổng các chuỗi số bằng vòng lặp. Việc kiểm soát điều kiện dừng và độ chính xác của số thực là yếu tố quyết định kết quả.

Giải bài tập thực hành buổi 5: Xử lý mảng một chiều

Mảng cho phép lưu trữ nhiều giá trị cùng kiểu dữ liệu dưới một tên biến duy nhất. Buổi 5 hướng dẫn bạn cách duyệt mảng, tìm kiếm và sắp xếp các phần tử.

Bài 5.1 thực hiện in mảng theo chiều ngược lại và tính tổng các phần tử. Thao tác này giúp sinh viên hiểu rõ cách quản lý chỉ số (index) trong mảng.

//5.1 - Nhập mảng, in ngược và tính tổng
#include<stdio.h> 
int main(){ 
 int n,sum = 0; 
 scanf("%d",&n); 
 if(n <= 0){ 
  printf("Error"); 
  return 0; 
 } 
 int arr[n]; 
 for (int i=0;i<n;i++){ 
  scanf("%d",&arr[i]); 
 } 
 for (int i=0;i<n;i++){ 
  printf("%d ",arr[n-i-1]); 
  sum+=arr[i]; 
 } 
 printf("n%d",sum); 
 return 0; 
} 

Bài 5.3 giới thiệu thuật toán sắp xếp nổi bọt (Bubble Sort) đơn giản. Việc hoán đổi giá trị giữa hai phần tử là kỹ thuật cơ bản nhưng vô cùng quan trọng.

//5.3 - Sắp xếp mảng tăng dần
#include<stdio.h> 
int main(){ 
 int n; 
 scanf("%d",&n); 
 int arr[n]; 
 for (int i=0;i<n;i++){ 
  scanf("%d",&arr[i]); 
 } 
 for (int i=0;i<n;i++){ 
  for (int j=i;j<n;j++){ 
   if(arr[i]>arr[j]){ 
    int sw = arr[i]; 
    arr[i] = arr[j]; 
    arr[j] = sw; 
   } 
  } 
  printf("%d ",arr[i]); 
 } 
 return 0; 
} 

Giải bài tập thực hành buổi 6: Xử lý chuỗi ký tự

Chuỗi thực chất là một mảng các ký tự kết thúc bằng ký tự null . Buổi 6 tập trung vào các hàm xử lý chuỗi như strlen, fgetsisalpha.

Bài 6.2 hướng dẫn cách chuẩn hóa một chuỗi ký tự bằng cách loại bỏ khoảng trắng thừa. Đây là bài tập thực tế thường gặp trong các hệ thống xử lý văn bản.

//6.2 - Chuẩn hóa khoảng trắng trong chuỗi
#include <stdio.h> 
#include <string.h> 
int main(){ 
 char titleIn[1000]; 
 int titleStart=0; 
 fgets(titleIn,1000,stdin); 
 for(int i=0;i<strlen(titleIn)-1;i++){ 
  if(titleIn[i]!=' '){ 
   titleStart=1; 
  } 
  if(titleStart==1){ 
   if(titleIn[i]==' '&&titleIn[i+1]==' '){ 
    continue; 
   }else if(titleIn[i]==' '&&i==(strlen(titleIn)-2)){ 
    continue; 
   }else { 
    printf("%c",titleIn[i]); 
   } 
  } 
 } 
 return 0; 
} 

Bài 6.4 giải quyết vấn đề chuyển đổi số nhị phân sang số thập phân bằng cách xử lý chuỗi. Thuật toán duyệt qua từng ký tự và nhân với lũy thừa của 2 tương ứng.

//6.4 - Chuyển đổi nhị phân sang thập phân
#include <stdio.h> 
#include <string.h> 
int ex(int a){ 
 int res=1; 
 for(int i=0;i<a;i++){ 
  res=2; 
 } 
 return res; 
} 
int main() 
{ 
 char str[100]; 
 int num = 0; 
 fgets(str, 100, stdin); 
 for(int i=1; i<strlen(str)-1;i++) 
 { 
  if(str[i]!='0'){ 
   num += ex(strlen(str)-i-2); 
  } 
 } 
 if(str[0]!='0') 
  num -= ex(strlen(str)-0-2); 
 printf("%d",num); 
 return 0; 
} 

Hy vọng bộ lời giải chi tiết cho chương trình thực hành tin học đại cương này sẽ giúp bạn củng cố kiến thức lập trình vững chắc. Việc tự mình gõ lại code và chạy thử trên môi trường lập trình sẽ giúp bạn hiểu sâu hơn về bản chất của từng câu lệnh. Chúc bạn hoàn thành tốt các bài tập và đạt kết quả cao trong kỳ thi sắp tới.

Cập nhật lần cuối 05/02/2026 by Hiếu IT

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *