関数2

課題1

5つのデータのうち最大値を求めるプログラムが下記に示されている。 下記のプログラムを適当な名前(例えば、func2-1.c)で作成し、実行して 動作確認せよ。

#include <stdio.h>

int max_return(int a, int b, int c, int d, int e)
{
  int max;

  max = a;

  if(max < b) max = b;
  if(max < c) max = c;
  if(max < d) max = d;
  if(max < e) max = e;

  return max;

}

int main(void)
{
  int d0, d1, d2, d3, d4;
  int max;

  printf("正の整数を5つ入れてください。\n");
  scanf("%d %d %d %d %d", &d0, &d1, &d2, &d3, &d4);

  max = max_return(d0, d1, d2, d3, d4);

  printf("最大値 = %d\n", max);

  return (0);
}
(実行例)
hp3225[susaki]501:~/program% 
hp3225[susaki]501:~/program% ./a.out
正の整数を5つ入れてください。
1 2 3 4 5
最大値 = 5
hp3225[susaki]502:~/program% 

課題2

課題1と同様に、5つのデータのうち最大値を求めるプログラムが下記に 示されているが、一部が*****の ように隠されている。隠された部分を書け。

#include <stdio.h>

void max_return(int a, int b, int c, int d, int e, int *max)
{

  *max = a;

  if(*max < b) *max = b;
  if(*max < c) *max = c;
  if(*max < d) *max = d;
  if(*max < e) *max = e;

}

int main(void)
{
  int d0, d1, d2, d3, d4;
  int max;

  printf("正の整数を5つ入れてください。\n");
  scanf("%d %d %d %d %d", &d0, &d1, &d2, &d3, &d4);

  **********************************************

  printf("最大値 = %d\n", max);

  return 0;
}

課題3

課題2と同様に、5つのデータのうち最大値を求めるプログラムが下記に 示されているが、一部が*****のように隠されている。隠された部分を書け。 課題2と異なるのは、5つのデータが配列に格納されている点である。

#include <stdio.h>

void max_return(int a, int b, int c, int d, int e, int *max)
{

  *max = a;

  if(*max < b) *max = b;
  if(*max < c) *max = c;
  if(*max < d) *max = d;
  if(*max < e) *max = e;

}

int main(void)
{
  int d[10];
  int max, i;

  printf("正の整数を5つ入れてください。\n");
  for(i=0; i<5; i++)
      scanf("%d", &d[i]);

  **********************************************

  printf("最大値 = %d\n", max);

  return 0;
}

課題4

課題3と同様に、5つのデータのうち最大値を求めるプログラムが下記に 示されているが、一部が*****のように隠されている。隠された部分を書け。 課題3と異なるのは、関数に渡すのが、5つのデータが格納されている 配列の先頭のアドレスという点である。

#include <stdio.h>

void max_return(int a[], int *max)
{
  int i;

  *max = a[0];

  for(i=1; i<5; i++)
      if(*max < a[i]) *max = a[i];
}

int main(void)
{
  int d[10];
  int max, i;

  printf("正の整数を5つ入れてください。\n");
  for(i=0; i<5; i++)
      scanf("%d", &d[i]);

  **********************************************

  printf("最大値 = %d\n", max);

  return 0;
}

課題5

課題4と同様に、5つのデータのうち最大値を求めるプログラムが下記に 示されているが、一部が*****の ように隠されている。隠された部分(1)-(3)のそれぞれを書け。 課題4と異なるのは、関数内ではポイン タ変数を使用するという点である。

#include <stdio.h>

void max_return(int *a, int *max)
{
  int i;

(1)**********************************************

  for(i=1; i<5; i++){
      if(*max < *a) *max = *a;
(2)   ******************************************
  }
}

int main(void)
{
  int d[10];
  int max, i;

  printf("正の整数を5つ入れてください。\n");
  for(i=0; i<5; i++)
      scanf("%d", &d[i]);

(3)**********************************************

  printf("最大値 = %d\n", max);

  return 0;
}

課題6

  1. 次のプログラムによって、画面に出力される結果を示せ。予め結果を予想し た上で、プログラムをfunc6-1.cとして作成し、結果を確認せよ。
  2. ポインタ引数を使わずに、戻り値によって値を返すように、プログラムを修 正し(プロトタイプ宣言の修正も含む)、プログラムをfunc6-2.cとして 作成して、同一の結果を返すか確認せよ。

#include <stdio.h>

void keisan(int *a);

int main(void)
{
    int num = 3;
    keisan(&num);
    printf("NUM = %d\n", num);

    return 0;
}

void keisan(int *a)
{
    *a = *a * *a + *a;
}

須ア純一 京都大学大学院 工学研究科社会基盤工学専攻 空間情報学講座
[C言語 演習問題トップページ] [須ア純一ホームページ]