パソコン日記

気づいたこと まとめてみる

C言語をやってみる(scanfを使ってみる)

数値や文字列を入力する

C言語でプログラムを実行したのち、コンソールから数値や文字列を入力する方法はいくつかあると思います。今回はscanfを使って数値や文字列をコンソールから受け取るプログラムを試してみたいと思います。

scanfで整数の入力

#include <stdio.h>

int main(void) {
    int d;
    printf("数字を入力してください ");
    scanf("%d",&d);
    printf("%dを入力しました\n",d);
    return 0;
}

これを実行し、数字を入力すると入力された数字が表示されました。 scanfでははじめの引数で、どのような入力を受け取るのか指定します。整数型の場合は%dです。これは文字列を表示するときと同じです。

scanfで小数(float型)の入力

scanfで小数を受け取りたいときは以下の通りになります。

#include <stdio.h>

int main(void) {
    float f;
    printf("数字を入力してください ");
    scanf("%f",&f);
    printf("%fを入力しました\n",f);
    return 0;
}

整数型の%dで指定していたところが、float型の%fになっただけです。

scanfで文字列の入力

文字列を受け取りたいときは次のようになります。

#include <stdio.h>

int main(void) {
    char s[50];
    printf("文字列を入力してください ");
    scanf("%s",s);
    printf("%sを入力しました\n",s);
    return 0;
}

文字列を入力する場合は、数値のときと違い、まずchar型の配列を宣言します。その後、その配列に入力を代入するようscanfを実行します。また、文字列の場合には"&“がなくsのみです。これはポインタが関わってきますので、気が向いたら説明したいと思います。

はてなブログでGoogleアナリティクスが反映されないときの対処法(URLを正しく設定する)

Googleアナリティクスが反映されない!

このブログでもGoogleアナリティクスを使ってみよう!と思い、早速Googleアナリティクスのアカウントを作成し、トラッキングIDを取得しました。 しかし、いつまでたっても反映されない….. なんでだ、と思い調べても全然解決できない、どうすればいいのか?と非常に悩みましたが、URLの設定を正しくすることで解決することができました!

Googleアナリティクスを正しく設定する

私が間違っていたのはデフォルトのURLの設定でした。 デフォルトのURLは、Googleアナリティクスの “管理” > “プロパティ設定” で変更することができます。 そこの設定がおそらく間違っていたときは

f:id:lxxv:20170802231037p:plain

となっていましたが、 これを

f:id:lxxv:20170802231051p:plain

に変更しました。 どうやら最後のスラッシュは入れないほうがいいみたいです。 URLって言われたらふつう入れるじゃん!と思いましたが、 これを変更したとたん、Googleアナリティクスがデータを受信し始めました。

注意

Googleアナリティクスがデータを受信していなかったのは、本当にこれが原因だったのか分かりません。もしかしたら他に原因があったのかもしれません。ただ、私がこのように設定を変更したら使えるようになりました。 また、この情報は2017年8月2日時点のもので、今後、設定方法が変更される可能性もあると思います。

C言語をやってみる(if文を使ってみる)

条件分岐をやってみる

プログラミングをしていると、必ず、ある条件によって処理を変えるということがあると思います。C言語においてそのような条件分岐の処理にはif文やswitch文などがあると思います。今回の記事ではif文を使った例をすこし示したいと思います。

if文を使ってみる。

とりあえずif文の挙動を見てみたいと思います。以下のプログラムを作って実行してみました。

#include <stdio.h>

int main(void){
    int n = 5;
    if (n > 0) {
        printf("%dは0より大きい\n",n);
    }
}
5は0より大きい

n=-2などとすると何も表示されません。 次はさらにelse文を使って次のようなプログラムを作ってみました。

#include <stdio.h>

int main(void){
    int n = 5;
    if (n >= 0) {
        printf("%dは正の数です。\n",n);
    } else {
        printf("%dは負の数です。\n",n);
    }
}

nの数が正の数だと"正の数です"、負の数だと"負の数です"と表示されます。else文を使うことによって、if文の条件にマッチしなければelse文の中が実行されます。 さらに、if、else if 、elseを組み合わせて使って次のように書いてみます。

