課題1

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

#include <stdio.h>

int main()
{
 int a[5] = {10, 20, 30, 40, 50};
 int *p;
 int i;

 p = &a[0];

 for(i=0; i<5; i++) {
  printf(" 配列の %d 番目は %d です\n", i+1, *(p+i) );
 }
 return 0;
}

課題2

(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);
}

(4)実数型配列の要素をキーボードから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));
 }
}

int 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);
 return 0;
}