専門学校35日目(情報工学)5月31日(金)

1時限~3時限
C言語基礎 やさしいC 第5版

前回は条件分岐でif~else、switch文を学んだ。
今日は教科書p.140-

p.143
条件演算子でif文を(条件式) ? 'A' : 'B';と書き換えられる。
コロンの左が真の時の式、右側が偽の時の式elseがコロン(:)になっている。単純なif文なら条件演算子に置き換えるとよい。

ビット単位の論理演算子
5 00101
&12 01100
4 00100
となる。and演算子なので、5と12の両方とも1の部分だけが取り出される。
&はand、|はor、^はxor、~はnot
以下は条件演算子と呼ばれるものを使った条件分岐です。ifの代わりに
(条件式) ? (真の場合の処理) : (偽の場合の処理)として記述することで、分岐ができます。

#include <stdio.h>
int main(void)
{
int inum, ians;
printf("整数を入力してください。\n");
scanf_s("%d", &inum);
ians = (inum % 2 == 0) ? 0 : 1;
printf("%d\n", ians);
return 0;
}

以下の論理演算の答えは何ですか?
① 10 & 5
② 9 | 7
③ 15 ^ 6
④ ~-3

①は0
②は15
③は9
④は2
手計算で求めてもいいですが、プログラムで計算することもできます。
printf("%d\n", ~-3);
こんな感じのコードです。
この辺はテストでも出します。

教科書5章の章末問題を解きました。まとめて書いておきます。

#include <stdio.h>
int main(void)
{
//練習問題1
/**
int inum;
printf("整数を入力してください。\n");
scanf_s("%d", &inum);
if (inum % 2 == 0) {
    printf("%dは偶数です。\n", inum);
}
else {
    printf("%dは奇数です。\n", inum);
}
//*/

//練習問題2
/**
int inum1, inum2;
printf("2つの整数を入力してください。\n");
scanf_s("%d", &inum1);
scanf_s("%d", &inum2);
if (inum1 == inum2) {
    printf("2つの値は同じです。\n");
}
else if (inum2 > inum1){
    printf("%dより%dのほうが大きい値です。\n", inum1, inum2);
}
else {
    printf("%dより%dのほうが大きい値です。\n", inum2, inum1);
}
//*/
//練習問題3
/**
int inum3;
printf("0から10までの整数を入力してください。\n");
scanf_s("%d", &inum3);
if (inum3 >= 0 && inum3 <= 10) {
    printf("正解です。\n");
}
else {
    printf("間違いです。\n");
}
//*/
//練習問題4
/**
char ans;
printf("A~Cまでの文字を入力してください。\n");
ans = getchar();
if (ans == 'A' || ans == 'a' || ans == 'B' || ans == 'b' || ans == 'C' || ans == 'c') {
    printf("正解です。\n");
}
else {
    printf("間違いです。\n");
}
//*/
//練習問題5
/**
int i_seiseki;
printf("成績を入力してください。\n");
scanf_s("%d", &i_seiseki);
switch (i_seiseki) {
    case 1:
        printf("成績は%dです。\n", i_seiseki);
        printf("もっとがんばりましょう。\n");
        break;
    case 2:
        printf("成績は%dです。\n", i_seiseki);
        printf("もう少しがんばりましょう。\n");
        break;
    case 3:
        printf("成績は%dです。\n", i_seiseki);
        printf("さらに上をめざしましょう。\n");
        break;
    case 4:
        printf("成績は%dです。\n", i_seiseki);
        printf("たいへんよくできました。\n");
        break;
    case 5:
        printf("成績は%dです。\n", i_seiseki);
        printf("たいへん優秀です。\n");
        break;
}
//*/
問題4を条件演算子を使うと以下のようになります。
/**
char ans;
printf("A~Cまでの文字を入力してください。\n");
ans = getchar();
(ans == 'A' || ans == 'B' || ans == 'C') ? printf("正解です。\n") : printf("間違いです。\n");
//*/
}

最後に簡潔に答え合わせをして終わりました。

時間の余った人のために昨年の中間テストのペーパーテストとプログラミングの問題を見せてもらいました。入力した整数の範囲内で完全数を求める問題などがありました。


4時限~6時限
webDBシステム開発 スッキリわかるSQL入門第3版ドリル256問付き

前回はテーブルの操作や制約を学びました。
6月7日(金)にSQLの中間試験だそうです。Javaも同じ先生が担当ですが、こちらは6月10日に中間試験です。

SQLの練習問題に取り組みました。以下、答えだけ載せます。

create table 為替一覧 (
    ID integer primary key,
    国名 varchar(10),
    通貨 varchar(6),
    円比較数 integer,
    円 numeric
    )
insert into 為替一覧
values (1, 'アメリカ', 'ドル', 1, 125.10)

insert into 為替一覧
values (2, 'イギリス', 'ポンド', 1, 212.70)

insert into 為替一覧
values (3, 'ドイツ', 'マルク', 1, 73.08)

insert into 為替一覧
values (4, 'フランス', 'フラン', 1, 22.02)

insert into 為替一覧
values (5, 'オランダ', 'ギルダー', 1, 64.81)

insert into 為替一覧
values (6, 'デンマーク', 'クローネ', 1, 19.32)

insert into 為替一覧
values (7, 'カナダ', 'ドル', 1, 89.70)

