C Program To Find Grade of Steel

A certain grade of steel is graded according to the following conditions:

1. Hardness must be greater than 50.
2. Carbon content must be less than 0.7
3. Tensile strength must be greater than 5600

The grades are as follows:

Grade is 10, if all three conditions are met.
Grade is 9, if conditions 1 and 2 are met.
Grade is 8, if conditions 2 and 3 are met.
Grade is 7, if conditions 1 and 3 are met.
Grade is 6, if only one condition is met.
Grade is 5, if none of the conditions are met.

Write a C program, which will require the user to give values of hardness, carbon content and tensile strength of the steel under consideration and output the grade of the steel.

Note: Tensile strength is the maximum stress that a material can withstand while being stretched or pulled before breaking.

Related Read:
else if statement in C
Relational Operators In C

Expected Output for the Input

User Input:
Enter values of hardness, tensile Strength and Carbon Content in Steel
55
5601
0.6

Output:
Steel Grade is 10

Video Tutorial: C Program To Find Grade of Steel



YouTube Link: https://www.youtube.com/watch?v=38wRh2_C288 [Watch the Video In Full Screen.]

Source Code: C Program To Find Grade of Steel

#include<stdio.h>

int main()
{
    int hardness, ts;
    float carbon;

    printf("Enter values of hardness, tensile Strength 
            and Carbon Content in Steel\n");
    scanf("%d %d %f", &hardness, &ts, &carbon);

    if(hardness > 50 && carbon < 0.7 && ts > 5600)
    {
        printf("Steel Grade is 10\n");
    }
    else if(hardness > 50 && carbon < 0.7)
    {
        printf("Steel Grade is 9\n");
    }
    else if(carbon < 0.7 && ts > 5600)
    {
        printf("Steel Grade is 8\n");
    }
    else if(hardness > 50 && ts > 5600)
    {
        printf("Steel Grade is 7\n");
    }
    else if(hardness > 50 || carbon < 0.7 || ts > 5600)
    {
        printf("Steel Grade is 6\n");
    }
    else if(hardness < 50 && carbon > 0.7 && ts < 5600)
    {
        printf("Steel Grade is 5\n");
    }

    return 0;
}

Output 1:
Enter values of hardness, tensile Strength and Carbon Content in Steel
60
6000
0.5
Steel Grade is 10

Output 2:
Enter values of hardness, tensile Strength and Carbon Content in Steel
80
5000
0.5
Steel Grade is 9

Output 3:
Enter values of hardness, tensile Strength and Carbon Content in Steel
40
6000
0.5
Steel Grade is 8

Output 4:
Enter values of hardness, tensile Strength and Carbon Content in Steel
60
8000
0.8
Steel Grade is 7

Output 5:
Enter values of hardness, tensile Strength and Carbon Content in Steel
51
5000
0.8
Steel Grade is 6

Output 6:
Enter values of hardness, tensile Strength and Carbon Content in Steel
41
5000
0.8
Steel Grade is 5

Update To The Program

If we input:
Hardness: 50
Tensile Strength: 5600
Carbon Content: 0.7

Output will be: Steel Grade is 6.

If you check with Grade 6 condition inside if condition: ( hardness > 50 || carbon < 0.7 || ts > 5600 ) None of the condition is true. Condition for Grade 6 is: Grade is 6, if only one condition is met.

So our output is wrong. But why is it showing wrong result?

#include<stdio.h>

int main()
{
    float x = 0.7;

    printf("%d\n", sizeof(x));
    printf("%d\n", sizeof(0.7));
    printf("%d\n", sizeof(0.7f));

    return 0;
}

Output:
4
8
4

As we can clearly see 0.7 is treated as double. We can typecase it using 0.7f. So in our steel program, variable declaration(float carbon) and comparison with 0.7(which is double) is causing the bug.

With this knowledge we can rewrite our program as follows:

Source Code: C Program To Find Grade of Steel

#include<stdio.h>

int main()
{
    int hardness, ts;
    double carbon;

    printf("Enter values of hardness, tensile Strength and Carbon Content in Steel\n");
    scanf("%d%d%lf", &hardness, &ts, &carbon);

    if(hardness > 50 && carbon < 0.7 && ts > 5600)
    {
        printf("Steel Grade is 10\n");
    }
    else if(hardness > 50 && carbon < 0.7)
    {
        printf("Steel Grade is 9\n");
    }
    else if(carbon < 0.7 && ts > 5600)
    {
        printf("Steel Grade is 8\n");
    }
    else if(hardness > 50 && ts > 5600)
    {
        printf("Steel Grade is 7\n");
    }
    else if(hardness > 50 || carbon < 0.7 || ts > 5600)
    {
        printf("Steel Grade is 6\n");
    }
    else if(hardness < 50 && carbon > 0.7 && ts < 5600)
    {
        printf("Steel Grade is 5\n");
    }
    else
    {
        printf("Did not match any criteria\n");
    }

    return 0;
}

Output 1:
Enter values of hardness, tensile Strength and Carbon Content in Steel
50
5600
0.7
Did not match any criteria

Output 2:
Enter values of hardness, tensile Strength and Carbon Content in Steel
41
5000
0.8
Steel Grade is 5

In above program we’re declaring carbon as double and using %lf format specifier to take value of carbon as input from the user.

Typecasing 0.7 to floating point value

#include<stdio.h>

int main()
{
    int hardness, ts;
    float carbon;

    printf("Enter values of hardness, tensile Strength and Carbon Content in Steel\n");
    scanf("%d%d%f", &hardness, &ts, &carbon);

    if(hardness > 50 && carbon < 0.7f && ts > 5600)
    {
        printf("Steel Grade is 10\n");
    }
    else if(hardness > 50 && carbon < 0.7f)
    {
        printf("Steel Grade is 9\n");
    }
    else if(carbon < 0.7f && ts > 5600)
    {
        printf("Steel Grade is 8\n");
    }
    else if(hardness > 50 && ts > 5600)
    {
        printf("Steel Grade is 7\n");
    }
    else if(hardness > 50 || carbon < 0.7f || ts > 5600)
    {
        printf("Steel Grade is 6\n");
    }
    else if(hardness < 50 && carbon > 0.7f && ts < 5600)
    {
        printf("Steel Grade is 5\n");
    }
    else
    {
        printf("Did not match any criteria\n");
    }

    return 0;
}

Output 1:
Enter values of hardness, tensile Strength and Carbon Content in Steel
50
5600
0.7
Did not match any criteria

Output 2:
Enter values of hardness, tensile Strength and Carbon Content in Steel
41
5000
0.8
Steel Grade is 5

Here we are typecasing 0.7 into floating point value by using 0.7f in else if conditions, which matches with the data type of variable carbon.

Related Read:
Comparing Floating Point Variable With a Value In C Programming

Video Tutorial: Comparing Floating Point Variable With a Value In C Programming



YouTube Link: https://www.youtube.com/watch?v=DXh6TsxLTME [Watch the Video In Full Screen.]

For list of all c programming interviews / viva question and answers visit: C Programming Interview / Viva Q&A List

For full C programming language free video tutorial list visit:C Programming: Beginner To Advance To Expert

View Comments

  • Sir if we input the value of Hardness as 50, Carbon as 0.7 and Tensile strength as 5600 the output should be Grade 5 but it gives the output as grade 6 how and why?

    • Hi Ambuj Srivastava, Thanks a lot for spotting and reporting the bug. This is how we can improve our programs. I've updated the code and possibly fixed the bug. Kindly let me know if there are any more issues. Am sure a lot of people will be helped with this bug fix. Thank you once again. 🙏