07年度-第5回基本C言語講座
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[07年度-C言語講座]]
*第5回 [#a3613f78]
**本日のお題 [#ecdb2199]
--構造体
--自作ヘッダー
--文字列の取扱い
**演習問題 [#a71675b9]
**演習問題解答例 [#qf7afd51]
***.hファイル [#i19dab29]
#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ファイル [#a4cd8672]
#include "std.h" //ヘッダーのインクルード~
void inform(car a); //現在位置及び燃料表示用関数~
int move(car *a, int dx, int dy,double efy); //移動処理関数~
int main()
{
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;
}~
/*現在位置及び燃料表示用関数*/~
void inform(car a)~
{
printf("現在位置:(%d,%d)\n",a.x,a.y);
printf("燃料残量:%.2fリットル\n",a.fuel);
}~
/*移動処理用関数*/~
int move(car *a,int dx,int dy,double efy)~
{
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を返す
}
**戯言 [#i16f3999]
多分半数以上がわからなかったであろう、演習問題の模範解答。~
何をやっているのかはコメントを見ればすぐに理解できるので、~
できなかった人はしっかり見て理解しておいてください。~
終了行:
[[07年度-C言語講座]]
*第5回 [#a3613f78]
**本日のお題 [#ecdb2199]
--構造体
--自作ヘッダー
--文字列の取扱い
**演習問題 [#a71675b9]
**演習問題解答例 [#qf7afd51]
***.hファイル [#i19dab29]
#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ファイル [#a4cd8672]
#include "std.h" //ヘッダーのインクルード~
void inform(car a); //現在位置及び燃料表示用関数~
int move(car *a, int dx, int dy,double efy); //移動処理関数~
int main()
{
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;
}~
/*現在位置及び燃料表示用関数*/~
void inform(car a)~
{
printf("現在位置:(%d,%d)\n",a.x,a.y);
printf("燃料残量:%.2fリットル\n",a.fuel);
}~
/*移動処理用関数*/~
int move(car *a,int dx,int dy,double efy)~
{
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を返す
}
**戯言 [#i16f3999]
多分半数以上がわからなかったであろう、演習問題の模範解答。~
何をやっているのかはコメントを見ればすぐに理解できるので、~
できなかった人はしっかり見て理解しておいてください。~
ページ名: