AR삽질러

C로 시작하는 컴퓨터 프로그래밍4판 - 8장 함수 본문

C

C로 시작하는 컴퓨터 프로그래밍4판 - 8장 함수

아랑팡팡 2023. 4. 2. 18:06
728x90

혼자해보기8-1

다음 내용에 맞는 함수를 각각 작성하시오.

1) 정수 2개를 입력받아 나눗셈을 하는 Division()함수

#include<stdio.h>
#pragma warning(disable:4996)

double Division(double a, double b) {
    double result;
    result = a / b;
    printf("나눗셈 결과 : %1.f", result);
    return result;
}

int main()
{
    double a, b;
    printf("a값 입력 : ");
    scanf("%lf", &a);

    printf("\nb값 입력 : ");
    scanf("%lf", &b);

    Division(a, b);

    return 0;
}

2) 정수 1개를 입력받아 그 절댓값을 반환하는 Absolute()함수

#include<stdio.h>
#pragma warning(disable:4996)

int Absolute(int num) {
	if (num < 0) {
		return -num;
	}
	else {
		return num;
	}
}

int main(void) {
	int num;
	printf("숫자를 입력해주세요 : ");
	scanf("%d", &num);

	printf("%d의 절대값은 : %d입니다.", num, Absolute(num));

	return 0;
}

 

혼자해보기8-2

다음 소스코드에서 틀린 부분을 수정하시오.

#include<stdio.h>

int main(void) {

	double x = 10.5, y = 20.5;
	double result;
	result = SumTwo(x, y);

	return 0;
}
int SumTwo(int a, int b)
{
	return a + b;
}

수정

#include<stdio.h>
#pragma warning(disable:4996)

double SumTwo(double a, double b) {

	return a + b;
}

int main(void) {

	double x = 10.5, y = 20.5;
	double result;
	result = SumTwo(x, y);
	printf("결과 : %f", result);

	return 0;
}

 

혼자해보기8-3

다음 배열에서 10보다 큰 값만 더하는 SelectSum()함수를 만드시오.

int a[] = {20, 10, 5, 8, 28};

#include<stdio.h>
#pragma warning(disable:4996)

int SelectSum(int a[]);

int main(void) {
	int a[] = { 20, 10, 5, 8, 28 };
	int Sum;
	Sum = SelectSum(a);
	printf("배열에서 10보다 큰 값을 더한 합 : %d", Sum);
}

int SelectSum(int a[]) {

	int result = 0;

	for (int i = 0; i < 5; i++) {
		if (a[i] > 10) {
			result += a[i];
		}
	}
	return result;
}

 

01 다음 프로그램의 문법적인 오류나 논리적인 오류를 수정하시오.

1)

#include<stdio.h>
#pragma warning(disable:4996)

int SumTwo(int, int, int);

int main() {
	int x = 10, y = 20;
	int result;
	result = SumTwo(x, y);
	printf("합은 %d\n", result);
	return 0;
}

int SumTwo(int a, int b) {
	return a + b;
}

수정

#include<stdio.h>
#pragma warning(disable:4996)

int SumTwo(int a, int b);

int main() {
	int x = 10, y = 20;
	int result;
	result = SumTwo(x, y);
	printf("합은 : %d\n", result);
	return 0;
}

int SumTwo(int a, int b) {
	return a + b;
}

 

2)

#include<stdio.h>
#pragma warning(disable:4996)

int Big(int, int);

int main() {

	int x = 10, y = 20;
	printf("두 수 중에 큰 값은 %d\n", Big(a, b));

	return 0;
}

int Big(int a, int b) {
	a > b ? return a; : return b;

수정

#include<stdio.h>
#pragma warning(disable:4996)

int Big(int a, int b);

int main() {

	int x = 10, y = 20;
	printf("두 수 중에 큰 값은 %d\n", Big(x, y));

	return 0;
}

int Big(int a, int b) {

	a > b ? a :  b;

}

 

3) 

#include<stdio.h>
#pragma warning(disable:4996)

double Average(int, int);

