반응형

수학에서의 "random walk"라 불리우는 문제를 배열을 이용하여 프로그래밍하여 보자. 문제는 다음과 같다. 술에 취한 딱정벌레가 nxm크기의 타일로 구성된 방안에 있다. 딱정벌레는 임의의(랜덤) 위치를 선택하여 여기저기 걸어 다닌다. 현재의 위치에서 주위의 8개의 타일로 걸어가는 확률은 동일하다고 가정하자. 그러면 최종적인 문제는 "딱정벌레가 방안의 모든 타일을 한 번씩 지나가는데 걸리는 총 이동수는 얼마인가?"이다.


필자는 7X7 크기의 타일에서 파리가 돌아다닌다고 가정하였다. 이동한도는 700으로 하였다.

그리고 아마 더 좋은 프로그래밍 방법이 있을 것이라고 생각한다. 나는 전역변수를 사용하였는데 이는 별로 좋지 않은 방법 같다.



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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 7
int check(int a[][SIZE]);
int cant_go(int number);
void move(int number);
int i,j,count;
 
int main(void)
{
    int a[SIZE][SIZE]={{0},{0}};
    int x,y,number;
    srand((unsigned)time(NULL));
    i=3;j=3;count=0;
    while(1)
    {    a[i][j]=1;
        x=check(a);
        if(count>700)
        {printf("이동횟수초과\n");
        break;
        }
    if(x==1)
    {printf("딱정벌레가 움직인 횟수: %d\n", count);
    break;}
    number=rand()%8;
    y=cant_go(number);
    if(y==0)
        continue;
    move(number);
    }
    return 0;
}
int check(int a[][SIZE])
{
    int i,j;
    for(i=0;i<SIZE;i++)
        for(j=0;j<SIZE;j++)
            {if(a[i][j]==0)
            return 0;}
        return 1;
}
int cant_go(int number)
{
    if(i==0&&j==0)
    {if(number==1||number==0||number==7||number==6||number==5)
    return 0;}
    else if(i==0&&j==6)
    {if(number==7||number==0||number==1||number==2||number==3)
    return 0;}
    else if(i==6&&j==0)
    {if(number==7||number==6||number==5||number==4||number==3)
    return 0;}
    else if(i==6&&j==6)
    {if(number==1||number==2||number==3||number==4||number==5)
    return 0;}
    else if(i==0)
    {if(number==7||number==0||number==1)
    return 0;}
    else if(i==6)
    {if(number==5||number==4||number==3)
    return 0;}
    else if(j==0)
    {if(number==7||number==6||number==5)
    return 0;}
    else if(j==6)
    {if(number==1||number==2||number==3)
    return 0;}
    else
        return 1;
}
void move(int number)
{
    if(number==0)
    {i--;count++;}
    else if(number==1)
        {i--;j++;count++;}
    else if(number==2)
        {j++;count++;}
    else if(number==3)
        {i++;j++;count++;}
    else if(number==4)
        {i++;count++;}
    else if(number==5)
        {i++;j--;count++;}
    else if(number==6)
        {j--;count++;}
    else if(number==7)
        {i--;j--;count++;}
}
cs




반응형

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

바이트 순서 알아보기  (0) 2016.08.14
에라스토테네스의 체  (0) 2016.08.14
2진수 변환기  (0) 2016.08.12
2차원 행렬  (0) 2016.08.12
재고 관리 시스템  (0) 2016.08.11
반응형

10진수를 2진수로 변환하여 출력하는 프로그램을 작성하여 보자. 최대 32자리까지 변환이 가능하도록 하라. 변환된 자리수를 저장하는데 배열을 사용하라. 10진수를 2로 나누어서 생성된 나머지를 역순으로 나타내면 2진수로 표현할 수 있다.

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 32
void binary(int a[],int x);
int main(void)
{
    int a[SIZE]={0};
    int x;
    printf("정수를 입력하세요: ");
    scanf("%d"&x);
    binary(a,x);
    return 0;
}
void binary(int a[],int x)
{
    int i;
    for(i=0;x>0&&i<SIZE;i++)
    {
    a[i]=x%2;
    x=x/2;
    }
    for(i=SIZE-1;i>=0;i--)
        printf("%d", a[i]);
}
cs




반응형

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

