Linux/Linux 과제

[임베디드 과제] make와 gcc로 C 프로그램 컴파일

2sjin 2022. 10. 11. 01:44

1.

a) 문제 설명

  • 키보드 입력: 정수 A, B
  • A를 4로 나눈 나머지에 B를 더한 값을 출력함

 

b) C Source Code

// ADD.SEL.c

#include <stdio.h>

int ADD_SEL(int A, int B) {
	int R;

	printf("%d를 4로 나눈 나머지: %d \n", A, A%4);

	if (A % 4 == 0) {
		R = B;
		printf("R = %d", B);
	}
	
	else if (A % 4 == 1) {
		R = B + 1;
		printf("R = %d + 1", B);

	}
	
	else if (A % 4 == 2) {
		R = B + 2;
		printf("R = %d + 2", B);
	}
	
	else {
		R = B + 3;
		printf("R = %d + 3", B);

	}
	printf("\n");

	return R;
}
// CALC_A1_1.c

#include <stdio.h>

int ADD_SEL(int, int);

int main() {
	int A, B;

	printf("정수를 입력하세요(A B): ");	
	scanf("%d %d", &A, &B);

	printf("ADD_SEL: %d \n\n", ADD_SEL(A, B));

	return 0;
}

 

 

c) Makefile Code : Makefile

exe4 : ADD_SEL.o CALC_A1_1.o
	gcc -o exe4 ADD_SEL.o CALC_A1_1.o

ADD_SEL.o : ADD_SEL.c
	gcc -c ADD_SEL.c

CALC_A1_1.o : CALC_A1_1.c
	gcc -c CALC_A1_1.c

clean:
	rm -f *.o exe4

 

d) make 명령 실행 결과

 

e) 실행 파일 실행 결과

 

 

2. 

a) 문제 설명

  • 키보드 입력: 정수 A, B
  • A와 B를 더한 결과값의 홀/짝 판별
  • 짝수면 결과값에 2를 곱하고, 홀수면 결과값에 2를 나눔

 

b) C Source Code

// MD_SEL.c

#include <stdio.h>

int MD_SEL(int A, int B) {
	int R;

	printf("(%d+%d) % 2 = %d \n", A, B, (A+B)%2);

	if ((A+B) % 2 == 0) {
		R = (A+B) * 2;
		printf("R = (%d+%d) * 2", A, B);
	}

	else {
		R = (A+B) / 2;
		printf("R = (%d+%d) / 2", A, B);
	}

	printf("\n");

	return R;
}
// CALC_A1_2.c

#include <stdio.h>

int MD_SEL(int, int);

int main() {
	int A, B;

	printf("정수를 입력하세요(A B): ");
	scanf("%d %d", &A, &B);

	printf("MD_SEL: %d \n\n", MD_SEL(A, B));

	return 0;
}

 

c) Makefile Code : Makefile5

exe5 : MD_SEL.o CALC_A1_2.o
	gcc -o exe5 MD_SEL.o CALC_A1_2.o

MD_SEL.o : MD_SEL.c
	gcc -c MD_SEL.c

CALC_A1_2.o : CALC_A1_2.c
	gcc -c CALC_A1_2.c

clean:
	rm -f *.o exe5

 

d) make 명령 실행 결과

 

e) 실행 파일 실행 결과

 

 

3.

a) 문제 설명

  • 키보드 입력: 정수 A
  • 명령행 인자: 정수 B
  • B가 짝수이면 A*2를 출력, B가 홀수이면 A+2를 출력함

 

b) C Source Code

// MUL_SUM.c

#include <stdio.h>

int MUL_SUM(int A, int B) {
	int R;

	printf("%d % 2 = %d \n", B, B%2);

	if (B % 2 == 0) {
		R = A * 2;
		printf("R = %d * 2", A);
	}

	else {
		R = A + 2;
		printf("R = %d + 2", A);
	}

	printf("\n");

	return R;
}
// CALC_B1_1.c

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

int MUL_SUM(int, int);

int main(int argc, char* argv[]) {
	int A, B;

	printf("정수를 입력하세요: ");
	scanf("%d", &A);
	B = atoi(argv[1]);	// 문자열을 정수로 변환

	printf("MUL_SUM: %d \n\n", MUL_SUM(A, B));

	return 0;
}

 

c) Makefile Code : Makefile6

exe6 : MUL_SUM.o CALC_B1_1.o
	gcc -o exe6 MUL_SUM.o CALC_B1_1.o

MUL_SUM.o : MUL_SUM.c
	gcc -c MUL_SUM.c

CALC_B1_1.o : CALC_B1_1.c
	gcc -c CALC_B1_1.c

clean:
	rm -f *.o exe6

 

d) make 명령 실행 결과

 

e) 실행 파일 실행 결과

 

 

4.

a) 문제 설명

  • 명령행 인자: 정수 A
  • A가 90점 이상이면 메시지 출력: “Your grade is very excellent”
  • A가 80점대면 메시지 출력: “Your grade is good”
  • A가 80점 미만이면 메시지 출력: “You must study hard”

 

b) C Source Code

// grade.c

#include <stdio.h>

void grade(int A) {
	if (A >= 90)
		printf("Your grade is very excellent");
	else if (A >= 80)
		printf("Your grade is good");
	else
		printf("You must study hard");

	printf("\n\n");
}
// CALC_B2_1.c

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

void grade(int);

int main(int argc, char* argv[]) {
	int A;

	A = atoi(argv[1]);

	grade(A);
	
	return 0;
}

 

 

c) Makefile Code : Makefile7

exe7 : grade.o CALC_B2_1.o
	gcc -o exe7 grade.o CALC_B2_1.o

grade.o : grade.c
	gcc -c grade.c

CALC_B2_1.o : CALC_B2_1.c
	gcc -c CALC_B2_1.c

clean:
	rm -f *.o exe7

 

d) make 명령 실행 결과

 

e) 실행 파일 실행 결과

 

 

5.

a) 문제 설명

  • 키보드 입력: 정수 A
  • 누적 합 출력: (0+3) + (1+3) + ... + (A+3)

 

b) C Source Code

// ACC_SUM.c

#include <stdio.h>

int ACC_SUM(int A) {
	int sum = 0;

	for (int i = 0; i <= A; i++) {
		printf("%d + (%d + 3) = %d \n", sum, i, sum+(i+3));	
		sum += (i + 3);
	}

	return sum;
}
// CALC_A2_1.c

#include <stdio.h>

int ACC_SUM(int);

int main() {
	int A;

	printf("양의 정수를 입력하세요: ");
	scanf("%d", &A);

	if(A > 0) {
		printf("ACC_SUM: %d \n\n", ACC_SUM(A));
		return 0;
	}

	printf("다시 시도해주세요. \n\n");
	return 1;
}

 

c) Makefile Code : Makefile8

exe8 : ACC_SUM.o CALC_A2_1.o
	gcc -o exe8 ACC_SUM.o CALC_A2_1.o

ACC_SUM.o : ACC_SUM.c
	gcc -c ACC_SUM.c

CALC_A2_1.o : CALC_A2_1.c
	gcc -c CALC_A2_1.c

clean:
	rm -f *.o exe8

 

d) make 명령 실행 결과

 

e) 실행 파일 실행 결과