티스토리 뷰

BackEnd/C

[11일차] 함수/배열 복습

JINSUKUKU 2021. 2. 23. 17:43

📌 Unit 60. 함수

✔ 60.5 연습 문제

#include <stdio.h>

void printName()
{
	printf("Beethoven\n");
}

void printOrdinal()
{
	printf("9th\n");
}

int main()
{
	printName();
	printOrdinal();
	return 0;
}

✔ 60.6 연습 문제

#include <stdio.h>

void printHostname();
void printIPAddress();

int main()
{
 	printHostname();
 	printIPAddress();

  	return 0;
}

void printHostname(){
	printf("Saturn\n");
}
void printIPAddress(){
	printf("192.168.10.6\n");	
}

✔ 60.7 심사 문제

#include <stdio.h>

void printIPAddress(){
	printf("192.168.10.5\n");
}
void printHostname(){
	printf("Jupiter\n");	
}

int main()
{
    printIPAddress();
    printHostname();

    return 0;
}

✔ 60.8 심사 문제

#include <stdio.h>

void printName();
void printOrdinal();

int main()
{
    printName();
    printOrdinal();

    return 0;
}

void printName()
{
    printf("Beethoven\n");
}

void printOrdinal()
{
    printf("9th Symphony\n");
}

 

📌 Unit 61. 함수의 반환 값

✔ 61.6 연습 문제

#include <stdio.h>
#include <stdbool.h>

int getMana(){
	return 222;
}
float getAttackSpeed(){
	return 0.679;	
}
int isMelee(){
	return 1;	
}

int main()
{
    int mana;
    float attackSpeed;
    bool melee;

    mana = getMana();
    attackSpeed = getAttackSpeed();
    melee = isMelee();

    printf("%d\n", mana);
    printf("%f\n", attackSpeed);
    printf("%d\n", melee);

    return 0;
}

✔ 61.7 연습 문제

 

포인터 변수의 자료형을 void로 선언해 동적 메모리를 할당받으면 어떤 타입의 값이든 넣을 수 있다. 동적 메모리를 할당받아 올 때에는 형 변환이 필요한데, void 포인터는 다양한 포인터로 자동 변환되므로 형 변환 없이도 사용할 수 있다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char * getName()
{
    //char *str = (char*)malloc(sizeof(char) * 20);
    void *str = malloc(100);
    strcpy(str, "Mars");

    return str;
}

int main()
{
    char *name;
    name = getName();
    printf("%s\n", name);
    free(name);
    return 0;
}

✔ 61.8 연습 문제

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

void *allocMemory()
{
    char *ptr = (char*)malloc(100);
    return ptr;
}

int main()
{
    char *s1;

    s1 = allocMemory();
    strcpy(s1, "Uranus");
    printf("%s\n", s1);
    free(s1);

    return 0;
}

✔ 61.10 심사 문제

#include <stdio.h>
#include <stdbool.h>

double getArmor(){
    return 20.500000;
}
bool hasSlowSkill(){
    return false;
}
int main()
{
    float armor;
    bool slow;

    armor = getArmor();
    slow = hasSlowSkill();

    printf("%f\n", armor);
    printf("%s\n", slow == true ? "true" : "false");
 
    return 0;
}

✔ 61.11 심사 문제

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

char * getName(){
  void *name = malloc(100);
  strcpy(name, "Neptune");
  return name;
}

int main()
{
  char *name;
  name = getName();

  printf("%s\n", name);
  free(name);

  return 0;
}

 

📌 Unit 62. 함수에서의 매개변수

✔ 62.5 연습 문제

#include <stdio.h>

void printType(char type)
{
    printf("Type %c\n", type);
}

int main()
{
    printType('X');    
    return 0;
}

✔ 62.6 연습 문제

#include <stdio.h>

float sub(float a, float b){
	return a-b;
}

int main()
{
    float num1;
    num1 = sub(1.0f, 0.1f);
    printf("%f\n", num1);
    return 0;
}

