반응형

영문 문자열 안에 포함된 영단어의 개수를 계산하여 화면에 출력하는 프로그램을 작성하여 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#define SIZE 80
int main(void)
{
    char a[SIZE]="";
    int i, count;
    count=1;
    printf("문자열을 입력하세요: ");
    gets(a);
    for(i=0;a[i]!=NULL;i++)
        if(a[i]==' ')
            count++;
    printf("단어의 수는 %d입니다.\n", count);
    return 0;
}
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string.h>
#define SIZE 80
int main(void)
{
    char a[SIZE]="";
    char seps[]=" ";
    int count;
    char *token;
    count=0;
printf("문자열을 입력하세요: ");
gets(a);
token=strtok(a,seps);
while(token!=NULL)
{
    count++;
    token=strtok(NULL,seps);
}
printf("단어의 수는 %d입니다.\n", count);
return 0;
 
}
cs




반응형

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

회문(palindrome)  (0) 2016.08.20
문장 교정  (0) 2016.08.20
질문에 대한 답변  (0) 2016.08.20
대소문자 변환기  (0) 2016.08.20
문자열내 문자 빈도수  (0) 2016.08.20
반응형

사용자에게 질문을 제시하고 답변을 받아서 긍정이면 1을 반환하고 부정이면 0을 반환하는 함수 get_response(char *prompt)를 작성하고 테스트하라. 여기서 매개변수 prompt는 사용자에게 제시하는 질문이다. 긍정을 의미하는 문자열은 "yes", "ok"로 가정하라. 부정을 의미하는 문자열은 "no"로 가정하라. 대소문자는 구별하지 않도록 하라.

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
#include <stdio.h>
#include <string.h>
#define SIZE 30
int get_response(char *prompt);
int main(void)
{
    char a[SIZE]="";
    int x=0;
    while(1)
    {
printf("게임을 하시겠습니까?(나가기는 quit)");
x=get_response(a);
if(x==1)
printf("긍정적인 답변\n");
else if(x==0)
    printf("부정적인 답변\n");
else if(x==-1)
    break;
else
    printf("잘못된 입력입니다.\n");
    }
return 0;
}
int get_response(char *prompt)
{
gets(prompt);
if(strcmp("yes",prompt)==0||strcmp("YES",prompt)==0||strcmp("ok",prompt)==0||strcmp("OK",prompt)==0)
    {return 1;}
else if(strcmp("no",prompt)==0||strcmp("NO",prompt)==0)
    {return 0;}
else if(strcmp("quit",prompt)==0)
    return -1;
else
    return -2;
}
cs




반응형

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

문장 교정  (0) 2016.08.20
단어 수 계산  (0) 2016.08.20
대소문자 변환기  (0) 2016.08.20
문자열내 문자 빈도수  (0) 2016.08.20
문자열 속의 문자 개수 세기  (4) 2016.08.19
반응형

문자열을 사용자로부터 받아서 영어의 대문자는 소문자로, 소문자는 대문자로 변환하여 출력하는 프로그램을 작성하여 보자. getchar()를 이용하여 키보드로부터 문자를 하나 입력받는다. 입력받은 문자가 소문자이면 대문자로, 대문자라면 소문자로 변환하여 putchar()를 이용하여 출력한다. 만약 영어 알파벳의 범위를 벗어나는 문자가 들어오면 경고 메시지를 출력한다. 이 작업을 사용자가 '.'를 입력할 때까지 되풀이 하는 프로그램을 자것ㅇ한다.

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>
void transform(char a);
int main(void)
{
char a;
while(1){
printf("문자를 입력하세요: ");
a=getchar();
getchar();
if(a=='.')
    break;
transform(a);
}
return 0;
}
void transform(char a)
{
if((a>='a')&&(a<='z'))
    {a=a-'a'+'A';
putchar(a);
printf("\n");}
else if((a>='A')&&(a<='Z'))
    {a=a+'a'-'A';
putchar(a);
printf("\n");}
else
    printf("잘못된 입력입니다.\n");
}
cs




반응형

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

단어 수 계산  (0) 2016.08.20
질문에 대한 답변  (0) 2016.08.20
문자열내 문자 빈도수  (0) 2016.08.20
문자열 속의 문자 개수 세기  (4) 2016.08.19
공백 제거  (0) 2016.08.19
반응형

