プログラミング関数の問題について

このQ&Aのポイント
  • double型の数値を引数にして呼び出されたら、それまでに渡された数値の最大値を返す関数を完成させる問題です。
  • 知り合いの説明によると、関数の内部で受け取った引数とそれまでの最大値を比較し、より大きい方を新たな最大値として更新しているようです。
  • もし違っていた場合は、正しい答えを教えてください。プログラミング初心者のため、理解が難しいです。
回答を見る
  • ベストアンサー

プログラミング 関数の問題について

どうもお世話になってます。プログラミングの問題ですが問題を見てもよく分らないので答えを教えてください。 double型の数値を引数にして呼び出されたら、それまでに渡された数値の最大値を返す関数 double maxd(double)を完成しなさい。 (1)maxd((2) x) {(3) int i=0; (4)double max; if((5)){ (6); (7); }else if((8))(9); return((10)); } 知り合いに聞いてみたところ (1)double(2)double(3)static(4)static(5)i=0(7)max = x(8)max < x(9)max = x(10)max と言われて説明してもらったのですが、説明してもらってもよく分りませんでした・・・。(そもそもプログラミング分かってないのですが・・・。) 答えだけ聞くのは本末転倒なのですが、上の答えで合っているのでしょうか?もし違っていたら申し訳ないですが正しい答えを教えてください。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

ん~ ここで質問するより その知り合いに納得のいくまで説明してもらったほうが良いように思いますが ・・・ 1) 関数の戻り値を表すデータ型なので double 2) 関数の引数のデータ型なので double 3) 何回関数が呼ばれたかのフラグ ローカル変数なのでstatic宣言をしないと関数から戻ると破棄(破壊)されてしまうため 4) 現在の最大値 ローカル変数なので 3)と同じ理由で static 5) 初回呼び出しかどうかの判定 i==0 ・・・ ここが違います 比較なので == とします = だけですと代入になってしまいます 6) 最大値を初期化 max = x; 7) フラグを更新 i = 1; 8) 現在の最大値と引数の比較 max < x 9) 引数が現在の最大値より大きい場合だから max = x; 10) 最大値を返せば良いので max といった具合ですが ・・・

shakaijin
質問者

お礼

(5)は==でしたね・・・。 一応知り合いに聞き直してみて多分分かったと思います。 どうもありがとうございました。

