C programming (5) operator and operand

C言語の特徴(2)

関数型言語

コンピュータに実行してもらう命令はすべて関数の中に記述されている。関数がプログラムの実行単位。いくつかの関数を組み合わせ、コンピュータへ命令をする。最初にコンピュータが実行する関数はmain()に決まっている。

戻り値の型 関数名(引数リスト)
{
	命令文;
}

命令文(Statement)

  • 名札付き文
  • 式文
  • 複合文
  • 選択文
  • 繰り返し文
  • ジャンプ文

式(Expression)

オペランド 演算子 オペランド...

トークン(token)

コンパイラが認識する最小単位のテキスト、トークン(token)

  • キーワード
  • 識別子
  • 定数
  • リテラル文字列
  • 演算子
  • 区切り子
#include <stdio.h>

int main() {
  printf("Hello World\n");
  return 0;
}
トークンに分解
トークン トークンの種類
int キーワード
main 識別子
( 区切り子
) 区切り子
{ 区切り子
printf 識別子
( 演算子
“Hello World\n” リテラル文字列
) 演算子
; 区切り子
return キーワード
0 定数
; 区切り子
} 区切り子

トークンの間に演算子や区切り子、または空白文字で区切りする

空白文字とは、次のいずれかの文字のことを表します。

  • スペース
  • 水平及び垂直タブ
  • 改行
  • 改ページ
  • コメント

注釈(コメント)(Comment)

/* 一行コメント1 */
// 一行コメント2

/*
main.c
山田 太郎
2012年10月25日 作成
*/

/***********************/
/* main.c              */
/* 山田 太郎           */
/* 2012年10月25日 作成  */
/***********************/

// main.c
// 山田 太郎
// 2012年10月25日 作成

演算子

算術演算子

演算子 意味
+ 加算
減算
* 乗算
/ 除算
% 剰余(余り)

代入演算子

=  代入(Assignment)

複合代入演算子

演算子 意味
+= 加算代入
-= 減算代入
*= 乗算代入
/= 除算代入
%= 剰余代入

x = x + 5;

x += 5;

入力計算例

#include <stdio.h>

int main(void)
{
  int DH, ON, wa, sa, se, sh, am;
  
  printf("1つ目の数字入力:");
  scanf("%d", &DH);
  printf("2つ目の数字入力:");
  scanf("%d", &ON);
  
  wa = DH + ON;
  sa = DH - ON;
  se = DH * ON;
  sh = DH / ON;
  am = DH % ON;
  
  printf("%d+%d=%d\n",DH, ON, wa);
  printf("%d-%d=%d\n",DH, ON, sa);
  printf("%d*%d=%d\n",DH, ON, se);
  printf("%d/%d=%d...%d\n", DH, ON, sh, am);
  
  getch();
  return 0;
}

出力結果:

1つ目の数字入力:60
2つ目の数字入力:20
60+20=80
60-20=40
60*20=1200 
60/20=3...0

演習

西暦年→和暦変換するプログラムを作る

実行例:

西暦: 2016
和暦: 平成28年です

 

C exercises (4) math and utility

数学関数

数学的な計算が必要な場合に使用する命令セットです。引数と返りは全てdouble型になります。

主なもの:

  • sin(x):角度x(ラジアン)のsinの値を返す
  • cos(x):角度x(ラジアン)のcosの値を返す
  • tan(x):角度x(ラジアン)のtanの値を返す
  • pow(x,y):xのy乗の値を返す
  • exp(x):指数関数eのx乗の値を返す
  • log(x):xの自然対数の値を返す
  • log10(x):xの常用対数の値を返す
  • sqrt(x):xの平方根の値を返す
  • ceil(x):小数第一位を切り捨てした値を返す
  • floor(x):小数第一位を切り上げした値を返す
  • round(x):小数第一位を四捨五入した値を返す

サンプル:

#include <stdio.h>
#include <math.h>     //math.hのインクルードを忘れずに
 
int main(int argc, const char * argv[])
{
     
    // insert code here...
    double value = 0.5;
    printf("sin : %f\n", sin(value)); 
    printf("sqrt : %f\n", sqrt(value));
    printf("ceil : %d\n", (int)ceil(value));
    printf("floor : %d\n", (int)floor(value));
         
    return 0;
}

 文字列を数値型に変換する関数

文字列を数値型にするときに使われる関数がatoi関数(整数型に変換する場合)とatof関数(小数型に変換する場合)があります。

サンプル:

#include <stdio.h>
#include <stdlib.h>       //stdlib.hのインクルードを忘れずに
 
int main(int argc, const char * argv[])
{
     
    // insert code here...
    char a[] = "20";
    char b[] = "30";
     
    printf("(cast) a + b = %d\n", (int)a + (int)b);
    printf("(atoi) a + b = %d\n", atoi(a) + atoi(b));
     
    return 0;
}

 乱数を取得する関数

  • rand() 関数 :乱数を得る (0 .. RAND_MAX)
  • srand() 関数 : 乱数を生成するためのシードを設定する

サンプル:

サイコロの目1..6 をランダムに生成

#include <stdio.h>
#include <stdlib.h>
#include <time.h>     //time関数を使うので
 
