News

C programming (2) Create C Programs

C言語の特徴(1)

関数型言語

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

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

コンパクトな言語仕様

予約語(キーワード)は各種の指示を行う命令。全部で32個。このなかには「画面に文字を表示する」とか「ディスクにデータを書き込む」などという「入出力」の機能はない。すべて「関数」として実現されている。このような基本的な関数がないとコンピュータとやり取りできないので、必ず標準ライブラリ関数として予め用意されている。

#include <stdio.h>

Cプログラムの作成

C プログラムの作成手順

文字の並びとして作成したソースプログラムを、コンピュータが理解できる形式に変換する

compile

C プログラミングを書くための約束事

  1. 基本は半角英数字で書く
  2. 大文字と小文字は別の文字
  3. 文はセミコロンで区切る
  4. 余計なことは書かない
  5. 余計なことは「コメント」で

Cpadの使い方

BCPAD

(練習1)文字列の表示

  • C言語はmain()関数ではじまる
  • C言語の標準関数はヘッダファイルに記述されている
  • ヘッダファイルをインクルードするにはプリプロセッサ命令 #include をソースの先頭で使う
// test1.c 
// 全角と半角の入力に注意
// { {  (((   \\\\\\n
//これがさいしょのぷろぐらむ
#include <stdio.h>
int main( )
{
   printf("おはよう  \n");
   printf("こんにちわ\n");
   printf("こんばんわ\n");
   getchar( );
   return 0;
}

日本語環境では、バックスラッシュ(\)の表示は円マーク(¥)になる。

スクリーンショット 2016-04-15 10.43.20

演習環境

  • ソースコードの作成 CPad
  • ソースコードの名前Test1.c で保存. (ファイルは英数字は無難)
  • ソースコード必ず.cの拡張子つける.
    (つけないと.cppになり、思わぬエラーに見舞われる)
  • ソースコードの置場 C:\Users\Student\Documents\C

画面が一瞬で消えてしまい、実行結果がわかりません。

次の命令をプログラムの最後に入れると実行画面を一時停止できます。

int main(void)
{
  /* 他の処理 */

  fflush(stdin); 
  getchar(); 

  return 0;
}

 

C exercises (1) guidance

C言語プログラミングⅡの試験解説

C言語検定試験について

試験名

C言語プログラミング能力認定試験
(C-Language Programming Skills Qualification Test)

試験目的

C言語を駆使して応用プログラム(言語処理系、ユーティリティなど)を作成する能力を認定します。

認定基準

一級 C言語を駆使し、応用プログラム(言語処理系、ユーティリティなど)が作成できる能力を有する。

また使用しているOSについて理解をしている。

二級 小規模のプログラム(500行程度)が適切に(理路整然、簡潔、正しく、速く)書ける。

また各種基本アルゴリズムを理解している。

三級 C言語の概念を理解し、簡単なプログラムが書ける。

 

付録

プログラミング関連の資格

  1. Oracle Certified Java Programmer
  2. C言語プログラミング能力認定試験
  3. Ruby技術者認定試験制度
  4. ORACLE MASTER Silver Oracle PL/SQL Developer
  5. IPA基本情報処理技術者試験
  6. IPA応用情報処理技術者試験
  7. マイクロソフト認定ソリューション デベロッパー (MCSD)
  8. CIW Web Development Professional Certification
  9. 情報検定(J検)
  10. JSTQBテスト技術者資格認定

参考サイト:

  • http://techacademy.jp/magazine/894

2015年の人気プログラム言語比較

言語の特徴を表にまとめてみました。

用途 学習難易度 年収 求人数 将来性
C 制御系、組込み系 ★★★★★ 普通 少ない
Java 汎用的だがWeb系
の開発が多い
★★★ 普通 多い ★★
PHP Web系 ★★ 普通 多い ★★
Ruby 汎用的だがWeb系
の開発が多い
★★★ 少ない ★★★
Python 汎用的 ★★★ 少ない ★★★★
Swift iPhoneアプリ ★★★★ 多い ★★★★★

