리스트 5.1 shoes1.c 프로그램
/*shoes1.c -- 사이즈 단위를 인치 단위로 변환한다.*/
#include<stdio.h>
#define ADJUST 7.31
int main()
{
const double SCALE=0.333; // 기호 상수의 다른 종류
double shoe,foot;
shoe = 9.0;
foot =SCALE * shoe + ADJUST;
printf("신발 사이즈(남자용) 발길이\n");
printf("%10.1f %15.2f인치\n",shoe,foot);
return 0;
}
5.1사이즈(미국에서 사용하는 신발의 크기 단위) 9인 남자의 신발 길이를 인치 단위로 변환 하기 위해 계산 하는 프로그램
리스트 5.2 shoes2.c 프로그램
/* shoes2.c -- 여러 개의 신발 사이즈를 인치 단위로 계산한다.*/
#include<stdio.h>
int main(void)
#define ADJUST 7.31
{
const double SCALE = 0.333; //기호 상수의 다른 종류 const
double shoe,foot;
printf("신발 사이즈(남자용) 발길이\n");
shoe = 3.0;
while (shoe < 18.5) /*while 루프의 시작*/
{
foot =SCALE *shoe +ADJUST;
printf("%10.1f %15.2f 인치\n",shoe,foot);
shoe = shoe +1.0;
} /*블록의 끝*/
printf("그 신발이 발에 맞는다면,그것을 신으세요.\n");
return 0;
}
while 루프를 이용해서 간단한 신발 사이즈 프로그램
<출력>
신발 사이즈(남자용) 발길이
3.0 8.31 인치
4.0 8.64 인치
5.0 8.97 인치
6.0 9.31 인치
7.0 9.64 인치
8.0 9.97 인치
9.0 10.31 인치
10.0 10.64 인치
11.0 10.97 인치
12.0 11.31 인치
13.0 11.64 인치
14.0 11.97 인치
15.0 12.30 인치
16.0 12.64 인치
17.0 12.97 인치
18.0 13.30 인치
리스트 5.3 golf.c 프로그램
/*golf.c -- 골프 토너먼트 점수판*/
#include<stdio.h>
int main(void)
{
int jane,tarzan,cheeta;
cheeta = tarzan = jane = 68;
printf(" 치타 타잔 제인\n");
printf("1라운드 점수 %4d %8d %8d\n",cheeta,tarzan,jane);
return 0;
}
대입연산자 =
리스트 5.4 squares.c 프로그램
/*squares.c -- 처음 20까지의 제곱표를 만든다*/
#include<stdio.h>
int main(void)
{
int num = 1;
while (num < 21)
{
printf("%4d %6d\n",num,num * num);
num = num + 1;
}
return 0;
}
1부터 20까지 정수와 그들의 제곱 값 출력.
리스트 5.6 divide.c 프로그램
/*divide.c -- 정수형 나눗셈과 부동소수점형 나눗셈*/
#include<stdio.h>
int main(void)
{
printf("정수형 나눗셈: 5/4 %d\n",5/4);
printf("정수형 나눗셈: 6/3 %d\n",6/3);
printf("정수형 나눗셈: 7/4 %d\n",7/4);
printf("부동소수점형 나눗셈: 7./4. %1.2f\n",7./4.);
printf("혼합된 나눗셈: 7./4 %1.2f\n",7./4);
return 0;
}
리스트 5.9 min_sec.c 프로그램
// min_sec.c -- 초 수로 주어지는 시간을 분고 초로 변환한다.
#include<stdio.h>
int main(void)
#define SEC_PER_MIN 60
{
int sec,min,left;
printf("초 수로 주어지는 시간을 분과 초로 변환합니다!\n");
printf("초 수를 입력하시오(<=0이면 끝):\n");
scanf("%d",&sec);
while (sec > 0)
{
min = sec / SEC_PER_MIN; // 나머지를 버린 분 수
left = sec % SEC_PER_MIN; // 나머지 초 수
printf("%d 초는 %d 분 %d 초입니다.\n",sec,min,left);
scanf("%d",&sec);
}
printf("끝\n");
return 0;
}
초를 주어지면 분과 초로 변환
while 루프를 제어하기 위해 사용 음수나 0을 입력하면 루프가 끝난다!
리스트 5.10 add_one.c 프로그램
/*add_one.c -- 증가 연산자: 전위 모드와 후위 모드*/
#include<stdio.h>
int main(void)
{
int ultra = 0,super = 0;
while (super < 5)
{
super++;
++ultra;
printf("super = %d,ultra = %d\n",super,ultra);
}
return 0;
}
<출력>
super = 1,ultra = 1
super = 2,ultra = 2
super = 3,ultra = 3
super = 4,ultra = 4
super = 5,ultra = 5
리스트 5.11 post_pre.c 프로그램
/*post_pre.c -- 후위 모드와 전위모드*/
#include<stdio.h>
int main(void)
{
int a = 1, b = 1;
int a_post, pre_b;
a_post = a++;
pre_b = ++b;
printf("a a_post b pre_b\n");
printf("%1d %5d %5d %5d\n",a,a_post,b,pre_b);
return 0;
}
전위모드 후위모드
리스트 5.13 addemup.c 프로그램
/* addemup.c -- 다섯 가지 문장*/
#include<stdio.h>
int main(void) // 처음 20까지 정수들의 합을 구한다
{
int count,sum; // 선언문
count = 0; // 대입문
sum = 0; // 대입문
while (count++ < 20) // while문
sum = sum + count; // 문장(while문) 한줄만 있을 땐 {}생략 가능
printf("합 = %d\n",sum);// 함수문
return 0; // return문
}
0 + 1, 0 + 2 , .......... 0 + 19, 0 + 20 까지 더한 값을 구하는 프로그램
간단한 반복문 문장으로 쉽게 구할 수 있다.
후위 증가 연산자
전위를 쓴다면 값을 먼저 더하기 때문에 마지막 은 21이 되기 때문에 안된다.
리스트 5.14 convert.c 프로그램
/*convert.c -- 자동 데이터형 반환*/
#include <stdio.h>
int main(void)
{
char ch;
int i;
float fl;
fl = i = ch = 'C'; // 라인 9
printf("ch = %c, i = %d, fl = %2.2f\n", ch, i, fl); // 라인 10
ch = ch + 1; // 라인 11
i = fl + 2 * ch; // 라인 12
fl = 2.0 * ch + i; // 라인 13
printf("ch = %c, i = %d, fl = %2.2f\n", ch, i, fl); // 라인 14
ch = 1107; // 라인 15
printf("이제 ch = %c\n", ch); // 라인 16
ch = 80.99; // 라인 17
printf("이제 ch = %c\n", ch); // 라인 18
return 0;
}
코드 분석
라인 9, 10
문자 C가 ch에 1바이트 ASCII 값으로 저장 -> 정수형 변수 i는 C의 정수형 변환값 받아서 '67'(ASCII 변환값)을
받고 fl은 67의 부동소수점 값 67.00을 받는다
라인 11,14
문자 변수 ch 값이 정수 67로 변환후 1에 더해진다
그 결과로 얻어지는 4바이트 정수 68이 1바이트로 잘려 ch에 저장.
%c 지정자로 사용해서 출력할 때 'D'에 해당하는 ASCII 코드로 해석
라인 12,14
ch의 값이 2와의 곱셈을 위해 4바이트 정수(68)로 변환
결과로 이어지는 정수(136)가 fl과의 덧셈을 위해 부동소수점 형으로 변환
그 결과 (203.00f)가 int형으로 변환되어 i에 저장
라인 13,14
ch값('D' 또는 68)이 2.0과의 곱셈을 위해 부동소수점 형으로 변환
i의 값(203)이 덧셈을 위해 부동소수점 형으로 변환
결과(339.00)가 fl에 저장
라인 15,16
여기서 ch에 큰 수를 설정하면 내림 변환이 일어나는 예시를 보여줌
버림이 일어나면 ch는 s문자에 해당하는 ASCII 코드값을 얻는다.
좀 더 정확히 1107 % 256(int 최대값) = 83이 'S'에 대한 코드 값
라인 17,18
내림 변환의 다른 경우의 예제
ch는 부동소수점 수와 같게 설정. 버림이 발생된 후에는 ch가 ASCII 코드로 마무리
리스트 5.15 pound.c 프로그램
/*pound.c -- 하나의 전달인자를 사용하는 함수를 정의*/
#include<stdio.h>
void pound(int n); //ANSI 프로토 타입
int main(void)
{
int time = 5;
char ch ='!'; //ASCII 코드값이 33이다
float f = 6.0f;
pound(time); // int형 전달인자
pound(ch); // pound((int)ch);와 같다
pound(f); // pound((int)f);와 같다
return 0;
}
void pound(int n) // ANSI 스타일의 함수 헤더가
{ // 하나의 int형 전달인자를
while (n -- > 0) // 사용한다고 알려준다.
printf("#");
printf("\n");
}
<함수 프로토타입 선언>
void pound(int n);
이 줄은 pound라는 함수를 미리 선언하는 부분입니다.
void는 이 함수가 반환값이 없다는 것을 의미하고, int n은 이 함수가 하나의 정수형 전달인자를 받는다는 것을 의미합니다.
<메인 함수 정의>
int main(void)
{
int time = 5;
char ch ='!'; //ASCII 코드값이 33이다
float f = 6.0f;
pound(time); // int형 전달인자
pound(ch); // pound((int)ch);와 같다
pound(f); // pound((int)f);와 같다
return 0;
}
- int main(void): 프로그램의 시작점인 메인 함수를 정의합니다. void는 이 함수가 전달인자를 받지 않음을 의미
- int time = 5;: 정수형 변수 time을 선언하고 5로 초기화
- char ch = '!';: 문자형 변수 ch를 선언하고 !로 초기화. !의 ASCII 코드값은 33.
- float f = 6.0f;: 실수형 변수 f를 선언하고 6.0으로 초기화.
- pound(time);: pound 함수를 호출하고 time 변수를 전달인자로 전달.
- pound(ch);: pound 함수를 호출하고 ch 변수를 전달인자로 전달한다. ch는 문자형이지만, pound 함수는 정수형 전달인자를 받기 때문에 암묵적으로 정수형으로 형변환. 즉, pound((int)ch);와 동일한 동작을 한다.
- pound(f);: pound 함수를 호출하고 f 변수를 전달인자로 전달한다. f는 실수형이지만, pound 함수는 정수형 전달인자를 받기 때문에 암묵적으로 정수형으로 형변환된다. 즉, pound((int)f);와 동일한 동작을 한다.
- return 0;: 프로그램이 정상적으로 종료되었음을 운영체제에 알린다.
<pound 함수 정의>
void pound(int n)
{
while (n-- > 0)
printf("#");
printf("\n");
}
- void pound(int n): pound 함수의 정의 부분. void는 이 함수가 반환값이 없음을 의미하고, int n은 이 함수가 하나의 정수형 전달인자를 받는다는 것을 의미.
- while (n-- > 0): n이 0보다 클 때까지 반복. 반복할 때마다 n을 1씩 감소시킨다.
- printf("#");: # 문자를 출력.
- printf("\n");: 줄바꿈 문자를 출력하여 새로운 줄로 이동.
<프로그램 동작 요약>
- time 변수에 5를 넣고 pound 함수 호출 -> ##### 출력
- ch 변수에 '!'를 넣고 pound 함수 호출 -> ch의 ASCII 코드값인 33이 전달되어 ################################# 출력
- f 변수에 6.0을 넣고 pound 함수 호출 -> f가 정수형으로 변환되어 6이 전달되고 ###### 출력
리스트 5.16 running.c 프로그램
// running.c -- 육상선수에게 유용한 프로그램
#include<stdio.h>
const int S_PER_M = 60;
const int S_PER_H = 3600;
const double M_PER_K = 0.62137;
int main(void)
{
double distk,distm;
double rate;
int min,sec;
int time;
double mtime;
int mmin,msec;
printf("이 프로그램은 미터단위계로 측정한 달리기 기록을\n");
printf("1마일 달린 시관과, 평균속도(mph)로 변환한다.\n");
printf("달린 거리를 킬로미터 수로 입력하시오.\n");
scanf("%lf",&distk); // double형을 위해서 %lf 사용
printf("달린 시간을 분 수와 초 수로 입력하시오.\n");
printf("먼저 분 수부터 입력하시오.\n");
scanf("%d",&min);
printf("이제 초 수를 입력하시오.\n");
scanf("%d",&sec);
// 달린 시간을 순전한 초 수로 변환한다.
time = S_PER_M * min + sec;
// 킬로미터 수를 마일 수로 변환한다.
distm = M_PER_K * distk;
// 초당 마일 수 * 시간당 초 = mph
rate = distm / time * S_PER_H;
// 시간/거리 = 마일당 시간
mtime = (double)time / distm;
mmin = (int) mtime / S_PER_M; // 완전한 분 수를 구한다.
msec = (int) mtime % S_PER_M; // 나머지 초 수를 구한다.
printf("당신은 %1.2f킬로미터(%1.2f마일)를 %d분, %d초에 달렸다.\n",distk,distm,min,sec);
printf("이 페이스는 1마일을 %d분,%d초에 달린 것에 해당한다.\n",mmin,msec);
printf("평균속도는 %1.2f mph였다.\n",rate);
return 0;
}
<출력>
이 프로그램은 미터단위계로 측정한 달리기 기록을
1마일 달린 시관과, 평균속도(mph)로 변환한다.
달린 거리를 킬로미터 수로 입력하시오.
10.0
달린 시간을 분 수와 초 수로 입력하시오.
먼저 분 수부터 입력하시오.
36
이제 초 수를 입력하시오.
23
당신은 10.00킬로미터(6.21마일)를 36분, 23초에 달렸다.
이 페이스는 1마일을 5분,51초에 달린 것에 해당한다.
평균속도는 10.25 mph였다.
'스터디 > C언어' 카테고리의 다른 글
챕터 9 함수 (0) | 2024.08.10 |
---|---|
챕터 7 C의 제어문: 분기와 점프 (0) | 2024.08.09 |
챕터 6 C의 제어문: 루프 (0) | 2024.08.09 |
챕터 4 문자열과 입출력 포맷 (0) | 2024.08.07 |
챕터 3 데이터와 C (0) | 2024.08.07 |