프로그래밍 준비
1. ASCII 코드를 위해 사용하는 비트수, 표현가능한 문자의 수는?
A. 7비트이며, 128개의 문자를 표현할 수 있다.
2. 8(16, 32)비트로 표현한 정수의 범위는?
A. 8비트: -128~127 , 16비트: -32768~32767, 32비트: -2147483648 ~ 2147483647
3. 32(64)비트로 실수를 표현했을 때 유효자리수는? 유효자리수의 의미는?
A. float(32bit)에선 소수점 자리 6자리 이하에서만 유효하며, double(64bit)에선 소수점 자리 15자리 이하에서만 유효하다. 그 이상 넘어가면 정확 하지 않은 값이 나온다. (반올림 되서 값이 나옴)
4. 상수의 정의는?
A. 수식에서 변하지 않는 값을 뜻한다. 이것은 변하는 값 변수와 반대이다. (constant)
5. 문자상수 표현 방법은? 정수형상수에서 8진수와 16진수 표현방법은? 실수형상수 표현방법은? ( [프로그램 2-2], [프로그램 2-3], [프로그램 2-4] 실행해보기. )
A. 단일 인용부호 (’‘)을 사용함, 8진수 앞에 0을 붙이고 16진수 앞에는 0x를 붙인다.
6. 변수가 필요한 이유는?
A. 자료를 저장하기 위한 주 기억장치의 기억공간으로, 변수를 위한 기억공간이 할당 되어 자료를 저장 할 수 있게 한다.
(변수는 코드의 재활용성과 가독성을 높여주고, 중복을 제거하여 유지보수가 가능하다는 점을 보았을 때 필요 한 존재이다.)
7. 변수는 사용되기전에 반드시 선언되어야 한다. 변수의 작명규칙을 간단히 설명해보자. 그리고 자료형(문자, 정수, 실수)을 위한 변수를 한개씩 선언해보자.( [프로그램 2-5], [프로그램 2-6], [프로그램 2-7] 실행해보자.)
1. 영어 소문자와 대문자 숫자 그리고 _ (밑줄 문자)만 사용해 만든다. |
2. 영어 대 소문자를 구별한다. |
3. 첫 글자는 숫자로 시작 할 수 없다. |
4. 변수명 내에 공백이 포함 될 수 없다. |
5. 예약어를 사용 할 수없다. |
6. 변수 길이에는 제한이 없으나 가능하면 31자 이하로 짓는다. |
8. [프로그램 2-8]을 수행하여 변수선언 방법을 살펴보자.
- 선언된 모든 변수를 정수형으로 변경하여 C프로그램을 편집한 후 결과를 비교해보자.
- 15번줄과 16번줄에서 %lf 를 %d 로 변경한다.
A. lf는 long float로 실수(double) 자료형이고, d는 정수(int) 자료형이다.
연습문제 풀이하기
문자 자료를 처리(변수선언, 자료저장, 자료입력, 자료출력)하는 프로그램을 작성하였다.
아래 프로그램에 대해 물음에 답해보시오.
#include <stdio.h>
void main(void){
char data1, data2; //문자형 변수 data1, data2를 선언.
data1 = getchar(); //문자를 입력(getchar()함수사용)하여 변수data1에 저장
data2 = c; //문자형 변수 data2에 문자 ‘c'를 저장
printf("%c%c", data1,data2); //변수 data1과 data2를 차례대로, 빈칸 구분 없이 출력
}
1. 첫줄 #include <stdio.h>가 필요한 이유를 서술하시오.(서술)
A. stdio.h 파일을 포함 시켜라는 뜻으로, standard input output header file을 의미한다.
보통 기본 값으로 입력은 키보드, 출력은 모니터로 하라는 뜻으로 사용된다. 표준 입출력 함수인 put, printf 등등을 사용 하기 위해 쓰이기도 한다.
2. 프로그램의 두 번째 줄 int main(void)에서 사용된 int와 void가 각각 의미하는 것은 무엇인지 간단히 서술하시오?
A. void main이라는 것은 문법 상 어긋 난다. 표준 문법으로는 int main을 사용 해야 하며, int main (void)에서 int는 main 함수의 값이 int라는 뜻이며, void는 비어있다는 뜻으로 반환(return) 할 내용이 없다는 것을 뜻한다.
3. 2번 줄에서 getchar()을 _getch()함수로 바꾸려한다. 어떤 오류(경고)가 발생할지 예측해보고, 오류(경고) 발생 이유와 해결방법을 서술하시오.
- getch()함수의 사용법과 자료 입력방법을 조사할 것.
A. getch() 함수는 현재 비표준 함수로 <conio.h> 헤더 파일을 포함해야 사용 가능한 함수입니다. 따라서 컴파일러 내에서 무슨 함수인지 확인 할 수 없어 오류를 출력 할 것이다.
4. 3번 줄에서 어떤 오류(경고)가 발생할지를 예측해보고, 이유를 설명해보시오.
data2 = c;
A. c는 예약어도 아니며, 변수로 지정도 되어 있지 않기 때문에 컴파일러에서 알 수 없는 문자로 오류를 출력 할 것이다.
5. 4번째 줄에서 %c의 역할을 무엇인가? 두 개의 %c를 %d로 모두 변경하여 실행하면 어떤 값이 출력되겠는가?(ASCII 코드, 문자자료의 저장형태)
- 서식문자의 종류를 조사해볼 것
A. %c는 하나의 문자만 출력하는 char이기 때문에, %d로 바꿀 경우 아스키 코드 값의 숫자가 출력 될 것이다. 예로 'aa'라고 입력 했을 때 %c로 받아 오면 a라고 출력 되고, %d로 받아오면 970이 나올 것이다. (97과 0)
6. 4번째 줄의 출력 문을 printf("%d", data1+data2); 로 변경하여 실행하면 어떤 결과가 출력되겠는가?
A. 만약 윗 문장들을 바꾸지 않고 data1+data2라면 그냥 data1의 값만 출력 될 것이다. 왜냐하면 data2는 선언 되지 않은 c와 같은 값이니깐, 하지만 data2또한 getchar() 변수를 사용 한다면, 예로 'aa'를 입력 하면 194가 출력 될 것이다. (97+97)
7. 위 프로그램에서 아무것도 변경시키지 말고 단지 첫줄의 변수 선언문에서 char을 int로 변경(int data1, data2;)하면 프로그램 실행결과는 어떻게 되겠는가? 예측되는 결과와 그 이유를 간단히 서술하시오.
A. int 값으로 받아 오더라도 똑같이 아스키 코드 값으로 받아 오기 때문에, 결과는 바뀌지 않을 것이다.
응용연습
1. ‘나이를 저장할 변수’를 선언(정수형변수, 변수명은? )하고, 해당 변수를 20으로 초기화한 후 이를 이용하여 “내 나이는 20살입니다.”라는 메시지를 출력하는 C프로그램을 작성해보자.
#include <stdio.h> int main(void){ int age = 20; //20으로 age변수를 초기화 시킴 printf("내 나이는 %d살 입니다.", age); }
- 나이를 키보드에서 입력한 후 나이를 출력하는 프로그램으로 변경해보자.
#include <stdio.h> int main(void){ int age; //age 변수 선언 scanf("%d", &age); //입력한 값을 읽어 오는 scanf() 함수 printf("내 나이는 %d살 입니다.", age); }
2. 정수형 자료를 저장할 변수(정수형변수) 두 개를 선언하고, 각각 10과 20으로 초기화하자. 그리고 이를 이용하여 “‘10과 20의 합은 30입니다.”라는 메시지를 출력하는 C프로그램을 작성하시오.
- 1) printf("%d과 %d의 합은 %d입니다.\n", 변수1, 변수2, 변수1+변수2);
#include <stdio.h> int main(void){ int a = 10, b = 20; //a, b 변수 선언 printf("%d와 %d의 합은 %d입니다.", a, b, a+b); }
- 두 개의 정수형 자료를 키보드에서 입력하도록 수정한 후 아래와 같이 출력하도록 수정함.
#include <stdio.h> int main(void){ int a, b;//a, b 변수 선언 scanf("%d %d", &a, &b); //입력한 값을 읽어 오는 scanf() 함수 printf("%d와 %d의 합은 %d입니다.", a, b, a+b); }
3. 아래 문장에 주어질 경우 어떤 변수를 만들지 설명해보시오.
1) 나는 자동차를 가지고 있습니다.
A. bool (true/false)
2) 나는 자동차를 2대 가지고 있습니다.
A. int(2대)
3) 나는 KIA 카렌스와 현대의 그랜져를 가지고 있습니다.
A. %s (문자열)
4) 우리집 가족은 5명입니다.
A. int(5명)
5) 우리 가족은 부모님과 형, 그리고 여동생이 있습니다.
A. %s(문자열)
'대학교 수업 > C 프로그래밍' 카테고리의 다른 글
[C프로그래밍 실습과제 04/5장] 정답 풀이 (0) | 2021.10.01 |
---|---|
[C프로그래밍 실습과제 03/4장] 정답 풀이 (0) | 2021.09.24 |
[C프로그래밍 실습과제 02/3장] 정답 풀이 (0) | 2021.09.17 |