参考サイト:

  • https://toiroha.jp/article/detail/32380
  • https://blog.codecamp.jp/programming_language_2015

WEBシステムの開発会社でもC言語が見直されている!?

OSやメモリを強く意識したC言語は高速、省資源。

ある程度の規模までのWEBシステムの場合は、
もちろんPHPやJavaといった言語が使用されますが、
大人数が同時に使用する、巨大なデータベースの場合、
核となる部分はC言語の方が適している場合もあるそうなのです。

なぜ、JavaではなくC言語なのでしょうか。

Javaの特徴でもあるガーベジコレクション(自動でメモリを開放してくれる機能)が原因で不具合が発生したことがあるそうです。

メモリを潤沢に使い、使用後も特に意識することを必要としないJavaという言語。
それに対してC言語は、メモリの管理は自分で行うことが前提の言語なのでメモリの取得と解放の手順は自分で記述しなければなりませんが、自分で記述した通りに動作させることができます。

参考サイト:

  • http://shinjuku.kenschool.tv/2013/03/15/web%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E9%96%8B%E7%99%BA%E4%BC%9A%E7%A4%BE%E3%81%A7%E3%82%82c%E8%A8%80%E8%AA%9E%E3%81%8C%E8%A6%8B%E7%9B%B4%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B/

[BCC32]Error on JP programming

Hello World例

正しいhello.c。カーソルは位置を注意してください。Pは5:5の位置にある。

image

コンパイルと実行する様子

典型的なエラー

初めてCのプログラミングは なかなかうまく行かないかも知れない。
ここではHello World プログラムの典型的な間違い例をいくつか紹介する。

 

半角引用符「”」ではなく全角引用符「”」に

右の引用符は全角引用符「”」になっている

image

 

全角スペースが用いられ

全角スペースが用いられている、これはなかなか探しにくい。

カーソルは位置を注意してください。Pは5:3の位置にある。

(半角のスペースなら、Pは5:5の位置にある。)

image

セミコロン「;」の付け忘れ

 

セミコロン「;」の付け忘れである。

image

C# programming exercises

【授業の概要】

 比較的簡単に自分が作成したいWindowsアプリを開発できるVisual C# を無料2015 Visual Studio Communityの統合開発環境を使い学習する。 開発現場でも使われているVisual Studioの使い方やコンポーネント指向やオブジェクト指向を理解できるように、GDI+ APIを使ってGUIのあるプログラムで実践的に学習していく。
簡単ながら、応用しやすく、興味がもてるような題材を使う。自宅のWindowsPCを持っている学生はインストールして実習することで理解が深まる。

【授業要旨】

【テキスト】

回数 題目 授業内容 学習課題 予習時間(分) 復習時間(分)
1 ガイダンス 学習目的 学習目的,  .NET Frameworkとは    VSCommunity開発環境 授業内容を復習する 60
2 イベントドリブンとは ボタンクリックでメッセージボックス に表示 配布教材を読む
授業内容を復習する
30 60
3 ツールボックス ツールボックスの使い方(コモンコントロールTextBox、コンポーネントTimer)デジタル時計の作成 配布教材を読む
授業内容を復習する
30 60
4 GUI 出力 長方形、直線の描画 配布教材を読む
授業内容を復習する
30 60
5 コンソールアプリ キー入力 コンソール出力  CSCPAD 配布教材を読む
授業内容を復習する
30 60
6 マウスを使ったアプリ マウスダウンイベント 配布教材を読む
授業内容を復習する
30 60
7 クラス利用 プロパティとメソッド  変数とデータ型  textBoxと計算プログラム 配布教材を読む
授業内容を復習する
30 60
8 メソッドの使い方 3科目の平均点を表示するプログラム 配布教材を読む
授業内容を復習する
30 60
9 制御構造  配列 foreach文 2つのFormを持つプログラム 1次元配列  構造体 配布教材を読む
授業内容を復習する
30 60
10 オブジェクト指向プログラミング1 クラス  getとset   コンストラクター クラスの継承 ( 名前,生年月日,住所表示プロ) 配布教材を読む
授業内容を復習する
30 60
11 オブジェクト指向プログラミング2 オーバーライド ( 名前,生年月日,住所表示プログラムの続き) 配布教材を読む
授業内容を復習する
30 60
12 総合演習 y=ax^n  のグラフの表示 (pictureBox) 配布教材を読む
授業内容を復習する
30 60
13 課題演習1 簡易なデジタイザとデータのグラフ表示 配布教材を読む
授業内容を復習する
30 60
14 課題演習2 GUIを扱うアプリケーション1  メニュー 配布教材を読む
授業内容を復習する
30 60
15 課題演習3 GUIを扱うアプリケーション2 ファイル操作 授業内容を復習する 30 60

 

