로그인 바로가기 하위 메뉴 바로가기 본문 바로가기
난이도
입문

모두를 위한 컴퓨터 과학 (CS50 2019)

임시 이미지 David J. Malan (데이비드 J. 말란)
http://www.boostcourse.org/cs112/forum/48651
좋아요 15504 수강생 34435

안녕하세요? 

1. 포인터에 대해 책과 참고자료로 올려주신 자료에 의해 이해한 바,  

포인터를 나타내는 *는 (1)형변환이 있고 (2) 주소값을 주는 것 두 가지로 이해했는데 제가 이해한 것이 맞는지 여쭤보고 싶습니다. 

그리고 주소값을 나타낼 떄는 보통 &변수명이 꼭 따라붙어야 된다고 이해했는데 제 이해가 맞는지요? 

2. 2번 샘플미션코드를 출력해 보았으나 출력결과가 없었습니다. 제가 뭐 잘못한 건가요 아니면 

코드에 원래 출력결과가 없는 건가요?(샘플미션코드 사진이 문제될 경우 삭제하겠습니다.)

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

const int NUMBER_OF_ANSWERS = 10;
const int ANSWERS[NUMBER_OF_ANSWERS] = {1, 2, 3, 4, 5, 1, 2, 3, 4, 5};

const int NUMBER_OF_GRADES = 9;
const int SCORES[NUMBER_OF_GRADES] = {95, 90, 85, 80, 75, 70, 65, 60, 0};
const char *GRADES[NUMBER_OF_GRADES] = {"A+", "A", "B+", "B", "C+", "C", "D+", "D", "F"};

int* charArrayToIntArray(char *target[], const int length);
int getNumberOfCollectAnswers(const int answers[], const int target[], int length);
int calculateScore(int numberOfCollectAnswers);
void printAnswers(char *who, const int target[], int length);
char* calculateGrade(int totalScore, const int scores[], const char *grades[], int length);

int main(int argc, char *argv[]) {
	if (argc != (NUMBER_OF_ANSWERS + 1)) {
		printf("문제는 10 문제입니다. 현재 %d 개의 답안을 제출했습니다. 10개의 답안을 제출하시오.\n", argc - 1);
		printf("ex) ./mission02 4 4 3 5 2 5 1 2 4 3\n");
		return -1;
	}

	int *studentAnswers = charArrayToIntArray(argv, argc);

	for (int i = 0; i < NUMBER_OF_ANSWERS; i++) {
		if (studentAnswers[i] >= 0 && studentAnswers[i] <= 5) {
			continue;
		} else {
			printf("답의 범위는 1 ~ 5 입니다. 범위 외의 답안이 있습니다.\n");
			return -1;
		}
	}

	printf("학점평가 시작\n");

	int numberOfCollectAnswers = getNumberOfCollectAnswers(ANSWERS, studentAnswers, NUMBER_OF_ANSWERS);

	int totalScore = calculateScore(numberOfCollectAnswers);

	char *grade = calculateGrade(totalScore, SCORES, GRADES, NUMBER_OF_GRADES);

	printAnswers("정답", ANSWERS, NUMBER_OF_ANSWERS);
	printAnswers("학생", studentAnswers, NUMBER_OF_ANSWERS);
	printf("정답 수: %d\n", numberOfCollectAnswers);
	printf("점수: %d\n", totalScore);
	printf("학점: %s\n", grade);

	return 0;
}

int* charArrayToIntArray(char *target[], const int length) {
	int *result = malloc(sizeof(int) * NUMBER_OF_ANSWERS);

	for (int i = 0; i < NUMBER_OF_ANSWERS; i++) {
		result[i] = atoi(target[i + 1]);
	}

	return result;
}

int getNumberOfCollectAnswers(const int answers[], const int target[], int length) {
	int numberOfCollectAnswers = 0;

	for (int i = 0; i < length; i++) {
		if (answers[i] == target[i]) {
			numberOfCollectAnswers++;
		}
	}

	return numberOfCollectAnswers;
}

int calculateScore(int numberOfCollectAnswers) {
	return numberOfCollectAnswers * 10;
}

void printAnswers(char *who, const int target[], int length) {
	printf("%s : ", who);

	for (int i = 0; i < length; i++) {
		printf("%d\t", target[i]);
	}
}



감사합니다.