int main(int argc, const char * argv[])
{
     
    // insert code here...
    int i;
    printf("///乱数の最大値 = %d///\n" , RAND_MAX);
 
    // 現在時刻を種に設定する
    srand((unsigned)time(NULL));
     
    for(i = 0; i < 5; i++) {
        // 乱数を取得する
        int randValue;
        double randValue1;
        randValue = rand();
        randValue1 = randValue / (double)(unsigned)(RAND_MAX + 1);
        printf("サイコロの目 : %d\n", (randValue % 6 + 1));
    }
     
    return 0;
}
練習問題:
========
0.0 .. 1.0 の数を6個ランダムに生成する

 

C# exercises (4) Slot machine

Visual Studio community 2015 アカウントについて (学内専用)

スロットマシンの作成

Slot machine

スロットのプログラムに必要な3つの部品

  • 数字を表示させるための部品
    •   → ラベル (Labelコントロール)
  • スロットを開始するための部品
    •   → ボタン (Buttonコントロール)
  • 数字の書き換えを短い間隔で行うため、その間隔を計るための部品
    •   → タイマー (Timerコントロール)

これらの部品はツールボックスに入っている

デザイン

部品の貼り付け

slot2

文字の大きさの変更

フォントの大きさを72ポイント程度にする

プログラム

コントロールとプログラムの関係

  • コントロールに対して何かをすると、イベントが発生する
    • イベントに対応したプログラムを作成する
  • フォーム上のボタン(button1)をダブルクリックすると、ボタンをクリックしたときに発生するイベントに対応したプログラム(button1_Click)が自動的に生成される

slot3

Timerコントロール

一定の間隔で処理をさせたいときに使う

  • timer1:Timerコントロールの変数名
  • Start()はタイマーを開始する命令
  • Intervalに設定している間隔で、定期的にtimer1_Tick()を発生させる
  • Intervalプロパティに設定する時間はミリ秒単位
    • Intervalプロパティに100を設定すると、100ミリ秒(0.1秒)ごとにtimer1_Tick()が呼ばれる

乱数を生成するイベントのプログラムの作成

0以上10未満の乱数を生成する

Timerコントロールをダブルクリック

  • –フォームの下に貼り付いているTimerコントロールをダブルクリックすると、自動的にtimer1_Tickというイベントのプログラムが生成される
  • –その中に、以下のプログラムを書く
  • –Next()命令により、0以上10未満の乱数を生成する
  • –それをLabelコントロールのTextプロパティに代入する
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DigitalClock
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            label1.Text = DateTime.Now.ToLongTimeString();
            Random random = new Random();
            label1.Text = random.Next(10).ToString();
        }
    }
}

実行してみる

スクリーンショット 2016-05-12 14.55.35

機能追加

音声を追加

  • 一番最初に、using System.Media; を追加
  • button1_Clickイベントの{ } の中に
SoundPlayer sound = new SoundPlayer(@“ファイル名”);
sound.Play();

(ファイル名の指定で、””の前に@を書くと、\を2つ書かなくても良くなる)

停止機能

ボタン(開始/停止)機能

 

C言語勉強関連サイト

プログラミング言語の基礎を簡単に楽しく学べるサイト

プログラミング学習サイト

  • http://dotinstall.com/ — 講義型のプログラミング学習サイト
  • http://paiza.jp — 用意された問題を解くとプログラミングスキルを6段階に評価してくれるサービスです
  • http://judge.u-aizu.ac.jp/onlinejudge/index.jsp?lang=ja — 会津大学が提供しているプログラミング問題サイトです。お題に対して問題を解いていく形式で、提出したプログラムをオンラインで採点してくれます。
  • https://www.codeeval.com/ — 約150問程度のプログラミング問題(初級、中級、上級)が掲載されており、点数が良いと海外の企業からスカウトが来るサービスです。

オンラインコンパイラ

C言語入門

参考

C# exercises (3) Common Control

ディジタル時計の作成

Create Digital Clock

デザイン

ツールボックスの中で、

  • –コモンコントロール「TextBox」
  • –コンポーネント「Timer」

Formにドラッグ&ドロップする

スクリーンショット 2016-05-02 15.27.53

Timerのプロパティ(値)を変更

スクリーンショット 2016-05-02 15.28.49

timer1のプロパティ

  • Enabled⇒ True (Enabled:タイマーを実行する)
  • Interval⇒ 1000 (Interval:タイマーの実行間隔, 1000⇒1000ms(1秒))

 

TextBoxのプロパティ

  • Font :36ポイント –文字のサイズ⇒好きなサイズに
  • ForeColor :緑 –文字の色⇒好きな色に
  • BackColor :ブラック –TextBoxの背景色⇒好きな色に
  • TextAlign :Center –文字を表示する場所⇒真ん中(Center)
  • Text: 00:00:00 –表示する文字列⇒最初は00時00分00秒をあらわす

 

スクリーンショット 2016-05-02 15.34.31

 

ディジタル時計の完成

timer1をダブルクリックすると、timer処理に関する関数(メソッド)が自動生成される

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DigitalClock
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            textBox1.Text = DateTime.Now.ToLongTimeString();
        }
    }
}

 

現在の時間をテキストボックスに表示コードの追加

スクリーンショット 2016-05-02 15.44.58