第5回 †本日のお題 †
演習問題 †演習問題解答例 †.hファイル †#include <stdio.h> #include <math.h> #include <string.h> #include <ctype.h> #include <conio.h> #define NUM 50 #define sqr(n) ((n)*(n)) typedef struct{ double fuel; int x; int y; } car; .cppファイル †#include "std.h" //ヘッダーのインクルード car a = {0,0,0}; //初期化 double efy; //リッター当たりの走行量 puts("燃料の量と、リッター当たりの走行量を決めてください。"); printf("燃料の量:"); scanf("%lf",&a.fuel); printf("走行量:"); scanf("%lf",&efy); while(1) { char slt[NUM]; char y[] = "yes"; char n[] = "no"; int dx,dy,i = 0; inform(a); printf("移動しますか?移動するならYesを、しないならNoを入力してください。\n"); scanf("%s",slt); while(slt[i] != '\0') //小文字に変換する { slt[i] = tolower(slt[i]); i++; } if(strncmp(slt , n , 2) == 0) //yesならmove関数、noなら終了、それ以外なら続ける break; else if (strncmp(slt , y , 3) == 0) { printf("X方向の移動距離:"); scanf("%d",&dx); printf("Y方向の移動距離:"); scanf("%d",&dy); if(move(&a, dx, dy,efy) != 1) //1が返ってこなければ移動失敗。 { printf("移動できませんでした。\n"); break; } } else printf("入力が正しくありません。\n"); } _getch(); return 0; } printf("現在位置:(%d,%d)\n",a.x,a.y); printf("燃料残量:%.2fリットル\n",a.fuel); } double dis = sqrt((double)sqr(dx) +(double)sqr(dy)); //まず移動距離を算出 if(dis > a->fuel*efy) //もし燃料不足なら return 0; //0を返す a->x += dx; //それ以外なら、各々の成分に加え、 a->y += dy; a->fuel -= dis/efy; return 1; //1を返す } 戯言 †多分半数以上がわからなかったであろう、演習問題の模範解答。 |