사용자로부터 받은 문자열에서 각각의 문자가 나타나는 빈도를 계산하여 출력하는 프로그램을 작성하라.

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
#include <stdio.h>
#define SIZE 80
void count(char *a, char *b, int *x);
int main(void)
{
char a[SIZE]="";
char b[]="abcdefghijklmnopqrstuvwxyz";
int x[sizeof(b)/sizeof(b[0])]={0};
int i;
printf("문자열을 입력하시오: ");
gets(a);
count(a,b,x);
for(i=0;b[i]!=NULL;i++)
    printf("%c: %d\n", b[i], x[i]);
return 0;
}
void count(char *a, char *b, int *x)
{
int i,j;
for(j=0;b[j]!=NULL;j++)
    {for(i=0;a[i]!=NULL;i++)
    {if(b[j]==a[i])
    x[j]++;
}}
}
cs






반응형

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

질문에 대한 답변  (0) 2016.08.20
대소문자 변환기  (0) 2016.08.20
문자열 속의 문자 개수 세기  (4) 2016.08.19
공백 제거  (0) 2016.08.19
아스키 코드  (0) 2016.08.19
반응형

문자열 안에 포함된 특정한 문자의 개수를 세는 함수 int str_chr(char *s, int c)를 작성하라. s는 문자열이고 c는 개수를 셀 문자이다.

나는 문제를 제대로 안 읽고 코딩을해서 str_chr 함수를 count 함수로 하였다.

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 SIZE 80
int count(char *c, char x);
int main(void)
{
    char a[SIZE]={0};
    int ch,w;
    printf("문자열을 입력하세요: ");
    gets(a);
    printf("개수를 셀 문자를 입력하세요: ");
    scanf("%c"&ch);
    w=count(a,ch);
    printf("%c의 개수 : %d\n", ch, w);
    return 0;
}
int count(char *c, char x)
{
int i, count;
count=0;
for(i=0;c[i]!=NULL;i++)
{
    if(c[i]==x)
        count++;
    else
        continue;
}
return count;
}
cs




반응형

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

대소문자 변환기  (0) 2016.08.20
문자열내 문자 빈도수  (0) 2016.08.20
공백 제거  (0) 2016.08.19
아스키 코드  (0) 2016.08.19
대문자 변환기  (0) 2016.08.19
반응형

문자열을 입력으로 받아서 문자열에 포함된 모든 공백 문자를 삭제하는 함수를 작성하고 테스트하라.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
# define SIZE 80
void delete_space(char *c);
int main(void)
{
    char a[SIZE]={0};
printf("공백 문자가 있는 문자열을 입력하시오: ");
gets(a);
delete_space(a);
return 0;
}
void delete_space(char *c)
{
 int i;
 for(i=0;c[i]!=NULL;i++)
 {
 if(c[i]!=' ')
     printf("%c",c[i]);
 else
     continue;
 }
 printf("\n");
}
cs





반응형

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

문자열내 문자 빈도수  (0) 2016.08.20
문자열 속의 문자 개수 세기  (4) 2016.08.19
아스키 코드  (0) 2016.08.19
대문자 변환기  (0) 2016.08.19
배열 합치기  (0) 2016.08.16
반응형

사용자로부터 문자를 입력받아서 그 문자의 아스키 코드값을 출력하는 프로그램을 작성하라.

1
2
3
4
5
6
7
8
9
#include <stdio.h>
int main(void)
{
char a;
printf("문자를 입력하시오: ");
a=getchar();
printf("아스키코드값=%d\n", a);
return 0;
}
cs



반응형

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

문자열 속의 문자 개수 세기  (4) 2016.08.19
공백 제거  (0) 2016.08.19
대문자 변환기  (0) 2016.08.19
배열 합치기  (0) 2016.08.16
최대공약수와 최소공배수  (0) 2016.08.15
반응형

문자열을 받아서 문자열에 포함된 문자를 대문자로 변환하는 함수 str_upper(char *s) 를 작성하고 테스트하라.

'a'아스키코드 : 97 'A' 아스키코드 : 65 

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
#include <stdio.h>
#define SIZE 50
int str_upper(char *s);
int main(void)
{
    char a[SIZE]={0};
    int x;
    x=str_upper(a);
    if(x==1)
    printf("변환된 문자열: %s\n", a);
    else
    return 0;
    return 0;
 
}
int str_upper(char *s)
{
int i;
int result=1;
printf("문자열을 입력하세요(소문자만): ");
    scanf("%s", s); //char *gets(char a);
for(i=0;s[i]!=NULL;i++)
{
if(s[i]>='a'&&s[i]<='z')
    s[i]=s[i]-'a'+'A';
else
    {printf("잘못된 입력입니다.\n");
result=0;
break;}
}
return result;
}
cs






