Mình có lướt trên web và tìm được 10 bài tập về ngôn ngữ C (cụ thể là bài tập về đệ quy).
Mình không biết các bài tập ấy là cơ bản hay nâng vì mình thấy giải hơi khó.
Bạn nào Pro hay giỏi thì reply mình nhé, đây là bài tập cơ bản hay nâng cao!
Đây là bài tập C cơ bản hay nâng cao?
Cơ bản bạn ơi
Việc sử dụng các hàm tự tạo và có sẵn để xử dụng
Ui, kinh thế cơ à! Thế bạn thử lấy 1 ví dụ về bài tập nâng cao giùm mình dc k?
Xử lý thông tin từ fie, sử dụng con trỏ xử lý con trỏ
Các bài tập liên quan tới cấu trúc lớp struct
Bạn có tài liệu không, cho mình xin?
Mình không có…
tài liệu ở đây là tài liệu về struct hả bạn ?
À không, miễn là nó nâng cao, khó là được (để mình thấy độ phiêu bạc của C nâng cao ấy mà :D)
Không biết có hợp ý bạn không nữa
http://daynhauhoc.com/t/tai-lieu-hay-ve-c-c-tong-hop-cac-bai-toan-de-va-kho-danh-cho-dan-luyen-olympic-tin-hoc/2210
Mình chỉ biết có bài này mình thấy 2 câu cuối nâng cao. Mời các bạn cùng xem bài và trao đổi.
Nhập vào n điểm có toạ độ (x1, y1) … (xn, yn).
Tính:
- Tính Số tam giác tạo thành từ n điểm
- Tính số đường thẳng tạo thành
- Tính diện tích đa giác lồi nhỏ bao chứa tất cả các điểm.
- Tìm 1 đường thẳng mà chia đôi mặt phẳng sao cho mỗi nửa mặt phẳng chứa số điểm là N/2 (giả sử N chẵn)
Tiện thể mình post đáp án câu 1 và 2 mình đã làm, câu 3 vs 4 các bạn làm tiếp, có sai xót gì xin góp ý.
#include <stdio.h>
#include <conio.h>
#include<stdlib.h>
// Input n coordinates Function
void input_value(float x[],float y[],int n)
{ static short int i=0;
printf("\nInput n values for n coordinate:\n");
for(i=0;i<n;i++)
{ printf("\nCoordinates %d:",i+1);
printf(" x[%d]= ",i); scanf("%f",&x[i]);
printf("\t y[%d]= ",i); scanf("%f",&y[i]);
}
}
// Display n coordinates on screen
void output_value(float x[],float y[],int n)
{ static short int i=0;
for(i=0;i<n;i++)
{if(i%2==0) printf("\n");
printf("\tx[%d],y[%d]= %.2f,%.2f",i,i,x[i],y[i]);}
}
// Delete the same coordinates
int del_coordinates(float x[], float y[],int n)
{ static unsigned int i,j,k;
for(i=0;i<n;i++)
{ j=i+1;
while(j<n)
if(x[i]==x[j]&&y[i]==y[j])
{ for(k=j;k<n-1;k++)
{ x[k]=x[k+1];
y[k]=y[k+1];
} --n;
} else ++j;
}
return(n);
}
int del_array(float x[],int n)
{ static unsigned int i,j,k,count=0;
for(i=0;i<n;i++)
{ j=i+1;
while(j<n)
if(x[i]==x[j])
{for(k=j;k<n-1;k++)
x[k]=x[k+1];
--n;}else ++j;
}return(n);
}
// Delete the overlapping lines
unsigned int del_lines(float x[],float y[],int n)
{ static unsigned int i,j,count,count1,count2;
float k,c,array_k[100],array_c[100];
count=count1=count2=0;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
if(x[i]!=x[j]&& y[i]==y[j]) count2++;
else {
// Equation straight line:x+(-k)y+(k*y[i]-x[i]) =0
k=(x[i]-x[j])/(y[i]-y[j]);
c=k*y[i]-x[i];
array_k[count]=k;
array_c[count]=c;
count++; }
}
count1=del_coordinates( array_k, array_c,count);
return(count1+count2);
}
// Arrange the order of array in order to decrease value array x[]
void arrange_value(float x[], float y[],int n)
{ unsigned int i,j;
float mid;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
if(x[i]<x[j])
{ mid=x[i];
x[i]=x[j];
x[j]=mid;
mid=y[i];
y[i]=y[j];
y[j]=mid;}
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(x[i]==x[j]&&y[i]>y[j])
{
mid=y[i];
y[i]=y[j];
y[j]=mid;
}
}
}
// Invert position function
void invert_value(float *x, float *y)
{ float mid;
mid=*x;
*x=*y;
*y=mid;
}
int main()
{
// Declare Function
float x[100], y[100];
static int n,n2;
// Input the value of n variable:
do{
printf("\nEnter the value of n variable:");
scanf("%d",&n);
if(n<0) printf("\n You've just enter the negative value. Redo again:\n");
else input_value(x,y,n);
}while(n<0);
// Display the values of coordinates that you've just entered
printf("\nThe values of coordinates that you've just entered:\n");
output_value(x,y,n);
// The number of same coordinates n2:
n2=del_coordinates(x,y,n);
printf("\n\nThe number of same coordinates is: %d",n-n2);
printf("\n\nThe new coordinates is:\n");
output_value(x,y,n2);
// The number of straight line was created from n coordinates
printf("\n\n\n---------Answer question 1 --------------\n\n");
printf("The number of straight line was created from n coordinates: %d",del_lines(x,y,n2));
// Calculating the convex polygon area
printf("\n\n\n---------Answer question 3 --------------\n");
return (0);
}