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) 실행 파일 실행 결과