스터디/C언어

챕터 3 데이터와 C

DDD Developer 2024. 8. 7. 15:42
728x90
반응형

리스트 3_1 platinum.c 프로그램만들기 

/*platinum.c ---- 플레티넘 가치로 계산한 몸무게*/
#include<stdio.h>

int main()
{
    double weight,value;

    printf("당신의 몸무게를 플레티넘 가치로 계산하면 얼마나 나갈까요?");

    printf("어디 한번 계산해 봅시다\n");

    printf("몸무게를 파운드 단위로 입력하시오: ");

    /*사용자로부터 입력을 받는다*/
    scanf("%lf",&weight); // f는 정수           //scanf 일때 double은 %lf
    /*플레티넘 가격이 온스당 1700$ 라고 가정한다*/
    /*14.5833은 상형 파운드 단위를 금형 온스 단위로 변환한다*/
    value = 1700 * weight * 14.5833;
    printf("당신의 몸무게를 플레티넘 가치로 계산하면 $%.2f입니다 \n",value);     
    // .2f 를 쓰면 소수점 2자리까지만 표현되는것
    printf("당신의 몸값은 그 정도 가치가 나갑니다. 플레티넘 가격이 떨어지면, \n ");
    printf("가치를 유지하기 위해 식사량을 늘려야합니다.\n");
    printf("%.1f",weight);      // prinf는 double일때는 %f
    // 왜???
    return 0;
}
double을 쓰게 되면 scanf를 쓸때 lf를 써야한다.

 

예전에는 float를 많이썻지만 요즘에는 더 큰 값을 저장 할 수있는 double을 쓴다고 한다.

왜냐하면 float라는 자료형은 정확성을 유효숫자 겨우 6개 정도밖에 보장하지 않는 매우 부정확한 자료형이기 때문에!

 

어떤 문제든 실수 자료형을 안 쓸 수 있다면 안 쓰는 것이 우선 이지만 꼭 써야만 한다면 long double, 하다못해 최소 double 이상은 쓰도록 습관을 들이는 것이 좋다.


리스트 3_2 print1.c 프로그램

/* print1.c -- printf()의 몇 가지 특성을 설명한다*/
#include<stdio.h>
int main()
{
    int ten = 10;
    int two = 2;

    printf("바르게 지정했을 때: ");
    printf("%d에서 %d를 빼면 %d\n",ten,2,ten - two);
    printf("틀리게 지정했을 때: ");
    printf("%d에서 %d를 빼면 %d\n",ten);    // 뒤의 두 전달인자를 뺴먹었을 때.

    //printf()함수에 제공하는 포멧 지정자의 개수와, 출력할 값의 개수가 일치하는지 항상 확인


    return 0;

}

 

함수에 제공하는 포멧 지정자의 개수와 출력할 값의 개수가 일치하는지 항상 확인!

 

왜냐하면 포멧 지정자와 출력할 값이 일치하지않으면 프로그램에서 현재 메모리에 우연히 들어있는 값(garbage value) 즉 쓰레기값이 출력되기 때문에 조심해야한다.

 


리스트 3_5 charcode.c 프로그램

/*charcode.c -- 문자에 대응하는 코드값을 표시한다*/
#include<stdio.h>
int main(void)
{
    char ch;

    printf("키보드를 영문 모드로 놓고,문자 하나를 입력하시오.\n");
    scanf("%c",&ch);       /*사용자가 문자를 입력한다.*/
    // %c는 문자를 출력할때 쓰는 코드
    // scanf에 출력되는 값은 항상 &를 변수명앞에 두어야한다.
    printf("문자 %c에 대응하는 코드값은 %d이다.\n",ch,ch);
    // 문자를 출력하는건 %c인데 %d를 쓰면 문자열의 아스키 코드값이 나온다.
    return 0;

}
문자 / 문자열 출력

%c는 문자를 출력할때 쓰는 코드
scanf에 출력되는 값은 &를 변수명앞에 두어야한다.


리스트 3_8 typesize.c 프로그램

/* typesize.c -- 데이터형들의 크기를 출력한다.*/
#include<stdio.h>
int main(void)
{
    /*c99는 크기를 위해 %zd 포멧지정자를 제공한다.*/
    printf("int형의 크기: %zd바이트\n",sizeof(int));
    printf("char형의 크기: %zd바이트\n",sizeof(char));
    printf("long형의 크기: %zd바이트\n",sizeof(long));
    printf("long long형의 크기: %zd바이트\n",sizeof(long long));
    printf("double형의 크기: %zd바이트\n",sizeof(double));
    printf("long double형의 크기: %zd바이트\n",sizeof(long double));
    
    return 0;
}
sizeof를 출력할려면 %zd를 써야한다

sizeof는 바이트 단위로 크기를 알려주는 코드다.

 


리스트 3_9 badcount.c 프로그램

/*badcount.c -- 잘못된 전달인자 사용의 예*/
#include<stdio.h>
int main()
{
    int n = 4;
    int m = 5;
    float f = 7.0f;
    float g = 8.0f;

    printf("%d\n",n,m);         /*전달인자가 너무 많다*/
    printf("%d %d %d\n",n);     /*전달인자가 너무 적다*/
    printf("%d %d\n",f,g);      /*데이터형이 일치 하지 않는다*/

    return 0;
}
잘못된 전달인자 사용

float형 값을 %d로 사용하여 출력할 때, 그 float형 값이 가장 가까운 int형 값으로 변환되지 않는다는 것!

전달인자 개수가 부족하거나 포맷 지정자와 데이터형이 일치하지 않을 때 다른 결과가 나온다. 전에 했던 (garbage value)값


 

728x90
반응형