News

C exercises2 (3) structures

演習

1)任意二つのunsigned int型数値の論理AND, OR, XORを求めなさい(P324)

/* a9-4-1.c */
#include <stdio.h>
#include <limits.h>

int main(void)
{
  unsigned a, b;

  printf("0 〜 %u の整数を2つ入力してください。¥n", UINT_MAX);
  printf("> ");
  scanf("%u", &a);
  printf("> ");
  scanf("%u", &b);

  printf("%u(%#x) AND %u(%#x) = %#x¥n",__,__,__,__,__);
  printf("%u(%#x) OR  %u(%#x) = %#x¥n",__,__,__,__,__);
  printf("%u(%#x) XOR %u(%#x) = %#x¥n",__,__,__,__,__);

  return 0;
}

 

2)任意unsigned int型数値のビットパターンを表示(P328)

/* a9-4-2.c */
#include <stdio.h>
#include <limits.h>

void show_bit(unsigned dt);

int main(void)
{
  unsigned a;

  printf("0 〜 %#x の16進数を入力してください。> ", UINT_MAX);
  scanf("%x", &a);

  show_bit(a);

  return 0;
}

/*** ビット表示関数 ***/
/*(仮引数)dt:表示データ */
void show_bit(unsigned dt)
{
    int i, len;

    len = sizeof(dt) * CHAR_BIT;
        
    printf("%#x ---> ", dt);
    for (i = len - 1; i >= 0; i--){
        putchar(( __ >> __ & 1U) ? '1' : '0' );
    }
    putchar('¥n');
}

 

演習解説

構造体の変数

構造体とは

構造体とは,「いろいろな種類の互いに関連するデータをまとめて, 1つのかたまりにしたもの」である。 たとえば,「氏名,年齢,性別などのデータを一人分だけまとめたもの」 このようなものをいう。

構造体 構造体を構成する要素を,構造体のメンバと呼ぶ。上の例では, 「名前」「性別」「年齢」「身長」「体重」などが,メンバにあたる。

構造体の宣言

構造体は,一つのデータ型であり,その型枠をまず始めに宣言する必要がある。 そして,その型枠を型とする変数を宣言する形で構造体の実体(オブジェクト)を宣言し, それを使用することができる。

構造体の型枠の宣言と,その型枠をもつ構造体変数の宣言は次のようになされる.

struct 構造体タグ名 {メンバの並び};   /* 型枠の宣言 */

struct 構造体タグ名 構造体変数名;     /* 構造体変数の宣言 */

例えば,次図のような人のデータをまとめた構造体の定義は下のようになる。

person 構造体struct

 _person {           /* _person がタグ名 */
    char name[20];        /* 文字配列型のメンバ name */
    char sex;              /* 文字型メンバ sex */
    int age;               /* 整数型メンバ age */
    double height;         /* 倍精度実数型メンバ height */
    double weight;         /* 倍精度実数型メンバ weight */
};


struct

 _person p;      /* p という名前の struct _person 型変数を宣言 */

構造体の代入

一つの構造体変数の内容全部を 同じ型の別の構造体変数に, 通常の変数を代入するのと同じように,代入することができる.

    person_t p1 = {"Tom", 'M', 19, 175.2, 69.5};
    person_t p2;
    
    p2 = p1;

構造体の代入

構造体の配列

構造体を並べた配列も扱える.その宣言定義は通常のようにすればよい.

#define PERSON_NUM 5

typedef struct {   
    char name[20];
    char sex; 
    int age;
    double height; 
    double weight; 
} person_t;

person_t p[PERSON_NUM]

;

これで,要素数がPERSON_NUM個(5個)の person_t 構造体型配列 p ができる.

構造体配列たとえば,上の図で色のついてある p[3] の height メンバには, p[3].height でアクセスする.

サンプルプログラム2

#include <stdio.h>

#define PERSON_NUM 5

typedef struct {   
    char name[20];
    char sex; 
    int age;
    double height; 
    double weight; 
} person_t;

main()
{
    person_t p[PERSON_NUM] = {{"Bob",      'M', 19, 165.4, 72.5},
                              {"Alice",    'F', 19, 161.7, 44.2},
                              {"Tom",      'M', 20, 175.2, 66.3},
                              {"Stefany",  'F', 18, 159.3, 48.5},
                              {"Leonardo", 'M', 19, 172.8, 67.2}};
    int i;
    double height_sum, weight_sum, height_ave, weight_ave;                          
    
    height_sum = weight_sum = 0.0;
    for (i = 0; i < PERSON_NUM; i++) {
        height_sum += p[i].height;
        weight_sum += p[i].weight;
    }
    height_ave = height_sum / PERSON_NUM;
    weight_ave = weight_sum / PERSON_NUM;
    
    printf("average height = %fn", height_ave);
    printf("average weight = %fn", weight_ave);
    
    return 0;
}

