2011-01-30 83 views
0

我写了一个程序,其中显示了关于5位学生的数据,我想知道如何显示学生姓名注册号并标记谁在数组中获得最高分数。 该方案是这样的:如何从数组中打印整行?

#include "stdio.h" 
#include "conio.h" 

struct student 
{ 
    char name[30]; 
    char reg[10]; 
    short int marks_dbms; 
    short int marks_prog; 
}; 

void main() 
{ 
    short int i; 

    student a[5]={  
     {"salman","B-1499",92,98}, 
     {"Haider","B-1489",34,87}, 
     {"zeeshan","B-1897",87,90}, 
     {"faizan","B-1237",56,66}, 
     {"Asif","B-1233",88,83} 

    }; 

    for(i=0; i<5; i++) 
    { 
     printf("%s\t",a[i].name); 
     printf("%s\t",a[i].reg); 
     printf("%d\t",a[i].marks_dbms); 
     printf("%d\t\n",a[i].marks_prog); 

    } 

    getch(); 

} 
+0

有什么问题吗? – Reinderien 2011-01-30 16:50:45

+6

我不知道是谁教导人们随机缩进。 – 2011-01-30 17:03:35

回答

0

这是一个简单的。


int maxDbmsMarks = 0; 
int maxMarksIndex = 0; 
for(int i = 0; i < 5; i++) 
{ 
    if(a[i].marks_dbms > maxDbmsMarks) 
    { 
     maxDbmsMarks = a[i].marks_dbms; 
     maxMarksIndex = i; 
    } 
} 

printf("Student with the maximum dbms marks :\n"); 
printf("Name : %s, Reg : %s, dbmsMarks: %d, progMarks : %d\n", a[maxMarksIndex].name, a[maxMarksIndex].reg, a[maxMarksIndex].makrs_dbms, a[maxMarksIndex].marks_prog); 

这与查找数组中的最大数量是一样的。上面的逻辑是针对'最高dbms标记'的,您可以修改它以查找最高编号或最高组合标记。

0

首先编写一个函数,用它们的标记来比较学生。它应该接受两个学生参数,如果第一个学生的考虑次数少于第二个,则返回true。

bool compareStudentsByMarks(const student & lhs, const student & rhs) 
{ 
    // This only compares by marks_dbms, I'm not sure how you want to do it. 
    return lhs.marks_dbms < rhs.marks_dbms; 
} 

然后,将包括<algorithm>头之后,使用功能std::max_element,传递你的函数作为最后一个参数。

const int SIZE_OF_STUDENT_ARRAY = 5; 
student * pmax = std::max_element(a, a+SIZE_OF_STUDENT_ARRAY, compareStudentsByMarks); 
// now pmax is a pointer to the student with the highest marks, 
// you already know how to display their info 

如果你有机会获得的C++ 0x,这是比较容易都不少:

auto pmax = std::max_element(a, a+SIZE_OF_STUDENT_ARRAY, 
    [](const student & lhs, const student & rhs) 
    { 
     return lhs.marks_dbms < rhs.marks_dbms; 
    });