본문 바로가기

프로그래밍/C언어

쉽게 풀어쓴 C언어 Express 5장 Programming

1.사용자로부터 2개의 정수를 입력받아서 첫 번째 정수를 두 번째 정수로 나누었을 때 얻게 되는 몫과 나머지를 출력하는 프로그램을 작성하라.


#include <stdio.h>


void main()
{
     int num1, num2, div, rem;

    

     printf("정수2개를 입력해주세요:");
     scanf("%d %d", &num1, &num2);   //사용자에게 값을 입력받는다.

    

     div = num1 / num2;   //몫을 구하는 공식이다.(나누기는/)
     rem = num1 % num2;   //나머지를 구하는 공식이다.(나머지는%)

    

     printf("몫:%d 나머지:%d\n", div, rem);   //결과를 출력한다.
}

 


 

2.2개의 double형의 실수를 읽어서 합, , , 몫을 구하는 프로그램을 작성하라.


#include <stdio.h>


void main()
{
     double num1,num2,hap,cha,mul,div;

    

     printf("실수2개를 입력해주세요:");
     scanf("%lf %lf", &num1, &num2);   //사용자에게 값을 입력받는다.

    

     hap = num1 + num2;     //덧셈의 값을 구하는 공식이다.
     cha = num1 - num2;     //뺄셈의 값을 구하는 공식이다.
     mul = num1 * num2;     //곱셈의 값을 구하는 공식이다.
     div = num1 / num2;     //나눗셈의 값을 구하는 공식이다.

    

     printf("덧셈:%f 뺄셈:%f 곱셈:%f 나눗셈:%f\n",hap,cha,mul,div);  //결과를 출력한다.
}

 


 

3.3개의 정수 값을 입력받아서, 3개의 정수 값 중에서 최대값을 출력하는 프로그램을 작성하라.


#include <stdio.h>


void main()
{
     int num1,num2,num3,a,b,c;

    

     printf("정수3개를 입력해주세요:");
     scanf("%d %d %d", &num1, &num2, &num3);   //사용자에게 값을 입력받는다.

    

     a=(num1>num2)?num1:num2;   //num1과 num2를 비교 참이면 num1 거짓이면num2
  

     b=(num2>num3)?num2:num3;   //num2와 num3를 비교 참이면 num2 거짓이면num3
     c=(a>b)?a:b;   //a와 b를 비교 참이면a 거짓이면b

    

     printf("최대값:%d\n",c);   //결과를 출력한다.
}

 

 

 

4.cm로 표현된 키를 입력받아 피트와 인치로 변환하는 프로그램을 작성하라. , 1피트는 12인치이고 1인치는 2.54cm이다.


#include <stdio.h>


void main()
{
     int cm,feet;
     double inch;

    

     printf("키를 입력해주세요:");
     scanf("%d",&cm);   //사용자에게 값을 입력받는다.

    

     inch=cm/2.54;   //1인치는 2.54cm이므로 입력받은 키에서 2.54를 나눈다.
     feet=inch/12;   //1피트는 inch에서 12를 나눈다.
     inch=inch-feet*12; //다시 inch는 inch에서 feet와 12를 곱한 값을 뺀다.

    

     printf("%dcm는 %d피트 %f인치입니다.\n",cm,feet,inch);   //결과를 출력한다.
}

 

 

5.100보다 작은 정수를 입력받아서 이것을 십의 자리, 일의 자리로 분리하여 출력하는 프로그램을 작성하라. 즉 사용자가 정수 23을 입력하면 2,3을 차례로 출력하면 된다.


​#include <stdio.h>


void main()
{
     int num1,div,rem;
 
     printf("100보다 작은 정수를 입력하시오:");
     scanf("%d",&num1); //100보다 작은 정수를 입력받는다.

 

     div=num1/10; //십의 자리는 num1에서 나누기10을 하면 나온다.
     rem=num1%10; //일의 자리는 num1에서 나머지연산자를 사용하면 나온다.

 

     printf("십의자리:%d\n",div); //10의 자리 출력
     printf("일의자리:%d\n",rem); //1의 자리 출력
}

 

 

 

6.int형의 정수를 비트 연산자를 사용하여서 2의 보수(2‘s complement)로 변환하는 프로그램을 작성하라. 2의 보수는 먼저 전체 비트를 반전시킨 후에 1을 더하면 된다.


#include <stdio.h>


void main()
{
     int input,result;
 
     printf("정수를 입력해주세요:");
     scanf("%d",&input);   //정수를 입력받는다.

 

     result=~input+1;   //result는 input에서 0은1로 1은0으로 바꾸고 +1을 한 값이다.

 

     printf("2의 보수:%d\n",result); //결과를 출력한다.
}

 

 

7.정수에 비트 연산자<<를 한번 적용하면 2를 곱한 값을 얻을 수 있다. 또 정수에 비트 연산자>>를 한번 적용하면 2로 나눈 값을 얻을 수 있다. 사용자로부터 정수 x, y를 입력받아서 x<<y의 값을 출력하는 프로그램을 작성하라.


