입출력 방식

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개의 댓글