構造体のいろいろな宣言の仕方

  1. 構造体の型枠と実体を同時に宣言する
  2. 初期化も同時に行う
  3. 構造体タグ名を記述しないこともできる
  4. typedefで別名をつけることができる

演習

「学籍番号、氏名、学年、クラス」を含める構造体の宣言、初期化、表示するプロフラムを作る。
演習
struct student
{
char no[10]; //番号
char name[20]; //名前
int s_year; //年
char s_class; //クラス
};

C programming 2 (3) Arrays 2

ハッカソン

ハッカソン(英語: hackathon 、別名:hack day ,hackfest ,codefest )とはソフトウェア開発分野のプログラマやグラフィックデザイナー、ユーザインタフェース設計者、プロジェクトマネージャらが集中的に作業をするソフトウェア関連プロジェクトのイベントである。

ハッカソン – Wikipedia

https://ja.wikipedia.org/wiki/ハッカソン

国内最大級のITコンテスト「JPHACK 2016」のお知らせ
——————————————————————————

こんにちは!JPHACKS運営事務局です。

突然ですが、モノづくりを仕事にしたいと考えているデザイン系、情報系学生のみなさん、
こんなお悩みはありませんか?

・「学生のうちに、アプリやプロダクトなど何か一つ形にしておきたい」
・「ただ、自分は○○はできるけど、△△ができないから、Webサービスやアプリをつくれない」
・「同世代のデザイン系学生、情報系学生と競い合い、交流したい」
・「自分のスキルがどの程度のものか確かめたい。有名企業の社会人からレビューを受けてみたい」

そんなお悩みを解決すべく今回ご紹介させていただくのが、「JPHACKS 2016」です。

http://jphacks-civic.strikingly.com/

JPHACKS2016 エントリーの歩み:

  1. JPHACKS2016 エントリー
  2. JPHACKS2016 本エントリー
    1. URL: http://ubi.daiichi-koudai.com/ – ユビキタス・クラブ
    2. github: https://github.com/
  3. JPHACKS2016追加エントリー

前回の演習

  • 演習5-4(p115) List5-6を書き換えて、配列aの要素の並びを逆順にしたものをbにコピーするプログラムを作成さよ。
#include <stdio.h>
#define NUMBER 5

int main(void)
{
    int i;
    int va[NUMBER] = {15, 20, 30};
    int vb[NUMBER];
    
    for(i = 0; i < 5; i++) {
        vb[i] = va[NUMBER - i - 1];
    }
    
    puts(" va vb");
    puts("-------");
    
    for(i = 0; i < 5; i++) {
        printf("%3d%3d\n", va[i], vb[i]);
    
    }
    
    return(0);
}

 

二次元配列の宣言

配列には同じデータ型の値を要素として管理できますが、配列そのものを要素として持つ配列を作成することが出来ます。何次元でも出来ますがよく利用される2次元を例に考えてみます。

2次元配列の書式は次の通りです。

データ型 配列名[要素数1][要素数2];

配列と単に書いた場合は1次元の配列です。1次元の配列の場合は「配列名[添字]」でそれぞれの要素を表しますが、2次元の場合は「配列名[添字][添字]」で各要素を表します。

具体的には次のように記述します。

int seiseki[2][3];

seiseki[0][0] = 72;
seiseki[0][1] = 67;
seiseki[0][2] = 84;

seiseki[1][0] = 67;
seiseki[1][1] = 92;
seiseki[1][2] = 71;

2次元配列を使う意味を考えてみます。例えば6日間の運動した時間を管理するのではあれば1行に列挙して管理するのが便利ですし、3教科の成績を2人分管理するのであれば表形式で管理した方が便利です。成績と名前などのように2つの異なるインデックスを使って要素を特定した方が便利な場合には2次元配列が有効です。

なお今回は2次元の例でしたが3次元でも4次元でも可能です。その場合は次のような書式となります。

データ型 配列名[要素数1][要素数2][要素数3];
データ型 配列名[要素数1][要素数2][要素数3][要素数4];

3次元までは利用することもありますが、4次元以上の多次元配列ともなるとあまり利用する機会はありません。

二次元配列の初期化

二次元配列の場合でも宣言と同時に初期値を設定することが出来ます。次の書式を使います。

データ型 配列名[要素数1][要素数2] = {{値00, 値01, ...}, {値10, 値11, ...}, ...};

少し分かりにくいですが上記は次のように記述したものと同じです。

データ型 配列名[要素数1][要素数2];

配列名[0][0] = 値00;
配列名[0][1] = 値01;
...


配列名[1][0] = 値10;
配列名[1][1] = 11;
...

...

要素数2の配列があたかも1つの要素のように、要素数1の分だけあるような形で指定します。具体的には次のように記述します。

int seiseki[2][3] = {{72, 67, 84}, {67, 92, 71}};

この場合は次のように記述した場合と同じです。

int seiseki[2][3];

seiseki[0][0] = 72;
seiseki[0][1] = 67;
seiseki[0][2] = 84;

seiseki[1][0] = 67;
seiseki[1][1] = 92;
seiseki[1][2] = 71;

要素数を指定せずに初期化する

配列は宣言と同時に初期化する場合は要素数を省略できました。2次元配列の場合でも最初の配列の要素数は省略が可能となっています。

データ型 配列名[][要素数2] = {{値00, 値01, ...}, {値10, 値11, ...}, ...};

具体的には次のように記述します。

int seiseki[][3] = {{72, 67, 84}, {67, 92, 71}};

二次元配列のデータの利用

では簡単なサンプルプログラムを作成して試してみます。

test5-1.c

#include <stdio.h>

int main(void){
  int seiseki[][3] = {
    {72, 67, 84}, 
    {67, 92, 71}
  };
  int i;

  for (i = 0 ; i < 2 ; i++){
    printf("%d人目の成績です¥n", i + 1);
    printf("算数の点数は%dです¥n", seiseki[i][0]);
    printf("国語の点数は%dです¥n", seiseki[i][1]);
    printf("社会の点数は%dです¥n", seiseki[i][2]);
  }

  return 0;
}

上記を「test5-1.c」の名前で保存し、実行します。

演習

test5-1.cを修正して、科目ごとの合計点を求めてください。

出力例:

算数の合計点:289
国語の合計点:293
社会の合計点:292

C exercises2 (2) bitwise

第9章 ビットを意識する

整数型の指定

整数値を扱うための型には,( signed, unsigned ) char 型と int 型とがあることは説明したが, それら以外にもある.ここで,まとめて簡単に解説する.

バイト数 ビット数 最小値 最大値
unsigned char 1 8 0 255
signed char 1 8 -128 127
unsigned short int 2 16 0 65535
signed short int 2 16 -32768 32767
unsigned int 4 32 0 4294967295
signed int 4 32 -2147483648 2147483647
unsigned long int 4 32 0 4294967295
signed long int 4 32 -2147483648 2147483647
unsigned long long int 8 64 0 18446744073709551615
signed long long int 8 64 -9223372036854775808 9223372036854775807

基本的な整数型には char, short int , int, long int, long long int の4種類があり,そのサイズは char ≦ short int ≦ int ≦ long int ≦ long long int となる.

char 型は 1 バイトであると決まっているが,あとの種類はサイズが厳密に決められたものではなく, 将来は変わる可能性がある. 実際に,数年前のパソコンは 16ビットマシンが多かったので, int 型は 16ビット=2バイトであった.

今使っているコンピュータの環境では,たまたま int 型と long int 型とは,まったく同じものとなっている.

浮動小数点型の指定

 

バイト数 ビット数 最小値 最大値
float 4 32 1.175494 10-38 3.402823 10+38
double 8 64 2.225074 10-308 1.797693 10+308

 

float型

float型は4バイト=32ビットのサイズを持ち,そのビットを次のように,符号,指数,仮数を表すために用いる.

float型の内部表現指数部-127 が指数の値となる.仮数部は仮数の小数点以下を表している.すなわち,仮数は仮数部の先頭に 1. を付加したものになる.

 

float の表す値 = (-1)符号部 × 2指数部-127 × 1.仮数部

float 型の精度(有効桁数)は2進数にして 24 (=23+1) 桁であり,10進数では約 7 桁となる.

double 型

float 型に比べて,約倍の精度をもった浮動小数点型の型が double である. double 型は 8バイト=64ビットのサイズであり,その内部表現は次のようになる.

double型の内部表現指数部-1023 が指数の値となる.仮数部は仮数の小数点以下を表している.すなわち,仮数は仮数部の先頭に 1. を付加したものになる.

 

double の表す値 = (-1)符号部 × 2指数部-1023 × 1.仮数部

double 型の精度(有効桁数)は2進数にして 53 (=52+1) 桁であり,10進数では約 15 桁となる.

Sizeof演算子

簡単に言うと,sizeofに渡された型や変数のメモリサイズを調べるものです.

sizeof演算子は2種類の使い方があります.

  • sizeof(型)
  • sizeof 変数や定数,あるいは式など

ビット演算子

ビット単位でデータ操作をするものです。対象は整数に限られます

【ビット演算子】
演算子 説明
 & ビットごとの AND
 | ビットごとの OR
 ^ ビットごとの XOR
 ~ ビットごとの反転(1 の補数)
 << 左シフト
 >> 右シフト

(1) & (and)

両方のビットが 1 のときのみ結果が 1 になるビット演算です。

0 & 0 → 0
0 & 1 → 0
1 & 0 → 0
1 & 1 → 1

必要なビット以外をOFF(0)にする処理(マスクといいます)に使用されます。

例えば、10101010 という1バイトのビット列の下位4ビットを OFF する場合、そのままにしたいビットを 1 、OFFしたいビットを 0 にした、11110000 で and することにより実現できます。

(使用例)

unsigned char a = 0xaa;	/*     10101010 */
printf("%#xn",a & 0xf0);	/* and 11110000 */

実行結果
0xa0

(2) | (or)

いずれかのビットが 1 なら結果が 1 になるビット演算です。

0 | 0 → 0
0 | 1 → 1
1 | 0 → 1
1 | 1 → 1

必要なビットをON(1)にする場合に or は使われます。

例えば、10101010 という1バイトのビット列の上位4ビットを ON する場合、ONにしたいビットを 1 、そのままにしたいビットを 0 にした、11110000 で or することにより実現できます。

(使用例)

unsigned char a = 0xaa;	/*    10101010 */
printf("%#xn",a | 0xf0);	/* or 11110000 */

実行結果
0xfa

(3) ^ (xor)

両方のビットが異なるときに結果を 1 にするビット演算です。

0 ^ 0 → 0
0 ^ 1 → 1
1 ^ 0 → 1
1 ^ 1 → 0

特定なビットを反転する場合に xor は使われます。

例えば、10101010 という1バイトのビット列の下位4ビットを反転する場合、反転したいビットを 1 、そのままにしたいビットを 0 にした、00001111 で xor することにより実現できます。

(使用例)

unsigned char a = 0xaa;	/*     10101010 */
printf("%#xn",a ^ 0x0f);	/* xor 00001111 */

実行結果
0xa5

(4) ~ (補数)

ビットの反転を行うビット演算です。

0 → 1
1 → 0

全ビットの無条件反転を行います。

(使用例)

unsigned char a = 0xaa;	/*     10101010 */
printf("%#xn",~a);

実行結果
0xff55		
(注)printf関数が unsigned char型を int型に符号拡張するために、0xff55 と表示されます。
   int型が4バイトの処理系では 0xffffff55 になります。

(5) << (左シフト)

x << n と書き、x を n ビット左へシフトします。

右側の空いたビットには 0 が入り、左側のビットは捨てられます。

左シフトは x が正の場合、x << 1 で「x * 2」を計算することと同じになります。

(例)

正の整数のとき

int x = 100;

x = x << 2;

(6) >> (右シフト)

x >> n と書き、x を n ビット右へシフトします。

左側の空いたビットには、x が符号無しなら 0 が入ります。x が符号付きなら、算術シフトを行う処理系では符号桁が入り、論理シフトを行う処理系では 0 が埋められます。 右側のビットは算術シフト、論理シフトにかかわらず捨てられます。

右シフトは x が正の場合 x >> 1 で「x / 2」を計算することと同じになります。

(例)

正の整数のとき

int x = 100;

x = x >> 2;

負の整数のとき(算術シフトを行う処理系の場合)

int x = -100;

x = x >> 2;

【参考】

  • 算術シフト:数値の演算を行うときに使用するシフト演算で、シフトの際に最上位の符号ビットを保存するシフトです。
  • 論理シフト:ビットの位置を変えるときに使用するシフト演算で、シフトの際に最上位の符号ビットを考慮することなくシフトを行います。

演習

1)任意二つのunsigned int型数値の論理AND, OR, XORを求めなさい(P324)

2)任意unsigned int型数値のビットパターンを表示(P328)

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機体たちをみていてつくづくそう思います。