問1
5つの整数と長さ3の文字列を読み込み,文字列が"MAX"のときは最大値を,文字列が"MIN"のときは最小値を出力するプログラムを以下の関数 main() を用いて作成せよ.
#include <stdio.h>
#include <string.h> /* strcmp() */
#define SIZE 5
/* ... */
int main(void)
{
int a[SIZE];
char kind[4];
getarray(a, SIZE);
printf("MIN or MAX > ");
scanf("%s", kind);
if (strcmp("MAX", kind) == 0) {
printf("最大値: %d\n", search_max(a, SIZE));
}
if (strcmp("MIN", kind) == 0) {
printf("最小値: %d\n", search_min(a, SIZE));
}
return 0;
}
実行例
0 > 1
1 > 5
2 > 4
3 > 8
4 > 3
MIN or MAX > MAX
最大値: 8
実行例
0 > 1
1 > 5
2 > 4
3 > 8
4 > 3
MIN or MAX > MIN
最小値: 1
問2
正整数n,n個の実数,および文字列を読み込み,文字列がselectionのときは選択ソート,文字列がbubbleのときはバブルソートをして,使用したソートアルゴリズムと降順にソートされた実数型配列を出力するプログラムを作成せよ.以下のコードを穴埋めして,用いても良い.
#include <stdio.h>
#include <string.h> /* strcmp() */
void get_array(double num[], int size)
{
int i;
for (i = 0; i < size; i++) {
printf("%d番目の実数 > ", i);
scanf("%lf", &num[i]);
}
}
void swap(double *i, double *j)
{
/* ... */
}
void ssort(double a[], int n)
{
/* ... */
}
void bsort(double a[], int n)
{
/* ... */
}
void print_array(double num[], int n)
{
int i;
for (i = 0; i < n; i++) {
printf("%f\n", num[i]);
}
}
int main(void)
{
/* ... */
}
実行例
整数 > 10
0番目の実数 > 3.3
1番目の実数 > 4.4
2番目の実数 > 2.2
3番目の実数 > 1.1
4番目の実数 > 0.0
5番目の実数 > 9.9
6番目の実数 > 8.8
7番目の実数 > 5.5
8番目の実数 > 7.7
9番目の実数 > 6.6
文字列 > selection
選択ソート
9.900000
8.800000
7.700000
6.600000
5.500000
4.400000
3.300000
2.200000
1.100000
0.000000
実行例
整数 > 10
0番目の実数 > 3.3
1番目の実数 > 4.4
2番目の実数 > 2.2
3番目の実数 > 1.1
4番目の実数 > 0.0
5番目の実数 > 9.9
6番目の実数 > 8.8
7番目の実数 > 5.5
8番目の実数 > 7.7
9番目の実数 > 6.6
文字列 > bubble
バブルソート
9.900000
8.800000
7.700000
6.600000
5.500000
4.400000
3.300000
2.200000
1.100000
0.000000
問3
正整数n,n個の長さ20以下の文字列,および文字列sを読み込み,文字列sがselectionのときは選択ソート,文字列がbubbleのときはバブルソートをして,文字列型配列を辞書順に出力するプログラムを作成せよ.文字列を入れ替えるのに,以下の関数swap()を用いてもよい.
void swap(char *s, char *t)
{
char temp[MAX];
strcpy(temp,s);
strcpy(s,t);
strcpy(t,temp);
}
実行例
整数 > 3
0番目の文字列 > b
1番目の文字列 > c
2番目の文字列 > a
文字列 > bubble
a
b
c
実行例
整数 > 7
0番目の文字列 > Blake
1番目の文字列 > Leighton
2番目の文字列 > Taylor
3番目の文字列 > Jessica
4番目の文字列 > Penn
5番目の文字列 > Chace
6番目の文字列 > Ed
文字列 > selection
Blake
Chace
Ed
Jessica
Leighton
Penn
Taylor
文字列の比較にstrcmp()を用いると良い.
問4
以下のプログラムを作成せよ.
入力
正整数n,ならびにn個の名前と電話番号の組,および文字列.ただし,いずれの入力文字列も長さ20以下と仮定して良い.
処理
構造体型配列で電話帳を作成し,名前をキーとして,文字列がselectionのときは選択ソート,文字列がbubbleのときはバブルソートをする.
出力
名前をキーとして辞書順にソートされた電話帳.同名の人は,どの順序に出力してもよい.
実行例
人数 > 2
0人目:名前 > bbb
電話番号 > 111
1人目:名前 > aaa
電話番号 > 222
文字列 > selection
aaa, 222
bbb, 111
実行例
人数 > 5
0人目:名前 > Taro
電話番号 > 090-111-1111
1人目:名前 > Hanako
電話番号 > 090-222-2222
2人目:名前 > Ichiro
電話番号 > 090-333-3333
3人目:名前 > Jiro
電話番号 > 090-444-4444
4人目:名前 > Hanayo
電話番号 > 090-555-5555
文字列 > bubble
Hanako, 090-222-2222
Hanayo, 090-555-5555
Ichiro, 090-333-3333
Jiro, 090-444-4444
Taro, 090-111-1111