プログラミング序論(問題例)

問題

問1 
次のプログラムについて以下の問いに答えなさい。(30点)

#include <stdio.h>
int list[]={1,2,3,4,5,6,7,-1};
void print(int max)
{
	int i;
	for(i=0;i<max;i++){ printf("%d ",list[i]); }
	printf("\n");
	return;
}
int count(void)
{
	int i;
	i=0;
	while(list[i]!=-1){ i++; }
	return i;
}
void function(int max)
{
	int i;
	for(i=0;i<max;i++){ list[i]=list[i+1]; }
	print(max);
	return;
}
int main( void )
{
	int max;
	max=count();
	print(max);
	function(max);
	return 0;
}

1) プログラムが実行される時に、関数がどのような順番で呼び出されるか示しなさい。
答:
main count print functuion、printの順番

2) 関数countの処理内容を説明しなさい。
答:
配列に-1が格納されているところまでの要素数を数える。

3) プログラムが実行された時の出力を示しなさい。.
答:
1 2 3 4 5 6 7 
2 3 4 5 6 7 -1

問2 C言語に関する以下の3つの問いに具体的に答えなさい。 (30点)

1)ソースファイルから実行可能ファイルを作成するためのコンパイルとリンクはそれぞれ何を行う処理か?

解答例:

コンパイルはソースファイルを機械語へ翻訳しオブジェクトファイルを作る。リンクはこのオブジェクトファイルとライブラリーなどにある必要な機械語プロフラムとを纏め、関数の呼び出し部分の結合などを行う。リンクの結果、実行可能ファイルが作られる。

2) 実行の流れを分岐させる構文を具体的に説明しなさい

解答例:
C言語の実行制御で分岐を記述する構文にはif文とswitch文がある。if文は次のように使う

if( 0 < a )
{
     printf("aは正の値"); /*aが0より大きい場合はこのブロックが実行される*/
}else{
     printf("aは負または0");/*その他の場合はこのブロックが実行される*/
}
※序論の範囲で必要と思われることが書かれていれば満点とします。何もかも説明する必要はない。

3) 標準関数とはどのようなものか、どのようにして利用するか説明しなさい。

解答例:
C言語ではプログラム作成で有用かつ頻繁に使われると予想されるプログラムを言語処理系の標準関数とし用意している。 標準関数はコンパイル済みのオブジェクトを集め標準関数ライブラリーに纏められている。

標準関数printfを呼び出して利用するソースプログラムは、標準入出力関数のプロトタイプ宣言が書かれたヘッダーファイルstdio.hをインクルードし、printfの関数呼び出しを次のように記述する。

#include<stdio.h>
int main(void)

    printf("Hello");
    return 0;
}