IT/C언어

[쉽게 풀어쓴 C언어 Express 개정4판] 10장 Exercise & Programming

곰탱이들 2024. 2. 12.

10장 Exercise & Programming

10장 Exercise

 

1. 2

2. 3

3. 3, 4

4. 1

5. 4

 

6. #define MAX_SIZE 4

    int b[4];

    int i;

    for(i=0;i<MAX_SIZE;i++)

 

7.

a

float grade[3];
float average, sum;
int i;

for (i = 0; i < 3; i++) {
	printf("성적을 입력하시오: ");
	scanf("%f", &grade[i]);
}

sum = 0.0;

for (i = 0; i < 3; i++) {
	sum += grade[i];
}

average = sum / 3.0;

b

float grade[3] = { 10.0, 20.0, 30.0 };
float average, sum;
int i;

sum = 0.0;

	for (i = 0; i < 3; i++) {
		sum += grade[i];
	}
    
average = sum / 3.0;

c

float get_average(float a[], int n);
int main(void){

	float grade[3] = { 10.0, 20.0, 30.0 };
	get_average(grade, 3);
	return 0;
}

float get_average(float a[], int n)
{
	float average, sum;
	int i;
	sum = 0.0;
	for (i = 0; i < 3; i++) {
		sum += a[i];
	}
	average = sum / 3.0;
}

d

void get_freq(float s[], int freq[], int n);
int main(void){

	float grade[3] = { 10.0, 20.0, 30.0 };
	int freq[10] = { 0 };
	get_freq(grade, freq, 3);
	return 0;
}

void get_freq(float score[], int f[10], int n){

	int i, range;
	for (i = 0; i < n; i++) {
		range = score[i] / 10;
		f[range]++;
	}
}

 

8.

a. 인덱스 크기 생략 가능하다

int main(void){

	int grade[10][60];
	compute_avg(grade);
}

int compute_avg(int array[][60]) { ... }

b.배열 원소 경우 주소 선언

scanf("%f", &test[0]);

 

9. 00000

10장 Programming

 

1

#include <stdio.h>

int days[] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int main(void){

	int i;
	for (i = 0; i < 12; i++)
		printf("%d월은 %d일까지 있습니다.\n", i + 1, days[i]);

	return 0;
}

 

2

#include <stdio.h>

int main(void) {

	int list[10];
	int i, max, min;

	for (i = 0; i < 10; i++)
		list[i] = rand();

	max = min = list[0];
	for (i = 1; i < 10; i++) {

		if (list[i] < min)
			min = list[i];

		if (list[i] > max)
			max = list[i];
	}

	printf("최대값은 %d\n", max);
	printf("최소값은 %d\n", min);

	return 0;
}

 

3

#include <stdio.h>
#define N_DATA 10

int array_equal(int a[], int b[], int size);

void array_print(int a[], int size) {

	int i;
	for (i = 0; i < size; i++) {
		printf("%d ", a[i]);
	}
	printf("\n");
}

int array_equal(int a[], int b[], int size) {

	int i;
	for (i = 0; i < size; i++) {
		if (b[i] != a[i])
			return 0;
	}
	return 1;
}

int main() {

	int A[N_DATA] = { 1, 2, 3 };
	int B[N_DATA] = { 0 };

	array_print(A, 10);
	array_print(B, 10);

	if (array_equal(A, B, N_DATA) == 1)
		printf("\n2개의 배열은 같음 \n");
	else
		printf("\n2개의 배열은 다름 \n");

	return 0;
}

 

4

#include <stdio.h>

int main(void) {
	int a[5] = { 1,2,3,0,0 };
	int b[5] = { 0 };

	array_copy(a, b, 5);

	int i;
	for (i = 0; i < 5; i++) {
		printf("%d ", a[i]);
	}
	printf("\n");
	for (i = 0; i < 5; i++) {
		printf("%d ", b[i]);
	}
	printf("배열이 복사되었음\n");

	return 0;
}

int array_copy(int a[], int b[], int size) {
	int i;
	for (i = 0; i < size; i++) {
		b[i] = a[i];
	}
}

 

5

#include <stdio.h>

int main(){

	int freq[10] = { 0 };
	int i, max;

	for (i = 0; i < 100; i++) {
		++freq[rand() % 10];
	}
	max = 0;
	for (i = 1; i < 10; i++) {
		if (freq[i] > max)
			max = i;
	}
	printf("가장 많이 나온수=%d\n", max);

	return 0;
}

 

