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 |