[緊急]bcc developerについての質問です。

このQ&Aのポイント
  • 学生数と平均点が0になってしまう問題について、修正方法を教えてください。
  • bcc developerに関する緊急な質問です。学生数と平均点が0になってしまう問題が発生しています。
  • 質問:[緊急]bcc developerについての問題が発生しています。学生数と平均点が0になってしまう原因と対処方法を教えてください。
回答を見る
  • ベストアンサー

[緊急]bcc developerについての質問です。

[緊急]bcc developerについての質問です。 これにどう修正を加えればいいか教えてください。学生数と平均点が0になってしまうんです。 #include<stdio.h> main() {float data[100],x,w; int a,b,e; a=1; b=1; printf("学籍番号="); while(scanf("%d",&data[a])!=EOF) {a=a+1; printf("得点="); scanf("%d",&point[b]); b=b+1; printf("学籍番号=");} x=point[a]; w=data[b]/point[a]; printf("学生数=%d\n平均点=%f\n",x,w); }

noname#132897
noname#132897

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

> while(scanf("%d",&data[a])!=EOF) > scanf("%d",&point[b]); scanf系の変換指定子と、変数の型はちゃんと合せてください。 %dだと、実際に対応する引数がint型へのポインタでなくても、int型のポインタだと解釈して、int型の内部形式でメモリに書き込まれます。 なにがどの型かは、マニュアルを良く読んでください。 >printf("学生数=%d\n平均点=%f\n",x,w); の 書式も同様。 でも、結果が0になる本質は..... > w=data[b]/point[a]; aとbの値を追っていきましょう printf("学籍番号="); while(scanf("%d",&data[a])!=EOF) /*ループ1回目 a=1,b=1 : 入力→ data[a]=data[1] */ {a=a+1; /* a=2,b=1 */ printf("得点="); scanf("%d",&point[b]); /* a=1,b=1 : 入力→ point[a]=point[1] */ b=b+1; /* a=2,b=2 */ printf("学籍番号=");} x=point[a]; /* a=2→ x=point[2] ..,point[2]にはまだ入力されていない */ w=data[b]/point[a]; /* a=2,b=2 → w=data[2]/point[2] ... data[2],point[2]にはまだ入力されていない */ printf("学生数=%d\n平均点=%f\n",x,w); /* ループ2回目へ */ } なにがおかしいか、わかりましたか? 他には ・point[]の宣言が見当りませんが? ・配列の添字を1から始めているのは、なんかの意図があってのこと? ・エラーチェックは無しでいいのね? : scanf("%d",&point[b]);が成功したか、 w=data[b]/point[a];が0での割り算にならない保証、data[],point[]の添字の限界を越えない保証等。

その他の回答 (3)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.4

よくよく見れば、printfのメッセージ通りの入力なら 学生数=[得点] 平均点=[学籍番号]÷[得点] になってる。これでは、#3の分直しても、計算方法自体に問題があるからだめだわ。 平均の求めかたも、もう一度よく確認してください。それこそ、数学の教科書でも引っ張り出して。

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

そのソースでは、pointという変数を定義していないため、 コンパイルできません。 「学生数と平均点が0になってしまう」ということは、 少なくとも実行はできているはずですが、 「コンパイルできない」という現象と矛盾しています。 まずは落ち着いて、コンパイルができているソースを載せてください。

noname#115588
noname#115588
回答No.1

突っ込みどころが多すぎて携帯からだと答えづらいですが、、、 まず、x をやめて e に変更。次に「a = 1;」の上にでも w = 0; を追記。さらに「b=b+1;」の上に w = w + point[b]; を追記。最後に「x=…」「w=…」を e = a - 1; w = w / e; に変更。 これでどうだろう?

