본문 바로가기
IT/프로그래밍

C언어 본색 파트2 Chapter 1 연습문제 솔루션

by nutrient 2021. 5. 31.
728x90
728x170

 

1번

#include<stdio.h>

int main() {
	int i; //for 문에서 사용할 부분
	char source[3]={'A','B','C'}; //원본 배열
	char target[6]; //복사할 대상이 되는 배열
	
	for(i=0;i<3;i++) { //0~2까지 프린트및 복사
		target[i]=source[i];
		printf("%c",source[i]);
	}
	printf("\n");
	
	for(i=0;i<3;i++) //3~5까지 복사
		target[5-i]=source[i];

	for(i=0;i<6;i++) //프린트
		printf("%c",target[i]);

	printf("\n");
	return 0;
}

/*

배열에 대해 이해하고 있는 지 묻는 문제입니다.
3개의 원소를 가진 배열과 6개의 원소를 가진 배열을 만들고
배열에 있는 값을 다른 배열에 옮겨보는 것이 문제의 핵심입니다.
배열의 인덱스가 어떤 의미를 가지는 지도 알아야 하며
이 해답에서는 먼저 0~2까지, 즉 source의 3개의 원소를 모두
출력하면서 target에 복사를 하였고
5-i를 이용하여 역순으로 복사를 하였습니다.

*/

 

2번

#include <stdio.h>

int main () {
	int jumsu[10], i, sum=0;

	for (i = 0; i < 10; i++) {
		printf("%d번째 학생의 점수는? ", i+1);
		scanf("%d", &jumsu[i]);
	}

	for (i = 0; i < 10; i++) 
		sum += jumsu[i]; // sum = sum + jumsu[i];

	printf("총점 %d, 평균 %lf\n", sum, (double)sum/10);

	return 0;
}

 

3번

#include <stdio.h>

int main () {
	int arr[15] = {90, 78, 77, 98, 98,
		           80, 45, 67, 88, 57,
				   88, 99, 65, 55, 74};

	int horizonSum[3] = {0};
	int verticalSum[5] = {0};
	int totalSum = 0;
	int i;

	for (i = 0; i < 15; i++) {
		horizonSum[i/5] += arr[i];
		verticalSum[i%5] += arr[i];
		totalSum += arr[i];
	}
	
	printf("가로줄의 합은 각각 ");
	for (i = 0; i < 3; i++) 
		printf("%d ", horizonSum[i]);
	printf("이며, \n세로줄의 합은 각각 ");
	for (i = 0; i < 5; i++)
		printf("%d ", verticalSum[i]);
	printf("이며, \n총 합은 %d 입니다.\n", totalSum);

	return 0;
}

/*
	배열은 테이블의 값을 가로로 읽어나가며 1차원 배열에 순서대로 값을 저장합니다.
	가로줄의 경우 배열 인덱스를 5로 나눈 몫을 사용하면 0, 1, 2 번째 행의 합을 계산할 수 있습니다.
	세로줄의 경우 배열 인덱스를 3으로 나눈 나머지를 사용하면 0, 1, 2, 3, 4 번째 열의 값을 계산할 수 있습니다.
*/

 

4번

#include <stdio.h>

int main () {
	int arr[9] = {0};
	int inputNum = 0, i = 0;

	printf("구구단을 계산할 수를 입력하세요: ");
	scanf("%d", &inputNum);

	for (i = 0; i < 9; i++) 
		arr[i] = inputNum * (i+1);

	for (i = 0; i < 9; i++) 
		printf("%d x %d = %d\n", inputNum, i+1, arr[i]);

	return 0;
}

 

5번

#include <stdio.h>

int main () {
	double arr1[5] = {2.2, 3.5, 2.5, 10.1, 4.0};
	double arr2[5] = {3.3, 2.0, 4.0, 1.0, 2.5};
	int i;

	for (i = 0; i < 5; i++) 
		printf("%d 번째 수들의 곱은 %lf\n", i+1, arr1[i]*arr2[i]);
	
	return 0;
}

 

6번

#include <stdio.h>

int main () {
	char array1[5] = {'A', 'B', 'C', 'D', 'E'};
	int array2[5] = {10, 20, 30, 40, 50};
	double array3[5] = {10.1, 20.2, 30.3, 40.4, 50.5};
	int i;

	for (i = 0; i < 5; i++) 
		printf("array1의 %d 번째 수의 주소는 %X, 값은 %c 입니다.\n", i, &array1[i], *(array1+i));
	for (i = 0; i < 5; i++) 
		printf("array2의 %d 번째 수의 주소는 %X, 값은 %d 입니다.\n", i, &array2[i], *(array2+i));
	for (i = 0; i < 5; i++) 
		printf("array3의 %d 번째 수의 주소는 %X, 값은 %lf 입니다.\n", i, &array3[i], *(array3+i));

	return 0;
}

728x90
그리드형

댓글