입출력 방식

ChoRong0824·2022년 10월 8일
0

C

목록 보기
3/17

필자는 java, spring 만 공부해봤으며 자바만 우직하게 파는 무식? 한 놈이었습니다.
시험에 앞서, c언어를 한번도 해본 적이 없습니다,,
이에 위기감을 느껴 벼락치기로 끝내보려합니다,, 또한 처음 접하므로 기본부터 시작하려합니다.
기본이 약하신 분들은 미흡하나마 보시고 도움이 되시면 좋겠습니다.

프로그램 7-1, while 문을 사용한 1~10까지 합

#include <stdio.h>
int main(void)
{
    int a=1, sum=0;

    while(a<=10)
    {
        sum+=a;
        a++;
    }
    printf("1+2+...+10=%d\n", sum);
}

### 프로그램 7-2, 양의 정수가 입력되는 동안 그 수의 합을 계산
#include <stdio.h>
int main(void){

    int i, sum=0;
    while(i>0){
        sum+=i;
    }
    printf("양의 정수합 "+sum);
}
  • 이랬더니 틀렸단다.
    clang: error: linker command failed with exit code 1 (use -v to see invocation)

????????? 뭐야 이게,
라고 생각했지만 바로 바보같은 코드임을 깨우쳤습니다.
ㅋㅋㅋㅋ 입력을 안받으면 무한 반복되는데... 또한 i 값 초기화도 안했...
밤샘 했더니 머리가 안돌아가네요 ㅜ ㅎㅎ

#include <stdio.h>
int main(void){

    int i, sum=0;
    printf("입력 해줭");
    scanf("%d", &i);
    while(i>0){
        sum+=i;
        printf("숫자 입력:");
        scanf("%d", &i);
    }
    printf("sum= %d", sum);
    
}

c언어 연산자

  • 대입 연산자

=

  • 산술 연산자

+, -, *, /, &, ++, --

  • 관계 연산자

<, >, <=, >=, ==, !=

  •  논리 연산자

&&, ||, !
! : NOT(논리) 참이면 거짓, 거짓이면 참

  • 할당 연산자

+=, -=, *=, /=, %= 등...

  • 삼항 연산자

?

  • 비트 연산자

&, |, ~, ^, <<, >>

입/출력


8-1, 1차원 배열을 이용해서 저장한 성적의 출력

#include <stdio.h>
int main(void){

  int i, j, temp, a[5];
  for(i=0;i<5;i++){
    printf("입력 데이터 a[%d]", i);
    scanf("%d", &a[i]);
  }
  for(i=0; i<5;i++){
    for(j=0;i<5;j++){
        if(a[i]>a[j]){
            // 배열 a[i]가 크다면 temp 변수에 넣어주고 저장한 다음에 a[i] 변수는 빈 공간임으로,
            //  그 자리를 a[j]를 대입해주고, a[j]를 temp변수에 넣어주면서 오름차순 정렬 하는 것이다.
            temp=a[i];
            a[i]=a[j];
            a[j]=temp;
        }
    }
  }
  printf("\n\n 정렬(오름차순)후의 데이터\n\n");

  for(i=0;i<5;i++){
    printf("a[%d]=%3d", i, a[i]);
  }
}
  • 배열의 초기화는 중괄호 내에 각 배열 요소의 초기값을 콤마로 지정하여 사용한다. (자바와 동일한 부분은 앞으로 내용을 넣지 않을 예정입니다.)
    int test=7;
  • 일반 변수를 선언할 때, 초기값을 지정하는 것처럼 배열의 원소에도 초기값을 지정할 수 있다.(자바와 동일)
    데이터형 배열명[요소의 개수] = { 초기값1,초기값2,초기값3,...};
  • 배열의 크기 보다 초기값의 개수가 적으면 나머지 배열 원소는 0으로 초기화된다.

(자바는 배열의 크기가 다르면 에러남. (가바지 컬렉션 때문인가?? 에러 나는 이유를 모르겠다. 이 부분은 왜 그런지 체킹 해보자.)

  • 정말 바보같았다. 왜냐하면, 씨언어 컴파일러 같은 경우엔 덜 할당되면 return 0을 한다. 그러나 자바 같은 경우에는 그냥 그 공간이 남으면서 돌고 있는 것이다. 한마디로 메모리 낭비 중인것이다.
    => 결론 : 둘다 덜 할당되면 돌아가지만, 메모리 낭비중인 것이며, 범위를 넘어선다면 out of range인 것이다.
    (바보같게 이런 간단한 것조차 짧게나마 고민을 해봤다니...)

8-3 1차원 배열의 초기화 후, 성적의 합계와 평균 구하기

#include<stdio.h>

int test[6]= {70,50,60,60,0,100};

int main(void){

    int i, sum=0;
    double avg;
    for(i=0;i<6;i++){
        sum+=test[i];
    }
    avg= sum/6;
    printf("%.1f는 평균입니다.", avg);
}

(참고로, error 코드입니다.
자바에서 메인함수쓰고 상속받게해서 새로운 클래스로 작성하는 것이 익숙해서 저도 모르게 배열을 메인 함수 위로 빼버려서 에러가 난 것입니다.)
새로운 언어를 습득하면서 기본적인 것을 당연하게 놓치면서, 에러가 발생할 때마다 이렇게 다시 한번 상기시키는 것이 좋은 것 같습니다.


  • 다차원 배열 (2차,3차,...)

    필자는 2차 배열 까지만 사용하는 것을 권장합니다.
    (3차 까지도 괜찮지만, 복잡해짐)


profile
컴퓨터공학과에 재학중이며, 백엔드를 지향하고 있습니다. 많이 부족하지만 열심히 노력해서 실력을 갈고 닦겠습니다. 부족하고 틀린 부분이 있을 수도 있지만 이쁘게 봐주시면 감사하겠습니다. 틀린 부분은 댓글 남겨주시면 제가 따로 학습 및 자료를 찾아봐서 제 것으로 만들도록 하겠습니다. 귀중한 시간 방문해주셔서 감사합니다.

0개의 댓글