身につくc言語-演習問題1回目 解答と解説-

問題1

ソースコード


#include<stdio.h>

int main(void)
{
	printf("おはよう\n");
	printf("こんにちは\n");
	printf("\n");
	printf("こんばんは\n");
	
	return 0;
	
}

「\n」を2回続けてかくということに注意です。

問題2

ソースコード


#include<stdio.h>

int main(void)
{
	int a;
	int b;
	
	printf("3と5を入力してください。\n");
	
	scanf("%d",&a);
	scanf("%d",&b);
	
	printf("和は%dです。\n",a+b);
	printf("積は%dです。\n",a*b);
	
	return 0;
}

int型の変数を二つ宣言します。

scanf関数で入力し、printf関数で出力します。

scnafは「&」を忘れないようにしましょう。


printf("3と5を入力してください。\n");

というのは、書かなくても大丈夫ですが、わかりやすくするには書いておいたほうがいいでしょう。

問題3

ソースコード


#include<stdio.h>

int main(void)
{
	double a;
	
	printf("円の半径を入力してください。\n");
	
	scanf("%lf",&a);
	
	
	printf("円の面積は%lfです。\n",a*a*3.14);
	
	return 0;
}

double型で宣言することに注意してください。

それに伴って、scanfやprintfは「%lf」か「%f」を使うようにしましょう。

ここでは、「%lf」に統一しておきます。

問題4

ソースコード


#include<stdio.h>

int main(void)
{
	double a;
	
	printf("正方形の1辺を入力してください。\n");
	
	scanf("%lf",&a);
	
	printf("正方形の面積は%lfです。\n",a*a);
	
	
	return 0;
}

正方形の1辺が整数とは限りませんので、double型にしておいたほうがいいと思います。

問題5

ソースコード


#include<stdio.h>

int main(void)
{
	char a;
	char b;
	char c;
	char d;
	char e;
	
	printf("一気に入力してください。\n");
	
	scanf("%c",&a);
	scanf("%c",&b);
	scanf("%c",&c);
	scanf("%c",&d);
	scanf("%c",&e);
	
	printf("%c%c%c%c%c\n",a,b,c,d,e);
	
	return 0;
}

これはわかりにくい問題だったと思います。

まだ「バイト」という概念を解説していない状態ですので、これはいま説くことができなくても大丈夫です。

一気に「hello」と入力すると出力できますが、1文字ずつ「h」「e」「l」「l」「o」と入力してしまうとうまくできないと思います。

これは、以前ちらっとやりましたが、「\0」の考え方が関係してくるのです。

char型が5つあるので、1文字の英語を「5つ」まで格納できるという意味です。

helloと一気に入力した場合

出力結果を「\0」を加えて見ると

hello\0

となります。

「\0」はまとめて1文字として扱われるので、合計で「6文字」になります。

ここで、あれっと思った方、その通りです。


「5文字しか格納できないのに6文字あったらだめじゃん?」ということで、このプログラムは出力は正しいですが、不安定なプログラムであるといえます。

c言語もなんとか出力しようと頑張ってくれているのです。

char f;などを追加するとより「安全」になると思います。

「h」「e」「l」「l」「o」と入力した場合

出力結果を「\0」を加えて表してみると

h\0e\0l\0

となります。(e\0o\0というのが続きますが、5をオーバーしています。)

6文字まではなんとか出力しようとしますが、それ以上となるともう入りきらないのですね。

結果としてこのような変な結果になってしまいます。

まとめ

最後の問題に関しては、いまはわからなくても大丈夫です。

1から4までをしっかりとできるようにしましょう。

応用問題+α 解答と解説

問題1+α 上底と下底と高さを入力し、台形の面積を出力せよ(結果が小数になることも配慮して作成すること)


#include<stdio.h>

int main(void)
{
	double zyoutei;
	double katei;
	double takasa;
	
	printf("上底を入力してください。\n");
	scanf("%lf",&zyoutei);
	
	printf("下底を入力してください。\n");
	scanf("%lf",&katei);
	
	printf("高さを入力してください。\n");
	scanf("%lf",&takasa);
	
	printf("台形の面積は%lfです。\n", ((zyoutei+katei)*takasa)/2 );
	
	
	return 0;
}

変数の名前は自分で作ることができるので、ここでは上底は「」下底は「」高さは「」としました。

文字で表すと

((上底+下底)*高さ)/2)

という感じです。

ここでもわかりやすいように「上底を入力してください」などを書いた方がいいと思います。

スポンサーリンク