Layer7 3차시 과제

이동규·2026년 4월 14일

Layer7과제

목록 보기
3/22

수업정리

함수란?

수학에서

x값 하나에 y값이 하나다! => 함수

c에서

일반적으로: 괄호가 있는거

#include <stdio.h>

int main(){
	printf("potemkin buster");
}

여기에서는
main() : 프로그램 시작함수
printf() : stdio.h library에서 기본으로 제공하는 함수가 있다

함수를 쓰면

#include <stdio.h>
int no(int a){
	printf("%d\n",a);
	printf("no");
}
int main(){
	printf("potemkin buster\n");
    no(1);
}

int

반환명

no

함수명

int a

매개변수

용어

int a : 매개변수 no(1) : 인자

재귀함수

자기자신을 호출한다

int g(int k){
    if(k >= n) return 0;
    g(k-1);
    printf("*");
}

요런 느낌으로 함수가 함수안에서 자신을을 호출한다


문제풀이

void

(간략하게 이번 과제에 쓰는 부분만 찾아보았다)

void: 함수를 만들때 int 말고 쓸 수 있는 것 중 하나이다
이것은 값을 반환하지 않기에 return 뒤에 값을 입력하지 못한다.
많이 써보지 않아서 모르겠지만 int보다 쓰기 편리할때가 있는 것 같다. ex) 별찍기

1535

문제

배열에서 가장 큰 값이 처음 나타나는 위치를 출력하시오.

문제풀이

배열 입력횟수를 받아와 입력을 반복하고열 입력횟수를 받아와 입력을 반복해 배열을 받는다. 함수를 만들고 작성에 필요한 배열값 저장용 변수와 배열주소 저장용 변수를 만들고 반복문으로 배열에서 자기자신보다 큰 수를 저장하는 코드를 짠다. 자신보다 큰 수를 저장하는 로직을 만든다. 반복 종료후 주소에 1을 추가해서 반환한다. (음수인 입력값도 있으니 big는 적당히 작은 -10000으로 했다)

1535 코드

#include <stdio.h>

int n, d[110];


int f(){
    int big =-10000;
    int bigl =0;
    for(int i=0;i<n;i++){
        if(d[i]>big){
            big = d[i];
            bigl = i;
        }
    }
    return bigl+1;
}
int main()
{
  scanf("%d", &n);

  for(int i=0; i<n; i++){
    scanf("%d", &d[i]);
}
  printf("%d", f());
  return 0;
}

1552

문제

실수(real number)를 입력 받아 소수 부분만 출력하시오.

문제풀이

실수를 받아와서 받아온 실수를 길고 긴 정수(long long int)로 바꿔서 원래 수에서 뺀다.

1552 코드

#include <stdio.h>

double x;




double f(double t)
{
  return x-(long long int)t;
}
int main()
{
  scanf("%lf", &x);
  printf("%.14lf\n", f(x));
}

1859

문제

한 정수 n을 입력받아 n층의 별 삼각형을 출력하시오.
(단, 반복문은 사용할 수 없다.)

문제풀이

  1. 스캔하고 함수에 넣는다.
  2. 줄바꿈을 하는 함수로 간다. 함수가 먼저 실행되기에 줄바꿈 출력은 나중에되고 먼저 들어온 큰 k의 값이 제일 마지막에 실행된다
  3. 별찍기함수를 호출해서 별을 찍는다 이 원리도 2의 원리와 같다

1859 코드

이 사람은 void가 뭔지 몰라서 전부 int로 바꾸고 return 뒤에 0을 붙였느니
능지에 감탄한다.

#include <stdio.h>
int n;
int g(int k)
{
  if(k <= 0) return 0;
  g(k-1);
  printf("*");
}
int f(int k)
{
  if(k <= 0) return 0;
  f(k-1);
  g(k);
  printf("\n");
}
int main()
{
  scanf("%d", &n);
  f(n);
}

1954

문제

길이 n이 입력되면 역삼각형을 출력한다.

문제풀이

바로 전 문제와 같다 f(k-1)를 나중에 호출하도록 적당히 위치를 바꿔주니 출력이 문제없이 나온다

1954 코드

(이번에는 검색을 조금 하고 온 모양이다)

#include <stdio.h>
int n;
void g(int k){
    if(k <= 0) return;
    g(k-1);
    printf("*");
}
void f(int k){  
    if(k <= 0) return;
    g(k);
    printf("\n");
    f(k-1);
}
int main(){
    scanf("%d", &n);
    f(n);
}

1912

문제

n이 입력되면
n!의 값을 출력하시오.

문제풀이

  1. 입력받고 함수에 넣고 출력하는 코드를 짠다
  2. 함수는 k를 또함수에 넣어서 곱한 것을 반환하고 1과 같게되면 1을 반환해 팩토리얼을 효과적으로 계산한다.

1912 코드

#include <stdio.h>
int f(int k){  
    if(k <= 1) return 1;
    return k * f(k-1);
}
int main(){
    int n;
    scanf("%d", &n);
    printf("%d",f(n));
    return 0;
}

1920

문제

어떤 10진수 n이 주어지면
2진수로 변환해서 출력하시오.
예)
10 -----> 1010
0 -----> 0
1 -----> 1
2 -----> 10
1024 -----> 10000000000

문제풀이

  1. 입력받고 함수를 실행한다.
  2. 수를 /2해서 또 그 함수에 넣고 원래 넣은 값을 2로 나눈 나머지를(k%2) 연산해준다.
  3. 만약 k가 1이되면 1을 출력하고 종료 0이면 0을 출력하고 종료한다.

1920 코드

#include <stdio.h>
int a;
void f(int k){
    if(k == 1){
        printf("%d",1);
        return;
    }else if(k == 0){
        printf("%d",0);
        return;
    }else{
        f(k/2);
        printf("%d",k%2);
    }
}
int main(){
    scanf("%d",&a);
    f(a);
}

결과

0개의 댓글