• 締切済み

物体が落ちるまで

初速度v、打ち上げ角度rでうち上がってから落ちてくるまでの 物体の位置を表示するというものなのですが とりあえず n秒後の物体の高さをhとしたときhを出す関数を 作って見たのですがうまくできません。見てもらえないでしょうか。 #include <stdio.h> #include <math.h> void input(double *v, double *r, double *n); void solve(double v, double r, double n); int main(void) { double v, r, n; input(&v, &r, &n); solve(v, r, n); return 0; } void input(double *v, double *r, double *n) { puts("物体を打ち上げ角r、初速度vで打ち上げた時、n秒後の高さhを求めます。"); puts("初期値v, r, nを入力してください"); printf("v="), scanf("%lf", v); printf("r="), scanf("%lf", r); printf("n="), scanf("%lf", n); putchar('\n'); } void solve(double v, double r, double n) { double w = sin(r); printf("sin r は = %f です。\n",w);<ーーーここでsin r がうまく求まりません。 printf("したがって求めたいn秒後の物体の高さhは、\n"); double h = v * w * n - 5 * n * n; printf("h=%f\n",h); } です。重力加速度は10としています。 あと、できればこのhを以下のように表示する方法も教えて下さい。 |* | * | * | * |* お願いします。

みんなの回答

  • Interest
  • ベストアンサー率31% (207/659)
回答No.3

そうですね、C言語の三角関数は引数がラジアンなんですよね。 ラジアンをお手軽に使うためのマクロを紹介します。 #ifndef M_PI #define M_PI 3.14159265358979323846 #endif #define rad2deg(a)   ( (a) / M_PI * 180.0 ) #define deg2rad(a)  ( (a) / 180.0 * M_PI ) 使い方は、 double w = sin(deg2rad(r)); とすれば、rが360度で表現されていてもラジアンに直してsinに入れることができます。

noname#43437
noname#43437
回答No.2

半角文字のπはないです。 C言語で使うなら、 3.14159265と直に書いてもいいし、 math.h の中で、M_PI として定義されているのを使ってもよいです。

noname#43437
noname#43437
回答No.1

rをラジアン(360°=2πラジアン)単位で入力すれば 大丈夫だと思いますが? sinやcosなど三角関数の引数はラジアン、です。

santye
質問者

お礼

ラジアン表示だったのですね。ありがとうございます。 ラジアンでということは 2/3π <ーーすみませんπの表示は半角でどうやればいいのしょうか。

