[C++] 02. 制御文と関数
2.1文の選択
-if文を使用して奇数と偶数を判別する
-条件が満たされているか否かに基づいて実行される部分を決定する-if文、switch文
-if文、if~else文
#include <iostresam>
using namespace std;
int main()
{
int num;
cout << "정수값 입력 : ";
cin >> num;
if (num % 2 == 1)
cout << num << " : " << "홀수" << endl;
else
cout << num << " : " << "짝수" << endl;
return 0;
}
[결과]
정수값 입력 : 123
123 : 홀수
- if ~ else if ... ドア
-if文は文-if文のif文でもよいし、else文の後のif文-{}でもよい.これは分かりやすい
#include <iostream>
using namespace std;
int main()
{
int num, remainder3;
cout << "정수값 입략 : ";
cin >> num;
remainder3 = num % 3; // 3으로 나눈 나머지
if (remainder3 == 0) // 나머지가 0
cout << num << " : 3으로 나눈 나머지가 0입니다." << endl;
else if (reaminder3 ==1) // 나머지가 1
cout << num << " : 3으로 나눈 나머지가 1입니다." << endl;
else
cout << num << " : 3으로 나눈 나머지가 2입니다. << endl;
return 0;
}
[결과]
정수값 입력 : 123
123 : 3으로 나눈 나머지가 0입니다.
-if~else文の複雑な使い方
-{}を使用して可読性を向上-インデントを適切に使用
#include <iostream>
using namespace std;
int main()
{
int num1 = 7, num2 = 7;
if (num1 == 1)
if (num2 == 2)
num1 += num2;
else // 어떤 if 문에 대한 else 문인가?
num1 -= num2;
cout << "num1 : " << num1 << endl;
return 0;
}
[결과]
num1 : 7
-スイッチドア
switch (condition) // condition : 평가 결과가 정수형 값(char, int, bool)이어야 함
{
case val1 : // val1 : 상수값 또는 상수 표현식
statements
case val2 :
statements
......
default :
statements
}
#include <iostream>
using namespace std;
int main()
{
int num, remainder3;
cout << "정수값 입력 : ";
cin >> num;
remainder3 = num % 3; // 3으로 나눈 나머지
switch (remainder3)
{
case 0: // 나머지가 0
cout << num << " : 3으로 나눈 나머지가 0입니다." << endl;
break;
case 1: // 나머지가 1
cout << num << " : 3으로 나눈 나머지가 1입니다." << endl;
break;
default: // 나머지가 2
cout << num << " : 3으로 나눈 나머지가 2입니다." << endl;
break;
}
return 0;
}
[결과]
정수값 입력 : 30
30 : 3으로 나눈 나머지가 0입니다.
2.2繰り返し文
-1~1000加算:for文
-特定の条件が満たされたときにタスクを繰り返します-文、while文、do while文の場合
#include <iostream>
using namespace std;
int main()
{
int result = 0; // 0으로 초기화
int i;
for (i = 1; i <= 1000; i++) // 1부터 100까지의 값들을
result = result + i; // Result에 더해 줌
cout << "1부터 1000까지의 합 : " << result << endl;
return 0;
}
[결과]
1부터 1000까지의 합 : 500500
-1~1000加算:while文
int main()
{
int result = 0; // 0으로 초기화
int i =1; // 1로 초기화
while (i <= 1000) // for(i = 1; i <= 1000; i++)
{
result = result + i; // 1부터 1000까지 result에 더해줌
i++
}
cout << "1부터 1000까지의 합 : " << result << endl;
return 0;
}
[결과]
1부터 1000까지의 합 : 500500
-1から1000加算:do~while文
int main()
{
int result = 0; // 0으로 초기화
int i = 1; // 1로 초기화
do // while (i <= 1000)
{
result = result + i // 1부터 1000까지 result에 더해 줌
i++
} while (i <= 1000);
cout << "1부터 1000까지의 합 : " << result << endl;
return 0;
}
[결과]
1부터 1000까지의 합 : 500500
-繰り返し文の選択方法
-特定範囲のデータ処理:for文-範囲が指定されていない繰返しタスク:while文
-1つ、2つ、3つ、4つまたは5つの文字列を入力し、その数で文字列を出力します->5で終了
#include <iostream>
using namespace std;
int main()
{
int result =0; // 0으로 초기화
int i = 1; // 1로 초기화
do // while(i <= 1000)
{
result = result + i; // 1부터 1000까지 result에 더해 줌
i++
} while(i <= 1000)
cout << "1부터 1000까지의 합 : " << result << endl;
return 0;
}
2.3四半期の記事
-ドアを破って
-自分を含む重複文から逃れる-重複文が重複して現れる場合、自分を含む重複文の中で最も細い重複文から逃れる
int main()
{
for(int dan = 2; dan <= 9; dan++)
{
for(int i=1; i<=9; i++)
{
if(dan % 2 == 0) // 짝수단이라면
break; // 가장 가까운 for문을 빠져나옴
cout << dan << "*" << i << "=" << dan * i << endl;
}
}
return 0;
}
-文の続行
-繰り返し文に含まれるcontinue文の後の文を実行せずに、
int main()
{
for(int dan =2; dan<=9; dan)
{
if(dan % 2 == 0) // 짝수단이라면
continue; // 해당 단(i)을 skip함
for(int i = 1; i <= 9; i++)
{
cout << dan << "*" << i << "=" << dan * i << endl;
}
}
return 0;
}
-返信
-関数終了時に特定の値を返します-関数の戻りタイプがvoidの場合、関数終了
void GuGu(int dan)
{
if(dan % 2 == 0) // 짝수단이라면
return; // 출력하지 않고 바로 반환
for(int i = 1; i <= 9; i++)
{
cout << dan << "*" << i << "=" << dan * i << endl;
}
}
int main()
{
for(int dan = 2; dan <= 9; dan++)
GuGu(dan);
return 0;
}
-ゴドア
-特定のラベルに移動(ある場合)
int main()
{
for(int dan = 2; dan <= 9l dan++)
{
if(dan % 2 == 0) // 짝수단이라면
goto next; // next 레이블로 점프
for(int i = 1; i <= 9; i++)
cout << dan << "*" << i << "=" << dan * i << endl;
next: ; // next 레이블
}
return 0;
}
2.4関数と変数
-減算計算機の作成
-関数外-関数共有
-関数にあり、パラメータ-この領域でのみ使用可能
#include <iostream>
using namespace std;
int g_result = 0; // g_result : 전역변수
void Plus(int num) // num : 지역변수
{
g_result += num;
}
void Minus(int num)
{
g_result -= num;
}
int main()
{
Plus(5); Minus(10); Minus(3); Pluse(4);
cout << "최종 결과 : " << g_result << endl;
return 0;
}
[결과]
최종결과 : -4
-変数の宣言位置
-ブロック内:{}-制御文
int g_var1; // 전역변수
int Sum(int num1, int num2) // 함수 매개변수
{
g_var1 = 0;
for(int i = num1; bool j = (i <= num2); i++) // for 초기화문 및 조건문
g_var1 += i;
while(bool i = (num1 <= num2)) // while 조건문
{
int temp = num2; // while 복합문 내 변수
g_var1 += temp;
num2--;
}
return g_var1;
}
int g_var2;
int main()
{
int num1, num2; // 전역 변수
cout << "정수 2개 입력 : "; // 함수 내 변수
cin >> num1 >> num2;
g_var2 = Sum(num1, num2);
int num3 = g_var; // 함수 내 변수
cout << "최종 결과 : " << num3 << endl;
return 0;
}
[결과]
정수 2개 입력 : 10 20
최종 결과 : 330
-変数の使用可能領域(Scope)
-変数を宣言した後で使用可能-変数を宣言した地域でのみ使用可能
-ある地域の変数が以前に宣言された変数と同じ名前で宣言された場合、その地域の以前の変数は使用できません->グローバル変数使用可能
int var1 = 0;
int main()
{
int var2 = 100;
int var1 = 200;
{
int var2 =200;
int var3 = var1 + var2;
var1 = var2 + var3;
}
cout << "var1 : " << var1 << endl; // 어떤 var1인가?
cout << "var2 : " << var2 << endl; // 어떤 var2인가?
// cout << "var3 : " << var3 << endl;
// 20라인의 var3은 해당 지역 종료 후 사라짐
cout << "::var1 : " << ::var1 << endl; // 전역 변수 var1
return 0;
}
[결과]
var1 : 600
var2 : 100
::var1 : 0
-変数の寿命(ライフサイクル)
int g_var; // 자동으로 0으로 초기화
void Func(int param)
{
static int s_num = 100; // static 지역 변수
int a_num = 100; // auto 지역 변수
g_var++;
s_num++;
a_num++;
cout << "g_var : " << g_var << ", ";
cout << "s_num : " << s_num << ", ";
cout << "a_num : " << a_num << endl;
}
int main()
{
for(int i = 0; i < 5; i++)
Func(i);
return 0;
}
[결과]
g_var : 1, s_num : 101, a_num : 101
g_var : 2, s_num : 102, a_num : 101
g_var : 3, s_num : 103, a_num : 101
g_var : 4, s_num : 104, a_num : 101
g_var : 5, s_num : 105, a_num : 101
2.5関数過負荷
-Sum関数の作成
-int:Isum関数-double:DSum関数
->関数リロード
#include <iostream>
using namespace std; // std라는 namespace의 내용을 불러옴
int ISum(int num1, int num2)
{
int result = 0;
for(int i = num1; i <= num2; i++) // num1 <= num2 로 가정
result += i;
return result;
}
double DSum(double num1, double num2)
{
return(num1 + num2);
}
int main()
{
cout << "ISum(1, 10) : " << ISum(1, 10) << endl;
cout << "DSum(1.0. 10.0) : " << DSum(1.0, 10.0) << endl;
return 0;
}
[결과]
ISum(1, 10) : 55
DSum(1.0, 10.0) : 11
-関数リロードを使用してSum関数を作成
-同じ名前で複数の関数を作成できます-関数を区別します
- int Func(int n); - char Func(int n);
->オーバーロードではありません
int Sum(int num1, int num2)
{
int result = 0;
for(int i = num1; i <= num2; i++) // num <= num2 로 가정
result += i;
return result;
}
double Sum(double num1, double num2)
{
return(num1 + num2);
}
int main()
{
cout << "Sum(1, 10) : " << Sum(1, 10) << endl;
cout << "Sum(1.0, 10.0) : " << Sum(1.0, 10.0) << endl;
return 0;
}
[결과]
Sum(1, 10) : 55
Sum(1.0, 10.0) : 11
2.6デフォルトパラメータ
-べき乗関数を作成し、二乗を反復します。
-関数リロードを使用してPower関数を作成
- int Power(int x, int y = 2); - Power(3)->3リターン2勝-Powerer(3,4)->3リターン4勝
-最後からデフォルトのパラメータ値を設定できます.
-ぼやけた状況に注意
int Power(int x) // x의 2승
{
return(x * x);
}
int Power(int x, int y) // x의 y승
{
int result = 1;
for(int i = 0; i < y; i++)
result *= x;
return result;
}
int main()
{
cout << "Power(3) : " << Power(3) << endl; // 3의 2승
cout << "Power(3, 3) : " << Power(3, 3) << endl; // 3의 3승
return 0;
}
[결과]
Power(3) : 9
Power(3, 3) : 27
2.7再帰呼び出し
-合計2つの数の値
-現在の実行ポイントまで前の関数を再呼び出し-再帰関数:再帰呼び出しを含む関数
-再帰関数の使用
1+2+3+4+5+6+7+8+9+10=>1,10間の和
int Sum(int num1, int num2)
{
if(num1 == num2)
return num2;
else
return (num1 + Sum(num1 + 1, num2));
}
int main()
{
cout << "Sum(1, 10) : " << Sum(1, 10) << endl;
cout << "Sum(10, 100) : " << Sum(10, 100) << endl;
return 0;
}
[결과]
Sum(1, 10) : 55
Sum(10, 100) : 5005
-再帰コールを使用して階乗を取得
-コールバックの練習に関する一般的な問題-トラブルシューティング(5)=5 4 3 2 1トラブルシューティング(0)=1
int Fact(int num)
{
if(num == 0)
return 1;
else
return(num * Fact(num - 1));
}
int main()
{
cout << "3! = " << Fact(3) << endl;
cout << "%! = " << Fact(5) << endl;
cout << "0! = " << Fact(0) << endl;
return 0;
}
[결과]
3! = 6
5! = 120
0! = 1
2.8行内関数
-マクロ関数と一般関数の復習
// 매크로로 구현한 경우
#defune MIN(X, Y) ((X) < (Y) ? (X) : (Y)) // 최소값 반환
Int main()
{
cout << MIN(4, 5) << endl;
cout << MIN((2 + 3), (1 + 2)) << endl;
return 0;
}
// 함수로 구현한 경우
int MIN(int X, int Y)
{
return(X < Y ? X : Y); // 최소값 반환
}
int main()
{
cout << MIN(4, 5) << endl;
cout << MIN((2 + 3), (1 + 2)) << endl;
return 0;
}
[결과]
4
3
-インライン関数
-マクロと似ています:関数呼び出し文を関数に置換するコードを要求します-コンパイラによって決定されます-関数定義時にインラインキーワードを追加します-インラインint MIN(int X,int Y){return((X)<(Y):(Y)}
inline int Fact(int num) // 재귀 호출 함수
{
return((num == 0) ? 1 : num * Fact(num - 1));
// 5! = 5 * 4!
}
int main()
{
cout << "5! = " << Fact(5) << endl;
return 0;
}
[결과]
5! = 120
2.9ネーミングスペース:クラシックC++と標準C++
-ネームスペースが必要
-特定の識別子で構成されるグループ(複数の識別子を1つのグループに結合する)
-ネーミングスペースの作成と使用
-ネームスペース名{..}
-ネームスペース名:::識別子
-::Sum(3,4)と併用
namespace Microsoft // Microsoft 네임스페이스 작성
{
int g_var;
int Plus(int x, int y) {return(x + y);}
int Minus(int x, int y) {return(x - y);}
}
namespace Google // Google 네임스페이스 작성
{
int g_var;
int Plus(int x, int y) {return(x + y);}
int Minus(int x, int y)
}
int Google ::Minus(int x, int y) // Google 네임스페이스의 Minus 함수 작성
{
return(x - y);
}
int main() // 네임스페이스 이름으로 접근
{
Microsoft::g_var = Microsoft::Minus(5, 2);
cout << Microsoft::g_ var << endl;
return 0;
}
[결과]
3
-宣言の使用
-現在のネーミングスペースで別のネーミングスペースの識別子を使用-キーワードを使用したネーミングスペースで有効-Microsoftを使用::Minus;using namespace Microsoft; -> Microsoftのすべての識別子
#include <iostream>
// using namespace std;
using std::cout; // 전역예서 cout를 사용할 수 있음
using std::endl; // 전역에서 endl을 사용할 수 있음
int main()
{
cout << "표준 C++" << 두이;
// std::cout << "표준 C++" << std::endl; // using 선언 없을 떄
}
[결과]
표준 C++
-既存のCライブラリをC++で使用する方法
-既存のCライブラリ-C++スタイルを保持します.ヘッダファイルにはC接頭辞があり、拡張子がありません(たとえばcstdio)-ヘッダファイルには拡張子がありません
-宣言を使用して既存のバージョンと同じにします-Visual c++6.0:stdioのみ.hファイルのみ含む->使用不可宣言
// #include <stdio.h>
#include <cstdio>
using namespace std;
int main()
{
printf("C++ Programming\n");
return 0;
}
[결과]
C++ Programming
-ネストされたネーミングスペース
-ネーミングスペース内で別のネーミングスペースを宣言できます-CompanyB::DeptC::Func 1()とともに使用
namespace CompanyA // 네임스페이스 CompanyA 작성
{
int g_var_b
void Func1() { cout << "CompanyA::Func1" << endl; }
void Func2() { cout << "CompanyA::Func2" << endl; }
}
namespace CompanyB // 네임스페이스 CompanyB 작성
{
using namespace CompanyA; // 네임스페이스 CompanyA를 CompanyB로 포함
int g_var_b;
void Func1() {cout << "CompanyB::Func1" << endl;}
namespace DeptC // Company 내에 네임스페이스 DeptC 작성
{
void Func1() {cout << "CompanyB::DeptC::Func1" << endl;}
}
}
int main()
{
CompanyB::Func1();
CompanyB::Func2(); // 실제로는 CompanyA의 Func2 함수 실행
CompanyB::DeptC::Func1();
return 0;
}
[결과]
CompanyB::Func1
CompanyA::Func2
CompanyB::DeptC::Func1
Reference
この問題について([C++] 02. 制御文と関数), 我々は、より多くの情報をここで見つけました https://velog.io/@jyj1055/C-02.-제어문과-함수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol