使用C中的结构来存储学生信息(名称,卷号,标记)并执行插入,删除,搜索的程序

时间:2017-04-20 18:11:11

标签: c algorithm

我写过代码但不知道如何删除和搜索。请协助。我被困在删除和搜索中。请在代码中提出一些更改,以便删除和搜索。

#include<stdio.h>
#define SIZE 50

struct student {
    char name[30];
    int rollno;
    int sub[3];
};

main() {
    int i, j, max, count, total, n, a[SIZE], ni;
    struct student st[SIZE];


    printf("Enter how many students: ");
    scanf("%d", &n);

   /* for loop to read the names and roll numbers*/
    for (i = 0; i < n; i++) {
        printf("\nEnter name and roll number for student %d : ", i);
        scanf("%s", &st[i].name);
        scanf("%d", &st[i].rollno);
   }

   /* for loop to read ith student's jth subject*/
   for (i = 0; i < n; i++) {
       for (j = 0; j <= 2; j++) {
             printf("\nEnter marks of student %d for subject %d : ", i, j);
             scanf("%d", &st[i].sub[j]);
      }
   }

   /* (i) for loop to calculate total marks obtained by each student*/

   for (i = 0; i < n; i++) {
       total = 0;
       for (j = 0; j < 3; j++) {
           total = total + st[i].sub[j];
      }
      printf("\nTotal marks obtained by student %s are %dn", st[i].name,total);
      a[i] = total;
   }

   /* (ii) for loop to list out the student's roll numbers who
    have secured the highest marks in each subject */

   /* roll number who secured the highest marks */

   for (j = 0; j < 3; j++) {
       max = 0;
       for (i = 0; i < n; i++) {
           if (max < st[i].sub[j]) {
               max = st[i].sub[j];
               ni = i;
         }
      }
      printf("\nStudent %s got maximum marks = %d in Subject : %d",st[ni].name, max, j);
   }

   max = 0;

   for (i = 0; i < n; i++) {
       if (max < a[i]) {
           max = a[i];
           ni = i;
      }
   }

   printf("\n%s obtained the total highest marks.", st[ni].name);

}

1 个答案:

答案 0 :(得分:0)

您可以使用此代码根据代码

搜索学生
int sroll, flag = 0,    
scanf("%d",&sroll);
for(i=0;i<n;i++)           
{
    if(st[i].rollno == i)    // Checking if student exists based on roll
    {
        flag = 1;
        break;
    }
}
if(flag == 0)
    printf("not found\n");
else
    printf("found\n");

并使用此代码段根据代码编号删除某人

printf("Enter the roll number of the student whom you want to delete\n");
scanf("%d",&droll);
for(i=0;i<n;i++)
{
    if(st[i].rollno != droll)    // Not interested till the roll appears
        continue;
    st[i] = st[i+1];             // Shifting one student to left to compensate deletion 
}
n--;                             // Decreasing the total students
for(i=0;i<n;i++)
    printf("%s",st[i].name);     // Printing the students present