塩見周子の徒然日記

自分のことを塩見周子と思い込んでいるオタクです

4/19 AtCoder(C++、入力、出力、改行、if/else、for)

こんばんは。昨日windowsのパソコンでUbuntuをインストールしたらバチバチに重くて泣いたとーです。

C++に挑戦、ということでこれからC++のコーディングを練習します。新しい言語を学習するとなると入力、出力が最初のネックになるけどここは我慢.......。

ABC124A,ABC123A
大枠をかっこ{ }で区切ってコードを書く

入力

空白区切りの数字二つは、

#include <iostream>
int main() {
  int a,b;
  cin >> a >> b;
}

みたいな風に入力を受け取ればよい

改行区切りで数字が増えても同じようにする


出力
出力は、printf()というのとcout << ナントカ ( <というおまじないが必要
一方でprintf()は最初にinclude とするらしい (試しにやってみたらこれなくても動いたんだけど......)

また、coutは本来std::coutと書くべきだけど、最初にusing namespace std;とすればstd::の部分は省略できる
std::の部分は名前空間というらしく、coutというコマンドがstdという領域内のコマンドであることを示しているっぽい これ(名前空間)によって、例えば(こういうことをするのはまずいとは思うけど)自作のコマンドcoutを作ったとしても、std::coutとは区別ができるようになる
(全てについてstd::を省略するのは不都合が生じることもあるらしいので、using std::cout; としておけば、coutだけはstd::の部分を省略できるようになる、{ }で括った部分に入れれば、その{ }内でのみstd::が省略されるようになったりする)

結局、C言語の入出力関数(printfなど)を使用するのには #include が必要で、C++の入出力オブジェクトを使用するのには #include が必要

programming.pc-note.net

で、結局どちらを使うのがいいのかって話になると難しくて、蟻本なんかだとprintfを使ってたりする
おそらく型変換とか改行とかがやりやすいのかな?だから競プロ向けで使ってるのかもしれん とりあえずprintfでやっていく


printfでやる場合、例えば

#include <stdio.h>
int main() {
    char *str1 = "Hello";
    char *str2 = "World";
    int number = 10; 
    printf("%s %s %d \n", str1, str2, number);
}

となる

まず、charとかintとかで型宣言をしておくのはよくて、その次のprintfの中の%sとか%dとか\nとかなんやねん、って感じになるが、printf()は型を指定してprintができるということらしい

%c → char 文字
%s → char * 文字列
%d → int 10進整数
%f → float  実数

みたいな対応をしている たぶん競プロでは%cよりかは%sの方が使うんじゃないかな

で、\n(\は¥(半角)と同じ)は改行を表す特殊文字だそうです 競プロ改行が大事になりがちなので覚えます

使い方は、printf("型の宣言",適当な引数)という感じになる
a = 11として
printf("%d/n",a);
とすれば、11が出力され、その後に改行が入る
a = 11,b = appleとして
printf("%d %s\n", a,b);
とすれば、11 appleと空白区切りで出るし、%d%s\nとつなげれば11appleと出る

webkaru.net



条件分岐
if/elseの書き方は、

if (条件){
  \\ なにか
} else if (条件) {
  \\ なにか
} else {
  \\ なにか
}

という感じ(つまり一つの判定につき括弧を一つ使う)

比較演算子(以下、以上とか)はpythonと同じ


for文

簡単なコードを例にとってみる

int i;
for(i=0; i<3; i++){
   printf("%d\n",i);
}

見れば分かるように、i=0に対してiを出力しインクリメント(1加算)、というのを、i=0,1,2に対して行う
なんかi++と++iという二種類の書き方があるっぽいけど何もなければi++でいいっぽい