C언어 구조체 성적 - Ceon-eo gujoche seongjeog


구조체 'student'로 3명의 총점 및 평균을 계산하는 성적 처리 프로그램 구현하기


#include<stdio.h>

struct student{
      int kor, eng, math, tot;
      double avg;
   };

int main(){

   // 선언문
   struct student stu[3];   // 구조체 student의 변수 stu[] 선언

   // 입력문, 처리문
   for(int i = 0; i < 3; ++i){
      printf("[ student %d ] 입력\n", i + 1);

      printf("국어 : ");
      scanf("%d", &stu[i].kor);

      printf("영어 : ");
      scanf("%d", &stu[i].eng);

      printf("수학 : ");
      scanf("%d", &stu[i].math);

      stu[i].tot = stu[i].kor + stu[i].eng + stu[i].math;
      stu[i].avg = stu[i].tot / 3.;
      }
      printf("\n");

   // 출력문
   for(int i = 0; i < 3; ++i){
      printf("student[%d] 총점 : %d\n", i + 1, stu[i].tot);
      printf("student[%d] 평균 : %.2lf\n\n", i + 1, stu[i].avg);
   }
   
   return 0;
}
C언어 구조체 성적 - Ceon-eo gujoche seongjeog

'C' Related Articles


C언어 구조체 성적 - Ceon-eo gujoche seongjeog

글쓴이: 익명 사용자 / 작성시간: 수, 2020/11/11 - 2:44오전

c언어의 구조체 배열을 이용하여 학년별 과목별 성적의 평균을 구하는 프로그램입니다.
학생 구조체를 하나 선언하여 학생의 정보와 과목별 성적을 입력받았고,
점수 구조체를 선언하여 학생들의 과목별 성적의 합과 평균값을 담으려고 했습니다.
디버그로 돌려보니 scanf로 입력받아 s구조체 배열에는 값이 잘 들어갑니다.
근데 그 다음에 다른 구조체의 배열에 넣으려고 하니 값이 주소값으로 들어가는 것 같습니다.
여기서부터 막혀서 아예 뒷부분 결과값까지 다 주소값으로 나오네요ㅠㅠ
포인터로도 바꿔보고 ㄱ했는데 도저히 풀리지 않습니다.. 도와주세요

#include <stdio.h>
#define SIZE 3
#define SIZE2 5
 
struct student {
	char name[10];
	int number;
	int grade;
	int kor;
	int eng;
	int math;
};
 
struct grades
{
	int korSum;
	int engSum;
	int mathSum;
	double korAvg;
	double engAvg;
	double mathAvg;
};
 
void main() {
	struct student s[SIZE][SIZE2];
	struct grades g[SIZE];
	int i, j;
	int arrSum[SIZE];
 
 
	for (i = 0; i < SIZE; i++) {
		printf("[ %d학년 성적 입력 ]\n",i);
		for (j = 0; j < SIZE2; j++) {
			printf("이름 : ");
			scanf("%s", s[i][j].name);
			printf("번호 : ");
			scanf("%d", &s[i][j].number);
			printf("학년 : ");
			scanf("%d", &s[i][j].grade);
			printf("국어 : ");
			scanf("%d", &s[i][j].kor);
			printf("영어 : ");
			scanf("%d", &s[i][j].eng);
			printf("수학 : ");
			scanf("%d", &s[i][j].math);
			printf("--------------------------------------\n");
 
			g[i].korSum += s[i][j].kor;
			g[i].engSum += s[i][j].eng;
			g[i].mathSum += s[i][j].math;
		}
 
		g[i].korAvg = (double)g[i].korSum / SIZE2;
		g[i].engAvg = (double)g[i].engSum / SIZE2;
		g[i].mathAvg = (double)g[i].mathSum / SIZE2;
	}
 
	for (i = 0; i < SIZE; i++) {
		printf("[ %d학년 성적 평균 ]\n", i);
		printf("국어 평균 : %lf\n", g[i].korAvg);
		printf("영어 평균 : %lf\n", g[i].engAvg);
		printf("수학 평균 : %lf\n", g[i].mathAvg);
		printf("------------------------------------------\n");
	}
 
 
}

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    #include "stdafx.h"

    #include <stdio.h>

    #include <Windows.h>

    #define MAX 3

    struct st_info {

    char name[30];

    double lang=0.0f, eng = 0.0f, math = 0.0f;

    double total = 0.0f, avg = 0.0f, rank = 0.0f;

    char grade[3];

    };

    int main()

    {

    typedef unsigned char byte;

    //구조체

    st_info clsA[MAX];

    for (int i = 0; i < MAX; i++) {

    system("cls");

    printf("%d번 학생\n이름 :", i + 1);

    scanf_s("%s", clsA[i].name, sizeof(clsA[i].name));

    printf("국어 :");

    scanf_s("%lf"&clsA[i].lang);

    printf("영어 :");

    scanf_s("%lf"&clsA[i].eng);

    printf("수학 :");

    scanf_s("%lf"&clsA[i].math);

    clsA[i].total = clsA[i].lang + clsA[i].eng + clsA[i].math;

    clsA[i].avg = (clsA[i].lang + clsA[i].eng + clsA[i].math) / 3;

    if (clsA[i].total > 95) sprintf_s(clsA[i].grade, "A+");

    else if (clsA[i].total > 90 && clsA[i].total <=95) sprintf_s(clsA[i].grade, "A0");

    else if (clsA[i].total > 85 && clsA[i].total <= 90) sprintf_s(clsA[i].grade, "B+");

    else if (clsA[i].total > 80 && clsA[i].total <= 85) sprintf_s(clsA[i].grade, "B0");

    else if (clsA[i].total > 75 && clsA[i].total <= 80) sprintf_s(clsA[i].grade, "C+");

    else if (clsA[i].total > 70 && clsA[i].total <= 75) sprintf_s(clsA[i].grade, "C0");

    else if (clsA[i].total > 65 && clsA[i].total <= 70) sprintf_s(clsA[i].grade, "D+");

    else if (clsA[i].total > 60 && clsA[i].total <= 65) sprintf_s(clsA[i].grade, "D0");

    }

    printf("------------------------------------------------------\n");

    printf("이    름 | 국어 | 영어 | 수학 | 총점| 평균 | 등급\n");

    for (int i = 0; i < MAX; i++) {

    printf("%s %0.1lf %0.1lf %0.1lf %0.1lf %0.1lf %s\n", clsA[i].name, clsA[i].lang,clsA[i].eng,clsA[i].math,clsA[i].total,clsA[i].avg, clsA[i].grade);

    }

    return 0;

    }

    cs

    // 이름과 국, 영, 수 점수를 scanf으로 입력 받을 수 있고, 입력된 결과를 출력 한다.