Returning values in array in c

  • Thread starter Thread starter konvictx
  • Start date Start date
  • Tags Tags
    Array
AI Thread Summary
The discussion revolves around a C program designed to read daily temperature values and calculate the average, highest, and lowest temperatures. The initial code contained several issues, including the declaration of the variable 'n' as a float while it was being used as an integer in the scanf function. This led to incorrect data handling. Additionally, the sum variable in the average calculation was mistakenly declared as an integer, causing it to truncate decimal values when summing the temperatures. To resolve these issues, the code was modified to declare 'n' as an integer and to ensure that the sum variable in the average function was a float. The corrected code successfully computes and returns the average, highest, and lowest temperatures as intended. The discussion emphasizes the importance of proper data types in C programming to avoid logical errors in calculations.
konvictx
Messages
1
Reaction score
0
Code:
#include<stdio.h>
#include<conio.h>
float average(float[],float );
float highest(float[],float );
float lowest(float[], float );
void main (void)
{
float temper[15];
float x,n, y, z;
int  day;
clrscr();
printf("enter the no.days to read temperature for=\n");
scanf("%d",&n);
for(day=0; day<n; day++)
 {
 printf("temperature for day%d=",day+1);
 scanf("%f",&temper[day]);
 }
x=average(temper,n);
printf("average temperature is=%.2f\n",x);
y=highest(temper,n);
printf("highest temperature is=%.2f\n",y);
z=lowest(temper,n);
printf("lowest temperature is=%.2f\n",z);
getche();
}

float average(float temper[],float n)
{
int sum=0.0,x;
float average;
for(x=0; x<n; n++)
 sum+=temper[x];
 average=sum/n;
 return (average);
}

float highest(float temper[],float n)
{
float highest;
int y;
highest=temper[0];
for(y=0; y<n; y++)
if(highest<temper[y])
highest=temper[y];
return(highest);
}

float lowest(float temper[],float n)
{
float y,lowest=temper[0];
for(y=0; y<n; y++)
if(lowest>temper[y])
lowest=temper[y];
return(lowest);
}

hy my code is not returning value of average minimum and maximum temperature. what can i do now?
 
Technology news on Phys.org
What's it returning?
 
What result does your code actually show for maximum, minimum and average, for a specified small set of temperature values? (give a specific numeric example)
 
Code:
void main (void)
{
   float temper[15];
   float x,n, y, z;
   int  day;
   clrscr();
   printf("enter the no.days to read temperature for=\n");
   scanf("%d",&n);
.
.
.
You are declaring n as a float, but are attempting to read an int in scanf. Change the declaration of n to int.

I didn't notice any other errors, but I only gave your code a quick scan.
 
There is a Data Typical Mistake in float average();

You see, when you declare int sum = 0.0; sum is of int data type.

Now, when you store float into int, as in sum+=temper[x];
sum will truncate/delete all the decimal values and only sum integer part.

sum/n is ok, it will give a decimal float value.

If you declare n as int, and fix the datatypes in all of the functions, you still don't have to bother about sum/n, because sum is now of float type.

So, do all those edits, and tell us how's it going.

Editted:

Code:
#include<stdio.h>
#include<conio.h>
float average(float[],int );
float highest(float[],int);
float lowest(float[], int);
void main (void)
{
float temper[15];
float x, y, z;
int  day, n;
clrscr();
printf("enter the no.days to read temperature for=\n");
scanf("%d",&n);
for(day=0; day<n; day++)
 {
 printf("temperature for day%d=",day+1);
 scanf("%f",&temper[day]);
 }
x=average(temper,n);
printf("average temperature is=%.2f\n",x);
y=highest(temper,n);
printf("highest temperature is=%.2f\n",y);
z=lowest(temper,n);
printf("lowest temperature is=%.2f\n",z);
getche();
}

float average(float temper[],int n)
{
 int x;
 float sum=0.0;
float average;
for(x=0; x<n; n++)
 sum+=temper[x];
 average=sum/n;
 return (average);
}

float highest(float temper[],int n)
{
float highest;
int y;
highest=temper[0];
for(y=0; y<n; y++)
if(highest<temper[y])
highest=temper[y];
return(highest);
}

float lowest(float temper[],int n)
{
float y,lowest=temper[0];
for(y=0; y<n; y++)
if(lowest>temper[y])
lowest=temper[y];
return(lowest);
}

Now that should do.
 
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
I had a Microsoft Technical interview this past Friday, the question I was asked was this : How do you find the middle value for a dataset that is too big to fit in RAM? I was not able to figure this out during the interview, but I have been look in this all weekend and I read something online that said it can be done at O(N) using something called the counting sort histogram algorithm ( I did not learn that in my advanced data structures and algorithms class). I have watched some youtube...
Back
Top