#include <stdio.h>


void main()
{
     int user,num,result;
 
     printf("정수를 입력해주세요:");
     scanf("%d",&user);   //정수를 입력받는다.

 

     printf("2를 곱하고 싶은 횟수:");
     scanf("%d",&num);   //횟수를 입력받는다.

 

     result=user<<num;   /*result는 정수와 2를 몇 번 곱하고
                            싶은지 입력받아 계산한 결과*/

 printf("%d<<%d의 값:%d\n",user,num,result);   //결과를 출력한다.
}

 

 

 

8.구의 표면적과 체적을 구하는 프로그램을 작성하라. 구의 반지름은 실수로 입력된다. 아래의 공식을 사용하라. 파이값은 기호 상수를 사용하여 정의하라.


#include <stdio.h>
#define PI 3.14


void main()
{
     double r,A,V;
    
     printf("반지름을 입력해주세요:");
     scanf("%lf",&r); //반지름을 입력받는다.

 

     A=4.0*r*r*PI;  //표면적을 구하는 공식이다.
     V=(4.0/3.0)*r*r*r*PI; /*체적을 구하는 공식이다.
                             주의 4/3은 값이 다르게 나옴
                             정수이기 때문에 소수점 계산 안됨*/

     printf("표면적:%f 체적:%f\n",A,V); //결과를 출력한다.
}

 

 

 

9.삼각형 ABC와 삼각형ADE는 닮음꼴이므로 다음의 수식이 성립한다.

AC : AE = BC : DE

따라서 ACAE, BC를 안다면 DE를 계산할 수 있다. ACAE, BC를 입력하여서 DE를 구하는 프로그램을 작성하라. 입력되는 수치는 모두 실수로 한다.


#include <stdio.h>


void main()
{
     double AC,AE,BC,DE;

 

     printf("AC,AE,BC의 값을 입력하세요:");
     scanf("%lf %lf %lf",&AC,&AE,&BC); //각각의 길이를 입력받는다.

 

     DE=AE*BC/AC; /*DE를 구하는 공식
                                       피라미드 그림자 길이(AE) * 막대길이(BC)
                    피라미드 높이(DE)= ---------------------------------------
                                                막대 그림자 길이(BC)        */

     printf("DE의 값은 %f입니다.\n",DE);
}​

 

 

 

10.조건 연산자 ?만을 이용하여 2차원 공간의 X좌표와 Y좌표를 입력받아서 그 좌표가 속하는 사분면을 출력하는 프로그램을 작성하라. (X>0 && Y>0)? printf("1사분면“) : printf(" ");와 같은 문장을 사용하여 작성한다.


#include <stdio.h>


void main()
{
     int x,y;

 

     printf("x,y의 값을 입력하세요:");
     scanf("%d %d",&x,&y); //x,y를 입력받는다.

 

     (x>0&&y>0)?printf("1사분면\n"):printf("");   /*x가 0보다 크고                                                      

                                                    y가 0보다 크면 1사분면 출력*/
     (x<0&&y>0)?printf("2사분면\n"):printf("");   /*x가 0보다 작고 
                                                    y가 0보다 크면 2사분면 출력*/
     (x<0&&y<0)?printf("3사분면\n"):printf("");   /*x가 0보다 작고 
                                                    y가 0보다 작으면 3사분면출력*/
     (x>0&&y<0)?printf("4사분면\n"):printf("");   /*x가 0보다 크고 
                                                    y가 0보다 작으면 4사분면출력*/
}

 

 

11.알렉산드리아에서는 막대와 그림자가 이루는 각도가 7.2로 측정되었다. 또 시에네에서 알렉산드리아까지의 거리는 약 900km로 측정되었다. 이것을 이용하여서 지구의 반지름을 계산하여라.


#include <stdio.h>
#define PI 3.14


void main()
{
     double r;

 

     printf("호의 길이:900km\n");
     printf("중심각:7.2°\n");
     printf("원의 둘레(2πr) : 호의 길이 = 360° : 중심각\n");
     printf("반지름=r\n");
 
     r=900*360/(7.2*2*PI);

 

     printf("반지름=%f\n",r);
}

 

 

12. 결과로 생성되는 정수값은 16진수로 출력하도록 한다. 비트 이동 연산과 비트 OR연산을 사용하라.

#include <stdio.h>


void main()
{
     char ch;
     unsigned int num=0x00000000;

 

     printf("문자를 입력하세요:");
     scanf("%c", &ch);
     num=num|ch;
     getchar();    //2008에서는 fflush(stdin)

 

     printf("문자를 입력하세요:");
     scanf("%c", &ch);
     num = num<<8;
     num=num|ch;
     getchar();

 

     printf("문자를 입력하세요:");
     scanf("%c", &ch);
     num = num<<8;
     num=num|ch;
     getchar();

 

     printf("문자를 입력하세요:");
     scanf("%c", &ch);
     num = num<<8;
     num=num|ch;
     getchar();

 

     printf("결과값:%08x",num);
}