LoginSignup
0

More than 3 years have passed since last update.

【C++】演習集1

Last updated at Posted at 2019-04-28

注意: この記事は古い方針に基づいた内容であり、閲覧しないことを推奨します。学びたい人は こちら をどうぞ。

はじめに

ここでは、C++ という言語に触れて
プログラミングを勉強する

この演習の流れとしては、

  • 問題を解くためのいろんな概念を解説
  • 覚えるためにまず手を動かす
  • 覚えたことを応用する

をやっていくうちに、

パズルのような問題を解いたり
または自分でアプリを作るときに
プログラミングで解決できるようになれるかも

プログラミングって何さ

これを作ること↓
「入力」→「システム」→「出力」

プログラミングという概念はまさにこれ

Wandbox

ウェブで C++ が書けるサイト

三へ( へ՞ਊ ՞)へ ハッハッ

まず最初は
このサイトの機能で用意したテンプレート上で
書いていってもらいます
問題が出る度にリンクがあるので解いてください

始まりの関数

関数

処理を書く場所で、
値を 0 つ以上受け取って
値を 0 ~ 1 つ返す

// Like this!
int something(int v) { ~ }
// To explain ...
int // returns
something // named
(int v) // receives
{
  // function
}

まだ自分で関数を作るところまでは行かないから
詳しくは解説していないよ

int

整数を表す型、いわば値の種類

int v; // can have:
0;
1;
-3;
+2;
401;
24;
-314;

return

関数から値を返す

return;
return 1;
return 0;

例題 1

さぁ実際に書くよ
馬鹿らしくても必ず書いて

auto echo_back(int val) {
  // val is parameter
  // Write here
  return 0;
}

ここで関数を実装せよ
val が入力される
これをそのまま返せ

ちなみにテスト用の
プログラムも仕込んである

解説

returnval と書くとこれを返せる

auto echo_back(int val) {
  return val;
}

基本のアイテムたち

四則演算

それぞれ、

  • 足し算
  • 引き算
  • 掛け算
  • 割り算
  • 剰余演算
  • 括弧式
a + b; // a plus b
a - b; // a minus b
a * b; // a times b
a / b; // a over b
a % b; // a mod b
a * (b + c); // with parenthesis

問 1

問に解説はありません
自力で解いて

auto add(int a, int b) {
  // Write here
  return 0;
}

ここで関数を実装せよ
a b が入力される
この和を返せ

問 2

auto sum_1_to(int n) {
  // Write here
  return 0;
}

ここで関数を実装せよ
n が入力される
1 から n の総和を返せ

計算式が分からなかったら検索してみよう
これ大事

double

浮動小数点数 (小数に近いやつ) を表す値の種類

double v;
// can have:
0.0;
1.;
-.3;
+2e0;
401e-8;
0.024e+5;
-3.14;

正負の演算子

+ - で数に符号をつける

double a;
+a; // 1 * a
-a; // -1 * a

問 3

auto linear_eq(double a, double b) {
  // Write here
  return 0;
}

ここで関数を実装せよ
a b が入力される
ax + b = 0 となる
x を返せ

式を x について変形してみよう

bool

正しいか正しくないかを表す値の種類

bool v;
// can only have:
true;
false;

比較演算

  • 小さい
  • 大きい
  • 以下
  • 以上
  • 等しい
  • 等しくない
// They return bool
a < b; // a less b
a > b; // a greater b
a <= b; // a less-equal b
a >= b; // a greater-equal b
a == b; // a equal b
a != b; // a not-equal b

例題 2

auto is_even(int val) {
  // Write here
  return false;
}

ここで関数を実装せよ
val が入力される
これが偶数かどうかを返せ

解説

2 で割ったあまりが 0 になるのが偶数

演算子を繋げてこうする

auto is_even(int val) {
  return val % 2 == 0;
}

問 4

auto is_odd(int val) {
  // Write here
  return false;
}

ここで関数を実装せよ
val が入力される
これが奇数かどうかを返せ

負の数の剰余はマイナスになる可能性があることに注意
つまり、val % 2 == 1 は不完全

論理演算

  • OR (論理和)
  • AND (論理積)
  • NOT (論理否定)
// They return bool
a || b; // a or b
a && b; // a and b
!a; // not a
true || false; // true
true && false; // false
!false; // true

例題 3

auto is_leap(int year) {
  // Write here
  return false;
}

ここで関数を実装せよ
year が入力される
これが閏年かどうかを返せ
閏年とは、

  1. 400 で割り切れる
  2. 100 で割り切れず 4 で割り切れる

に当てはまる年のこと。

解説

OR と AND でそれぞれの条件をつなげます

auto is_leap(int year) {
  return year % 400 == 0 // 1st condition
    || year % 100 != 0 && year % 4 == 0; // 2nd condition
}

分かれ道

分岐 if

bool a;
if (a) {
  // when a is true
}
int b;
if (b < 5) {
  // when b less than 5
}

if (真偽値) { 処理 }

真偽値が true の時に
処理が実行される

分岐時の return

bool a;
if (a) {
  // when a is true
  return;
  // this won’t run
}
// when a is false
return;

もともとそれ以降の処理は
実行されない

例題 4

auto max(int a, int b) {
  // Write here
  return a;
}

ここで関数を実装せよ
a b が入力される
このうち大きい方を返せ

解説

a より b が大きい時点で b を返せば、
あとのそれ以外の場合は a を返すだけです

auto max(int a, int b) {
  if (a < b) { return b; }
  return a;
}

問 5

auto negative(int a, int b) {
  // Write here
  return a;
}

ここで関数を実装せよ
a が入力される
正の数なら負に、負の数ならそのまま返せ

しめくくり

お疲れ様!

次回はもっとたくさんの処理を扱って、

「たくさんの入力」→「それぞれを加工するシステム」→「出力」

を実装するよ

次回もよしなに

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0