✔ 62.7 심사 문제

#include <stdio.h>

void setAttackSpeed(float speed){
  printf("Attack Speed: %f\n",speed);
}

int main()
{
  setAttackSpeed(0.638f);
  setAttackSpeed(1.23f);

    return 0;
}

✔ 62.8 심사 문제

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

long long add(long long num1, long long num2){
	return num1+num2;
}
 
int main()
{
    long long num1, num2;
    scanf("%lld %lld", &num1, &num2);
    printf("%lld\n", add(num1, num2));
    return 0;
}

 

📌 Unit 67. 함수에서 재귀호출 사용하기

✔ 67.4 연습 문제

#include <stdio.h>

void printNumber(int count)
{
  if(count>3) return;
  printf("%d\n", count);
  printNumber(++count);
}

int main()
{
  int count = 1;
  printNumber(count);
  return 0;
}

✔ 67.5 연습 문제

 

만약 n>10일때 return 10이라고 가정하면 아래 표와 같은 순서로 재귀가 진행된다.

 

1 2 3 4 5 6 7 8 9 10
1 +       2 +      3 +      4 +      5 +      6 +      7 +      8 +      9 +       return 10
11 12 13 14 15 16 17 18 19 20
9 + 10 8 + 19 7 + 27 6 + 34 5 + 40 4 + 45 3 + 49 2 + 52 1 + 54 return 55

 

그러므로 1~100 까지의 합이 출력되는 재귀 호출 함수는 아래와 같다.

#include <stdio.h>

int sum(int n){
  if(n>100) return 100;
  return n + sum(n+1);
}

int main(){
  printf("%d\n", sum(1));
  return 0;
}

 

✔ 67.7 심사 문제

#include <stdio.h>

int sum(int n){
  if(n==1) return 1;
  return n + sum(n-1);
}

int main(){
  int n = 0;
  scanf("%d", &n);
  printf("%d\n", sum(n));
  return 0;
}

 

 

📌 Unit 36. 배열 사용하기

✔ 36.11 연습 문제

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    char c1;

    do
    {
        scanf("%c", &c1);
    } while (c=='q');

    printf("프로그램 종료\n");

    return 0;
}

✔ 36.12 연습 문제

코딩 도장의 풀이에서는 비트 연산자를 사용했다.

#include <stdio.h>

int main()
{
    int decimal = 0;
    int binary[4] = { 1, 1, 0, 1 };    // 1101 순서대로 저장됨

	int temp=1;
	for(int i=0; i<4; i++){ 
    	for(int j=3-i; j>0; j--){
        	temp *= 2*binary[i];
        }
        decimal+=temp;
        temp=1;
    }

    printf("%d\n", decimal);
    return 0;
}

✔ 36.13 심사 문제

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    int numArr[5];
    int smallestNumber;

    scanf("%d %d %d %d %d", &numArr[0], &numArr[1], &numArr[2], &numArr[3], &numArr[4]);

	smallestNumber = numArr[0];
    for(int i=0; i<5; i++){
    	if(smallestNumber > numArr[i]){
        	smallestNumber = numArr[i];
        }
    }
    printf("%d\n", smallestNumber);

    return 0;
}

 

 

 

 

 

[참고] 한빛미디어-혼자 공부하는 C언어 유튜브 강의 / 엘리스 트랙-혼자 공부하는 C언어 / 길벗-C언어 코딩 도장 / 위키백과

'BackEnd > C' 카테고리의 다른 글

[13일차] 배열과 포인터  (0) 2021.02.23
[12일차] 포인터  (0) 2021.02.23
[10일차] 제어문 복습  (0) 2021.02.20
[8일차] 포인터의 선언과 사용  (0) 2021.02.17
[7일차] 2. 문자열 관련 함수 정리  (0) 2021.02.17
댓글
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
최근에 올라온 글
글 보관함
Total
Today
Yesterday