参考

C programming exercises

【授業の概要】

コンピュータプログラム開発言語の中で広く利用されているC言語をCプログラミング開発環境ソフト:
CPad for Borland C++ Compilerを使った一人一台のPCを使い実習により学びます. 毎回問題に取り組み理解を深めます。復習問題としてプログラミング課題を出題する。

【授業要旨】

回数 題目 授業内容 学習課題 予習時間(分) 復習時間(分)
1 ガイダンス 学習目的 C言語プログラミングⅡの試験解説   C言語検定試験について 授業内容を復習する 60
2 標準ライブラリ関数1 標準入出力関数 テキスト(P186-193)を読む
授業内容を復習する
30 60
3 標準ライブラリ関数2,3 文字列操作関数  文字操作関数 テキスト(P194-208)を読む
授業内容を復習する
30 60
4 標準ライブラリ関数4,5 数学関数  一般ユーテリティ関数 atoi atof rand srand テキスト(P209-224)を読む
授業内容を復習する
30 60
5 ポインタの仕組み アドレスとは テキスト(P225-233)を読む
授業内容を復習する
30 60
6 ポインタの仕組み ポインタで変数を指す テキスト(P234-238)を読む
授業内容を復習する
30 60
7 ポインタの仕組み ポインタで配列を指す テキスト(P239-245)を読む
授業内容を復習する
30 60
8 ポインタの仕組み ポインタの配列 テキスト(P246-254)を読む
授業内容を復習する
30 60
9 ポインタのまとめ ポインタを使ったプログラムをグループで作成する 授業内容を復習する 30 60
10 関数の自作 関数の基本 Void type関数 関数へ値を渡す テキスト(P255-276)を読む
授業内容を復習する
30 60
11 関数の自作 関数に配列を渡す  再帰関数 テキスト(P277-288)を読む
授業内容を復習する
30 60
12 関数の自作 main関数への引数 適用範囲と記憶クラス テキスト(P288-302)を読む
授業内容を復習する
30 60
12 関数のまとめ 関数を使ったプログラムをグループで作成する 授業内容を復習する 30 60
14 ビットを意識する 整数型 浮動小数点型 テキスト(P304-314)を読む
授業内容を復習する
30 60
15 前期のまとめ まとめと総括。小テストの実施 授業内容を復習する 30 60

【テキスト】

速習C言語入門―脳に定着する新メソッドで必ず身につく [第2版]

C programming (1) Guidance

[災害時の避難経路の確認]

