C言語によるプログラミング基礎
物質工学科
電気・機械実習
評価について
2 評価: 演習1~9 9点×9テーマ=81点 演習10 19点 提出: 1週目に貸し出したUSBメモリに自分の学籍番号のフォルダを作る。 各演習の.cファイルを指定されたファイル名で保存する (演習10については.exeファイルも併せて保存) 最終週の翌週火曜日8:50までにUSBメモリを提出 指定時間までに提出されない場合 -10点 USBメモリの紛失 -10点 + 同じUSBメモリを弁償実習計画
第1週 実行ファイルの作成、変数・関数の基礎を確認 練習1:実行ファイルの作成&画面出力 「printf」文 練習2:変数の型 練習3:キーボード入力 「scanf」文&四則演算 演習1~3 第2週 繰り返しとその制御の方法を習得する 練習4:サブルーチン(関数の取扱) 練習5:繰り返し 「for」 練習6:繰り返し 「while」 演習5~6 第3週 条件分岐の方法を習得する 練習7:条件分岐 「if else」 練習8:条件分岐の入れ子 「else if」 論理演算子 「&& , ||」 演習7~9 第4週 演習10 野球のスコアボード実習の流れ
4 エディタのインストール
↓
コンパイラのインストール
↓
PATHの追加
↓
練習
コーディング(プログラミング) 保存 コンパイル 実行↓
演習
コーディング(プログラミング) 保存 コンパイル 実行 初回のみ 実習開始時のみC言語開発環境の準備とファイルの保存
1. エディタのインストール
USBメモリ内の「1. Emeditor_18.7.2_64bit版」からインストール ※OSが32bit版の場合は1. Emeditor_18.7.2_32bit版 2. コンパイラのインストール
USBメモリ内の「 2. Cコンパイラ インストール手順.pdf」 に従ってインストール 保存について
ファイル名は原則 半角英数字 拡張子は”.c”とする。 ex) prog01.cコンパイル 手順1
6 ① コマンドプロンプトの起動と準備 スタート → Windowsシステムツール → コマンドプロンプト ② PATHの追加 (その日に一度だけ) コマンドプロンプトに入力> set PATH=%PATH%; C:¥MinGW¥bin
③ コンパイル準備 (その日に一度だけ)
USBメモリのドライブレター(ドライブ名)を確認 ex) D、E
USBメモリ内に学籍番号のフォルダを作成 ex) 15410
コマンドプロンプトに入力
> d: (USBメモリに移動)
> cd 15410 (自分のフォルダに移動)
コンパイル手順2
④ コンパイル コマンドプロンプトに入力 > gcc ファイル名.c ex) gcc ex01.c gccとファイル名の間に半角スペースが必要 自分のフォルダ内に「a.exe」が生成される ⑤ 実行 コマンドプロンプトに入力 > a.exe 適宜ファイル名を変更すること。 (コンパイルするごとに上書きされる)#include <stdio.h>
int main(){
printf(“Hello World¥n");
}
練習1.実行ファイルの作成&画面出力
printf文
8 ファイルの 取り込み 標準ライブラリ スタンダードIO(入出力) 画面に文字を表示させる命令 Main関数 一番初めに実行される処理 命令文の最後には セミコロン「;」をつける 日本語以外は半角英数で入力! 第1週 「Hello World」と表示されたら成功! ¥n は改行 “{”から”}”までが Main関数で実行される 半角スペース ファイル名「prog01.c」で保存&コンパイル演習1 printf文を5, 6行追加した文章を表示せよ。 改行位置も工夫すること。 printf("こんにちは世界¥n"); printf(“いえ、こんにちは宇宙¥nこんばんは宇宙"); ファイル名「ex01.c」で保存&コンパイル&提出
練習1.実行ファイルの作成&画面出力
printf文
Main関数内にprintfを記述すれば、その分だけ表示される。 Printf ( “xxx”)のxxxの前か後ろに¥nを付けないとprintfが連結される 10進数 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 16進数 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 16進数とは 10進数は 0 から 9 までの 数字を使って数を表し、 数が 0 から 1、2、3… と順に増えていき、7、8、9 までは 1桁、 次は桁上がりして 10となる 。 16進数には 16種類の数字がありますが、 1~9とアルファベットの A ~ F を 「数字」 として使用 16進数は 0 から F までの 16種類の数字を使って数を表し、 数が 0 から 1、2、3… と順に増えていくとき、7、8、9 の次は A、B、C と続き、 D、E、F までは 1桁ですが、 次に桁上がりして 10 になります#include <stdio.h> int main(){ int i, j; float k; i = 10; j = 2; k = 30.2515; printf("i = %d¥n j = %d¥n k = %f¥n", i, j, k); j = i; // “=“は代入を意味する k = (float)i ; //実数型へ変換 printf("i = %d¥n j = %d¥n k = %f¥n", i, j, k); }
練習2.
変数の型
演習2 上記の変数 i について 16進数の整数で表示せよ。また、変数 k について小数点以下2桁 までの表示(30.25)にせよ。 %.2f 小数点以下の桁数の指定 ファイル名「ex02.c」で保存&コンパイル&提出 変数の型を宣言 int 整数型 char 文字型 float 単精度浮動小数点型 double 倍精度浮動小数点型 フォーマット指定子 %d 10進数の整数 %x 16進数の整数 %f 実数 %c 1文字 %s 文字列 ファイル名「prog02.c」で保存&コンパイル 「//」 はコメントの意味。実行されない。#include <stdio.h> int main(){
int a[2] ; //整数型の変数配列aを2個作りなさい
char c[100]; //文字型の変数配列cを100個作りなさい
printf("整数を2つ入力してください> ");
scanf(“%d %d”,&a[0], &a[1]);
printf("入力された数字の和は%dです。¥n", a[0]+a[1]); printf("文字列を入力してください>"); scanf("%s",&c); printf("入力された文字列は%sです。¥n",c); }
練習3.キーボード入力
scanf文
&四則演算
& はアドレス演算子 配列 a[0], a[1] 1つ目の入力値をa[0]、2つ目の入力値をa[1]に代入する [ ]内は0から始まる12 演習3 キーボードから10進数の整数を3つ入力し、その平均値を整数で表示せよ。
練習3.キーボード入力
scanf文
&四則演算
#include <stdio.h> int main(){ int a[_] ; printf(“整数を3つ入力してください> "); scanf(“___”, ____); printf(“平均は%dです。¥n”, ________); } ファイル名「ex03.c」で保存&コンパイル&提出 配列の入れ物を3つ用意する 3つの入力を受付け、配列に代入する 3つの変数から平均を求める#include <stdio.h>
int shou(int x, int y){ int z; z = x / y; return z; } int main(){ int a = 10, b = 3, c; c = shou(a, b); printf("商は%d ¥n", c); return 0; //終了時に0を返す。省略可 }
練習4.
サブルーチン(関数の取扱)
サブルーチン 商の計算をする関数を作成。これをサブルーチンとして利用する。 第2週 変数aとbを整数型変数xとyとして受け取る 変数zの値 を返す サブルーチンshouに変数aとbを送る#include <stdio.h>
int shou(int x1, int y1){ int z1;
z1 = x1 / y1; return z1; }
int amari(int x2, int y2){ int z2; z2 = x2 ___ y2; return z2; }
練習4.
サブルーチン(関数の取扱)
演習4 練習4に余りを計算するサブルーチンを追加し、余りも表示するプログラムにせよ。 余りの算出 z = x % y; ファイル名「ex04.c」で保存&コンパイル&提出 int main(){ int a = 10, b = 3, c, d; c = shou(a, b); d = amari(___, ___); printf("商は%d ¥n", c); printf(“余は%d ¥n", d); return 0; //終了時に0を返す。省略可 }#include <stdio.h> int main(){ int i, j; j = 10; for { printf("現在の値は%dです。¥n", i); } }
練習5.繰り返し
for文
条件式で利用できる不等号 < <= > >= == != (未満) (以下) (超える) (以上) (等しい) (等しくない) 指定回数だけ繰返す 表示を10回繰り返すプログラム (i = 0; i < j; i++) i = 0 … iは0からスタート i < j … iがjより小さい間繰り返す16 演習5 任意の数字(学籍番号の下3桁)から1000までの数字を足し合わせた合計を 表示せよ。
練習5.繰り返し
for文
変数(整数型)を2つ用意 jは合計値で初期値0for (iは(学籍番号下3桁)から始まり、 iが1000になるま で繰り返し、iは1ずつ増加する) { jはjにiを加えたもの; } 合計値jを表示せよ #include <stdio.h> int main(){ int i, j; j = 0;
for (i=_____; i___1000;i++){ j = j + i;
}
printf(“合計値は%d”, j); }
#include <stdio.h> int main(){ int i, j, k; i = 10; //加算する数値 j = 0; //合計を入れる変数 k = 0; //加算した回数 while (j <= 500){ j = j + i; i++; k++; } printf("合計が500を越えたのは%d回目",k); }
練習6.繰り返し
while文
条件を満たす間、繰返す ( )内の条件を満たしている間、 { }内を繰り返し実行 10から1つずつ数字を加算し、500を越えるのが何回目かを表示する。18 演習6 貯金が毎年1.01倍ずつ増えるとする。キーボードから最初の金額と目標金額を 入力し、目標金額まで達する年数を表示せよ。
練習6.繰り返し
while文
ファイル名「ex06.c」で保存&コンパイル&提出 整数型変数を2つ用意; 小数点型変数を2つ用意; kを利率(*1.01)とする; scanfで変数を2つ入力を受ける; 貯金額iが目標金額jより大きくなるまで繰り返す{ 貯金額は、貯金額×利率; 繰り返しを1回実行すると1年; } 計算された年数を表示する; #include <stdio.h> int main(){ int j,l=0; _(型の宣言)_ i,k; k=1.01; printf("現在の金額、目標金額の順で入力¥n"); scanf(“___ ___",&i,&j); while(i __ j){ i=i*k; l++; } printf(“%d年かかります¥n",l); }練習7.
if else
:条件分岐
#include <stdio.h> int main(){ int x; printf("整数を入力してください> "); scanf("%d",&x); printf("入力された数字%dは", x); if (x % 2 == 0){ もし、x÷2の余りが0ならば、 printf(“偶数”); 「偶数」を表示 } else { しなさい。 そうでなければ、 printf(“奇数”); 「奇数」を表示 } しなさい。 printf("です。¥n"); } 第3週 偶数か奇数かを判別する練習7.
if else
:条件分岐
20 演習7 練習7のプログラムにおいて、負の値や0を入力した場合は、例外としてエラーと するようにif else部分を書き換えよ。 ファイル名「ex07.c」で保存&コンパイル&提出 もし、入力値xが0より大きいなら、 もし、x÷2の余りが0なら、 「偶数です」と表示 そうでなければ、 「奇数です」と表示 する。 そうでなければ、 「0以下の数字です」と表示 する。 if (x _____ ) { if ( ______ ) { printf (___); } else { printf (___); } else { printf (_______); } ヒント: if文を入れ子にする。 (if文のなかにif文を入れる)練習
8.
else if
:条件分岐の入れ子
&& , ||
:論理演算子
#include <stdio.h> int main(){ int a[2]; printf("整数を2つ入力してください> "); scanf("%d %d",&a[0], &a[1]);if (a[0]%2==0 && a[1]%2==0){ もし a[0]が偶数かつa[1]が偶数の場合は、
printf(“両方とも偶数です¥n”); 「両方とも偶数です」と表示
} else if (a[0]%2!=0 && a[1]%2!=0) { もし a[0]が偶数でなく、かつa[1]が偶数でない場合は、
printf(“両方とも奇数です¥n”); 「両方とも奇数です」と表示 } else { そうでなければ、 printf(“一方が奇数です¥n”); 「一方が奇数です」と表示 } する。 } 2つの数字がどちらも偶数か、どちらも奇数か、それ以外かを判別する 論理演算子 && AND (~かつ~) || OR (~もしくは~)
22 演習8 1~12月のうち1つの数字入力し、春夏秋冬の季節を表示せよ。 演習9 3つの数字を入力し、大きい順に並べ替えよ。 ファイル名「ex09.c」で保存&コンパイル&提出 ファイル名「ex08.c」で保存&コンパイル&提出 春:3~5月 夏:6~8月 秋:9~11月 冬:12・1・2月
3以上かつ5以下 (a>=3 && a<=5) 6以上かつ8以下 (a>=6 && a<=8) 9以上かつ11以下 (a>=9 && a<=11)
それ以外 (a==12 || a==1 || a==2)
a[3]とb[3]を用意する。 もし、a[0] > a[1] ならば、 b[0]にa[0]を代入 b[1]にa[1]を代入 そうでなければ、 b[0]にa[1]を代入 b[1]にa[0]を代入 する。 もし、b[1] > a[2] ならば、 b[2]にa[2]を代入 そうではなく、b[0] > a[2]ならば、 b[2] に b[1] を代入 b[1] に a[2] を代入 そうではなく、b[0] < a[2]ならば、 b[2] に b[1] を代入 b[1] に b[0] を代入 b[0] に a[2] を代入 する。 3つの数字を大きい順に並べるとb[0] > b[1] > b[2]