구조체를 이용하여 학번 및 성적 저장
본 예시는 학교에서 과제로 나온 것인데요.
간단히 작성해보았습니다.
코드 중에 이해가 안가거나,
더 나은 방법으로 구현이 가능하다면 마음껏 적어주시기 바랍니다.
#include <iostream>
#include <stdio.h>
#define square(x) (x)*(x)
using namespace std;
typedef struct student {
int id;
double eng;
double math;
}student;
double avgScore(student *p_tempStudent, int length)
{
double result;
double allSum = 0;
int i;
for (i = 0; i < length; i++)
allSum += (p_tempStudent + i) -> eng;
result = allSum / length;
return result;
}
double myPb(student *p_tempStudent, int length)
{
double inner, result, avg;
avg = avgScore(p_tempStudent, length);
for(int i = 0; i < length; i++)
inner = square(((p_tempStudent + i)->eng) - avg);
result = sqrt(inner / (length - 1));
return result;
}
void getRank(int myId, student *myStud)
{
int engRank = 1, mathRank = 1, cur = 0;
double myEng, myMath;
//학번에 해당하는 위치를 찾아낸다.
//본인의 영어 수학, 수학 점수를 저장한다.
while (cur != 10)
{
if (myStud[cur].id == myId)
{
myEng = myStud[cur].eng;
myMath = myStud[cur].math;
break;
}
cur++;
}
if (cur == 10)
{
printf("해당 학번에 존재하는 자료가 없습니다.\n");
return;
}
//학생 구조체 배열의 처음부터 끝까지 돌며, 자신보다 입력된 점수보다 높을 경우
//1씩 더해준다.
for (cur = 0; cur < 10; cur++)
{
if (myStud[cur].eng > myEng)
engRank++;
if (myStud[cur].math > myMath)
mathRank++;
}
printf("영어 성적 : %d\n수학 성적 : %d\n", engRank, mathRank);
}
int main() {
student myStudent[10] =
{
1234, 78, 87,
1235, 65, 55,
1365, 88, 95,
2546, 45, 56,
3124, 58, 88,
1976, 71, 54,
1657, 32, 55,
2547, 90, 43,
2456, 66, 78,
1765, 54, 99
};
cout << avgScore(myStudent, sizeof(myStudent) / sizeof(myStudent[0])) << endl;
cout << myPb(myStudent, 10) << endl;
getRank(1234, myStudent);
getRank(9999, myStudent);
}
#include <iostream>
#include <stdio.h>
#define square(x) (x)*(x)
using namespace std;
typedef struct student {
int id;
double eng;
double math;
}student;
double avgScore(student *p_tempStudent, int length)
{
double result;
double allSum = 0;
int i;
for (i = 0; i < length; i++)
allSum += (p_tempStudent + i) -> eng;
result = allSum / length;
return result;
}
double myPb(student *p_tempStudent, int length)
{
double inner, result, avg;
avg = avgScore(p_tempStudent, length);
for(int i = 0; i < length; i++)
inner = square(((p_tempStudent + i)->eng) - avg);
result = sqrt(inner / (length - 1));
return result;
}
void getRank(int myId, student *myStud)
{
int engRank = 1, mathRank = 1, cur = 0;
double myEng, myMath;
//학번에 해당하는 위치를 찾아낸다.
//본인의 영어 수학, 수학 점수를 저장한다.
while (cur != 10)
{
if (myStud[cur].id == myId)
{
myEng = myStud[cur].eng;
myMath = myStud[cur].math;
break;
}
cur++;
}
if (cur == 10)
{
printf("해당 학번에 존재하는 자료가 없습니다.\n");
return;
}
//학생 구조체 배열의 처음부터 끝까지 돌며, 자신보다 입력된 점수보다 높을 경우
//1씩 더해준다.
for (cur = 0; cur < 10; cur++)
{
if (myStud[cur].eng > myEng)
engRank++;
if (myStud[cur].math > myMath)
mathRank++;
}
printf("영어 성적 : %d\n수학 성적 : %d\n", engRank, mathRank);
}
int main() {
student myStudent[10] =
{
1234, 78, 87,
1235, 65, 55,
1365, 88, 95,
2546, 45, 56,
3124, 58, 88,
1976, 71, 54,
1657, 32, 55,
2547, 90, 43,
2456, 66, 78,
1765, 54, 99
};
cout << avgScore(myStudent, sizeof(myStudent) / sizeof(myStudent[0])) << endl;
cout << myPb(myStudent, 10) << endl;
getRank(1234, myStudent);
getRank(9999, myStudent);
}
댓글 없음:
댓글 쓰기