第5回演習:解答例


(1)変数 a と b の値を,入れ替えるswap()関数を作成し,プログラムを完成させよ.


#include <stdio.h>

void swap(float *a, float *b)
{
	float tmp;
	
	tmp = *a;
	*a = *b;
	*b = tmp;
	
	return;
	
}

void main()
{
    float a=2.0, b=3.0;
	
	printf("a=%f, b=%f¥n", a, b);
	
	swap(&a, &b);
	
	printf("a=%f, b=%f¥n", a, b);
}

(2)関数を用いて2つの整数の合計と平均を求めるプログラムを作成せよ.


#include <stdio.h>

void sum_ave(int a,int b,int *sum,int *ave)
{
	*sum = a + b;
	*ave = (a + b)/2;
}

void main()
{
	int a=10;
	int b=4;
	int sum=0;
	int ave=0;
	
	printf("a=%d, b=%d,sum=%d, ave=%d¥n", a, b,sum,ave);
	
	sum_ave(a, b, &sum, &ave);
	
	printf("a=%d, b=%d,sum=%d, ave=%d¥n", a, b,sum,ave);
}

(3)実数型配列の要素をキーボードから10個入力,平均値の算出,最大値と最小値の算出,
大きい順に並び替え(ソート),配列の中身表示の5つの関数を作成せよ.


#include <stdio.h>

void swap(float *a, float *b)
{
	float tmp;
	
	tmp = *a;
	*a = *b;
	*b = tmp;
	
}

void input(float *p, int n)
{
	int i;
	
	for(i=0;i<n;i++){
		printf("data[%d]=",i);
		scanf("%f",p+i);
	}
	
}

float average(float *p, int n)
{
    int i;
    float ave=0.0;

    for(i=0;i<n;i++) {
        ave += *(p+i);
    }
    
    ave /= n;
    
    return ave;
}

void max_min(float *p, int n, float *max, float *min)
{
	int i;
    
    *max = *min = *p;
    
    for(i=1;i<n;i++){
		if(*max < *(p+i)){
			*max = *(p+i);
		}
	}
    
    for(i=1;i<n;i++){
		if(*min > *(p+i)){
			*min = *(p+i);
		}
	}
	
}

void sort(float *p, int n)
{
	int i, j;
	
	for(i=0;i<n-1;i++){
		for(j=i+1;j<n;j++){
			if(*(p+i) < *(p+j)){
				swap(p+i, p+j);
			}
		}
	}
	
}

void output(float *p, int n)
{
	int i;
	
	for(i=0;i<n;i++){
		printf("data[%d]=%f¥n",i,*(p+i));
	}
}

void main()
{
	float data[10];
	float max,min;
	
	input(data,10);
	
	printf("平均値 = %f¥n",average(data,10));
	
	max_min(data,10,&max,&min);

	printf("最大値 = %f,最小値 = %f¥n",max,min);
	
	sort(data,10);
	
	output(data,10);
}