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
Page Contents
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
#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
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:
#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.
#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
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. 🙏