Bài Tập Tổng Hợp Lập Trình C

9852

Như vậy là chúng ta đã tìm hiểu coi như xong về ngôn ngữ lập trình c. Và nếu bạn muốn thật sự giỏi được ngôn ngữ không quá khó khăn này thì mình xin đưa ra 2 yếu tố quan trọng sau đây :

  1. Kiên trì
  2. Chịu khó

Tức là bạn phải kiên trì với ngôn ngữ c này, C là ngôn ngữ cơ bản của mọi ngôn ngữ lập trình khác nếu như bạn muốn trở thành một Dev-lập trình viên giỏi thì bạn phải cày. Ý mình là bạn phải chịu khó làm bài tập và áp dụng thực tế nhiều thì lúc đó mới có thể giỏi nó được.Hãy tạo một team cùng chung sở thích về lập trình và bắt đầu học tập ngay.

Ở những bài viết về ví dụ và bài tập lập trình c cơ bản tới nâng cao trước thì mình đã chỉ rõ từng bài tập cho từng chương cơ bản và nâng cao rồi. Bây giờ mình sẽ viết một bài tổng hợp lập trình c, tất nhiên sau khi bạn đã nắm rõ về c rồi thì bài này mình sẽ cho cả bài có lời giải và những bài các bạn tự làm lấy. Nào chúng ta bắt đầu thôi

Bài tập tổng hợp lập trình c có lời giải

Bài 1 : Giải phương trình bậc nhất

#include <stdio.h>
void main()
{
  float a, b;
  printf("\nGiai phuong trinh bac nhat AX + B = 0");
  printf("\nCho biet ba he so A B : ");
  scanf("%f%f", &a, &b);
  if (a==0)
  if (b!=0)
   printf("Phuong trinh vo nghiem");
  else
   printf("Phuong trinh co nghiem khong xac dinh");
  else
   printf("Dap so cua phuong trinh tren = %f", -b/a);
  getch();
}

Bài 2 : Sắp xếp mảng 

#include<alloc.h>
#include<stdio.h>
#include<conio.h>
//=======================================
void taolap(int *A,int n)
 {
   int i;
   printf("\n Tao lap day so:\n");
   for(i=0;i<n;i++)
   {
     printf("\n A[%d]=",i);
     scanf("%d",&A[i]);
   }
 }
void dayso(int *A,int n)
 {
   int i;
   for(i=0;i<n;i++)
   printf("%5d",A[i]);
 }
void select(int *A,int n)
 {
   int i,j,temp;
   for(i=0;i<n-1;i++)
 {
for(j=i+1;j<n;j++)
  {
    if(A[i]>A[j])
   {
     temp=A[i];
     A[i]=A[j];
     A[j]=temp;
   }
  }
 }
  printf("\n Ket qua thu duoc la:");
  dayso(A,n);
 }
void luachon()
  {
    clrscr();
    int *A,n;
    printf("\n \t SAP XEP KIEU LUA CHON\n");
    printf("\n Nhap so phan tu n=");
    scanf("%d",&n);
    A=(int*)malloc(n*sizeof(int));
    taolap(A,n);
    select(A,n);
    free(A);
    getch();
 }
//=======================================
void in2(int *A,int n)
 {
   int i;
   for(i=0;i<n;i++)
   printf("%5d",A[i]);
 }
void tructiep()
 {
   clrscr();
   int *A,i,j,n,temp;
   printf("\n SAP XEP KIEU TRUC TIEP\n");
   printf("\n\t SAP XEP KIEU TRUC TIEP\n");
   printf("\n Nhap so phan tu n=");
   scanf("%d",&n);
   A=(int*)malloc(n*sizeof(int));
   printf("\n Tao lap day so:\n");
   for(i=0;i<n;i++)
  {
    printf("\n A[%d]=",i);
    scanf("%d",&A[i]);
  }
   for(i=1;i<n;i++)
    {
      temp=A[i];
      for(j=i-1;j>=0&&temp<A[j];j--)
      A[j+1]=A[j];
      A[j+1]=temp;
      printf("\n\nKet qua lan thu %d:",i);
      in2(A,i+1);
    }
  free(A);
  getch();
 }
