반응형

사용자로부터 입력받은 정수를 비트 이동시키는 프로그램을 작성하여 보자. 먼저 정수 변수의 값을 입력받은 후에 이동시킬 방향, 이동할 거리를 사용자로부터 입력받는다. 비트 이동 전후에 정수의 값을 비트로 출력하도록 한다. 앞 문제에서 작성한 display_bit() 함수를 사용한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
#define GET_BIT(n,pos) ((n)>>(pos)&0x01)
void display_bit(int value);
int main(void)
{
    int val, move, dist, nval;
    val=0;move=0;dist=0;nval=0;
    while(1)
    {
    printf("정수값을 입력하세요(종료 9999): ");
    scanf("%d"&val);
    if(val==9999)
        break;
    printf("왼쪽 이동은 0, 오른쪽 이동은 1을 입력하세요: ");
    scanf("%d"&move);
    printf("이동시킬 거리: ");
    scanf("%d"&dist);
    printf("이동 전: ");
    display_bit(val);
    if(move==0)
    {
        nval=(val<<dist);
        printf("이동 후: ");
        display_bit(nval);
    }
    else if(move==1)
    {
        nval=(val>>dist);
        printf("이동 후: ");
        display_bit(nval);
    }}
    return 0;
}
void display_bit(int value)
{
    int i,count;
    count=0;
    for(i=31;i>=0;i--)
    {
        if(count==4)
            {printf(" ");
        count=0;}
        if(GET_BIT(value,i))
            printf("1");
        else
            printf("0");
        count++;
    }
    printf("\n");
}
cs




반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

암호화와 복호화  (0) 2017.01.16
대소문자 변경  (0) 2017.01.16
2진수 출력  (0) 2017.01.16
비트 매크로  (0) 2017.01.15
공백 세기  (0) 2017.01.14
반응형

정수값을 받아서 2진수 형태로 출력하는 함수 display_bit(int value) 를 작성하여 보자. 6번에서 정의한 함수 매크로 GET_BIT(n, pos)를 이용한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#define GET_BIT(n,pos) ((n)>>(pos)&0x01)
void display_bit(int value);
int main(void)
{
    int num=0;
    printf("정수값을 입력하세요: ");
    scanf("%d"&num);
    display_bit(num);
    return 0;
}
void display_bit(int value)
{
    int i,count;
    count=0;
    for(i=31;i>=0;i--)
    {
        if(count==4)
            {printf(" ");
        count=0;}
        if(GET_BIT(value,i))
            printf("1");
        else
            printf("0");
        count++;
    }
    printf("\n");
}
cs





반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

대소문자 변경  (0) 2017.01.16
정수 비트 이동  (0) 2017.01.16
비트 매크로  (0) 2017.01.15
공백 세기  (0) 2017.01.14
원기둥의 부피  (0) 2017.01.14
반응형

비트를 조작하는 다음의 매크로를 작성하고 동작을 확인하라.

(a) SET_BIT(n, pos) : 변수 n 안에 있는 pos번째 비트를 1로 설정한다. 

(b) CLR_BIT(n, pos) :  변수 n 안에 있는 pos번째 비트를 0으로 설정한다.

(c) GET_BIT(n, pos) :  변수 n 안에 있는 pos번째 비트를 0으로 반환한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#define SET_BIT(n,pos) ((n)|=(0x01<<(pos))) //변수 n pos번째 비트
#define CLR_BIT(n,pos) ((n)&=~(0x01<<(pos)))
#define GET_BIT(n,pos) ((n)>>(pos)&0x00//무조건 0으로 반환이니까
 