C言語ガイダンス (2016A-C言語 I授業

学習目的

  • プログラミングは楽しい
  • 資格取得
  • 就職

情報工学系科目のC言語の位置づけ

  • カリキュラム
  • C言語プログラミング能力認定試験(C言語検定)
  • 基本情報技術者試験

プログラミング言語の歴史

  • アセンブラ→C→C++→Java→C#

どのプログラミング言語が話題になっているか? 順位
TIOBE Programming Community Index

TIOBE Programming Community Index , PCI値は、複数の検索エンジンの検索結果から対象とするプログラミング 言語がどれだけ話題になっているかをインデックス化したの。TIOBE Softwareでは毎月中旬に分析結果を公開し ている。 http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

PCの使い方、先生PCからのFile受信

  • PC Windows7
  • フォルダー(Folder) ⇒ 箱
  • ファイル(File) ⇒ 文書
  • マイ ドキュメントの中にCソース、pdf、書類を置くこと
  • デスクトップにはショートカット
  • 文字入力
    • 半角⇔全角 を理解  ああ aaa
    • アルファベット入力⇒日本語変換に慣れるようにする
  • マウス「クリック」操作
  • ファイルの移動  ⇒「ドラッグ・アンド・ドロップ」操作
  • 文字列やファイルのコピー ⇒「コピー ・アンド・ペースト」操作
  • ctrl+C , ctrl+V , ctrl+A
  • 初めわからなくても調べる努力は大事 ⇒情報知性の向上

開発用ソフト

  • Borland C++ Compiler 5.5
  • BCPad

CPad 使い方

BCPAD

http://chenlab.net/2016/04/04/how-to-use-cpad/

シラバス

C programming

【授業の概要】

コンピュータプログラム開発言語の中で広く利用されているC言語をCプログラミング開発環境ソフト:
CPad for Borland C++ Compilerを使った一人一台のPCを使い実習により学びます. 毎回問題に取り組み理解を深めます。復習問題としてプログラミング課題を出題する。

【授業要旨】

回数 題目 授業内容 学習課題 予習時間(分) 復習時間(分)
1 ガイダンス 学習目的 情報工学系科目のC言語の位置づけ CPad開発環境 PCを持っている学生は開発環境をインストする 60
2 C言語の基本作法 Cプログラムの作成 文字列の表示
printf関数:書式化して表示を行う関数
テキスト(P2-9)を読む
授業内容を復習する
30 60
3 C言語の基本作法 変数と宣言 代入 初期化 テキスト(P10-11)を読む
授業内容を復習する
30 60
4 C言語の基本作法 scanf関数:読込みを行う関数
puts関数:表示を行う関数
テキスト(P12-16)を読む
授業内容を復習する
30 60
5 演算と型 演算子とオペランド テキスト(P17-24)を読む
授業内容を復習する
30 60
6 演算と型 型と演算 テキスト(P24-34)を読む
授業内容を復習する
30 60
7 1回~6回までのまとめ 演算に関する演習問題をグループで解く 授業内容を復習する 30 60
8 プログラムの流れの分岐 if文 ブロック複合文  if else 文 テキスト(P35-44)を読む
授業内容を復習する
30 60
9 プログラムの流れの分岐 if ~else~if~ else~ 文
if文の ネスト 条件演算子
テキスト(P45-53)を読む
授業内容を復習する
30 60
10 プログラムの流れの分岐 switch文  break 文 テキスト(P54-58)を読む
授業内容を復習する
30 60
11 プログラムの流れの繰返し do ~ while文 テキスト(P60-67)を読む
授業内容を復習する
30 60
12 プログラムの流れの繰返し while文  for文とwhile文 テキスト(P68-73)を読む
授業内容を復習する
30 60
13 プログラムの流れの繰返し for文 for文と配列 for文の多重ループ テキスト(P74-76)を読む
授業内容を復習する
30 60
14 プログラムの流れの繰返し 多重ループ テキスト(P78-85)を読む
授業内容を復習する
30 60
15 前期のまとめ まとめと総括。小テストの実施 授業内容を復習する 30 60

 

【テキスト】

新・明解C言語 入門編 (明解シリーズ)

参考:

 

[BCC32]How to use Cpad

Cpad とは

CPad for C# .NET(以下CSCPad or CPad)は、
Microsoft社のC#実装系「C# .NET」用のC#開発環境です。
GUI環境で簡単にC#プログラミングができます。

簡単に「コンパイル」&「実行」ができるので、プログラミング初心者の
学習用途はもちろん、ちょっとしたテストコードの実行に手間を
かけたくない中上級者にとっても有用なツールとなっています。

BCPadのインストール

Cドライブ下にbcpad231フォルダーをコピー

cpad.exe をダブルクリックして実行します

立ち上げると設定のパネルが出てくる。

コンパイラのパス

C:\borland\bcc55\Bin\bcc32.exe を(入力するか)参照する。

ヘルプファイルのパス

C:\bcpad231\cpad_manual.html

標準のデータ保存フォルダ

C:\Users\student \Documents\C (studentの場合)

バックアップフォルダなしです。

Cpadの使い方

デスクトップから、下記のアイコンを探して、ダブルクリックで、Cpadを起動してください。

BCPAD

(似ているアイコンがあるので、アイコンにC++と書いてあるの方が正解です)

CPad01

Cpadのカスタマイズ

文字と背景色が変更できます、すきのように変更してください。

「メニュー」ー「実行」ー「設定」-「フォント」順に[フォント]ページを開き

スクリーンショット 2016-04-15 10.32.48

ページの説明:

[エディタフォント]

エディタのフォントを指定します。

[メッセージのフォント]
メッセージウィンドウ・ファイル検索結果ウィンドウのフォントを指定します。

[文字色]
文字色を指定します。

[背景色]
背景色を指定します。

[選択領域の文字色]
選択領域の文字色を指定します。

[選択領域の背景色]
選択領域の背景色を指定します。

[改行マークの色]
改行マーク・[EOF]マーク・Tabマーク・全角空白を表示する場合の色を指定します。

[標準の色設定に戻す]
CPadデフォルト(インストール時)の色指定に戻します。

設定例:

キャプチャ1

[BCC32]Install Borland C++ Compiler 5.5

Borland C++ Compiler 5.5開発環境

Windows PCを持っている学生は開発環境をインストールする

Borland C++ Compiler 5.5のインストール手順

https://www.embarcadero.com/jp/free-tools よりダウンロード

大まかな流れ

  1. 圧縮ファイル「freecommadlinetoos」の解凍
  2. インストーラー「freecommandlinetools2」 の起動
  3. 使用許諾契約の同意
  4. コンパイラのインストール先の指定
  5. コンパイラのインストール開始
  6. インストール終了

freecommandlinetools2.exe を実行してください。[同意する]ボタンを押して先へ進んでください。

コマンドラインツールをインストールしたいドライブとフォルダを選択します。

c:BorlandBcc55Bin

がインストール先です。

C:borlandbcc55Binbcc32.exe

とインストールされます。

次にbcc32.cfg と ilink32.cfg のファイルをC:borlandbcc55Binの中にいれます。

( bcc32.cfgファイルは,Include および Lib パスのコンパイラオプション(コンパイラの -I および -L スイッチ)を設定するものです。

bcc32.cfgファイルには

-I”c:BorlandBcc55include”

-L”c:BorlandBcc55lib” と書かれています。

ilink32.cfg ファイルは,Lib パスのリンカオプションを設定するものです。-L”c:BorlandBcc55lib” と書かれています。)

 

コマンドラインでコンパイルする場合、環境変数「PATH」に”c:BorlandBcc55bin”を追加する必要

バージョン情報

> >bcc32
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Syntax is: BCC32 [ options ] file[s] * = default; -x- = turn switch x off
 -3 * 80386 Instructions -4 80486 Instructions
 -5 Pentium Instructions -6 Pentium Pro Instructions
 -Ax Disable extensions -B Compile via assembly
 -C Allow nested comments -Dxxx Define macro
 -Exxx Alternate Assembler name -Hxxx Use pre-compiled headers
 -Ixxx Include files directory -K Default char is unsigned
 -Lxxx Libraries directory -M Generate link map
 -N Check stack overflow -Ox Optimizations
 -P Force C++ compile -R Produce browser info
 -RT * Generate RTTI -S Produce assembly output
 -Txxx Set assembler option -Uxxx Undefine macro
 -Vx Virtual table control -X Suppress autodep. output
 -aN Align on N bytes -b * Treat enums as integers
 -c Compile only -d Merge duplicate strings
 -exxx Executable file name -fxx Floating point options
 -gN Stop after N warnings -iN Max. identifier length
 -jN Stop after N errors -k * Standard stack frame
 -lx Set linker option -nxxx Output file directory
 -oxxx Object file name -p Pascal calls
 -tWxxx Create Windows app -u * Underscores on externs
 -v Source level debugging -wxxx Warning control
 -xxxx Exception handling -y Produce line number info
 -zxxx Set segment names

 

Hello World

参考:

  • http://8cmp.blog.fc2.com/blog-entry-40.html -【C言語】 Borland C++Compiler 5.5 日本語版のダウンロード/インストール方法
  • http://www.chem.scphys.kyoto-u.ac.jp/nonnonWWW/ogawara/lecture/borland.html – Borland C++ Compiler 5.5をインストールする

15.Summary

Webアプリケーション作成(コーディング・テスト、デバッグ、仕上げ)、全員発表する

発表課題: オープンデータの取得と利用
使用言語:processing もしくは Java
発表時間:5分程度

課題:

オープンデータの取得と利用

  1. オープンデータの材料選び
  2. オープンデータの取得 (URL)
  3. オープンデータの利用 (processing もしくは Java)
  4. オープンデータ応用のWEB公開 (Google sitesに埋め込み)

ヒント:

これまで演習したプログラムの組み合わせが必要です。

nextbus, java参考例:

import java.util.Calendar;

class busapp{

        public static void main(String args[]){

                String[] data = {
                        "00:00",
                        "8:30",
                        "9:10",
                        "10:00",
                        "11:00",
                        "12:15",
                        "14:15",
                        "15:15",
                        "16:15",
                        "17:15",
                        "18:15",
                        "19:15",
                        "20:15",
                        "23:59"
                };

                Calendar calendar = Calendar.getInstance(); //現在(実行時点)時刻でCalendarのインスタンス生成
                int hourOfDay = calendar.get(Calendar.HOUR_OF_DAY);   // 0..23
                int minute = calendar.get(Calendar.MINUTE);      // 0..59

                int cnt = 0;

                for (String value: data) {
                        String[] hhmm = value.split(":");
                        int hh = Integer.parseInt(hhmm[0]);
                        int mm = Integer.parseInt(hhmm[1]);
                        if (hh > hourOfDay || hh == hourOfDay && mm > minute) {
                                System.out.println(hh + ":" + mm + ">" + hourOfDay + ":" + minute);
                                System.out.println("\n");
                                if (++cnt >= 3) break;
                        }

                }
        }
}

nextbus, java実行例:

$ javac api-json-nextbus-sample.java
$ java api-json-nextbus-sample
16:15
17:15
18:15

Processing で作る場合、下記のバスの絵も入れて、よりリアルなアプリができます。

3台のバスを描く(自分で定義した関数を使って)

int h=60; // ボディの高さ、幅の基準
int d=30; // 車輪の直径の基準

void setup() {
  size(400, 400);
  noLoop(); // 繰り返さない
}

void draw() {
  drawBus(200, 200); //中央のバス
  drawBus(100, 100); //左上のバス
  drawBus(300, 300); //右下のバス
}

void drawBus(int x, int y) {
  rectMode(CENTER);
  rect(x, y, h*2, h); // ボディ
  ellipse(x-35, y+h/2, d, d); // 後輪・外側
  ellipse(x+35, y+h/2, d, d); // 前輪・外側
  ellipse(x-35, y+h/2, d-10, d-10); // 後輪・内側
  ellipse(x+35, y+h/2, d-10, d-10); // 前輪・内側
  rectMode(CORNER);
  rect(x+45, y-20, h/4, h/3); // 窓・前
  rect(x-5, y-20, h/2, h/3); // 窓・中
  rect(x-50, y-20, h/2, h/3); // 窓・後
}