웹_프론트_백엔드/단과

[단과_C] 2020.03.24

shine94 2020. 3. 25. 07:18

1. structArTest.c

#include<stdio.h>

#pragma pack(push, 1)

typedef struct Car {
	char brand[30];
	int price;
	char color[30];
}tag_Car;

#define L 3

void main() {
	tag_Car cars[L] = { 0, };
    
	for (int i = 0; i < L; i++) {
		printf("[%d번째]\n", i+1);
		printf("자동차 브랜드 : ");
		scanf_s("%s", cars[i].brand, sizeof(cars[i].brand));
		printf("자동차 가격 : ");
		scanf_s("%d", &cars[i].price);
		printf("자동차 색상 : ");
		scanf_s("%s", cars[i].color, sizeof(cars[i].color));
	}

	for (int i = 0; i < L; i++) {
		printf("[%d번째]\n", i + 1);
		printf("자동차 브랜드 : %s\n", cars[i].brand);
		printf("자동차 가격 : %d만원\n", cars[i].price);
		printf("자동차 색상 : %s\n", cars[i].color);
	}
}

 

2. structPointer.c

#include<stdio.h>

typedef struct Food {
	char name[30];
	int price;
	char taste[30];
}tag_Food;

void main() {
	tag_Food salmon = { "연어회", 29900, "물고기" };
	tag_Food* PSalmon = &salmon;

	// 아주 불편해 매우 불편해...!!
	//(*PSalmon).price = 20000;
	
	// -> 는 두번 접근, 한 번만 쓰면 된다..!!
	PSalmon->price = 20000;
    
	printf("%s\n", PSalmon->name);
	printf("%d원\n", PSalmon->price);
	printf("%s맛\n", PSalmon->taste);
}

 

3. structFunction.c

#include<stdio.h>

typedef struct Virus{
	char name[30];
	double death_rate;
	int 감염자_cnt;
}tag_Virus;

void init(tag_Virus* PV) {
	printf("바이러스 명칭 : ");
	scanf_s("%s", PV->name, sizeof(PV->name));
	printf("바이러스 치사율 : ");
	scanf_s("%lf", &PV->death_rate);
	printf("바이러스 감염자 수 : ");
	scanf_s("%d", &PV->감염자_cnt);
}

void main() {
	tag_Virus corona19 = {0, };
	init(&corona19);
	printf("바이러스 이름 : %s\n", corona19.name);
}

 

4. structTask.c 

#include<stdio.h>
#include<stdlib.h>
/*
학생 구조체 선언(typedef)
	*요소
	학생 이름, 학생 나이, 학생 국,영,수 점수

	학생 정보 입력은 함수로 선언
	(void형)
	총 학생 수는 입력받는다.
	동적배열로 학생 구조체 배열 선언 후 학생별 총점, 평균 출력
*/
//학생 구조체 선언(typedef) : 이름, 나이, 국어점수, 영어점수, 수학점수
typedef struct Student {
	char name[30];
	int age;
	//3칸 정수 배열
	int arScore[3];
}tag_Student;

//과목명에 규칙성 부여
char* arSub[3] = { "국어", "영어", "수학" };

//구조체 주소를 전달받아서 직접 접근하여 초기화 해준다.
void init(tag_Student* s) {
	printf("학생 이름 : ");
	//멤버변수에 접근할 때 2번 참조 할 때에는 ->(화살표 연산자)를 사용한다.
	scanf_s("%s", s->name, sizeof(s->name));
	printf("학생 나이 : ");
	scanf_s("%d", &s->age);
	//과목은 3개이므로 3번 반복한다.
	for (int i = 0; i < 3; i++) {
		printf("%s 점수 : ", arSub[i]);
		scanf_s("%d", s->arScore+i);
	}
}

void main() {
	tag_Student* arStd = 0;
	int cnt = 0;
	int total = 0;
	double avg = 0.0;

	printf("학생 수 : ");
	scanf_s("%d", &cnt);

	//구조체 동적 할당
	arStd = (tag_Student*)malloc(sizeof(tag_Student) * cnt);

	//학생 수만큼 반복하여 각 구조체의 주소값을 init함수에 전달
	for (int i = 0; i < cnt; i++) {
		init(&arStd[i]);
		//init(arStd + i);
	}

	for (int i = 0; i < cnt; i++) {
		//이전 학생의 총점 초기화
		total = 0;
		//[], . 두 번 접근하므로 포인터연산과 ->연산자로 접근할 수 있다.
		printf("[%s 학생]\n", (arStd + i)->name);
		for (int j = 0; j < 3; j++) {
			printf("%s : %d점\n", arSub[j], (arStd + i)->arScore[j]);
			total += (arStd + i)->arScore[j];
		}
		avg = (double)total / 3;
		printf("총점 : %d점\n", total);
		printf("평균 : %.2lf점\n", avg);
	}
}

'웹_프론트_백엔드 > 단과' 카테고리의 다른 글

[단과_자료구조] 2020.07.15  (0) 2020.07.15
[단과_자료구조] 2020.07.13  (0) 2020.07.14
[단과_C] 2020.03.23  (0) 2020.03.23
[단과_C] 2020.03.20  (0) 2020.03.22
[단과_C] 2020.03.19  (0) 2020.03.20