반응형

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

공백 제거  (0) 2016.08.19
아스키 코드  (0) 2016.08.19
배열 합치기  (0) 2016.08.16
최대공약수와 최소공배수  (0) 2016.08.15
배열 탐색  (0) 2016.08.15
반응형

2개의 정렬된 정수 배열 A[]와 B[] 가 있다고 가정하자. 2개의 배열을 합쳐서 하나의 정렬된 배열 C[]로 만든느 함수를 작성하고 테스트한다. 다음과 같은 함수 원형을 가진다고 가정하라.

void merge(int *A, int *B, int *C, int size){...}

여기서 배열 A[], B[]는 똑같은 크기로 정의되어 있다고 가정한다. 배열 C[]에는 충분한 공간이 확보되어 있다고 가정하자. 합치는 알고리즘은 다음과 같다. 먼저 A[0]와B[0]를 비교한다. 만약 A[0]가 B[0]보다 작으면 A[0]를 C[0]에 복사한다. 다음에는 A[1]과 B[0]를 비교한다.이번에는 B[0]가 A[1]보다 작다면 B[0]를 C[1]에 저장한다.  똑같은 방식으로 남아있는 원소들을 비교하여 더 작은 원소를 C[]로 복사한다. 만약 A[]나 B[]중에서 어느 하나가 먼저 끝나게 되면 남아있는 원소들을 전부 C[]로 이동한다.


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
#include <stdio.h>
#define SIZE 4
void merge(int *A, int *B, int *C, int size);
int main(void)
{
    int A[SIZE]={2,5,7,8};
    int B[SIZE]={1,3,4,6};
    int C[SIZE*2]={0};
    int i;
    printf("배열A: ");
    for(i=0;i<SIZE;i++)
        printf("%d ", A[i]);
    printf("\n");
    printf("배열B: ");
    for(i=0;i<SIZE;i++)
        printf("%d ", B[i]);
    printf("\n");
    merge(A,B,C,SIZE*2);
    printf("배열C: ");
    for(i=0;i<SIZE*2;i++)
        printf("%d ", C[i]);
    printf("\n");
    return 0;
}
void merge(int *A, int *B, int *C, int size)
{
int i,j,k;
i=0;j=0;k=0;
    for(k=0;k<size;k++)
    {
        if(i>=size/2)
        {
            C[k]=B[j];        
        j++;}
        else if(j>=size/2)
        {
            C[k]=A[i];        
        i++;}
        else if(A[i]<B[j])
            {C[k]=A[i];
        i++;}
        else if(A[i]>B[j])
            {C[k]=B[j];
        j++;}
    }
 
}
cs




반응형

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

아스키 코드  (0) 2016.08.19
대문자 변환기  (0) 2016.08.19
최대공약수와 최소공배수  (0) 2016.08.15
배열 탐색  (0) 2016.08.15
월급의 총액  (0) 2016.08.15
반응형

2개의 정수를 입력받아서 최대 공약수와 최소 공배수를 반환하는 함수를 작성하고 테스트하라. 최대 공약수는 유클리드의 방법을 사용하여서 계산한다.


유클리드 호제법 https://ko.wikipedia.org/wiki/%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C_%ED%98%B8%EC%A0%9C%EB%B2%95

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
#include <stdio.h>
void get_lcm_gcd(int x, int y, int *p_lcm, int *p_gcd);
int main(void)
{
    int x, y, i, j;
    printf("x값을 입력하세요: ");
    scanf("%d"&x);
    printf("y값을 입력하세요: ");
    scanf("%d"&y);
    get_lcm_gcd(x,y,&i,&j);
    printf("최소공배수 : %d\n최대공약수 : %d\n", i, j);
    return 0;
}
void get_lcm_gcd(int x, int y, int *p_lcm, int *p_gcd)
{
    int r;
    int a,b;
    a=x; b=y;
    while(b!=0)
    {
    r=a%b;
    a=b;
    b=r;
    }
    *p_gcd=a;
    *p_lcm=(x*y)/(*p_gcd);
}
cs






반응형

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

대문자 변환기  (0) 2016.08.19
배열 합치기  (0) 2016.08.16
배열 탐색  (0) 2016.08.15
월급의 총액  (0) 2016.08.15
기본급과 보너스  (0) 2016.08.15
반응형

