演習大会

本日の内容

    9-1. 前回の自己採点表を見ての感想
    9-2. 演習大会
    9-3. 解説

9-1. 前回の自己採点表を見ての感想

うまくできてない人のパターン

  1. 基本的なことを理解したいが説明を受けてない
  2. 授業が早い
  3. 自己評価が厳しすぎるのでは?

プログラム中に使われる記号などの意味を全て説明するのは、プログラムをか なり作れるようになってからで十分であると思うので、意味より定型の形を覚えるようにして下さい。 例えば、#include <stdio.h>や、printfの 詳しい説明は膨大な量になりますが、習いはじめは画面に出力するために必要な手順として覚える方が目的にあってます。この場合の目的とは簡単なプログラムが作れることで、 C 言語の文法学を学んでいるのではありません。 例えば、簡単な英会話を学ぶ上で、「Hello」の厳密な意味を知る必要はないでしょう。

「授業が早い」に関しては、なんとか復習で追い付いて下さい。 こちらも工夫します。

また、全て自分の力でできることは重要ではありますが、この授業での合格点は理解ができるかどうかが重要です。 友人に教えてもらったりしても、最終的に授業の内容が理解できればまず合格だと思ってください。 授業中にすべて自力でできなくても、家での復習で自力でできるようになれば十分です。

9-2. 演習大会

演習9-1

画面に abcdefg を印刷するプログラムを書け

演習9-2

整数型変数iは次のように定義されているとする。

int i=23;

画面にiの内容を表示するプログラムを書け。 但し、出力は次のようになるのが望ましい。


The value of i is 23.

演習9-3

浮動小数点型変数xは次のように定義されているとする。

float x=0.314E1;

画面にxの内容を表示するプログラムを書け。 但し、出力は次のようになるのが望ましい。


変数 x の値は 3.14000.

演習9-4

文字型変数cは次のように定義されているとする。

char c='a';

画面にcの内容を表示するプログラムを書け。 但し、出力は次のようになるのが望ましい。


文字変数 c の値は 'a' である。

演習9-5

文字型の配列変数sは次のように定義されているとする。

char s[]="abcdefg";

画面にsの内容を表示するプログラムを書け。 但し、出力は次のようになるのが望ましい。


配列変数 s は文字列として abcdefg という値を持つ。

演習9-6

変数i の値が 0 より大きかったら画面に「正の値」、0 より小 さかったら画面に「負の値」、 0 だったら「零」を表示するプログラムを書 きなさい。

(但し、あらかじめiには次のように値が代入されているとする。)

int i=3;

演習9-7

あらかじめ浮動小数点の変数a, bには次のように値が与えられているとする。

float a=3.0;
float b=6.0;

このとき、a≠0であるとき、一次方程式

a x + b = 0

の解を求め表示せよ。

演習9-8

あらかじめ浮動小数点の変数a, bには次のように値が与えられているとする。

float a=3.0;
float b=6.0;

この時、式

a x + b = 0

の解を求め表示せよ。但し、aが 0 であっても正しく解を表示できるようにせよ。

演習9-9

整数変数nは次のように値が代入されているとする。

int n=50;

このとき、画面に1からnまでを表示するプログラムを書け。

演習9-10

整数変数nは次のように値が代入されているとする。

int n=50;

このとき、画面に1からnまでの和、つまり

1+2+3+...+n

の値を表示するプログラムを書け。

演習9-11

整数変数の配列に次のように値が代入されているとする。

int a[10]={5,4,2,0,1,9,7,3,8,6};

この時、画面に a[0] から a[9] までの値を表示するプログラムを書け。

演習9-12

整数変数の配列に次のように値が代入されているとする。

int a[10]={5,4,2,0,1,9,7,3,8,6};

この時、画面に a[0] から a[9] までの合計を表示するプログラムを書け。

演習9-13

浮動小数点変数の配列に次のように値が代入されているとする。

float x[10]={5.0,4.0,2.0,0.0,1.0,9.0,7.0,3.0,8.0,6.0};

この時、画面に x[0] から x[9] までの平均を表示するプログラムを書け。

演習9-14

文字列が次のように文字型配列変数に与えられているとする。

int k=6;
char a[]="This is a sample string.";

このとき、文字列の k 文字目(つまり 6 文字目)を出力するプログラムを書け。

演習9-15

文字列が次のように文字型配列変数に与えられているとする。

