• 検索結果がありません。

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

N/A
N/A
Protected

Academic year: 2021

シェア "プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の"

Copied!
13
0
0

読み込み中.... (全文を見る)

全文

(1)

プログラミング方法論 II 第 14,15 回(担当:鈴木伸夫) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ。但し座標 は double 型とする。 typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の Point を用いて、2 点の座標を入力するとその 2 点間の距 離を表示するプログラムを作成せよ。平方根は sqrt()を用いて計算する。 #include <stdio.h> #include <math.h> int main(){ Point p[2]; int i; for (i = 0; i < 2; i++){ scanf("%lf %lf", (a) ); } printf("%f¥n", sqrt( (b) ); return 0; } 問題 19. 長方形のデータを保持する構造体 Rect を作成せよ。Rect には左上 の x 座標、y 座標、横の長さ width、縦の長さ height がある。データは全て double 型である。 typedef struct { (a) ; (b) ; (c) ; (d) ; } Rect;

(2)

問題20. 次のプログラムは学生3名の年齢、身長、体重をキーボードから入力し、 それを画面に出力するプログラムである。空白部分を埋めてプログラムを完成 せよ。

#include <stdio.h> #include <stdlib.h>

#define MAX_NUMBER ( (a) ) /* 学生の人数 */ typedef struct{ int age; /* 年齢 */ double height; /* 身長 */ double weight; /* 体重 */ } Student; int main(){ Student s[MAX_NUMBER]; int i;

for (i = 0; i < MAX_NUMBER; i++){

scanf("%d %lf %lf", (b) ); } for (i = 0; i < (c) ; i++){ printf("%d番目の学生の年齢=%d,身長=%f,体重=%fです。¥n", (d) ); } return EXIT_SUCCESS; } 問題 21. 2 つの整数を入れ替える swap 関数を作成せよ。 void swap( int *a, int *b ){

int temp = (a) ; (b) ; (c) ; }

(3)

問題 22. 問題 17 の Point 型変数の a の内容を Point 型変数 b に代入する関 数 copypoint()を作成せよ。

void copypoint(Point *a, Point *b){ (a) ; } 問題 23. トランプゲームを作成したい。スートと数を保持する構造体 Card を 作成せよ。但し、クラブは 0、ダイヤは 1、ハートは 2、スペードは 3 というよ うに int 型を使って表現することとする。Card 配列にクラブ A からスペード K までの 52 枚のカードデータを代入するプログラムを作成せよ。 #include <stdio.h> #define CARD_MAX (52) typedef struct { int number; /* 数 */ int suit; /* スート */ } Card; int main(){ int i; Card c[CARD_MAX];

for (i = 0; i < CARD_MAX; i++){

(a) = i%13 + 1; (b) = i/13; }

(4)

問題 24. 5 人の学籍番号と点数を入力し、60 点以上の点数を持つ学籍番号の みを画面に表示するプログラムを作成せよ。

#include <stdio.h>

#define NUMBER ( (a) ) typedef struct { int number; /* 学籍番号 */ int score; /* 点数 */ } Student; int main(){ int i; Student s[NUMBER]; for (i = 0; i < (b) ; i++){ scanf("%d %d", (c) ); }

for (i = 0; i < NUMBER; i++){ if ( (d) >= 60){ printf("%d¥n", (e) ); } } return 0; } 問題 25. 名前の文字数を入力し、それを記憶するために必要最小限なメモリを malloc()で確保した後、そのメモリに名前を記録するプログラムを作成せよ。 #include <stdio.h> int main(){ int n; char (a) ; scanf("%d", &n); /* 文字数を入力 */ p = (b) ; /* 文字列の領域を確保 */ scanf( (c) ); /* 文字列の入力 */ return 0; }

(5)

問題 26. キーボードから入力された一行の文字列を s[]に格納し、その長さを 返す関数 getline()を作成せよ。但し、s[]の配列の大きさは limit である。 入力する一列の文字列は改行文字または EOF で終了している。s[]の最後には 改行文字がある場合は改行文字を含むこと。また終端には必ずナル文字を入れ ること。

int getline( char s[], int limit){ int c, i;

for (i=0; i<limit-1 && (c=getchar()) != (a) && c != (b) ; i++){ (c) = c; } if ( c == '¥n'){ s[i] = c; i++; } s[i] = (d) ; return (e) ; }

