연재 완료/C Lang 예제코드 모음

C언어 연습문제 풀이 CH2 (1~5번)

라이피 (Lypi) 2018. 4. 25. 00:37
반응형

문제 출처 : YES C (정보공학연구소/생능출판사)

 

1. 두 수(a,b)를 초기화 하여 즉 a=15, b=20을 서로 더한 결과가 10진수와 16진수로 나타나도록 프로그램을 작성하라.

#include <stdio.h> 
#include <conio.h>  

void main(void) { 	
int a = 15, b = 20; 	
printf("a가 15, b가 20일 때 a+b의 값 \n"); 	
printf("8진수로 : %o, 16진수로 : %x \n", a + b, a + b);  
}
 

2. 두 수 정수형(a)과 실수형(b)을 선언하여 사칙연산의 결과를 정수형과 실수형으로 출력할 수 있도록 프로그램을 작성하라.

#include <stdio.h> 
#include <conio.h>  
void main(void) { 	
int a; 	float b;  	
printf("정수 하나를 입력하세요 : ");  scanf_s("%d", &a); 
printf("실수 하나를 입력하세요 : ");  scanf_s("%f", &b);  	
//실수로 선언된 변수b를 정수형으로 변환하지 않으면 쓰레기값이 표시된다. 	
//실수를 정수로 형변환할 경우 소수점 이하는 버려진다. 	

printf("두 수에 대한 사칙연산 결과를 정수형으로 출력한 경우 \n"); 	
printf("%d+%f = %d \n", a, b, a + (int)b); 	
printf("%d-%f = %d \n", a, b, a - (int)b); 
printf("%d*%f = %d \n", a, b, a * (int)b); 	
//실수를 형변환한 결과가 0이 되면 런타임 에러가 뜨므로 주의.  	
//아직 예외처리까지는 하진 않았다. 	
printf("%d/%f = %d \n", a, b, a / (int)b);  	
printf("두 수에 대한 사칙연산 결과를 실수형으로 출력한 경우 \n"); 	
printf("%d+%f = %f \n", a, b, a + b); 	
printf("%d-%f = %f \n", a, b, a - b); 	
printf("%d*%f = %f \n", a, b, a * b); 	
printf("%d/%f = %f \n", a, b, a / b); 
}

 

3. 두 정수형(a, b)의 최대범위 값을 입력하여 더한 결과가 올바르게 출력할 수 있도록 프로그램을 작성하라. 

#include <stdio.h> 
#include <conio.h>  

void main(void) { 	
//문제의 핵심은 결과값을 unsingned로 저장해서 출력하는 것이므로 short int 형으로 선언했다. 	
//short int는 2byte로 -32768(-(2^15)) ~ 32767((2^15)-1)까지의 범위를 갖고,  	
//unsigned shot int는 0 ~ 65536(2^16)까지의 범위를 갖는다.  

//1. pirntf의 형식지정 문자열을 %u (부호없는 정수형)으로 해서 자동형변환을 시킨 경우. 
// (당연히 명시적형변환을 해도 된다.) 	
short a = 32767, b = 32767; 	
printf("%d + %d = %u \n", a, b, a + b);  	
//2. unsigned short 타입 변수를 하나 더 선언해서 결과를 그곳에 저장해서 출력한 경우.  	
unsigned short c = a + b; 	
printf("%d + %d = %d \n", a, b, c); 
}
 

4. 두 수 a=2, b=3.0일 때 a*3 + b*2를 출력하는 프로그램을 작성하라.

#include "stdafx.h"  
#include <stdio.h> 
#include <conio.h>  

void main(void) { 	
int a = 2; 	float b = 3.f;  	
//소수점 뒤가 길어지는게 싫으므로 형식지정문자를 %.1f로 조정했다. 	
//int형과 float형을 계산한 결과는 float형으로 저장되므로 딱히 명시적으로 형변환을 하지 않았다. 	

printf("%d*3 + %.1f*2 = %.1f \n", a, b, a * 3 + b * 2); 

}

 

5. 정수형과 실수형을 선언할 때 여러 부류의 선언방식이 있다. 각 범위를 출력할 수 있는 프로그램을 작성하라.

#include <stdio.h> 
#include <conio.h> 
#include <limits.h> 
#include <float.h>  

void main(void) { 	
//정수형 자료형의 데이터 범위를가 저장되어 있는 헤더파일은 <limits.h>  	
//singed 자료형의 데이터 범위 	

printf("부호있는 정수형 자료형의 범위 \n"); 	
printf("char의 범위 : %d ~ %d \n", CHAR_MIN, CHAR_MAX); 	
printf("int의 범위 : %d ~ %d \n", INT_MIN, INT_MAX); 	
printf("short의 범위 : %d ~ %d \n", SHRT_MIN, SHRT_MAX); 	
printf("long의 범위 : %d ~ %d \n", LONG_MIN, LONG_MAX);  	
//unsinged 자료형의 데이터 범위  	
//전처리기 사용법을 잘 몰라서 0부터 시작하는 것으로 적었다. 	
printf("\n"); 	printf("부호없는 정수형 자료형의 범위 \n"); 	
printf("unsigned char의 범위 : 0 ~ %u \n", UCHAR_MAX); 	
printf("int의 범위 : 0 ~ %u \n", UINT_MAX); 	
printf("short의 범위 : 0 ~ %u \n", USHRT_MAX); 	
printf("long의 범위 : 0 ~ %u \n", ULONG_MAX);   	
//실수형 자료형의 데이터 범위를 알려주는 헤더파일은 <float.h>  	
//singed 자료형의 데이터 범위 	
//고정소수점 방식(%f)로 표현하면 너무 길게 나오므로 부동소수점 방식(%e)로 표현했다. 	
printf("\n"); 	printf("float의 범위 : %e ~ %e \n", FLT_MIN, FLT_MAX ); 	
printf("double의 범위 : %e ~ %e \n", DBL_MIN, DBL_MAX); 	
printf("long double의 범위 : %e ~ %e \n", LDBL_MIN, LDBL_MAX); 

}
 

 

반응형