関連するQ&A

  • プログラミング 実数 合計

    3つの実数を読み込んで合計を表示するというプログラムなんですが、プログラムをコンパイルして3つの実数を入力してくださいと表示させて実数1に1.5、実数2に0.8、実数3に1.0, 合計は3.3です表示させたいのですが #include <stdio.h> int main(void) { double n1,n2,n3; puts("3つの実数を入力してください。"); printf("実数:"); scanf("%lf", &n1); printf("実数:"); scanf("%lf", &n2); printf("実数:"); scanf("%lf", &n3); printf("合計は%5.lfです。\n",(double)(n1 + n2 + n3)); return (0); } でコンパイルしようとすると1つしか実数を入力する所が出てこなくて 数字を入れると合計は.lfですと出てきて実行できないのですが、上のソースのどこか間違ってる所があったら教えてくれませんか?

  • 二次関数で

    任意の二次方程式(ax^2+bx+c=0)を解くプログラムを作るのですが、以下の条件を満たした方法で作るというものです。 1、関数の引数は、3つの係数と、解の入る変数二つとする。 (計5つの引数をとる。) いずれかの引数がアドレス渡し(ポインタ)になる。 2、解は関数呼出の時に指定した2つの変数にそれぞれ代入されること。 3、解の表示は関数側ではなく呼出側で行うこと。 4、グローバル変数は使用しない。 一応作ってみたのですがコンパイルすらできません。 初心者なので全くわかりません教えてください。 #include<stdio.h> #include<math.h> void solve(double *x, double *y); int main(void) { double x,y; solve(&x,&y); return 0; printf("x=%f\n", x); printf("y=%f\n", y); } void solve(double *x, double *y) { doble a,b,c; puts("二次方程式 a*x^2+b*x+c=0 を解きます"); puts("係数a, b, cを入力してください"); printf("a="), scanf("%lf", a); printf("b="), scanf("%lf", b); printf("c="), scanf("%lf", c); putchar('\n'); double d = b * b - 4 * a * c; if(d >= 0){ x = (-b + sqrt(d)) / (2 * a); y = (-b - sqrt(d)) / (2 * a); } else puts("虚数解"); }

  • プログラミング 実数 合計値

    プログラミング 実数 合計値 3つの実数を読み込んで合計を表示するというプログラムのソースについてなんですが #include <stdio.h> int main(void) { double na, nb, nc; puts("3つの実数を入力してください。"); printf("実数:"); scanf("%5.lf", &na); printf("実数:"); scanf("%5.lf", &nb); printf("実数:"); scanf("%5.lf", &nc); printf("合計は%5.lfです。\n", (double)(na + nb + nc); return (0); } でコンパイルしてみたんですが、構文エラーでreturnの前の行で')'が';'の前にありません というのが出てきてコンパイルできないのですが、これはどこが間違ってるんでしょうか?

  • x^2+2x+1=0

    x^2+2x+1=0をとく関数プログラムです。 うまくできません。どこが間違っているのでしょうか。 教えて下さい。 #include<stdio.h> #include<math.h> void input_keisuu(double a,double b,double c); void solve(double a,double b,double c); int main(void) { double a,b,c; input_keisuu(a,b,c); solve(a,b,c); return 0; } void input_keisuu(double a,double b,double c) { puts("二次関数a*x^2+b*x+c=0を解きます。"); a=1; b=2; c=1; puts("a=1"); puts("b=2"); puts("c=1"); } void solve(double a,double b,double c) { double d; double x; d=b*b-4*a*c; printf("判別式d= %f\n",d); x=(-b+ sqrt(d))/(2*a); printf("二つの解のうち大きい方はx=%f\n",x); }

  • C++でのプログラムについての質問です

    このような二次関数の解を求めるプログラムを作成したのですが、自作関数solveをvoid solve(double, double, double)のように変更し同じ動作をするように変更したいです どのようにへんこうすればよいでしょうか #include<stdio.h> #include<stdlib.h> #include<math.h> int main(void) { double a, b, c; /*二次方程式の定数*/ double D, x1, x2, r1, r2; printf("ax^2 + bx + c = 0 の係数 a, b, c を入力してください---> \n"); scanf_s("%lf %lf %lf", &a, &b, &c); printf("2次方程式を解いた結果は次の通りとなる。\n"); if (a == 0.0) { if (b == 0.0) { printf("係数がおかしい\n"); exit(-1); } { x1 = -c / b; printf("解は%f です。\n", x1); exit(0); } } else { D = b * b - 4 * a * c; if (D >= 0) { x1 = (-b + sqrt(D)) / (2.0 * a); x2 = (-b - sqrt(D)) / (2.0 * a); if (D == 0.0) { printf("解は %f です。\n", x1); } else { printf("解は %f と %f です。¥n", x1, x2); } } else { r1 = -b / (2 * a); r2 = sqrt(-D) / (2 * a); printf("解は%.2f+%.2fi と%.2f-%.2fi \n", r1, r2, r1, r2); } } return 0; }

  • プログラミングC言語

    プログラミングC言語の問題で、 「ベクトルの内積を用いて、2つのベクトルの成す角度を求めるプログラムを作成せよ。」 という問題をやっていて、以下の画像のような答えになるのですが、上手くいきません。 どのようにすればいいのでしょうか? 作ったソースコード #include<stdio.h> #include<math.h> double naiseki(int *vecterA, int *vecterB) { double rad, deg; rad = acos( (vecterA[0]*vecterB[0] + vecterA[1]*vecterB[1]) / ( sqrt((double)(vecterA[0]*vecterA[0] + vecterA[1]*vecterA[1])) * sqrt((double)(vecterB[0]*vecterB[0] + vecterB[1]*vecterB[1])) ) ); deg = rad/3.141592*180; return deg; } int main(void) { double va[2]; double vb[2]; printf("v1_x:"); scanf("%lf", &va[0]); printf("v1_y:"); scanf("%lf", &va[1]); printf("v2_x:"); scanf("%lf", &vb[0]); printf("v2_y:"); scanf("%lf", &vb[1]); puts("内積から求めたベクトルの角度は"); printf("%f",naiseki(va,vb)); puts("です。"); return(0); } 最後のnaiseki(va,vb)のところで互換性がありませんと でてしまいます。 double naiseki のソースコードはこのままでプログラムが 動くようにしてほしいです。 よろしくお願いします!

  • CからVB

    以下のプログラムはC言語で作成されています。 これをVBで作成したいです。 教えてください。 #include <stdio.h> #include <stdlib.h> double *alloc(int r,int n,int m); void input(double *p,int r,int n,int m); void sumup(double *p,int r,int n,int m); int main(void){ int r, n, m; double *p; // 行列サイズ入力 printf("input r n m "); scanf("%d %d %d",&r,&n,&m); // 行列領域取得 p = alloc(r,n,m); // 行列要素入力 input(p,r,n,m); // 行列の和 sumup(p,r,n,m); //終了,行列領域解放 free(p); return 0; } double *alloc(int r,int n,int m){ double *p; printf("MATRIX[r=%d][n=%d][m=%d]\n\n",r,n,m); p = (double*)malloc(sizeof(double)*r*n*m); if( p == NULL){ printf("error! malloc failed.\n"); exit(-1); } return p; } void input(double *p,int r, int n,int m) { int i,j,k; for(i = 0; i < r; i++){ for(j = 0;j < n; j++){ for(k = 0; k < m; k++){ printf("input MATRIX[%d][%d][%d]= ",i,j,k); scanf("%lf",&p[i*(n*m)+j*m+k]); } } } printf("\n"); } // 行列の和 void sumup(double *p,int r,int n,int m){ int i, j, k; // 0.0, not 0!!! double sum = 0.0; printf("sum of %d matrices:\n",r); for(j = 0; j< n; j++){ for(k = 0;k < m; k++){ sum=0; for(i = 0;i < r;i++){ sum += p[i*(n*m)+j*m+k]; } printf("\n%2f",sum); } } printf("\n"); }

  • 初めてのC言語 

    半径rで円周をだすプログラムを作りたいのですが作ってみたところ答えが0.00しかでてきません。 どこが間違っているのでしょうか。 #include <stdio.h> #define PI 3.14159265358979 /* 円周率 */ int main(void) { double r,a; printf("r="); scanf("%lf",&r); a=r*2*PI; printf("r*2*PI=%5.2lf\n",a); return 0; }

  • 【C初心者】+,-,*./について【電卓】

    【C初心者】+,-,*./について【電卓】 次のようなプログラミングを作りました。 きちんと実行できるのですが見ての通りややこしいプログラムになってます #include <stdio.h> int main(void) { int ope; double n2,n3; printf("整数1:"); scanf("%lf",&n2); puts("ADD=0,SUB=1,MUL=2,DIV=3");scanf("%d",&ope); printf("整数2:"); scanf("%lf",&n3); switch (ope) { case 0 : printf("計算すると%fになります.?n",n2+n3); break; case 1 : printf("計算すると%fになります.?n",n2-n3); break; case 2 : printf("計算すると%fになります.?n",n2*n3); break; case 3 : printf("計算すると%fになります.?n",n2/n3); break; default: printf("計算出来ません.?n"); break; } return (0); } printf文をcaseの中で5回も使っています 私としては(以下適当です、すいません) case 0 : sign= + ;break; case 1 : sign= - ・ ・ ・ default : 計算できません error=1 ;break; if (error != 0) printf("計算すると%fになります.?n",n2 sign n3); みたいな感じを想像しているのですが signはintとかcharのどれにしたらよくて signに"+"をいれて計算させるにはどうしたらいいんでしょう

  • 極座標から直交座標に変換

    極座標を直交座標に変換するプログラムです。 ptor関数を使って作成するのですが、上手く実行できません。 度からradに変換の仕方も良く分かりません。 どこが間違っているのか教えてください。 #include <stdio.h> #include <math.h> #define PI 3.14159265358979323846 struct rect{ double x; double y; }; struct pole{ double r; double theta; }; double po2(double *x, double *y, double r, double theta ) { double rad; rad = theta ; x = r * cos(rad); y = r * sin(rad); } int main(void) { double x, y; double r, theta; printf("r = "); scanf("%lf",&r); printf("theta = "); scanf("%lf",&theta); printf("(r:%f, theta:%f) => (x:%f, y:%f)\n", r, theta, x, y); return(0); }

専門家に質問してみよう