본문 바로가기

웹_프론트_백엔드/C언어

[자료구조] 2020.07.17

1. 모듈화 프로그래밍
** lec01.c

#include<stdio.h>
#include<stdlib.h>

// 모듈화 프로그래밍
#include"studentFile.h"

int main() {

	printf("학생수 입력: ");
	int n;
	scanf("%d", &n);
	S* s = (S*)malloc(n * sizeof(S));
	// 학생 구조체 배열이 생성됨
	for (int i = 0; i < n; i++) {
		inputS(&s[i], i);
	}
	for (int i = 0; i < n; i++) {
		show(s[i]);
	}

	return 0;
}

 

** studentFile.h

#pragma once
#include<stdio.h>

typedef struct student {
	int num;	// 1001번부터 순차적으로 지급
	char name[20];
	int s1;
	int s2;
	double avg;
}S;

void inputScores(S* sp) { // 주소값을 인자로 받기 위한 표인터 필요 -> 값 변화 발생
	printf("중간고사 점수 입력 : ");
	scanf("%d", &sp->s1);
	printf("기말고사 점수 입력 : ");
	scanf("%d", &sp->s2);
	sp->avg = (sp->s1 + sp->s2) / 2.0;
}

void inputS(S* sp, int index) {	// 주소값을 인자로 받기 위한 표인터 필요! -> 값 변화 발생
	sp->num = 1000 + index;
	printf("%d번의 학생 이름 입력 : ", sp->num);
	scanf("%s", sp->name);
	inputScores(sp);
}

void show(S sp) {
	printf("%d. %s의 성적은 %.2lf점입니다.\n", sp.num, sp.name, sp.avg);
}

 

 

2. Ctrl + K + F

 : 코드 줄정리 단축키

 

 

3. 행맨게임

1) 사용자가 정수 1개입력
2) 단어입력 -> 기본점수 100점 부여
3) 틀리면 점수가 10 감점 처리됨
4) 단어를 맞춤거나 점수가 0점 -> 종료
5) 단어 맞추기 반복
6) 최종점수 출력-> 절반이상 점수획득시 ★

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

// 1. 사용자가 정수 1개 입력
// 2. 단어 입력 -> 기본점수 100점부여
// 3. 점수가 -10 처리됨
// 4. 단어를 맞춤 or 0점 종료
// 5. 단어 맞추기 사용자가 정수 입력한 만큼 반복
// 6. 최종 점수 출력 -> ★

typedef struct WORD {
	char word[10]; // apple  kiwi
	char blind[10]; // _____  ____
	int score;
}W;
int main() {

	printf("단어개수입력: ");
	int n;
	scanf("%d", &n);
	W *w = (W *)malloc(n * sizeof(W));
	for (int i = 0; i < n; i++) {
		printf("단어입력: ");
		scanf("%s", w[i].word); // apple _____
		int j;
		for (j = 0; j < strlen(w[i].word); j++) {
			w[i].blind[j] = '_';
		}
		w[i].blind[j] = '\0'; // 문자배열 => 문자열
							  // a p p l e -> 문자배열
							  // a p p l e \0 -> 문자열
		w[i].score = 100;
	}
	char c;
	int score = 0;
	printf("\n☆★☆★게임을 시작합니다!☆★☆★\n");
	// ctrl+K+F : 줄정리
	for (int j = 0; j < n; j++) {
		while (1) { // => 중단시점 구현하기! (조건확인필수)
			printf("%s : ", w[j].blind);
			scanf(" %c", &c); // 버퍼비우기
							  // 행동을 했는지,안했는지 => sw변수
			int sw = 1;
			for (int i = 0; i < strlen(w[j].word); i++) {
				if (c == w[j].word[i]) {
					w[j].blind[i] = c;
					sw = 0;
				}
			}
			if (sw) {
				// 단어를 맞추지못했다.
				w[j].score -= 10;
				printf("해당 문자는 없습니다!ㅠ\n");
			}
			if (w[j].score == 0 || strcmp(w[j].word, w[j].blind) == 0) {
				printf("\n정답은 [%s]입니다.\n", w[j].word);
				score += w[j].score;
				printf("현재점수는 %d점입니다.\n", score);
				break;
			}
		}
	}
	printf("\n최종점수는 %d점입니다.\n", score);
	if (n * 50 <= score) {
		printf("★☆★☆★☆\n");
	}

	return 0;
}

 

 

4. 공용체 : 공간절약, 열거형 : 가독성 증가를 위해 활용

#include<stdio.h>

// 공용체 -> 공간절약
union check {
	int i;
	char c;
};

// 열거형 -> 가독성 증가를 위해 활용
enum WEEK {
	SUN, MON, TUE, WEN, THU, FRI, SAT
};

int main() {

	/*
	union check U;
	printf("공용체 U의 크기는 %d이다.\n", sizeof(U));
	// 속성들 중에 메모리 크기가 가장 큰 속성으로 설정됨

	U.i = 97;
	printf("i=%d, c=%c\n", U.i, U.c);
	U.c = 'A';
	printf("i=%d, c=%c\n", U.i, U.c);
	*/

	enum WEEK week;
	week = SUN;
	printf("%d\n", week); // 0
	week = SAT;
	printf("%d\n", week); // 6
	for (int i = SUN; i <= SAT; i++) {
		printf("%d ", i);
	}
	printf("\n");

	enum level { low = 10, mid = 50, high = 100 };
	int exp;
	scanf("%d", &exp);
	if (exp < low) {
		printf("브론즈");
	}
	else if (exp < mid) {
		printf("실버");
	}
	else if (exp < high) {
		printf("골드");
	}
	else {
		printf("플래티넘");
	}

	return 0;
}

'웹_프론트_백엔드 > C언어' 카테고리의 다른 글

[자료구조] 2020.07.22  (0) 2020.07.22
[자료구조] 2020.07.20  (0) 2020.07.21
[자료구조] 2020.07.15  (0) 2020.07.15
[자료구조] 2020.07.13  (0) 2020.07.14
2020.03.24  (0) 2020.03.25