Programming Assignment 5.1: Topper and Average
Given a list of student names and their marks in K subjects, find the average mark for every student. Also, print a list of toppers in each subject. (Assume there is only one topper).
Use the given structure Student (in C language). You should the  implement following functions which are called in main():
- char * getTopper(struct Student s[], int nStudents, int subjectIndex, int nSubjects);
/*
Return name of topper of a subject. 
Arguments :
 array of Student records.
 number of Students (nStudents).
 index of subject for which function should find toper (subjectIndex).
 number of Subjects (nSubjects)
 */
- float getAvg(struct Student s, int nSubjects);
/* 
return avg mark of a student. 
Arguments :
 a Student record s.
 number of Subjects (nSubjects)
*/
- void setValues(struct Student* s, const char * name, float marks[], int nSubjects);
/* 
set values in structure Student 
Arguments :
 a pointer to a Student record (s).
 name of Student (name).
 mark of K subjects (marks).
 number of Subjects (nSubjects) 
*/
Input:
Given a list of student names and their marks in K subjects, find the average mark for every student. Also, print a list of toppers in each subject. (Assume there is only one topper). 
The first line contains the number of students (N) and the number of subjects (K). Following N lines contains name of student and the marks of K subjects.
Output
The first N lines of output should contain average marks of each student (Print 6 decimal places) . Following K lines should contain the name of the topper of each subject in the order in which the subjects are given.
Constraints
1 <= N <=100
1 <= K <=10
Assume that Name does not contain spaces and the maximum length of names of the students is 10 (excluding the NULL character at the end).
0 <= Mark <=100 and the marks are real numbers.Program:
#include<stdio.h>
#include<string.h>
#define N 100
#define K 10
struct Student {
char name[10];
float marks[10];
};
char * getTopper(struct Student [], int nStudents, int subjectIndex, int nSubjects);
/* return name of topper of a subject*/
float getAvg(struct Student , int nSubjects);
/* return avg mark of student s*/
void setValues(struct Student* , const char * name, float marks[], int nSubjects);
/* set values in struct Student s */
Coding :
char * getTopper(struct Student s[], int nStudents, int subjectIndex, int nSubjects)
{
    int i=0,id=0;
    float max=s[0].marks[subjectIndex],temp;
    for(i=0;i<nStudents;i++)
    {
        if(s[i].marks[subjectIndex]>max)
        {
            id = i;
            max = s[i].marks[subjectIndex];
        }
    }
    return (s[id].name);
}
float getAvg(struct Student  s, int nSubjects)
{
    int i;
    float avg=0;
    for(i=0;i<nSubjects;i++)
    {
        avg += s.marks[i];
    }
    avg = avg / nSubjects;
    return avg;
}
void setValues(struct Student* s, const char * name, float marks[], int nSubjects)
{
    int i=0;
    strcpy(s->name,name);
    for(i=0;i<nSubjects;i++)
    {
        s->marks[i] = marks[i];
    }
}
Program :
int main()
{
  struct Student students[N];
  int nStudents, nSubjects;
  int i, j;
  char name[10];
  float marks[K];
  /*Read Student data*/
  scanf("%d %d", &nStudents, &nSubjects);
  for (i = 0; i < nStudents; ++i) {
 scanf("%s", name);
 for (j = 0; j < nSubjects; ++j) {
   scanf("%f", &marks[j]);
 }
 setValues(&(students[i]), name, marks, nSubjects);
  }
  for (i = 0; i < nStudents; ++i) {
 printf("%f\n", getAvg(students[i], nSubjects));
  }
  for (j = 0; j < nSubjects; ++j) {
 if( j == nSubjects -1)
      printf("%s", getTopper(students, nStudents, j, nSubjects));
 else
       printf("%s\n", getTopper(students, nStudents, j, nSubjects));
  }
  return 0;
}

 
Nice brother , You are like angel In heaven
ReplyDeleteYou had a good skill in programming
ReplyDeleteThank u
DeleteThis comment has been removed by the author.
Deletesmit Kadvani Thank you so much...can you submit Programming Assignment 5.4: Number in a position please
ReplyDelete/* Function to load the numbers onto the linked list
DeleteReturn a pointer to the head of the list */
Node loadNum()
{
Node head,temp;
int t;
head=(struct node *)malloc(sizeof(struct node));
scanf("%d",&t);
head->data=t;
head->next=NULL;
temp=head;
scanf("%d",&t);
do
{
temp=head;
Node var=(struct node *)malloc(sizeof(struct node));
var->data=t;
while(temp->next!=NULL)
{
temp=temp->next;
}
var->next=NULL;
temp->next=var;
scanf("%d",&t);
}while(t!=-1);
return head;
}
/* Function to release the memory after every iteration */
void releaseMem(Node head)
{
}
Thank u bro 4 helping
Delete