PROG 7.3  main関数に引数

<問題> 参考プログラムを元にして、実行例のプログラムを作成しなさい。


<参考プログラム>

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[]){  /* argcは入力された項の数(コマンド + コマンドの引数の数) argvは、各引数の文字列へのポインター */
   int i, j;

   if (argc != 3) { /* 実行時に引数がちょうど2つでないなら終了。mainも1つとして数えられていることに注意 */
      exit (0) ; /* 何もしないで、ここで正常終了. exit(1)やreturn(1)として、OSに正常な終了0ではないことを示す場合もある */
   }
                      /* argv[0]は、コマンドそのもの。通常は使用しない */
   i = atoi(argv[1]); /* 最初の引数の文字列を10進数に変換し、iに代入。1234という文字列を、加算できる1234という1つの整数データに変換 */
   j = atoi(argv[2]); /* 2つ目の引数 */

   printf("arg 1 = %3d, arg 2 = %3d: arg1 + arg2 = %5d\n", i, j, i+j);

   return 0;
}

<その実行例> (ソースプログラムを、0703.c)
gcc 0703.c

./a.out 2 3
arg 1 =   2, arg 2 =   3: arg1 + arg2 =     5


<main 関数の引数について>

main 関数の引数、(char *argv[]) は



<実行例> (ソースプログラムを 0703a.cとして、gcc -o 0703a 0703.c とした場合)

0703a 5

     0  1  2  3  4
  0 .  .  .  .  . 
  1  .  .  .  .  .
  2  .  .  .  .  .
  3  .  .  .  .  .
  4  .  .  .  .  .

<ヒント> 



解答例
#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[]){ 
   int i,j,n;

   /* 完成させなさい */
   /* 以下、解答を公開します。参考にしてください */
   if (argc != 2) 
      exit(0); 

   n = atoi(argv[1]); 

   printf("   ");
   for (i = 0; i < n; i++)
      printf("%3d", i);

   printf("\n");

   for(i = 0; i < n; i++){
      printf("%3d", i);
      for(j = 0; j < n; j++)
         printf("  .");
      printf("\n");
   }

   return 0;
}