CプログラミングⅡ 〕問題

平成 27 年度
後期試験〔
実 施 日 1 月 22 日 3 時 限 目
〕問 題
担当教員( 山 本 ) 持 込 ( 許 可 ・ 禁 止 )
持込許可のもの〔テキスト・プリント・ノート・参考書・その他(
)〕
CプログラミングⅡ
問1 以下のデータをメンバに持つ構造体 Meibo を定義しなさ
い.typedef を使ってもよい.
名前 name(文字数が最大 10 文字の文字列)
テスト点数平均値 ave(実数値)
成績 result(文字)
問2 以下のプログラムリストのなかで,誤っている行が2箇
所ある.どこか指摘し,それぞれ修正しなさい.構造体 Data
の定義は合っているものとする.
typedef struct Data {
double x;
char y[11];
int z;
} Data;
問4 以下のプログラムについて,出力結果を書きなさい.
typedef struct Fit {
char name[21];
int mem;
} Fit;
int func1(Fit *p);
void func2(Fit *p);
int main(void)
{
Fit a[5] = { {"All", 500}, {"System", 100},
{"Info", 120}, {"Net", 90},
{"Manage", 80} };
Fit *p;
int num;
int main(void)
{
Data a = {"String", 10, 24.5};
Data *b;
printf("%s\n", a[1].name); ・・・①
printf("%d\n", a[3].mem); ・・・②
p = a;
printf("%d\n", p->mem);
・・・③
printf("%d\n", (p + 1)->mem); ・・・④
p++;
printf("%d\n", (p + 1)->mem); ・・・⑤
num = func1(p);
printf("%d\n", num); ・・・⑥
func2(a);
printf("%s\n", a[1].name); ・・・⑦
printf("%d\n", a[3].mem); ・・・⑧
b = a;
printf("%s\n", b->x);
return 0;
}
問3 以下のプログラムについて,出力結果を書きなさい.
typedef struct Test{
char name[21];
int score;
} Test;
return 0;
}
Test func(Test *p, Test *q);
int main(void)
{
Test a = { "Fuku", 84 }, b = { "Oka", 62 }, c;
Test *p, *q;
printf("%s\n", a.name);
printf("%d\n", b.score);
c = a;
printf("%s\n", c.name);
printf("%d\n", c.score);
p = &b; q = &c;
printf("%s\n", p->name);
printf("%d\n", q->score);
a = func(p, q);
printf("%s\n", a.name);
printf("%d\n", a.score);
return 0;
int func1(Fit *p)
{
int i, num;
Fit tmp;
tmp.mem
for(i =
if((p
num
・・・①
・・・②
・・・③
・・・④
= p->mem;
1; i < 5; i++)
+ i)->mem < tmp.mem)
= i;
return num;
・・・⑤
・・・⑥
}
・・・⑦
・・・⑧
void func2(Fit *p)
{
Fit tmp;
}
tmp = *(p + 1);
*(p + 1) = *(p + 3);
*(p + 3) = tmp;
Test func(Test *p, Test *q)
{
Test tmp;
}
strcpy(tmp.name, "Ave");
tmp.score = (p->score + q->score) / 2;
return tmp;
}
学部
学科
年次
組
学籍
番号
氏名
平成 27 年度
後期試験〔
実 施 日 1 月 22 日 3 時 限 目
〕問 題
担当教員( 山 本 ) 持 込 ( 許 可 ・ 禁 止 )
持込許可のもの〔テキスト・プリント・ノート・参考書・その他(
)〕
CプログラミングⅡ
問5 以下のプログラムについて,出力結果を書きなさい.
int main(void)
data1.txt の内容
{
int i, n, a[20], sum;
FILE *fp;
3 6
2
1 4
5
typedef struct Member {
char name[21];
double height;
} Member;
fp = fopen("data1.txt", "r");
n = 0;
while(fscanf(fp, "%d", &a[n]) != EOF)
n++;
void insertmem(int n, Member *pa, Member pb);
printf("%d\n", n);
・・・①
printf("%d\n", a[1]); ・・・②
printf("%d\n", a[3]); ・・・③
int main(void)
{
int i;
Member st[5] = { {"佐藤", 186.2}, {"鈴木", 178.2},
{"高橋", 162.7}, {"田中", 154.9} };
Member
ins
=
{"伊藤",
175.1};
①
sum = a[2] + a[4];
printf("%d\n", sum);
問7 以下は,名前 name[],身長 height をメンバとする構造体
Menber を定義し,Member 配列 st[]に height が高い順に 4 人分
のデータが格納されているとき,Member 変数 ins のデータを,
height の順番が保たれるように st[]に挿入するプログラムで
ある.空欄を埋めなさい.
・・・④
return 0;
}
insertmem(4, st,②ins );
問6 以下のプログラムについて,出力結果を書きなさい.出
力結果に空白が入る場合は「␣」を書くこと.
#define N 6
alph1.txt の内容
int main(void)
{
char buf[21];
FILE *fp;
abc def
g h ij
klmn op
qrs tu
return 0;
}
void insertmem(int n, Member *pa, Member pb)
{
int i, j;
fp = fopen("alph1.txt", "r");
fgets(buf, N, fp);
printf("%s\n", buf);
for(i = 0; i < 5; i++){
printf("%s %.1lf\n", st[i].name,③st[i].height );
}
・・・①
j = 0;
for(i = 0; i < n; i++){
if( (pa + i)->height
>= pb.height){
④
j++;
}
}
for(i = n; i > j; i--){
*(pa + i) = *(pa + i ⑤
- 1);
}
*(pa + j) = pb
⑥;
fscanf(fp, "%s", buf);
printf("%s\n", buf);
・・・②
fscanf(fp, "%s", buf);
printf("%s\n", buf);
・・・③
fgets(buf, N, fp);
printf("%s\n", buf);
・・・④
fclose(fp);
}
return 0;
}
問8 データ x[i](i=0,1,...,n-1)について,それらの平均
値 ave と,分散 var 計算するプログラムを作成しなさい.た
だし,平均値,分散の計算処理は一つの関数で行うようにプ
ログラミングしなさい(すなわち,計算結果をポインタで返
すように関数化しなさい).例えば,
void keisan(int n, int x[], double *pa, double *pv)
(*pa,*pv は平均値 ave,分散 var に対するポインタ)とい
うような関数を作成すること.
また,分散は以下の式で求められる.
分散: var
=
学部
学科
年次
組
学籍
番号
1 n −1
2
( x[i] − ave )
∑
n − 1 i =0
氏名
〔
CプログラミングⅡ
〕問 題 解 答 用 紙
担当教員(
山 本
)
持込(許可・禁止)
持込許可のもの〔テキスト・プリント・ノート・参考書・その他(
問1
3点
typedef struct Meibo {
char name[11];
double ave;
char result;
} Meibo;
問4(続き)
⑤
3点×4=12点
⑥
120
⑦
3(4でもOK)
⑧
Net
100
3点×4=12点 問5
問2
誤り1ヶ所目
2点×4=8点
①
②
Data a = {"String", 10, 24.5};
6
修正
)〕
③
6
④
1
Data a = {24.5, "String", 10};
6
誤り2ヶ所目
b = a;
問6
修正
3点×4=12点
①
b = &a;
②
abc␣d
③
問3
④
g
2点×8=16点
①
ef
␣h␣ij
②
Fuku
③
62
問7
④
①
Fuku
⑤
84
Member
⑥
②
Oka
⑦
3点×6=18点
st, ins
84
⑧
③
Ave
73
st[i].name, st[i].height
④
問4
->height
3点×4=12点
①
②
⑤
System
③
90
i - 1
④
500
学部
⑥
100
学科
pb
年次
福
岡
工
組
学籍
番号
業
大
氏名
学
評点
CプログラミングⅡ
〔
〕問 題 解 答 用 紙
担当教員(
山 本
)
持込(許可・禁止)
持込許可のもの〔テキスト・プリント・ノート・参考書・その他(
問8
)〕
7点
[プログラム記述欄]
※ include 文,関数のプロトタイプ宣言,データの入力処理,計算結果の出力処理は省略してよい.
int main(void)
{
int n, x[100];
double ave,var;
keisan(n, x, &ave, &var);
}
void keisan(int n, int x[], double *pa, int *pv)
{
int i;
double sum = 0.0;
for(i = 0; i < n; i++){
sum += x[i];
}
*pa = sum / n;
sum = 0.0;
for(i = 0; i < n; i++){
sum += (x[i] - *pa) * (x[i] - *pa);
}
*pv = sum / (n - 1);
}
学部
学科
年次
福
岡
工
組
学籍
番号
業
大
氏名
学
評点