//=======================================
void tlap(int *A,int n)
 {
   int i;
   printf("\n");
   printf("\n Tao lap day so:\n");
   for(i=0;i<n;i++)
   {
     printf("\n A[%d]=",i);
     scanf("%d",&A[i]);
   }
 }
void in1(int *A,int n)
 {
   int i;
   for(i=0;i<n;i++)
   printf("%5d",A[i]);
 }
void bubble(int *A,int n)
 {
   int i,j,temp;
   for(i=1;i<n;i++)
  {
   for(j=n-1;j>=i;j--)
   {
    if(A[j-1]>A[j])
    {
     temp=A[j-1];
     A[j-1]=A[j];
     A[j]=temp;
    }
   }
 printf("\n\n Ket qua lan %d:",i);
 in1(A,n);
  }
 }
void suibot()
 {
   clrscr();
   int *A,n;
   printf("\n SAP XEP KIEU SUI BOT\n");
   printf("\n Nhap so phan tu n=");
   scanf("%d",&n);
   A=(int*)malloc(n*sizeof(int));
   tlap(A,n);
   bubble(A,n) ;
  free(A);
 getch();
 }
//=======================================
void qs(int *A,int left,int right)
 {
   int i,j,x,y;
   i=left;
   j=right;
   x=A[(left+right)/2];
   do
   {
     while(A[i]<x&&i<right)i++;
     while(A[j]>x&&j>left)j--;
     if(i<=j)
    {
     y=A[i];
     A[i]=A[j];
     A[j]=y;
     i++;
     j--;
    }
  } while(i<=j);
    if(left<j)qs(A,left,j);
    if(i<right)qs(A,i,right);
 }
void quick(int *A,int n)
 {
   qs(A,0,n-1);
 }
void in3(int *A,int n)
 {
   int i;
   for(i=0;i<n;i++)
   printf("%5d ",A[i]);
 }
void nhanh()
 {
   clrscr();
   int *A,n;
   printf("\n SAP XAP NHANH\n");
   printf("\n So phan tu n=");
   scanf("%d",&n);
   A=(int*)malloc(n*sizeof(int));
   printf("\n\n Tao lap day so:\n");
   for(int i=0;i<n;i++)
  {
   printf("\n A[%d]=",i);
   scanf("%d",&A[i]);
  }
   quick(A,n);
   printf("\n\n");
   printf("Ket qua thu duoc la:\n\n");
   in3(A,n);
   getch();
   free(A);
  }
//=======================================
void in4(int *A,int n)
 {
   for(int i=0;i<n;i++)
   printf("%5d",A[i]);
 }
void merge(int *A,int n)
 {
   int i,k,j,low1,up1,low2,up2,size;
   int *ds;
   size=1;
   ds=(int*)malloc(n*sizeof(int));
   while(size<n)
 {
   low1=0;
   k=0 ;
   while(low1+size<n)
 {
   low2=low1+size;
   up1=low2-1;
   if(low2+size-1<n)
   up2=low2+size-1;
    else
    up2=n-1;
     for(i=low1,j=low2;i<=up1 && j<=up2;k++)
   {
     if(A[i]<=A[j])
     ds[k]=A[i++];
    else
     ds[k]=A[j++];
    }
     for(;i<up1;k++)
     ds[k]=A[i++];
     for(;j<up2;k++)
     ds[k]=A[j++];
     low1=up2+1;
    }
     for(i=low1;k<n;i++)
      ds[k++]=A[i];
     for(i=0;i<n;i++)
     A[i]=ds[i];
     size*=2;
  }
     printf("\n \n Ket qua thu duoc la:\n\n");
     in4(A,n);
     free(ds);
 }
void hoanhap()
 {
   clrscr();
   int *A,n,i;
    printf("\n \t SAP XEP KIEU HOA NHAP\n");
    printf("\n So phan tu n=");
    scanf("%d",&n);
    A=(int*)malloc(n*sizeof(int));
    printf("\n Tao lap day so:\n");
    for(i=0;i<n;i++)
    {
     printf("\nA[%2d]=",i);
     scanf("%d",&A[i]);
    }
    merge(A,n);
    printf("\n");
   getch();
   free(A);
 }
//=======================================
void in5(int *A,int n)
 {
   for(int i=0;i<n;i++)
   printf("%5d",A[i]);
 }
