情報科学概論II(実習) 3回目

課題の提出〆切りは来週の実習開始前(正午)まで.
課題提出はNUCTにログインして行うこと.
講義資料

今日やること


下記サンプルプログラムを参考にして,以下の各課題のプログラムをそれぞれ作成し, そのソースコードをNUCTの入力欄への記入,もしくは添付ファイルとして提出せよ.
(実際にコンパイル・実行してエラーのないことを確かめて おくこと。)
以下,コンパイルなどの作業はターミナル上で行う("%" は prompt を表す).
ファイルの編集は emacsなどの適当なエディターを用いること.

Sample-0: コンパイルの仕方

コンパイルはターミナル(または)で行う。
% cc main0.c			: 実行形式のファイルは a.out となる
あるいは
% cc -o j5main0 main0.c	: 実行形式のファイルは j5main0 となる

Sample-1: 単純なC言語の例

プログラミングはemacsを使って作成 (Sample-2,3も同様)
#include <stdio.h>

int main(void)
{
   printf("study of c-programming. \n");
   return 0;
}

Sample-2: 四則計算等

#include <stdio.h>

int main(void)
{
   int   a=5,b=2,c;
   float f=3.1;
   c = sizeof(int);
   printf("int  is %d\n",c);
   printf("(a,b,f) = (%d, %d, %f)\n",a,b,f);
   printf("  a + b = %d , a * f = %f \n", a+b, a*f);

   return 0;
}

Sample-3: キーボードから 10 進の整数を読み込んで,画面に表示する.

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

int main(void)
{
  char buf[50]; 
  int i;

  printf("please input signed integer i =  ");
  fgets(buf,sizeof(buf),stdin);  
  if (sscanf(buf,"%d",&i) != 1) { 
   fputs("input error\n", stderr);  
   exit(-1); 
  }
  printf("signed integer i = %d\n",i);
  
  return 0;
}
================================================
注:1. fgets+sscanfによる読み込み: 詳細は講義ノートを参照せよ
   2. 書式指定文字列 (printf(), sscanf() などで使う。)
            %d     整数
            %s     文字列
            %f     小数点数
            %lf    倍精度少数点数 (sscanf() などで)
  3. &i : 変数 i の address (memory 上の位置)をあらわす。


課題3-1

以下の要素を含むCのプログラムを作成せよ.(Sample-1 参照)

課題3-2

sizeof 演算子を用いて,以下の各種の変数のサイズを,順に調べる(表示する) プログラムを作れ. (Sample-2参照)
  (sizeof(char) = 1 Byte. という体裁で6行表示する。)

 char : short int : int : unsigned int : float : double

課題3-3

キーボード から整数値のkpc(キロパーセク)を入力し,それを km(キロメートル)に変換して表示するプログラムをつくれ.(Sample-2,3参照)

pc(パーセク)は天文学でよく使われる長さの単位である。星を地球から観測するときに、地球の公転運動により天球上での星の位置が変化する。この変化による最大離角の半分(年周視差)が1秒角であるとき、この星と地球の距離が1pcである。地球の太陽に対する公転半径が1.496x1011m 程度であることを考慮して計算すると、大体1pc=3.086x1016mと求められる。
また,大きな数字を表す際,例えば 2 x 1010 は 2.0e10 と書けば良い(指数表記).print文などでの書き出しの際,%fの代わりに%eとすると指数表記で書き出せる.