Nhờ xem giúp code bài tập C cơ bản

Em mới học lập trình nên anh chị cho em hỏi một số vấn đề này với ạ!
Cách em làm như thế này đúng không ạ! Em sợ suy nghĩ của mình sai.
Bài 1: Tìm số lớn nhất trong ba số

Bài em làm
#include <stdio.h>
#include <stdlib.h>

int main()
{
	printf_s("====== Bai tap so sanh 3 so nguyen ======\n");
	int a, b, c;
	printf_s("Nhap so thu nhat: ");
	scanf_s("%d", &a);
	printf_s("Nhap so thu hai: ");
	scanf_s("%d", &b);
	printf_s("Nhap so thu ba: ");
	scanf_s("%d", &c);
	printf_s("================ Ket qua ================\n");
	if (a > b && a > c) {
		printf_s("%d la so lon nhat\n", a);
	}
	else if (b > c)
	{
		printf_s("%d la so lon nhat\n", b);
	}
	else {
		printf_s("%d la so lon nhat\n", c);
	}
	system("pause");
	return 0;
}
Bài mẫu
#include <stdio.h>

int main() {
   int a, b, c;

   a = 11;
   b = 22;
   c = 33;

   if ( a > b && a > c )
      printf("%d la so lon nhat.", a);
   else if ( b > a && b > c )
      printf("%d la so lon nhat.", b);
   else if ( c > a && c > b )
      printf("%d la so lon nhat.", c);
   else   
      printf("Gia tri cua cac so la khong duy nhat");

   return 0;
}

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

Bài em làm
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
	printf_s("====== Giai phuong trinh bac 2 ======\n");
	double a, b, c, x1, x2, delta;

	printf_s("Moi ban nhap a: ");
	scanf_s("%lf", &a);
	printf_s("Moi ban nhap b: ");
	scanf_s("%lf", &b);
	printf_s("Moi ban nhap c: ");
	scanf_s("%lf", &c);

	delta = b*b - 4 * a * c;

	if (delta < 0) {
		printf_s("Phuong trinh vo nghiem!\n");
	}
	else if (a == 0 && b == 0)
	{
		printf_s("Phuong trinh vo so nghiem!\n");
	}
	else if (delta == 0)
	{
		x1 = x2 = -b / 2 * a;
		printf_s("Phuong trinh co nghiem kep la %lf\n", x1);
	}
	else
	{
		x1 = (-b + sqrt(delta)) / (2 * a);
		x2 = (-b - sqrt(delta)) / (2 * a);
		printf_s("Phuong trinh co 2 nghiem phan biet: x1 = %lf va x2 = %lf\n", x1, x2);
	}
	system("pause");
	return 0;
}
Bài mẫu
#include<math.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
main()
{
    float a,b,c,d;
    printf("Nhap vao 3 so a, b, c: ");
    scanf("%f%f%f",&a,&b,&c);
    if(a==0)
    {
        if(b==0)
            {
                if(c==0)
                    printf("Phuong trinh co vo so nghiem!");
                else
                    printf("Phuong trinh vo nghiem!");
            }
        else
            printf("Phuong trinh co nghiem duy nhat la: %f",-c/b);
    }
    else
    {
        d=b*b-4*a*c;
        if (d<0)
            printf("Phuong trinh vo nghiem!!!");
        else if (d==0)
            printf("Phuong trinh co nghiem kep la: %f",-b/(2*a));
        else
            printf("Phuong trinh co 2 nghiem phan biet la: %f,%f",(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a));    
    }    
  
}

Mong anh chị giúp đỡ. Em xin cảm ơn ạ. Nếu sai chỗ nào anh chị góp ý giúp em với nhé. Kết quả thì vẫn giống như bài mẫu nhưng em sợ cách làm sai. :smiley:

Bài 1 chưa đúng hết các trường hợp. 4 3 4 thì sao? 4 4 4 thì sao?
Bài 2 vấn đề tương tự nhập vào là 0 0 0 thì sao? Và

có nghĩa là 0x^2 + 0x + c = 0 thì sẽ có vô số nghiệm? Đúng không nhỉ?

1 Like

Em thấy trên công thức có trường hợp vô số nghiệm. Nên e mới thắc mắc là sao bài khác có VSN ý. :smiley:

Nếu a == 0 && b == 0 thì cũng phải xét thêm c xem nó thế nào mới biết vô số hay là vô không số

2 Likes

Bài 1: Max = a rồi so sánh với b và c, tương tự, Min = a, rồi so sanh b và c bạn
Bài 2: trường hợp a == 0 và b == 0 chưa chính xác, trường hợp vô số nghiệm dường như không xảy ra đâu bạn, vì chả ai cho 3 hệ sô a = 0 b = 0 và c = 0 cả.!

Cho nên điều kiện bình thường phải xét a = 0 và a != 0

1 Like

Lần sau nếu muốn kiểm tra thì tự mình kiểm tra bằng cách nghĩ ra tất cả các trường hợp có thể và 1 số trường hợp đặc biệt: các cận của biến, trường hợp chia 0, bị số âm (tuỳ bài) rồi sinh input.

Bài 1: Vì có ba số thôi nên bạn so sánh từng cặp số, gán max = a rồi ss với b, nếu b lớn hơn hoặc bằng a thì gán max = b, sau đó ss với c tương tự rồi xuất max ra là số lớn nhất.
Bài 2: Mình bày cho, thuật toán của các dạng bài giải phương trình là bài toán giải và biện luận phương trình trong toán học, bạn thiếu trường hợp a=0,b=0,c#0 vô nghiệm; a=0,b=0,c=0 vô số nghiệm; a=0,b#0 phương trình bậc nhất x=-c/b; a#0,b#0 giải pt bậc hai.

1 Like

Dạ em cảm ơn anh nhé.

1 Like
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>

using namespace std;
struct Quanli
   { 
      int x,y;
                   }PS[100];
void Nhap(Quanli PS[], int &n)
    {   printf ("nhap so luong phan so " );
        do { 
        scanf("%d",&n);
        if(n<0)
        printf ("nhap sai");
                             }while(n<0);
        for (int i =0 ; i<n ; i++)
           { printf ( " nhap phan so thu %d\n",i+1);
             printf ("x= ");scanf("%d",&PS[i].x);
             printf("y= ");
			 do {
			 scanf("%d",&PS[i].y);
			  if(PS[i].y==0) printf ("nhap lai");
			   }while(PS[i].y==0);
			     }}
void In( Quanli PS[], int &n)
    { 
	printf ("nhap phan so \n");
    printf ("STT\ttuso\tmauso\tphanso\n");
    for(int i=0;i<n;i++)
    printf ("%d\t%d\t%d\t%d/%d\n",i+1,PS[i].x,PS[i].y);
   rgps(PS,n);
    }
int ucln(int a , int b)
 {
 a=abs(a);
 b=abs(b);
 while (a!=b)
            {
                if(a>b)
                    a=a-b;
                else
                    b=b-a;
            }
            return a;}
void rgps( Quanli PS[], int &n)
{{for (int i=0 ; i<n ; i++)
    {int us=ucln(PS[i].x, PS[i].y);
    PS[i].x=PS[i].x/us;
     PS[i].y=PS[i].y/us;
	 printf (" phan so %d/%d ", PS[i].x,PS[i].y);}
} }
int main ()
{
	int n,i,us;
	
	Nhap(PS,n);
	In(PS,n);
   
	                   
					    }
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?