insert into 為替一覧
values (8, 'イタリア', 'リラ', 100, 7.69)

insert into 為替一覧
values (9, 'オーストラリア', 'ドル', 1, 88.25)

insert into 為替一覧
values (10, '香港', 'ドル', 1, 16.49)

insert into 為替一覧
values (11, 'オーストリア', 'シリング', 1, 10.44)

insert into 為替一覧
values (12, 'シンガポール', 'ドル', 1, 79.67)

insert into 為替一覧
values (13, 'スペイン', 'ペセタ', 100, 87.60)

insert into 為替一覧
values (14, 'ポルトガル', 'エスクード', 1, 0.74)

insert into 為替一覧
values (15, 'サウジアラビア', 'リヤル', 1, 33.92)

insert into 為替一覧
values (16, '中国', '元', 1, 15.33)

insert into 為替一覧
values (17, 'タイ', 'バーツ', 1, 3.36)

insert into 為替一覧
values (18, 'インド', 'ルピー', 1, 3.65)

insert into 為替一覧
values (19, '韓国', 'ウォン', 100, 12.72)

insert into 為替一覧
values (20, 'ニュージーランド', 'ドル', 1, 79.51)
select *
from 為替一覧
where 通貨 = 'ドル'

select *
from 為替一覧
where 通貨 in ('ポンド','フラン')

select *
from 為替一覧
where 通貨 <> 'ドル'

select *
from 為替一覧
where 通貨 not in ('ポンド','フラン')

select *
from 為替一覧
where 円 between 80 and 150

select *
from 為替一覧
where ID >= 10

select *
from 為替一覧
where 通貨 = 'ドル'
and 円 >= 80

select *
from 為替一覧
where 通貨 in ('ギルダー', 'クローネ', 'シリング', 'リヤル')

select *
from 為替一覧
where 国名 like '%ア'

select *
from 為替一覧
where 通貨 in ('マルク', 'フラン')
or 円比較数 = 100

select *
from 為替一覧
order byselect *
from 為替一覧
order by 円 desc

select * 
from 為替一覧
order by 円 desc
offset 0 rows
fetch next 3 rows only

select * 
from 為替一覧
order by 円 desc
offset 2 rows
fetch next 1 rows only

select * 
from 為替一覧
order by 円
offset 0 rows
fetch next 5 rows only

次に教科書のドリルに取り組みました。
p.452の24-32
p.458の25-33
p.464の23-31
これはコードとしては書かないでおきます。dokoQLで実行できます。

p.452の問題から

24
select *
from 口座
order by 1 asc

25
select distinct 名義
from 口座
order by 名義 asc

26
select *
from 口座
order by 4 desc, 1 asc

27
select 更新日
from 口座
where 更新日 is not null
order by 1 asc
offset 0 rows
fetch next 10 rows only

28
select 更新日, 残高
from 口座
where 更新日 is not null
and 残高 <> 0
order by 2 asc, 1 desc
offset 10 rows
fetch next 10 rows only


29
select 口座番号 from 口座
union
select 口座番号 from 廃止口座
order by 口座番号

30
select distinct 名義 from 口座
except
select distinct 名義 from 廃止口座
order by 1 desc

31
select 名義 from 口座
intersect
select 名義 from 廃止口座
order by 名義

32
select 口座番号, 残高 from 口座
where 残高 = 0
union
select 口座番号, 解約時残高 from 廃止口座
where 解約時残高 <> 0
order by 口座番号


p.458
25
select 商品コード, 商品名 from 商品
where 商品区分 = '1'
order by 1 desc

26
select 注文日, 注文番号, 注文枝番, 商品コード, 数量
from 注文
where 注文日 >= '2024-03-01'
order by 1, 2, 3

27
select distinct 商品コード
from 注文
order by 商品コード asc

28
select 注文日
from 注文
order by 注文日 desc
offset 0 rows
fetch next 10 rows only

29
select *
from 商品
order by 単価 asc, 商品区分 asc, 商品コード asc
offset 5 rows
fetch next 15 rows only

30
select *
from 廃番商品
where 廃番日 between '2022-12-01' and '2022-12-31'
or 売上個数 > 100
order by 売上個数

31
select 商品コード
from 商品
except
select 商品コード
from 注文
order by 商品コード

32
select 商品コード
from 商品
intersect
select 商品コード
from 注文
order by 商品コード desc

33
select 商品コード, 商品名, 単価
from 商品
where 商品区分 = '9'
and (単価 <= 1000
or 単価 > 10000)
order by 単価 asc


p.464
23
select distinct 状態コード
from パーティー

24
select ID, 名称
from パーティー
order by ID asc

25
select 名称, 職業コード
from パーティー
order by 1 desc

26
select 名称, hp, 状態コード
from パーティー
order by 3 asc, 2 desc]

27
select タイプ, イベント番号, イベント名称, 前提イベント番号, 後続イベント番号
from イベント
order by 1 asc, 2 asc

28
select *
from パーティー
order by hp desc
offset 0 rows
fetch next 3 rows only

29
select *
from パーティー
order by mp desc
offset 2 rows
fetch next 1 rows only

30
select イベント番号
from イベント
except
select イベント番号
from 経験イベント
order by 1 asc

31
select イベント番号
from イベント
where タイプ = '2'
intersect
select イベント番号
from 経験イベント


この記事が気に入ったらサポートをしてみませんか?