int main(void)
{
    int n,c,pos;
    n=0;c=0;pos=0;
    while(1){
    printf("정수를 입력하세요: ");
    scanf("%d"&n);
    printf("%016x\n", n);
    printf("1: pos번째 비트 1로 설정 2: pos번째 비트 0으로 설정\n 3: pos번째 비트 0으로 반환 4:종료\n");
    printf("번호를 입력하세요 : ");
    scanf("%d"&c);
    if(c==1)
    {
        printf("몇번째 비트? ");
        scanf("%d"&pos);
        SET_BIT(n,pos);
        printf("%016x\n", n);
    }
    else if(c==2)
    {
        printf("몇번째 비트? ");
        scanf("%d"&pos);
        CLR_BIT(n,pos);
        printf("%016x\n", n);
    }
    else if(c==3)
    {
        printf("몇번째 비트? ");
        scanf("%d"&pos);
        printf("%016x\n", GET_BIT(n,pos));
    }
    else if(c==4)
        break;
    }
    return 0;
}
cs




반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

정수 비트 이동  (0) 2017.01.16
2진수 출력  (0) 2017.01.16
공백 세기  (0) 2017.01.14
원기둥의 부피  (0) 2017.01.14
배열 원소 일괄 초기화  (0) 2017.01.14
반응형

c가 공백 문자(탭, 스페이스, 줄바꿈 문자)이면 참이 되는 매크로 IS_SPACE(c)를 정의하여서 사용자가 입력한 문자열 중에서 공백 문자의 개수를 출력하여 보자.


1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#define SIZE 50
#define IS_SPACE(c) {int i;int count=0;for(i=0;i<SIZE;i++){if((c[i]==' ')||(c[i]=='\t')||(c[i]=='\n')){count++;}}\
                    printf("공백 문자의 개수는 %d개입니다.\n", count);}
int main(void)
{
char c[SIZE];
printf("문자열을 입력하세요:");
gets(c);
IS_SPACE(c);
return 0;
}
cs




반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

2진수 출력  (0) 2017.01.16
비트 매크로  (0) 2017.01.15
원기둥의 부피  (0) 2017.01.14
배열 원소 일괄 초기화  (0) 2017.01.14
3개 정수 비교  (0) 2017.01.14
반응형

원기둥의 부피는 π(r^2)h 이다. 사용자로부터 반지름과 높이를 받아서 원기둥의 부피를 구하는 프로그램을 작성한다. 파이는 단순 매크로로 정의한다. 원기둥의 부피를 구하는 공식은 함수 매크로로 정의한다.


1
2
3
4
5
6
7
8
9
10
11
12
#define PI 3.14
#define VOLUME(r,h) ((r)*(r)*PI*(h))
#include <stdio.h>
int main(void)
{
int rad, hei;
rad=0;hei=0;
printf("반지름과 높이를 입력하세요: ");
scanf("%d %d"&rad, &hei);
printf("원기둥의 부피는 %f입니다.\n", VOLUME(rad,hei));
return 0;
}
cs




반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

비트 매크로  (0) 2017.01.15
공백 세기  (0) 2017.01.14
배열 원소 일괄 초기화  (0) 2017.01.14
3개 정수 비교  (0) 2017.01.14
소스에 대한 질문 답하기  (0) 2017.01.13
반응형

배열 원소의 값을 모두 지정된 값으로 초기화하는 ARRAY_INIT(array, size, value)를 작성하여 테스트하여 보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#define ARRAY_INIT(array,size,value) {int i;for(i=0;i<size;i++){*(array+i)=value;}}
#define SIZE 10
#include <stdio.h>
int main(void)
{
    int a[SIZE];
    int s=0;
    int i;
    printf("값을 입력하세요 : ");
    scanf("%d"&s);
    ARRAY_INIT(a,SIZE,s);
    for(i=0;i<SIZE;i++)
    {
        printf("%d ", a[i]);
    }
    printf("\n");
    return 0;
}
cs




반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

공백 세기  (0) 2017.01.14
원기둥의 부피  (0) 2017.01.14
3개 정수 비교  (0) 2017.01.14
소스에 대한 질문 답하기  (0) 2017.01.13
생명 게임(game of life - John H. Conway)  (0) 2017.01.13
반응형

3개의 정수 중에서 최소값을 구하는 매크로 GET_MIN(x,y,z)를 정의하고 이것을 이용하여서 사용자로부터 받은 3개의 정수 중에서 최소값을 계산하여서 출력하는 프로그램을 작성한다.