6

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MAX_NUM 45
#define LOTTO_NUM 6

int main() {
    int lotto[LOTTO_NUM];
    int check[MAX_NUM + 1] = { 0 };
    int i, num;

    printf("로또 번호는 다음과 같습니다.\n");

    srand(time(NULL));

    for (i = 0; i < LOTTO_NUM; i++) {
        do {
            num = rand() % MAX_NUM + 1;
        } while (check[num] == 1);

        lotto[i] = num;
        check[num] = 1;
    }

    for (i = 0; i < LOTTO_NUM; i++) {
        printf("%d ", lotto[i]);
    }
    printf("\n");

    return 0;
}

 

7

#include <stdio.h>

int main() {

	int i, j, sum;
	int data[3][5] = { { 12, 56, 32, 16, 98 },
			{ 99, 56, 34, 41, 3 },
			{ 65, 3, 87, 78, 21 } };

	for (i = 0; i < 3; i++) {
		sum = 0;
		for (j = 0; j < 5; j++)
			sum += data[i][j];
		printf("%d행의 합계: %d\n", i, sum);
	}
	for (j = 0; j < 5; j++) {
		sum = 0;
		for (i = 0; i < 3; i++)
			sum += data[i][j];
		printf("%d열의 합계: %d\n", j, sum);
	}
	return 0;
}

 

8

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {

	int a[3][10] = { 0 };
	int i, x;

	for (i = 0; i < 10; i++) {
		a[0][i] = i + 1;
		a[1][i] = (i + 1) * (i + 1);
		a[2][i] = (i + 1) * (i + 1) * (i + 1);
	}
	printf("정수를 입력하시오 : ");
	scanf("%d", &x);

	for (i = 0; i < 10; i++) {
		if (a[2][i] == x) {
			printf("%d의 세제곱근은 %d", x, a[0][i]);
		}
	}
	return 0;
}

 

9

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#define N_DATA 10

void get_data(double data[]);
double get_mean(double data[]);
double get_std_dev(double data[], double mean);

int main() {

	double data[20];
	double mean;

	get_data(data);
	mean = get_mean(data);

	printf("평균값은 %f\n", mean);
	printf("표준편차값은 %f\n", get_std_dev(data, mean));

	return 0;
}
void get_data(double data[]) {

	int i;

	for (i = 0; i < N_DATA; i++) {
		printf("데이터를 입력하시오:");
		scanf("%lf", &data[i]);
	}
}

double get_mean(double data[]) {

	int i;
	double sum = 0.0;

	for (i = 0; i < N_DATA; i++) {
		sum += data[i];
	}
	return sum / N_DATA;
}

double get_std_dev(double data[], double mean) {

	int i;
	double sum = 0.0;

	for (i = 0; i < N_DATA; i++) {
		sum += (data[i] - mean) * (data[i] - mean);
	}
	double std = sqrt(sum / N_DATA);
	return std;
}

 

10

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {

	int arr[5][3] = { 0 };
	int i, j;
	srand(time(NULL));

	for (i = 0; i < 3; i++) {
		for (j = 0; j < 5; j++) {
			arr[j][i] = rand() % 101;
		}
	}
	int min = arr[0][0];
	int max = arr[0][0];
	for (i = 0; i < 3; i++) {
		for (j = 0; j < 5; j++) {
			if (arr[j][i] < min)
				min = arr[j][i];
			if (arr[j][i] > max);
			max = arr[j][i];
		}
		printf("시험 #%d의 최대점수=%d\n", i, max);
		printf("시험 #%d의 최소점수=%d\n", i, min);

		min = arr[0][0];
		max = arr[0][0];
	}
	return 0;
}

11-1

#include <stdio.h>

void vector_add(double x[], double y[], double z[]);

int main(){

	double x[3] = { 1.0, 2.0, 3.0 };
	double y[3] = { 1.0, 2.0, 3.0 };
	double z[3];

	vector_add(x, y, z);
	printf("[ %.2f %.2f %.2f] + [ %.2f %.2f %.2f] ", x[0], x[1], x[2], y[0], y[1], y[2]);
	printf("= [ %.2f %.2f %.2f] \n", z[0], z[1], z[2]);

	return 0;
}

void vector_add(double x[], double y[], double z[]){

	z[0] = x[0] + y[0];
	z[1] = x[1] + y[1];
	z[2] = x[2] + y[2];

11-2

#include <stdio.h>
double vector_dotp(double x[], double y[]);
int main(void)
{
	double x[3] = { 1.0, 2.0, 3.0 };
	double y[3] = { 1.0, 2.0, 3.0 };
	double value;

	value = vector_dotp(x, y);
	printf("[%.2f %.2f %.2f]*[%.2f %.2f %.2f] = %f\n", x[0], x[1], x[2], y[0], y[1], y[2], value);
	return 0;
}

double vector_dotp(double x[], double y[])
{
	int i;
	double result;

	result = 0.0;
	for (i = 0; i < 3; i++)
		result += x[i] * y[i];
	return result;
}

 

12.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

#define MAX_PRODUCTS 10
#define MAX_LOCATIONS 100

int main() {
    int products[MAX_PRODUCTS] = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
    int productNum;

    printf("상품 번호를 입력하시오: ");
    scanf("%d", &productNum);

    if (productNum < 1 || productNum > 10) {
        printf("유효하지 않은 상품 번호입니다.\n");
    }
    else {
        int location = products[productNum - 1];
         printf("상품 %d은 선반 %d에 있습니다.\n", productNum, location);
    }
    return 0;
}

 

13-1

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

void smult(int A[][3], int b, int C[][3]){

	int r, c, k;
	for (r = 0; r < 3; r++) {
		for (c = 0; c < 3; c++) {
			C[r][c] = b * A[r][c];
		}
	}
}

void print(int A[][3]){

	int r, c;
	for (r = 0; r < 3; r++) {
		for (c = 0; c < 3; c++)
			printf("%d ", A[r][c]);
		printf("\n");
	}
}

int main(void){

	int A[3][3] = { { 1, 2, 3 },{ 4, 5, 6 },{ 7, 8, 9 } };
	int C[3][3];

	smult(A, 2, C);
	print(C);

	return 0;
}

13-2

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

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

	int r, c;
	for (r = 0; r < 3; r++)
		for (c = 0; c < 3; c++)
			b[r][c] = a[c][r];
}

void print(int a[][3]){

	int r, c;
	for (r = 0; r < 3; r++) {
		for (c = 0; c < 3; c++)
			printf("%d ", a[r][c]);
		printf("\n");
	}
}

int main(void){

	int A[3][3] = { { 1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
	int B[3][3];

	transpose(A, B);
	print(B);

	return 0;
}

 

 

14

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define ROWS 6
#define COLS 6
#define SUBGRID_ROWS 3
#define SUBGRID_COLS 3

int main() {

    int oilField[ROWS][COLS];
    int maxSubgridSum = 0;
    int maxSubgridRow = 0, maxSubgridCol = 0;
    int i, j, k, l;

    srand(time(NULL));

    for (i = 0; i < ROWS; i++) {
        for (j = 0; j < COLS; j++) {
            oilField[i][j] = rand() % 101;
    }
    for (i = 0; i <= ROWS - SUBGRID_ROWS; i++) {
        for (j = 0; j <= COLS - SUBGRID_COLS; j++) {
            int subgridSum = 0;

            for (k = i; k < i + SUBGRID_ROWS; k++) {
                for (l = j; l < j + SUBGRID_COLS; l++) {
                    subgridSum += oilField[k][l];
				}
			}
            if (subgridSum > maxSubgridSum) {
                maxSubgridSum = subgridSum;
                maxSubgridRow = i;
                maxSubgridCol = j;
            }
        }
    }
    for (i = 0; i < ROWS; i++) {
        for (j = 0; j < COLS; j++) {
            printf("%2d ", oilField[i][j]);
        }
        printf("\n");
    }
    printf("가장 매장량이 많은 구역의 매장량은 %d입니다\n", maxSubgridSum);

    return 0;
}

11장 Exercise & Programming은 아래 클릭하시면 됩니다

[쉽게 풀어쓴 C언어 Express] 11장 Exercise & Programming

 

[쉽게 풀어쓴 C언어 Express] 11장 Exercise & Programming

11장 Exercise & Programming 11장 Exercise 1. a) *(list+6) b) *(name+3) c.) cost[8] d) *message 2. char * p; , p = &code; , p = ‘a’; 3. 3번 4. 3번 5. 55(세로출력) 6. 1008 2008 7.011(세로출력) 8. a) void print_array(double b[]); b) void print

gomszone.tistory.com

 

 

댓글