C programming 2 (2) Arrays

配列

同じ型の変数が並んだものを「配列」と言います。C以外でも多くの高級言語に採用されている。

通常の変数は

int num;

のように型と名前を示して宣言しますが、配列ではさらに要素数を加えて以下のように宣言します。

int num[10];

名前(上の例では”num”)が変数名で、それに続く[ ]内に示した”10″が、配列の要素数です。上記のように宣言すると

int 型の変数が10個確保され
その全体を“num”という名前で扱える

ようになります。

配列の各要素は添字(またはインデックス)と呼ばれる番号で一意に指定できます。Cでは先頭が0で、1ずつ増加します。

01

配列の走査

配列の各要素に規則性を持った値を代入するには、forループを使うのが便利です。例えば、10個の要素を持つint 型の配列に、100・200・300……と100ずつ増加する値を代入する処理は、リスト1のように記述できます。

カウンタ変数iは0から1ずつ増加するので、その値を配列の添字に使い、同時に(i + 1)の100倍を添字で示す要素の値として代入します。

継続条件は「i < 10」となっているので、iが9になるまでループが繰り返され、10になったら処理をせずにループを抜けるので、配列のすべての要素に値が代入されます。

リスト1:配列に100ずつ増加する値を代入していく

int num[10];    /* 整数を格納する配列 */
int i;    /* カウンタ変数 */

for(i =0; i <10; i++){
num
[i]=(i +1)*100;
}

配列の初期化

配列は同じ型の変数が並んだものですから、個々の要素の扱いは通常の変数と変わりません。配列の個々の要素に値を代入するには、以下のように代入演算子=を使います。

num[0]=100;
num
[1]=200;
num
[2]=300;
:

もちろん、通常はこんな悠長な記述はしません。配列の宣言時にすべての要素の値を示し、初期化することができます。

int num[]={100,200,300,400,500,600};

{ }内に値を「,」で区切って列挙するだけです。このようにすれば、[ ]内に最大要素数を示す必要はありません。{ }内に列挙した値の数だけの要素が自動的に確保されます。

配列のコピー

他の変数と同じように配列をコピーしたプログラム

/* 配列のコピー */
b = a; // エラーが表示され、コンパイルできません

for文を使って配列の要素をコピーしましょう。

#include <stdio.h>
 
int main(void) {
 
  int i;
 
  int a[3] = {0, 1, 2};
 
  int b[3];
 
  /* 配列のコピー */
  for(i=0;i<3;++i){
    b[i] = a[i];
  }
 
  printf("%d %d %d\n", b[0], b[1], b[2]);
 
  return 0;
}

 

マクロ定数の活用

次のプログラムは,配列を宣言すると同時に初期化しておいて,その配列要素の数値の中で最大のものを表示する。

#include <stdio.h>
#define N 10    /* 配列の要素数 */

int main()
{
    int a[N] = {4, 2, 11, 4, 15, 7, 9, 12, 3, 6};
    int i, max;

    max = a[0];
    for (i = 1; i < N; i++) {
        if (max < a[i]) {
            max = a[i];
        }
    }
    printf("max value = %d\n", max);
    return 0;
}
max value = 15

プログラム中のfor文では,配列の要素を始めから見ていき, それまでに見つけた最大値 max と,今注目している要素 a[i]とを比較し, a[i] の方が大きければ,max の値をそれで置き直す。 また,max には始めに a[0] の値が入っており, a[0]max と比較する必要がないので, for文は i=1 から始まっている。

演習問題

  • 演習5-3(p115) List5-5を書き換えて、先頭から順に5,4,3,2,1で初期化するプログラムを作成せよ。
  • 演習5-4(p115) List5-6を書き換えて、配列aの要素の並びを逆順にしたものをbにコピーするプログラムを作成さよ。
  • 演習5-5(p121) List5-8の配列の要素数をオブジェクト形式マクロで定義するように変更したプログラムを作成せよ。

C exercises2 (1) guidance

C言語プログラミング演習Iの試験解説

