C언어/참고서: C언어 콘서트

C언어 36차시 배열 연습문제 2

Olivia-BlackCherry 2023. 4. 4. 16:37

목차

    1. 1~9단까지의 구구단 배열 만들고, 두 숫자를 대입하여 구구단을 계산하기

    ♣결과

    ♧코드

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    int main(void)
    {
    	int gugu[10][10];
    	int i, k;
    
    	for (i = 1; i <= 9; i++) {
    		for (k = 1; k <= 9; k++) {
    			gugu[i][k] = i * k;
    		}
    	}
    	printf("알고싶은 구구단을 입력하시오(예시: 2 3): ");
    	int n, m;
    	scanf("%d%d", &n, &m);
    	printf("%dX%d=%d \n", m, n, gugu[m][n]);
    	return 0;
    }
    //olivia_codingschool

     

     

    2.  두 행렬 곱하기

    ♣결과

    ♧코드

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #define ROWS 3
    #define COLS 3
    
    int main(void) {
    	int i, j, k;
        
        //첫 번째 행렬 구하기
    	int s1[ROWS][COLS];
    	for (i = 0; i < ROWS; i++) {
    		for (j = 0; j < COLS; j++) {
    			s1[i][j] = i + 1;
    			printf("%d ", s1[i][j]);
    		}
    		printf("\n");
    	}
    	printf("\n");
        
        //두 번째 행렬 구하기
        int s2[ROWS][COLS];
    	for (i = 0; i < ROWS; i++) {
    		for (j = 0; j < COLS; j++) {
    			s2[i][j] = i + 2;
    			printf("%d ", s2[i][j]);
    		}
    		printf("\n");
    	}
    	printf("\n");
    
    // 행렬 곱하기
    	int result[ROWS][COLS];
    	for (i = 0; i < ROWS; i++) {
    		for (k = 0; k < COLS; k++) {
    			int sum = 0;
    
    			for (j = 0; j < COLS; j++) {
    				sum += s1[i][j] * s2[j][k];
    			}
    			result[i][k] = sum;
    		}
    	}
    	
        // 결과값 보기
    	for (i = 0; i < ROWS; i++) {
    		for (j = 0; j < COLS; j++) {
    			printf("%d ", result[i][j]);
    		}
    		printf("\n");
    	}
    
    	return 0;
    }
    //olivia_codingschool

     

     

    3. 전치행렬 구하기

    -전치행렬이란?

    전치행렬(transpose matrix)은 행렬의 열과 행을 서로 바꾼 행렬을 말합니다. 즉, 만약 A가 크기가 m x n인 행렬이라면, A의 전치행렬인 A^T는 크기가 n x m인 행렬입니다.

    전치행렬은 각 요소의 위치를 바꾸는 것이기 때문에 대각선 요소를 제외한 나머지 요소는 대칭이 됩니다. 따라서, 대칭행렬을 다룰 때 전치행렬을 이용하면 계산이 간단해지는 경우가 있습니다.

    전치행렬은 행렬 연산에서 유용하게 사용되며, 행렬의 곱셈, 행렬의 역행렬 계산 등 다양한 분야에서 활용됩니다. 또한, 컴퓨터 과학에서도 전치행렬은 배열이나 행렬 데이터를 처리할 때 자주 사용됩니다.

     

    ♣결과

     

    ♧코드

    #define _crt_secure_no_warnings
    #include <stdio.h>
    #define size 4
    
    int main(void)
    {
    	int i, j;
    	int s[size][size];
    	int k[size][size];
    
    	for (i = 0; i < size; i++) {
    		for (j = 0; j < size; j++) {
    			s[i][j] = j+1;
    			printf("%d ", s[i][j]);
    		}
    		printf("\n");
    	}
    
    	printf("\n");
    
    	for (i = 0; i < size; i++) {
    		for (j = 0; j < size; j++) {
    			k[i][j] = s[j][i];
    			printf("%d ", k[i][j]);
    		}
    		printf("\n");
    	}
    
    	return 0;
    }
    //olivia_codingschool

     

     

    4. 0-9까지 난수를 100번 생성하여, 가장 많이 생성된 수를 출력하기

    ♣결과

    ♧코드

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main(void)
    {
    	//매 프로그램 실행마다 난수발생
    	srand(time(NULL));
    	
    	//배열 초기값을 모두 0으로 설정
    	int s[10] = { 0,0 };
    	int i, number, max_value;
    	int random_number;
    
    	//0~9 사이 난수 발생 시키기
    	for (i = 0; i < 100; i++) {
    		random_number = rand() % 10;
    		s[random_number] += 1;
    	}
    
    	// 임시값 설정하기
    	number = -1;
    	max_value = s[0];
    	// 배열에서 최대값구하고 해당 인덱스와 함께 출력하기
    	printf("배열은 다음과 같다.");
    	for (i = 0; i < 10; i++) {
    		printf("%d ", s[i]);
    		if (s[i] > max_value) {
    			max_value = s[i];
    			number = i;
    		}
    	}
    	printf("\n%d가 %d번 나왔습니다", number, max_value);
    	return 0;
    }
    //olivia_codingschool

     

     

    5. 주사위를 던져서 한 면이 나올 확률 구하기

    -잘 만들어진 주사위라면 1/6에 가까워진다.

    count 횟수를 조절하며 확률을 비교해보자.

    ♣결과

    ♧코드

    #define _crt_secure_no_warnings
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define size 6
    
    int main(void)
    {
    	// 배열 초기화하기, 초기값으로 0을 입력
    	int arr[6] = {0,0,0,0,0,0};
    	int i;
    	int count = 1000000;
    	int random_number;
    	double pb;
    
    	// 0~5 중의 난수 구하고, 나온 횟수 구하기
    	srand(time(NULL));
    	for (i = 0; i < count; i++) {
    		random_number = rand() % 6;
    		arr[random_number] += 1;
    	}
    
    	// 나온 횟수 확인하기
    	for (i = 0; i < size; i++) {
    		printf("%d            %d\n", i + 1, arr[i]);
    	}
    
    	// 한 면이 나올 확률 구하기
    	pb = (double)arr[0] / count*100;
    	printf("약 %.2lf%입니다", pb);
    	return 0;
    }
    //olivia_codingschool