関連するQ&A

  • C言語プログラムについての質問です。下のプログラムがなぜ降順で出力され

    C言語プログラムについての質問です。下のプログラムがなぜ降順で出力されるのか分かりません。何回も確認したのですが、不等号の向きが昇順になっているのに、どうして降順になるのかが理解できません。 ご教授お願いします。   #include <stdio.h>   #define MAX 10000   int main (int argc, const char * argv[]) { int N,data[MAX],d[MAX],j,k,w,x,a; x=0; a=1; do{printf("学生番号を入力してください\n");    scanf("%d",&N);   if(N!=0){printf("得点を入力してください\n"); scanf("%d",&data[N]);}x++;} while(N!=0);   for(j=0; j<x;j++){ d[j]=data[j];} for(j=0; j<x;j++)      {for(k=0;k<x-j-1;k++){   if(d[k]>d[k+1]){ w=d[k]; d[k]=d[k+1]; d[k+1]=w;}}} printf("昇順での整列結果\n"); for(j=x-1;j>0;j--){ printf("%d位 %d点\n",a,d[j]);a++;} return 0; }

  • プログラムの打ち方でわからないところがあります

    マイクロソフトビジュアルスタジオで  実行結果が 実数:1234 16進数:ffff 8進数:17777 a=1234 b=-1 c=-1と表示させる プログラムを作ろうと思ったのですが #include<stdio.h> void main(void) { int a,b,c; printf("整数:"); scanf("%d" , & a); printf("16進数:"); scanf("%x", &b); printf("8進数:"); scanf("%o", & c); printf("a=%d b=%d c=%d",a,b,c); } このように打つと、 b、c共に65535と表示されてしまいます・・・ どこが間違ってるのか教えていただけないでしょうか? ffff=10進数でマイナスなどの意味は分かるのですが

  • 詳しい方に質問です

    Cを始めて2日目の初心者です。 #include <stdio.h> int main () { int a,b; printf("一つ目の数字を入力"); scanf("%d", &a); printf("二つ目の数字を入力"); scanf("%d" &b); printf("%d - %d = %d\n"a,b,a-b); } このプログラムの間違っているところを教えてください。

  • 配列変数を用いて平均値を求める

    こんにちわ 実は、入力データを使って平均値を求めるプログラムについてなんですけど。 //データの平均値の計算 #include <stdio.h> void main () { int i, k, n, x[100]; double a; while (1) { a = 0; printf("データ数を入力してください..."); scanf("%d",&n); printf("正の実数のデータを入力してください。"); for (i = 0;i < n ;i++) scanf("%d",&x[i]); for (k = 0;k < n;k++) a += x[k]; printf("平均値 %f\n", a/n); } } すいません、インデントがいい加減です。  こうやると普通に平均値を出せますが、最初にデータ数を入力しなければいけません。  私は、データの個数を入力しないで平均値を出したいと思います。どういう風に上のプログラムを変更すればできるのでしょうか?上のプログラムに誤植があるとは思いますが。。。  また、たとえば最後に0以下の数字を入力したらデータ入力を終わらせる...  if(x[i]<=0)break; はどこに入れればいいでしょうか?  たくさんの質問すいません。ご教授よろしくお願いします。

  • scanf関数のプログラムをgetchar関数で

    scanf関数を使って四則演算、論理輪、論理積をint、float、double型で表示するプログラムを作ったのですが これをscanf関数ではなく、getchar関数で組みなおし、関数化する課題が出ました。 そのままscanf関数のところだけを変えても型が違うというエラーが出てうまくいきません。 どうすればいいでしょうか? 一応scanf関数で組んだプログラムの一部を載せておきます。 #include <stdio.h> #include <math.h> main() { float a , b; float x[5]; printf("正の数字を2つ入力して下さい(小数点を含めて4ケタまで):\n"); for(;;) { printf("\na="); scanf("%f" , &a); if(a>=0 && a<=9999 && a) { break; } else { printf("****aに入力エラー****\n"); printf("数字は4ケタ以内の正数を入力:\n"); continue; } } for(;;) { printf("b="); scanf("%f" , &b); if(b>=0 && b<=9999 && b) { break; } else { printf("****bに入力エラー****\n"); printf("数字は4ケタ以内の正数を入力:\n"); continue; } } x[0] = a+b; x[1] = a-b; x[2] = a*b; x[3] = a/b; x[4] = a||b; x[5] = a&&b; printf("\n"); printf("int型 結果:\n足し算=%d\n" , (int)x[0]); printf("引き算=%d\n" , (int)x[1]); printf("掛け算=%d\n" , (int)x[2]); printf("割り算=%d\n" , (int)x[3]); printf("論理和=%d\n" , (int)x[4]); printf("論理積=%d\n" , (int)x[5]); printf("\n"); printf("float型 結果:\n足し算=%f\n" , x[0]); printf("引き算=%f\n" , x[1]); printf("掛け算=%f\n" , x[2]); printf("割り算=%f\n" , x[3]); printf("論理和=%f\n" , x[4]); printf("論理積=%f\n" , x[5]); ・ ・ ・ getchar(); }

  • C言語のswitch文について間違っているところを教えてください

    初めに初心者ですので間違っているところは説明つきの回答をしていただければありがたいです。 今回switch文を使って 「足し算、引き算、掛け算、割り算」のプログラムを作ったつもりなのですが、intを使うと割り算の小数点が出ないしfioat文を使うとswitch文には、使えないと出るしどのようにしたら良いのか御回答よろしくお願いします。 (今は、int文でプログラムを作っているつもりです。) #include <stdio.h> void main (void) { int a,b,k; printf("どのような計算をしたいか数字を選んでください。\n"); printf(" 1.足し算 (例 a+b)\n"); printf(" 2.引き算 (例 aーb)\n"); printf(" 3.掛け算 (例 a×b)\n"); printf(" 4.割り算 (例 a÷b)\n"); printf("計算したい番号を入力してください "); scanf("%d",&k); switch (k){ case 1: printf("aを入力してください "); scanf("%d",&a); printf("bを入力してください "); scanf("%d",&b); printf("\n答えは a+b で %d です\n",a+b); break; case 2: printf("aを入力してください "); scanf("%d",&a); printf("bを入力してください "); scanf("%d",&b); printf("\n答えは aーb で %d です\n",a-b); break; case 3: printf("aを入力してください "); scanf("%d",&a); printf("bを入力してください "); scanf("%d",&b); printf("\n答えは a×b で %d です\n",a*b); break; case 4: printf("aを入力してください "); scanf("%d",&a); printf("bを入力してください "); scanf("%d",&b); printf("\n答えは a÷b で %d です\n",a/b); break; default: printf("明記してあるどれかの数字を再入力してください"); } }

  • すいません。。改めて質問!!

    #include<stdio.h> #define NMAX 200 int n; int a[NMAX], x[NMAX]; void yomikomi() { for(n=0; scanf("%d%d",&a[n],&x[n])!=EOF;n++); return; } void hyouzi() { int i; for(i=0;i<n;i++) printf("%5d %5d\n",a[i],x[I]); return; } void seiretu() { int i,j,max,k,w; for(i=0;i<n-1;i++){ max=x[i];k=i; for(j=i+1;j<n;j++) if(x[j]>max){ max=x[j];k=j; } w=a[k];a=[k]=a[i];a[i]=w; x[k]=x[i]; x[i]=max; } return; } main() { printf("sorting\n"); yomikomi(); printf(\nInput data\n"); hyouzi(); seiretu(); printf(\nSorted data\n); hyouzi(); return(0); } これを改良して偶数と奇数に分けてソートするプログラムがわかればいいのですが。。まだ慣れないものですいませんでした。

  • どこが悪いのか・・・

    初めまして、こんばんわ。 学校の課題で、二次方程式のXの解を求めるC言語のプログラムを作ったのですが 何故か巧く起動しません。 よくわかりません・・・。 是非、何処が悪いのか指摘していただくと嬉しいです。 /*2-10(su210.c)*/ #include <stdio.h> #include <math.h> main() { int a,b,c; float D,x,y; printf("a*x^2+b*x+c=0のときa.b.cを入力して下さい。\n"); printf("a="); scanf("%d",&a); printf("b="); scanf("%d",&b); printf("c="); scanf("%d",&c); if(a=0){ if(b=c=0) printf("xはすべての実数をとる。"); else{ if(c=0&&b!=0) printf("x=0"); else{ if(b=0&&c!=0) printf("解なし。"); else{ if(b!=0&&c!=0) {x=-c/b; printf("x=%f",x);} } } } } else{ if(a!=0){ D=b^2-4*a*c; if(D>0){ x=(-b+sqrt(D))/2/a; y=(-b-sqrt(D))/2/a; printf("判別式はD>0です。\n"); printf("x1=%f\n",x); printf("x2=%f\n",y);} else{ if(D=0){x=-b/2*a;printf("判別式はD=0です。\n");printf("x=%f",x);} else{ if(D<0){printf("判別式はD<0です。\n");printf("解なし。");} } } } } }

  • プログラミングCの四則計算について質問です

    どうしてもわからなかったのでご指摘お願いします。 以下のプログラムを四則計算ができるプログラムに変更したいのですがどこを直せばいいのでしょうか? /* ansp5_7 */ #include <stdio.h> void wasa(int a,int b,int *w,int *x,int *y,float *z); main() { int d1,d2,wa,sa,seki; float syou; printf("data1,data2="); scanf("%d,%d",&d1,&d2); wasa(d1,d2,&wa,&sa,&seki,&syou); printf("wa=%d,sa=%d,seki=%d,syou=%5.2f\n",wa,sa,seki,syou); } void wasa(int a,int b,int *w,int *x,int *y,float *z) { *w=a+b; *x=a-b; *y=a*b; *z=(float)a/b; }

  • 平均の出し方について

    プログラミング始めたばかりで簡単なことで戸惑っています。 例えば二つの整数の平均を求める場合 int a,b; printf("%d%d\n",a,b); scanf("%d%d",&a,&b); このあとどのようにすれば出せるのでしょうか。 私はprintf("%d\n",(a+b)/2)と入力するのですがうまくいきません。 よろしくお願いします。

専門家に質問してみよう