char a[]="This is a sample string.";

このとき、この文字列の長さを出力するプログラムを書け。

演習9-16

文字列が次のように文字型配列変数に与えられているとする。

char a[]="This is a sample string.";

このとき、この文字列を逆向きに出力するプログラムを書け。

演習9-17

文字列が次のように文字型配列変数に与えられているとする。

char c='i';
char a[]="This is a sample string.";

このとき、この文字列中に変数 c の文字(つまり「i」)がいくつ使われているかを出力するプログラムを書け。

演習9-18

文字列が次のように文字型配列変数に与えられているとする。

char c='m';
char a[]="This is a sample string.";

このとき、この文字列中で最初に変数 c の文字(つまり「m」)が使われている 文字が何番目かを出力するプログラムを書け。

演習9-19

変数が次のように定義されているとする。

char a[]="-123";
int i;

このとき、i に a[] が示す数を代入し、i の値を出力するプログラムを書け。

演習9-20

変数が次のように定義されているとする。

char a[]="-123.02";
float x;

このとき、x に a[] が示す数を代入し、x の値を出力するプログラムを書け。

9-3. 解説

Hello, Wolrd

#include <stdio.h>
main(){
  printf("Hello, World!\n");
}

というプログラムは画面に Hello, World を表示する。

printf という関数は画面に文字を出力する関数である。 これを使うためには最初に #include <stdio.h> という行をつける必要がある。

C の構文

C のプログラムは main(){ で始まり、 } で終る。その中に文を書く。 各文は「;(セミコロン)」で終る。

変数と宣言

変数を使うには宣言をする必要がある。 変数には整数型(小数点が必要ない時)、浮動小数点型(小数点が必要な時)、文字型(一文字)がある。それぞれの宣言は次の通りである。

整数型
int i;
浮動小数点型
float x;
文字型
char c;

配列

また配列の宣言は次のようにする。

整数型
int i[10];
浮動小数点型
float x[10];
文字型
char c[10];

これでそれぞれ i[0]からi[9]x[0]からx[9]c[0]からc[9]、 の配列が使用できる。

文字型の配列は文字列を表現できる。文字列の最後には特殊な文字 '\0' を入れなければならない。

printf

「\n」は改行を意味する。

printf で変数の内容を表示するには、最初の文字列で印刷する位置を % で指定し、 % の順番に対応するように変数を書く。

整数型の表示
int i=3;
printf("変数 i の値は %d\n",i);
浮動小数点型の表示
float x=314E-2;
printf("変数 x の値は %f\n",x);
文字型の表示
char m='x';
printf("変数 m の値は %c\n",m);
文字型の配列(つまり文字列)の表示
char y[]="mojiretsu";
printf("変数 y の値は %s\n",y);

if文

if 文の構文を使用すると、条件によりプログラムの流れを変えることができる。

構文1
if(条件)
{
  文
}

「条件」が成立したら「文」を実行する。

構文2
if(条件)
{
  文1
}else{
  文2
}

「条件」が成立したら「文1」を実行し、「条件」が成立しなければ「文2」を実行する。

条件の書き方

条件は次のように書く

x が 3 と等しい
x==3
m が 't' と異なる
m!='t'
y が 0.1 より大きい
y>0.1
i が 10 より小さい
i<10
y が -0.1 以上、 0.1 以下
(y>=-0.1)&&(y<=0.1)
a[i]は「空白」か、「文字列の最後」のどちらか。
(a[i]==' ')||(a[i]=='\0)

while構文

while は条件が成立している間、文を繰り返すことができる。

while(条件)
{
  文
}

「条件」が成立している間、文を繰り返す。

空白が終るまで、 i を一つずつ増やす(処理が終ると i は次の単語の先頭を指す)
while(a[i]==' ')
{
  i=i+1;
}

for 文

繰り返しにおいて、前処理、条件、後処理をまとめて指定する構文

for(前処理;条件;後処理)
{
  文
}

前処理を行った後、条件が成立している間、文と後処理を繰り返す。

b[0] から b[9] までの合計を求める。
sum=0;
for(i=0;i<10;i=i+1)
{
  sum=sum+b[i];
}
for は while の特殊な形なので、for が使える場面で while を利用しても間違いではない。但し、上記のように、変数 i の処理をまとめて書けるので、プログラムを読みやすくする工夫として有効である。 また、 for は良く使われる。プログラムを読む時には頻繁に出てくる。