問題 27. 問題 21 の swap()関数を用いて number 個の要素を持つ int 配列に 入っている数値を小さい順から並べ替える関数 mysort()を作成せよ。 void mysort(int data[], int number){

int i,j; for (j = (a) ; j > 0; j--){ for (i = 0; (b) ; i++){ if (data[i] > data[j]){ swap( (c) ); } } }

(6)

問題 28. 10 人の学籍番号と点数を入力すると画面に学籍番号と点数を点数の 低い順から表示するプログラムを作成せよ。(教科書 p.308-321 旧 268-283) #include <stdio.h> typedef struct{ int number; int score; } Student;

void swap( (a) , (b) ){ Student temp = *a;

*a = *b; *b = temp; }

void sort( (c) , int limit){ int i, j;

for (i = 0; i < limit - 1; i++){

for (j = 1; j <= limit - 1; j++){ if (a[j-1].score > a[j].score){ swap( (d) , (e) ); } } } } int main(){ Student s[10]; int i; for (i = 0; i < 10; i++){ scanf("%d %d", (f) , (g) ; } sort( (h) , (i) ); for (i = 0; i < 10; i++){

printf("%d %d¥n", s[i].number, s[i].score); }

return 0; }

(7)

問題 29. int 型のデータを保持するリスト構造を実現する構造体 List を作成 せよ。

typedef struct List_tag{

int data; /* データ */

(a) *next; /* 次の List 構造体へのポインタ */ }List; 問題 30. Point 構造体を引数として渡すと、キーボードから入力した二つの数 値を x 座標、y 座標としてセットする関数を作成せよ。 typedef struct { double x; double y; } Point; void setPoint(Point *p){ scanf("%lf %lf", (a) , (b) ); } 問題 31. 長方形(Rect)構造体の縦と横の長さを mlt 倍する関数 resize()を 作成せよ。 typedef struct { double x; /* 左上の x 座標 */ double y; /* 左上の y 座標 */ double w; /* 横幅 */ double h; /* 縦幅 */ }Rect;

void resize(Rect *r, double mlt){ (a) *= mlt;

(b) *= mlt; }

(8)

問題 32. 関数 strcmp(const char*s1, const char *s2)は文字列 s1 と文字列 s2 が一致していれば 0 を,違う場合は 0 以外を返す関数である。 strcmp()を用いて、キーボードから入力したパスワードが"mypasswd"なら 「正しい」と表示するプログラムを作成せよ。

int main(){

char pass[] = "mypasswd"; char in[100]; scanf("%s", (a) ); if (strcmp( (b) ) == 0){ printf("正しい¥n"); } return 0; } 問題 33. 問題 29 の List 構造体を用いて、任意の回数だけ数字を入力したあ と、入力した順に数字を表示するプログラムを作成せよ。 #include <stdio.h> #include <stdlib.h> void add(List *top){

List *p;

if (top == NULL){

top = malloc( (a) ); top->next = (b) ; printf("番号を入力してください >"); scanf("%d", &top->data );

return; }

for (p = top; p->next != NULL; p = p->next){ ;

}

p->next = malloc( (a)と同じ ); p->next->next = (b)と同じ ; printf("番号を入力してください >"); scanf("%d", (c) ); }

(9)

(問題 33 のつづき)

void printlist(List *top){ List *p;

printf("入力した番号を順に表示します¥n"); for (p = top; p != NULL; p = p->next){

printf("%d¥n", (d) ); }

}

int main(void){ int flag = 1; List *top = NULL; int command; while (flag){ printf("入力なら1を、終了なら0を入力してください>"); scanf("%d", &command); switch (command) { case 1: add(top); break; case 0: flag = (e) ; break; default: fprintf(stderr,"入力番号エラー¥n"); } printlist(top); } return EXIT_SUCCESS; }

(10)

問題 34. 問題 33 を拡張して任意の回数だけ数字を入力したあと、入力した番 号が存在すればその順番を表示する search()関数を作成せよ。

void search(List *top){ List *p; int key; printf("検索したい番号を入力してください¥n"); scanf("%d",&key); for ( (a) ){ if ( (b) ){ printf("存在します¥n"); return; } } printf("みつかりませんでした¥n"); } int main(void){ int flag = 1; List *top = NULL; int command; while (flag){ printf("入力なら1を、全部表示なら2を¥n"); printf("検索なら3を、終了なら0を入力してください>"); scanf("%d", &command); switch (command) { case 1: add(top); break; case 2: printlist(top); break; case 3: search(top); break; (次のページにつづく)

(11)

(問題34のつづき) case 0: flag = 問題33(e)と同じ ; break; default: fprintf(stderr,"入力番号エラー¥n"); } printlist(top); } return EXIT_SUCCESS; }

(12)

問題 35. 問題 34 を拡張して入力した番号と一致するデータがあれば削除する delete()関数を作成せよ。

void delete(List *top){ List *temp; List *p; int key; printf("削除したい番号を入力してください¥n"); scanf("%d",&key); if(*top == NULL){ printf("データはありません¥n); return; } if (top->data == key){ temp = (a) ; (a) = (b) ; free( (c) ); return; }

for ( p = top; p->next != NULL ;p = p->next){ if (p->next->data == key){ temp = (d) ; (d) = (e) ; free( (f) ); return; } } printf("入力した番号はみつかりませんでした¥n"); }

(13)

最終アンケート(プログラミング方法論 II 第 14 回) 15 回は本日と同様に演習を行ないます。

1. 本講義「プログラミング方法論 II」について、総合的な感想、悪かった点(特に来年度は是 非改善すべき点)、良かった点(特に来年も続けるべきだと考えられる点)、について率直な意見を お願いします。

参照

関連したドキュメント

分に図れず妥当でないと解する︒また︑様々な問題点を放置

うことが出来ると思う。それは解釈問題は,文の前後の文脈から判浙して何んとか解決出 来るが,

ロボットは「心」を持つことができるのか 、 という問いに対する柴 しば 田 た 先生の考え方を

 介護問題研究は、介護者の負担軽減を目的とし、負担 に影響する要因やストレスを追究するが、普遍的結論を

被祝賀者エーラーはへその箸『違法行為における客観的目的要素』二九五九年)において主観的正当化要素の問題をも論じ、その内容についての有益な熟考を含んでいる。もっとも、彼の議論はシュペンデルに近

強者と弱者として階級化されるジェンダーと民族問題について論じた。明治20年代の日本はアジア

する議論を欠落させたことで生じた問題をいくつか挙げて

当該不開示について株主の救済手段は差止請求のみにより、効力発生後は無 効の訴えを提起できないとするのは問題があるのではないか