情報科学概論II(実習) 3回目
課題の提出〆切りは来週の実習開始前(正午)まで.
課題提出はNUCTにログインして行うこと.
講義資料
今日やること
-
C言語によるプログラミング -簡単なプログラムの作成と実行-
下記サンプルプログラムを参考にして,以下の各課題のプログラムをそれぞれ作成し,
そのソースコードを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 参照)
- "Report: Lesson 3-1" という注釈行 (comment) が入っていること.
- 標準入出力関数を用いるための header file (stdio.h)を読み込む preprocessor command (#include ...) を含むこと.
- 3行分のメッセージ(内容は何でも良い)を画面に出力する機能を持っていること.
課題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とすると指数表記で書き出せる.