身につく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)

 

という感じです。

 

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