int main() {

	int x = 10, y = 20;
	int result;

	result = Average(x, y);
	printf("두 수의 평균은 %d\n", result);

	return 0;
}

double Average(int a, int b) {

	double result;
	result = (double)a * b / 2.0;
}

수정

#include<stdio.h>
#pragma warning(disable:4996)

double Average(int a, int b);


int main() {

    int x = 10, y = 20;
    double result = Average(x, y);
    printf("두 수의 평균은 %.1f\n", result);

    return 0;
}

double Average(int a, int b) {
	double result = (double)(a + b) / 2.0;
	return result;
}

 

4)

#include<stdio.h>
#pragma warning(disable:4996)

void cube(int);

int main() {
	int x = 10;
	printf("x의 세제곱은 %d\n", cube(x));

	return 0;
}

void Cube(int a) {
	return a * a * a;
}

수정

#include<stdio.h>
#pragma warning(disable:4996)

void Cube(int a);

int main() {

	int x = 10;
	Cube(x);
	
	return 0;
}

void Cube(int a) {
	int result =  a * a * a;
	printf("세제곱의 값 %d", result);
}

 

02 영어 알파벳 한 문자를 입력받아 소문자로 출력하는 lower_case()함수를 만드시오(예제8-5참조).

#include<stdio.h>
#pragma warning(disable:4996)

char lower_case(char ch);

int main(void) {
	char ch;
	printf("영어알파벳소문자입력 : ");
	scanf("%c", &ch);

	printf("%c", lower_case(ch));

	return 0;
}

char lower_case(char ch) {
	
	if (ch >= 'A' && ch <= 'Z') {
		return ch + ('a' - 'A'); // 대문자를 소문자로 변환
	}
	else {
		return ch;
	}
}

 

03 정수형(int)변수 3개를 입력받아 그중에 가장 작은 값을 출력하는 MinThree()함수를 만드시오.

#include<stdio.h>
#pragma warning(disable:4996)

int MinThree(int a, int b, int c);

int main(void) {

	int a, b, c;
	printf("숫자3개입력 : ");
	scanf("%d %d %d", &a, &b, &c);
	printf("가장 작은 값 : %d", MinThree(a, b, c));

	return 0;
}

int MinThree(int a, int b, int c) {
	
	int min = a;
	if (b < min) {
		min = b;
	}
	if (c < min) {
		min = c;
	}
	return min;
}

 

04 양의 정수를 입력받아 이 정수가 소수인지 확인하는 CheckPrime()함수를 만드시오.

#include<stdio.h>
#pragma warning(disable:4996)

int CheckPrime(int num);

int main(void) {

	int num;
	printf("양의 정수 입력 : ");
	scanf("%d", &num);
	if (CheckPrime(num) == 1) {
		printf("입력하신 %d양의 정수는 소수입니다.", num);
	}
	else {
		printf("입력하신 %d양의 정수는 소수가 아닙니다.", num);
	}

	return 0;
}

int CheckPrime(int num) {
	
	if (num <= 1) {
		return 0; // 1보다 작거나 같으면 소수가 아니다.
	}
	for (int i = 2; i <= num / 2; i++) {
		if (num % i == 0) {
			return 0;
		}
	}
	return 1;
}

 

06 비밀번호를 확인하는 CheckPw()함수를 만드시오. 이 함수는 문자열을 입력받고, 프로그램에 이미 저장되어 있는 비밀번호와 입력 문자열을 비교한다.

#include<stdio.h>
#pragma warning(disable:4996)

void CheckPw();

int main(void) {

	CheckPw();
	return 0;
}

void CheckPw() {

	char pw[] = "12345gg";
	int input[20];

	printf("비밀번호를 입력하세요 : ");
	scanf("%s", input);

	if(strcmp(pw, input) == 0){ // strcmp함수로 문자열을 비교하여 일치하면 로그인
		printf("로그인 되었습니다.");
	}
	else {
		printf("비밀번호가 틀렸습니다ㅡ.ㅡ;;");
	}

}

 