void shaker(int *A,int n)
 {
   int i,j,temp,tdoi;
  do
  {
  tdoi=0;
  for(i=n-1;i>0;i--)
   {
     if(A[i-1]>A[i])
    {
     temp=A[i-1];
     A[i-1]=A[i];
     A[i]=temp;
     tdoi=1;
    }
   }
     for(j=1;j<n;j++)
    {
     if(A[j-1]>A[j])
     {
     temp=A[j-1];
     A[j-1]=A[j];
     A[j]=temp;
     tdoi=1;
     }
    }
   }while(tdoi);
     printf("\n\n Ket qua la :",tdoi);
     in5(A,n);
 }
void shaker()
 {
   clrscr();
   int *A,n,i;
   printf("\n \tSHAKER_SORT\n");
   printf("\n So phan tu n=");
   scanf("%d",&n);
   A=(int*)malloc(n*sizeof(int));
   printf("\n \n Tao lap day so:\n");
   for(i=0;i<n;i++)
   {
    printf("\n A[%2d]=",i);
    scanf("%d",&A[i]);
   }
    shaker(A,n);
   getch();
 free(A);
 }
//=======================================
void main()
 {
   while(1) {
   clrscr();
   int key;
   printf("\n\tSAP XEP VA TIM KIEM\n");
   printf("\n 1.Selection_sort\n");;
   printf("\n 2.Bubble_sort\n");
   printf("\n 3.Insertion_sort\n");
   printf("\n 4.Quick_sort\n");
   printf("\n 5.Merge_sort\n");
   printf("\n 6.Shaker_sort\n");
   printf("\n 0.Tro ve");
   printf("\nBam mot phim de chon chuc nang:");
   scanf("%d",&key);
   if(key==0) break;

   switch(key)
   {
    case 1:
       clrscr();
      luachon();
    printf("\n\n\tAn phim bat ky de tro lai menu chinh");
    getch();
    clrscr();
    break;
    case 2:
     clrscr();
     suibot();
     printf("\n\n\tAn phim bat ky de tro lai menu chinh");
    getch();
    clrscr();
    break;
    case 3:
       clrscr();
      tructiep();
      printf("\n");
      printf("\nAn phim bat ky de tro lai menu chinh");
      getch();
      clrscr();
      break;
     case 4:
       clrscr();
        nhanh();
        printf("\n");
        printf("\nAn phim bat ky de tro lai menu chinh");
        getch();
        clrscr();
        break;
     case 5:
       clrscr();
       hoanhap();
       printf("\n");
         printf("\nAn phim bat ky de tro lai menu chinh");
        getch();
       clrscr();
          break;
    case 6:
       clrscr();
        shaker();
         printf("\n");
         printf("\nAn phim bat ky de tro lai menu chinh");
      getch();
     clrscr();
   break;
  }
 }
 // getch();
 }

Bài 3 : Liên kết các hoán vị của N phần tử

#include <stdio.h>
#include <conio.h>
#define MAX 10
int mang[MAX], n;
void swap (int *x, int *y)
{
 int tmp;
 tmp = *x;
 *x = *y;
 *y = tmp;
}
void hoanvi(int k)
{
 int j;
 if (k==1)
 {
   printf("\n");
   for (j=0; j<n; j++)
   printf("%d ", mang[j]);
 }
 else
  for (j=k-1; j>=0; j--)
  {
    swap(&mang[k-1], &mang[j]);
    hoanvi(k-1);
    swap(&mang[j], &mang[k-1]);
  }
}
void main()
{
 int i;
   printf("\nCho biet so phan tu (N < 10) : ");
   scanf("%d", &n);
   for (i=0; i<n; i++)
   mang[i] = i;
 hoanvi(n);
 getch();
}

Bài tập tổng hợp về cấu trúc và file

Bài tập về cấu trúc trong c

Bài 1 :  Viết chương trình thực hiện các yêu cầu:
– Tạo một danh sách liên kết đơn, dữ liệu của mỗi phần tử là một chuỗi ký tự.
– Tạo hàm đệ quy để in ra giá trị dữ liệu của mỗi phần tử trong danh sách liên kết.

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
struct tro
  { char s[30];
    tro *next;
  };