에라스토테네스의 체  (0) 2016.08.14
술에 취한 딱정벌레  (2) 2016.08.13
2차원 행렬  (0) 2016.08.12
재고 관리 시스템  (0) 2016.08.11
벡터 합  (0) 2016.08.11
반응형

2차원 행렬(matrix)에 대한 다음과 같은 함수를 작성하고 테스트하여 보라. 행렬의 크기는 3X3으로 가정하라.

(a)scalar_mult(int a[][3], int scalar)



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>
# define SIZE 3
void scalar_mult(int a[][SIZE], int scalar);
int main(void)
{
    int a[SIZE][SIZE]={{1,2,3},{4,5,6},{7,8,9}};
    int i,j,x;
    for(i=0;i<SIZE;i++)
    {    for(j=0;j<SIZE;j++)
            printf("%d ", a[i][j]);
        printf("\n");}
    printf("곱할 정수를 입력하세요: ");
    scanf("%d"&x);
    scalar_mult(a,x);
return 0;
}
void scalar_mult(int a[][SIZE], int scalar)
{
int i,j;
for(i=0;i<SIZE;i++)
    for(j=0;j<SIZE;j++)
        a[i][j]=scalar*a[i][j];
for(i=0;i<SIZE;i++)
    {    for(j=0;j<SIZE;j++)
            printf("%3d ", a[i][j]);
        printf("\n");}
}
cs



(b)transpose((int a[][3], int b[][3])

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 3
void transpose(int a[][SIZE], int b[][SIZE]);
int main(void)
{
    int a[SIZE][SIZE]={{1,2,3},{4,5,6},{7,8,9}};
    int b[SIZE][SIZE]={{0},{0},{0}};
    int i,j;
    printf("전치전\n");
    for(i=0;i<SIZE;i++)
    {    for(j=0;j<SIZE;j++)
            printf("%d ", a[i][j]);
        printf("\n");}
    transpose(a,b);
    printf("전치후\n");
    for(i=0;i<SIZE;i++)
    {    for(j=0;j<SIZE;j++)
            printf("%d ", b[i][j]);
        printf("\n");}
return 0;
}
void transpose(int a[][SIZE], int b[][SIZE])
{
    int i,j;
    for(i=0;i<SIZE;i++)
        for(j=0;j<SIZE;j++)
            b[j][i]=a[i][j];
}
cs




반응형

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

술에 취한 딱정벌레  (2) 2016.08.13
2진수 변환기  (0) 2016.08.12
재고 관리 시스템  (0) 2016.08.11
벡터 합  (0) 2016.08.11
시험 점수 통계 처리  (0) 2016.08.11
반응형

아주 간단한 재고 관리 시스템을 만들어보자. 상품마다 상품 번호가 붙어 있고 상품 번호를 사용자가 입력하면 뭂무이 어디 있는지를 알려주는 번호를 출력한다. 상품 번호는 1부터 10까지로 하고 장소를 나타내는 번호는 1부터 5까지라고 가정한다. 1차원 배열을 사용하여 미리 상품 번호마다 장소를 저장해놓고 사용자로부터 상품 번호를 받아서 장소를 출력 한다.

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 X 5
#define Y 10
int main(void)
{
    int a[X]={1,2,3,4,5};
    int b[Y]={4,2,3,4,5,1,3,3,4,1};
    int x,y,i;
    while(1)
    {printf("상품 번호를 입력하세요(종료는 -1): ");
    scanf("%d"&x);
    if(x==-1)
        break;
    else
    for(i=0;i<X;i++)
    {
    if(a[i]==b[x-1])
        y=i+1;
    }
    printf("상품 번호 %d는 장소 %d에 있습니다.\n", x, y);}
        return 0;
}
 
cs




반응형

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

2진수 변환기  (0) 2016.08.12
2차원 행렬  (0) 2016.08.12
벡터 합  (0) 2016.08.11
시험 점수 통계 처리  (0) 2016.08.11
표준 편차  (0) 2016.08.11
반응형

벡터에 대한 연산을 배열을 이용하여서 작성하여 보자. 

(a)2개의 벡터를 더하는 연산은 다음과 같이 정의된다. 2개의 벡터를 더하는 함수인 vector_add()를 작성하라. 이 함수를 테스트하기 위한 코드도 작성하라.

벡터의 덧셈

대응되는 스칼라 값끼리 더해서 새로운 벡터를 만들 수 있다.

\mathbf{ A } + \mathbf{ B } = \left( a_{ 1 } + b_{ 1 },\ a_{ 2 } + b_{ 2 },\ a_{ 3 } + b_{ 3 } \right)

출처 : https://namu.wiki/w/%EB%B2%A1%ED%84%B0

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
#include <stdio.h>
#define SIZE 3
void vector_sum(int a[],int b[],int c[]);
int main(void)
{
    int vector1[SIZE]={};
    int vector2[SIZE]={};
    int vector3[SIZE]={};
    int i;
    for(i=0;i<SIZE;i++)
    {printf("벡터1의 각 성분값을 입력하세요: ");
    scanf("%d"&vector1[i]);}
        printf("벡터1의 값: (%d,%d,%d)\n", vector1[0],vector1[1],vector1[2]);
    for(i=0;i<SIZE;i++)
    {printf("벡터2의 각 성분값을 입력하세요: ");
    scanf("%d"&vector2[i]);}
        printf("벡터2의 값: (%d,%d,%d)\n", vector2[0],vector2[1],vector2[2]);
    vector_sum(vector1,vector2,vector3);
    printf("벡터3의 값: (%d,%d,%d)\n", vector3[0],vector3[1],vector3[2]);
    return 0;
}
void vector_sum(int a[],int b[],int c[])
{
int i;
for(i=0;i<SIZE;i++)
{
    c[i]=a[i]+b[i];
}
}
cs
벡터 각 성분을 출력할 때 저는 귀찮아서 그냥 1,2,3 각각 썼는데 for문을 이용(상수 SIZE 이용해서) 하는 것이 좀더 범용적인 방법이라고 생각됩니다.



(b)벡터의 내적(dot product)를 계산하는 함수인 vector_dot_prod()를 작성하라. 이 함수를 테스트하기 위한 코드도 작성하라. 벡터의 내적은 다음과 같이 정의된다.


두 벡터를 연산했을 때, 결과가 스칼라이다. 학부 수준에서의 내용은 내적 문서 참조. < , > 로 표기하기도 한다.

벡터의 내적(스칼라곱, 닷 프로덕트)

출처 : https://namu.wiki/w/%EB%B2%A1%ED%84%B0


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
#include <stdio.h>
#define SIZE 3
int vector_dot_product(int a[],int b[]);
int main(void)
{
    int vector1[SIZE]={};
    int vector2[SIZE]={};
    int vector3[SIZE]={};
    int i;
    for(i=0;i<SIZE;i++)
    {printf("벡터1의 각 성분값을 입력하세요: ");
    scanf("%d"&vector1[i]);}
        printf("벡터1의 값: (%d,%d,%d)\n", vector1[0],vector1[1],vector1[2]);
    for(i=0;i<SIZE;i++)
    {printf("벡터2의 각 성분값을 입력하세요: ");
    scanf("%d"&vector2[i]);}
        printf("벡터2의 값: (%d,%d,%d)\n", vector2[0],vector2[1],vector2[2]);
    printf("벡터1과 벡터2의 내적 값:%d\n", vector_dot_product(vector1,vector2));
    return 0;
}
int vector_dot_product(int a[],int b[])
{
int i;
    int sum=0;
for(i=0;i<SIZE;i++)
{
    sum+=a[i]*b[i];
}
return sum;
}
cs




반응형

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

2차원 행렬  (0) 2016.08.12
재고 관리 시스템  (0) 2016.08.11
시험 점수 통계 처리  (0) 2016.08.11
표준 편차  (0) 2016.08.11
제곱과 세제곱  (0) 2016.08.10
반응형

학생들의 시험 점수를 통계 처리하는 프로그램을 작성하여 보라. 한 학급은 최대 10명가지의 학생들로 이루어진다. 각 학생들은 3번의 시험을 치른다. 학생들의 성적은 난수를 생성하여서 얻는다. 각 시험에 대하여 최대점수, 최저점수를 계산하여 출력한다.

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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define STUDENTS 5
#define TESTS 3
void max(int array[][TESTS]);
void min(int array[][TESTS]);
int main(void)
{
    int a[STUDENTS][TESTS]={0};
    int i,j;
    srand((unsigned)time(NULL));
    for(i=0;i<STUDENTS;i++)
        for(j=0;j<TESTS;j++)
            a[i][j]=rand()%101;
    printf("학번    시험#1    시험#2    시험#3\n");
        for(i=0;i<STUDENTS;i++)
            {printf("%d    ",i+1);
        {for(j=0;j<TESTS;j++)
        printf("%3d    ", a[i][j]);
        printf("\n");}}
    max(a);
    min(a);
    return 0;
}
void max(int array[][TESTS])
{
    int max;
    int i,j;
    for(i=0;i<TESTS;i++)
        {max=array[0][i];
        for(j=0;j<STUDENTS;j++)
            {if(max<array[j][i])
            max=array[j][i];}
    printf("시험 #%d의 최대점수 : %d\n", i+1,max);
    }
}
void min(int array[][TESTS])
{
    int min;
    int i,j;
    for(i=0;i<TESTS;i++)
        {min=array[0][i];
        for(j=0;j<STUDENTS;j++)
            {if(min>array[j][i])
            min=array[j][i];}
    printf("시험 #%d의 최소점수 : %d\n", i+1,min);
    }
}
cs




반응형

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

재고 관리 시스템  (0) 2016.08.11
벡터 합  (0) 2016.08.11
표준 편차  (0) 2016.08.11
제곱과 세제곱  (0) 2016.08.10
행열 합계 출력  (0) 2016.08.10
반응형

사용자가 입력하는 10개의 실수 자료의 평균과 표준 편차를 계산하는 프로그램을 작성하라. 자료들은 난수를 생성하여서 작성된다.(정수로 생성하여서 실수로 변환하라). 평균은 n개의 실수가 주어져 있을 때, 다음과 같이 계산된다.

산술 평균은 가장 널리 쓰이며, 그냥 "평균"이라고도 한다.

출처 : https://ko.wikipedia.org/wiki/%ED%8F%89%EA%B7%A0
표준 편차는 분산의 양의 제곱근으로 분산은 다음과 같이 계산된다. 표준 편차는 자료가 평균값 주위에 어느 정도의 넓이로 분포하고 있는가를 나타내는 하나의 척도이다.
표준 편차 : 우선 n개의 자료값 x_1 , x_2, \cdot\cdot\cdot , x_n이 있다고 가정할 때 이 자료값의 평균(mean) m부터 구하면 m= \frac{x_1 + x_2 + \cdot \cdot \cdot + x_n } {n}로 표현된다. 다음에 각 자료값 x_i, i=1, 2, \cdot \cdot \cdot n에 대해 x_i -m을 평균 m에 대한 x_i의 편차(difference)라고 부른다. 이 편차들의 제곱의 평균인 

V= \frac{{(x_1 -m)}^{2} + {(x_2 -m)}^{2} + \cdot \cdot \cdot + {(x_n -m)}^{2} }{n} 를 x_1 , x_2, \cdot\cdot\cdot , x_n에 대한 분산(Varience)이라 부른다. 이 분산의 제곱근 \sigma= \sqrt{ \frac{{(x_1 -m)}^{2} + {(x_2 -m)}^{2} + \cdot \cdot \cdot + {(x_n -m)}^{2} }{n} } 을 표준편차라고 부른다.[4]
출처 : https://namu.wiki/w/%ED%91%9C%EC%A4%80%ED%8E%B8%EC%B0%A8


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>
#include <math.h>
#define SIZE 10
double average(int array[]);
double standard(int array[],double average);
int main(void)
{
    int a[SIZE]={0};
    int i;
    double x;
    for(i=0;i<SIZE;i++)
    {
    printf("정수를 입력하시오: ");
    scanf("%d"&a[i]);
    }
    x=average(a);
    printf("평균값은 %lf\n", x);
    printf("표준편차값은 %lf\n", standard(a,x));
    return 0;
}
double average(int array[])
{
double sum=0;
int i;
for(i=0;i<SIZE;i++)
{
sum+=(double)array[i];
}
return sum/SIZE;
}
double standard(int array[],double average)
{
double sum=0;
int i;
for(i=0;i<SIZE;i++)
{
    sum+=(((double)array[i]-average)*((double)array[i]-average));
}
    return sqrt((double)sum/SIZE);
}
 
cs




반응형

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

벡터 합  (0) 2016.08.11
시험 점수 통계 처리  (0) 2016.08.11
제곱과 세제곱  (0) 2016.08.10
행열 합계 출력  (0) 2016.08.10
가장 많이 생성된 수  (0) 2016.08.10
반응형

1부터 10까지의 정수에 대하여 제곱값과 세제곱값을 계산하여 출력하는 프로그램을 작성하라. 크기의 2차원 배열을 만들고 첫 번째 열에는 정수를, 두 번째 열에는 제곱값을, 세 번째 열에는 세제곱값을 저장하라. 추가로 사용자에게 세제곱값을 입력하도록 하고 이 세제곱값을 배열에서 찾아서 그것의 세제곱근을 출력하도록 하라.

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
51
52
53
54
55
56
57
#include <stdio.h>
# define X 10
# define Y 3
void triple(int array[][Y]);
void root(int array[][Y]);
int main(void)
{
    int a[X][Y]={{0},{0}};
    triple(a);
    printf("======================\n");
    root(a);
    return 0;
}
void triple(int array[][Y])
{
    int i, j;
    for(i=0;i<X;i++)
        {for(j=0;j<Y;j++)
            {if(j==0)
                array[i][j]=i+1;
            else if(j==1)
                array[i][j]=(i+1)*(i+1);
            else
                array[i][j]=(i+1)*(i+1)*(i+1);
        printf("%4d ", array[i][j]);
        }
    printf("\n");
        }
}
void root(int array[][Y])
{
    int x,y,i,check;
    while(1)
{
        check=0;
printf("정수를 입력하시오(종료는 -1): ");
scanf("%d"&x);
for(i=0;i<X;i++)
{
    if(x==-1)
        {check=1;
    break;}
else if(x==array[i][Y-1])
    {y=array[i][0];
    printf("%d의 세제곱근은 %d\n", x, y);
    check=2;
    break;}
}
if(check==1)
    break;
else if(check==2)
    continue;
else
    {printf("잘못된 입력입니다.\n");
getchar();}
}
}
cs




반응형

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

시험 점수 통계 처리  (0) 2016.08.11
표준 편차  (0) 2016.08.11
행열 합계 출력  (0) 2016.08.10
가장 많이 생성된 수  (0) 2016.08.10
배열 복사기  (0) 2016.08.10
반응형

다음과 같은 2차원 표를 난수로 채우고, 각 행의 합계, 각 열의 합계를 구하여 출력하는 프로그램을 작성하라.

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>
#include <stdlib.h>
#include <time.h>
#define ROW 3
#define COLUMN 5
void print(int array[][COLUMN]);
void row_sum(int array[][COLUMN]);
void column_sum(int array[][COLUMN]);
int main(void)
{
    int i, j;
    int a[ROW][COLUMN]={0};
    srand((unsigned)time(NULL));
    for(i=0;i<ROW;i++)
        for(j=0;j<COLUMN;j++)
            a[i][j]=rand()%100;
    print(a);
    printf("=====================\n");
    row_sum(a);
    printf("=====================\n");
    column_sum(a);
    printf("=====================\n");
    return 0;
}
void print(int array[][COLUMN])
{
    int i, j;
    for(i=0;i<ROW;i++)
        {for(j=0;j<COLUMN;j++)
        {printf("%2d ", array[i][j]);}
        printf("\n");}
}
void row_sum(int array[][COLUMN])
{
    int i, j, sum;
    for(i=0;i<ROW;i++)
        {    sum=0;
            for(j=0;j<COLUMN;j++)
        {sum+=array[i][j];}
        printf("%d행의 합은 %d입니다.\n", i+1, sum);}
}
void column_sum(int array[][COLUMN])
{
    int i, j, sum;
    for(i=0;i<COLUMN;i++)
        {    sum=0;
            for(j=0;j<ROW;j++)
        {sum+=array[j][i];}
        printf("%d열의 합은 %d입니다.\n", i+1, sum);}
}
cs




반응형

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

표준 편차  (0) 2016.08.11
제곱과 세제곱  (0) 2016.08.10
가장 많이 생성된 수  (0) 2016.08.10
배열 복사기  (0) 2016.08.10
배열 일치 판별기  (0) 2016.08.10
반응형

0부터 9까지의 난수를 100번 생성하여 가장 많이 생성된 수를 출력하는 프로그램을 작성하시오. 난수는 rand() 함수를 사용하여 생성하라.

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>
#include <stdlib.h>
#include <time.h>
#define SIZE 10
int main(void)
{
    int i, max;
    int a[SIZE]={0};
srand((unsigned)time(NULL));
    for(i=0;i<100;i++)
    {
    a[rand()%10]++;
    }
    for(i=0;i<SIZE;i++)
    {printf("a[%d]=%d\n",i,a[i]);}
    max=0;
    for(i=1;i<SIZE;i++)
    {    if(a[i]>a[max])
            max=i;
    }
    printf("가장 많이 생성된 수는 \"%d\"입니다.\n", max);
    return 0;
}
cs




반응형

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

제곱과 세제곱  (0) 2016.08.10
행열 합계 출력  (0) 2016.08.10
배열 복사기  (0) 2016.08.10
배열 일치 판별기  (0) 2016.08.10
최대값 최소값  (0) 2016.08.09
반응형

2개의 정수 배열 a, b를 받아서 배열 a의 원소를 배열b로 복사하는 함수 array_copy(int a[], int b[], int size)를 작성하고 테스트하라. 이 함수는 a[0]를 b[0]에, a[1]을 b[1]에, ..., a[size-1]을 b[size-1]에 대입한다. 이 함수의 반환값은 없다.

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
#include <stdio.h>
#define SIZE 5
void array_copy(int a[], int b[], int size);
void print(int a[], int b[]);
int main(void)
{
    int x[SIZE]={4,7,2,0,5};
    int y[SIZE]={0};
    printf("**복사전상태**\n");
    print(x,y);
    printf("**복사후상태**\n");
    array_copy(x,y,SIZE);
    print(x,y);
    return 0;
}
void array_copy(int a[], int b[], int size)
{
    int i;
    for(i=0;i<size;i++)
        b[i]=a[i];
}
void print(int a[], int b[])
{
 int i;
 for(i=0;i<SIZE;i++)
    {
    printf("x[%d]=%d y[%d]=%d\n",i,a[i],i,b[i]);
    }
}
cs




반응형

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

행열 합계 출력  (0) 2016.08.10
가장 많이 생성된 수  (0) 2016.08.10
배열 일치 판별기  (0) 2016.08.10
최대값 최소값  (0) 2016.08.09
월별 일수  (0) 2016.08.09
반응형

2개의 정수 배열 a, b를 받아서 대응되는 배열 원소가 같은지를 검사하는 함수 array_dqual(int a[], intb[], int size)를 작성하고 테스트하라. 이 함수는 a[0]과 b[0], a[1]과 b[1], ... , a[size-1]와 b[size-1]가 같은지를 검사한다. 만약 전체 원소가 같다면 1을 반환하고 그렇지 않으면 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
#include <stdio.h>
# define SIZE 5
int array_equal(int a[], int b[], int size);
 
int main(void)
{
    int check;
    int size=SIZE;
    int x[SIZE]={1,2,3,4,5};
    int y[SIZE]={1,2,3,4,4};
    check = array_equal(x,y,size);
    if(check==1)
        printf("배열 원소가 일치합니다.\n");
    else if(check==0)
        printf("배열 원소가 일치하지 않습니다.\n");
        return 0;
}
int array_equal(int a[], int b[], int size)
{
    int i;
    for(i=0;i<size;i++)
    {
    if(a[i]!=b[i])
        return 0;
    }
    return 1;
}
cs




반응형

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

가장 많이 생성된 수  (0) 2016.08.10
배열 복사기  (0) 2016.08.10
최대값 최소값  (0) 2016.08.09
월별 일수  (0) 2016.08.09
자리수 출력  (0) 2016.08.05
반응형

크기가 10인 1차원 배열에 난수를 저장한 후에, 최대값과 최소값을 출력하는 프로그램을 작성하라. 난수는 rand() 함수를 호출하여 생성하라.

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>
#include <stdlib.h>
#include <time.h>
int maxmin(int list[]);
#define SIZE 10
int main(void)
{
    srand((unsigned)time(NULL));
    int s[SIZE]={0};
    int i;
 
    for(i=0;i<SIZE;i++)
    {
        s[i]=rand();
    }
    maxmin(s);
    printf("최대값: %d 최소값: %d\n", s[9], s[0]);
    return 0;
}
int maxmin(int list[])
{
int i,j,temp,least;
for(i=0;i<SIZE-1;i++)
{
least=i;
for(j=i+1;j<SIZE;j++)
{
if(list[j]<list[least])
    least=j;
}
temp=list[i];
list[i]=list[least];
list[least]=temp;
}
for(i=0;i<SIZE;i++)
{
printf("%d ", list[i]);
}
printf("%\n");
return 0;
}
cs




반응형

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

배열 복사기  (0) 2016.08.10
배열 일치 판별기  (0) 2016.08.10
월별 일수  (0) 2016.08.09
자리수 출력  (0) 2016.08.05
이항 계수  (0) 2016.08.05
반응형

배열 days[]를 아래와 같이 초기화 하고 배열 원소의 값을 다음과 같이 출력하는 프로그램을 작성하라.

31,29,31,30,31,30,31,31,30,31,30,31


1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#define SIZE 12
int main(void)
{
    int i;
    int month[SIZE]={31,29,31,30,31,30,31,31,30,31,30,31};
    for(i=0;i<SIZE;i++)
    {
    printf("%d월은 %d일까지 있습니다.\n", i+1, month[i]);
    }
    return 0;
}
cs



반응형

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

배열 일치 판별기  (0) 2016.08.10
최대값 최소값  (0) 2016.08.09
자리수 출력  (0) 2016.08.05
이항 계수  (0) 2016.08.05
삼각수 구하기  (0) 2016.08.04
반응형

순환 호출을 이용하여 정수의 각 자리수를 출력하는 함수 show_digit(int x)를 작성하고 테스트하라. 즉 정수가 1234이면 화면에 1 2 3 4와 같이 출력한다. 함수는 일의 자리를 출력하고 나머지 부분을 대상으로 다시 같은 함수를 순환 호출한다. 예를 들어서 1234의 4를 출력하고 나머지 123을 가지고 다시 같은 함수를 순환 호출한다. 1234를 10으로 나누면 123이 되고 4는 1234를 10으로 나눈 나머지이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
void show_digit(int x);
int main(void)
{
int x;
printf("정수를 입력하시오: ");
scanf("%d"&x);
show_digit(x);
return 0;
}
void show_digit(int x)
{
    int a;
if(x>0)
{
    a=x%10;
    show_digit(x/10);
    printf("%d ", a);
}
}
cs


반응형

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

최대값 최소값  (0) 2016.08.09
월별 일수  (0) 2016.08.09
이항 계수  (0) 2016.08.05
삼각수 구하기  (0) 2016.08.04
입출금 프로그램  (0) 2016.08.04
반응형

이항 계수(binomial coefficient)를 계산하는 순환 함수를 작성하라. 이항 계수는 다음과 같이 순환적으로 정의된다. 반복 함수로도 구현해보라.

이항계수 :  https://ko.wikipedia.org/wiki/%EC%9D%B4%ED%95%AD%EA%B3%84%EC%88%98

출처 : 위키피디아 이항계수


<순환 호출>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
int recursive(int n, int k);
 
int main(void)
{
 int n, k;
 printf("n과 k를 입력해라:");
 scanf_s("%d %d"&n, &k);
 printf("%d\n", recursive(n, k));
}
 
int recursive(int n, int k)
{
 if (k == 0 || k == n)
  return 1;
 if (0 < k && k < n)
  return recursive(n - 1, k - 1+ recursive(n - 1, k);
}
cs






반응형

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

월별 일수  (0) 2016.08.09
자리수 출력  (0) 2016.08.05
삼각수 구하기  (0) 2016.08.04
입출금 프로그램  (0) 2016.08.04
조화 수열(harmonic series)  (0) 2016.08.04
반응형
오른쪽과 같은 n번째 삼각수를 계산하는 함수 get_tri_number(int n)을 순환 호출을 이용하여 작성하여보자.

삼각수(三角數, triangular number)는 일정한 물건으로 삼각형 모양을 만들어 늘어 놓았을 때, 그 삼각형을 만들기 위해 사용된 물건의 총 수가 되는 를 말한다.

예를 들어 아래와 같이 네 줄에 걸쳐 삼각형을 만들었을 때 늘어놓은 물건의 총 수는 10개가 되며, 10은 삼각수의 하나가 된다.Triangular number 10 with triangle.svg


출처 : https://ko.wikipedia.org/wiki/%EC%82%BC%EA%B0%81%EC%88%98


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
int get_tri_number(int n);
int main(void)
{
    int n;
    printf("n값을 입력하시오: ");
    scanf("%d"&n);
    printf("%d번째 삼각수는 %d입니다.\n", n, get_tri_number(n));
    return 0;
}
int get_tri_number(int n)
{
    static int total=0;
        total+=n;
    if (n>1)
    {
        get_tri_number(n-1);
    }
    return total;
}
 
cs





반응형

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

자리수 출력  (0) 2016.08.05
이항 계수  (0) 2016.08.05
입출금 프로그램  (0) 2016.08.04
조화 수열(harmonic series)  (0) 2016.08.04
정적 지역 변수 초기화  (0) 2016.08.04
반응형

은행 계좌에서 저축하고 인출하는 프로그램을 작성하여 보자. save(int amount) 함수는 저금할 금액 amount를 받으며 save(100)과 같이 호출된다. 

draw(int amount) 은 예금 인출을 나타낸다. 사용자에게 메뉴를 보여주고 저축 또는 인출을 선택하게 한다.

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>
int save(int amount);
int draw(int amount);
int my_money=0//총금액은 전역변수로 
int main(void)
{
    int menu, money;
    while(1)
    {
    printf("메뉴를 선택하세요: 저축(1), 인출(2), 종료(3): ");
    scanf("%d"&menu);
 
    if(menu==1)
    {
        printf("저축할 금액: ");
        scanf("%d"&money);
        printf("현재 잔액은 %d입니다.\n", save(money));
    }
    else if(menu==2)
    {
        printf("출금할 금액: ");
        scanf("%d"&money);
        printf("현재 잔액은 %d입니다.\n", draw(money));
    }
    else if(menu==3)
        break;
    else continue;
    }
    return 0;
 
}
int save(int amount)
{
    my_money+=amount;
    return my_money;
}
int draw(int amount)
{
    my_money-=amount;
    return my_money;
}
cs





반응형

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

이항 계수  (0) 2016.08.05
삼각수 구하기  (0) 2016.08.04
조화 수열(harmonic series)  (0) 2016.08.04
정적 지역 변수 초기화  (0) 2016.08.04
주사위 던지기  (0) 2016.08.03
반응형

다음과 같은 무한 수열을 계산하는 순환적인 프로그램을 작성하라.

1/1 + 1/2 + 1/3 + ... + 1/n

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>
double harmonic(int x);
int main(void)
{
    int n=0;
    printf("n값을 입력하세요: ");
    scanf("%d"&n);
    printf("%lf\n", harmonic(n));
    return 0;
}
double harmonic(int x)
{
double a;
static double sum=0;
= 1/(double)x;
sum+=a;
if(x>1)//0으로 나누는 것은 금지됨
{
harmonic(x-1);
}
return sum;
}
cs


그러나 이것은 큰 숫자를 입력하면 프로그램이 동작을 멈추게 된다. 따라서 순환적인 프로그램 보다는 반복문을 사용하는 것이 더 낫다.(큰 숫자의 계산도 가능하다.)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
double harmonic(int x);
int main(void)
{
    int n;
    printf("n을 지정하시오");
    scanf("%d"&n);
    printf("결과값은 %lf입니다.\n", harmonic(n));
        return 0;
}
double harmonic(int x)
{
double sum = 0;
double i;
for(i=1;i<=x;i++)
{
sum +=(1/i);
}
return sum;
}
cs




반응형

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

삼각수 구하기  (0) 2016.08.04
입출금 프로그램  (0) 2016.08.04
정적 지역 변수 초기화  (0) 2016.08.04
주사위 던지기  (0) 2016.08.03
연산 횟수를 세는 계산기  (0) 2016.08.03
반응형

정적 지역 변수가 사용되는 하나의 용도는 함수가 처음 호출될 때 초기화를 딱 한번만 수행하는 것이다.

inited는 정적 변수이기 때문에 다음번의 호출에서도 그 값을 유지한다. 따라서 초기화 코드는 함수가 처음 호출될 때 한번만 실행된다. 이러한 구조를 사용하여 맨 처음 호출되는 경우에만 초기화를 수행하는 난수 발생 함수 get_random()을 작성하여 테스트하라.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void get_random(void);
int main(void)
{
    get_random();
    get_random();
    get_random();
return 0;
}
void get_random(void)
{
    static int inited = 0;//한번만 초기화 됨
    if(inited==0)
    {
    inited=1;
    srand((unsigned)time(NULL));
    }
    printf("%d\n", rand());
}
cs




반응형

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

입출금 프로그램  (0) 2016.08.04
조화 수열(harmonic series)  (0) 2016.08.04
주사위 던지기  (0) 2016.08.03
연산 횟수를 세는 계산기  (0) 2016.08.03
메뉴 시스템 만들기  (0) 2016.07.29

+ Recent posts