01/10/2018, 10:14

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 ======
");
	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 ================
");
	if (a > b && a > c) {
		printf_s("%d la so lon nhat
", a);
	}
	else if (b > c)
	{
		printf_s("%d la so lon nhat
", b);
	}
	else {
		printf_s("%d la so lon nhat
", 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 ======
");
	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!
");
	}
	else if (a == 0 && b == 0)
	{
		printf_s("Phuong trinh vo so nghiem!
");
	}
	else if (delta == 0)
	{
		x1 = x2 = -b / 2 * a;
		printf_s("Phuong trinh co nghiem kep la %lf
", 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
", 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.

Henry viết 12:19 ngày 01/10/2018

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à

else if (a == 0 && b == 0)
{
printf_s(“Phuong trinh vo so nghiem!\n”);
}

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

Anh Trần Minh viết 12:24 ngày 01/10/2018

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 ý.

Henry viết 12:22 ngày 01/10/2018

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ố

Rhen Su viết 12:19 ngày 01/10/2018

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

HK boy viết 12:20 ngày 01/10/2018

Kết quả thì vẫn giống như bài mẫu nhưng em sợ cách làm sai.

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.

Nguyễn Phúc Hoàng viết 12:17 ngày 01/10/2018

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.

Anh Trần Minh viết 12:28 ngày 01/10/2018

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

Hùng Trần viết 12:25 ngày 01/10/2018
#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);
   
	                   
					    }
Bài liên quan
0