CS50 3주차 배열강좌 링크
이번 강좌는 컴파일링,디버깅,배열에 관한 강좌이다.
#include <stdio.h>
int main(void)
{
printf("Hello, world!\n");
}
stdio.h는 헤더파일로써 c언어로 작성되어있다. 컴파일러가 프로그램을 컴파일할때 printf의 역할이 무엇인지를 알려주는 코드가 담겨있다.
컴파일의 4단계
코드에 있는 버그를 식별하고 고치는 과정. 디버거라는 프로그램을 통해 디버깅을 하게 되며 중지점(break point)를 선택하여 디버깅시 프로그램이 멈춰야되는 지점을 특정할 수 있다.
러버덕 디버깅(Rubber Duck Debugging)
치명적인 오류가 발생했을때, 누군가에게 질문하기 전에 책상 위의 오리에게 문제에 대해 설명하고 문제를 다시 해결해보는 방법. 뭔가 당황스러운 방법이긴한데 발생한 문제에 대하여 처음부터 설명하다보면 문제가 발생한 이유에 대해 자연스럽게 재정의 할수 있기 때문이라고 한다.
실제 업무에서는 코드에 문제가 있는지 지속적으로 점검해야될 필요성이 있으며 또한 유지보수를 위해 일정수준 이상의 가독성을 유지해 주어야한다. 같은 프로젝트 내에서 코드를 만드는데 있어서 규칙이나 규약이 있어야하고 실제 많은 기업들에서 코드를 작성할때 특정한 스타일 가이드를 따르는 지침이 있다고한다.
우리 회사는 따로 스타일 지침이없던데...DB의 컬럼명에 대해서는 주제영역,데이터사전을 만드는데 이것도 코드디자인에 포함되는 부분인가??
각각의 자료형은 서로 다른 크기의 메모리를 차지한다.
#include <cs50.h>
#include <stdio.h>
int main(void)
{
// Scores
int score1 = 72;
int score2 = 73;
int score3 = 33;
// Print average
printf("Average: %i\n", (score1 + score2 + score3) / 3);
}
위의 코드의 경우 점수를 동적으로 받을 수 없고, 배열이 3개로 설정되어있기 때문에 4개이상의 점수를 받을 수 없기때문에 좀 더 동적으로 바꾸어본다.
#include <cs50.h>
#include <stdio.h>
float average(int length, int array[]);
int main(void)
{
// 사용자로부터 점수의 갯수 입력
int n = get_int("Scores: ");
// 점수 배열 선언 및 사용자로부터 값 입력
int scores[n];
for (int i = 0; i < n; i++)
{
scores[i] = get_int("Score %i: ", i + 1);
}
// 평균 출력
printf("Average: %.1f\n", average(n, scores));
}
//평균을 계산하는 함수
float average(int length, int array[])
{
int sum = 0;
for (int i = 0; i < length; i++)
{
sum += array[i];
}
return (float) sum / (float) length;
}
문자열은 문자(char)의 데이터 배열을 의미한다.즉, 문자열은 문자의 갯수만큼의 바이트를 필요로 하게된다.C의경우 문자열의 가장끝에는 널 종단문자('\0')가 있는데, 이는 메모리상에서 다른변수의 시작점을 이전변수와 구분하기 위해서 사용되며 8비트가 모두 0으로 이루어져있다.
자바의 경우에는 널 종단문자를 사용하지 않고, 문자열의 길이를 저장하는 방식을 사용한다고 한다.
참고 링크
너무 빨리 올려서 재수없어요 그리고 중간에 님 회사 스타일 지침 적는 부분 오타잇삼 수정하삼;