2015 年度前期プログラム設計期末試験問題

平成 27 年 7 月 28 日
2015 年度前期プログラム設計期末試験問題
試験時間 1時間30分
1. スタックとキューについて、50 字以内で記述せよ。
2.成績をおさめた構造体プログラムがある。①これを用いて各人の MATH と ENG の平均点を計算す
る関数、double get_ave(SK s) を記述せよ。②構造体として記述されている 3 人の学籍番号(number)、
名前(name)、ENG と MATH の平均点数を画面に表示するプログラムを for 文を使って記述せよ。
#include <stdio.h>
typedef struct seiseki{
int number;
char *name;
int ENG;
int MATH;
double ave;
} SK;
double get_ave(SK s);
int main(void){
int i;
SK s[3] ={
{1001, "yamada", 90, 80, 0.0},
{1002, "aoki", 80,70, 0.0},
{1003, "kawai", 85, 65,0.0},
};
for(i=0; i<=2; i++) s[i].ave = get_ave(s[i]);
printf("number¥tname¥taverage ¥n");
}
/*3 人の学籍番号、名前、ENG
return(1);
と MATH の平均点数を画面に表示する*/
3.バブルソートを用いて、文字を辞書順に並べるプログラムを完成させるために、①データを交換す
る部分、②ソートして、その結果を画面に出力するプログラムを記述せよ。
#include <stdio.h>
#include <string.h>
void bublesort(char *a, int n)
{
char temp;
while(n > 0){
int bdone = 0 ;
int i = 1;
/*maximum value moves the end of the right*/
while(i < n){
if(a[i-1] > a[i]){
/*①データを交換する*/
bdone = 1;
}
i++;
}
if(bdone == 0) break;
n--;
}
}
void bublesort(char *a, int n);
int main(void){
char a[] = "yamadatakashi";
int n = strlen(a) ;
/*②ソートして結果を表示する*/
}
return(1);
1
4.2分探索木のプログラムがある。解答用紙の空欄を記述することによって、①データを小さい値か
ら順に表示する関数 void printdata(NODE *root) を記述せよ。また、②データを大きい順から表示
する関数 void printdata(NODE *root)を記述せよ。
bin11.cpp
NODE state4 = { 30, NULL, NULL};
NODE state5 = { 45, NULL, NULL};
NODE state6 = { 80, NULL, NULL};
NODE state7 = { 55, NULL, NULL};
root= &state1;
state1.left=&state2;
state1.right=&state3;
state2.left=&state4;
state2.right=&state5;
state3.left=&state7;
state3.right=&state6;
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct data{
int key;
struct data *left;
struct data *right;
}NODE;
void printdata(NODE *root);
int main(void){
NODE *root; /*分岐点へのポインタ*/
NODE state1 = {50
,NULL,NULL};
NODE state2 = {40
,NULL,NULL};
NODE state3 = {60
,NULL,NULL};
printdata(root);
}
return(1);
5 以下に示すリスト構造に aoki のデータを追加するためのプログラムを作成する。
①解答用紙の空欄を記述することによって、データを追加する関数
void addlist(LIST *head, LIST *addata)を記述せよ。
②for 文を用いてポインタ*p を辿ってリスト構造にある全データを画面に出力するプログラムを記述せ
よ。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct name_list{
struct name_list *next;
char *name;
}LIST;
void addlist(LIST *head, LIST *addata);
int main(void){
LIST name0= {NULL, NULL};
LIST name1= {NULL, "deguchi"};
LIST name2={NULL, "itoh"};
LIST name3={NULL, "kurata"};
LIST name4={NULL, "ouchi"};
LIST addata = {NULL, "aoki"};
LIST *p; /*LIST pointer */
LIST *head; /*LIST head*/
head=&name0; /*LIST head*/
name0.next=&name1;
name1.next=&name2;
name2.next=&name3;
name3.next=&name4;
addlist(head, &addata);
/*リスト構造にある全データを画面に出力*/
return(0);
}
6 下記のプログラムで、出力結果が 12 になるように空欄を記述せよ。
int x;
int *p;
p=
;
*p = 12;
printf( "%d", x );
7 下記のプログラムの出力結果を示せ。
int a[5]={2,4,6,8,10};
printf("%d¥n", *(a+3));
printf("%d", *a+3);
2