• 締切済み

プログラミングC

次のプログラムは、キーボードから5個の整数データを入力し、すべてのデータ入力が終わった後で、実行例に示すように、それらのデータを入力順とは逆の順序で表示するプログラムである。このプログラムが正しく動作するように下線部を埋め、プログラムを完成させなさい。 int ______,i; for(i=0;i<______;i++) { printf("NO.%d:",i++) scanf("%d", &a[i]); } for(i=4;_____;i++) printf("%d,",a[i]); printf("%d\n",a[0]); [実行例] No.1:5 No.2:3 No.3:8 No.4:2 No.5:2 2,2,8,3,5

みんなの回答

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.5

#4です。 一応穴埋めした箇所を説明しておきます。 最初の下線部 printf(const char*, ...); int scanf(const char*, ...); #define printf(s,i) printf((s),(i)+1); int main(void){int a[5], 2番目の下線部 1;i++)for(int i=0;--i<4; 3番目の下線部 i>=0;i--) #undef printf printf("%d\n", a[i]);} #define printf(...) printf(; です。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

かなり難問でしたが、何とか動くものを作ることができました。 int printf(const char*, ...); int scanf(const char*, ...); #define printf(s,i) printf((s),(i)+1); int main(void){int a[5],i; for(i=0;i<1;i++)for(int i=0;--i<4;i++) { printf("NO.%d:",i++) scanf("%d", &a[i]); } for(i=4;i>=0;i--) #undef printf printf("%d\n", a[i]);} #define printf(...) printf(;i++) printf("%d,",a[i]); printf("%d\n",a[0]);

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

> このプログラムが正しく動作するように下線部を埋め、プログラムを完成させなさい。 解答: これは部分でしかなく、「正しく動作するように」するには「下線部を埋め」るだけでは不可能。 main関数の定義に入れるとか、必要なヘッダを#includeするとかいった、下線部以外にも修正しないと「プログラムとして完成」しない。 それを直しても > printf("NO.%d:",i++) > scanf("%d", &a[i]); で文法エラーになるので「プログラムとして完成」しない。 下線部だけで仕様通りに動くように考えたんだけどなぁ。 文法エラー見落としてた。 折角なので参考解答: 上記、「プログラムとしての形式」「文法エラー」を修正した上で int f0=0, a[7],i; for(i=0;i<1?(i=1):(i-=1,a[i-2]=a[i],i<=5) ;i++) for(i=4;f0?(i-=2,i>0):(f0=1,i>0);i++)

  • Wingwrong
  • ベストアンサー率38% (5/13)
回答No.2

何がわからないかを聞くのではなくこういうクイズ形式の質問の場合、 この問題を作った出題者の意図は、「問題を解かせたい」という一点に限られます。 その問題を質問サイトで聞く以上、この投稿者は出題者とは別人で、 まして「質問サイトの利用者にこの問題を解かせたい」という意図などあるわけがありません。 つまり出題者の意図は「この問題を投稿者に解かせたい」ということにあるので、 サイト閲覧者である我々が解く意味はないどころか、 むしろ回答することがこの問題の出題者に対する侮辱であるとも言えるのです。 そしてその出題者の意図を最も知っていながらこのような無礼を働く投稿者は、 出題者を侮辱するマナーのかけらもない最低な人間であるということがここに証明されるのです。

  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.1

で、質問はなんですか?