직원들의 월급이 젖아된 배열에서 월급이 200만원인 사람을 찾고 싶을 때가 있다. 주어진 값을 배열 A[]에서 탐색하여 배열 원소의 인덱스를 반환하는 함수를 작성하고 테스트하라.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#define SIZE 5
int search(int *A, int sizeint search_value);
int main(void)
{
    int A[SIZE]={500,400,300,200,100};
    int i;
    for(i=0;i<SIZE;i++)
        printf("사원%d월급 : %d\n", i+1, A[i]);
    printf("월급이 200만원이 사원 : %d\n",search(A,SIZE,200));
    return 0;
}
int search(int *A, int sizeint search_value)
{
    int i;
    for(i=0;i<size;i++)
        if(A[i]==search_value)
            return i+1;
}
 
cs




반응형

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

배열 합치기  (0) 2016.08.16
최대공약수와 최소공배수  (0) 2016.08.15
월급의 총액  (0) 2016.08.15
기본급과 보너스  (0) 2016.08.15
배열 복사  (0) 2016.08.15
반응형

직원들의 월급이 배열 A[]에 저장되어 있다고 가정하자. 이번 달에 회사에서 지급할 월급의 총액을 계산하고자 한다. 정수형 배열 원소들의 합을 구하여 반환하는 함수를 작성하고 테스트하라.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#define SIZE 5
int array_sum(int *A, int size);
int main(void)
{
    int A[SIZE]={100,200,300,400,500};
    int i;
    for(i=0;i<SIZE;i++)
    printf("사원%d월급: %d\n",i+1, A[i]);
    printf("월급총합계: %d\n",     array_sum(A,SIZE));
    return 0;
}
int array_sum(int *A, int size)
{
int i, sum;
sum=0;
for(i=0;i<SIZE;i++)
{
    sum+=A[i];
}
return sum;
}
cs


반응형

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

최대공약수와 최소공배수  (0) 2016.08.15
배열 탐색  (0) 2016.08.15
기본급과 보너스  (0) 2016.08.15
배열 복사  (0) 2016.08.15
학점과 점수  (0) 2016.08.15
반응형

직원들의 기본급이 배열 A[]에 저장되어 있다. 배열 B[]에는 직원들의 보너스가 저장되어 있다. 기본급과 보너스를 합하여 이번 달에 지급할 월급의 총액을 계산하고자 한다. A[]와 B[]를 더하여 배열 C[]에 저장하는 함수를 작성하고 테스트하라. 즉 모든 i에 대하여 C[i] = A[i] + B[i]가 된다.


나는 편의상 a[],b[].c[]로 하였고 보너스는 기본급의 10퍼센트로 하였다.


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
#include <stdio.h>
#define SIZE 5
void array_add(int *A, int *B, int *C, int size);
void bonus(int *A, int *B);
int main(void)
{
    int a[SIZE]={100,200,350,400,500};
    int b[SIZE]={0};
    int c[SIZE]={0};
    int i;
    bonus(a,b);
    array_add(a,b,c,SIZE);
    for(i=0;i<SIZE;i++)
        printf("사원%d기본급 : %d\n",i+1,a[i]);
    for(i=0;i<SIZE;i++)
        printf("사원%d보너스 : %d\n",i+1,b[i]);
    for(i=0;i<SIZE;i++)
        printf("사원%d총합계 : %d\n",i+1,c[i]);
    return 0;
}
void array_add(int *A, int *B, int *C, int size)
{
int i;
for(i=0;i<size;i++)
{
C[i]=A[i]+B[i];
}
}
void bonus(int *A, int *B)
{
int i;
for(i=0;i<SIZE;i++)
{
    B[i]=A[i]*(0.1);
}
}
cs




반응형

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

배열 탐색  (0) 2016.08.15
월급의 총액  (0) 2016.08.15
배열 복사  (0) 2016.08.15
학점과 점수  (0) 2016.08.15
배열 출력  (0) 2016.08.15
반응형

정수 배열A[]를 다른 정수 배열 B[]에 복사하는 함수를 작성하고 테스트하라.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#define SIZE 5
void array_copy(int *A, int *B, int size);
int main(void)
{
    int a[SIZE]={5,4,2,3,100};
    int b[SIZE]={0};
    int i;
    array_copy(a,b,SIZE);
    for(i=0;i<SIZE;i++)
        printf("%d ", b[i]);
    printf("\n");
    return 0;
}
void array_copy(int *A, int *B, int size)
{
int i;
for(i=0;i<size;i++)
    *(B+i)=*(A+i);  //B[i]=A[i];
}
cs




