2012年3月18日日曜日

開発環境

『実践プログラミング 第3版』 (Steve Oualline (著)、 望月 康司 (監修) (翻訳)、 谷口 功 (翻訳)、 オライリー・ジャパン、1998年、ISBN978-4900900646)の5章(配列、修飾子および数値の使用)5.5(数値の読み込み)設問5-2を解いてみる。

5-2.

widthのコメントが*/で閉じられてないから変数widthが宣言されていることを認識できない。

以下に修正したコード

コード(TextWrangler)

#include <stdio.h>
char line[100];/* 入力データの行 */
int height;    /* 三角形の高さ */
int width;     /* 三角形の底辺 */
int area;      /* (算出された) 三角形の面積 */
int main(){
 printf("Enter width height? ");
 fgets(line, sizeof(line),stdin);
 sscanf(line, "%d %d", &width, &height);
 area = (width * height) / 2;
 printf("The area is %d\n", area);
 return (0);
}

入出力結果(Terminal)

$ cc -g -o c_program c_program.c
$ ./c_program
Enter width height? 10 20
The area is 100
$ ./c_program
Enter width height? 5 5
The area is 12
$

変数widthが宣言されてることは認識できるようになったけど、高さ、底辺ともに奇数の時に三角形の面積がおかしなことになる(原因は割る2の箇所で整数になる)ので整数(%d変換)ではなく浮動小数点数(%f変換)に修正。

コード(TextWrangler)

#include <stdio.h>
char line[100];/* 入力データの行 */
float height;    /* 三角形の高さ */
float width;     /* 三角形の底辺 */
float area;      /* (算出された) 三角形の面積 */
int main(){
 printf("Enter width height? ");
 fgets(line, sizeof(line),stdin);
 sscanf(line, "%f %f", &width, &height);
 area = (width * height) / 2.0;
 printf("The area is %f\n", area);
 return (0);
}

入出力結果(Terminal)

$ ./c_program
Enter width height? 10 20
The area is 100.000000
kamimuras-MacBook-Pro:c kamimura$ ./c_program
Enter width height? 5 10
The area is 25.000000
kamimuras-MacBook-Pro:c kamimura$ ./c_program
Enter width height? 5 5
The area is 12.500000
$

0 コメント:

コメントを投稿