専門学校14日目(情報工学)4月26日金
1時限~3時限
C言語基礎 やさしいC 第5版
前回は変換仕様というものを学ぶました。%cで文字を、%dで整数を、&fでは小数を埋め込みます。埋め込む値は文の後にカンマで区切ってそのあとに書きます。例えば次のような文を書けます。
printf("%cは文字、%dは整数です。\n", 'A', 123);
1文字と文字列は区別して文字列を文字列リテラルといいます。こちらは" "で囲みます。
まず前回の続きの問題をやりました。
#include <stdio.h>
int main(void)
{
printf("123\n");
printf("\\100もらった\n");
printf("またあした\n");
return 0;
}
/* 123、と¥100もらった、とまたあした、と表示させるコードです。コードでは¥が\になっています。
実習用の環境だと¥でなく\がでるため特殊文字を出力するエスケープシーケンスで¥¥は\\となります*/
#include <stdio.h>
int main(void)
{
printf("%d\t%d\t%d\n", 1, 2, 3);
return 0;
}
/*これはprintf("1\t2\t3\n");と書いてもよいですが、変換仕様を使わず直接書くと文字
として認識されます。printfという関数が基本的に文字を出力するための関数だからだそうです。*/
#include <stdio.h>
int main(void)
{
printf("%d\n", 06);
printf("%d\n", 024);
printf("%d\n", 015);
printf("%d\n", 0x6);
printf("%d\n", 0x14);
printf("%d\n", 0xD);
return 0;
}
/*この問題は6、20、13を8進数と16進数で出力させる問題です。8進数は先頭に0をつけ16進数は
先頭に0xを付けます。6を出力させる場合はどちらでも6です。10進数の20は8進数で24、13は8進数
で15です。10進数の20は16進数で14は、13は16進数でDです。*/
2時限目に教科書第3章の変数を学びました。
「変数」はメモリを利用して値を記憶するものです。
「識別子」は変数の名前のことで、その付け方は条件がある。returnなどC言語で使われる予約語は使えないなど。また小文字で表すのが一般的です。変数名の先頭に数字がきてもいけません。
型、データ型
変数の宣言時に型を指定しますが、小数を格納するにはfloatやdoubleよいう型を指定します。floatは精度があまり求められないとき、doubleは精度を求めるときに使います。ただしdoubleはその分メモリをfloatの倍使います。
short int型なら2バイトで-32768~32767までを表現できる型となります。普通のint型は4バイトなのでもっと大きい値を扱える。型のサイズは開発環境によって異なることがあります。
変数の宣言のしかた
int num;
char c;
double db, dd;
double型で宣言したdbとddのように複数の変数を同時に宣言することもできる。
変換仕様の数値を変数にしたのが次の教科書p.56のコード
#include <stdio.h>
int main(void)
{
int num;num = 3;
printf("変数numの値は%dです。\n", num);
return 0;
}
変数の宣言と同時に代入すると2行であったコードを1行に省略できる。これを変数の初期化という。
int num = 3;
#include <stdio.h>
int main(void)
{
int num;
num = 3;
printf("変数numの値は%dです。\n", num);
printf("numの中身を5に変更して表示します。\n");
num = 5;
printf("変数numの値は%dです。\n", num);
return 0;
}
このコードは変数の中身を変えて表示させるものです。
次に変数に変数を代入してみます。教科書p.61変数に変数を代入する。
#include <stdio.h>
int main(void)
{
int num1, num2;
num1 = 3;
printf("変数num1の値は%dです。\n", num1);
num2 = num1;
printf("変数num1の値を変数num2に代入しました。\n");
printf("変数num2の値は%dです。\n", num2);
return 0;
}
num2 = num1でコピーしたようになります。
コードには書きませんが、もし整数型の変数int numに3.14を代入した場合、型はintなので正しく処理されない。小数以下が切り捨てられて3だけが出力されます。型が間違っているために生じる間違いもあるかと思いますので気を付けて。
変数の宣言位置ですが、必ず変数は使う前に宣言する。ブロックの先頭で宣言するのが一般的です。同じブロック内に名前が重複する変数は宣言できない。違うブロックなら同じ名前も許容される。ブロックとは{と}で囲まれた部分のことでしたね。
教科書p.65、キーボードから入力するにはscanf関数を用います。
#include <stdio.h>
int main(void)
{
scanf("%d", &num);
return 0;
}
/*このようになります。変数の頭に&(アンパサンドと読みます)をつけることに気を付けること。printfでは書かないですが、
scanfでは必要になります。*/
#include <stdio.h>
int main(void)
{
int num;
printf("整数を入力してください。\n");
scanf_s("%d", &num);
printf("%dが入力されました。\n", num);
return 0;
}
scanfは使用中の環境(実習用のPC)では使えないのでscanf_sと書きます。教科書にその理由が少し述べられていましたが、実行時にセキュリティに関する情報が表示されることがあるみたいで、scanfの実行時にエラーを出さない設定をすればそれでもできますが、特に設定を変更するのでなくscanf_sを使いました。
#include <stdio.h>
int main(void)
{
int num;
printf("整数を入力してください。\n");
scanf_s("%lf", &num);
printf("%fが入力されました。\n", num);
return 0;
}
小数を入力するときは"%lf"という変換仕様を使います。%(アルファベットのエル)(アルファベットのエフ)です。数字のイチではありません。printf関数のほうにはの%fとします。
4時限~6時限
webDBシステム開発 スッキリわかるSQL入門第3版ドリル256問付き
前回は教科書の練習問題を解きました。今回も問題を解くのが中心で、6限目に教科書を進めました。SQL文を実行するのにdokoqlのサイトを利用しました。
テーブルを作成し、個人情報にinsert intoで5件追加します。
B型の人の氏名と血液型を出力。
中山さんの名字を松岡にupdateする。
全員の氏名と携帯電話を出力する。
create table 個人情報 (
ID INTEGER,
氏名 VARCHAR(20),
生年月日 VARCHAR(15),
血液型 VARCHAR(2),
電話番号 VARCHAR(15),
携帯電話 VARCHAR(15)
)
insert into 個人情報values (1, '森靖夫', '1978年10月23日', 'A',
'(03)-1111-1111', '(090)-1111-1111')
insert into 個人情報values (2, '阿部洋子', '1978年4月6日', 'B',
'(03)-2222-2222', '(090)-2222-2222')
insert into 個人情報values (3, '荒木雅義', '1978年4月6日', 'O',
'(03)-3333-3333', '(090)-3333-3333')
insert into 個人情報values (4, '中山恵', '1979年1月14日', 'AB',
'(03)-4444-4444', '(070)-4444-4444')
insert into 個人情報values (5, '稲葉大輔', '1978年12月11日', 'B',
'(03)-5555-5555', '(070)-5555-5555')
select 氏名, 血液型
from 個人情報
where 血液型 = 'B'
update 個人情報
set 氏名 = '松岡恵'
where ID = 4
select 氏名, 携帯電話
from 個人情報
問題が終わったら教科書のp.72-p.73を、それも終わった人はSQLドリルを解きました。全部終わったら6時限目まで好きな勉強をしてよろしいとのこと。6限目は教科書を進めました。結構駆け足になったので説明が不足する箇所もあるかもしれません。
p.77 chapter3の冒頭でwhereの復習。
p.78 where句は真か偽となる条件式で使います。
p.81 比較演算子<>は両辺が等しくないことを意味します。他の演算子は見慣れているかもしれません。<で左辺は右辺より小さい、>で左辺は右辺より大きい、<=は左辺は右辺以下、=<という書き方は誤りなので気を付けましょう。
NULLはスペースも何も入っていない状態。前にも書きましたが実務的にはNULLがない状態にするのが一般的だそうです。
p.83 NULLかどうかを判定する
この判定には<や>、=などの比較演算子は使えないです。
判定するには IS NULLを使います。NULLでないことを判定するのには
IS NOT NULLを使います。下のコードは出金額がNULLになっているレコードを取得します。
select *
from 家計簿
where 出金額 IS NULL
p.84 LIKE演算子
文字列内に「1月」が含まれているものを選択したいなどの場合に使われます。'%1月%'と書くと○○1月○○の文字列を選択します。丸には0文字以上の任意の文字列が入るので、○に入る文字がないことも許容されます。
'1月_'と書くと1月に続けて1文字だけ任意の文字を入れたものが選択されます。1月のあとに5文字続けたものを選択したければ、1月_____とアンダーバーを5つ並べます。
select *
from 家計簿
where メモ LIKE '%1月%'
p.86 between
ある範囲内に値が収まっているかを判定する。下のコードは500以上900以下の範囲で表示させます。
select * from 家計簿
where 出金額 between 500 and 900
p.87 IN演算子 in (値1, 値2, …)
複数の値に該当したものすべてを選択します。
select *
from 家計簿
where 費目 in ('食費', '交際費')
のように書きます。ただ項目が食費だけとか1項目の場合はinではなく=を使ってwhere 費目 = '食費'のように書いて下さい。
p.88-89 any/all
anyはin(1000, 2000, 3000)どれか一つと一致すれば真
○○ < any (1000, 2000, 3000) でどれかより小さければ真
○○ < all (1000, 2000, 3000) すべての条件を満たせば真
p.91-92 and / or
where句ではandとorが使えます。
update 湊くんの買い物リスト
set 価格 = 6200
where 名称 = 'スッキリ勇者クエスト'
and 販売店 = 'B'
のようなSQL文が書けます。where句に続けてandで条件を指定することで、スッキリ勇者クエストかつ販売店がBのところの価格を変更する文となっています。orは和演算、andは積演算ともいい、両社が混じるとandを優先して処理されます。orを先に処理して実行するには次のように括弧で囲います。
select *
from 湊くんの買い物リスト
where (販売店 = 'A'or 販売店 = 'B')
and (カテゴリ = 'ゲーム'or カテゴリ = 'DVD')
NULLのところ以外は中間試験に出題されるようです。
この記事が気に入ったらサポートをしてみませんか?