tro *dau;
tro *taodanhsach()
{
    clrscr();
    tro *p,*dau;
    int i=1,tam;
    char st[30];
    dau=NULL;
    do
    {
      printf("\n Nhap du lieu :",i++);
      fflush(stdin);
      gets(st);
      if (strcmp(st,""))
       {
      p=(tro *)calloc(1, sizeof (tro));
      if (p ==NULL)
      {
        printf("\n Cap phat co loi.\n");
        exit(1);
      }
      strcpy(p->s,st);
      p->next =dau;
      dau=p;
       }
     }
     while (strcmp(st,""));
     printf("\n\n\n da tao xong"
     getch();
     return (dau);
}
void dequy(tro *dau)
{
   tro *p;
   p=dau;
   if (p->next==NULL)
   printf("\n %s",p->s);
    else
     { dequy(p->next);
      printf("\n %s",p->s);
     }
}
void main()
{
   dau=taodanhsach();
   dequy(dau);
   getch();
}

Bài 2 :  Viết chương trình nhập vào ngày, tháng năm và cho biết số thứ tự của ngày đó trong năm.

#include <iostream.h>
#include <conio.h>
#include <stdio.h>
  int ngay[2][12]={ {31,28,31,30,31,30,31,31,30,31,30,31},
                   {31,29,31,30,31,30,31,31,30,31,30,31}};
  struct date
   { int ngay;
     int thang;
     int nam;
   };
int ngaynam(date *p);
int isdate(date *p);
void main()
{
     date d;
     printf("\nNhap ngay thang nam :");
     scanf("%d%d%d",&d.ngay,&d.thang,&d.nam);
     if (isdate(&d))
       printf("\nDo la ngay thu : %d ",ngaynam(&d));
     else
       printf("\nNhap sai ngay!");
     getch();
}
int isdate(date *p)
      { int m,n,k;
        m=p->ngay;
        n=p->thang;
        k=p->nam;
        if (n==1 || n==3 ||n==5 || n==7 || n==8 ||n==10 ||
        n==12)
          return ((m<=31) && (m>0));
        else if (n==4 || n==6 ||n==9 || n==11)
          return ((m<=30) && (m>0));
        else if ((n==2) && (k % 4 == 0 && k % 100 != 0 || k % 400 == 0))
          return ((m<=29) && (m>0));
        else
          return ((m<=28) && (m>0));
       }
int ngaynam(date *p)
 {
        int i,j,k,s;
        s=p->ngay;
        k=p->nam;
        j=((k % 4 == 0 && k % 100 != 0) || k % 400 == 0);
        for (i=0;i<p->thang-1;i++)
        s+=ngay[j][i];
  return (s);
}

Bài tập về File

Bài 1. Viết chương trình thực hiện các yêu cầu:

  • Nhập 10 số thực vào một file văn bản có tên là INPUT.
  • Đọc nội dung file INPUT.
  • Tính tổng bình phương các số có trong file INPUT.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void write()
{FILE *f = fopen("input","wt");
/*Ghi vao file van ban 10 so thuc */
 for (int i=1; i<=10;i++)
  { float a;
     printf("\n Nhap so thu %d: ",i);
     scanf("%f", &a);
     fprintf(f,"%f ",a);
   }
   fclose(f);
  }
void read()
  { int i;float a;
    FILE *f = fopen("input","rt");
    printf("\n Noi dung tap tin la : \n\n");
    do
    { fscanf(f,"%f",&a);
      if (!feof(f))
      printf("%.2f ",a);
    } while (!feof(f));
      fclose(f);
   }
      float tongbp()
      { int i;float tong = 0;
        FILE *f = fopen("input","rt");
        do
        { float a;
          fscanf(f,"%f",&a);
          if (!feof(f))
          tong+=a*a;
         }while (!feof(f));
          fclose(f);
          return tong;
        }
void main()
 { clrscr();
   write();
   read();
   printf("\n Tong binh phuong la %.2f \n ",tongbp());
   getch();
}

Trên đây là những bài mà mình cho là khá hữu dụng cho các bạn làm bài tập về lập trình c. Mình cũng upload các câu hỏi hay về lập trình c lên và tất nhiên là các bạn sẽ phải tự túc làm bài. Chúc các bạn thành công!

Download Now

Nguồn : Lập trình c

No votes yet.
Please wait...

BÌNH LUẬN