システムプログラミング序論 演習 


演習 1: 配列と文字列

例題 1 : 逆行列を求めるプログラム

#include <stdio.h>

#define N 100

int main(void)
{
  double a[N][N], b[N][N], tmp;
  int i, j, k, n;

  printf("input matrix size\n");
  scanf("%d", &n);

  for (j = 0; j < n; j++) {
    for (i = 0; i < n; i++) {
      a[j][i] = 0.0;
      b[j][i] = 0.0;
    }
  }

  for (i = 0; i < n; i++)
      b[i][i] = 1.0;

  for (j = 0; j < n; j++) {
    for (i = 0; i < n; i++) {
      scanf("%lf", &a[j][i]);
    }
  }

  for (k = 0; k < n; k++) {
    tmp = a[k][k];
    for (i = 0; i < n; i++) {
      a[k][i] /= tmp;
      b[k][i] /= tmp;
    }
    for (j = 0; j < n; j++) {
      if (j != k) {
        tmp = a[j][k];
        for (i = 0; i < n; i++) {
          a[j][i] -= a[k][i] * tmp;
          b[j][i] -= b[k][i] * tmp;
        }
      }
    }
  }

  for (j = 0; j < n; j++) {
    for (i = 0; i < n; i++) {
      printf("%f ", b[j][i]);
    }
    printf("\n");
  }

  return 0;
}

例題 2 : 入力された文字列から全ての数字文字を削除して表示するプロ グラム

#include <stdio.h>

int main(void)
{
  char str1[100], str2[100];
  int i, j;

  printf("input string ");
  scanf("%s", str1);

  i = 0;
  j = 0;
  while (str1[i] != '\0') {
    if (str1[i] < '0' || str1[i] > '9') {
      str2[j] = str1[i];
      j++;
    }
    i++;
  }
  str2[j] = '\0';

  printf("output string = %s\n", str2);

  return 0;
}

例題 3 : 正の整数値を読み込んで桁数を表示するプログラム

#include <stdio.h>

int main(void)
{
  int n, tmp;
  int digit;           /* 桁数 */

  printf("input number ");
  scanf("%d", &n);

  tmp = n;
  digit = 0;

  do {
    tmp /= 10;
    digit++;
  } while (tmp > 0);

  printf("%d is the %d-digit number\n", n, digit);

  return 0;
} 

課題 1

例題 1のプログラムを参考にして,Gauss-Jordan法を用いて連立一次方程式の 解を求めるプログラムを作成しなさい.
  • 入力に使うファイルは こちらから,ダウンロードすること. 最後の列は解ベクトルである。 この入力ファイルを用いた計算結果をレポートに記載すること.
  • 課題 2

    例題 2のプログラムを参考にして,文字列str1および文字列str2を入力し,入 力された文字列str2に含まれない文字を,文字列str1から全て取り除いて表示 するプログラムを作成せよ. 例えば,str1が"tsukuba"でstr2が"tuka"ならば,"tukua"と表示される. str1を"information"として,str2を"ifort"とした場合の結果をレポートに記 載すること.

    課題 3

    例題 3のプログラムを参考に,正の整数値を読み込んで,その数を逆順に表示 するプログラムを作成しなさい.例えば123を入力すると321と表示される.