• 締切済み
  • 困ってます

C言語。どうしてコンパイルできません^^;

最近プログラミングの勉強をはじめました。 C言語を勉強しています。 /*入力した値の、平均値・最大値・最小値・を出す。*/ #include <stdio.h> int main(void) { int x[5],i,j,w,x,y,z,sum; printf("5つの実数の平均、最大値、最小値を求めます\n"); sum = 0; for(i=0; i<5; i++){ printf("値%d:",i+1); scanf("%d",&x[i]); sum += x[i]; } for(y=0; y<5; y++){ for(j=0; j<4; j++){ w=j+1; if(x[j] < x[w]){ z = x[i]; x[i] = x[w]; x[w] = z; } } } printf("平均値:%f\n最大値:%d\n最小値:%d\n", (double)sum/5, x[0], x[4]); return 0; } Microsoft Visual C++ 2008 Express Edition でコンパイルをしようとしたのですが、 「error C2040: 'x' : 'int' は 'int [5]' と間接操作のレベルが異なります。」 と出てできませんでした^^; 何度も見直したのですが、どうしても間違っている場所がわかりません^^; どこがいけないのでしょうか^^;

共感・応援の気持ちを伝えよう!

  • 回答数11
  • 閲覧数1294
  • ありがとう数12

みんなの回答

  • 回答No.11
  • asuncion
  • ベストアンサー率32% (1727/5356)

>  min、maxの両方に x[0] を入れるとまずいと思います。どちらか1つでしょう。 そうかな? x[0]~x[4]がすべて同じ値のときにどういう結果を得るべきかを 考えると、minもmaxもx[0]で初期化しておくのが適切でありましょう。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • c言語 for文

    /*指定された個数だけ整数を読み込んで合計値・平均値を算出*/ #include <stdio.h> int main(void) { int i; int sum=0; int num,tmp; printf("整数は何個ですか:"); scanf("%d",&num); for(i=0;i<num;i++) {printf("No.%d:",++i); scanf("%d",&tmp); sum = sum + tmp; } printf("合計値:%d\n",sum); printf("平均値:%.2f\n",(double)sum / num); return(0); } C言語の勉強を始めたばかりのものです。 指定された個数だけ読み込めません 汗 前置と後置をまぜたあたりがよくないのかなと思うのですが。。。 どうしておかしくなるのか教えてください。 内部でどういった処理が行われているのかまだあまりわからない状態です。 ちなみに4と入力した結果は以下です。 整数は何個ですか:4 No.1:4 No.3:3 合計値:7 平均値:1.75

  • 平均の問題(2)

    間違って前回の質問を締め切ってしまったので、もう一度お願いします。 申し訳ありません。 C言語の問題です。 1つの整数n(最大20)をキーボードから入力する。 続いてn人分の身長をキーボードから入力する。 平均身長、それぞれの身長、その身長と平均身長との差を1行ずつ出力せよ。 #include < stdio.h > int main(void) { int i, n; int s[20]; int sum; sum=0; scanf("%d", &n); for(i=0; i<n; i++){ if(n<=20){ scanf("%d", &s[i]); sum += s[i]; } } printf("平均:%f\n", (double)sum/n); for(i=0; i<n; i++){ printf("%d\n", s[i] ); printf("%f\n", s[i]-(double)sum/n); } return(0); } という風に考えたのですが、これだと結果が1行で表示されません・・・。 1行で表示するにはどうしたら良いのでしょうか? 初歩的な質問ですみません。 回答よろしくお願いします。

  • C言語の配列について

    配列を20 定義し値を入力して合計値を出したいのですがどうすればよいのでしょうか 下のソースでエラーはおこりませんでした 何がちがうのでしょうか #include <stdio.h> int main() { int a[20]={}; int i, sum; printf("整数を入力してください:"); scanf("%d",&a); printf("\n"); for (i = 0; i < 10; i++) { sum += a[i]; } printf("sum= %d\n", sum); return 0; }

  • 回答No.10

★回答者No.7です。 ・追記事項。 >負数を入力したときに破綻しそうです。  負数も入力要素に考えるなら『max = INT_MIN』にした方が良いですね。 >min, maxともx[0]で初期化する方がよさそうです。  min、maxの両方に x[0] を入れるとまずいと思います。どちらか1つでしょう。 ・tanaka022さんが見ているか分かりませんが配列を使わない方法も載せます。  2つのサンプルを見比べて下さい。 #include <stdio.h> #include <limits.h>  // INT_MAX // 入力回数を定義 #define MAX_INPUT  (5) // メイン関数 int main( void ) {  int min = INT_MAX;  // 最小  int max = INT_MIN;  // 最大  int sum = 0;   // 合計  int i, n;    printf( "%dつの整数の平均、最大値、最小値を求めます。\n", MAX_INPUT );  // 入力  for ( i = 1 ; i <= MAX_INPUT ; i++ ){   printf( "値%d:", i );   scanf( "%d", &n );   // 合計   sum += n;   // 最小と最大   if ( n < min ) min = n;   if ( n > max ) max = n;  }  // 結果表示  printf( "\n" );  printf( "平均値:%f\n", ((double)sum / MAX_INPUT) );  printf( "最小値:%d\n", min );  printf( "最大値:%d\n", max );  return 0; }