C言語検定試験について

試験名

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

試験目的

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

認定基準

一級 C言語を駆使し、応用プログラム(言語処理系、ユーティリティなど)が作成できる能力を有する。また使用しているOSについて理解をしている。
二級 小規模のプログラム(500行程度)が適切に(理路整然、簡潔、正しく、速く)書ける。また各種基本アルゴリズムを理解している。
三級 C言語の概念を理解し、簡単なプログラムが書ける。

 

参考(2級出題範囲)

出題内容
定数 浮動小数点定数 指数形式を許す
浮動小数点接尾語はf、l、F、Lのいずれか
整数定数 整数接尾語として長語接尾語(l、L)を含む
文字定数 拡張表記は8進拡張表記、16進拡張表記を含む
文字列リテラル 拡張表記は8進拡張表記、16進拡張表記を含む
列挙定数
演算子 ビット演算子、条件演算子、代入演算子、キャスト演算子、ポインタ/アドレス演算子、構造体演算子、sizeof演算子
宣言指定子 void、short、long、float、double、構造体共用体指定子(struct、union)、列挙型指定子(enum)、型修飾子(const)、typedef
変数 上記型指定子の単純変数、配列
外部定義
プリプロセッサ機能 ファイルの包含
ライブラリ関数
数学関数<math.h>
double cos(double x); double sin(double x);
double tan(double x); double exp(double x);
double log(double x); double log10(double x);
double pow(double x, double y);
double sqrt(double x); double ceil(double x);
double fabs(double x); double floor(double x);
入出力関数<stdio.h>
NULL、EOF、FILE、stderr、stdin、stdout、
FILE *fopen(const char *filename, const char *mode);
int fclose(FILE *stream);
int fscanf(FILE *stream, const char *format, …);
int fprintf(FILE *stream, const char *format, …);
int sscanf(const char *s, const char *stream, …);
int sprintf(char *s, const char *stream, …);
int fgetc(FILE *stream, …); int fputc(int c, FILE *stream);
char *fgets(char *s,int c, FILE *stream);
int fputs(const char *s, FILE *stream);
int getc(FILE *stream, …); int putc(int c, FILE *stream);
char *gets(char *s);int puts(const char *s);
int ungetc(int c, FILE *stream);
一般ユーティリティ関数<stdlib.h>
NULL  double atof(const char *nptr);
int atoi(const char *nptr);
long int atol(const char *nptr);
int rand(void);  void srand(unsigned int seed);
int abs(int i);  long int labs(long int j);
文字列操作関数<string.h>
NULL  size_t
char *strcpy(char *sl,const char *s2);
char *strncpy(char *sl,const char *s2, size_t n);
char *strcat(char *sl,const char *s2);
char *strncat(char *sl,const char *s2, size_t n);
int strcmp(const char *sl,const char *s2);
int strncmp(const char *sl,const char *s2, size_t n);
char *strchr(const char *s, int c);
char *strrchr(const char *s, int c);
char *strstr(const char *sl, const char *s2);
size_t strlen(const char *s);
その他
  • main関数の引数、整数型以外の関数
  • 自己参照構造体
  • 変数の記憶クラスと通用範囲(auto、static、register、extern)

※3級出題範囲含む

注)各級とも日本工業規格 (JIS) X3010 で出題・解答する。

勉強用パソコン購入について

MacBookAir 11Inch おすすめ!

関連情報:

ユビキタスクラブについて

Android, iPhoneアプリの開発、IoTアプリの開発が行う

関連情報:

LMS(学習管理システム:Learning Management System

演習サイト利用方法わからない生徒は多数なので、もう一度確認!

  • サイト:https://lms.daiichi-koudai.com/  (ブラウザはChrome利用)
  • ログインID:(学籍番号)
  • 初期PW: (大学メールアドレス、但しTEは大文字)

 

C programming exercises 2

【授業の概要】

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

【授業要旨】

回数 題目 授業内容 学習課題 予習時間(分) 復習時間(分)
1 ガイダンス 学習目的 C言語プログラミング演習Ⅰの試験解説   C言語検定試験について 授業内容を復習する 60
2 ビットを意識する sizeof演算子 ビット演算子    10進数と2進数(ビット)の相互変換 テキスト(P315-330)を読む
授業内容を復習する
30 60
3 構造体 構造体の基本  構造体の配列 テキスト(P332-341)を読む
授業内容を復習する
30 60
4 構造体 構造体のネスト 代入、比較、アドレス テキスト(P342-348)を読む
授業内容を復習する
30 60
5 構造体 構造体へのポインタ テキスト(P349-353)を読む
授業内容を復習する
30 60
6 構造体 構造体と関数  アロー演算子 テキスト(P354-362)を読む
授業内容を復習する
30 60
7 6回~9回までのまとめ 数値計算への応用  連立方程式の解法プログラムをグループで作成 授業内容を復習する 30 60
8 6回~9回までのまとめ(続) 数値計算への応用  連立方程式の解法プログラムをグループで作成 授業内容を復習する 30 60
9 ファイル入出力 ファイル入出力の基本  文字列の入出力 テキスト(P364-370)を読む
授業内容を復習する
30 60
10 ファイル入出力 文字列の入出力  書式付入出力 テキスト(P371-377)を読む
授業内容を復習する
30 60
11 ファイル入出力 テキストとバイナリのファイル テキスト(P378-386)を読む
授業内容を復習する
30 60
12 総合演習 C言語2級検定問題による演習1 授業内容を復習する 30 60
12 総合演習 C言語2級検定問題による演習1 授業内容を復習する 30 60
14 総合演習 C言語2級検定問題による演習1 授業内容を復習する 30 60
15 後期のまとめ まとめと総括。小テストの実施 授業内容を復習する 30 60

【テキスト】

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

ノートPCはMacが良いと思う理由

新学期に、ノートPCを考えることがありませんか?

WindowsのノートPCか、MacのノートPCか、悩むかもしれません。

ここはノートPCはMacが良いと思う理由を列挙する。

OSXとWindows両方利用できる

Macbookに、Boot Campというソフトウェアある。

Boot Campブートキャンプ)は、アップルにより開発・配布されているソフトウェアIntel Macにおいて、Microsoft Windowsの利用を可能とする。

UNIX(Linux)の勉強

OS X(オーエス テン)は、アップルが開発・販売する、Macbook コンピュータ用の現行オペレーティングシステムである。BSD UNIX ベースで新たに Mac OS X(マック オーエス テン)が作られた。

MacbookにUNIX, Apache, PHP内蔵のため、活用範囲大

Linux(リナックス)は、UnixライクなOSカーネルであるLinuxカーネル、およびそれをカーネルとして周辺を整備したシステム。

iPhoneのアプリの開発

iPhoneのアプリの開発は、Apple社のMac PCが必須です。

Macbookのトラックパッドの性能が素晴らしすぎる

Macbookでも Pro でも Air でもトラックパッドの性能というか動きが素晴らしすぎるんです。トラックパッドとはWindowsでいうタッチパッドのことなんですが、一度使うと抜け出せない程使いやすいんです!

先日ヨドバシカメラへ行った際に、hp・Dell・NEC・VAIO・Surface・Lenovo機を触ってきたのですが、それらブランドノートPCの多くはタッチパッドに若干のひっかかりがあり、ぎこちなさは否めなかったです。LenovoのThinkPadとSurfaceはなかなかよかったので、もしもWindowsノートPCを使うなら、Surfaceは膝の上でタイピングできないですしThinkPadかな?と感じました。

これを読んでいるWindowsだけのユーザーさんは是非店頭でMacbookを触ってもらえばと思います。きっと惚れてまうよ(笑)

同価格帯のWindowsノートPCよりも画面が綺麗

同価格帯のWindowsノートPCと比べて、Retina画面ではないMacbook Airですら画面の綺麗さが違います。雲泥の差です。持ち運び用の小さい画面ですから、綺麗=見やすいにこしたことはありません。作業しやすいですよ。