#include <stdio.h>

int main(void){
    int n = 0;
    if (n >= 0) {
        printf("%dは正の数です。\n",n);
    } else if (n == 0) {
        printf("0です。\n");
    } else {
        printf("%dは負の数です。\n",n);
    }
}

これでif文、else if、if文が上から順番に条件にマッチしているか調べながら実行されます。 最後に、for文とif文を0~10までの数字が偶数なのか、奇数なのかを表示してみます。

#include <stdio.h>

int main(void){
    int i;
    for(i=0; i<=10; i++){
        if (i % 2 == 0) {
            printf("%dは偶数です。\n",i);
        } else {
            printf("%dは奇数です。\n",i);
        }
    }
}
0は偶数です。
1は奇数です。
2は偶数です。
3は奇数です。
4は偶数です。
5は奇数です。
6は偶数です。
7は奇数です。
8は偶数です。
9は奇数です。
10は偶数です。

if文を使って、2で割り切れる数(2で割って余りが0)の数を偶数と判断しました。

C言語をやってみる(for文を使ってみる)

C言語での繰り返し処理

同じ操作を繰り返し行いたいとき、C言語ではfor文やwhile文を使うと思います。今回はfor文を使ってみたいと思います。

for文を使ってみる

さっそくfor文を使ってみます。0から9の数字を順番に表示する以下のようなプログラムをコンパイルし、実行してみました。

#include <stdio.h>

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

すると、

0 1 2 3 4 5 6 7 8 9

と表示されました。

for文の

for(i=0; i<10; i++)

では、まず、for文のループに入る前に変数iが0で初期化されます、そして、i<10の条件を満たしていればループに入り、for文の中が実行されます。for文の中が一回実行されたあと、i++がされiの値が1増えます。また、この値がi <10の条件が満たされているか確認され、この条件を満たしている、つまり、iが10よりも小さければ再びfor文の中が実行されます。条件を満たしていなければfor文を抜けます。 ちなみにi++はインクリメントといい、i=i+1と同じ意味です。同様にi–はデクリメントといい、i=i-1と同じ意味です。これを利用し、

#include <stdio.h>

int main(void) {
    int i = 0;
    for(i=9; i>=0; i--){
        printf("%d ",i);
    }
    printf("\n");
}

このようにプログラムを書くと、

9 8 7 6 5 4 3 2 1 0

と、先ほどと逆に数字を表示することができます。

また、偶数のみを表示するため、プログラムを以下のようにしてみました。

#include <stdio.h>

int main(void) {
    int i = 0;
    for(i=0; i<10; i=i+2){
        printf("%d ",i);
    }
    printf("\n");
}
0 2 4 6 8

for文の最後の値を変えるところで、i=i+2とすることで、偶数のみをiに代入することができます。 そうすると、奇数のみを表示するには以下のようにすればよいと思います。

#include <stdio.h>

int main(void) {
    int i = 0;
    for(i=1; i<10; i=i+2){
        printf("%d ",i);
    }
    printf("\n");
}
1 3 5 7 9

iを1から始めて、2ずつ足していくことによって奇数のみを表示することができました。

for文は使いこなせると便利なので、練習していきたいですね。

C言語をやってみる(整数型(int型)の簡単な計算)

C言語で計算

前回のブログではC言語で"Hello World"を表示してみました。

1-compinfo.hatenablog.com

今回はC言語を使って、整数型の足し算、引き算、掛け算、割り算などをしてみたいと思います。

足し算、引き算

まずは足し算からやってみます。以下のようなプログラムを書いてみました。

#include <stdio.h>

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

このプログラムでは、はじめにnをint型で宣言し、次に計算結果(1+1)をnに代入しています。C言語では=(イコール)は等しいことを表すのではなく、右側の値を左側の変数に代入することを意味しています。そしてprintf()を使って、nは整数型なので%dで指定し、結果を表示しています。見やすくするため改行文字"\n"もいれています。足し算は"+“を使えばできます。

次に引き算をしてみます。先程のプログラムのn=1+1;を次のようにしてみます。

n = 4 - 1;

そうすると3と表示されます。私達が普段の計算で使う記号を用いて計算することができます。