07 정수형 배열을 입력으로 받아 최대값을 출력하는 Max()함수를 작성하시오.

#include<stdio.h>
#pragma warning(disable:4996)

void Max(int ary[]);

int main(void) {
	
	int ary[5];
	printf("정수5개를 입력해주세요 : ");
	for (int i = 0; i < 5; i++) {
		scanf("%d", &ary[i]);
	}
	Max(ary);
	return 0;
}

void Max(int ary[]){
	int max = ary[0];
	for (int i = 1; i < 5; i++) {
		if (ary[i] > max) {
			max = ary[i];
		}
	}
	printf("입력하신 정수중 최대값은 %d입니다.", max);

}

 

08 정수형 배열을 입력으로 받아 최소값을 출력하는 Main()함수를 작성하시오.

#include<stdio.h>
#pragma warning(disable:4996)

void Min(int ary[]);

int main(void) {
	
	int ary[5];
	printf("정수5개를 입력해주세요 : ");
	for (int i = 0; i < 5; i++) {
		scanf("%d", &ary[i]);
	}
	Min(ary);
	return 0;
}

void Min(int ary[]){
	int min = ary[0];
	for (int i = 1; i < 5; i++) {
		if (ary[i] < min) {
			min = ary[i];
		}
	}
	printf("입력하신 정수중 최소값은 %d입니다.", min);

}

 

09 정수형 배열을 입력으로 받아 평균(실수형)을 출력하는 Average()함수를 작성하시오.

#include<stdio.h>
#pragma warning(disable:4996)

void Average(int ary[]);

int main(void) {
	
	int ary[5];
	printf("정수5개를 입력해주세요 : ");
	for (int i = 0; i < 5; i++) {
		scanf("%d", &ary[i]);
	}
	Average(ary);
	return 0;
}

void Average(int ary[]){

	int sum = 0;
	for (int i = 0; i < 5; i++) {
		sum += ary[i];
	}
	double result = (double)sum / 5;
	printf("입력하신 정수의 평균은 %.1f입니다.", result);

}

 

11 정수형 배열 b[] = {20, 34, 12, 24, 54, 91, 9, 40, 81, 10}의 최대값, 최소값, 평균, 표준편차를 앞의 연습문제에서 만들었던 함수들을 사용하여 계산하고 화면에 출력하는 프로그램을 작성하시오.

#include<stdio.h>
#include<math.h> // sqrt 함수
#pragma warning(disable:4996)

void Max(int b[]);
void Min(int b[]);
void Avg(int b[]);
void Stdev(int b[], int n);

int main(void) {

	
	int b[] = { 20, 34, 12, 24, 54, 91, 9, 40, 81, 10 };

	Max(b);
	Min(b);
	Avg(b);
	Stdev(b, n);

	return 0;
}

void Max(int b[]) {
	int max = b[0];
	for (int i = 1; i < 10; i++) {
		if (b[i] > max) {
			max = b[i];
		}
	}
	printf("정수형배열중 최대값은 %d입니다.\n", max);
}

void Min(int b[]) {
	int min = b[0];
	for (int i = 1; i < 10; i++) {
		if (b[i] < min) {
			min = b[i];
		}
	}
	printf("정수형배열중  최소값은 %d입니다.\n", min);
}
	
void Avg(int b[]) {

	int sum = 0;
	for (int i = 0; i < 10; i++) {
		sum += b[i];
	}
	double result = (double)sum / 10;
	printf("정수형배열중  평균은 %.1f입니다.\n", result);
}

void Stdev(int b[], int n) {
	double sum = 0.0;
	double mean = 0.0;
	double stdev = 0.0;

	// 평균 계산
	for (int i = 0; i < n; i++) {
		mean += b[i];
	}
	mean = mean / n;

	// 분산 계산
	for (int i = 0; i < n; i++) {
		sum += pow(b[i] - mean, 2);
	}
	stdev = sqrt(sum / n);

	printf("정수형배열중  표준편차는 %.1f입니다.\n", stdev);
}

 

728x90
반응형
LIST