問1
関数time()を本プログラム中で利用する場合に必要なヘッダーファイル名を [空欄1]に書きなさい。
問2
関数int myrand()は、呼び出されるたびに整数乱数を一つ発生し、返り値(戻り値)とする関数です。題意に沿うよう[空欄2]を埋めなさい。なお、必要ならば複数行記入してよい。
問3
5個のint型成分を持つ配列a[]を宣言します。題意に沿うよう[空欄3]を埋めなさい。
問4
関数myrand()を5回呼び出し、発生した整数乱数の値を配列a[]の各成分に代入します。題意に沿うよう[空欄4]を埋めなさい。
問5
関数void mysort()は、配列を受け取り、小さい順に並べ替えを行う関数です。仮引数として、int型成分を持つ配列DATA[]、及び、配列の成分数としての整数値Nを取ります。本プログラムでは、配列a[]を実引数として渡し、各成分を小さい順に並べ替えます。題意に沿うよう[空欄5]を埋めなさい。
問6
関数mysort()の仮引数を
と、ポインタ変数*DATAで受け取るよう書き換えます。関数中の配列成分DATA[i](iは任意)を、すべてポインタ変数を用いて書き換えなさい。
(プログラム内左端の行番号は便宜上付けたにすぎません。第2問も同様)
1: /*整数乱数を小さい順に並べ替えるプログラム例*/
2: #include<stdio.h>
3: #include<stdlib.h>
4: #include<[空欄1]>
5: int myrand()/*乱数発生*/
6: {
7: [空欄2]
8: }
9: void mysort(int DATA[],int N)/*小さい順に並べ替え*/
10: {
11: int i,j,min,num1,num2;
12: for(i=0;i<N-1;i++){
13: min=DATA[i];
14: num1=i;
15: num2=num1;
16: for(j=i+1;j<N;j++){
17: if(min > DATA[j]){
18: min=DATA[j];
19: num2=j;
20: }
21: }
22: DATA[num2]=DATA[num1];
23: DATA[num1]=min;
24: }
25: }
26: main()
27: {
28: int i,n;
29: [空欄3] /*配列利用宣言*/
30: srand((unsigned)time(NULL));
31: n=5;
32: printf("乱数5個表示\n");
33: for(i=0;i<n;i++){
34: [空欄4]
35: printf("a[%d]:%d\n",i,a[i]);
36: }
37: printf("小さい順に並べ替え\n");
38: mysort([空欄5]);
39: for(i=0;i<n;i++){
40: printf("a[%d]:%d\n",i,a[i]);
41: }
42: }
***実行例*** $ cc test1.c $ ./a.out 乱数5個表示 a[0]:463365376 a[1]:590819641 a[2]:1519747966 a[3]:1361940703 a[4]:503632172 小さい順に並べ替え a[0]:463365376 a[1]:503632172 a[2]:590819641 a[3]:1361940703 a[4]:1519747966 ***実行例ここまで***
あらかじめテキスト文字列(例:JABBERWOCKY)が記入されたファイルinput.txtを読み込み、画面に文字列を表示、かつ、文字列中の大文字Aの個数を数えてファイルoutput.txtに書き出すプログラムを作成します。
問1
char型ポインタ変数*pを宣言します。題意に沿うよう[空欄1]を埋めなさい。
問2
ファイルinput.txtを読み込みモードでオープンします。題意に沿うよう[空欄2]を埋めなさい。
問3
関数fscanf()を使い、ファイルinput.txtから文字列を読み込み、配列a[]へ格納します。題意に沿うよう[空欄3]を埋めなさい。
問4
ポインタ変数*pに配列a[]の基底アドレスを代入します。題意に沿うよう[空欄4]を埋めなさい。
問5
ポインタ*pが指し示す値(すなわち配列a[]の各成分)がヌル文字('\0')と等しくなければ、ポインタのアドレスをひとつづつ進めます。また、大文字のA('A')に等しければcountの値を1増加(インクリメント)させます。題意に沿うよう[空欄5]、[空欄6]、[空欄7]を埋めなさい。
問6
ファイルoutput.txtを書き込みモードでオープンします。題意に沿うよう[空欄8]を埋めなさい。
問7
関数fprintf()を用いて得られた結果("Aは***個")をファイルoutput.txtへ書き出します。題意に沿うよう[空欄9]を埋めなさい。
1: /*ファイルから入力された文字列からAの個数を数える*/
2: #include<stdio.h>
3: #include<stdlib.h>
4: main()
5: {
6: FILE *fp1,*fp2;/*ファイルポインタ*/
7: char fname1[30]="input.txt"; /*入力ファイル名はinput.txt*/
8: char fname2[30]="output.txt"; /*出力ファイル名はoutput.txt*/
9: char a[100];
10: [空欄1] /* char型ポインタ変数*p利用宣言 */
11: int count;
12: fp1=fopen([空欄2]); /*input.txtを読み込みモードでオープン*/
13: if(fp1==NULL){
14: printf("Can not open file");
15: exit(1);
16: }
17: fscanf([空欄3]); /*input.txtから読み込み、配列a[]へ格納*/
18: fclose(fp1);/*ファイルクローズ*/
19: count=0;
20: [空欄4]
21: while([空欄5]){
22: printf("%c",*p);
23: if([空欄6]){
24: count++;
25: }
26: [空欄7]
27: }
28: printf("\n");
29: printf("Aは%d個\n",count);
30: fp2=fopen([空欄8]);/*output.txtを書き込みモードでオープン*/
31: if(fp2==NULL){
32: printf("Can not open file");
33: exit(1);
34: }
35: fprintf([空欄9]);/*output.txtへ結果を書き出す*/
36: fclose(fp2);/*ファイルクローズ*/
37: }
http://www.tuat.ac.jp/~kamelab/gcc/index.html コンピュータプログラミング演習II 亀田・佐藤クラスのページへ