関連するQ&A

  • C言語プログラミングの問題がわかりません・・・。

    ただいまC言語を勉強している者です。 【入力するデータ数と各データ(整数)を入力していき,0 以下の整数の数,正の整数の数,0 以下の整数の合計,正の整数の合計を求めるプログラムを作成せよ。】 という問題があり、とりあえず #include "stdio.h" void main() { int i,j,k,l=0,m=0,goukeisei=0,goukeifu=0; printf("入力するデータ数:"); scanf("%d",&i); for(j=1;j<=i;j++); { printf("データを入力してください(整数):"); scanf("%d",&k); if(k>0){ l++; goukeisei+=k; }else{ m++; goukeifu+=k; } } printf("正の整数の数%d\n",l); printf("0以下の整数の数%d\n",m); printf("正の整数の合計%d\n",goukeisei); printf("0以下の整数の合計%d\n",goukeifu); } と作ってみたのですが、入力するデータ数の繰り返しがされません(1回入力して終わりになってしまいます);; for文の使い方が間違っているのでしょうか・・・ 詳しい方教えてくださいm( _ _ )m 尚環境はXPでVC++2008を使っています。よろしくお願いします。

  • C言語プログラミング

    台形の面積を求めるプログラムを作りたいのですが、最後のmensekiの出力の仕方がわかりません。printf以降のプログラムを教えてください。 #include<stdio.h> #include<conio.h> void main() { int number1,number2,number3,menseki; printf("上底を入力してください:"); scanf("%d",&number1); printf("下底を入力してください:"); scanf("%d",&number2); printf("高さを入力してください:"); scanf("%d",&number3); menseki=(number1+number2)*number3/2; printf( ここがわかりません getch(); }

  • プログラミング・C言語の配列(単純選択ソート)についてです

    最近プログラミングを勉強し始めた初心者です。 今、配列について勉強していて あるプログラムを作成しています。 それは10個の実数を入力して、入力された実数を降順に並び替えるものなのですが、 降順に並び替えることができません(泣 どこが違うのか教えていただきたいのですが・・・ よろしくお願いします。 #include <stdio.h> #define NUMBER 10 int main(void) { int i, j, min, min_a, temp; double zissu[NUMBER]; printf("%d個の実数を入力してください", NUMBER); min=i; printf("date[%d]:", i); scanf("%lf", &zissu[i]); for(j=i+1; j<NUMBER; j++) { if(zissu[j] < zissu[min]) min_a =j; } temp = zissu[min]; zissu[min] = zissu[min_a]; zissu[min_a] = temp; } for(i = 0; i < NUMBER; i++) printf("date[%d]=%lf \n", i, zissu[i]); return (0); } 【入出力例】 10個の実数を入力してください data[0]:24.2 data[1]:2 ・・・ data[9]:9 降順にソートしました data[0] = 2 data[1] = 9 data[2] = 24.2 ・・・ みたいにしたいのです。 よろしくお願いします

  • プログラミングC

    以下に示すプログラムは、キーボードから39文字以下の文字列を入力した後で、その文字列を表示するプログラムである。ただし、文字列の表示においては、printf命令における変換指定で、%sを使用するのが一般的であるが、以下のプログラムあえて%sを使用せずに、%cを使っている。このプログラムについてキーボードから入力される文字列の文字数が391文字以下である限り、その文字列を正しく表示できるよう、下線部を埋めてプログラムを完成させなさい。 char x[40],i printf("39文字以下の文字列を入力:"); scanf("%s",x); for(i=0;x[i]_____;i++) printf("%c",x[i]); printf("です。\n"); [実行例] 39文字以下の文字列を入力:programming 入力された文字列はprogrammingです。

  • C言語 プログラミングで行詰まりました…

    標準入力(キーボード)からi,jk,nの値を入力し、次の漸化式を計算し、X_0からX_nまで求めるプログラムを作成したいのですが、うまく表示されません。どかがおかしいのかご指摘お願いします。 <漸化式> X_n=(a+b)/X_(n-1) , X_0=c(n=0) ================================================================== #include<stdio.h> float f_X(int a,int b,float c) { float y; y=(a+b)/c; return y; } int main (void) { int number,i,j; float k,l,n,X; printf("i:"); scanf("%d", &i); printf("j:"); scanf("%d", &j); printf("k:"); scanf("%f", &k); printf("n:"); scanf("%f", &n); X=k; printf("X_0= %.6f\n",X); for(number=1;number<=n;number++) { l=f_X(i,j,X); printf("X_%d= %.6f \n",number,l); X=l; } return 0; } ===================================================================

  • C言語プログラム

    2つの整数を入力させ、それらが等しい場合hitoshii、異なる場合にはhitoshikunaiと出力するプログラムを作りたいのですが、うまくいきません。間違っているところを教えてください。 #include<stdio.h> #include<conio.h> void main() { printf("整数を入力してください:"); int number1; scanf("%d",number1); printf("整数を入力してください:"); int number2; scanf("%d",number2); if(number1==number2) { printf("hitoshii"); } else { printf("hitoshikunai"); } getch(); }

  • C言語について

    #include <stdlib.h > #include <stdio.h> double sum ( double data[] , int number) { double result; int a ; result = 0; for (a = 0; a < number; a+1){ result += data[a]; } return (result); } double average ( double data[] , int number) { double result; result = sum(data,number)/number; return (result); } int main ( void ) { double heikin; double data[9]; double average; int number,i; printf("数値の数を入力(1~10) = "); scanf("%d",&number); printf("データを入力 "); for( i=0;i<number;i++ ) { printf("%d個目 = ",i+1); scanf("%d",&data[i]); } heikin = average(data,number); printf("平均は%lfです\n",heikin);//文を使って平均値(heikin)を出力 return(EXIT_SUCCESS); } というプログラムがありエラーで 「35行目」で記述エラーを発見しました。 「function pointer」を付け忘れています。 と出てきます。ほかのサイト様で写真とかありえないといわれましたのでテキストで再度質問させていただきました。 よろしくお願いします。 前投稿から編集もしているので少しプログラムが違います。

  • Cプログラミング

    #include <stdio.h> main(){ int i; int n; double data[100]; double total; double average; printf ("# of data ="); scanf ("%d" , &n); for (i = 0; i < n; i++){ printf("data[%d] = ", i+1); scanf("%lf" , &data[i]); } total = 0; for (i = 0; i < n; i++){ total = total +data[i]; } average = total / n; printf("total = %g\n", average); for (i = 0; i < n; i++){ printf("data[%d] : %6.1f %%\n" , i+1, (data[i] - average) / average * 100.0); } } 上のプログラムに対し、増加率の代わりに標準偏差を計算し出力するように改造せよ。という課題が出たのですが、標準偏差の計算の仕方が分かりません。教えてください。 よろしくお願いします。

  • C言語 プログラミング 行列演算

    下記のプログラムのおかしい点と解決法を教えてください。 コンパイルは通りますがうまく動きません。。 #include<stdio.h> #define MAX 500 int main(void){ int matrA[MAX][MAX],matrB[MAX][MAX],matrC[MAX][MAX],l,m,n,i,j,k; printf("lとmを入力してください:"); scanf("%d",&l); scanf("%d",&m); printf("行列Aを入力してください"); for(i=0;i<l;i++){ printf(">"); for(j=0;l<m;j++){ scanf("%d",&matrA[i][j]); } printf("\n"); } printf("nを入力してください(m = %d):",m); scanf("%d",&n); printf("行列Bを入力してください"); for(i=0;i<m;i++){ printf(">"); for(j=0;j<n;j++){ scanf("%d",&matrB[i][j]); } printf("\n"); } printf("C=\n"); for(i=0;i<l;i++){ for(j=0;j<n;j++){ for(k=0;k<m;k++){ matrC[i][j]+=matrA[i][k]*matrB[k][j]; } printf("%d",matrC[i][j]); } printf("\n"); } }

  • プログラミングで二番目に大きい数を表示する

    指定された個数(100個以下)だけ整数を読み込んで,読み込んだ整数の一覧,それらのうちの最大値と二番目に大きい値とを表示するプログラムを作成。最大となる値が複数入力された場合も正しく処理する。 このプログラムで入力した数字が全部同じ時、二番目に大きい値はありません。と表示したいのですが、どのようにしたらいいのかわかりません。教えてください。あとこのプログラムで最大値と二番目に大きい値出せたのですが、念のため問題ないか確認お願いします。 #include <stdio.h> #define NUMBER 100 /*整数の個数の上限*/ int main(void) { int i; int num; int kazu[NUMBER]; int max; int sec; printf("整数は何個ですか:"); scanf("%d", &num); puts("整数を入力してください。"); for(i = 0; i<num; i++){ printf("%3d個目:",i+1); scanf("%d", &kazu[i]); } printf("入力された整数は%d個で、\n",num); for(i=0;i<num;i++) printf("%d ",kazu[i]); printf("です。\n"); sec = max = kazu[0]; for(i=1; i<num; i++){ if(kazu[i]>max) max=kazu[i]; } for(i=0;i<num;i++){ if(kazu[i]>max){ sec=max; max=kazu[i]; }else if((max>kazu[i]) && (kazu[i]>sec)) sec=kazu[i]; } printf("最大値は%dです。 \n",max); printf("二番目に大きい値は%dです。\n", sec); return(0); }

専門家に質問してみよう