共感・感謝の気持ちを伝えよう!

  • 回答No.9
  • asuncion
  • ベストアンサー率32% (1727/5356)

> ※なお、最初に min、max の値を初期化します。初期化の値に注意。 負数を入力したときに破綻しそうです。 min, maxともx[0]で初期化する方がよさそうです。

共感・感謝の気持ちを伝えよう!

  • 回答No.8

> xがひとつ余分でした汗 そこは、コンパイルができ無い理由ですが、それとは別に、 > 「変数名を間違っています」 変数「 j 」とすべきところに、 間違って変数「 i 」を指定しているところがありますけど・・・ #そのため、コンパイルは通っても、ちゃんと動かない。 投稿時の書き間違いで、本物のコードは正しく指定しているならそれでよいのですが・・・

共感・感謝の気持ちを伝えよう!

  • 回答No.7

★模範解答 #include <stdio.h> #include <limits.h>  // INT_MAX // 入力回数を定義 #define MAX_INPUT  (5) // メイン関数 int main( void ) {  int i, x[ MAX_INPUT ];  int min = INT_MAX;  // 最小  int max = 0;   // 最大  int sum = 0;   // 合計    printf( "%dつの整数の平均、最大値、最小値を求めます。\n", MAX_INPUT );  // 入力と合計  for ( i = 0 ; i < MAX_INPUT ; i++ ){   printf( "値%d:", (i + 1) );   scanf( "%d", &x[i] );   sum += x[ i ];  }  // 最小と最大  for ( i = 0 ; i < MAX_INPUT ; i++ ){   if ( x[i] < min ) min = x[ i ];   if ( x[i] > max ) max = x[ i ];  }  // 結果表示  printf( "\n" );  printf( "平均値:%f\n", ((double)sum / MAX_INPUT) );  printf( "最小値:%d\n", min );  printf( "最大値:%d\n", max );  return 0; } その他: ・『x[ MAX_INPUT ];』を使わずに平均値、最小値、最大値を求められます。  入力値を読むときに最大、最小の if 文を記述すればいいので。  この方法なら最大、最小の求め方も入れ替える(ソート)するよりも  楽に求められます。  ※なお、最初に min、max の値を初期化します。初期化の値に注意。 ・改良してみて下さい。

共感・感謝の気持ちを伝えよう!

  • 回答No.6
  • asuncion
  • ベストアンサー率32% (1727/5356)

> これであっているでしょうか 1)main関数の最後に閉じカッコ } を入れましょう。 2)入力値は「5つの実数」ですか?「5つの整数」ですか?   入力を促すメッセージと、実際に入力する値の種類とが矛盾しています。

共感・感謝の気持ちを伝えよう!

  • 回答No.5

実行してみましたか? たとえば、6,2,4,5,7 と入れてみてください。(最小値が2番目にくるように) 最小値がどうなっているでしょう。 答えは、if文の中の入れ替え処理の部分です。 変数をよーくみてみると、ここには関係ない変数がでてきてます。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

これであっているでしょうか #include <stdio.h> int main(void) { int x[5],i,j,y,z,sum; printf("5つの実数の平均、最大値、最小値を求めます\n"); sum = 0; for(i=0; i<5; i++){ printf("値%d:",i+1); scanf("%d", &x[i]); sum += x[i]; } for(y=0; y<5; y++){ for(j=0; j<4; j++){ if(x[j] < x[j+1]){ z = x[j]; x[j] = x[j+1]; x[j+1] = z; } } } printf("平均値:%f\n最大値:%d\n最小値:%d\n", (double)sum/5, x[0], x[4]); return 0;

  • 回答No.4

単純に、 「変数名を間違っています」 よ。その所為で変な結果になりますね。 #よーく見てみましょう。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございますm(_ _)m xがひとつ余分でした汗

  • 回答No.3

実際にコンパイルが成功して実行すればわかりますが、処理にあやまりがありますね。(後半部分の2重forループ内の処理) 最初のforループ内で大小判定を2回やった方がいいようにも思えますが、いろいろと勉強していってください。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

