C언어

[C언어] 구조체(2) - 예제

yujin0517 2021. 8. 8. 14:29

과일 가격의 평균 구하기

 

  • 과일 이름, 가격, 과일 철을 미리 선언
  • 출력 함수를 사용하여 미리 선언된 과일의 정보 출력
  • 과일들의 평균 가격 구하기
  • define으로 SIZE를 3으로 정의

 

#include<stdio.h>
#define SIZE 3

typedef struct Fruit {
	char name[20];  //20byte
	int price;  //4byte
	char season[10];  //20byte
}F;

void main() {
	F arrFruit[SIZE] = {   //구조체(2차원) 배열
		{"사과", 1500, "가을"},
		{"배", 2000, "가을"},
		{"바나나", 900, "사계절"}
	};
	double sum = 0;
	double avg = 0;
	for (int i = 0; i < SIZE; i++) {
		printf("%s %d %s\n", arrFruit[i].name, arrFruit[i].price, arrFruit[i].season);
		sum += arrFruit[i].price;
	}
	avg = sum / SIZE;
	printf("\n");
	printf("과일 평균 가격 : %.0lf원\n", avg);
}

콘솔창

 

학생들의 국영수 점수 총합 및 평균 출력

 

  • 구조체를 사용하여 학생 번호, 이름, 성별, 점수 변수를 선언 / typedef 사용
  • 1,2반 각각 3명의 학생이 있으므로 2차원 배열 생성
  • sizeof를 사용하여 배열의 길이 구하기, 이때 sizeof(데이터 타입)으로 나눠줘야 정확한 값이 출력

 

#include<stdio.h>
#define rowSIZE 2
#define colSIZE 3
/*
	1반 학생 : 연경, 효진, 수지
	2반 학생 : 상욱, 정환, 본길
*/
typedef struct Student {
	int studentNumber;
	char studentName[10];
	char studentGender[5];
	int studentScore[3];
}std;

void main() {
	std arrstd[rowSIZE][colSIZE];
	int count = 0;
	int s_length = sizeof(arrstd[0][0].studentScore) / sizeof(int);
	int ban_sum[rowSIZE] = { 0, };
	double ban_avg[rowSIZE] = {0, };
	int sum = 0;
	double avg = 0.0;

	for (int i = 0; i < rowSIZE; i++) {
		count = 0;
		for (int j = 0; j < colSIZE; j++) {
			count++;
			arrstd[i][j].studentNumber = count;

			printf("1학년 %d반 %d번 학생 이름 : ", i+1, arrstd[i][j].studentNumber);
			scanf_s("%s", arrstd[i][j].studentName, sizeof(arrstd[i][j].studentName));  //크기를 알려줘야함.

			printf("%s 학생 성별 : ", arrstd[i][j].studentName);
			scanf_s("%s", arrstd[i][j].studentGender, sizeof(arrstd[i][j].studentGender));

			printf("%s 학생의 국영수 점수를 입력하세요.\n", arrstd[i][j].studentName);

			for (int k = 0; k < s_length; k++) {
				scanf_s("%d", arrstd[i][j].studentScore + k);
				ban_sum[i] += arrstd[i][j].studentScore[k];
			}
			ban_avg[i] = (double)ban_sum[i] / colSIZE;
		}
		sum += ban_sum[i];
	}
	avg = (double)sum / (rowSIZE * colSIZE);

	for (int i = 0; i < rowSIZE; i++) {
		for (int j = 0; j < colSIZE; j++) {
			printf("1학년 %d반 %d번 %s 학생\n", 
				i+1, arrstd[i][j].studentNumber, arrstd[i][j].studentName);
			printf("국영수 점수 : ");
			for (int k = 0; k < s_length; k++) {
				printf("%d점 ", arrstd[i][j].studentScore[k]);
			}
			printf("\n");
		}
		printf("===========================\n");
	}

	for (int i = 0; i < rowSIZE; i++) {
		printf("%d반 총합 및 평균 : %d점, %.2lf점\n\n", 
			i+1, ban_sum[i], ban_avg[i]);
	}
	printf("===========================\n");
	printf("1학년 전체 총합 및 평균 : %d점, %.2lf점", sum, avg);
}

 

학생 이름, 성별, 점수 입력
반, 학년 총합 및 평균

 

 

감사합니다!

 

2021.08.08