티스토리 뷰

📌 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 |