스터디/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
반응형