2回というのは、 for(j=0; j<4; j++){ w=j+1; if(x[j] < x[w]){ z = x[i]; x[i] = x[w]; x[w] = z; for(j=0; j<4; j++){ w=j+1; if(x[j] < x[w]){ z = x[i]; x[i] = x[w]; x[w] = z; ということですか?? すみません 違っていたら勉強をします^^;

  • 回答No.2

エラーメッセージがわかりにくいかもしれませんが、xが重複してるためのエラーです。 int x[5],i,j,w,x,y,z,sum; のところを int x[5],i,j,w,y,z,sum; にしてみてください。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 コンパイルが成功しました^^

関連するQ&A

  • この数列プログラムの解説お願いします c言語です

    初項が2です。 #include<stdio.h> int main(void){ int a, n, k, sum = 0; printf("Type k\n"); scanf("%d",&k); a = 2; for(n = 2; n <= k+1; n++){ sum += a; printf("a = %d, sum = %d\n",a, sum); a += (n-1)*(n-1); } return 0; } for文の()内の意味とかよくわかんないです

  • C言語のプログラム添削お願いします

    #include<stdio.h> int main(void) { int a[4]; int i=0; int n; int sum=0; printf("正数を入力してください\n"); while(i<=4) {scanf("%d",&n); if(n>=0) {a[i]=n; sum=sum+a[i]; i++; } else{printf("正数を入力してください");} } printf("正数の合計値は%dです",sum); printf("正数の平均値は%lfです",(double)(sum/5)); return(0); } 上記は正数のみ配列に保存し、その合計と平均を表示するプログラムを 製作しようとして書いたものですが次のような問題点があり正常に機能しません。 (1)a[i]=n;をn=a[i];と置き換えると不正な値が表示される (2)平均値の小数点以下の値がおかしい   (例)8+8+8+9+8と入力し合計値41に対し、平均値が8.000000 解決法が分からず困っています。どなたかお力添えお願いします。

  • c言語で3人分の合計と平均を出を出したいのですが・・・

    #include <stdio.h> void main (void) { int i; int sum = 0; int count[3]; char ss[3][30]; for (i = 0; i < 3; i++){ printf("氏名: "); gets(ss[i]); printf("得点: "); scanf("%d" , &count[i]); } for (i = 0; i < 3; i++){ sum = sum + count[i]; } printf("\n\n"); printf("合計 :%d point\n" ,sum); printf("平均点:%f point\n" ,(double)sum/i); } このようなものを作ったのですが、実行すると1人分を入力したあと2人目の入力部分の表示が「氏名:得点:」となってしまい、氏名入力を飛ばし得点入力になります。 どのようにすれば2人目の氏名入力を飛ばさずに進行するのか教えてください。

  • C言語に詳しい方、教えていただけませんか?

    n個の実数をキーボードから入力して総和を求めるプログラムを書いたのですが、結果が+NANとなってしまいます。 また、値をキーボードから入力する際、小数にするとすぐにプログラムが終了してしまいます。例えば、a[0]=1.0とすると、 a[1]=a[2]=a[3]=a[4]=合計は+NANと表示され終了してしまいます。 ちゃんと小数を入力でき、結果も正しく表示されるように間違いを指摘していただけませんか?よろしくお願いします。 (nは5としました) #include <stdio.h> #define n 5 double souwa(double a[n]); int main(void) { int i; double sum, a[n]; for(i=0; i<=n-1; i++){ printf("a[%d] = ",i); scanf("%d",&a[i]); } sum = souwa(a); printf("合計は%f\n",sum); return 0; } double souwa(double a[n]) { int i; double sum = 0.0; for(i=0; i<=n-1; i++){ sum += a[i]; } return sum; }

  • C言語から質問です。

    C言語から質問です。 /* main関数の中で初期化した配列 data[10]={60,30,70,25,20,9,92,55,20,10}; を関数 keisan() に引数として渡して、関数keisan()内で 平均値、最大値,最小値 を求め、その結果をmain関数に戻し、main関数内で 平均値、最大値,最小値を表示させるプログラムを作成せよ。 int keisan(const int data[], int data_kosuu, double answer[]) { return 0; } とする。 (注) プロトタイプ宣言を用いよ。 ヒント:平均値,最大値,最小値の3つの値を main関数に戻すやり方として、配列answer[]を使うとよい。 data_kosuu は、配列の要素数を与えるものです。 ヒント: (int型の変数)/(int型の変数)=int型の値です。 int型同士の割り算の答えANSWERをdoubleにしたい場合は、  ANSWER=(double)(int型の変数)/(int型の変数);    と(double) キャストという操作をする必要がある */ #include <stdio.h> int keisan(const int data[], int data_kosuu, double answer[]); int main(void) { int i; int a[10]={60,30,70,25,20,9,92,55,20,10}; // この値を使ってください double ans[3]; keisan(a,10); /* keisan関数に配列と配列要素数を引数で与える */ for(i=0; i<10 ; i++) printf("a[%d]=%d\n",i,a[i]); printf("平均=%lf 最小値=%d 最大値=%d\n",ans[0],ans[1],ans[2]); return 0; } /* 合計・最大値・最小値を求める関数 */ int keisan(const int data[], int data_kosuu, double answer[]) { int i; int sum; int min,max; min=10; /* min の初期化 */ max=10; /* max の初期化 */ sum=0; /* 合計値の初期化 */ for (i=0; i<10 ; i++){ sum = sum+data[i]; if(data[i] > max) max=data[i]; if(data[i] < min) min=data[i]; } sum=sum/10; answer[0]=sum; answer[1]=min; answer[2]=max; } エラー error C2198: 'keisan' : 呼び出しに対する引数が少なすぎます。 とでて先に進めません。 教科書などを見ても間違いがわかりません; 虫食いになってるところを自分なりにやってみたため、 根本的に間違ってるかもしれませんが、 どうかアドバイスや指摘などをお願いします。

  • わかる人 フローチャート

    このプログラムをフローチャートに直しなさい void main() { int i, n; int sum = 0; printf("n?\n"); scanf("%d",&n); for (i=0; i<=10; i++) { sum = sum + i; } printf("sum = %d\n",sum); }

  • C言語!プログラム書いたのですがエラーです!

    課題内容 キーボードから数字を入力してその値までの合計を表示する。 さらに入力した値が偶数なら0から入力した値までのすべての偶数の和を 入力した値が奇数なら1から入力した値までのすべての奇数の和を表示するプログラム。 #include<stdio.h> int main(void) { int i, n, sum; sum=0; scanf("%d",&n); printf("入力値:%d\n", n); if(n%2 = 0) { for(i=0;i<=n;i+=2) { sum=sum+i; } printf("合計値:%d\n",sum); } else { for(i=1;i<=n;i+=2) { sum=sum+i; } printf("合計値:%d\n",sum); } return(0); } これでコンパイルすると10行目に左辺値が必要とでます。 どうすればよいでしょうか? 教えてください。よろしくお願いします。

  • 分散を求めるプログラム

    n人の点数を読み込みそれらの平均、分散を計算するプログラムを作りたいのですが分散の式がよく分かりません。 分散を求める式は第i番目の点数をxi、平均をμとすると 分散=1/nΣxi^2-μ^2 で、プラグラムを作ってみると #include<stdio.h> int main (void) { int i; int sum=0; int num,tmp; printf("何人ですか"); scanf("%d",&num); for(i=0; i<num; i++) { print("No. %d ", i+1) scanf("%d",&tmp); sum += tmp; } printf("平均:%.3f\n",(double)sum/num); printf("分散:%.3f\n",(double){(sum-sum/num)*(sum+sum/num)}/num); return(0); } というプログラムを作ってみたのですが分散の計算がうまくいきません。どなたか分散の計算のプログラムを教えて下さい。 C言語初めてまもないので不備があったらすみません。

  • for文

    #include <stdio.h> int main(void) { int i; int sum=0; int num, tmp; printf("整数は何個かな:"); scanf("%d",&num); for(i=0; i<num; i++){ printf("No.%d:",i+1); scanf("%d",&tmp); sum+=tmp; } printf("合計値は:%d\n",sum); printf("平均値は:%.2f\n", (double)sum/num); return(0); } 上の文のforの箇所を for(i=1; i<=num; i++){ printf("No.%d:",i); scanf("%d",&tmp); sum+=tmp;   } としても結果的に同じですよね? どっちでもいいかどうか迷ってます。教えて下さい。

  • 平均の問題

    C言語の問題です。 1つの整数n(最大20)をキーボードから入力する。 続いてn人分の身長をキーボードから入力する。 平均身長、それぞれの身長、その身長と平均身長との差を1行ずつ出力せよ。 という問題なのですが、「それぞれの身長、その身長と平均身長との差を1行ずつ出力」という部分のプログラムの書き方がわかりません。 平均の身長を出す部分まで考えてみたのですが・・・ #include < stdio.h > int main(void) { int i, n, sum; int s[20]; sum=0; scanf("%d", &n); for(i=0; i<n; i++){ if(n<=20){ scanf("%d", &s[i]); sum += s[i]; } } printf("%f\n", (double)sum/n); return(0); } ここからどのようにすればいいのでしょうか? ご指導いただけたら嬉しいです。 回答よろしくお願いします。