Copyright(C) 11Jan2003 coskx
Cプログラムの超入門編である。
ここで修得して欲しい内容は以下のとおり。
1.Cプログラムの標準スタイルが書ける。
2.printfで簡単な出力ができる。
3.printfで\nの意味がわかる。
4.printfの%d,%f,%10dなどの書式がわかる。
5.printfで,変数の値を表示できる。
6.プログラムは上から1行ずつ実行されていることがわかる。
7.実行部での変数と「=」の意味がわかる。
8.scanfでキーボードから変数に数値を入力できる。
9.三角形の面積を求めるなど,簡単なプログラムが作成できる。
10.整数の割り算で,小数点以下が切り捨てられることを知っている。
11.整数の剰余演算「%」が使える。
1.1 printfのある最初のプログラム |
---|
1.1.1 printfは画面への文字出力
最初のプログラムでは,多くの規則が,説明されているが,重要だと指摘されているところのみ,プログラムと 実行結果の対応を理解すればよい。「おまじない」だと説明されているところは,理解しようとしてはいけない。C言語の習得では,最初に 「おまじない」の部分をすなおに「おまじない」として受け入れることが大切である。
★list 1.1.1のプログラムをPC上で実行しながら,以下の説明を読みなさい。
List 1.1.1 printfのあるプログラム
右側に示した青字の部分が重要なところであり,
グレーの文字のところは「おまじない」なので理解しようとしてはいけない/*coskx*/
/*printf example*/
#include <stdio.h>
int main()
{
printf("Hello. How are you?\n");
printf("I'm good. How about you?\n");
printf("I'm feeling great.\n");
return 0;
}/*coskx TNCT*/
/*printf example*/
#include <stdio.h>
int main()
{
printf("Hello. How are you?\n");
printf("I'm good. How about you?\n");
printf("I'm feeling great.\n");
return 0;
}実行結果例 実行結果 (コンソール画面へのプログラムの出力部分) Hello. How are you?
I'm good. How about you?
I'm feeling great.補足説明
青字の部分が右側は重要なところであり,
グレーの文字のところは「おまじない」なので理解しようとしてはいけない(1)「/*」と「*/」で囲まれた部分はコメント(注釈)でプログラムの実行とは関係ない。
(2)「#include <stdio.h>」の説明は後ほど行なう。今は「おまじない」と考える。
コンパイラシステムが持つ「stdio.h」というファイルを#include・・・の位置に
取り込みなさいという意味。(PC内でファイル「stdio.h」を検索すると見つかる)
(stdio は standard I/O (スタンダードインプット・アウトプット,
標準入出力) の意味)
(3)「int main()」は実行するプログラムの本体の始まりを表す。
本当は int型関数mainの先頭部分 の意味
(4)mainの中の文は上から下に向かって1行ずつ実行される。
(5)コンソール画面に文字を表示する時にはprintfを使う。
(6)printfでは「"(ダブルクォーテイション)」で囲まれた内容を表示する。
(7)printfで「\n」が出てきたらその位置で改行される。「\」は特別な文字である。
(8) 「return 0;」は終わりの印ということにしておく。
本当はmain関数を呼び出したOSに返り値0を持って戻るという意味。結局このプログラムは次のように読めば良い。
プログラムから日本語へ,日本語からプログラムへの両方向の変換ができるようにしておく必要がある。
printf("Hello. How are you?\n");
printf("I'm good. How about you?\n");
printf("I'm feeling great.\n");
「Hello. How are you?」と書いて改行する。
「I'm good. How about you?」と書いて改行する。
「I'm feeling great.」と書いて改行する。
プログラムは,1行ずつ,上から下へと実行される。
「printf("xxxxxxxx")」は「コンソール画面へxxxxxxxxを表示しなさい」の意味。 "Hello. How are you?\n" や "So so.\n" は「文字列」と呼ばれる。
「printf(文字列);」は文字列をコンソール画面に表示する命令である。
1.1.2 「\n」の有無による実行結果の変化
2つめのプログラムである。前のプログラムとどこが同じでどこが異なるかよく見ること。
目の付け所 : \n の位置
★list 1.1.2のプログラムをPC上で実行しながら,以下の説明を読みなさい。
List 1.1.2 printfのあるプログラム /*
| coskx
| printf example
*/
#include <stdio.h>
int main()
{
printf("Good morning.\n");
printf("Good morning. ");
printf("Did you sleep well?\n");
printf("Not really. ");
printf("I woke up several times because it was so hot.\n");
return 0;
}実行結果(コンソール画面への出力)
改行しているところとしていないところがある。
「\n」と改行位置の関係を注意深く見ておくこと。
Good morning.
Good morning. Did you sleep well?
Not really. I woke up several times because it was so hot.コメント(注釈,人間のためのメモでプログラムの実行とは無関係)は「/*」と「*/」に挟まれた領域であ り,
改行されていても構わない.このプログラムでは最初の4行がコメントである。
改行に関する細かなルール
Cのプログラミングスタイル
プログラムのスタイルはC言語開発者のカーニハン・リッチのスタイルに合わせる場合が多い。
プログラム本体の行の書き出しの位置を右に下げる。(このことを字下げ(indentation)という)
・下げる幅はスペース4個分がよく使われる。
・字下げにはタブを使ってもよいが,1つのファイル中の字下げにタブとスペースを混用しないこと。
練習1.1 |
次のプログラムの実行結果を予想しなさい。
List 1.1.3 printfのあるプログラム #include <stdio.h>
int main()
{
printf("Hello. How are you?");
printf("I'm good. How about you?");
printf("I'm feeling great.\n");
return 0;
}実行結果 の予想1 実行結果 の予想2 実行結果 の予想3 Hello. How are you?
I'm good. How about you?
I'm feeling great.Hello. How are you?I'm good. How about you?I'm feeling great. Hello.
How are you?
I'm good.
How about you?
I'm feeling great.
練習1.2 |
次のプログラムの実行結果を予想しなさい。
List 1.1.4 printfのあるプログラム #include <stdio.h>
int main()
{
printf("Hello.\nHow are you?\n");
printf("I'm good.\nHow about you?\n");
printf("I'm feeling\ngreat.\n");
return 0;
}実行結果 の予想1 実行結果 の予想2 実行結果 の予想3 Hello. How are you?
I'm good. How about you?
I'm feeling great.Hello.
How are you?
I'm good.
How about you?
I'm feeling
great.
Hello.
How are you?
I'm good.
How about you?
I'm feeling great.
練習1.3 |
次のプログラムの実行結果を予想しなさい。
List 1.1.5 printfのあるプログラム #include <stdio.h>
int main()
{
printf("Hello.\\nHow areyou?\n");
printf("I'm good.\\nHow about you?\n");
printf("\nI'm feeling great.\n");
return 0;
}実行結果 の予想1 実行結果 の予想2 実行結果 の予想3 Hello.\nHow are you?
I'm good.\nHow about you?
I'm feeling great.Hello.
How are you?
I'm good.
How about you?
I'm feeling great.Hello.\
How are you?
I'm good.\
How are you?
I'm feeling great.
「printf("xxxxxxxx")」中で「\n」は改行を行い, 「\\」は「\」を1つ表示する。
よくある質問
プログラムは,1行ずつ,上から下へと実行される。
1.1.3 定数(値)をprintfで表示
次に,定数を表示します。
★list 1.1.6のプログラムをPC上で実行しながら,以下の説明を読みなさい。
List 1.1.6 printfで定数表示 /*
| coskx
| printf example 2
*/
#include <stdio.h>
int main()
{
printf("%d times %d makes %d\n", 2, 3, 6);
printf("%d times %d makes %d\n", 2, 3, 2*3);
printf("%d times %d makes %d\n", 3, 4, 3*4);
printf("%d times %d makes %d\n", 13, 37, 13*37);
return 0;
}実行結果(コンソール画面への出力) 2 times 3 makes 6
2 times 3 makes 6
3 times 4 makes 12
13 times 37 makes 481補足説明 printf("%d times %d makes %d\n", 2, 3, 6); 中の "%d times %d makes %d\n" の部分のことを書式(書式文字列)という。書式中の「%d」の部分が,後ろに続く数値に置き換わっていく。
一般に「%d」がn個ある場合は,後ろにならぶ数値もn個必要である。
printfの書式中で「%」は特別な意味を持つ文字である。「2*3」は「2×3」を意味し,6になる。また,「10/5」は「10÷5」を意味し,2になる。
(英文で「3 times 4 makes 12」は日本語で「3×4は12」の意味である。)
1.1.4 printfの書式について
桁をそろえて表示したい時には次のように表現する。
★list 1.1.7のプログラムをPC上で実行しながら,以下の説明を読みなさい。
List 1.1.7 printfで定数表示(その2) /*
| coskx
| printf example 3
*/
#include <stdio.h>
int main()
{
printf("%3d times %3d makes %5d\n", 2, 3, 6);
printf("%3d times %3d makes %5d\n", 2, 3, 2*3);
printf("%3d times %3d makes %5d\n", 3, 4, 3*4);
printf("%3d times %3d makes %5d\n", 13, 37, 13*37);
return 0;
}実行結果(コンソール画面への出力)
List 1.1.6の表示と比較してみると表示位置が揃っている
2 times 3 makes 6
2 times 3 makes 6
3 times 4 makes 12
13 times 37 makes 481補足説明 「%3d」は表示する「わく」を3文字分使って「%d」のように与えられた数値を表示するという意味になる。
「%5d」は表示する「わく」を5文字分使うという意味になる。スペース文字はそのまま表示される。
このように,固定した文字数のわくを用いると,整列された表示にすることができる。
「printf("xxx %d xxxxx %d\n", a, b)」では書式内の最初の%dの位置にaの値,次の%dの位置にbの値を表示する。
書式内の「%d」の個数と後ろにならぶ値の個数は一致していなければならない。
詳しくは次を参照してください。
ライブラリ関数 C.1 printfとscanf
課題1その1 |
---|
(1)List 1.1.1を参考にして次の歌をprintfで表示するプログラムを作りなさい。(提出ファイル名は p01ex01.c)
表示内容に関しては,カンマ,ピリオド,空白(特にカンマの直後の空白)に気をつけてプログラムすること。
Happy birthday to you. Happy birthday to you. Happy birthday, dear 自分の名前 Happy birthday to you. |
(2)List 1.1.6 を参考にして,次のように計算して,2乗,3乗,4乗の表を作りなさい。(提出ファイル名は p01ex02.c)
2*2, 2*2*2, 2*2*2*2
3*3, 3*3*3, 3*3*3*3
4*4, 4*4*4, 4*4*4*4
5*5, 5*5*5, 5*5*5*5
参考
printf("%3d %3d %3d\n", 2+2, 2+2+2, 2+2+2+2);
画面への表示は,List 1.1.7 を参考にして,つぎのように,桁をそろえなさい。
4 8 16 |
1.2 変数とprintf |
---|
1.2.1 変数
1.1.3では2や3や6などの定数を表示していた。
定数に対する概念として変数がある。
変数を使ったプログラムをまず見てみよう.プログラムは上の行から下に向かって1行ずつ実行される。★list 1.2.1のプログラムをPC上で実行しながら,以下の説明を読みなさい。
List 1.2.1 printfと変数のあるプログラム
プログラムに出てくるtakaoとhazamaが変数である。
(このプログラムは無意味だが,変数とprintfを用いたプログラム例になっている)#include <stdio.h>
int main()
{
int takao;
int hazama;
takao=555;
printf("takatakao= %d\n", takao);
hazama=888;
printf("hazahazama= %d\n", hazama);
return 0;
}実行結果 takatakao= 555
hazahazama= 888説明
文
意味
int takao; 「整数を記憶することのできる変数 takao を使います」の宣言
int : 変数の型の名前(intなど決められた名前以外は使えない)
「int」とはinteger(整数)の意味
takao : 変数の名前(自由に決めて良い)
int hazama; 「整数を記憶することのできる変数 hazama を使います」の宣言
takao=555; 変数 takao に値555を記憶させる printf("takatakao= %d\n", takao); 「takatakao=」の文字列に続き,「変数 takao に記憶されている値」 を表示し,改行する hazama=888; 変数 hazama に値888を記憶する printf("hazahazama= %d\n", hazama); 「hazahazana=」の文字列に続き,「変数 hazama に記憶されている値」 を表示し,改行する
「int xxxx」は整数型変数 xxxx を使うことを宣言している。
xxxx には整数しか記憶保存できない。
宣言は,実行する文より前に書くのがしきたり。
宣言の仕方 「変数型 変数名;」
変数が出てくると,とたんにプログラムが難しくなったような気がする。とりあえず,変数は次のように考えればよい。
(1)変数とは値を記憶するための記憶箱と考えられる。
(2)変数はアルファベット(複数のアルファベットでもよい)であらわされる。(1.3で詳しく説明する)
(3)変数を使うには,使う前に「使いますよ」という宣言が必要である。
(4)変数に値を記憶するには「=」を用いる。「=」の左側(左辺)に変数を書き,「=」の右側(右辺)に記憶させたい値(あるいは式)を書く。
(5)変数に保存されている値を表示するためにprintfを用いることができる。
(6)一度値を記憶させると,次に新たな値を記憶させない限り,その値を保存している。
「変数」と「=」は次のように数学とは意味が異なる。
数学
C言語
変数 変数とはある範囲の値を代表してx,yなどの文字で表わしたものである。
例えば
ノート1冊100円
ノート2冊200円
ノート3冊300円
ノート4冊400円
:
ノートa冊100×a円
このaは様々な整数を一般化したもので,
変数と呼ばれている。
具体的な値を想定することが可能である。
変数とは値を記憶するための電子的な記憶箱であり,
一度に一つだけ値を記憶させることが出来る記憶箱である。
x,yなどの名前が付いている。
一度記憶すると,記憶し続け,何回でもその値を使うことが出来る。
別の値を記憶させると前の値は忘れ去られる。 「=」の
意味「右辺と左辺の値が等しい」ことを表している。例えば次のように使われる。
2+3=5
(a+b)(c+d)=ac+ad+bc+bdまた次のようにも使える。
5=2+3
ac+ad+bc+bd=(a+b)(c+d)右辺の値を,左辺の変数に記憶せよ(格納せよ)という命令であり次のように使われる。
x=123; c=1+2;
次のような式は意味がない。
123=x; 1+2=c;
変数名はどんな名前を使っても得られる値は変わらないことを次の例で確認しよう
次のプログラム「List 1.2.2」は前の「List 1.2.1」と同じ表示を行うが,変数名が異なっている。
(変数名は適当な名前を用いてもよいが,意味のあるプログラムでは,変数にふさわしい変数名がよい。)
List 1.2.1 printfと変数のあるプログラム
(再掲)List 1.2.2 printfと変数のあるプログラム
(変数名がList 1.2.1とは異なる)#include <stdio.h>
int main()
{
int takao;
int hazama;
takao=555;
printf("takatakao= %d\n", takao);
hazama=888;
printf("hazahazama= %d\n", hazama);
return 0;
}#include <stdio.h>
int main()
{
int keio;
int chuo;
keio=555;
printf("takakeio= %d\n", keio);
chuo=888;
printf("hazachuo= %d\n", chuo);
return 0;
}実行結果 実行結果 takatakao= 555
hazahazama= 888takakeio= 555
hazachuo= 888
変数の宣言方法はさまざまである.次の例を見比べよう次のプログラム「List 1.2.3」は,複数の変数の宣言を1行で行なっている例である。
次のプログラム「List 1.2.4」は,変数の宣言と同時に値を変数に保存している例である。
実行結果は同じになる。
List 1.2.1 printfと変数のあるプログラム
(再掲)List 1.2.3 printfと変数のあるプログラム
(複数の変数の宣言を1行で行う)List 1.2.4 printfと変数のあるプログラム
(変数の宣言と同時に値を変数に保存)#include <stdio.h>
int main()
{
int takao;
int hazama;
takao=555;
hazama=888;
printf("takatakao= %d\n", takao);
printf("hazahazama= %d\n", hazama);
return 0;
}#include <stdio.h>
int main()
{
int takao, hazama;
takao=555;
hazama=888;
printf("takatakao= %d\n", takao);
printf("hazahazama= %d\n", hazama);
return 0;
}
#include <stdio.h>
int main()
{
int takao=555;
int hazama=888;
printf("takatakao= %d\n", takao);
printf("hazahazama= %d\n", hazama);
return 0;
}
実行結果 実行結果 実行結果 takatakao= 555
hazahazama= 888takatakao= 555
hazahazama= 888takatakao= 555
hazahazama= 888
変数は記憶している値が使われなくなったら,別の値を保存するのに再利用可能次のプログラム「List 1.2.5」では,変数に記憶された値は記憶され続け,何回でも使うことができる。
使用中の変数に別な値を記憶すると,新しい値が記憶され,前の値は忘れ去られることを示している。
このように変数は,何回でも使い回しすることができる。
List 1.2.5 printfと変数のあるプログラム #include <stdio.h>
int main()
{
int takao, hazama;
takao=555;
hazama=888;
printf("takatakao= %d\n", takao); /*変数takaoの1回めの利用*/
printf("hazahazama= %d\n", hazama);
printf("takatakatakao= %d\n", takao); /*変数takaoの2回めの利用*/
printf("hazahazahazama= %d\n", hazama);
takao=55555; /*変数takaoに別の値を保存*/
hazama=88888;
printf("taka= %d\n",takao); /*変更された変数takaoの利用*/
printf("haza= %d\n",hazama);
return 0;
}実行結果 takatakao= 555 ←変数takao 1回めの表示
hazahazama= 888
takatakatakao= 555 ←変数takao 2回めの表示
hazahazahazama= 888
taka= 55555 ←変数takao 変更された値の表示
haza= 88888
変数は,数学で使われる「変数」よりは,ミュージックプレーヤに似ている
上級者向け変数宣言に関する補足
1.2.2 printfに関する補足
「1.1.4 printfの書式について」で示したことが,変数の表示でも使える。
printfの書式のうち「%5d」あるいは,「%08d」のような表現は桁をそろえて表示するときによく使われる。
(ここで5や8は表示に要する桁数を表す。「%08d」の0の意味を実行結果から推理しなさい。)
List 1.2.6 printfの書式「%5d」「%08d」で桁をそろえる例
#include <stdio.h>
int main()
{
int a1=1,b1=2,c1=3; /*int型変数 a1,b1,c1 を宣言し,それぞれに,1,2,3を代入*/
int a2=11,b2=12,c2=13; /*int型変数 a2,b2,c2 を宣言し,それぞれに,11,12,13を代入*/
int a3=101,b3=102,c3=103;
int a4=1001,b4=1002,c4=1003;
printf("ex1%%d\n");
printf("%d %d %d\n", a1, b1, c1);
printf("%d %d %d\n", a2, b2, c2);
printf("%d %d %d\n", a3, b3, c3);
printf("%d %d %d\n", a4, b4, c4);
printf("ex2 %%5d\n");
printf("%5d %5d %5d\n", a1, b1, c1);
printf("%5d %5d %5d\n", a2, b2, c2);
printf("%5d %5d %5d\n", a3, b3, c3);
printf("%5d %5d %5d\n", a4, b4, c4);
printf("ex3 %%08d\n");
printf("%08d %08d %08d\n", a1, b1, c1);
printf("%08d %08d %08d\n", a2, b2, c2);
printf("%08d %08d %08d\n", a3, b3, c3);
printf("%08d %08d %08d\n", a4, b4, c4);
return 0;
}実行結果 ex1 %d
1 2 3
11 12 13
101 102 103
1001 1002 1003
ex2 %5d
1 2 3
11 12 13
101 102 103
1001 1002 1003
ex3 %08d
00000001 00000002 00000003
00000011 00000012 00000013
00000101 00000102 00000103
00001001 00001002 00001003
詳しくは次を参照してください。
ライブラリ関数 C.1 printfとscanf
次のプログラムは2つの変数が使われている。1行ずつ追跡し,実行結果が得られる様子を考えなさい。
List 1.2.7 printfのあるプログラム(このプログラムは無意味だが,変数とprintfの関係を示している) /*
| coskx
| printf and variable example
*/
#include <stdio.h>
int main()
{
int x,y;
x=5;
y=6;
printf("I bought %d CDs and %d DVDs yesterday.\n", x, y);
printf("x=%d y=%d\n", x, y);
x=2;
y=10;
printf("I've got %d textbooks and %d dictionaries.\n", y, x);
printf("y=%d x=%d\n", y, x);
x=2;
y=4;
printf("An elephant has %d large ears, %d small eyes, and %d legs.\n", x, x, y);
return 0;
}実行結果 I bought 5 CDs and 6 DVDs yesterday.
x=5 y=6
I've got 10 textbooks and 2 dictionaries.
y=10 x=2
An elephant has 2 large ears, 2 small eyes, and 4 legs.表現上の補足
これまで「x=2;」は「変数xに値2を記憶させる」と表現してきた.一般に参考書などでは,
「変数xに値2を保存する」,「変数xに値2を格納する」,「変数xに値2を代入する」
などと表現される。今後,「代入する」などの表現が使われるが,「記憶させる」と同じ
意味と考えてよい。
練習1.4 |
次のプログラムの実行結果を予想しなさい。
List 1.2.8 printfのあるプログラム #include <stdio.h>
int main()
{
int x,ya; /*整数型変数xとyaを使用する宣言*/
x=100;
ya=1000;
printf("x=%d ya=%d\n", x, ya);
printf("ya=%d x=%d\n", x, ya);
printf("x=%d ya=%d\n", ya, x);
printf("p=%d q=%d\n", x, ya);
return 0;
}実行結果 の予想1 実行結果 の予想2 実行結果 の予想3 x=100 ya=1000
ya=1000 x=100
x=100 ya=1000
p=0 q=0x=100 ya=1000
ya=100 x=1000
x=1000 ya=100
p=100 q=1000x=100 ya=1000
ya=1000 x=100
x=100 ya=1000
p=100 q=1000変数宣言は,変数への値の記憶などの作業が始まる前に行われなければならない。
誤った宣言(宣言文「int y」の場所が悪い)
文法上誤り (C99では許される)
正しい宣言 int main()
{
int x;
x=100;
int y;
y=1000;
:int main()
{
int x;
int y;
x=100;
y=1000;
:
プログラムは,1行ずつ,上から下へと実行される。 コンピュータは,プログラム全体の意味を理解して動いているわけではなく, 現在実行している命令と,変数に格納された値しか理解していない。 直前の命令が何だったのか,次の命令は何なのかは知らずに動いている。 |
課題1その2 |
---|
(3)List 1.2.1を参考にして,9個のint型変数 factorial1, factorial2,
factorial3, ... factorial9を宣言し,
factorial1=1;
factorial2=1*2;
factorial3=1*2*3;
factorial4=1*2*3*4;
:
のように値を代入し,これらの値を次のように画面に表示しなさい。(p01ex03.c)
factorial1
= 1 |
ヒント
たとえば printf("factorial1 = %6d\n",factorial1);
1.3 変数の名前 |
---|
C言語では数学の変数名と違い,2文字以上の変数名を用いる場合が多い。文法上,変数の命名では次の2つの制約を受ける。
(1)変数の名前として用いてよい文字は,アルファベットと「_(アンダーバー)」と数字であるが,名前の先頭の1文字に数字を用いてはいけない。
(2)C言語(C++も含めておいたほうが都合がよいだろう)の文法上予約されている名前も用いてはいけない。
(3)全角文字を変数名に用いてはならない。(例えば「π」はダメ)C言語の文法上,この2つの規則に違反しなければどのような名前を変数に付けてもかまわないが変数名を決めるときは,
その変数が何を表しているのか分かる名前が好ましい。
(変数の用途が決まらないままプログラムを作ろうとしても,作れなかったり,思い通りの動作をしないことが多い。
「急がば回れ」の精神でふさわしい変数名を用いる努力をしよう。これは上達の秘訣かもしれない。
短い変数名を使うとキーボード入力時間が節約できる。しかし,複雑なプログラムでは変数の役割が不明確になり正しい
プログラムを作るために多くの労力を使うことになり,かえって時間がかかることを先輩たちは知っている。)C言語文法上正しい変数名の例
例題によく使われる単純な変数名
変数の役割が名前を見てもよく分からないので,
まねをしてはいけないx, y, a1, p1, p2, ax123 プログラムに使われる命名
変数の役割がよく分かる変数の名前
「_(アンダーバー)」で始まる変数名は文法的
には正しいが,システム変数でよく使われる
ため,使わないほうがよいlength(長さ), area(面積),
PointNumber(点番号), NumberOfPoints(点の数),
counter(何かを数える変数), pointer(現在位置を示す変数)
member1, member2, buffer00, buffer_toReadC言語文法上誤った変数名と使用出来ない変数名の例
アルファベットと「_(アンダーバー)」
と数字の使用が許されているが,
それ以外の文字を用いているものmyNumber-1, anc@tokyo, machine#12 数字で始まる変数 1stOder, 2point 予約語は変数名として
使用してはならない。asm continue float new signed try
auto default for operator sizeof typedef
break delete friend private static union
case do goto protected struct unsigned
catch double if public switch virtual
char else inline register template void
class enum int return this volatile
const extern long short throw while
1.4 「=」の意味と四則演算(加減乗除) |
---|
1.4.1 「=」の意味
Cプログラムでは「=」は「右辺を計算して,その結果を左辺の変数に保存する」という意味である。例えば「z=10」は「zに10を保存する」という意味であり,「y=x+10」は「x+10を計算して,その結果をyに保存する」という意味である。
「x+10=y」という表現はC言語では誤りである。
左辺には1つの変数しか書くことが出来ない。
「=」の意味
数学 右辺と左辺の値が等しい C言語 右辺の値を,左辺の変数に保存する(代入する)
あるいは
右辺を計算して得た値を,左辺の変数に保存する(代入する)「変数」と「=」は数学とは意味が異なる。
次のプログラムで,変数と「=」の意味を再確認しよう。
List 1.4.1 整数の四則演算 #include <stdio.h>
int main()
{
int a,b,c; /*整数型変数a,b,cを使用する宣言*/
a=100;
b=1000;
c=a+b; /* aとbの和を作り,cにしまう。*/
printf("a=%d b=%d\n", a, b);
printf("c=%d\n",c);
c=a*b; /*aとbの積を作り,cにしまう。c=a×b*/
printf("c=%d\n", c);
c=a-b; /*aとbの差を作り,cにしまう。*/
printf("c=%d\n", c);
c=c+1; /*cと1の和を作り,cにしまう。(cの値を1増やす)*/
printf("c=%d\n", c);
return 0;
}実行結果 a=100 b=1000
c=1100
c=100000
c=-900
c=-899注意事項
「=」は「右辺を計算して,その結果を左辺に代入する」という意味なので
「a+b=c;」という文は誤りである。2 「=」は「右辺を計算して,その結果を左辺に代入する」という意味なので
「a=a+1;」ではaの値が1増える。「a=a*2;」ではaの値が2倍になる
もし数学の世界だったらこの2つの式は絶対に成り立たない無意味な式である
1.4.2 計算の順番
計算の順番は算数と同じ規則である。3+5*8は43であって,(3+5)*8=64にはならない。
同様にa+b*cはa+(b*c)であって(a+b)*cにはならない。
1.4.3 実数型変数と整数型変数の割り算での違い
整数型変数と言うのは「小数点以下の値を持たない整数」を格納する変数のことであった。
次の例では,小数点を含む数を格納する実数型変数を使用してみる。
実数型変数では小数点以下の桁を含む数を扱うことが出来る。
doubleは「Double precision floating point number(倍精度浮動小数点数)」に由来する。
List 1.4.2 実数型変数と整数型変数の割り算での違い <#include <stdio.h>
int main()
{
int a,b,c,d; /*整数型変数a,b,c,dを使用する宣言*/
double p,q,r; /*実数型変数p,q,rを使用する宣言*/
a=16;
b=3;
c=a/b; /*aをbで割った答えをcに保存。c=a÷b 。小数点以下は切り捨てられる*/
d=a%b; /*aをbで割ったあまりを求め,dに保存。*/
printf("a=%d b=%d\n", a, b);
printf("c=%d d=%d\n", c, d);
p=16.0;
q=3.0;
r=p/q;
printf("p=%f q=%f\n", p, q);
printf("r=%f\n", r);
r=a/b; /*a/bの演算をした時点で小数点以下は切り捨てられ整数値になる。その整数値をrに保存。*/
printf("a=%d b=%d\n", a, b);
printf("r=%f\n", r);
return 0;
}実行結果 a=16 b=3
c=5 d=1
p=16.000000 q=3.000000
r=5.333333
a=16 b=3
r=5.000000補足説明 1
整数同士の割り算では,答えの小数点以下は切捨てとなる
int a,b,c;
a=15;
b=4;
のもとで
c=a/b;
では cには3が保存される。
また
c=15/4;
でも,cには3が保存される。2
数式の中に出てくる「%」は割り算をしたあまりを求める演算である
(printfの書式中に出てくる「%」とは違う使い方)3
整数同士の割り算の結果を実数型変数に保存しても,
すでに小数点以下は切捨てられている4
「12」と「12.0」ではコンピュータ内部での解釈が異なる。
「12」は整数の12であり,「12.0」は実数の12である。5
「printf("r=%f\n", r);」で%fは実数型変数 (double型)
を表示する時に用いる。
(この後に出てくるscanfとの関連で「%lf」と書いても動作に支障はないが正しくは「%f」)
整数同士の割り算では,答えの小数点以下は切捨てとなる。
1.4.4 値→計算→結果の表示 という流れのプログラム
次に示すのは,オームの法則を用いた簡単な計算と表示のプログラムである。
このプログラムのように変数が特定の意味を持つ時にはふさわしい名前の変数を用いるべきである。
List 1.4.3 オームの法則 /*
| coskx
| Ohm's law
| 560オームの抵抗に1.5Vの電圧をかけた時の電流を求める
*/
#include <stdio.h>
int main()
{
/*変数の宣言*/
double resistance; /*抵抗[Ω]*/
double voltage; /*電圧[V]*/
double current; /*電流[A]*/
/*抵抗値と電圧の設定*/
resistance=560.0;
voltage=1.5;
/*電流の計算*/
current=voltage/resistance;
/*計算結果の表示*/
printf("resistance=%10.1f\n", resistance);
printf("voltage =%10.3f\n", voltage);
printf("current =%10.5f\n", current);
return 0;
}実行結果 (resistance:抵抗 [Ω] voltage:電圧[V] current:電流[A]) resistance= 560.0
voltage = 1.500
current = 0.00268補足説明 1. printf("resistance=%10.1f\n", resistance);
で%10.1fは10文字分の場所に小数点以下1桁で実数型変数の値を表示するの意味2. printf("voltage =%10.3f\n", voltage);
で%10.3fは10文字分の場所に小数点以下3桁で実数型変数の値を表示するの意味次のプログラムは,温度をもとにした音速の計算である。(温度が25度のときの音速しか求められない。)
このプログラムのように変数が特定の意味を持つ時にはふさわしい名前の変数を用いるべきである。
List 1.4.4 温度をもとにした音速の計算 /*
| coskx
| 与えられた温度での音速の計算
| t[℃]の時の音速v[m/s]は次の式で与えられる
| v = 331.5 + 0.6t
| 25℃の時の音速を求める。
*/
#include <stdio.h>
int main()
{
double temperature; /*温度をあらわす変数[℃]*/
double velocity; /*音速をあらわす変数[m/s]*/
temperature=25.0; /*温度を25℃と設定*/
velocity=331.5+0.6*temperature;
printf("temperature=%10.1f\n", temperature);
printf("velocity =%10.1f\n", velocity);
return 0;
}実行結果 temperature= 25.0
velocity = 346.5
プログラム内で「=」は右辺を計算して左辺の変数に保存することを示している。
練習1.5 |
次のプログラムの実行結果を予想しなさい。
List 1.4.5 三角形の面積を求めるプログラム #include <stdio.h>
int main()
{
/*三角形の面積を求める*/
double teihen,takasa,menseki;
teihen=20.0; /*底辺を表す変数[cm]*/
takasa=10.0; /*高さを表す変数[cm]*/
menseki=1/2*teihen*takasa;
printf("teihen=%f\n", teihen);
printf("takasa=%f\n", takasa);
printf("menseki=%f\n", menseki);
return 0;
}実行結果 の予想1 実行結果 の予想2 実行結果 の予想3 teihen=20.000000
takasa=10.000000
menseki=10.000000teihen=20.000000
takasa=10.000000
menseki=100.000000teihen=20.000000
takasa=10.000000
menseki=0.000000
1.4.5 ここまでの変数の型についてのまとめ
型
説明
printfの時の書式 printfの例
int
整数型整数を保存する変数
(割り算をすると小数点以下が切り捨てられる)%d
int test;
の時
printf("%d\n",test);double
実数型小数点を含む値を保存する変数
(割り算をしても,正しい近似値が得られる)%f
double test;
の時
printf("%f\n",test);
%fの表現方法
%dにおいて,%5d,%05dのように表示桁数を指示したが,%fにおいても,表示桁数を指示することができる。
例えばdouble型変数xに0.5のときに,%8.4fと指示すると,小数点を含む桁数8で,小数点以下4桁を指示したことになる。
printf("%8.4f\n", x); 0.5000
12345678
printf("%8.3f\n", x); 0.500
12345678
総桁数は省略できる。
printf("%.4f\n", x); 0.5000
printf("%.3f\n", x); 0.500
詳しくは次を参照してください。
ライブラリ関数 C.1 printfとscanf
文章課題1 その1 |
---|
(文章課題A) 次の内容をまとめてレポートにしなさい。ただし,初めの2行(ファイル名,ID,出席番号,氏名)は,これまでのプログラムと同様な書式で書くこと。 (p01a.txt)
1) List 1.2.6 に出てきた「%5d」と「%08d」の意味を説明しなさい。
2) List 1.4.2 を注意深く実行結果を読んでから考えなさい。
次のプログラム(プログラムの一部)の実行において,
yyy=3.00000
が実行結果として表示されるが,どうして
yyy=3.33333
にならないのか説明しなさい。
double yyy;
yyy=10/3;
printf("yyy=%f\n",yyy);
課題1 その3 |
---|
(4)List 1.4.1を参考にして,2つのint型変数x,yを宣言し,xに17528を,yに1482を代入し,
積,商(xをyで割る),和,差(xからyを引く),剰余(xをyで割った時のあまり)を計算して表示しなさい。
ただし,画面表示は次のようになるようにしなさい。(p01ex04.c)
17528 * 1482 = 25976496 |
ヒント
・たとえば printf("%d * %d = %8d\n", x, y, x*y);
・半角の「%」の表示については,本ページ内の1.1.2の一番最後にある「よくある質問」を参考にしてください。
1.5 scanfでキーボードからデータをもらう |
---|
これまでのプログラムでは,プログラム作成時点で値が決まっていて,別の値で計算したい場合はプログラムを作り直さなければならない。 そこで,プログラムの実行の途中で,計算に使う値をキーボードから設定するプログラムを作成してみよう。
プログラム内で使っている変数に,キーボードから値を代入するプログラムになる。
キーボードから変数に値を代入する時はscanfを使う。
例えば,scanfでキーボードから数値を入力してもらい, その数値をdouble型変数teihenに保存するときは,次のように使う。
C言語での記述 意味 scanf("%lf", & teihen); キーボードから値を入力してエンターキーを押してください。
それまで待っています。
値が入力されたら,その値を変数teihenに代入します。次のプログラムは三角形において,「底辺の長さ」と「高さ」をキーボードから入力し,面積を求めて,「底辺の長さ」と「高さ」と「面積」を表示する。
★プログラムをPC上で実行しながら,以下の説明を読みなさい。キーボードから数値を入力するタイミングは実行してみないとわからない。
List 1.5.1 三角形の面積を求めるプログラム /*三角形の面積を求める*/
#include <stdio.h>
int main()
{
/*変数の宣言*/
double teihen,takasa,menseki;
/*底辺の長さの取得*/
printf("teihen[cm]="); /*画面に「teihen[cm]=」と表示する。改行しない。*/
scanf("%lf", &teihen); /*底辺の長さをキーボードから入力してもらい,変数teihenに格納*/
/*高さの取得*/
printf("takasa[cm]="); /*画面に「takasa[cm]=」と表示する。改行しない。*/
scanf("%lf", &takasa); /*高さをキーボードから入力してもらい,変数takasaに格納*/
/*面積の計算*/
menseki=0.5*teihen*takasa;
/*面積などの表示*/
printf("teihen=%f[cm]\n", teihen);
printf("takasa=%f[cm]\n", takasa);
printf("menseki=%f[cm2]\n", menseki);
return 0;
}実行結果 青文字のところはキーボードからの入力 teihen[cm]=20.0 ← ここでエンターキーを押す
takasa[cm]=10.0 ← ここでエンターキーを押す
teihen=20.000000[cm]
takasa=10.000000[cm]
menseki=100.000000[cm2]補足説明 1.「scanf("%lf", &teihen);」で変数の前に &がついていることに注意。
"%lf\n"とはならないことにも注意しよう。scanfの書式には \n は付けない。
2.プログラムが実行されると,scanfのところで,コンピュータはキーボード入力待ちになる。
上記「実行結果」ではその時に「20.0[enter]」をキーボードから入力し,
2つ目のscanfのところでもコンピュータはキーボード入力待ちになるので,
「10.0[enter]」をキーボード入力している。
3.「menseki=0.5*teihen*takasa;」は「menseki=teihen*takasa/2;」でもよいが,
「menseki=1/2*teihen*takasa;」では正しく求められない。
演算については ここ のB.1の「加減乗除の優先順位」「整数と実数の混合演算」を読むこと
キーボードから変数に値を代入する時はscanfを使う。
scanf中に出てくる変数の前には「&」をつける。
どうして「&」をつけるのかの説明はポインタについて習う時にでてくるので今の時点では「おまじない」ということにしておく。scanfの書式には \n は付けない。
scanf内でdouble型変数への読み込み時には%fではなく%lf(小文字のエルとエフ)と書かなければならない。
次のプログラムは1つの整数をキーボードから入力し,その倍数を3つ表示する。
★プログラムをPC上で実行しながら,以下の説明を読みなさい。キーボードから数値を入力するタイミングは実行してみないとわからない。
List 1.5.2 1つの整数をキーボードから入力し,その倍数を3つ表示する #include <stdio.h>
int main()
{
/*変数宣言*/
int intNumber;/*入力値*/
int multiple2,multiple3;/*倍数*/
/*整数の取得*/
printf("整数を入力してください >>");
scanf("%d", &intNumber);
/* "%d\n" にならないことに注意。scanfの書式には \n は付けない。 */
/*2倍数,3倍数の計算*/
multiple2=2*intNumber;
multiple3=3*intNumber;
/*計算結果の表示*/
printf("小さいほうから3つの倍数は %d %d %d です\n", intNumber, multiple2, multiple3);
return 0;
}
/*******************実行結果**********************
整数を入力してください >>21
小さいほうから3つの倍数は 21 42 63 です
*************************************************/ここまでの変数の型についてのまとめ
型
説明
scanfの
時の
書式scanfの例
printfの
時の
書式printfの例 int
整数型整数を保存する変数
(割り算をすると小数点以下が切り捨てられる)%d
int test;
の時
scanf("%d",&test);%d int test;
test=123;
printf("%d\n",test)double
実数型小数点を含む値を保存する変数
(割り算をしても,正しい近似値が得られる)
scanfとprintfの時は書式が違うことに注意
%lf
double test;
の時
scanf("%lf",&test);%f double test;
test=3.14159;
printf("%f\n",test);詳しくは次を参照してください。
ライブラリ関数 C.1 printfとscanf
scanfの使い方で注意すること
キーボードから変数に値を代入する時はscanfを使う。
scanf内に出てくる変数の前には「&」をつける。
scanf内の書式では\nを付けない。
scanf("%d", x); これは「&」がないのでダメ。
scanf("%d", &x); これはOK。
scanf("%d\n", &x); これは「\n」があるのでダメ。
練習問題 地点Aから地点Bまでの距離(単位は[m]メートル)と,その距離を歩いた時間(単位は[min]分)から,
歩く速度(単位は[km/h]時速何キロメートル)を求める。距離[m]と歩いた時間[min]をキーボードから与え速度
[km/h]を求めるプログラムを作成せよ。
プログラムの構成は
(1)距離[m]をキーボードから受け取る
(2)歩いた時間[min]をキーボードから受け取る
(3)速度[m/min]を求める
(4)速度の単位換算を行い[km/h]にする
(5)求められた速度[km/h]を表示する(念のため入力された値も表示する)
という手順になる。作業の順番をよく考えて,正しく並べよう。「〇〇をキーボードから受け取る」という作業は次の2つの作業よりなる。
(a)画面に「〇〇=」と表示iして,〇〇の入力を人間に促す
(b)〇〇をキーボードから受け取って所定の変数にしまう。
ここでは「人間からもらった値を覚えておく」という作業が行われている。
作業を行うのが人間なら,「他の人からもらった値を覚えておく」という作業は,それほど意識しなくてもできる。
しかし,コンピュータの場合は,「名前を付けた記憶場所に保存する」という作業を行う。
「名前を付けた記憶場所」というのは「変数」であり,値の種類によって,整数型変数・浮動小数点型変数に使い分ける。
人間の場合でも覚えておく値が10個もあれば,メモ用紙に書き留めるであろう。
しかも,個々の値が何を表す値なのかというコメントも付け加えるであろう。これはコンピュータの作業と同じである。
次にどのような変数が必要になるか考えて,決める。
割り算が出てくるので整数演算の煩わしさを避けるためにすべてdouble型を使うことにする。
距離[m] : kyori double型
歩いた時間[mim] : jikan double型
速度[m/mim] : sokudo double型
速度[km/h] : sokudokmh double型
これをプログラムにすると
double kyori,jikan,sokudo,sokudokmh;
printf("距離[m] = ");
scanf("%lf", &kyori);
printf("時間[min] = ");
scanf("%lf", &jikan);
sokudo=kyori/jikan;
sokudokmh=sokudo*60.0/1000.0;
printf("距離 = %7.2f[m]\n", kyori);
printf("時間 = %7.2f[min]\n", jikan);
printf("速度 = %7.2f[km/h]\n", sokudokmh);
が作成できる。
#include <stdio.h>
int main()
{
double kyori,jikan,sokudo,sokudokmh;
printf("距離[m] = ");
scanf("%lf", &kyori);
printf("時間[min] = ");
scanf("%lf", &jikan);
sokudo=kyori/jikan;
sokudokmh=sokudo*60.0/1000.0;
printf("距離 = %7.2f[m]\n", kyori);
printf("時間 = %7.2f[min]\n", jikan);
printf("速度 = %7.2f[km/h]\n", sokudokmh);
return 0;
}
/*
距離[m] = 1850
時間[min] = 24
距離 = 1850.00[m]
時間 = 24.00[min]
速度 = 4.63[km/h]
*/
1.6 Cプログラムの概観 |
---|
ここまで,なんとなくプログラムを示したが,プログラムの特徴を見る。プログラムは
(1)はじめのおまじない
(2)はじめのしるし
(3)変数宣言部 使用する変数はすべて宣言してから出ないと使えない
次の「実行部」の途中で変数宣言は出来ない
(4)実行部 内部には (a)入力部,(b)処理部,(c)出力部がある
(5)おわりのしるし
の5つの部分から出来ているのがわかる。
List 1.6.1 プログラムの概形(ANSI規格) はじめのおまじない
はじめのしるし
変数宣言部
実行部
おわりのしるし/*三角形の面積を求める*/
#include <stdio.h>
int main()
{
/*変数宣言*/
double teihen,takasa,menseki;
/*底辺,高さの取得 (a)入力部 */
printf("teihen[cm]=");
scanf("%lf", &teihen);
printf("takasa[cm]=");
scanf("%f", &takasa);
/*面積の計算 (b)処理部 */
menseki=0.5*teihen*takasa;
/*各変数の表示 (c)出力部 */
printf("teihen=%f[cm]\n", teihen);
printf("takasa=%f[cm]\n", takasa);
printf("menseki=%f[cm2]\n", menseki);
return 0;
}おわりのしるしは次のように書いても同じ意味となる。
return EXIT_SUCCESS;
}
1.7 よく間違えること |
---|
コンパイルできないなどのエラーでよくあること
○ 行末に「;」(セミコロン)を忘れる
○「I」(アイの大文字)と「1」(いち)と「l」(エルの小文字)をタイプミス
○「o」(オウの小文字)と「0」(ぜろ)をタイプミス
○ 大文字,小文字を間違える
○ scanfの変数に&を忘れる
○ scanfの書式に \n を書いてしまうのはだめ
文章課題1 その2 |
---|
(文章課題B) 次の内容をまとめてレポートにしなさい。
ただし,初めの2行(ファイル名,ID,出席番号,氏名)は,これまでのプログラムと同様な書式で書くこと。 (p01b.txt)
List 1.5.2において次の質問に答えなさい。
まず最初に,次の準備をしてから作業に入りなさい。
(1)作業フォルダ中にp01b.cという名前のファイルを作りなさい。
(2)そのファイル中にList 1.5.2のプログラムをコピー&ペーストしなさい。
(3)このプログラムのコンパイル+実行を行い,正しく動作することを確かめなさい。
以下の作業でエラーメッセージが出てきたときには,ファイル名,エラーであると認識された行番号,エラーとなった名前文字列などが表示されることがあるので,
表示されていたら必ず説明に含めること。
1) #include <stdio.h> のところで,間違えて #include <stdip.h> と書いてしまった。
コンパイル+実行しようとしたときにどのようなエラーメッセージが表示されるか説明しなさい。
将来同様な間違いをしたときに,すぐに気づくことができるように要点をまとめなさい。
ヒント stdio.hというのはファイルの名前である。stdio.hというファイルはシステム内に存在するが,stdip.hという名前のファイルは存在しない。
2) #include <stdio.h> のところで,間違えて #includ <stdio.h> と書いてしまった。
コンパイル+実行しようとしたときにどのようなエラーメッセージが表示されるか説明しなさい。
将来同様な間違いをしたときに,すぐに気づくことができるように要点をまとめなさい。
3) /*変数宣言*/ のところで,間違えて /*変数宣言 のように「*/」を忘れて書いてしまった。
コンパイル+実行しようとしたときにどのようなエラーメッセージが表示されるか説明しなさい。
将来同様な間違いをしたときに,すぐに気づくことができるように要点をまとめなさい。
ヒント コメントの範囲は「/*」ではじまり,その後最初に見つかる「*/」までとなる。
4) printf("整数を入力してください >>"); のところで,printfを間違えて
printt("整数を入力してください >>"); と書いてしまった。
同様に
printF("整数を入力してください >>");
もやってみなさい。
コンパイル+実行しようとしたときにどのようなエラーメッセージが表示されるか説明しなさい。
将来同様な間違いをしたときに,すぐに気づくことができるように要点をまとめなさい。
ヒント ここでのエラーメッセージはリンクエラーなので,行の番号が指摘されないことに注意
(printtなどという名前のものは見つからないなどとメッセージが出るはず)
コメント この種の誤りは演習中に頻繁に起こるのでよく覚えておくこと。
5) printf("整数を入力してください >>");
のところで,「"」を忘れて
printf(整数を入力してください >>);
のように書いてしまった。
コンパイル+実行しようとしたときにどのようなエラーメッセージが表示されるか説明しなさい。
将来同様な間違いをしたときに,すぐに気づくことができるように要点をまとめなさい。
6) scanf("%d", &intNumber); のところで,
間違えて scanf("%d", intNumber); のように「&」を忘れて書いてしまった。
コンパイル+実行しようとしたときにどのようなことが起こるか。
将来同様な間違いをしたときに,すぐに気づくことができるように要点をまとめ,説明しなさい。
コメント この誤りは演習中に頻繁に起こるのでよく覚えておくこと。
(これまでのようなエラーメッセージは出ないはず)
7) multiple2=2*intNumber; のところで,行末の「;」 を書き忘れて,
multiple2=2*intNumber のように書いてしまった。
コンパイル+実行しようとしたときにどのようなエラーメッセージが表示されるか説明しなさい。
エラーメッセージ中に指摘されている行の番号は適正かどうかも調べなさい。
将来同様な間違いをしたときに,すぐに気づくことができるように要点をまとめ,説明しなさい。
コメント この誤りは演習中に頻繁に起こるのでよく覚えておくこと。
8) printf("小さいほうから3つの倍数は %d %d %d です\n", intNumber, multiple2, multiple3);
のところで,「%d」を1つ書き忘れて,
printf("小さいほうから3つの倍数は %d %d です\n", intNumber, multiple2, multiple3);
のように書いてしまった。
コンパイル+実行しようとしたときにどのようなことが起こるか。
将来同様な間違いをしたときに,すぐに気づくことができるように要点をまとめ,説明しなさい。
9) printf("小さいほうから3つの倍数は %d %d %d です\n", intNumber, multiple2, multiple3);
のところで,「%d」を1つ多く書きすぎて,
printf("小さいほうから3つの倍数は %d %d %d %d です\n", intNumber, multiple2, multiple3);
のように書いてしまった。
コンパイル+実行しようとしたときにどのようなことが起こるか。
将来同様な間違いをしたときに,すぐに気づくことができるように要点をまとめ,説明しなさい。
課題1 その4 |
---|
温度[℃] | 音速[m/s] |
15.0 |
340.5 |
20.0 |
343.5 |
25.0 |
346.5 |
30.0 |
349.5 |
ヒント List 1.4.4を参考にしよう。
temperature=25.0;とする代わりにキーボードから読みこめばよい。
printfの書式では,%f,%.1f,%.3f を自分でテストしてみたらどうだろう。
(6)2つの整数を実行時にキーボードから入力し,整数型変数に読み込み,
和,差,積,商,剰余(割り算のあまり)を計算して,表示するプログラムを作りなさい。
ただし実行例が次のように表示されるようにしなさい。
次に示す2つの値を用いて2回実行し,答え合わせして,結果を2つともはりつけなさい。(p01ex06.c)
<<実行例1>>
2数を入力--> 12 5
12+5=17
12-5=7
12*5=60
12/5=2
12%5=2<<実行例2>>
2数を入力--> 17 7
17+7=24
17-7=10
17*7=119
17/7=2
17%7=3
ヒント
キーボードから2つの整数を受け取り,整数型変数a,bに格納するscanfは次のようになる。
scanf("%d %d",&a,&b);
(7)2つの整数を実行時にキーボードから入力し,整数型変数に読み込み,
商,剰余(割り算のあまり)を計算して,表示するプログラムを作りなさい。
ただし実行例が次のように表示されるようにしなさい。
次に示す2つの値を用いて,答え合わせして,結果を2つともはりつけなさい。(p01ex07.c)
<<実行例1>>
2数を入力--> 17 7
17÷7=2...3<<実行例2>>
2数を入力--> 23 7
23÷7=3...2
(8)台形の「上底」「下底」「高さ」を実行時にキーボードから入力し,変数に読み込み,
台形の面積を求め表示するプログラムを作りなさい。
次に示す値をすべて用いて,実行を繰り返し,答え合わせして,すべての結果をはりつけなさい。(p01ex08.c)
上底[cm]
下底[cm]
高さ[cm]
面積[cm2]
2.5
3.2
4.5
12.825
3.4
2.4
6.5
18.850
2.8
3.7
6.2
20.150
3.5
1.2
3.5
8.225
(9)「半径」を実行時にキーボードから入力し,変数に読み込み,球の体積,表面積を求め表示するプログラムを作りなさい。
次に示す値をすべて用いて,実行を繰り返し,答え合わせして,すべての結果をはりつけなさい。 (p01ex09.c)
ヒント 体積:V = 4 / 3 π r3, 表面積:S = 4 π r2
ただし,πの値は3.14159265358979を使いなさい。
πの値を格納する変数名としては「double pi」などを使えばよいでしょう。
また,実行結果の桁数合わせをする必要はありません。
r[cm]
V[cm3]
S[cm2]
0.1
0.004189
0.125664
0.3
0.113097
1.130973
1.0
4.18879
12.56637
3.0
113.0973
113.0973
10.0
4188.79
1256.637
(10)1つの整数値を実行時にキーボードから入力し,変数に読み込み,
100の位,10の位,1の位の数を抜き出して表示するプログラムを作りなさい。
次に示す3つの値を用いて,答え合わせして,すべての結果をはりつけなさい。(p01ex10.c)
例えば258を入力した場合は
100=>2
010=>5
001=>8
と表示され,5369を入力した場合は
100=>3
010=>6
001=>9
と表示され,7を入力した場合は
100=>0
010=>0
001=>7
と表示されるようにすること。
(ヒント)「456%10」を計算すると6になり,「456/10」は45になり,「(456/10)%10」は5になる。