반응형

4.10> 영문자로 구성된 텍스트에 대해 각 알파벳에 해당하는 문자가 몇 개인지 출력하는 히스토그램 클래스 Histogram을 만들어보자. 대문자는 모두 소문자로 변환하여 처리한다. Histogram 클래스를 활용하는 사례와 실행 결과는 다음과 같다.


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 <iostream>
#include <algorithm> //transform 함수 사용 위함
#include <string>
 
using namespace std;
 
class Histogram{
private:
    string s; //스트링 저장용
public:
    Histogram(string s){(this->s)+=s;} //생성자는 멤버스트링 s에 매개스트링 s를 더한다.
    void put(string s){(this->s)+=s;} //멤버스트링 s에 매개스트링 s를 더한다.
    void putc(char c){(this->s)=s+c;} //멤버스트링 s에 매개 캐릭터 c를 더한다.
    void print(){
        cout<<s<<endl//소문자화 하기전 출력
        transform(s.begin(),s.end(),s.begin(),tolower); //스트링 s를 전부 소문자화 시킴
        cout<<s<<endl//소문자화 한 후 출력
        for(int i=0;i<26;i++){ //알파벳이 26자라서 26번 돌린다.
            int count=0//알파벳 몇번 나왔나 셀 때 사용할 변수
            for(int k=0;k<s.size();k++){ //스트링 전부 순회
                if(s[k]==(i+97)) //아스키코드 97이 'a'라서 97~97+26 은 'a'~'z'를 의미한다. s의 각 문자를 'a'~'z'와 비교
                    count++//만약 s[k]가 i+97과 같으면 count 증가
            }
            cout<<(char)(i+97)<<" ("<<count<<")    :    "//출력
 
            for(int j=0;j<count;j++//count 수만큼 별 출력
                {cout<<"*";}
            cout<<endl//한줄 내린다.
        }
    }
};
 
int main(void){
    Histogram elvisHisto("Wise men say, only fools rush in But I can't help, ");
    elvisHisto.put("falling in love with you");
    elvisHisto.putc('-');
    elvisHisto.put("Elvis Presley");
    elvisHisto.print();
    return 0;
}
 
cs




반응형

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

변수와 포인터와 참조  (0) 2017.11.08
float와 double  (0) 2017.11.05
Circle, CircleManager 클래스  (0) 2017.11.03
Person, Family 클래스  (0) 2017.11.03
원의 개수와 반지름  (0) 2017.11.03
반응형

정수 배열의 원소들을 화면에 출력하는 함수를 작성하고 테스트하라. 출력 형식은 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
반응형

수학에서의 "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

+ Recent posts