スリープ復帰速度とバッテリー管理はMacが上

スリープ復帰の速さとスリープ中のバッテリー消費管理はMacbookの方が断然上だと感じます。Macbookは画面を持ち上げたその時から普通に作業開始できます。また、Macbookはスリープしながら何日も放置できます。安いWindowsノートPCなんかですと、スリープしているのにもかかわらず恐ろしくバッテリーが減っていることもしばしば・・・。

キーボードが打ち易すぎる

MacはWindowsに無いキーがあったり、若干配置が違いますが、それは慣れてしまえばどうでも良いこと。それらを差し引いても、あのキーボードの打ち易さはハンパないです。機体を膝に乗っけてタイピングしても超快適な打ち心地です。タイプしていると気持ちが良いんです。外出して作業するときにはWindows ノートよりもタイピングがはかどることは間違いないです。一応WindowsノートだとLenovoのThinkPad x250はなかなか打ちやすく、さすがビジネスモデルだと思いました。

画面の縦幅が長い

Windows ノートの画面はほぼ「16:9」で、ワイド画面の幅です。それに比べ、Macbookの画面は「16:10」で縦幅が若干長いのです。例をだすと、Macbook Airの画面解像度は「1440×900」ですが、Windowsノートだと「1440x810」となります(実際にこのサイズのWindowsノートはありませんがあくまでも比率の問題)。この差は結構重要で、見やすさと作業効率に若干の影響を与えます。

やっぱりカッコイイ

外でMacbookを広げている人を見ると、やっぱりカッコイイと思う自分がいます(笑)冒頭で書きましたが、1人で引きこもって作業している時には特にそういうものは気にせず使いやすさ重視なのですが、外ではやはりMacbookがカッコイイのですよ!!これはWindowsノートPCには覆せない現実です。

Macbookは細部まで本当に丁寧に作られていますし、デザインに無駄がなというのはこういうことだな・・・と自分のMacbook Airや店頭のその他Mac機体たちをみていてつくづくそう思います。

C programming 2 (1) Guidance

C言語プログラミングⅠの前期試験解説

試験後、解説が行われたので、質問があれば、答えする。

(質問応答は、日本語の他に、英語、中国語も可能!)

C言語検定試験について

http://www.sikaku.gr.jp/js/cp/

C言語を駆使した応用プログラムの作成能力を認定

C言語は、記述の自由度が高く、使用可能なプラットホームが多いなど、使用できる場面が多いことから、現在最も広く普及しているプログラミング言語です。このC言語のプログラミング能力の測定を目的に、1992年より開始されたのがサーティファイ 情報処理能力認定委員会が主催する「C言語プログラミング能力認定試験」です。
保有スキルのレベルに合わせた3段階の認定基準を設けることにより、これから新たにプログラミングの学習を始める方から、現在プログラマやシステム・エンジニアとして既に活躍されている高度IT技術者の方まで、幅広い皆様から受験いただいています。

初学者から、ビジネスシーンで活躍できるプログラマまで、幅広いスキルを測定

「C言語プログラミング能力認定試験」は、これからプログラミングを学び始める方を対象とした「3級」から、プログラマやシステム・エンジニアとして活躍されている方の保有スキルを客観的にアピールできる「1級」まで、幅広いスキルを測定しています。
特に「1級」では、実際にPCを使用して、プログラムの仕様変更やこれに伴うプログラミング作成(コーディング・コンパイル・デバッグ)を行う、極めて実践的な資格・検定試験として、IT業界でも高く評価されています。

基本情報技術者試験の午後の試験対策としても有効

「C言語プログラミング能力認定試験」の「2級」及び「3級」は、経済産業省認定「基本情報技術者試験」の「午後問題」の出題形式も意識して作成しています。そのため、「基本情報技術者試験」の学習と連動した活用も多く見られます。保有スキルのレベルに応じた級位取得を目標としていただくことで、C言語のプログラミング能力を高めるだけではなく、「基本情報技術者試験」の合格にもつなげていくことができます。