반응형

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

월급의 총액  (0) 2016.08.15
기본급과 보너스  (0) 2016.08.15
학점과 점수  (0) 2016.08.15
배열 출력  (0) 2016.08.15
배열과 포인터  (0) 2016.08.15
반응형

학생들의 평점은 4.3점이 만점이라고 하자. 배열 grades[]에 학생 10명의 학점이 저장되어 있다. 이것을 100점 만점으로 변환하여서 배열 scores[]에 저장하는 함수를 작성하고 테스트하라.

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
#include <stdio.h>
#define SIZE 10
#define OUT 4.3
void convert(double *grades, double *scores, int size);
int main(void)
{
    double grades[SIZE]={3.7,4.3,3.6,0.7,1.1,2.1,3.1,4.0,3.0,2.0};
    double scores[SIZE]={0};
    int i;
    convert(grades,scores,SIZE);
    for(i=0;i<SIZE;i++)
        printf("학생%d 의 평점: %lf\n", i+1, grades[i]);
    for(i=0;i<SIZE;i++)
        printf("학생%d 의 점수: %lf\n", i+1, scores[i]);
 
 
}
void convert(double *grades, double *scores, int size)
{
int i;
for(i=0;i<size;i++)
{
*(scores+i)=*(grades+i)*(100/OUT);
}
}
cs




반응형

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

기본급과 보너스  (0) 2016.08.15
배열 복사  (0) 2016.08.15
배열 출력  (0) 2016.08.15
배열과 포인터  (0) 2016.08.15
정수의 합과 차  (0) 2016.08.15
반응형

정수 배열의 원소들을 화면에 출력하는 함수를 작성하고 테스트하라. 출력 형식은 A[] = {1, 2, 3, 4, 5,}와 같은 형식이 되도록 하라.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
void array_print(int *A, int size);
int main(void)
{
    int a[]={1,2,3,4,5};
    array_print(a,sizeof(a)/sizeof(a[0]));
    printf("\n");
    return 0;
}
void array_print(int *A, int size)
{
int i;
printf("A[] = {");
for(i=0;i<size;i++)
    {printf("%d"*(A+i));
if(i<size-1)
    printf(", ");}
printf("}");
}
cs




반응형

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

배열 복사  (0) 2016.08.15
학점과 점수  (0) 2016.08.15
배열과 포인터  (0) 2016.08.15
정수의 합과 차  (0) 2016.08.15
바이트 순서 알아보기  (0) 2016.08.14
반응형

정수 배열을 받아서 원소들을 난수로 채우는 함수를 작성하고 테스트하라. 난수는 라이브러리 함수인 rand()를 사용하여 생성한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 100
void array_fill(int *A, int size);
int main(void)
{
    int a[SIZE]={0};
    int i;
    srand((unsigned)time(NULL));
    array_fill(a,SIZE);
    for(i=0;i<SIZE;i++)
        printf("%d "*(a+i));
    printf("\n");
    return 0;
}
void array_fill(int *A, int size)
{
    int i;
    for(i=0;i<size;i++)
        *(A+i)=rand()%100;
}
cs


반응형

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

학점과 점수  (0) 2016.08.15
배열 출력  (0) 2016.08.15
정수의 합과 차  (0) 2016.08.15
바이트 순서 알아보기  (0) 2016.08.14
에라스토테네스의 체  (0) 2016.08.14
반응형

2개의 정수의 합과 차를 동시에 반환하는 함수를 작성하고 테스트하라. 포인터 매개 변수를 사용한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
void get_sum_diff(int x, int y, int *p_sum, int *p_diff);
int main(void)
{
int x, y, sum, diff;
printf("숫자 x를 입력하세요: ");
scanf("%d"&x);
printf("숫자 y를 입력하세요: ");
scanf("%d"&y);
get_sum_diff(x,y,&sum,&diff);
printf("합: %d 차: %d\n",sum,diff);
return 0;
}
void get_sum_diff(int x, int y, int *p_sum, int *p_diff)
{
*p_sum=x+y;
*p_diff=x-y;
}
cs




반응형

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

배열 출력  (0) 2016.08.15
배열과 포인터  (0) 2016.08.15
바이트 순서 알아보기  (0) 2016.08.14
에라스토테네스의 체  (0) 2016.08.14
술에 취한 딱정벌레  (2) 2016.08.13
반응형

자기가 사용하는 CPU의 바이트 순서를 살펴보는 프로그램을 포인터를 이용하여 작성해보자. 바이트 순서(byte ordering, endian)는 컴퓨터의 메모리에 바이트를 배열하는 방법을 의미한다. 바이트 순서는 보통 큰 단위가 앞에 나온느 빅 엔디언(Big-endian)과 작은 단위가 앞에 나오는 리틀 엔디언(Little-endian)으로 나눌 수 있다. 아래의 프로그램에 주석을 추가하라.

빅 엔디언 : 0x12345678의 표현 : 12 34 56 78

리틀 엔디언 : 0x12345678의 표현 : 78 56 34 12

1
2
3
4
5
6
7
8
9
#include <stdio.h>
int main(void)
{
int x = 0x12345678;
unsigned char *xp=(unsigned char*)&x; //포인터 xp의 값은 x의 주소(char형이라서 배열 원소당 바이트 1(비트 8))
printf("바이트순서: %x %x %x %x\n", xp[0], xp[1], xp[2], xp[3]);
printf("바이트순서: %x %x %x %x\n"*xp, *(xp+1), *(xp+2), *(xp+3));
return 0;//출력 값을 보면 인텔 시피유는 리틀 엔디언 방식을 취한다는 것을 알 수 있다.
}
cs

0x : 정수의 16진수 표현
%x : 16진수 





반응형

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

배열과 포인터  (0) 2016.08.15
정수의 합과 차  (0) 2016.08.15
에라스토테네스의 체  (0) 2016.08.14
술에 취한 딱정벌레  (2) 2016.08.13
2진수 변환기  (0) 2016.08.12
반응형

소수를 구하는데 고대의 그리스 수학자 에라스토스테네스에 의하여 개발된 에라스토스테네스의 체(Sieve of Erastosthenes)라는 알고리즘이 있다. 이 알고리즘은 정해진 범위 안의 소수를 찾아주는 비교적 간단한 방법이다. 이 알고리즘은 정해진 범위만큼의 배열을 생성한다. 만약 sieve[i]의 값이 0이면 i는 소수라는 의미이고 sieve[i]가 1이면 소수가 아니다. 처음에는 모든 배열의 값이 0으로 초기화된다. 즉 처음에는 모든 정수가 소수라고 가정한다. 알고리즘은 가장 작은 소수인 i=2부터 시작한다. 상식적으로 2의 배수는 소수가 아닌 것이 확실하다. 정해진 범위 안에서 2의 배수를 모두 찾아서 sieve[] 값을 1로 만든다. 즉 2, 4, 6, 8, ... 등의 인덱스를 갖는 원소들은 모두 1로 설정된다. 다음에 i를 3으로 하나 증가시킨다. 다시 3의 배수(3, 6, 9, ...)를 찾아서 sieve[i]를 1로 만든다. i를 다시 하나 증가시키면 sieve[4]는 이미 1이므로 다음 i 값으로 넘어간다. sieve[i]가 0인 다음 i를 찾아서 i의 배수를 모두 1로 만든다. 정해진 범위에 대하여 이와 같은 절차를 완료한 후에도 0값을 가지는 원소는 소수가 된다. 이 알고리즘을 이용하여 2부터 100사이의 소수를 찾아보라.

https://ko.wikipedia.org/wiki/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98_%EC%B2%B4


SIZE 상수의 값을 변환시키면 더 큰 범위까지의 소수를 구할 수 있다.

문제에서의 sieve[]가 a[]이다. i는 나누는 수, j는 나눠지는 수, k는 소수 아닌 것들을 거를 때 곱해주는 수이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#define SIZE 100
int main(void)
{
    int a[SIZE+1]={0};
    int i,j,k;
    a[0]=1;a[1]=1;
        for(i=2;i<SIZE+1;i++)
            {if(a[i]==1)
                continue;
            for(j=2;j<SIZE+1;j++)
                {if(j%i==0)
                    {for(k=2;j*k<SIZE+1;k++)
                    a[j*k]=1;}}}
        for(i=0;i<SIZE+1;i++)
            if(a[i]==0)
                printf("%d ", i);
        printf("\n");
        return 0;
}
cs




반응형

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

정수의 합과 차  (0) 2016.08.15
바이트 순서 알아보기  (0) 2016.08.14
술에 취한 딱정벌레  (2) 2016.08.13
2진수 변환기  (0) 2016.08.12
2차원 행렬  (0) 2016.08.12

+ Recent posts