이 네 단계를 거치면 최종적으로 실행 가능한 파일이 완성됩니다.
코드 상에 있는 버그를 식별하고 고치는 과정 오류를 고치기 위해 필요함
협업하기 위해 필요. 컴퓨터 언어 각각의 스타일 가이드 또는 업무 단위의 약속
C -> snake_case, Java -> camelCase
const int N = 3;
const 키워드를 이용해 선언. 관례적으로 전역 변수는 대문자로 표현한다.
char의 배열. "HI!"입력시 메모리에 종단문자 \0가 추가로 들어간다.
문자열 라이브러리
main() 안에 기계적으로 void 라고 입력하는 대신 아래 코드와 같이 argc, argv 를 정의해보겠습니다.
#include <cs50.h>
#include <stdio.h>
int main(int argc, string argv[])
{
if (argc == 2)
{
printf("hello, %s\n", argv[1]);
}
else
{
printf("hello, world\n");
}
}
여기서 첫번째 변수 argc는 main 함수가 받게 될 입력의 개수입니다. 그리고 argv[]는 그 입력이 포함되어 있는 배열입니다. 프로그램을 명령행에서 실행하므로, 입력은 문자열로 주어집니다. 따라서 argv[]는 string 배열이 됩니다. argv[0]는 기본적으로 프로그램의 이름으로 저장됩니다. 만약 하나의 입력이 더 주어진다면 argv[1]에 저장될 것입니다. 예를 들어 위 프로그램을 “arg.c”라는 이름으로 저장하고 컴파일 한 후 “./argc”로 실행해보면 “hello, world”라는 값이 출력됩니다. 명령행 인자에 주어진 값이 프로그램 이름 하나밖에 없기 때문입니다. 하지만 “./argc David”로 실행해보면 “hello, David”라는 값이 출력됩니다. 명령행 인자에 David라는 값이 추가로 입력되었고, 따라서 argc 는 2, argv[1] 은 “David”가 되기 때문입니다.
#include <cs50.h>
#include <stdio.h>
string calculateGrade(int myScore){
string grade[] = {"A+","A","B+","B","C+","C","D+","D","F"};
if (myScore >= 95){
return grade[0];
} else if(myScore >= 90){
return grade[1];
} else if(myScore >= 85){
return grade[2];
} else if(myScore >= 80){
return grade[3];
} else if(myScore >= 75){
return grade[4];
} else if(myScore >= 70){
return grade[5];
} else if(myScore >= 65) {
return grade[6];
} else if(myScore >= 60) {
return grade[7];
} else {
return grade[8];
}
}
int main(void){
int myScore = 0;
printf("학점 프로그램\n");
printf("종료를 원하면 \"999\"를 입력\n");
printf("[ 학점 테이블 ]\n");
printf("점수 : 95 90 85 80 75 70 65 60 0\n");
printf("학점 : A+ A B+ B C+ C D+ D F\n");
while(true){
myScore = get_int("성적을 입력하세요 (0 ~ 100) : ");
if(myScore == 999){
printf("학점 프로그램을 종료합니다.\n");
break;
}
if(myScore >= 0 && myScore <=100){
printf("학점은 %s 입니다.\n",calculateGrade(myScore));
} else {
printf("** %i 성적을 올바르게 입력하세요. 범위는 0 ~ 100 입니다.\n",myScore);
}
}
}
#include <cs50.h>
#include <stdio.h>
#define SIZE 500000
int main(int argc, char*argv[]){
int n;
scanf("%d", &n);
// 1부터 N의 숫자중 K가 빠진 배열
int partArr[SIZE];
int lengthOfPartArr = n-1;
long totalSum = n * (n + 1) / 2;
long sum = 0;
for(int i=0; i < lengthOfPartArr; i++){
scanf("%d", &partArr[i]);
sum += partArr[i];
}
printf("K : %ld\n", totalSum - sum);
return 0;
}
#include <cs50.h>
#include <stdio.h>
#define MAX 10
int front = -1;
int rear = -1;
int queue[MAX];
int count = 0;
void add(){
if (count == MAX){
printf("Queue가 꽉 찼습니다.\n" );
} else {
int value = get_int("숫자를 입력하세요 : ");
rear = (rear + 1) % MAX;
queue[rear] = value;
count++;
}
}
void pop(){
if(count == 0){
printf("Queue가 비었습니다.\n" );
} else {
front = (front + 1) % MAX;
count--;
}
}
void display() {
// - 반복문을 사용하여 배열의 모든 요소를 출력 (hint: front, rear 변수 범위로 배열값을 출력)
if (count == 0){
printf("Queue가 비었습니다.\n" );
}
else {
if(front >= rear){
printf("Queue : " );
for(int i = front+1; i<= MAX + rear; i++){
printf("%d ",queue[i % 10]);
}
printf("\n");
} else {
printf("Queue : " );
for(int i = front+1; i<=rear; i++){
printf("%d ",queue[i]);
}
printf("\n");
}
}
}
int main(int argc, char*argv[]){
int num = 0;
while(num != 4){
num = get_int("1.add 2.pop 3.display 4.quit : ");
switch(num){
case 1 :
add();
break;
case 2 :
pop();
break;
case 3 :
display();
break;
default :
break;
}
printf("f : %d , r : %d\n",front, rear);
}
return 0;
}
3주차 난이도는 초보자들에게 너무 어려웠던것 같다 😭 우리팀도 거의 반 이상이 문제를 풀지 못하였다. 나도 1학년때 이 문제를 받았다면 절대 풀지 못했을거다.. 하지만 출제의도는 이해가 된다. 코딩을 하다 보면 모르는문제를 매번 직면하게 되니 이런 난이도를 한 번 접해보는것도 도움이 될 수 있을수도 ...?!
이번 문제 중 제일 재밌었던 문제는 2번문제이다. 텍스트파일의 숫자가 무작위로 있어 순서를 통해 찾는게 아닌 총합을 구해 찾아야된다. 나는 밑에 힌트가 있어 생각도 안하고 바로 풀었지만 만약 힌트가 없었으면 얼마나 헤매였을지 궁금하다..
다음주는 어렵다는 사람들의 의견때문에 난이도를 조절해서 나온다고한다. 다음주는 팀원들이 다 풀고 같이 코드리뷰를 해봤으면 한다.