1
2
3
4
5
6
7
8
9
10
11
#define GET_MIN(x,y,z) ((x)<(z)?((x)<(y)?(x):(y)):((y)<(z)?(y):(z)))
#include <stdio.h>
int main(void)
{
    int i,j,k;
    i=0;j=0;k=0;
    printf("3개의 정수를 입력하세요: ");
    scanf("%d %d %d"&i, &j, &k);
    printf("최소값은 %d입니다.\n", GET_MIN(i,j,k));
    return 0;
}
cs



반응형
반응형

다음 소스에 대한 질문에 답하라.


1
2
3
4
5
6
7
8
9
10
11
double power(int x, int y)
{
    double result=1.0;
    int i;
    for(i=0;i<y;i++)
    {
        printf("result=%f\n", result);
        result*=x;
    }
    return result;
}
cs

(a)전처리기 지시자 #ifdef를 사용하여 DEBUG가 정의되어 있는 경우에만 화면 출력이 나오도록 하라.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#define DEBUG  
double power(int x, int y)
{
    double result=1.0;
    int i;
    for(i=0;i<y;i++)
    {
#ifdef DEBUG // #if defined(DEBUG)
        printf("result=%f\n", result);
#endif
        result*=x;
    }
    return result;
}
cs

(b)#if를 사용하여 DEBUG가 2일 경우에만 화면 출력이 나오도로 수정하라.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#define DEBUG 2
double power(int x, int y)
{
    double result=1.0;
    int i;
    for(i=0;i<y;i++)
    {
#if (DEBUG ==2)
        printf("result=%f\n", result);
#endif
        result*=x;
    }
    return result;
}
cs
(c)#if를 사용하여 DEBUG가 2이고 LEVEL이 3인 경우에만 화면 출력이 나오도록 수정하라.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define DEBUG 2
#define LEVEL 3
double power(int x, int y)
{
    double result=1.0;
    int i;
    for(i=0;i<y;i++)
    {
#if ((DEBUG ==2)&&(LEVEL==3))
        printf("result=%f\n", result);
#endif
        result*=x;
    }
    return result;
}
cs
(d)문장 1을 수정하여 소스파일에서 현재의 행 번호가 함께 출력되도록 하라.

1
2
3
4
5
6
7
8
9
10
11
double power(int x, int y)
{
    double result=1.0;
    int i;
    for(i=0;i<y;i++)
    {
        printf("result=%f line number=%d\n", result,__LINE__);  //1
        result*=x;
    }
    return result;
}
cs
(e)POWER_TYPE이라는 매크로를 정의하여 POWER_TYPE이 0이면 결과값을 int형으로 반환하도록 하고 POWER_TYPE이 1이면 결과값을 double형으로 
반환하도록 하라.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#define POWER_TYPE 1
 
double power(int x, int y)
{
    int i;
#if(POWER_TYPE==0)
    int result=1;
    for(i=0;i<y;i++)
    {
        printf("result=%d\n", result);
        result*=x;
    }
#elif(POWER_TYPE==1)
    double result=1.0;
    for(i=0;i<y;i++)
    {
        printf("result=%f\n", result);
        result*=x;
    }
#endif
    return result;
}
 
cs


(f)#if를 이용하여 문장 1을 주석처리하여 보라.


1
2
3
4
5
6
7
8
9
10
11
12
13
double power(int x, int y)
{
    double result=1.0;
    int i;
    for(i=0;i<y;i++)
    {
#if 0
        printf("result=%f\n", result);
#endif
        result*=x;
    }
    return result;
}
cs


반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

배열 원소 일괄 초기화  (0) 2017.01.14
3개 정수 비교  (0) 2017.01.14
생명 게임(game of life - John H. Conway)  (0) 2017.01.13
2차원 배열 복사  (0) 2017.01.06
디지털 영상  (0) 2017.01.06

+ Recent posts