参考(3級出題範囲)

出題内容
定数 整数定数 10進定数、8進定数、16進定数
整数接尾語は符号無し接尾語(u、U)のみ
文字定数 ワイド文字定数(L’c文字の列’)を除く
拡張表記は単純拡張表記のみ
文字列リテラル ワイド文字列リテラル(L”s文字の列”)を除く
拡張表記は単純拡張表記のみ
演算子 算術演算子、インクリメント演算子、デクリメント演算子、(算術の)代入演算子、関係演算子、等値演算子、論理関係演算子、括弧演算子、コンマ演算子
型指定子 char、int、unsigned、signed
変数
  • 上記型指定子の単純変数、配列
  • 初期化の構文
基本制御文 break、continue、do、for、if、return、switch、while
プリプロセッサ機能 #define、#include
ライブラリ関数
入出力関数<stdio.h>
EOF  NULL
int printf(const char *format, …);
int scanf(const char *format, …);
int getchar(void);  int putchar(int c);
文字操作関数<ctype.h>
int isalnum(int c);  int isalpha(int c);
int iscntrl(int c);  int isdigit(int c);
int isgraph(int c);  int islower(int c);
int isprint(int c);  int ispunct(int c);
int isspace(int c);  int isupper(int c);
int isxdigit(int c);  int tolower(int c);
int toupper(int c);
その他 Cの歴史と特徴

勉強用パソコン購入について

MacBookAir 11Inch おすすめ!

関連情報:

ユビキタスクラブについて

Android, iPhoneアプリの開発、IoTアプリの開発が行う

関連情報:

LMS(学習管理システム:Learning Management System

演習サイト利用方法わからない生徒は多数なので、もう一度確認!

  • サイト:https://lms.daiichi-koudai.com/  (ブラウザはChrome利用)
  • ログインID:(学籍番号)
  • 初期PW: (大学メールアドレス、但しTEは大文字)

C programming 2

【授業の概要】

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

【授業要旨】

回数 題目 授業内容 学習課題 予習時間(分) 復習時間(分)
1 ガイダンス 学習目的 C言語プログラミングⅠの前期試験解説  C言語検定試験について

授業内容を復習する

30 60
2 配 列 配 列

テキスト(P88-101)を読む
授業内容を復習する

30 60
3 配 列 多次元配列

テキスト(P102-110)を読む
授業内容を復習する

30 60
4 関 数 関数とは

テキスト(P114-121)を読む
授業内容を復習する

30 60
5 関 数 関数の設計

テキスト(P122-138)を読む
授業内容を復習する

30 60
6 関 数 有効範囲と記憶域期間

テキスト(P140-146)を読む
授業内容を復習する

30 60
7 1回~6回までのまとめ 演算に関する演習問題をグループで解く 授業内容を復習する 30 60
8 基本型 基本型と数 テキスト(P148-151)を読む
授業内容を復習する
30 60
9 基本型 整数型と文字型 テキスト(P152-171)を読む
授業内容を復習する
30 60
10 基本型 浮動小数点型  テキスト(P172-175)を読む
授業内容を復習する
30 60
11 基本型 演算と演算子 テキスト(P176-182)を読む
授業内容を復習する
30 60
12 プログラム問題 関数形式マクロ テキスト(PP184-189)を読む
授業内容を復習する
30 60
13 プログラム問題 列挙体 テキスト(P190-193)を読む
授業内容を復習する
30 60
14 プログラム問題 再帰 テキスト(P194-197)を読む
授業内容を復習する
30 60
15 後期のまとめ まとめと総括。小テストの実施 授業内容を復習する 30 60

【テキスト】

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

参考:

Web Boid by Processing

/** boid
* Copyright 2011 Yutaka Kachi
* Licensed by New BSD License
*
* Boid:生き物の群れのように動き回るボール
*
**/

time frame

Human-centric intelligent systems