第4回演習:解答例


演習課題

(1)int a, float b, double c, int dに数字をキーボードから入力し,それぞれの値とアドレスを表示するプログラムを作成せよ.


#include <stdio.h>
 
void main()
{
	int a;
	float b;
	double c;
	int d;

	printf("整数a=");scanf("%d",&a);
	printf("実数b=");scanf("%f",&b);
	printf("実数c=");scanf("%lf",&c);
	printf("整数d=");scanf("%d",&d);

	printf("aのアドレスは%p¥t 値は%d¥n",&a,a);
	printf("bのアドレスは%p¥t 値は%f¥n",&b,b);
	printf("cのアドレスは%p¥t 値は%lf¥n",&c,c);
	printf("dのアドレスは%p¥t 値は%d¥n",&d,d);
}


(2)変数a,bに数字をキーボードから入力し,aのアドレスとaにbを代入した時のアドレスが同じになることを以下のプログラムを完成させて確かめよ.


#include <stdio.h>
 
void main()
{
	int a,b;
	int *pa;
	printf("a = "); scanf("%d", &a);
	printf("b = "); scanf("%d", &b);
 
	pa = &a;						/*ポインタ変数へのアドレスの代入*/
 
	printf("ポインタ変数paの値(=aのアドレス)は,%pです¥n", pa);
	printf("ポインタ変数paの指している値は,%dです¥n", *pa);
 
	a = b;							/*値の代入*/
 
	printf("aにbを代入したときのポインタ変数paの値(=aのアドレス)は,%pです¥n", pa);
	printf("aにbを代入したときのポインタ変数paの指している値は,%dです¥n\", *pa);
}

(2)整数型配列に初期値として,(10,20,30,40,50)を設定したとき,全ての要素の値を表示するプログラムをポインタを用いて作成せよ.


#include <stdio.h>
 
void main()
{
	int i;
	int a[5] = {10, 20, 30, 40, 50};
	int *p;
 
	p = &a[0];
 
	for(i=0; i<5; i++) {
		printf(" 配列の %d 番目は%d です¥n", i, *(p+i));
	}
}
 

関数の復習

(3)三つの整数をキーボードから入力すると,その最大値を表示するプログラムを関数を用いて作成せよ.


#include <stdio.h>
 
int max(int a, int b, int c)
{
	int x[3];
	int i,y=1;
	
	x[0] = a;
	x[1] = b;
	x[2] = c;
	
	for(i=0;i<3;i++){
		if(y<x[i])
			y=x[i];
	}
	
	return y;
}
 
void main()
{
	int a,b,c;
	
	printf("aの値を入力してください:"); scanf("%d",&a);
	printf("bの値を入力してください:"); scanf("%d",&b);
	printf("cの値を入力してください:"); scanf("%d",&c);
	
	printf("三つの整数における最大値:%d¥n", max(a,b,c));
	
}

円の半径を渡すと,面積を戻す関数を作成して,面積の値を表示するプログラムを作成せよ.


#include <stdio.h>

float menseki(float r)
{
	return 3.14*r*r;
}

void main()
{
	float r;
	
	printf("r=");scanf("%f",&r);
	
	printf("円の面積=%f",menseki(r));
}

(5)実数xの値を入力し,y=5x5-12x4+3x+1を求めるプログラムを作成せよ.
ただし,xn(nは自然数)の値は,関数を自ら定義して計算すること(pow関数使用不可).


#include <stdio.h>
 
float power(float x, int n)
{
	int i;
	float y=1.0;
	
	for(i=0;i<n;i++)
		y *= x;
	
	return y;
}
 
float func(float x)
{
	float y;
	
	y = 5*power(x,5)-12*power(x,4)+3*power(x,1)+1;
	
	return y;
}
 
void main()
{
	float x;
	
	printf("実数xを入力してください:"); scanf("%f", &x);
	
	printf("関数y=5x^5-12x^4+3x+1の答: %0.3f¥n",func(x));
	
}