掛け算、割り算

はじめに掛け算をしてみます。先程のプログラムを

n = 4 * 2;

とすると掛け算ができ、8と表示されます。掛け算は"*“を使います。 次に”/“を使って割り算をしてみましょう。

n = 5 / 2;

とすると、"2"が表示されます。"2.5"ではありません。"/“の計算結果は割り算の商の小数点より前の部分が返ってきます。整数型の計算なので、このような結果となります。 次に”%“を使って次のように計算をすると、

n = 5 % 2;

“1"が表示されます。これは5を2で割った余りです。”%“は割り算の余りを計算してくれます。

計算の順番

計算の順番は私達が計算するときと同じで、掛け算割り算が優先されます。例えば、

n = 1 + 2 * 3;

の計算結果は"7"です。1+2を先に計算したいときはカッコを使いましょう

n = (1 + 2) * 3;

この計算結果は"9"です。カッコの中が先に計算されているのがわかります。

以上、整数型の計算についてでした。

C言語をやってみる(Hello World)

C言語を使ってみる

プログラミング言語って何がある?と聞かれたら必ずといっていいほど「C言語」はあげられると思います。大学の情報系の学部だと、初めてのプログラミングにC言語が取り扱われることも多いのではないでしょうか。

C言語 - Wikipedia

筆者もはじめて使ったプログラミング言語C言語でした。(ちなみに筆者は大学は出ていますが、情報系の学部ではありません) しかし、Pythonを主に使うようになり、C言語はほとんど使わなくなりました。そこで、久しぶりにC言語を使い、C言語の文法やアルゴリズムを復習していきたいと思います。

とりあえず"Hello World"

とりあえず、はじめてのプログラミング言語でよくある"Hello World"を表示してみます。 ソースは以下の通り。(hello.c)

#include <stdio.h>

main()
{
    printf("Hello World\n");
}

コンパイルにはgccを使いました。

gcc hello.c

そうするとa.outのファイルが作成されているので、 ./a.outで実行しまししょう。 そうするとHello Worldが表示されました。

Pythonのリスト内包表記をマスターする(その1)

Pythonのリスト内包表記とは?

プログラミング言語Pythonではリスト内包表記がよく用いられます。そもそもリスト内包表記とはどのようなものなのでしょうか。リスト内包表記とはfor文のようなループ、if文などの条件を使って新しいリストを生成する方法です。それなら、ループをするならfor文で書けばいいのではないか?と思う方もいらっしゃると思います。私も、もともとC言語Javaをメインに使っていたので、始めはfor文を頻繁に使っていました。しかし、リスト内包表記を用いることでプログラムが読みやすく書くことができたり、また、場合によっては実行速度も上げることができます。この記事ではPythonのリスト内包表記についてみていきたいと思います。

簡単なリスト内包表記の例

まず、二乗のリストを求めるプログラムを書いてみましょう。 リストはrange(10)で生成される[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]に対する処理を行ってみます。 for文で書くと次のようになります。コマンドラインで対話的に処理しています。

n = []
for x in range(10):
    n.append(x**2)
print(n)

これを実行すると

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

となります。このfor文ではrange(10)で生成されるリストを前から順にxに代入していきfor文の中を実行するというものです。 これをリスト内包表記で表すと次のようになります。

n = [x**2 for x in range(10)]
print(n)

一行でかけました!慣れてくるとこれが見やすくなってきます。

次はif文を使ってこのリストから偶数を求めてみます。 まずはfor文を使ったら例です。

n = []
for x in range(10):
    if x%2 == 0:
        n.append(x)
print(n)

実行すると

[0, 2, 4, 6, 8]

がでてきました。2で割ったあまりが0なら偶数です。 そして、リスト内包表記を使ったものを次に示します。

n = [x for x in range(10) if x%2 == 0]
print(n)

また、一行で書くことができました。 if文を最後につけることによって、条件に一致するものだけを選び出すことができます。

リスト内包表記ははじめは、とっつきにくいところがありますが、慣れてしまえば使いやすいですし、見やすいです。ぜひ使ってみてください。

とりあえず今回はここまでです。