平成 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); } 学部 学科 年次 福 岡 工 組 学籍 番号 業 大 氏名 学 評点
© Copyright 2024 ExpyDoc