名古屋大学 情報学研究科 複雑系科学専攻 2017年8月実施 情1
标签:
Author
祭音Myyura
Description
[1]
次のプログラムの出力結果を示せ。
#include <stdio.h>
int main(void) {
int a = 0x456;
int b = 0x0ff;
printf("%x %d %d %x\n", a, b, a|b, b>>1);
return 0;
}
[2]
組み合わせの数
を計算する関数 combを以下のように作成する。空欄を適切に埋めよ。
int comb(int n, int k) {
int num=1, den=1;
while( (1) ) {
num *= (2);
den (3) k--;
}
return num/den;
}
- 関数
combを使ってを計算し,右下図のような三角形を出力する関数 pascalを作成する。 上下連続する段と段の数値の関係を考慮すると,これらの数値の配置には規則性があることがわかる。pascal(5)を実行したとき,右下図のように表示されるように,空欄を適切に埋めよ。
void pascal(int n) {
int i, j, k;
for(i=0; i<n; i++) {
for(j=0; j< (4) ; j++)
printf(" ");
for(k=0; k<= (5) ; k++)
printf("%2d", (6) );
printf("\n");
}
}
実行例:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
- 再帰法を用いて
を計算する関数 comb2を作成する。空欄を適切に埋めよ。
int comb2(int n, int k) {
if( (7) || n == k) return 1;
else
return (8) + (9);
}
[3]
整数値の列
50, 40, 80, 70, 30, 10, 90, 60, 80
を処理するプログラムを作成する。
以下のプログラムでは,これらの整数値は配列 data の要素として前から順に格納されており,配列の末尾に -1 を追加して値の終わりを表現している。
#include <stdio.h>
int get_min(int data[]) {
int *p=data;
int min=*p;
while( (1) != -1) {
if( (2) ) min=*p;
}
return min;
}
int get_order(int data[], int n);
int main(void) {
int data[]={50,40,80,70,30,10,90,60,80,-1};
int n;
scanf("%d", &n);
printf("最小値は%dです\n", get_min(data));
printf("data[%d]=%dは%d番目に大きい\n",
n, data[n], get_order(data, n));
return 0;
}
- 配列
dataの最小値を求める関数get_minの空欄を適切に埋めよ。 - 配列
data[n]が,全体の大きい方から数えて何番目かを返す関数get_orderを作成する。ただし,nは0以上の整数で,キーボードから入力するものとする。関数get_orderを作成せよ。 n = 3のときのプログラムの実行結果を示せ。
Kai
[1]
456 255 1279 7f
[2]
1)
(1) k > 0
(2) n--
(3) *=
2)
(4) n-i-1
(5) i
(6) comb(i,k)
3)
(7) k == 0
(8) comb2(n-1,k-1)
(9) comb2(n-1,k)
[3]
1)
(1) *++p
(2) *p < min
2)
int get_order(int data[], int n) {
int i=0;
int order=1;
while(data[i] != -1) {
if(data[i] > data[n])
order++;
i++;
}
return order;
}
3)
最小値は10です
data[3]=70は4番目に大きい