関連するQ&A

  • javaプログラミングの質問です。

    プログラムで数値の奇遇、合計値、最大値までは出せたのですが平均値の出し方がわかりません。 どこに何を入れればいいかを教えてください。お願いします。 public class pazu{ public static void main(String[] args){ int sum =0,saidai; System.out.println("コマンドラインパラメータは"+args.length+"個です"); for(int i=0;i<args.length;i++){ int x=Integer.parseInt(args[i]); if(pazu.is_even(x)) System.out.println(args[i]+"は偶数です"); else System.out.println(args[i]+"は奇数です"); sum+=x; } saidai=pazu.max(args); System.out.println("合計:"+sum); System.out.println("最大:"+saidai); } static boolean is_even(int number){ return number%2==0; } static int max(String[] number){ int max =0; for(int i=0;i<number.length;i++){ if(max<Integer.parseInt(number[i])){ max=Integer.parseInt(number[i]); } } return max; } }

    • ベストアンサー
    • Java
  • C言語のプログラミングについて教えてください

    課題で下記に示すのようなデータをファイル名を入力してのそのデータを読み込みyの最大値とそのときのxの値を表示するプログラムを作成しろと言われたのですが、僕はプログラミングが初心者でむしろ苦手でホント困ってます。だれか助けてください、お願いします! データ    x  y 0.12132 3.45355 0.12353  3.415451 . . . . . . のようにxとyの行列となっていて、その数は2000個を超えています。 自分なりにやってみたのですがデータをすべて読み込まないし、まずどのようにして、yの最大値をだし、なおかつそのxの値を表示させるのもわかんなくてホント困っています。 本末転倒になりますが、プログラムを書いていただけるとほんと助かります。よろしくお願いいたします。 ちなみにこれが自分で考えたプログラムです。とりあえず、yの値がでかいのでyの最大値だけだすつもりでやってみたけど駄目でした。 #include <stdio.h> #include <stdlib.h> int main(void) { FILE *fin; char *list[256]; char buf[1024]; char filename1[80]; printf("入力ファイル名"); gets(filename1); fin=fopen(filename1,"r"); if (fin ==NULL) { printf("%sをオープンできません\n",filename1); exit(1); } while (fgets(buf, 1024, fin) !=NULL) { printf("%s",buf); } static float max; int x; fscanf(fin,"%f",&x); if(x>max){ max=x; printf("yの最大値=%f\n",max); } fclose(fin); }

  • プログラミングの課題です、助けてください。

    C言語のプログラミングの課題で、「以下のプログラムで、引数としてスコア(100等の数字)を与えると、そのスコア以上のエントリだけを検索して、出力するように変更する」という問題なのですが、プログラミングが苦手な私にはさっぱりわからず、大変困っています。設問のプログラミングがわかる方がいらっしゃいましたら、教えていただけると大変助かります。よろしくお願いします。 #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX_LEN 256 int main(int argc, char *argv[]) { FILE *rfp; FILE *wfp; int i, score; double evalue; char id[MAX_LEN], name[MAX_LEN], fname[MAX_LEN]; char keyword[] = "glu"; for(i = 0; i < 100; i++){ sprintf(fname,"files/%d.txt",i); if((rfp = fopen(fname, "r")) == NULL) { printf("入力ファイルが存在しません。\n"); return (EXIT_FAILURE); } while (fscanf(rfp,"%s\t%s\t%d\t%f", id, name, &score, &evalue) != EOF){ if (strstr(name,keyword) != NULL){ printf("%s\n",id); } } fclose(rfp); } return (EXIT_SUCCESS); }

  • プログラミングは初心者なため、doubleについての問題がまったく分か

    プログラミングは初心者なため、doubleについての問題がまったく分かりません・・・。できるだけ初心者にも分かりやすく簡単に回答していただけると幸いです。 1、double型の変数で扱える桁数を超えた桁数の数値を、double型の変数に入れると、制限を超えた桁数の部分がどのように扱われるか答えよ。 2、なぜ上記の1、ようにdoubleに制限があるかについて理由を答えよ。 回答お願いします!!

  • javaのコマンドライン引数について

    このプログラムをベースにして、配列をコマンドライン引数で渡せるようにしたいのですが、どうすれば良いのでしょうか。教えてください。 public class Test { public static void main(String[] args){ int[] numbers = {14,8,1,5,0,2,2,5,8,50}; System.out.print("配列中の最大値:"+maxNumber(numbers)); } static int maxNumber(int[] numbers){ int max = 0; for(int i=0; i<numbers.length;i++){ if(max < numbers[i]){ max = numbers[i]; } } return max; } }

    • ベストアンサー
    • Java
  • C++に関する質問です

    #include <stdio.h> double calave (double [ ] ); double calmax (double [ ] ); main () { int i; double average,maximum; double a[5]; for ( i=0;i<=4;i++) { printf ("Input data %d\n", i ); scanf ("%lf",&a [i] ); } average = calave (a); maximum = calmax (a); printf ("Average = %lf\n", average); printf (" Maximum = %lf\n", maximum); } double calave (double x [5]) { int i; double ave; ave = 0; for (i=0; i<=4; i++) { ave = ave + x[i]; } ave = ave /5.0; return (ave); } double calmax (double x[5]) { int i; double max; max = x[0]; for ( i=0; i<=4; i++) { if ( max >= x [i] ){ max = max; }else{ max = x[i]; } } return (max); } 上のプログラムでは,関数calaveに入力している配列変数はa[ ]だが,関数calave内で使用している配列変数はx[ ]であり,名前が違う変数である。これが,プログラム上は問題ない理由を教えてください。 よろしくお願いします。

  • プログラミングのことで困っています。助けて下さい。

    プログラミングの問題がどうしても分からず、本当に困っています。 ・2x+y+3z=13 ・x+3y+2z=13 ・3x+2y+z=10 (解:x=1,y=2,z=3) を掃き出し法で解くプログラミングの問題で、次の(1)~(5)が何が当てはまるかどうしても分からないんです。 #include <stdio.h> #define N 3 /*未知数の個数*/ int main(void) { int i,j,k; double pivot,del; double a[N][n+1]={{2,1,3,13},{1,3,2,13},{3,2,1,10}}; /*係数行列*/ for(i=0;i<N;i++) { (1)____ /*ピボット係数*/ for(j=0;j<N+1;j++) /*ピボット行をピボットで割る*/ (2)____ for(k=0;k<N;k++) /*ピボット列の掃き出し*/ { if((3)____) { del=a[k][i]; for(j=i;j<N+1;j++) (4)____ } } } for(i=0;i<N;i++) (5)____ /*計算結果の表示*/ return 0; } 実行結果は x0=1.00 x1=2.00 x2=3.00 と表示させたいのですが、(1)~(5)の所がどうしても分からず、困っています。どなたか助けて下さい。お願いします。

  • あるプログラミングでdoubleの箱が

    こんにちは、 とあるプログラミングでdoubleの箱が突然2つでてきて混乱しています。 //読み込んだ実数値は10で割りきれるか #include <cmath> #include <iostream> Using namespace std; Int main() { Double x; Cout <<"実数値: "; cin >> x; If (double m = fmod(x, 10)) { Cout<<"その値は10で割りきれません。\n"; Cout<<"剰余は"<< m << d"です。"\n"; } else{ Cout"その値は10で割りきれます" \n"; } } とあり、なぜ突然double mがでてきたのでしょうか? すみません m(__)m

  • Excelの関数

    MAX関数の答えに該当するセルの列番地を別の関数の引数の一部に使いたいのですが、どのようにすればいいですか? 例えばMAX(A1:G10)とあってその答えがC5だとします。 別のセルで=C10を入れるのですが、そのCはMAX関数の答えのCをひっぱってくるようにしたいのです。 宜しくお願いします。

  • 関数の作り方について

    今、4次元正方行列Lの1ノルムを求めるプログラムを作っています。 1ノルムを求めること自体は、各列の総和を取って最大値を求めるプログラムを作るだけなのでこれで合ってると思うのですが、複数の行列のノルムを求めるとき #include<stdio.h> int main() { int i,j,k; double l[4][4],u[4][4];/*L,Uは既知の上下三角行列とする*/ double lnorm,unorm,bnorm,max; /*L,Uそれぞれのノルムを求める。*/ norm=0; max=0; for(i=0;i++;i<4)/*Lの1ノルムを求める*/ { for(j=0;j++;j<4) { norm = norm + l[i][j]; } if(norm >= max){ max=norm; } norm=lnorm; } for(i=0;i++;i<4)/*Uのノルムを求める*/ { for(j=0;j++;j<4) { norm = norm + u[i][j]; } if(norm >= max){ max=norm; } norm=unorm; } bnorm=0; のようにLとUで同じ内容のfor文を2回使ってやってるんですが 代入値が行列の場合でも関数を使ってうまくできるやり方はありませんか?

専門家に質問してみよう